{"version":3,"sources":["../src/create-jest-config.ts","../src/paths-to-module-name-mapper.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Config as SwcConfig } from '@swc/types';\nimport type { Config } from 'jest';\nimport type { TsJestTransformerOptions } from 'ts-jest';\n\nexport type CreateJestConfigOptions = Exclude<Partial<Config>, 'rootDir'> & {\n    rootDir: string;\n};\n\nfunction createBaseJestConfig(options: CreateJestConfigOptions): Config {\n    return {\n        ...options,\n        rootDir: options.rootDir,\n        collectCoverageFrom: [\n            '<rootDir>/src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}',\n            ...(options.collectCoverageFrom ?? []),\n        ],\n        coverageDirectory: options.coverageDirectory ?? '<rootDir>/coverage',\n        coveragePathIgnorePatterns: [\n            'index.ts',\n            'index.tsx',\n            ...(options.coveragePathIgnorePatterns ?? []),\n        ],\n        testMatch: [\n            '<rootDir>/src/**/*.test.{ts,tsx}',\n            '<rootDir>/src/**/*.spec.{ts,tsx}',\n            ...(Array.isArray(options.testMatch)\n                ? options.testMatch\n                : typeof options.testMatch === 'string'\n                  ? [options.testMatch]\n                  : []),\n        ],\n    };\n}\n\nexport function createSwcJestConfig(\n    options: CreateJestConfigOptions,\n    swcConfig: SwcConfig = {},\n): Config {\n    return createBaseJestConfig({\n        ...options,\n        transform: {\n            '^.+\\\\.(t|j|mj|cj)sx?$': [\n                '@swc/jest',\n                {\n                    ...swcConfig,\n                    jsc: {\n                        ...swcConfig.jsc,\n                        parser: {\n                            ...swcConfig.jsc?.parser,\n                            syntax: 'typescript',\n                        },\n                        transform: {\n                            ...swcConfig.jsc?.transform,\n                            useDefineForClassFields: true,\n                        },\n                        keepClassNames: true,\n                        externalHelpers: false,\n                    },\n                } satisfies SwcConfig,\n            ],\n            ...(options.transform ?? {}),\n        },\n    });\n}\n\nexport function createTsJestConfig(\n    options: CreateJestConfigOptions,\n    tsJestConfig: TsJestTransformerOptions = {},\n): Config {\n    return createBaseJestConfig({\n        ...options,\n        transform: {\n            '^.+\\\\.(t|j|mj|cj)sx?$': [\n                'ts-jest',\n                {\n                    ...tsJestConfig,\n                } satisfies TsJestTransformerOptions,\n            ],\n            ...(options.transform ?? {}),\n        },\n    });\n}\n","import type { Config } from '@jest/types';\nimport type { CompilerOptions } from 'typescript';\n\ntype TsPathMapping = Exclude<CompilerOptions['paths'], undefined>;\ntype JestPathMapping = Config.InitialOptions['moduleNameMapper'];\n\nconst escapeRegex = (str: string) => str.replace(/[-\\\\^$*+?.()|[\\]{}]/gu, '\\\\$&');\n\nexport const pathsToModuleNameMapper = (\n    mapping: TsPathMapping,\n    { prefix = '', useESM = false }: { prefix?: string; useESM?: boolean } = {},\n): JestPathMapping => {\n    const jestMap: JestPathMapping = {};\n    for (const fromPath of Object.keys(mapping)) {\n        const toPaths = mapping[fromPath]!;\n        if (toPaths.length === 0) continue;\n        const segments = fromPath.split(/\\*/gu);\n        if (segments.length === 1) {\n            const paths = toPaths.map((target) => {\n                const enrichedPrefix =\n                    prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix;\n\n                return `${enrichedPrefix}${target}`;\n            });\n            const cjsPattern = `^${escapeRegex(fromPath)}$`;\n            jestMap[cjsPattern] = paths.length === 1 ? paths[0]! : paths;\n        } else if (segments.length === 2) {\n            const paths = toPaths.map((target) => {\n                const enrichedTarget =\n                    target.startsWith('./') && prefix !== ''\n                        ? target.substring(target.indexOf('/') + 1)\n                        : target;\n                const enrichedPrefix =\n                    prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix;\n\n                return `${enrichedPrefix}${enrichedTarget.replace(/\\*/gu, '$1')}`;\n            });\n            if (useESM) {\n                const esmPattern = `^${escapeRegex(segments[0]!)}(.*)${escapeRegex(segments[1]!)}\\\\.js$`;\n                jestMap[esmPattern] = paths.length === 1 ? paths[0]! : paths;\n            }\n            const cjsPattern = `^${escapeRegex(segments[0]!)}(.*)${escapeRegex(segments[1]!)}$`;\n            jestMap[cjsPattern] = paths.length === 1 ? paths[0]! : paths;\n        }\n    }\n\n    if (useESM) jestMap['^(\\\\.{1,2}/.*)\\\\.js$'] = '$1';\n\n    return jestMap;\n};\n"]}