UNPKG

@jpapini/jest-config

Version:

Jest configuration and utilities for JavaScript and TypeScript projects.

1 lines 8.02 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 ...(options.testMatch ?? []),\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"]}