UNPKG

@jpapini/jest-config

Version:

Jest configuration and utilities for JavaScript and TypeScript projects.

1 lines 8.31 kB
{"version":3,"sources":["../src/create-jest-config.ts","../src/paths-to-module-name-mapper.ts"],"names":[],"mappings":"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","file":"index.cjs","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"]}