@bluelovers/jest-config 1.1.11 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/README.md +203 -4
- package/dist/index.cjs.development.cjs +316 -101
- package/dist/index.cjs.development.cjs.map +1 -1
- package/dist/index.cjs.production.min.cjs +100 -67
- package/dist/index.cjs.production.min.cjs.map +1 -1
- package/dist/index.esm.mjs +125 -91
- package/dist/index.esm.mjs.map +1 -1
- package/dist/index.umd.development.cjs +319 -105
- package/dist/index.umd.development.cjs.map +1 -1
- package/dist/index.umd.production.min.cjs +104 -73
- package/dist/index.umd.production.min.cjs.map +1 -1
- package/index.d.ts +142 -0
- package/jest-preset.cjs +20 -0
- package/jest-preset.mjs +25 -0
- package/jest.config.js +108 -16
- package/package.json +31 -41
- package/src/default-setup-fles.ts +49 -0
- package/src/default-transform.ts +96 -0
- package/src/defaults.ts +66 -54
- package/src/helper.ts +100 -3
- package/src/index.ts +77 -15
- package/src/plugin/ts-jest.ts +82 -2
- package/src/print.ts +65 -1
- package/src/types.ts +33 -1
- package/src/util.ts +88 -0
- package/jest-preset.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.development.cjs","sources":["../src/plugin/ts-jest.ts","../src/defaults.ts","../src/helper.ts","../src/print.ts","../src/index.ts"],"sourcesContent":["import { TsJestTransformerOptions } from 'ts-jest';\nimport { IRuntime } from '../types';\n\nexport function defaultTsJestTransformerOptions(runtime: IRuntime)\n{\n\tconst old: TsJestTransformerOptions = runtime.jestConfig.globals?.['ts-jest'] ?? {};\n\n\tconst tsconfig = typeof old.tsconfig === 'object' ? old.tsconfig : {};\n\n\treturn {\n\t\t...old,\n\t\ttsconfig: {\n\t\t\tnoEmit: true,\n\t\t\temitDeclarationOnly: false,\n\t\t\tnoUnusedParameters: false,\n\t\t\tallowUnusedLabels: true,\n\t\t\tnoUnusedLocals: false,\n\t\t\tnoPropertyAccessFromIndexSignature: false,\n\t\t\tnoImplicitAny: false,\n\t\t\t...tsconfig,\n\t\t},\n\t} satisfies TsJestTransformerOptions\n}\n","import { IOptions, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { ITSToWriteableArray } from 'ts-type/lib/helper/array/readonly';\nimport { ITSWriteable } from 'ts-type/lib/helper/readonly';\nimport { _handleFileExtensions, _requireResolve } from './helper';\nimport { InitialOptionsTsJest } from 'ts-jest';\nimport { defaultTsJestTransformerOptions } from './plugin/ts-jest';\nimport { IRuntime } from './types';\n\nexport function defaultTestFileExtensions()\n{\n\tconst value = [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n//\t'js',\n//\t'jsx',\n//\t'mjs',\n//\t'cjs',\n\t] as const;\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * @see https://jestjs.io/docs/configuration#options\n */\nexport function defaultModuleFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t'json',\n\t\t'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultCoverageFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t//'json',\n\t\t//'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultTransformFileExtensions()\n{\n\tconst value = [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultCoveragePathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__snapshots__/',\n\t\t'/__tests__/',\n\t\t'/__test__/',\n\t\t//'**/node_modules/',\n\t\t//'**/__snapshots__/',\n\t\t//'**/__tests__/',\n\t\t'/dist/',\n\t\t'/test/',\n\t\t'/fixture/',\n\t\t'/__file_snapshots__/',\n\t\t'/__fixtures__/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultTestPathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__fixtures__/',\n\t\t'/__file_snapshots__/',\n\t\t'/fixtures/',\n\t\t'/__tests__/helpers/',\n\t\t'/__tests__/utils/',\n\t\t'__mocks__',\n\t\t'/dist/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultTransform(runtime: IRuntime)\n{\n\tconst paths: string[] = [\n\t\trequireResolveExtra('@bluelovers/jest-config').result,\n\t].filter(Boolean);\n\n\tconst opts: IOptions = {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t};\n\n\tlet ts_transform: InitialOptionsTsJest[\"transform\"][string] = _requireResolve('ts-jest') as 'ts-jest';\n\n\tts_transform = [ts_transform, defaultTsJestTransformerOptions(runtime)];\n\n\tconst { result: tsd } = requireResolveExtra('jest-tsd-transform', opts);\n\n\tif (tsd?.length)\n\t{\n\t\tconst { result: chain } = requireResolveExtra('jest-chain-transform', opts);\n\n\t\tif (chain?.length)\n\t\t{\n\t\t\tts_transform = [\n\t\t\t\tchain as 'jest-chain-transform', {\n\t\t\t\t\ttransformers: [\n\t\t\t\t\t\ttsd as 'jest-tsd-transform',\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tts_transform as 'ts-jest',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t] satisfies [\n\t\t\t\tstring,\n\t\t\t\tRecord<string, unknown>\n\t\t\t]\n\t\t}\n\t}\n\n\tconst value = {\n\t\t[`.(${_handleFileExtensions(defaultTransformFileExtensions(), '|')})$`]: ts_transform,\n\t} as const\n\treturn value as ITSWriteable<typeof value>;\n}\n","import { requireResolveCore, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { InitialOptionsTsJest } from 'ts-jest';\nimport { ITSValueOrArrayMaybeReadonly } from 'ts-type/lib/type/base';\nimport { console } from 'debug-color2';\nimport { IJestConfig } from './types';\nimport { defaultTestFileExtensions } from './defaults';\nimport { array_unique } from 'array-hyper-unique';\n\nexport function _requireResolve(name: string)\n{\n\tconst paths = [\n\t\trequireResolveExtra('@bluelovers/tsdx').result,\n\t\trequireResolveExtra('tsdx').result,\n\t].filter(Boolean);\n\n\tconst result = requireResolveCore(name, {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t});\n\n\tconsole.debug('[require.resolve]', name, '=>', result)\n\n\treturn result\n}\n\nexport function makeTestRegexConfig<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>): Pick<InitialOptionsTsJest, 'testMatch' | 'testRegex'>\n{\n\ttestExt ??= defaultTestFileExtensions() as any as T[];\n\tconst _testExt = _handleFileExtensions(testExt, '|')\n\n\treturn {\n\t\ttestMatch: null as undefined,\n\t\ttestRegex: [\n\t\t\t`\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t\t`__tests__\\/\\.*\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t],\n\t}\n}\n\nexport function _handleFileExtensionsCore<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>)\n{\n\treturn array_unique([testExt].flat()) as T[]\n}\n\nexport function _handleFileExtensions<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>, sep: string)\n{\n\treturn _handleFileExtensionsCore(testExt).join(sep)\n}\n\nexport function fixJestConfig<T extends IJestConfig>(jestConfig: T): T\n{\n\tif (jestConfig.testMatch)\n\t{\n\t\tjestConfig.testRegex = null;\n\t}\n\telse if (jestConfig.testRegex)\n\t{\n\t\tjestConfig.testMatch = null;\n\t}\n\n\t/**\n\t * Option \"testURL\" was replaced by passing the URL via \"testEnvironmentOptions.url\".\n\t */\n\tif (jestConfig.testURL)\n\t{\n\t\tjestConfig.testEnvironmentOptions ??= {};\n\n\t\tjestConfig.testURL = (jestConfig.testEnvironmentOptions['url'] ??= jestConfig.testURL) as string\n\t}\n\n\treturn jestConfig\n}\n","import { applyStyleBorderless, Table } from '@yarn-tool/table';\nimport { TableConstructorOptions } from 'cli-table3';\nimport { console } from 'debug-color2';\nimport { inspect } from 'util';\nimport { name as jName, version as jVersion } from '../package.json';\nimport { IJestConfig } from './types';\n\nexport function _newTableBorderless(options?: TableConstructorOptions)\n{\n\tlet table = new Table({\n\t\tcolAligns: ['right', 'left'],\n\t\t//colAligns: ['left', 'center', 'center', 'center'],\n\t\tchars: {\n\t\t\ttop: '',\n\t\t\t'top-mid': '',\n\t\t\t'top-left': '',\n\t\t\t'top-right': '',\n\t\t\tbottom: '',\n\t\t\t'bottom-mid': '',\n\t\t\t'bottom-left': '',\n\t\t\t'bottom-right': '',\n\t\t\tleft: '',\n\t\t\t'left-mid': '',\n\t\t\tmid: '',\n\t\t\t'mid-mid': '',\n\t\t\tright: '',\n\t\t\t'right-mid': '',\n\t\t\tmiddle: '',\n\t\t},\n\t\t...options,\n\t});\n\n\ttable = applyStyleBorderless(table);\n\n\treturn table;\n}\n\nexport interface IOptionsPrintJestConfigInfo\n{\n\tcwd?: string;\n\tfile?: string;\n}\n\nexport function printJestConfigInfo(jestConfig: IJestConfig, options?: IOptionsPrintJestConfigInfo)\n{\n\tconst table = _newTableBorderless();\n\n\toptions ??= {};\n\t// @ts-ignore\n\tjestConfig ??= {};\n\n\ttable.push([`${jName}:`, jVersion]);\n\ttable.push([`process.versions.node:`, process.versions.node]);\n\ttable.push(['cwd:', options.cwd ?? process.cwd()]);\n\n\toptions.file?.length && table.push(['file:', options.file]);\n\n\tjestConfig.cacheDirectory?.length && table.push(['cacheDirectory:', jestConfig.cacheDirectory]);\n\n\tjestConfig.rootDir?.length && table.push(['rootDir:', jestConfig.rootDir]);\n\tjestConfig.roots?.length && table.push(['roots:', inspect(jestConfig.roots)]);\n\n\tjestConfig.preset?.length && table.push(['preset:', jestConfig.preset]);\n\n\tjestConfig.transform && table.push(['transform:', inspect(jestConfig.transform, {\n\t\tdepth: 3\n\t})]);\n\n\tconsole.gray.log('─'.repeat(20));\n\tconsole.log(`jest.config`);\n\tconsole.log(table.toString());\n\tconsole.gray.log('─'.repeat(20));\n}\n","import { _requireResolve, fixJestConfig, makeTestRegexConfig } from './helper';\nimport {\n\tdefaultCoveragePathIgnorePatterns,\n\tdefaultModuleFileExtensions,\n\tdefaultTestFileExtensions,\n\tdefaultTestPathIgnorePatterns, defaultTransform,\n} from './defaults';\nimport { IOptionsPrintJestConfigInfo, printJestConfigInfo } from './print';\nimport { IJestConfig } from './types';\nimport { getJestCacheDirectory } from 'jest-cache-directory';\n\nexport * from './helper';\nexport * from './defaults';\nexport * from './print';\n\nconst cacheDirectory = getJestCacheDirectory();\n\nexport { cacheDirectory }\n\nexport function mixinJestConfig<T extends IJestConfig>(jestConfig?: T, autoPrint?: boolean,\n\toptions?: IOptionsPrintJestConfigInfo)\n{\n\t// @ts-ignore\n\tjestConfig ??= {};\n\tconst newJestConfig = fixJestConfig({\n\t\tglobals: {\n//\t\t\t'ts-jest': {\n//\t\t\t\t//tsconfig: 'tsconfig.spec.json',\n//\t\t\t},\n\t\t},\n\t\tcacheDirectory,\n\t\tmaxWorkers: 1,\n\t\tclearMocks: true,\n\t\tpassWithNoTests: true,\n\t\tmoduleFileExtensions: defaultModuleFileExtensions(),\n\t\t//testEnvironment: 'node',\n\t\t//testMatch: ['**/*.test.ts', '**/*.spec.ts'],\n\t\t...makeTestRegexConfig(defaultTestFileExtensions()),\n\t\ttestPathIgnorePatterns: defaultTestPathIgnorePatterns(),\n\t\t//testRunner: 'jest-circus/runner',\n\t\tsetupFilesAfterEnv: [\n\t\t\t//\"jest-chain\",\n\t\t\t//\"jest-extended/all\",\n\t\t\t//\"jest-extended-extra\",\n\t\t\t//\"jest-num-close-with\",\n\t\t\t/**\n\t\t\t * https://medium.com/doctolib/how-to-run-the-same-jest-test-suite-across-several-platforms-jest-os-detection-plugin-included-f8113832482b\n\t\t\t * https://github.com/doctolib/jest-os-detection\n\t\t\t */\n\t\t\t//'jest-os-detection',\n\t\t],\n\t\t//transform: defaultTransform(),\n\t\tverbose: true,\n\t\t/**\n\t\t * if didn't set `coverageProvider` to `v8`\n\t\t * with `collectCoverage` `true`, nodejs debug point maybe will fail\n\t\t */\n\t\tcoverageProvider: 'v8',\n\t\tcollectCoverage: false,\n\t\tcoveragePathIgnorePatterns: defaultCoveragePathIgnorePatterns(),\n\t\t/**\n\t\t * https://github.com/facebook/jest/issues/9771#issuecomment-872764344\n\t\t */\n\t\t//resolver: 'jest-node-exports-resolver',\n\t\t...jestConfig,\n\t});\n\n\tnewJestConfig.transform ??= defaultTransform({\n\t\tjestConfig,\n\t\tautoPrint,\n\t\toptions,\n\t\tnewJestConfig,\n\t});\n\n\tautoPrint && printJestConfigInfo(newJestConfig, options);\n\n\treturn newJestConfig\n}\n\nexport default mixinJestConfig\n"],"names":["defaultTsJestTransformerOptions","runtime","_runtime$jestConfig$g","_runtime$jestConfig$g2","old","jestConfig","globals","tsconfig","noEmit","emitDeclarationOnly","noUnusedParameters","allowUnusedLabels","noUnusedLocals","noPropertyAccessFromIndexSignature","noImplicitAny","defaultTestFileExtensions","value","defaultModuleFileExtensions","defaultCoverageFileExtensions","defaultTransformFileExtensions","defaultCoveragePathIgnorePatterns","defaultTestPathIgnorePatterns","defaultTransform","paths","requireResolveExtra","result","filter","Boolean","opts","includeGlobal","includeCurrentDirectory","ts_transform","_requireResolve","tsd","length","chain","transformers","_handleFileExtensions","name","requireResolveCore","console","debug","makeTestRegexConfig","testExt","_testExt2","_testExt","testMatch","testRegex","_handleFileExtensionsCore","array_unique","flat","sep","join","fixJestConfig","testURL","_jestConfig$testEnvir","_jestConfig$testEnvir2","_url","_jestConfig$testEnvir3","testEnvironmentOptions","_newTableBorderless","options","table","Table","colAligns","chars","top","bottom","left","mid","right","middle","applyStyleBorderless","printJestConfigInfo","_options","_jestConfig","_options$cwd","_options$file","_jestConfig$cacheDire","_jestConfig$rootDir","_jestConfig$roots","_jestConfig$preset","push","jName","jVersion","process","versions","node","cwd","file","cacheDirectory","rootDir","roots","inspect","preset","transform","depth","gray","log","repeat","toString","getJestCacheDirectory","mixinJestConfig","autoPrint","_newJestConfig$transf","newJestConfig","maxWorkers","clearMocks","passWithNoTests","moduleFileExtensions","testPathIgnorePatterns","setupFilesAfterEnv","verbose","coverageProvider","collectCoverage","coveragePathIgnorePatterns"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.development.cjs","sources":["../src/defaults.ts","../src/helper.ts","../src/print.ts","../src/plugin/ts-jest.ts","../src/default-transform.ts","../src/util.ts","../src/default-setup-fles.ts","../src/index.ts"],"sourcesContent":["/**\n * 預設配置模組 - 提供 Jest 各項預設設定值\n * Default Configuration Module - Provides default settings for Jest\n */\n\nimport { ITSToWriteableArray } from 'ts-type/lib/helper/array/readonly';\n\n/**\n * 取得預設的測試檔案副檔名列表\n * Get default test file extensions list\n *\n * 定義哪些副檔名的檔案會被視為測試檔案\n * Defines which file extensions are recognized as test files\n *\n * @returns {string[]} 測試檔案副檔名陣列 / Array of test file extensions\n */\nexport function defaultTestFileExtensions()\n{\n\tconst value = [\n\t\t// TypeScript 相關副檔名 / TypeScript related extensions\n\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\n\t\t// JavaScript 相關副檔名(目前註解掉) / JavaScript related extensions (currently commented)\n\n\t\t//'js',\n\t\t//'jsx',\n\t\t//'mjs',\n\t\t//'cjs',\n\t] as const;\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的模組檔案副檔名列表\n * Get default module file extensions list\n *\n * 定義模組解析時搜尋的副檔名順序\n * Defines the order of extensions to search during module resolution\n *\n * @see https://jestjs.io/docs/configuration#options\n * @returns {string[]} 模組檔案副檔名陣列 / Array of module file extensions\n */\nexport function defaultModuleFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t'json',\n\t\t'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的覆蓋率檔案副檔名列表\n * Get default coverage file extensions list\n *\n * 定義哪些副檔名的檔案會被納入覆蓋率統計\n * Defines which file extensions are included in coverage statistics\n *\n * @returns {string[]} 覆蓋率檔案副檔名陣列 / Array of coverage file extensions\n */\nexport function defaultCoverageFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t//'json',\n\t\t//'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的轉換器檔案副檔名列表\n * Get default transformer file extensions list\n *\n * 定義哪些副檔名的檔案需要經過 ts-jest 轉換\n * Defines which file extensions need to be transformed by ts-jest\n *\n * @returns {string[]} 轉換器檔案副檔名陣列 / Array of transformer file extensions\n */\nexport function defaultTransformFileExtensions()\n{\n\tconst value = [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的覆蓋率忽略路徑模式\n * Get default coverage path ignore patterns\n *\n * 定義哪些路徑的檔案不納入覆蓋率統計\n * Defines which paths are excluded from coverage statistics\n *\n * @returns {string[]} 覆蓋率忽略路徑模式陣列 / Array of coverage ignore patterns\n */\nexport function defaultCoveragePathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__snapshots__/',\n\t\t'/__tests__/',\n\t\t'/__test__/',\n\t\t//'**/node_modules/',\n\t\t//'**/__snapshots__/',\n\t\t//'**/__tests__/',\n\t\t'/dist/',\n\t\t'/test/',\n\t\t'/fixture/',\n\t\t'/__file_snapshots__/',\n\t\t'/__fixtures__/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的測試路徑忽略模式\n * Get default test path ignore patterns\n *\n * 定義哪些路徑的檔案不會被視為測試檔案\n * Defines which paths are excluded from test file recognition\n *\n * @returns {string[]} 測試路徑忽略模式陣列 / Array of test path ignore patterns\n */\nexport function defaultTestPathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__fixtures__/',\n\t\t'/__file_snapshots__/',\n\t\t'/fixtures/',\n\t\t'/__tests__/helpers/',\n\t\t'/__tests__/utils/',\n\t\t'__mocks__',\n\t\t'/dist/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n","/**\n * 輔助函數模組 - 提供 Jest 配置處理的通用工具函數\n * Helper Functions Module - Provides utility functions for Jest configuration processing\n */\n\nimport { requireResolveCore, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { ITSValueOrArrayMaybeReadonly } from 'ts-type/lib/type/base';\nimport { console } from 'debug-color2';\nimport { IJestConfig } from './types';\nimport { defaultTestFileExtensions } from './defaults';\nimport { array_unique } from 'array-hyper-unique';\n\n/**\n * 解析模組路徑的內部輔助函數\n * Internal helper function for resolving module paths\n *\n * 優先從 @bluelovers/tsdx 或 tsdx 套件路徑中搜尋,若失敗則使用標準 require.resolve\n * Searches from @bluelovers/tsdx or tsdx package paths first, falls back to standard require.resolve\n *\n * @param {string} name - 要解析的模組名稱 / Module name to resolve\n * @returns {string} 解析後的模組絕對路徑 / Resolved absolute module path\n */\nexport function _requireResolve(name: string)\n{\n\t/**\n\t * 搜尋路徑列表,包含 tsdx 相關套件路徑\n\t * Search paths list including tsdx related package paths\n\t */\n\tconst paths = [\n\t\trequireResolveExtra('@bluelovers/tsdx').result,\n\t\trequireResolveExtra('tsdx').result,\n\t].filter(Boolean);\n\n\t/**\n\t * 使用增強的解析器進行模組解析\n\t * Use enhanced resolver for module resolution\n\t */\n\tconst result = requireResolveCore(name, {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t});\n\n\t// 輸出除錯資訊 / Output debug info\n\tconsole.debug('[require.resolve]', name, '=>', result)\n\n\treturn result\n}\n\nexport function _requireResolve2(name: string)\n{\n\treturn requireResolveExtra(name, {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t})\n}\n\n/**\n * 建立測試正則表達式配置\n * Create test regex configuration\n *\n * 根據測試檔案副檔名生成 testMatch 和 testRegex 配置\n * Generates testMatch and testRegex configs based on test file extensions\n *\n * @param {T} testExt - 測試檔案副檔名或陣列 / Test file extension(s)\n * @returns {object} 包含 testMatch 和 testRegex 的配置物件 / Object containing testMatch and testRegex\n */\nexport function makeTestRegexConfig<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>): Pick<IJestConfig, 'testMatch' | 'testRegex'>\n{\n\t// 若未提供副檔名則使用預設值 / Use default if no extensions provided\n\ttestExt ??= defaultTestFileExtensions() as any as T[];\n\tconst _testExt = _handleFileExtensions(testExt, '|')\n\n\treturn {\n\t\t/** 不使用 testMatch(使用 testRegex 替代) / Not using testMatch (using testRegex instead) */\n\t\ttestMatch: null as undefined,\n\t\t/**\n\t\t * 測試檔案正則表達式模式陣列\n\t\t * Test file regex patterns array\n\t\t *\n\t\t * 匹配以下模式:\n\t\t * - *.test.ts, *.spec.ts, *.tests.ts\n\t\t * - __tests__ 目錄下的測試檔案\n\t\t */\n\t\ttestRegex: [\n\t\t\t`\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t\t`__tests__\\/\\.*\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t],\n\t}\n}\n\n/**\n * 處理檔案副檔名陣列的核心函數\n * Core function for processing file extension arrays\n *\n * 將輸入轉換為唯一的副檔名陣列\n * Converts input to unique array of extensions\n *\n * @param {T} testExt - 輸入的副檔名(可為陣列或單一值) / Input extension(s)\n * @returns {T[]} 唯一的副檔名陣列 / Unique array of extensions\n */\nexport function _handleFileExtensionsCore<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>)\n{\n\treturn array_unique([testExt].flat()) as T[]\n}\n\n/**\n * 處理檔案副檔名並以指定分隔符連接\n * Process file extensions and join with specified separator\n *\n * @param {T} testExt - 輸入的副檔名(可為陣列或單一值) / Input extension(s)\n * @param {string} sep - 分隔符號 / Separator string\n * @returns {string} 連接後的副檔名字串 / Joined extension string\n */\nexport function _handleFileExtensions<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>, sep: string)\n{\n\treturn _handleFileExtensionsCore(testExt).join(sep)\n}\n\n/**\n * 修復 Jest 配置中的相容性問題\n * Fix compatibility issues in Jest configuration\n *\n * 處理 testMatch/testRegex 互斥問題以及 testURL 已棄用選項的遷移\n * Handles testMatch/testRegex mutual exclusivity and testURL deprecated option migration\n *\n * @param {T} jestConfig - 原始 Jest 配置 / Original Jest configuration\n * @returns {T} 修復後的 Jest 配置 / Fixed Jest configuration\n */\nexport function fixJestConfig<T extends IJestConfig>(jestConfig: T): T\n{\n\t/**\n\t * testMatch 和 testRegex 是互斥的選項\n\t * testMatch and testRegex are mutually exclusive options\n\t *\n\t * 如果同時設定兩者會造成衝突,因此需要清除其中一個\n\t * Having both set causes conflicts, so we need to clear one\n\t */\n\tif (jestConfig.testMatch)\n\t{\n\t\t// 如果使用 testMatch,清除 testRegex\n\t\t// If using testMatch, clear testRegex\n\t\tjestConfig.testRegex = null;\n\t}\n\telse if (jestConfig.testRegex)\n\t{\n\t\t// 如果使用 testRegex,清除 testMatch\n\t\t// If using testRegex, clear testMatch\n\t\tjestConfig.testMatch = null;\n\t}\n\n\t/**\n\t * testURL 選項已被 testEnvironmentOptions.url 取代\n\t * testURL option has been replaced by testEnvironmentOptions.url\n\t *\n\t * @see https://jestjs.io/docs/configuration#testurl-string\n\t */\n\tif (jestConfig.testURL)\n\t{\n\t\t// 確保 testEnvironmentOptions 物件存在\n\t\t// Ensure testEnvironmentOptions object exists\n\t\tjestConfig.testEnvironmentOptions ??= {};\n\n\t\t// 將 testURL 遷移到 testEnvironmentOptions.url\n\t\t// Migrate testURL to testEnvironmentOptions.url\n\t\tjestConfig.testURL = (jestConfig.testEnvironmentOptions['url'] ??= jestConfig.testURL) as string\n\t}\n\n\treturn jestConfig\n}\n","/**\n * 配置資訊印出模組 - 格式化並顯示 Jest 配置資訊\n * Configuration Info Print Module - Formats and displays Jest configuration info\n */\n\nimport { applyStyleBorderless, Table } from '@yarn-tool/table';\nimport { TableConstructorOptions } from 'cli-table3';\nimport { console } from 'debug-color2';\nimport { inspect } from 'util';\nimport { name as jName, version as jVersion } from '../package.json';\nimport { IJestConfig } from './types';\n\n/**\n * 建立無邊框表格實例\n * Create borderless table instance\n *\n * 用於以整齊的格式顯示 Jest 配置資訊\n * Used to display Jest configuration info in a neat format\n *\n * @param {TableConstructorOptions} options - 表格建構選項 / Table constructor options\n * @returns {Table} 無邊框表格實例 / Borderless table instance\n */\nexport function _newTableBorderless(options?: TableConstructorOptions)\n{\n\t/**\n\t * 建立表格實例,設定欄位對齊方式\n\t * Create table instance with column alignment settings\n\t */\n\tlet table = new Table({\n\t\t/** 欄位對齊方式(右對齊, 左對齊) / Column alignments (right, left) */\n\t\tcolAligns: ['right', 'left'],\n\t\t/**\n\t\t * 移除所有邊框字元,創造簡潔的外觀\n\t\t * Remove all border characters for clean appearance\n\t\t */\n\t\tchars: {\n\t\t\ttop: '',\n\t\t\t'top-mid': '',\n\t\t\t'top-left': '',\n\t\t\t'top-right': '',\n\t\t\tbottom: '',\n\t\t\t'bottom-mid': '',\n\t\t\t'bottom-left': '',\n\t\t\t'bottom-right': '',\n\t\t\tleft: '',\n\t\t\t'left-mid': '',\n\t\t\tmid: '',\n\t\t\t'mid-mid': '',\n\t\t\tright: '',\n\t\t\t'right-mid': '',\n\t\t\tmiddle: '',\n\t\t},\n\t\t...options,\n\t});\n\n\t// 套用無邊框樣式 / Apply borderless style\n\ttable = applyStyleBorderless(table);\n\n\treturn table;\n}\n\n/**\n * 印出 Jest 配置資訊的選項介面\n * Options interface for printing Jest config info\n */\nexport interface IOptionsPrintJestConfigInfo\n{\n\t/** 目前工作目錄 / Current working directory */\n\tcwd?: string;\n\t/** 配置文件路徑 / Configuration file path */\n\tfile?: string;\n}\n\n/**\n * 印出 Jest 配置資訊\n * Print Jest configuration information\n *\n * 以表格格式顯示當前 Jest 配置的關鍵資訊,方便除錯和確認設定\n * Displays key info of current Jest config in table format for debugging and verification\n *\n * @param {IJestConfig} jestConfig - Jest 配置物件 / Jest configuration object\n * @param {IOptionsPrintJestConfigInfo} options - 印出選項 / Print options\n */\nexport function printJestConfigInfo(jestConfig: IJestConfig, options?: IOptionsPrintJestConfigInfo)\n{\n\t// 建立無邊框表格 / Create borderless table\n\tconst table = _newTableBorderless();\n\n\t// 初始化選項(若未提供) / Initialize options (if not provided)\n\toptions ??= {};\n\t// @ts-ignore\n\tjestConfig ??= {};\n\n\t/**\n\t * 添加基本資訊行到表格\n\t * Add basic info rows to table\n\t */\n\t// 套件名稱和版本 / Package name and version\n\ttable.push([`${jName}:`, jVersion]);\n\t// Node.js 版本 / Node.js version\n\ttable.push([`process.versions.node:`, process.versions.node]);\n\t// 目前工作目錄 / Current working directory\n\ttable.push(['cwd:', options.cwd ?? process.cwd()]);\n\n\t// 配置文件路徑(如果提供) / Config file path (if provided)\n\toptions.file?.length && table.push(['file:', options.file]);\n\n\t// 快取目錄(如果設定) / Cache directory (if set)\n\tjestConfig.cacheDirectory?.length && table.push(['cacheDirectory:', jestConfig.cacheDirectory]);\n\n\t// 根目錄(如果設定) / Root directory (if set)\n\tjestConfig.rootDir?.length && table.push(['rootDir:', jestConfig.rootDir]);\n\t// 根目錄陣列(如果設定) / Roots array (if set)\n\tjestConfig.roots?.length && table.push(['roots:', inspect(jestConfig.roots)]);\n\n\t// Preset 設定(如果設定) / Preset setting (if set)\n\tjestConfig.preset?.length && table.push(['preset:', jestConfig.preset]);\n\n\t// 轉換器配置(如果設定) / Transform config (if set)\n\tjestConfig.transform && table.push(['transform:', inspect(jestConfig.transform, {\n\t\t/** 檢視深度限制 / Inspection depth limit */\n\t\tdepth: 3\n\t})]);\n\n\t/**\n\t * 輸出表格到控制台\n\t * Output table to console\n\t */\n\t// 分隔線 / Separator line\n\tconsole.gray.log('─'.repeat(20));\n\t// 標題 / Title\n\tconsole.log(`jest.config`);\n\t// 表格內容 / Table content\n\tconsole.log(table.toString());\n\t// 分隔線 / Separator line\n\tconsole.gray.log('─'.repeat(20));\n}\n","/**\n * ts-jest 轉換器配置模組 - 提供 ts-jest 的預設選項設定\n * ts-jest Transformer Configuration Module - Provides default options for ts-jest\n */\n\nimport { TsJestTransformerOptions } from 'ts-jest';\nimport { IRuntime } from '../types';\nimport { array_unique } from 'array-hyper-unique';\n\n/**\n * 取得預設的 ts-jest 轉換器選項\n * Get default ts-jest transformer options\n *\n * 此函數會合併使用者自定義的 ts-jest 設定與預設值,確保測試環境的最佳配置\n * This function merges user custom ts-jest settings with defaults for optimal test environment\n *\n * 主要調整項目:\n * - 禁用輸出檔案(noEmit: true)\n * - 允許未使用的參數和標籤(用於測試開發)\n * - 禁用嚴格的型別檢查選項(確保測試能順利執行)\n *\n * Key adjustments:\n * - Disable file output (noEmit: true)\n * - Allow unused parameters and labels (for test development)\n * - Disable strict type checking options (ensure tests run smoothly)\n *\n * @param runtime - 執行時期配置,包含原始 Jest 配置 / Runtime configuration containing original Jest config\n * @returns ts-jest 轉換器選項 / ts-jest transformer options\n */\nexport function defaultTsJestTransformerOptions(runtime: IRuntime)\n{\n\t/**\n\t * 取得使用者自定義的 ts-jest 設定(如果存在)\n\t * Get user custom ts-jest settings (if exists)\n\t *\n\t * 從 jestConfig.globals['ts-jest'] 中讀取既有設定\n\t * Reads existing settings from jestConfig.globals['ts-jest']\n\t */\n\tconst old: TsJestTransformerOptions = (runtime.jestConfig.globals?.['ts-jest'] ?? {}) as TsJestTransformerOptions;\n\n\t/**\n\t * 處理 tsconfig 設定物件\n\t * Process tsconfig settings object\n\t *\n\t * 如果使用者提供了物件形式的 tsconfig,則使用它;否則建立空物件\n\t * Uses user-provided object tsconfig or creates empty object\n\t */\n\tconst tsconfig = typeof old.tsconfig === 'object' ? old.tsconfig : {};\n\n\tconst types = array_unique([...(tsconfig.types ?? []), 'jest']);\n\n\t/**\n\t * 回傳合併後的 ts-jest 選項\n\t * Return merged ts-jest options\n\t *\n\t * 預設值優先於使用者設定,但使用者設定可覆蓋預設值\n\t * Defaults take precedence but user settings can override them\n\t */\n\treturn {\n\t\t// 保留既有設定 / Preserve existing settings\n\t\t...old,\n\t\ttsconfig: {\n\t\t\t/**\n\t\t\t * 不輸出編譯後的檔案(僅用於型別檢查和轉換)\n\t\t\t * Don't emit compiled files (only for type checking and transformation)\n\t\t\t */\n\t\t\tnoEmit: true,\n\t\t\t/**\n\t\t\t * 不僅輸出宣告檔案(確保完整編譯)\n\t\t\t * Don't emit declaration only (ensure full compilation)\n\t\t\t */\n\t\t\temitDeclarationOnly: false,\n\t\t\t/**\n\t\t\t * 允許未使用的參數(測試中常見佔位符)\n\t\t\t * Allow unused parameters (common placeholders in tests)\n\t\t\t */\n\t\t\tnoUnusedParameters: false,\n\t\t\t/**\n\t\t\t * 允許未使用的標籤(方便測試標記)\n\t\t\t * Allow unused labels (convenient for test marking)\n\t\t\t */\n\t\t\tallowUnusedLabels: true,\n\t\t\t/**\n\t\t\t * 允許未使用的區域變數(測試開發彈性)\n\t\t\t * Allow unused locals (flexibility in test development)\n\t\t\t */\n\t\t\tnoUnusedLocals: false,\n\t\t\t/**\n\t\t\t * 允許從索引簽名進行屬性存取(簡化測試語法)\n\t\t\t * Allow property access from index signature (simpler test syntax)\n\t\t\t */\n\t\t\tnoPropertyAccessFromIndexSignature: false,\n\t\t\t/**\n\t\t\t * 允許隱含的 any 型別(減少測試中的型別宣告負擔)\n\t\t\t * Allow implicit any type (reduce type declaration overhead in tests)\n\t\t\t */\n\t\t\tnoImplicitAny: false,\n\t\t\t// 合併使用者自定義的 tsconfig 設定 / Merge user custom tsconfig settings\n\t\t\t...tsconfig,\n\t\t\ttypes,\n\t\t},\n\t} as TsJestTransformerOptions\n}\n","import { IJestConfig, IRuntime } from './types';\nimport { _handleFileExtensions, _requireResolve } from './helper';\nimport { defaultTsJestTransformerOptions } from './plugin/ts-jest';\nimport { defaultTransformFileExtensions } from './defaults';\nimport { IOptionsRequireResolve as IOptions, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { ITSWriteable } from 'ts-type';\n\n/**\n * 建立預設的轉換器配置\n * Create default transformer configuration\n *\n * 配置 ts-jest 作為主要轉換器,並在可用時整合 jest-tsd-transform 和 jest-chain-transform\n * Configures ts-jest as the main transformer, integrating jest-tsd-transform and jest-chain-transform when available\n *\n * @param {IRuntime} runtime - 執行時期配置 / Runtime configuration\n * @returns {object} 轉換器配置物件 / Transformer configuration object\n */\nexport function defaultTransform(runtime: IRuntime)\n{\n\t/**\n\t * 搜尋路徑列表,用於解析相關模組\n\t * Search paths list for resolving related modules\n\t */\n\tconst paths: string[] = [\n\t\trequireResolveExtra('@bluelovers/jest-config').result,\n\t].filter(Boolean);\n\n\t/**\n\t * 模組解析選項 / Module resolution options\n\t */\n\tconst opts: IOptions = {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t};\n\n\t/**\n\t * ts-jest 轉換器配置\n\t * ts-jest transformer configuration\n\t */\n\tlet ts_transform: IJestConfig[\"transform\"][string] = _requireResolve('ts-jest') as 'ts-jest';\n\n\t/**\n\t * 將 ts-jest 與其選項合併\n\t * Merge ts-jest with its options\n\t */\n\tts_transform = [ts_transform, defaultTsJestTransformerOptions(runtime)];\n\n\t/**\n\t * 嘗試解析 jest-tsd-transform(TypeScript 宣告檔轉換器)\n\t * Try to resolve jest-tsd-transform (TypeScript declaration file transformer)\n\t */\n\tconst { result: tsd } = requireResolveExtra('jest-tsd-transform', opts);\n\n\t/**\n\t * 如果 jest-tsd-transform 可用,嘗試建立轉換鏈\n\t * If jest-tsd-transform is available, try to create transform chain\n\t */\n\tif (tsd?.length)\n\t{\n\t\t/**\n\t\t * 嘗試解析 jest-chain-transform(轉換鏈協調器)\n\t\t * Try to resolve jest-chain-transform (transform chain coordinator)\n\t\t */\n\t\tconst { result: chain } = requireResolveExtra('jest-chain-transform', opts);\n\n\t\t/**\n\t\t * 如果 jest-chain-transform 可用,建立轉換鏈\n\t\t * If jest-chain-transform is available, create transform chain\n\t\t */\n\t\tif (chain?.length)\n\t\t{\n\t\t\tts_transform = [\n\t\t\t\tchain as 'jest-chain-transform', {\n\t\t\t\t\ttransformers: [\n\t\t\t\t\t\ttsd as 'jest-tsd-transform',\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tts_transform as 'ts-jest',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t] satisfies [\n\t\t\t\tstring,\n\t\t\t\tRecord<string, unknown>\n\t\t\t]\n\t\t}\n\t}\n\n\t/**\n\t * 建立最終的轉換器配置物件\n\t * Create final transformer configuration object\n\t */\n\tconst value = {\n\t\t[`.(${_handleFileExtensions(defaultTransformFileExtensions(), '|')})$`]: ts_transform,\n\t} as const\n\treturn value as ITSWriteable<typeof value>;\n}\n","import { ITSPartialRecord, ITSValueOrArrayMaybeReadonly } from \"ts-type\";\nimport { escapeRegExp } from \"regexp-helper-core\";\n\n/**\n * Detects all values in an array that include any of the given keys.\n *\n * @example\n * const arr = ['abc', 'def', 'ghi'];\n * const keys = ['a', 'e', 'i'];\n * const result = detectIncludes(arr, keys);\n * // result is { a: ['abc', 'def'], e: ['def', 'ghi'], i: ['abc', 'ghi'] }\n *\n * @param arr - The array to search.\n * @param keys - The keys to search for.\n * @returns An object with the keys as properties and the\n * corresponding values as arrays of strings.\n */\nexport function detectIncludes<K extends string, V = unknown | string>(arr: V[], keys: ITSValueOrArrayMaybeReadonly<K>)\n{\n\tlet result = {} as ITSPartialRecord<K, string[]>;\n\n\tif (arr?.length)\n\t{\n\t\tif (keys.length)\n\t\t{\n\t\t\tkeys = Array.isArray(keys) ? keys : [keys] as K[];\n\n\t\t\tconst re = new RegExp(`(${escapeArrayToRegExpSource(keys as string[])})`);\n\n\t\t\tarr.forEach((value) =>\n\t\t\t{\n\t\t\t\tlet m = (value as string)?.match?.(re);\n\t\t\t\tif (m)\n\t\t\t\t{\n\t\t\t\t\tconst k = m[1] as K;\n\t\t\t\t\t(result[k] ??= []).push(value as string);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result\n}\n\n/**\n * Escapes all strings in an array to be used in a regular expression source.\n *\n * @example\n * const arr = ['abc', 'def', 'ghi'];\n * const result = escapeArrayToRegExpSource(arr);\n * // result is 'abc|def|ghi'\n *\n * @param arr - The array of strings to escape.\n * @returns A single string that can be used as a regular expression source.\n */\nexport function escapeArrayToRegExpSource(arr: string[])\n{\n\treturn arr.map(s => escapeRegExp(s)).join(\"|\");\n}\n\nexport function tsExtensions(js: true): readonly [\n\t'js',\n\t'mjs',\n\t'cjs',\n\t'jsx',\n];\nexport function tsExtensions(js?: false): readonly [\n\t'ts',\n\t'tsx',\n\t'mts',\n\t'cts',\n];\nexport function tsExtensions(js?: boolean): readonly [\"js\", \"mjs\", \"cjs\", \"jsx\"] | readonly [\"ts\", \"tsx\", \"mts\", \"cts\"];\nexport function tsExtensions(js?: boolean)\n{\n\treturn js ? [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t] as const : [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\t] as const;\n}\n","import { IJestConfig, IRuntime } from './types';\nimport { detectIncludes } from './util';\nimport { _requireResolve2 } from './helper';\nimport { ITSPickExtra } from 'ts-type';\n\n/** 環境設置載入的檔案 / Files to load environment setup */\nexport function defaultSetupFiles(runtime?: ITSPickExtra<IRuntime, 'jestConfig'>)\n{\n\tconst jestConfig = runtime?.jestConfig ?? {} as IJestConfig;\n\n\tlet detect = detectIncludes(jestConfig.setupFiles, 'dotenv');\n\n\tconst setupFiles: IJestConfig['setupFiles'] = [\n\t\t/**\n\t\t * @see https://lusbuab.medium.com/using-dotenv-with-jest-7e735b34e55f\n\t\t */\n\t\t!detect['dotenv'] && _requireResolve2('dotenv/config').result,\n\t\t...(jestConfig.setupFiles ?? []),\n\n\t].filter(Boolean);\n\n\tconst setupFilesAfterEnv = [\n\t\t// 可選擇性啟用的 Jest 擴充套件 / Optional Jest extensions\n\t\t//\"jest-chain\",\n\t\t//\"jest-extended/all\",\n\t\t//\"jest-extended-extra\",\n\t\t//\"jest-num-close-with\",\n\t\t/**\n\t\t * 跨平台測試支援參考 / Cross-platform testing support reference\n\t\t * @see https://medium.com/doctolib/how-to-run-the-same-jest-test-suite-across-several-platforms-jest-os-detection-plugin-included-f8113832482b\n\t\t * @see https://github.com/doctolib/jest-os-detection\n\t\t */\n\t\t//'jest-os-detection',\n\t\t...(jestConfig.setupFilesAfterEnv ?? []),\n\t].filter(Boolean);\n\n\tconst ret = {} as Pick<IJestConfig, 'setupFiles' | 'setupFilesAfterEnv'>;\n\n\tif (setupFiles.length)\n\t{\n\t\tret.setupFiles = setupFiles;\n\t}\n\tif (setupFilesAfterEnv.length)\n\t{\n\t\tret.setupFilesAfterEnv = setupFilesAfterEnv;\n\t}\n\n\treturn ret\n}\n","/**\n * 核心入口模組 - 提供 Jest 配置混合功能\n * Core Entry Module - Provides Jest configuration mixing functionality\n */\n\nimport { _requireResolve, fixJestConfig, makeTestRegexConfig } from './helper';\nimport {\n\tdefaultCoveragePathIgnorePatterns,\n\tdefaultModuleFileExtensions,\n\tdefaultTestFileExtensions,\n\tdefaultTestPathIgnorePatterns,\n\n} from './defaults';\nimport { IOptionsPrintJestConfigInfo, printJestConfigInfo } from './print';\nimport { IJestConfig } from './types';\nimport { getJestCacheDirectory } from 'jest-cache-directory';\nimport { defaultTransform } from './default-transform';\nimport { defaultSetupFiles } from './default-setup-fles';\n\n// 重新匯出輔助函數和類型 / Re-export helper functions and types\nexport * from './helper';\nexport * from './defaults';\nexport * from './print';\nexport { defaultTransform } from './default-transform';\nexport { defaultSetupFiles } from './default-setup-fles';\n\n/** Jest 快取目錄路徑 / Jest cache directory path */\nconst cacheDirectory = getJestCacheDirectory();\n\nexport { cacheDirectory }\n\n/**\n * 混合 Jest 配置函數 - 將預設配置與使用者自定義配置合併\n * Mix Jest configuration function - Merges default config with user custom config\n *\n * 此函數提供了一個完整的 Jest 配置模板,包含 TypeScript 支援、快取管理、覆蓋率收集等功能\n * This function provides a complete Jest configuration template with TypeScript support,\n * cache management, coverage collection, and more.\n *\n * @param {T} jestConfig - 使用者自定義的 Jest 配置 / User custom Jest configuration\n * @param {boolean} autoPrint - 是否自動印出配置資訊 / Whether to auto print config info\n * @param {IOptionsPrintJestConfigInfo} options - 印出配置的選項 / Options for printing config\n * @returns {T} 合併後的完整 Jest 配置 / Merged complete Jest configuration\n */\nexport function mixinJestConfig<T extends IJestConfig>(jestConfig?: T, autoPrint?: boolean,\n\toptions?: IOptionsPrintJestConfigInfo)\n{\n\t// @ts-ignore\n\t// 如果未提供配置則使用空對象 / Use empty object if no config provided\n\tjestConfig ??= {};\n\n\t/**\n\t * 建立基礎 Jest 配置物件\n\t * Create base Jest configuration object\n\t *\n\t * 包含以下預設設定:\n\t * - 快取目錄管理 / Cache directory management\n\t * - 單一工作執行緒以確保測試穩定性 / Single worker for test stability\n\t * - 自動清除模擬物件 / Auto clear mocks\n\t * - 無測試時仍通過 / Pass with no tests\n\t * - TypeScript 檔案支援 / TypeScript file support\n\t * - 覆蓋率使用 v8 提供者 / Coverage using v8 provider\n\t */\n\tconst newJestConfig = fixJestConfig({\n\t\tglobals: {\n\t\t\t// ts-jest 全域配置預留位置 / ts-jest global config placeholder\n//\t\t\t'ts-jest': {\n//\t\t\t\t//tsconfig: 'tsconfig.spec.json',\n//\t\t\t},\n\t\t},\n\t\t/** 快取目錄路徑 / Cache directory path */\n\t\tcacheDirectory,\n\t\t/** 最大工作執行緒數(設為 1 確保測試順序執行) / Max workers (set to 1 for sequential execution) */\n\t\tmaxWorkers: 1,\n\t\t/** 每次測試前清除模擬物件 / Clear mocks before each test */\n\t\tclearMocks: true,\n\t\t/** 無測試檔案時仍視為通過 / Pass even when no test files */\n\t\tpassWithNoTests: true,\n\t\t/** 模組檔案副檔名列表 / Module file extensions list */\n\t\tmoduleFileExtensions: defaultModuleFileExtensions(),\n\t\t// 測試環境設定(預設 node) / Test environment setting\n\t\t//testEnvironment: 'node',\n\t\t// 測試匹配模式 / Test match patterns\n\t\t//testMatch: ['**/*.test.ts', '**/*.spec.ts'],\n\t\t// 合併測試正則配置 / Merge test regex config\n\t\t...makeTestRegexConfig(defaultTestFileExtensions()),\n\t\t/** 測試路徑忽略模式 / Test path ignore patterns */\n\t\ttestPathIgnorePatterns: defaultTestPathIgnorePatterns(),\n\t\t// 測試執行器設定 / Test runner setting\n\t\t//testRunner: 'jest-circus/runner',\n\t\t/** 環境設置後載入的檔案 / Files to load after environment setup */\n\t\t...defaultSetupFiles(),\n\t\t// 轉換器設定(後面單獨處理) / Transform setting (handled separately below)\n\t\t//transform: defaultTransform(),\n\t\t/** 詳細輸出模式 / Verbose output mode */\n\t\tverbose: true,\n\t\t/**\n\t\t * 覆蓋率提供者設定為 v8\n\t\t * Coverage provider set to v8\n\t\t *\n\t\t * 若使用 collectCoverage: true 時未設為 v8,Node.js 除錯點可能會失效\n\t\t * If not set to v8 with collectCoverage: true, Node.js debug points may fail\n\t\t */\n\t\tcoverageProvider: 'v8',\n\t\t/** 是否收集覆蓋率 / Whether to collect coverage */\n\t\tcollectCoverage: false,\n\t\t/** 覆蓋率忽略路徑模式 / Coverage path ignore patterns */\n\t\tcoveragePathIgnorePatterns: defaultCoveragePathIgnorePatterns(),\n\t\t/**\n\t\t * Jest 模組解析器參考 / Jest module resolver reference\n\t\t * @see https://github.com/facebook/jest/issues/9771#issuecomment-872764344\n\t\t */\n\t\t//resolver: 'jest-node-exports-resolver',\n\t\t// 合併使用者自定義配置 / Merge user custom config\n\t\t...jestConfig,\n\t});\n\n\t/**\n\t * 設定轉換器(如果尚未設定)\n\t * Set up transform (if not already set)\n\t *\n\t * 使用預設的 ts-jest 轉換器,並支援 jest-tsd-transform 和 jest-chain-transform 鏈式轉換\n\t * Uses default ts-jest transformer with support for jest-tsd-transform and jest-chain-transform chaining\n\t */\n\tnewJestConfig.transform ??= defaultTransform({\n\t\tjestConfig,\n\t\tautoPrint,\n\t\toptions,\n\t\tnewJestConfig,\n\t});\n\n\t// 如果啟用自動印出,則顯示配置資訊 / If autoPrint enabled, display config info\n\tautoPrint && printJestConfigInfo(newJestConfig, options);\n\n\treturn newJestConfig\n}\n\n/**\n * 預設匯出 - mixinJestConfig 函數\n * Default export - mixinJestConfig function\n */\nexport default mixinJestConfig\n"],"names":["defaultTestFileExtensions","value","defaultModuleFileExtensions","defaultCoverageFileExtensions","defaultTransformFileExtensions","defaultCoveragePathIgnorePatterns","defaultTestPathIgnorePatterns","_requireResolve","name","paths","requireResolveExtra","result","filter","Boolean","requireResolveCore","includeGlobal","includeCurrentDirectory","console","debug","_requireResolve2","makeTestRegexConfig","testExt","_testExt","_handleFileExtensions","testMatch","testRegex","_handleFileExtensionsCore","array_unique","flat","sep","join","fixJestConfig","jestConfig","testURL","_jestConfig$testEnvir","_jestConfig$testEnvir2","_url","_jestConfig$testEnvir3","testEnvironmentOptions","_newTableBorderless","options","table","Table","colAligns","chars","top","bottom","left","mid","right","middle","applyStyleBorderless","printJestConfigInfo","_options$cwd","_options$file","_jestConfig$cacheDire","_jestConfig$rootDir","_jestConfig$roots","_jestConfig$preset","push","jName","jVersion","process","versions","node","cwd","file","length","cacheDirectory","rootDir","roots","inspect","preset","transform","depth","gray","log","repeat","toString","defaultTsJestTransformerOptions","runtime","_runtime$jestConfig$g","_runtime$jestConfig$g2","_tsconfig$types","old","globals","tsconfig","types","noEmit","emitDeclarationOnly","noUnusedParameters","allowUnusedLabels","noUnusedLocals","noPropertyAccessFromIndexSignature","noImplicitAny","defaultTransform","opts","ts_transform","tsd","chain","transformers","detectIncludes","arr","keys","Array","isArray","re","RegExp","escapeArrayToRegExpSource","forEach","_match","_ref","m","match","call","_result$k","k","map","s","escapeRegExp","defaultSetupFiles","_runtime$jestConfig","_jestConfig$setupFile","_jestConfig$setupFile2","detect","setupFiles","setupFilesAfterEnv","ret","getJestCacheDirectory","mixinJestConfig","autoPrint","_newJestConfig$transf","newJestConfig","maxWorkers","clearMocks","passWithNoTests","moduleFileExtensions","testPathIgnorePatterns","verbose","coverageProvider","collectCoverage","coveragePathIgnorePatterns"],"mappings":"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"}
|
|
@@ -4,45 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
});
|
|
6
6
|
|
|
7
|
-
var e = require("@yarn-tool/require-resolve"), t = require("debug-color2"), s = require("array-hyper-unique"), o = require("@yarn-tool/table"), r = require("util"), n = require("jest-cache-directory");
|
|
8
|
-
|
|
9
|
-
function defaultTsJestTransformerOptions(e) {
|
|
10
|
-
var t, s;
|
|
11
|
-
const o = null !== (t = null === (s = e.jestConfig.globals) || void 0 === s ? void 0 : s["ts-jest"]) && void 0 !== t ? t : {}, r = "object" == typeof o.tsconfig ? o.tsconfig : {};
|
|
12
|
-
return {
|
|
13
|
-
...o,
|
|
14
|
-
tsconfig: {
|
|
15
|
-
noEmit: !0,
|
|
16
|
-
emitDeclarationOnly: !1,
|
|
17
|
-
noUnusedParameters: !1,
|
|
18
|
-
allowUnusedLabels: !0,
|
|
19
|
-
noUnusedLocals: !1,
|
|
20
|
-
noPropertyAccessFromIndexSignature: !1,
|
|
21
|
-
noImplicitAny: !1,
|
|
22
|
-
...r
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function defaultTransform(t) {
|
|
28
|
-
const s = {
|
|
29
|
-
includeGlobal: !0,
|
|
30
|
-
includeCurrentDirectory: !0,
|
|
31
|
-
paths: [ e.requireResolveExtra("@bluelovers/jest-config").result ].filter(Boolean)
|
|
32
|
-
};
|
|
33
|
-
let o = _requireResolve("ts-jest");
|
|
34
|
-
o = [ o, defaultTsJestTransformerOptions(t) ];
|
|
35
|
-
const {result: r} = e.requireResolveExtra("jest-tsd-transform", s);
|
|
36
|
-
if (null != r && r.length) {
|
|
37
|
-
const {result: t} = e.requireResolveExtra("jest-chain-transform", s);
|
|
38
|
-
null != t && t.length && (o = [ t, {
|
|
39
|
-
transformers: [ r, o ]
|
|
40
|
-
} ]);
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
[`.(${_handleFileExtensions([ "ts", "tsx", "mts", "cts" ], "|")})$`]: o
|
|
44
|
-
};
|
|
45
|
-
}
|
|
7
|
+
var e = require("@yarn-tool/require-resolve"), t = require("debug-color2"), s = require("array-hyper-unique"), o = require("@yarn-tool/table"), r = require("util"), n = require("jest-cache-directory"), l = require("regexp-helper-core");
|
|
46
8
|
|
|
47
9
|
function _requireResolve(s) {
|
|
48
10
|
const o = [ e.requireResolveExtra("@bluelovers/tsdx").result, e.requireResolveExtra("tsdx").result ].filter(Boolean), r = e.requireResolveCore(s, {
|
|
@@ -53,13 +15,19 @@ function _requireResolve(s) {
|
|
|
53
15
|
return t.console.debug("[require.resolve]", s, "=>", r), r;
|
|
54
16
|
}
|
|
55
17
|
|
|
18
|
+
function _requireResolve2(t) {
|
|
19
|
+
return e.requireResolveExtra(t, {
|
|
20
|
+
includeGlobal: !0,
|
|
21
|
+
includeCurrentDirectory: !0
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
56
25
|
function makeTestRegexConfig(e) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const s = _handleFileExtensions(e, "|");
|
|
26
|
+
null != e || (e = [ "ts", "tsx", "mts", "cts" ]);
|
|
27
|
+
const t = _handleFileExtensions(e, "|");
|
|
60
28
|
return {
|
|
61
29
|
testMatch: null,
|
|
62
|
-
testRegex: [ `\\.(tests?|spec)\\.(${
|
|
30
|
+
testRegex: [ `\\.(tests?|spec)\\.(${t})$`, `__tests__/.*\\.(tests?|spec)\\.(${t})$` ]
|
|
63
31
|
};
|
|
64
32
|
}
|
|
65
33
|
|
|
@@ -78,8 +46,6 @@ function fixJestConfig(e) {
|
|
|
78
46
|
e;
|
|
79
47
|
}
|
|
80
48
|
|
|
81
|
-
var i = "@bluelovers/jest-config", l = "1.1.11";
|
|
82
|
-
|
|
83
49
|
function _newTableBorderless(e) {
|
|
84
50
|
let t = new o.Table({
|
|
85
51
|
colAligns: [ "right", "left" ],
|
|
@@ -106,59 +72,126 @@ function _newTableBorderless(e) {
|
|
|
106
72
|
}
|
|
107
73
|
|
|
108
74
|
function printJestConfigInfo(e, s) {
|
|
109
|
-
var o, n,
|
|
110
|
-
const
|
|
111
|
-
null
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
(null === (
|
|
115
|
-
(null === (
|
|
116
|
-
(null === (
|
|
117
|
-
(null === (
|
|
118
|
-
e.transform &&
|
|
75
|
+
var o, n, l, i, u, a;
|
|
76
|
+
const c = _newTableBorderless();
|
|
77
|
+
null != s || (s = {}), null != e || (e = {}), c.push([ "@bluelovers/jest-config:", "1.1.13" ]),
|
|
78
|
+
c.push([ "process.versions.node:", process.versions.node ]), c.push([ "cwd:", null !== (o = s.cwd) && void 0 !== o ? o : process.cwd() ]),
|
|
79
|
+
(null === (n = s.file) || void 0 === n ? void 0 : n.length) && c.push([ "file:", s.file ]),
|
|
80
|
+
(null === (l = e.cacheDirectory) || void 0 === l ? void 0 : l.length) && c.push([ "cacheDirectory:", e.cacheDirectory ]),
|
|
81
|
+
(null === (i = e.rootDir) || void 0 === i ? void 0 : i.length) && c.push([ "rootDir:", e.rootDir ]),
|
|
82
|
+
(null === (u = e.roots) || void 0 === u ? void 0 : u.length) && c.push([ "roots:", r.inspect(e.roots) ]),
|
|
83
|
+
(null === (a = e.preset) || void 0 === a ? void 0 : a.length) && c.push([ "preset:", e.preset ]),
|
|
84
|
+
e.transform && c.push([ "transform:", r.inspect(e.transform, {
|
|
119
85
|
depth: 3
|
|
120
|
-
}) ]), t.console.gray.log("─".repeat(20)), t.console.log("jest.config"), t.console.log(
|
|
86
|
+
}) ]), t.console.gray.log("─".repeat(20)), t.console.log("jest.config"), t.console.log(c.toString()),
|
|
121
87
|
t.console.gray.log("─".repeat(20));
|
|
122
88
|
}
|
|
123
89
|
|
|
124
|
-
|
|
90
|
+
function defaultTsJestTransformerOptions(e) {
|
|
91
|
+
var t, o, r;
|
|
92
|
+
const n = null !== (t = null === (o = e.jestConfig.globals) || void 0 === o ? void 0 : o["ts-jest"]) && void 0 !== t ? t : {}, l = "object" == typeof n.tsconfig ? n.tsconfig : {}, i = s.array_unique([ ...null !== (r = l.types) && void 0 !== r ? r : [], "jest" ]);
|
|
93
|
+
return {
|
|
94
|
+
...n,
|
|
95
|
+
tsconfig: {
|
|
96
|
+
noEmit: !0,
|
|
97
|
+
emitDeclarationOnly: !1,
|
|
98
|
+
noUnusedParameters: !1,
|
|
99
|
+
allowUnusedLabels: !0,
|
|
100
|
+
noUnusedLocals: !1,
|
|
101
|
+
noPropertyAccessFromIndexSignature: !1,
|
|
102
|
+
noImplicitAny: !1,
|
|
103
|
+
...l,
|
|
104
|
+
types: i
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function defaultTransform(t) {
|
|
110
|
+
const s = {
|
|
111
|
+
includeGlobal: !0,
|
|
112
|
+
includeCurrentDirectory: !0,
|
|
113
|
+
paths: [ e.requireResolveExtra("@bluelovers/jest-config").result ].filter(Boolean)
|
|
114
|
+
};
|
|
115
|
+
let o = _requireResolve("ts-jest");
|
|
116
|
+
o = [ o, defaultTsJestTransformerOptions(t) ];
|
|
117
|
+
const {result: r} = e.requireResolveExtra("jest-tsd-transform", s);
|
|
118
|
+
if (null != r && r.length) {
|
|
119
|
+
const {result: t} = e.requireResolveExtra("jest-chain-transform", s);
|
|
120
|
+
null != t && t.length && (o = [ t, {
|
|
121
|
+
transformers: [ r, o ]
|
|
122
|
+
} ]);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
[`.(${_handleFileExtensions([ "ts", "tsx", "mts", "cts" ], "|")})$`]: o
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function detectIncludes(e, t) {
|
|
130
|
+
let s = {};
|
|
131
|
+
if (null != e && e.length && t.length) {
|
|
132
|
+
t = Array.isArray(t) ? t : [ t ];
|
|
133
|
+
const o = new RegExp(`(${function escapeArrayToRegExpSource(e) {
|
|
134
|
+
return e.map(e => l.escapeRegExp(e)).join("|");
|
|
135
|
+
}(t)})`);
|
|
136
|
+
e.forEach(e => {
|
|
137
|
+
var t, r;
|
|
138
|
+
let n = null == e || null === (t = (r = e).match) || void 0 === t ? void 0 : t.call(r, o);
|
|
139
|
+
if (n) {
|
|
140
|
+
var l;
|
|
141
|
+
const t = n[1];
|
|
142
|
+
(null !== (l = s[t]) && void 0 !== l ? l : s[t] = []).push(e);
|
|
143
|
+
}
|
|
144
|
+
return s;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return s;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function defaultSetupFiles(e) {
|
|
151
|
+
var t, s, o;
|
|
152
|
+
const r = null !== (t = null == e ? void 0 : e.jestConfig) && void 0 !== t ? t : {}, n = [ !detectIncludes(r.setupFiles, "dotenv").dotenv && _requireResolve2("dotenv/config").result, ...null !== (s = r.setupFiles) && void 0 !== s ? s : [] ].filter(Boolean), l = [ ...null !== (o = r.setupFilesAfterEnv) && void 0 !== o ? o : [] ].filter(Boolean), i = {};
|
|
153
|
+
return n.length && (i.setupFiles = n), l.length && (i.setupFilesAfterEnv = l), i;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const i = /*#__PURE__*/ n.getJestCacheDirectory();
|
|
125
157
|
|
|
126
158
|
function mixinJestConfig(e, t, s) {
|
|
127
|
-
var o
|
|
128
|
-
null
|
|
129
|
-
const
|
|
159
|
+
var o;
|
|
160
|
+
null != e || (e = {});
|
|
161
|
+
const r = fixJestConfig({
|
|
130
162
|
globals: {},
|
|
131
|
-
cacheDirectory:
|
|
163
|
+
cacheDirectory: i,
|
|
132
164
|
maxWorkers: 1,
|
|
133
165
|
clearMocks: !0,
|
|
134
166
|
passWithNoTests: !0,
|
|
135
167
|
moduleFileExtensions: [ "js", "mjs", "cjs", "jsx", "ts", "mts", "cts", "tsx", "json", "node" ],
|
|
136
168
|
...makeTestRegexConfig([ "ts", "tsx", "mts", "cts" ]),
|
|
137
169
|
testPathIgnorePatterns: [ "/node_modules/", "/__fixtures__/", "/__file_snapshots__/", "/fixtures/", "/__tests__/helpers/", "/__tests__/utils/", "__mocks__", "/dist/" ],
|
|
138
|
-
|
|
170
|
+
...defaultSetupFiles(),
|
|
139
171
|
verbose: !0,
|
|
140
172
|
coverageProvider: "v8",
|
|
141
173
|
collectCoverage: !1,
|
|
142
174
|
coveragePathIgnorePatterns: [ "/node_modules/", "/__snapshots__/", "/__tests__/", "/__test__/", "/dist/", "/test/", "/fixture/", "/__file_snapshots__/", "/__fixtures__/" ],
|
|
143
175
|
...e
|
|
144
176
|
});
|
|
145
|
-
return null !== (
|
|
177
|
+
return null !== (o = r.transform) && void 0 !== o || (r.transform = defaultTransform({
|
|
146
178
|
jestConfig: e,
|
|
147
179
|
autoPrint: t,
|
|
148
180
|
options: s,
|
|
149
|
-
newJestConfig:
|
|
150
|
-
})), t && printJestConfigInfo(
|
|
181
|
+
newJestConfig: r
|
|
182
|
+
})), t && printJestConfigInfo(r, s), r;
|
|
151
183
|
}
|
|
152
184
|
|
|
153
185
|
exports._handleFileExtensions = _handleFileExtensions, exports._handleFileExtensionsCore = _handleFileExtensionsCore,
|
|
154
186
|
exports._newTableBorderless = _newTableBorderless, exports._requireResolve = _requireResolve,
|
|
155
|
-
exports.
|
|
187
|
+
exports._requireResolve2 = _requireResolve2, exports.cacheDirectory = i, exports.default = mixinJestConfig,
|
|
188
|
+
exports.defaultCoverageFileExtensions = function defaultCoverageFileExtensions() {
|
|
156
189
|
return [ "js", "mjs", "cjs", "jsx", "ts", "mts", "cts", "tsx" ];
|
|
157
190
|
}, exports.defaultCoveragePathIgnorePatterns = function defaultCoveragePathIgnorePatterns() {
|
|
158
191
|
return [ "/node_modules/", "/__snapshots__/", "/__tests__/", "/__test__/", "/dist/", "/test/", "/fixture/", "/__file_snapshots__/", "/__fixtures__/" ];
|
|
159
192
|
}, exports.defaultModuleFileExtensions = function defaultModuleFileExtensions() {
|
|
160
193
|
return [ "js", "mjs", "cjs", "jsx", "ts", "mts", "cts", "tsx", "json", "node" ];
|
|
161
|
-
}, exports.defaultTestFileExtensions = function defaultTestFileExtensions() {
|
|
194
|
+
}, exports.defaultSetupFiles = defaultSetupFiles, exports.defaultTestFileExtensions = function defaultTestFileExtensions() {
|
|
162
195
|
return [ "ts", "tsx", "mts", "cts" ];
|
|
163
196
|
}, exports.defaultTestPathIgnorePatterns = function defaultTestPathIgnorePatterns() {
|
|
164
197
|
return [ "/node_modules/", "/__fixtures__/", "/__file_snapshots__/", "/fixtures/", "/__tests__/helpers/", "/__tests__/utils/", "__mocks__", "/dist/" ];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.production.min.cjs","sources":["../src/plugin/ts-jest.ts","../src/defaults.ts","../src/helper.ts","../src/print.ts","../src/index.ts"],"sourcesContent":["import { TsJestTransformerOptions } from 'ts-jest';\nimport { IRuntime } from '../types';\n\nexport function defaultTsJestTransformerOptions(runtime: IRuntime)\n{\n\tconst old: TsJestTransformerOptions = runtime.jestConfig.globals?.['ts-jest'] ?? {};\n\n\tconst tsconfig = typeof old.tsconfig === 'object' ? old.tsconfig : {};\n\n\treturn {\n\t\t...old,\n\t\ttsconfig: {\n\t\t\tnoEmit: true,\n\t\t\temitDeclarationOnly: false,\n\t\t\tnoUnusedParameters: false,\n\t\t\tallowUnusedLabels: true,\n\t\t\tnoUnusedLocals: false,\n\t\t\tnoPropertyAccessFromIndexSignature: false,\n\t\t\tnoImplicitAny: false,\n\t\t\t...tsconfig,\n\t\t},\n\t} satisfies TsJestTransformerOptions\n}\n","import { IOptions, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { ITSToWriteableArray } from 'ts-type/lib/helper/array/readonly';\nimport { ITSWriteable } from 'ts-type/lib/helper/readonly';\nimport { _handleFileExtensions, _requireResolve } from './helper';\nimport { InitialOptionsTsJest } from 'ts-jest';\nimport { defaultTsJestTransformerOptions } from './plugin/ts-jest';\nimport { IRuntime } from './types';\n\nexport function defaultTestFileExtensions()\n{\n\tconst value = [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n//\t'js',\n//\t'jsx',\n//\t'mjs',\n//\t'cjs',\n\t] as const;\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * @see https://jestjs.io/docs/configuration#options\n */\nexport function defaultModuleFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t'json',\n\t\t'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultCoverageFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t//'json',\n\t\t//'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultTransformFileExtensions()\n{\n\tconst value = [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultCoveragePathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__snapshots__/',\n\t\t'/__tests__/',\n\t\t'/__test__/',\n\t\t//'**/node_modules/',\n\t\t//'**/__snapshots__/',\n\t\t//'**/__tests__/',\n\t\t'/dist/',\n\t\t'/test/',\n\t\t'/fixture/',\n\t\t'/__file_snapshots__/',\n\t\t'/__fixtures__/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultTestPathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__fixtures__/',\n\t\t'/__file_snapshots__/',\n\t\t'/fixtures/',\n\t\t'/__tests__/helpers/',\n\t\t'/__tests__/utils/',\n\t\t'__mocks__',\n\t\t'/dist/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\nexport function defaultTransform(runtime: IRuntime)\n{\n\tconst paths: string[] = [\n\t\trequireResolveExtra('@bluelovers/jest-config').result,\n\t].filter(Boolean);\n\n\tconst opts: IOptions = {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t};\n\n\tlet ts_transform: InitialOptionsTsJest[\"transform\"][string] = _requireResolve('ts-jest') as 'ts-jest';\n\n\tts_transform = [ts_transform, defaultTsJestTransformerOptions(runtime)];\n\n\tconst { result: tsd } = requireResolveExtra('jest-tsd-transform', opts);\n\n\tif (tsd?.length)\n\t{\n\t\tconst { result: chain } = requireResolveExtra('jest-chain-transform', opts);\n\n\t\tif (chain?.length)\n\t\t{\n\t\t\tts_transform = [\n\t\t\t\tchain as 'jest-chain-transform', {\n\t\t\t\t\ttransformers: [\n\t\t\t\t\t\ttsd as 'jest-tsd-transform',\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tts_transform as 'ts-jest',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t] satisfies [\n\t\t\t\tstring,\n\t\t\t\tRecord<string, unknown>\n\t\t\t]\n\t\t}\n\t}\n\n\tconst value = {\n\t\t[`.(${_handleFileExtensions(defaultTransformFileExtensions(), '|')})$`]: ts_transform,\n\t} as const\n\treturn value as ITSWriteable<typeof value>;\n}\n","import { requireResolveCore, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { InitialOptionsTsJest } from 'ts-jest';\nimport { ITSValueOrArrayMaybeReadonly } from 'ts-type/lib/type/base';\nimport { console } from 'debug-color2';\nimport { IJestConfig } from './types';\nimport { defaultTestFileExtensions } from './defaults';\nimport { array_unique } from 'array-hyper-unique';\n\nexport function _requireResolve(name: string)\n{\n\tconst paths = [\n\t\trequireResolveExtra('@bluelovers/tsdx').result,\n\t\trequireResolveExtra('tsdx').result,\n\t].filter(Boolean);\n\n\tconst result = requireResolveCore(name, {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t});\n\n\tconsole.debug('[require.resolve]', name, '=>', result)\n\n\treturn result\n}\n\nexport function makeTestRegexConfig<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>): Pick<InitialOptionsTsJest, 'testMatch' | 'testRegex'>\n{\n\ttestExt ??= defaultTestFileExtensions() as any as T[];\n\tconst _testExt = _handleFileExtensions(testExt, '|')\n\n\treturn {\n\t\ttestMatch: null as undefined,\n\t\ttestRegex: [\n\t\t\t`\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t\t`__tests__\\/\\.*\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t],\n\t}\n}\n\nexport function _handleFileExtensionsCore<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>)\n{\n\treturn array_unique([testExt].flat()) as T[]\n}\n\nexport function _handleFileExtensions<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>, sep: string)\n{\n\treturn _handleFileExtensionsCore(testExt).join(sep)\n}\n\nexport function fixJestConfig<T extends IJestConfig>(jestConfig: T): T\n{\n\tif (jestConfig.testMatch)\n\t{\n\t\tjestConfig.testRegex = null;\n\t}\n\telse if (jestConfig.testRegex)\n\t{\n\t\tjestConfig.testMatch = null;\n\t}\n\n\t/**\n\t * Option \"testURL\" was replaced by passing the URL via \"testEnvironmentOptions.url\".\n\t */\n\tif (jestConfig.testURL)\n\t{\n\t\tjestConfig.testEnvironmentOptions ??= {};\n\n\t\tjestConfig.testURL = (jestConfig.testEnvironmentOptions['url'] ??= jestConfig.testURL) as string\n\t}\n\n\treturn jestConfig\n}\n","import { applyStyleBorderless, Table } from '@yarn-tool/table';\nimport { TableConstructorOptions } from 'cli-table3';\nimport { console } from 'debug-color2';\nimport { inspect } from 'util';\nimport { name as jName, version as jVersion } from '../package.json';\nimport { IJestConfig } from './types';\n\nexport function _newTableBorderless(options?: TableConstructorOptions)\n{\n\tlet table = new Table({\n\t\tcolAligns: ['right', 'left'],\n\t\t//colAligns: ['left', 'center', 'center', 'center'],\n\t\tchars: {\n\t\t\ttop: '',\n\t\t\t'top-mid': '',\n\t\t\t'top-left': '',\n\t\t\t'top-right': '',\n\t\t\tbottom: '',\n\t\t\t'bottom-mid': '',\n\t\t\t'bottom-left': '',\n\t\t\t'bottom-right': '',\n\t\t\tleft: '',\n\t\t\t'left-mid': '',\n\t\t\tmid: '',\n\t\t\t'mid-mid': '',\n\t\t\tright: '',\n\t\t\t'right-mid': '',\n\t\t\tmiddle: '',\n\t\t},\n\t\t...options,\n\t});\n\n\ttable = applyStyleBorderless(table);\n\n\treturn table;\n}\n\nexport interface IOptionsPrintJestConfigInfo\n{\n\tcwd?: string;\n\tfile?: string;\n}\n\nexport function printJestConfigInfo(jestConfig: IJestConfig, options?: IOptionsPrintJestConfigInfo)\n{\n\tconst table = _newTableBorderless();\n\n\toptions ??= {};\n\t// @ts-ignore\n\tjestConfig ??= {};\n\n\ttable.push([`${jName}:`, jVersion]);\n\ttable.push([`process.versions.node:`, process.versions.node]);\n\ttable.push(['cwd:', options.cwd ?? process.cwd()]);\n\n\toptions.file?.length && table.push(['file:', options.file]);\n\n\tjestConfig.cacheDirectory?.length && table.push(['cacheDirectory:', jestConfig.cacheDirectory]);\n\n\tjestConfig.rootDir?.length && table.push(['rootDir:', jestConfig.rootDir]);\n\tjestConfig.roots?.length && table.push(['roots:', inspect(jestConfig.roots)]);\n\n\tjestConfig.preset?.length && table.push(['preset:', jestConfig.preset]);\n\n\tjestConfig.transform && table.push(['transform:', inspect(jestConfig.transform, {\n\t\tdepth: 3\n\t})]);\n\n\tconsole.gray.log('─'.repeat(20));\n\tconsole.log(`jest.config`);\n\tconsole.log(table.toString());\n\tconsole.gray.log('─'.repeat(20));\n}\n","import { _requireResolve, fixJestConfig, makeTestRegexConfig } from './helper';\nimport {\n\tdefaultCoveragePathIgnorePatterns,\n\tdefaultModuleFileExtensions,\n\tdefaultTestFileExtensions,\n\tdefaultTestPathIgnorePatterns, defaultTransform,\n} from './defaults';\nimport { IOptionsPrintJestConfigInfo, printJestConfigInfo } from './print';\nimport { IJestConfig } from './types';\nimport { getJestCacheDirectory } from 'jest-cache-directory';\n\nexport * from './helper';\nexport * from './defaults';\nexport * from './print';\n\nconst cacheDirectory = getJestCacheDirectory();\n\nexport { cacheDirectory }\n\nexport function mixinJestConfig<T extends IJestConfig>(jestConfig?: T, autoPrint?: boolean,\n\toptions?: IOptionsPrintJestConfigInfo)\n{\n\t// @ts-ignore\n\tjestConfig ??= {};\n\tconst newJestConfig = fixJestConfig({\n\t\tglobals: {\n//\t\t\t'ts-jest': {\n//\t\t\t\t//tsconfig: 'tsconfig.spec.json',\n//\t\t\t},\n\t\t},\n\t\tcacheDirectory,\n\t\tmaxWorkers: 1,\n\t\tclearMocks: true,\n\t\tpassWithNoTests: true,\n\t\tmoduleFileExtensions: defaultModuleFileExtensions(),\n\t\t//testEnvironment: 'node',\n\t\t//testMatch: ['**/*.test.ts', '**/*.spec.ts'],\n\t\t...makeTestRegexConfig(defaultTestFileExtensions()),\n\t\ttestPathIgnorePatterns: defaultTestPathIgnorePatterns(),\n\t\t//testRunner: 'jest-circus/runner',\n\t\tsetupFilesAfterEnv: [\n\t\t\t//\"jest-chain\",\n\t\t\t//\"jest-extended/all\",\n\t\t\t//\"jest-extended-extra\",\n\t\t\t//\"jest-num-close-with\",\n\t\t\t/**\n\t\t\t * https://medium.com/doctolib/how-to-run-the-same-jest-test-suite-across-several-platforms-jest-os-detection-plugin-included-f8113832482b\n\t\t\t * https://github.com/doctolib/jest-os-detection\n\t\t\t */\n\t\t\t//'jest-os-detection',\n\t\t],\n\t\t//transform: defaultTransform(),\n\t\tverbose: true,\n\t\t/**\n\t\t * if didn't set `coverageProvider` to `v8`\n\t\t * with `collectCoverage` `true`, nodejs debug point maybe will fail\n\t\t */\n\t\tcoverageProvider: 'v8',\n\t\tcollectCoverage: false,\n\t\tcoveragePathIgnorePatterns: defaultCoveragePathIgnorePatterns(),\n\t\t/**\n\t\t * https://github.com/facebook/jest/issues/9771#issuecomment-872764344\n\t\t */\n\t\t//resolver: 'jest-node-exports-resolver',\n\t\t...jestConfig,\n\t});\n\n\tnewJestConfig.transform ??= defaultTransform({\n\t\tjestConfig,\n\t\tautoPrint,\n\t\toptions,\n\t\tnewJestConfig,\n\t});\n\n\tautoPrint && printJestConfigInfo(newJestConfig, options);\n\n\treturn newJestConfig\n}\n\nexport default mixinJestConfig\n"],"names":["defaultTsJestTransformerOptions","runtime","_runtime$jestConfig$g","_runtime$jestConfig$g2","old","jestConfig","globals","tsconfig","noEmit","emitDeclarationOnly","noUnusedParameters","allowUnusedLabels","noUnusedLocals","noPropertyAccessFromIndexSignature","noImplicitAny","defaultTransform","opts","includeGlobal","includeCurrentDirectory","paths","requireResolveExtra","result","filter","Boolean","ts_transform","_requireResolve","tsd","length","chain","transformers","_handleFileExtensions","name","requireResolveCore","console","debug","makeTestRegexConfig","testExt","_testExt2","_testExt","testMatch","testRegex","_handleFileExtensionsCore","array_unique","flat","sep","join","fixJestConfig","_jestConfig$testEnvir","_jestConfig$testEnvir2","_jestConfig$testEnvir3","testURL","testEnvironmentOptions","_newTableBorderless","options","table","Table","colAligns","chars","top","bottom","left","mid","right","middle","applyStyleBorderless","printJestConfigInfo","_options","_jestConfig","_options$cwd","_options$file","_jestConfig$cacheDire","_jestConfig$rootDir","_jestConfig$roots","_jestConfig$preset","push","jName","jVersion","process","versions","node","cwd","file","cacheDirectory","rootDir","roots","inspect","preset","transform","depth","gray","log","repeat","toString","getJestCacheDirectory","mixinJestConfig","autoPrint","_newJestConfig$transf","newJestConfig","maxWorkers","clearMocks","passWithNoTests","moduleFileExtensions","testPathIgnorePatterns","setupFilesAfterEnv","verbose","coverageProvider","collectCoverage","coveragePathIgnorePatterns","defaultCoverageFileExtensions","defaultCoveragePathIgnorePatterns","defaultModuleFileExtensions","defaultTestFileExtensions","defaultTestPathIgnorePatterns","defaultTransformFileExtensions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.production.min.cjs","sources":["../src/helper.ts","../src/defaults.ts","../src/print.ts","../src/plugin/ts-jest.ts","../src/default-transform.ts","../src/util.ts","../src/default-setup-fles.ts","../src/index.ts"],"sourcesContent":["/**\n * 輔助函數模組 - 提供 Jest 配置處理的通用工具函數\n * Helper Functions Module - Provides utility functions for Jest configuration processing\n */\n\nimport { requireResolveCore, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { ITSValueOrArrayMaybeReadonly } from 'ts-type/lib/type/base';\nimport { console } from 'debug-color2';\nimport { IJestConfig } from './types';\nimport { defaultTestFileExtensions } from './defaults';\nimport { array_unique } from 'array-hyper-unique';\n\n/**\n * 解析模組路徑的內部輔助函數\n * Internal helper function for resolving module paths\n *\n * 優先從 @bluelovers/tsdx 或 tsdx 套件路徑中搜尋,若失敗則使用標準 require.resolve\n * Searches from @bluelovers/tsdx or tsdx package paths first, falls back to standard require.resolve\n *\n * @param {string} name - 要解析的模組名稱 / Module name to resolve\n * @returns {string} 解析後的模組絕對路徑 / Resolved absolute module path\n */\nexport function _requireResolve(name: string)\n{\n\t/**\n\t * 搜尋路徑列表,包含 tsdx 相關套件路徑\n\t * Search paths list including tsdx related package paths\n\t */\n\tconst paths = [\n\t\trequireResolveExtra('@bluelovers/tsdx').result,\n\t\trequireResolveExtra('tsdx').result,\n\t].filter(Boolean);\n\n\t/**\n\t * 使用增強的解析器進行模組解析\n\t * Use enhanced resolver for module resolution\n\t */\n\tconst result = requireResolveCore(name, {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t});\n\n\t// 輸出除錯資訊 / Output debug info\n\tconsole.debug('[require.resolve]', name, '=>', result)\n\n\treturn result\n}\n\nexport function _requireResolve2(name: string)\n{\n\treturn requireResolveExtra(name, {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t})\n}\n\n/**\n * 建立測試正則表達式配置\n * Create test regex configuration\n *\n * 根據測試檔案副檔名生成 testMatch 和 testRegex 配置\n * Generates testMatch and testRegex configs based on test file extensions\n *\n * @param {T} testExt - 測試檔案副檔名或陣列 / Test file extension(s)\n * @returns {object} 包含 testMatch 和 testRegex 的配置物件 / Object containing testMatch and testRegex\n */\nexport function makeTestRegexConfig<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>): Pick<IJestConfig, 'testMatch' | 'testRegex'>\n{\n\t// 若未提供副檔名則使用預設值 / Use default if no extensions provided\n\ttestExt ??= defaultTestFileExtensions() as any as T[];\n\tconst _testExt = _handleFileExtensions(testExt, '|')\n\n\treturn {\n\t\t/** 不使用 testMatch(使用 testRegex 替代) / Not using testMatch (using testRegex instead) */\n\t\ttestMatch: null as undefined,\n\t\t/**\n\t\t * 測試檔案正則表達式模式陣列\n\t\t * Test file regex patterns array\n\t\t *\n\t\t * 匹配以下模式:\n\t\t * - *.test.ts, *.spec.ts, *.tests.ts\n\t\t * - __tests__ 目錄下的測試檔案\n\t\t */\n\t\ttestRegex: [\n\t\t\t`\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t\t`__tests__\\/\\.*\\\\.(tests?|spec)\\\\.(${_testExt})$`,\n\t\t],\n\t}\n}\n\n/**\n * 處理檔案副檔名陣列的核心函數\n * Core function for processing file extension arrays\n *\n * 將輸入轉換為唯一的副檔名陣列\n * Converts input to unique array of extensions\n *\n * @param {T} testExt - 輸入的副檔名(可為陣列或單一值) / Input extension(s)\n * @returns {T[]} 唯一的副檔名陣列 / Unique array of extensions\n */\nexport function _handleFileExtensionsCore<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>)\n{\n\treturn array_unique([testExt].flat()) as T[]\n}\n\n/**\n * 處理檔案副檔名並以指定分隔符連接\n * Process file extensions and join with specified separator\n *\n * @param {T} testExt - 輸入的副檔名(可為陣列或單一值) / Input extension(s)\n * @param {string} sep - 分隔符號 / Separator string\n * @returns {string} 連接後的副檔名字串 / Joined extension string\n */\nexport function _handleFileExtensions<T extends string>(testExt: ITSValueOrArrayMaybeReadonly<T>, sep: string)\n{\n\treturn _handleFileExtensionsCore(testExt).join(sep)\n}\n\n/**\n * 修復 Jest 配置中的相容性問題\n * Fix compatibility issues in Jest configuration\n *\n * 處理 testMatch/testRegex 互斥問題以及 testURL 已棄用選項的遷移\n * Handles testMatch/testRegex mutual exclusivity and testURL deprecated option migration\n *\n * @param {T} jestConfig - 原始 Jest 配置 / Original Jest configuration\n * @returns {T} 修復後的 Jest 配置 / Fixed Jest configuration\n */\nexport function fixJestConfig<T extends IJestConfig>(jestConfig: T): T\n{\n\t/**\n\t * testMatch 和 testRegex 是互斥的選項\n\t * testMatch and testRegex are mutually exclusive options\n\t *\n\t * 如果同時設定兩者會造成衝突,因此需要清除其中一個\n\t * Having both set causes conflicts, so we need to clear one\n\t */\n\tif (jestConfig.testMatch)\n\t{\n\t\t// 如果使用 testMatch,清除 testRegex\n\t\t// If using testMatch, clear testRegex\n\t\tjestConfig.testRegex = null;\n\t}\n\telse if (jestConfig.testRegex)\n\t{\n\t\t// 如果使用 testRegex,清除 testMatch\n\t\t// If using testRegex, clear testMatch\n\t\tjestConfig.testMatch = null;\n\t}\n\n\t/**\n\t * testURL 選項已被 testEnvironmentOptions.url 取代\n\t * testURL option has been replaced by testEnvironmentOptions.url\n\t *\n\t * @see https://jestjs.io/docs/configuration#testurl-string\n\t */\n\tif (jestConfig.testURL)\n\t{\n\t\t// 確保 testEnvironmentOptions 物件存在\n\t\t// Ensure testEnvironmentOptions object exists\n\t\tjestConfig.testEnvironmentOptions ??= {};\n\n\t\t// 將 testURL 遷移到 testEnvironmentOptions.url\n\t\t// Migrate testURL to testEnvironmentOptions.url\n\t\tjestConfig.testURL = (jestConfig.testEnvironmentOptions['url'] ??= jestConfig.testURL) as string\n\t}\n\n\treturn jestConfig\n}\n","/**\n * 預設配置模組 - 提供 Jest 各項預設設定值\n * Default Configuration Module - Provides default settings for Jest\n */\n\nimport { ITSToWriteableArray } from 'ts-type/lib/helper/array/readonly';\n\n/**\n * 取得預設的測試檔案副檔名列表\n * Get default test file extensions list\n *\n * 定義哪些副檔名的檔案會被視為測試檔案\n * Defines which file extensions are recognized as test files\n *\n * @returns {string[]} 測試檔案副檔名陣列 / Array of test file extensions\n */\nexport function defaultTestFileExtensions()\n{\n\tconst value = [\n\t\t// TypeScript 相關副檔名 / TypeScript related extensions\n\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\n\t\t// JavaScript 相關副檔名(目前註解掉) / JavaScript related extensions (currently commented)\n\n\t\t//'js',\n\t\t//'jsx',\n\t\t//'mjs',\n\t\t//'cjs',\n\t] as const;\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的模組檔案副檔名列表\n * Get default module file extensions list\n *\n * 定義模組解析時搜尋的副檔名順序\n * Defines the order of extensions to search during module resolution\n *\n * @see https://jestjs.io/docs/configuration#options\n * @returns {string[]} 模組檔案副檔名陣列 / Array of module file extensions\n */\nexport function defaultModuleFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t'json',\n\t\t'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的覆蓋率檔案副檔名列表\n * Get default coverage file extensions list\n *\n * 定義哪些副檔名的檔案會被納入覆蓋率統計\n * Defines which file extensions are included in coverage statistics\n *\n * @returns {string[]} 覆蓋率檔案副檔名陣列 / Array of coverage file extensions\n */\nexport function defaultCoverageFileExtensions()\n{\n\tconst value = [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t\t'ts',\n\t\t'mts',\n\t\t'cts',\n\t\t'tsx',\n\t\t//'json',\n\t\t//'node',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的轉換器檔案副檔名列表\n * Get default transformer file extensions list\n *\n * 定義哪些副檔名的檔案需要經過 ts-jest 轉換\n * Defines which file extensions need to be transformed by ts-jest\n *\n * @returns {string[]} 轉換器檔案副檔名陣列 / Array of transformer file extensions\n */\nexport function defaultTransformFileExtensions()\n{\n\tconst value = [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的覆蓋率忽略路徑模式\n * Get default coverage path ignore patterns\n *\n * 定義哪些路徑的檔案不納入覆蓋率統計\n * Defines which paths are excluded from coverage statistics\n *\n * @returns {string[]} 覆蓋率忽略路徑模式陣列 / Array of coverage ignore patterns\n */\nexport function defaultCoveragePathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__snapshots__/',\n\t\t'/__tests__/',\n\t\t'/__test__/',\n\t\t//'**/node_modules/',\n\t\t//'**/__snapshots__/',\n\t\t//'**/__tests__/',\n\t\t'/dist/',\n\t\t'/test/',\n\t\t'/fixture/',\n\t\t'/__file_snapshots__/',\n\t\t'/__fixtures__/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n/**\n * 取得預設的測試路徑忽略模式\n * Get default test path ignore patterns\n *\n * 定義哪些路徑的檔案不會被視為測試檔案\n * Defines which paths are excluded from test file recognition\n *\n * @returns {string[]} 測試路徑忽略模式陣列 / Array of test path ignore patterns\n */\nexport function defaultTestPathIgnorePatterns()\n{\n\tconst value = [\n\t\t'/node_modules/',\n\t\t'/__fixtures__/',\n\t\t'/__file_snapshots__/',\n\t\t'/fixtures/',\n\t\t'/__tests__/helpers/',\n\t\t'/__tests__/utils/',\n\t\t'__mocks__',\n\t\t'/dist/',\n\t] as const\n\treturn value as ITSToWriteableArray<typeof value>;\n}\n\n","/**\n * 配置資訊印出模組 - 格式化並顯示 Jest 配置資訊\n * Configuration Info Print Module - Formats and displays Jest configuration info\n */\n\nimport { applyStyleBorderless, Table } from '@yarn-tool/table';\nimport { TableConstructorOptions } from 'cli-table3';\nimport { console } from 'debug-color2';\nimport { inspect } from 'util';\nimport { name as jName, version as jVersion } from '../package.json';\nimport { IJestConfig } from './types';\n\n/**\n * 建立無邊框表格實例\n * Create borderless table instance\n *\n * 用於以整齊的格式顯示 Jest 配置資訊\n * Used to display Jest configuration info in a neat format\n *\n * @param {TableConstructorOptions} options - 表格建構選項 / Table constructor options\n * @returns {Table} 無邊框表格實例 / Borderless table instance\n */\nexport function _newTableBorderless(options?: TableConstructorOptions)\n{\n\t/**\n\t * 建立表格實例,設定欄位對齊方式\n\t * Create table instance with column alignment settings\n\t */\n\tlet table = new Table({\n\t\t/** 欄位對齊方式(右對齊, 左對齊) / Column alignments (right, left) */\n\t\tcolAligns: ['right', 'left'],\n\t\t/**\n\t\t * 移除所有邊框字元,創造簡潔的外觀\n\t\t * Remove all border characters for clean appearance\n\t\t */\n\t\tchars: {\n\t\t\ttop: '',\n\t\t\t'top-mid': '',\n\t\t\t'top-left': '',\n\t\t\t'top-right': '',\n\t\t\tbottom: '',\n\t\t\t'bottom-mid': '',\n\t\t\t'bottom-left': '',\n\t\t\t'bottom-right': '',\n\t\t\tleft: '',\n\t\t\t'left-mid': '',\n\t\t\tmid: '',\n\t\t\t'mid-mid': '',\n\t\t\tright: '',\n\t\t\t'right-mid': '',\n\t\t\tmiddle: '',\n\t\t},\n\t\t...options,\n\t});\n\n\t// 套用無邊框樣式 / Apply borderless style\n\ttable = applyStyleBorderless(table);\n\n\treturn table;\n}\n\n/**\n * 印出 Jest 配置資訊的選項介面\n * Options interface for printing Jest config info\n */\nexport interface IOptionsPrintJestConfigInfo\n{\n\t/** 目前工作目錄 / Current working directory */\n\tcwd?: string;\n\t/** 配置文件路徑 / Configuration file path */\n\tfile?: string;\n}\n\n/**\n * 印出 Jest 配置資訊\n * Print Jest configuration information\n *\n * 以表格格式顯示當前 Jest 配置的關鍵資訊,方便除錯和確認設定\n * Displays key info of current Jest config in table format for debugging and verification\n *\n * @param {IJestConfig} jestConfig - Jest 配置物件 / Jest configuration object\n * @param {IOptionsPrintJestConfigInfo} options - 印出選項 / Print options\n */\nexport function printJestConfigInfo(jestConfig: IJestConfig, options?: IOptionsPrintJestConfigInfo)\n{\n\t// 建立無邊框表格 / Create borderless table\n\tconst table = _newTableBorderless();\n\n\t// 初始化選項(若未提供) / Initialize options (if not provided)\n\toptions ??= {};\n\t// @ts-ignore\n\tjestConfig ??= {};\n\n\t/**\n\t * 添加基本資訊行到表格\n\t * Add basic info rows to table\n\t */\n\t// 套件名稱和版本 / Package name and version\n\ttable.push([`${jName}:`, jVersion]);\n\t// Node.js 版本 / Node.js version\n\ttable.push([`process.versions.node:`, process.versions.node]);\n\t// 目前工作目錄 / Current working directory\n\ttable.push(['cwd:', options.cwd ?? process.cwd()]);\n\n\t// 配置文件路徑(如果提供) / Config file path (if provided)\n\toptions.file?.length && table.push(['file:', options.file]);\n\n\t// 快取目錄(如果設定) / Cache directory (if set)\n\tjestConfig.cacheDirectory?.length && table.push(['cacheDirectory:', jestConfig.cacheDirectory]);\n\n\t// 根目錄(如果設定) / Root directory (if set)\n\tjestConfig.rootDir?.length && table.push(['rootDir:', jestConfig.rootDir]);\n\t// 根目錄陣列(如果設定) / Roots array (if set)\n\tjestConfig.roots?.length && table.push(['roots:', inspect(jestConfig.roots)]);\n\n\t// Preset 設定(如果設定) / Preset setting (if set)\n\tjestConfig.preset?.length && table.push(['preset:', jestConfig.preset]);\n\n\t// 轉換器配置(如果設定) / Transform config (if set)\n\tjestConfig.transform && table.push(['transform:', inspect(jestConfig.transform, {\n\t\t/** 檢視深度限制 / Inspection depth limit */\n\t\tdepth: 3\n\t})]);\n\n\t/**\n\t * 輸出表格到控制台\n\t * Output table to console\n\t */\n\t// 分隔線 / Separator line\n\tconsole.gray.log('─'.repeat(20));\n\t// 標題 / Title\n\tconsole.log(`jest.config`);\n\t// 表格內容 / Table content\n\tconsole.log(table.toString());\n\t// 分隔線 / Separator line\n\tconsole.gray.log('─'.repeat(20));\n}\n","/**\n * ts-jest 轉換器配置模組 - 提供 ts-jest 的預設選項設定\n * ts-jest Transformer Configuration Module - Provides default options for ts-jest\n */\n\nimport { TsJestTransformerOptions } from 'ts-jest';\nimport { IRuntime } from '../types';\nimport { array_unique } from 'array-hyper-unique';\n\n/**\n * 取得預設的 ts-jest 轉換器選項\n * Get default ts-jest transformer options\n *\n * 此函數會合併使用者自定義的 ts-jest 設定與預設值,確保測試環境的最佳配置\n * This function merges user custom ts-jest settings with defaults for optimal test environment\n *\n * 主要調整項目:\n * - 禁用輸出檔案(noEmit: true)\n * - 允許未使用的參數和標籤(用於測試開發)\n * - 禁用嚴格的型別檢查選項(確保測試能順利執行)\n *\n * Key adjustments:\n * - Disable file output (noEmit: true)\n * - Allow unused parameters and labels (for test development)\n * - Disable strict type checking options (ensure tests run smoothly)\n *\n * @param runtime - 執行時期配置,包含原始 Jest 配置 / Runtime configuration containing original Jest config\n * @returns ts-jest 轉換器選項 / ts-jest transformer options\n */\nexport function defaultTsJestTransformerOptions(runtime: IRuntime)\n{\n\t/**\n\t * 取得使用者自定義的 ts-jest 設定(如果存在)\n\t * Get user custom ts-jest settings (if exists)\n\t *\n\t * 從 jestConfig.globals['ts-jest'] 中讀取既有設定\n\t * Reads existing settings from jestConfig.globals['ts-jest']\n\t */\n\tconst old: TsJestTransformerOptions = (runtime.jestConfig.globals?.['ts-jest'] ?? {}) as TsJestTransformerOptions;\n\n\t/**\n\t * 處理 tsconfig 設定物件\n\t * Process tsconfig settings object\n\t *\n\t * 如果使用者提供了物件形式的 tsconfig,則使用它;否則建立空物件\n\t * Uses user-provided object tsconfig or creates empty object\n\t */\n\tconst tsconfig = typeof old.tsconfig === 'object' ? old.tsconfig : {};\n\n\tconst types = array_unique([...(tsconfig.types ?? []), 'jest']);\n\n\t/**\n\t * 回傳合併後的 ts-jest 選項\n\t * Return merged ts-jest options\n\t *\n\t * 預設值優先於使用者設定,但使用者設定可覆蓋預設值\n\t * Defaults take precedence but user settings can override them\n\t */\n\treturn {\n\t\t// 保留既有設定 / Preserve existing settings\n\t\t...old,\n\t\ttsconfig: {\n\t\t\t/**\n\t\t\t * 不輸出編譯後的檔案(僅用於型別檢查和轉換)\n\t\t\t * Don't emit compiled files (only for type checking and transformation)\n\t\t\t */\n\t\t\tnoEmit: true,\n\t\t\t/**\n\t\t\t * 不僅輸出宣告檔案(確保完整編譯)\n\t\t\t * Don't emit declaration only (ensure full compilation)\n\t\t\t */\n\t\t\temitDeclarationOnly: false,\n\t\t\t/**\n\t\t\t * 允許未使用的參數(測試中常見佔位符)\n\t\t\t * Allow unused parameters (common placeholders in tests)\n\t\t\t */\n\t\t\tnoUnusedParameters: false,\n\t\t\t/**\n\t\t\t * 允許未使用的標籤(方便測試標記)\n\t\t\t * Allow unused labels (convenient for test marking)\n\t\t\t */\n\t\t\tallowUnusedLabels: true,\n\t\t\t/**\n\t\t\t * 允許未使用的區域變數(測試開發彈性)\n\t\t\t * Allow unused locals (flexibility in test development)\n\t\t\t */\n\t\t\tnoUnusedLocals: false,\n\t\t\t/**\n\t\t\t * 允許從索引簽名進行屬性存取(簡化測試語法)\n\t\t\t * Allow property access from index signature (simpler test syntax)\n\t\t\t */\n\t\t\tnoPropertyAccessFromIndexSignature: false,\n\t\t\t/**\n\t\t\t * 允許隱含的 any 型別(減少測試中的型別宣告負擔)\n\t\t\t * Allow implicit any type (reduce type declaration overhead in tests)\n\t\t\t */\n\t\t\tnoImplicitAny: false,\n\t\t\t// 合併使用者自定義的 tsconfig 設定 / Merge user custom tsconfig settings\n\t\t\t...tsconfig,\n\t\t\ttypes,\n\t\t},\n\t} as TsJestTransformerOptions\n}\n","import { IJestConfig, IRuntime } from './types';\nimport { _handleFileExtensions, _requireResolve } from './helper';\nimport { defaultTsJestTransformerOptions } from './plugin/ts-jest';\nimport { defaultTransformFileExtensions } from './defaults';\nimport { IOptionsRequireResolve as IOptions, requireResolveExtra } from '@yarn-tool/require-resolve';\nimport { ITSWriteable } from 'ts-type';\n\n/**\n * 建立預設的轉換器配置\n * Create default transformer configuration\n *\n * 配置 ts-jest 作為主要轉換器,並在可用時整合 jest-tsd-transform 和 jest-chain-transform\n * Configures ts-jest as the main transformer, integrating jest-tsd-transform and jest-chain-transform when available\n *\n * @param {IRuntime} runtime - 執行時期配置 / Runtime configuration\n * @returns {object} 轉換器配置物件 / Transformer configuration object\n */\nexport function defaultTransform(runtime: IRuntime)\n{\n\t/**\n\t * 搜尋路徑列表,用於解析相關模組\n\t * Search paths list for resolving related modules\n\t */\n\tconst paths: string[] = [\n\t\trequireResolveExtra('@bluelovers/jest-config').result,\n\t].filter(Boolean);\n\n\t/**\n\t * 模組解析選項 / Module resolution options\n\t */\n\tconst opts: IOptions = {\n\t\tincludeGlobal: true,\n\t\tincludeCurrentDirectory: true,\n\t\tpaths,\n\t};\n\n\t/**\n\t * ts-jest 轉換器配置\n\t * ts-jest transformer configuration\n\t */\n\tlet ts_transform: IJestConfig[\"transform\"][string] = _requireResolve('ts-jest') as 'ts-jest';\n\n\t/**\n\t * 將 ts-jest 與其選項合併\n\t * Merge ts-jest with its options\n\t */\n\tts_transform = [ts_transform, defaultTsJestTransformerOptions(runtime)];\n\n\t/**\n\t * 嘗試解析 jest-tsd-transform(TypeScript 宣告檔轉換器)\n\t * Try to resolve jest-tsd-transform (TypeScript declaration file transformer)\n\t */\n\tconst { result: tsd } = requireResolveExtra('jest-tsd-transform', opts);\n\n\t/**\n\t * 如果 jest-tsd-transform 可用,嘗試建立轉換鏈\n\t * If jest-tsd-transform is available, try to create transform chain\n\t */\n\tif (tsd?.length)\n\t{\n\t\t/**\n\t\t * 嘗試解析 jest-chain-transform(轉換鏈協調器)\n\t\t * Try to resolve jest-chain-transform (transform chain coordinator)\n\t\t */\n\t\tconst { result: chain } = requireResolveExtra('jest-chain-transform', opts);\n\n\t\t/**\n\t\t * 如果 jest-chain-transform 可用,建立轉換鏈\n\t\t * If jest-chain-transform is available, create transform chain\n\t\t */\n\t\tif (chain?.length)\n\t\t{\n\t\t\tts_transform = [\n\t\t\t\tchain as 'jest-chain-transform', {\n\t\t\t\t\ttransformers: [\n\t\t\t\t\t\ttsd as 'jest-tsd-transform',\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tts_transform as 'ts-jest',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t] satisfies [\n\t\t\t\tstring,\n\t\t\t\tRecord<string, unknown>\n\t\t\t]\n\t\t}\n\t}\n\n\t/**\n\t * 建立最終的轉換器配置物件\n\t * Create final transformer configuration object\n\t */\n\tconst value = {\n\t\t[`.(${_handleFileExtensions(defaultTransformFileExtensions(), '|')})$`]: ts_transform,\n\t} as const\n\treturn value as ITSWriteable<typeof value>;\n}\n","import { ITSPartialRecord, ITSValueOrArrayMaybeReadonly } from \"ts-type\";\nimport { escapeRegExp } from \"regexp-helper-core\";\n\n/**\n * Detects all values in an array that include any of the given keys.\n *\n * @example\n * const arr = ['abc', 'def', 'ghi'];\n * const keys = ['a', 'e', 'i'];\n * const result = detectIncludes(arr, keys);\n * // result is { a: ['abc', 'def'], e: ['def', 'ghi'], i: ['abc', 'ghi'] }\n *\n * @param arr - The array to search.\n * @param keys - The keys to search for.\n * @returns An object with the keys as properties and the\n * corresponding values as arrays of strings.\n */\nexport function detectIncludes<K extends string, V = unknown | string>(arr: V[], keys: ITSValueOrArrayMaybeReadonly<K>)\n{\n\tlet result = {} as ITSPartialRecord<K, string[]>;\n\n\tif (arr?.length)\n\t{\n\t\tif (keys.length)\n\t\t{\n\t\t\tkeys = Array.isArray(keys) ? keys : [keys] as K[];\n\n\t\t\tconst re = new RegExp(`(${escapeArrayToRegExpSource(keys as string[])})`);\n\n\t\t\tarr.forEach((value) =>\n\t\t\t{\n\t\t\t\tlet m = (value as string)?.match?.(re);\n\t\t\t\tif (m)\n\t\t\t\t{\n\t\t\t\t\tconst k = m[1] as K;\n\t\t\t\t\t(result[k] ??= []).push(value as string);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t}\n\t}\n\n\treturn result\n}\n\n/**\n * Escapes all strings in an array to be used in a regular expression source.\n *\n * @example\n * const arr = ['abc', 'def', 'ghi'];\n * const result = escapeArrayToRegExpSource(arr);\n * // result is 'abc|def|ghi'\n *\n * @param arr - The array of strings to escape.\n * @returns A single string that can be used as a regular expression source.\n */\nexport function escapeArrayToRegExpSource(arr: string[])\n{\n\treturn arr.map(s => escapeRegExp(s)).join(\"|\");\n}\n\nexport function tsExtensions(js: true): readonly [\n\t'js',\n\t'mjs',\n\t'cjs',\n\t'jsx',\n];\nexport function tsExtensions(js?: false): readonly [\n\t'ts',\n\t'tsx',\n\t'mts',\n\t'cts',\n];\nexport function tsExtensions(js?: boolean): readonly [\"js\", \"mjs\", \"cjs\", \"jsx\"] | readonly [\"ts\", \"tsx\", \"mts\", \"cts\"];\nexport function tsExtensions(js?: boolean)\n{\n\treturn js ? [\n\t\t'js',\n\t\t'mjs',\n\t\t'cjs',\n\t\t'jsx',\n\t] as const : [\n\t\t'ts',\n\t\t'tsx',\n\t\t'mts',\n\t\t'cts',\n\t] as const;\n}\n","import { IJestConfig, IRuntime } from './types';\nimport { detectIncludes } from './util';\nimport { _requireResolve2 } from './helper';\nimport { ITSPickExtra } from 'ts-type';\n\n/** 環境設置載入的檔案 / Files to load environment setup */\nexport function defaultSetupFiles(runtime?: ITSPickExtra<IRuntime, 'jestConfig'>)\n{\n\tconst jestConfig = runtime?.jestConfig ?? {} as IJestConfig;\n\n\tlet detect = detectIncludes(jestConfig.setupFiles, 'dotenv');\n\n\tconst setupFiles: IJestConfig['setupFiles'] = [\n\t\t/**\n\t\t * @see https://lusbuab.medium.com/using-dotenv-with-jest-7e735b34e55f\n\t\t */\n\t\t!detect['dotenv'] && _requireResolve2('dotenv/config').result,\n\t\t...(jestConfig.setupFiles ?? []),\n\n\t].filter(Boolean);\n\n\tconst setupFilesAfterEnv = [\n\t\t// 可選擇性啟用的 Jest 擴充套件 / Optional Jest extensions\n\t\t//\"jest-chain\",\n\t\t//\"jest-extended/all\",\n\t\t//\"jest-extended-extra\",\n\t\t//\"jest-num-close-with\",\n\t\t/**\n\t\t * 跨平台測試支援參考 / Cross-platform testing support reference\n\t\t * @see https://medium.com/doctolib/how-to-run-the-same-jest-test-suite-across-several-platforms-jest-os-detection-plugin-included-f8113832482b\n\t\t * @see https://github.com/doctolib/jest-os-detection\n\t\t */\n\t\t//'jest-os-detection',\n\t\t...(jestConfig.setupFilesAfterEnv ?? []),\n\t].filter(Boolean);\n\n\tconst ret = {} as Pick<IJestConfig, 'setupFiles' | 'setupFilesAfterEnv'>;\n\n\tif (setupFiles.length)\n\t{\n\t\tret.setupFiles = setupFiles;\n\t}\n\tif (setupFilesAfterEnv.length)\n\t{\n\t\tret.setupFilesAfterEnv = setupFilesAfterEnv;\n\t}\n\n\treturn ret\n}\n","/**\n * 核心入口模組 - 提供 Jest 配置混合功能\n * Core Entry Module - Provides Jest configuration mixing functionality\n */\n\nimport { _requireResolve, fixJestConfig, makeTestRegexConfig } from './helper';\nimport {\n\tdefaultCoveragePathIgnorePatterns,\n\tdefaultModuleFileExtensions,\n\tdefaultTestFileExtensions,\n\tdefaultTestPathIgnorePatterns,\n\n} from './defaults';\nimport { IOptionsPrintJestConfigInfo, printJestConfigInfo } from './print';\nimport { IJestConfig } from './types';\nimport { getJestCacheDirectory } from 'jest-cache-directory';\nimport { defaultTransform } from './default-transform';\nimport { defaultSetupFiles } from './default-setup-fles';\n\n// 重新匯出輔助函數和類型 / Re-export helper functions and types\nexport * from './helper';\nexport * from './defaults';\nexport * from './print';\nexport { defaultTransform } from './default-transform';\nexport { defaultSetupFiles } from './default-setup-fles';\n\n/** Jest 快取目錄路徑 / Jest cache directory path */\nconst cacheDirectory = getJestCacheDirectory();\n\nexport { cacheDirectory }\n\n/**\n * 混合 Jest 配置函數 - 將預設配置與使用者自定義配置合併\n * Mix Jest configuration function - Merges default config with user custom config\n *\n * 此函數提供了一個完整的 Jest 配置模板,包含 TypeScript 支援、快取管理、覆蓋率收集等功能\n * This function provides a complete Jest configuration template with TypeScript support,\n * cache management, coverage collection, and more.\n *\n * @param {T} jestConfig - 使用者自定義的 Jest 配置 / User custom Jest configuration\n * @param {boolean} autoPrint - 是否自動印出配置資訊 / Whether to auto print config info\n * @param {IOptionsPrintJestConfigInfo} options - 印出配置的選項 / Options for printing config\n * @returns {T} 合併後的完整 Jest 配置 / Merged complete Jest configuration\n */\nexport function mixinJestConfig<T extends IJestConfig>(jestConfig?: T, autoPrint?: boolean,\n\toptions?: IOptionsPrintJestConfigInfo)\n{\n\t// @ts-ignore\n\t// 如果未提供配置則使用空對象 / Use empty object if no config provided\n\tjestConfig ??= {};\n\n\t/**\n\t * 建立基礎 Jest 配置物件\n\t * Create base Jest configuration object\n\t *\n\t * 包含以下預設設定:\n\t * - 快取目錄管理 / Cache directory management\n\t * - 單一工作執行緒以確保測試穩定性 / Single worker for test stability\n\t * - 自動清除模擬物件 / Auto clear mocks\n\t * - 無測試時仍通過 / Pass with no tests\n\t * - TypeScript 檔案支援 / TypeScript file support\n\t * - 覆蓋率使用 v8 提供者 / Coverage using v8 provider\n\t */\n\tconst newJestConfig = fixJestConfig({\n\t\tglobals: {\n\t\t\t// ts-jest 全域配置預留位置 / ts-jest global config placeholder\n//\t\t\t'ts-jest': {\n//\t\t\t\t//tsconfig: 'tsconfig.spec.json',\n//\t\t\t},\n\t\t},\n\t\t/** 快取目錄路徑 / Cache directory path */\n\t\tcacheDirectory,\n\t\t/** 最大工作執行緒數(設為 1 確保測試順序執行) / Max workers (set to 1 for sequential execution) */\n\t\tmaxWorkers: 1,\n\t\t/** 每次測試前清除模擬物件 / Clear mocks before each test */\n\t\tclearMocks: true,\n\t\t/** 無測試檔案時仍視為通過 / Pass even when no test files */\n\t\tpassWithNoTests: true,\n\t\t/** 模組檔案副檔名列表 / Module file extensions list */\n\t\tmoduleFileExtensions: defaultModuleFileExtensions(),\n\t\t// 測試環境設定(預設 node) / Test environment setting\n\t\t//testEnvironment: 'node',\n\t\t// 測試匹配模式 / Test match patterns\n\t\t//testMatch: ['**/*.test.ts', '**/*.spec.ts'],\n\t\t// 合併測試正則配置 / Merge test regex config\n\t\t...makeTestRegexConfig(defaultTestFileExtensions()),\n\t\t/** 測試路徑忽略模式 / Test path ignore patterns */\n\t\ttestPathIgnorePatterns: defaultTestPathIgnorePatterns(),\n\t\t// 測試執行器設定 / Test runner setting\n\t\t//testRunner: 'jest-circus/runner',\n\t\t/** 環境設置後載入的檔案 / Files to load after environment setup */\n\t\t...defaultSetupFiles(),\n\t\t// 轉換器設定(後面單獨處理) / Transform setting (handled separately below)\n\t\t//transform: defaultTransform(),\n\t\t/** 詳細輸出模式 / Verbose output mode */\n\t\tverbose: true,\n\t\t/**\n\t\t * 覆蓋率提供者設定為 v8\n\t\t * Coverage provider set to v8\n\t\t *\n\t\t * 若使用 collectCoverage: true 時未設為 v8,Node.js 除錯點可能會失效\n\t\t * If not set to v8 with collectCoverage: true, Node.js debug points may fail\n\t\t */\n\t\tcoverageProvider: 'v8',\n\t\t/** 是否收集覆蓋率 / Whether to collect coverage */\n\t\tcollectCoverage: false,\n\t\t/** 覆蓋率忽略路徑模式 / Coverage path ignore patterns */\n\t\tcoveragePathIgnorePatterns: defaultCoveragePathIgnorePatterns(),\n\t\t/**\n\t\t * Jest 模組解析器參考 / Jest module resolver reference\n\t\t * @see https://github.com/facebook/jest/issues/9771#issuecomment-872764344\n\t\t */\n\t\t//resolver: 'jest-node-exports-resolver',\n\t\t// 合併使用者自定義配置 / Merge user custom config\n\t\t...jestConfig,\n\t});\n\n\t/**\n\t * 設定轉換器(如果尚未設定)\n\t * Set up transform (if not already set)\n\t *\n\t * 使用預設的 ts-jest 轉換器,並支援 jest-tsd-transform 和 jest-chain-transform 鏈式轉換\n\t * Uses default ts-jest transformer with support for jest-tsd-transform and jest-chain-transform chaining\n\t */\n\tnewJestConfig.transform ??= defaultTransform({\n\t\tjestConfig,\n\t\tautoPrint,\n\t\toptions,\n\t\tnewJestConfig,\n\t});\n\n\t// 如果啟用自動印出,則顯示配置資訊 / If autoPrint enabled, display config info\n\tautoPrint && printJestConfigInfo(newJestConfig, options);\n\n\treturn newJestConfig\n}\n\n/**\n * 預設匯出 - mixinJestConfig 函數\n * Default export - mixinJestConfig function\n */\nexport default mixinJestConfig\n"],"names":["_requireResolve","name","paths","requireResolveExtra","result","filter","Boolean","requireResolveCore","includeGlobal","includeCurrentDirectory","console","debug","_requireResolve2","makeTestRegexConfig","testExt","_testExt","_handleFileExtensions","testMatch","testRegex","_handleFileExtensionsCore","array_unique","flat","sep","join","fixJestConfig","jestConfig","_jestConfig$testEnvir","_jestConfig$testEnvir2","_jestConfig$testEnvir3","testURL","testEnvironmentOptions","_newTableBorderless","options","table","Table","colAligns","chars","top","bottom","left","mid","right","middle","applyStyleBorderless","printJestConfigInfo","_options$cwd","_options$file","_jestConfig$cacheDire","_jestConfig$rootDir","_jestConfig$roots","_jestConfig$preset","push","process","versions","node","cwd","file","length","cacheDirectory","rootDir","roots","inspect","preset","transform","depth","gray","log","repeat","toString","defaultTsJestTransformerOptions","runtime","_runtime$jestConfig$g","_runtime$jestConfig$g2","_tsconfig$types","old","globals","tsconfig","types","noEmit","emitDeclarationOnly","noUnusedParameters","allowUnusedLabels","noUnusedLocals","noPropertyAccessFromIndexSignature","noImplicitAny","defaultTransform","opts","ts_transform","tsd","chain","transformers","detectIncludes","arr","keys","Array","isArray","re","RegExp","escapeArrayToRegExpSource","map","s","escapeRegExp","forEach","value","_match","_ref","m","match","call","_result$k","k","defaultSetupFiles","_runtime$jestConfig","_jestConfig$setupFile","_jestConfig$setupFile2","setupFiles","setupFilesAfterEnv","ret","getJestCacheDirectory","mixinJestConfig","autoPrint","_newJestConfig$transf","newJestConfig","maxWorkers","clearMocks","passWithNoTests","moduleFileExtensions","testPathIgnorePatterns","verbose","coverageProvider","collectCoverage","coveragePathIgnorePatterns","defaultCoverageFileExtensions","defaultCoveragePathIgnorePatterns","defaultModuleFileExtensions","defaultTestFileExtensions","defaultTestPathIgnorePatterns","defaultTransformFileExtensions"],"mappings":";;;;;;;;AAsBO,SAASA,gBAAgBC;EAM/B,MAAMC,IAAQ,EACbC,sBAAoB,oBAAoBC,QACxCD,sBAAoB,QAAQC,SAC3BC,OAAOC,UAMHF,IAASG,EAAkBA,mBAACN,GAAM;IACvCO,gBAAe;IACfC,0BAAyB;IACzBP;;EAMD,OAFAQ,EAAOA,QAACC,MAAM,qBAAqBV,GAAM,MAAMG,IAExCA;AACR;;AAEO,SAASQ,iBAAiBX;EAEhC,OAAOE,EAAAA,oBAAoBF,GAAM;IAChCO,gBAAe;IACfC,0BAAyB;;AAE3B;;AAYO,SAASI,oBAAsCC;EAGrDA,cAAAA,ICpDc,EAGb,MACA,OACA,OACA;ED+CD,MAAMC,IAAWC,sBAAsBF,GAAS;EAEhD,OAAO;IAENG,WAAW;IASXC,WAAW,EACV,uBAAuBH,OACvB,mCAAqCA;;AAGxC;;AAYO,SAASI,0BAA4CL;EAE3D,OAAOM,EAAYA,aAAC,EAACN,IAASO;AAC/B;;AAUO,SAASL,sBAAwCF,GAA0CQ;EAEjG,OAAOH,0BAA0BL,GAASS,KAAKD;AAChD;;AAYO,SAASE,cAAqCC;EA6BpD,IAAAC,GAAAC,GAAAC;EAUA,OA9BIH,EAAWR,YAIdQ,EAAWP,YAAY,OAEfO,EAAWP,cAInBO,EAAWR,YAAY,OASpBQ,EAAWI,YAImBH,UAAjCA,IAAAD,EAAWK,gCAAsBJ,MAAAA,MAAjCD,EAAWK,yBAA2B,CAAA;EAItCL,EAAWI,UAAmDD,UAA5CA,KAAID,IAAAF,EAAWK,wBAA4B,aAACF,MAAAA,IAAAA,IAAxCD,EAAA,MAA6CF,EAAWI;EAGxEJ;AACR;;AEnJO,SAASM,oBAAoBC;EAMnC,IAAIC,IAAQ,IAAIC,QAAM;IAErBC,WAAW,EAAC,SAAS;IAKrBC,OAAO;MACNC,KAAK;MACL,WAAW;MACX,YAAY;MACZ,aAAa;MACbC,QAAQ;MACR,cAAc;MACd,eAAe;MACf,gBAAgB;MAChBC,MAAM;MACN,YAAY;MACZC,KAAK;MACL,WAAW;MACXC,OAAO;MACP,aAAa;MACbC,QAAQ;;OAENV;;EAMJ,OAFAC,IAAQU,EAAAA,qBAAqBV,IAEtBA;AACR;;AAwBO,SAASW,oBAAoBnB,GAAyBO;EAC7D,IAAAa,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC;EAEC,MAAMjB,IAAQF;EAGdC,cAAAA,IAAY,KAEZP,cAAAA,IAAe,KAOfQ,EAAMkB,KAAK,EAAC;EAEZlB,EAAMkB,KAAK,EAAC,0BAA0BC,QAAQC,SAASC,SAEvDrB,EAAMkB,KAAK,EAAC,kBAAMN,IAAEb,EAAQuB,aAAG,MAAAV,IAAAA,IAAIO,QAAQG;GAG/BT,UAAZA,IAAAd,EAAQwB,cAARV,MAAYA,SAAZA,IAAAA,EAAcW,WAAUxB,EAAMkB,KAAK,EAAC,SAASnB,EAAQwB;GAG5BT,UAAzBA,IAAAtB,EAAWiC,wBAAXX,MAAyBA,SAAzBA,IAAAA,EAA2BU,WAAUxB,EAAMkB,KAAK,EAAC,mBAAmB1B,EAAWiC;GAG7DV,UAAlBA,IAAAvB,EAAWkC,iBAAXX,MAAkBA,SAAlBA,IAAAA,EAAoBS,WAAUxB,EAAMkB,KAAK,EAAC,YAAY1B,EAAWkC;GAEjDV,UAAhBA,IAAAxB,EAAWmC,eAAXX,MAAgBA,SAAhBA,IAAAA,EAAkBQ,WAAUxB,EAAMkB,KAAK,EAAC,UAAUU,EAAAA,QAAQpC,EAAWmC;GAGpDV,UAAjBA,IAAAzB,EAAWqC,gBAAXZ,MAAiBA,SAAjBA,IAAAA,EAAmBO,WAAUxB,EAAMkB,KAAK,EAAC,WAAW1B,EAAWqC;EAG/DrC,EAAWsC,aAAa9B,EAAMkB,KAAK,EAAC,cAAcU,EAAOA,QAACpC,EAAWsC,WAAW;IAE/EC,OAAO;SAQRtD,EAAOA,QAACuD,KAAKC,IAAI,IAAIC,OAAO,MAE5BzD,EAAAA,QAAQwD,IAAI,gBAEZxD,EAAAA,QAAQwD,IAAIjC,EAAMmC;EAElB1D,EAAOA,QAACuD,KAAKC,IAAI,IAAIC,OAAO;AAC7B;;AC3GO,SAASE,gCAAgCC;EAChD,IAAAC,GAAAC,GAAAC;EAQC,MAAMC,IAAwE,UAA3CH,IAA8B,UAA9BC,IAAIF,EAAQ7C,WAAWkD,iBAAnBH,MAA0BA,SAA1BA,IAAAA,EAA6B,oBAAUD,MAAAA,IAAAA,IAAI,IAS5EK,IAAmC,mBAAjBF,EAAIE,WAAwBF,EAAIE,WAAW,IAE7DC,IAAQzD,EAAAA,aAAa,KAAmBqD,UAAlBA,IAAIG,EAASC,qBAAKJ,IAAAA,IAAI,IAAK;EASvD,OAAO;OAEHC;IACHE,UAAU;MAKTE,SAAQ;MAKRC,sBAAqB;MAKrBC,qBAAoB;MAKpBC,oBAAmB;MAKnBC,iBAAgB;MAKhBC,qCAAoC;MAKpCC,gBAAe;SAEZR;MACHC;;;AAGH;;ACrFO,SAASQ,iBAAiBf;EAMhC,MAOMgB,IAAiB;IACtB9E,gBAAe;IACfC,0BAAyB;IACzBP,OAVuB,EACvBC,EAAAA,oBAAoB,2BAA2BC,SAC9CC,OAAOC;;EAeT,IAAIiF,IAAiDvF,gBAAgB;EAMrEuF,IAAe,EAACA,GAAclB,gCAAgCC;EAM9D,OAAQlE,QAAQoF,KAAQrF,EAAmBA,oBAAC,sBAAsBmF;EAMlE,IAAIE,aAAAA,EAAK/B,QACT;IAKC,OAAQrD,QAAQqF,KAAUtF,EAAmBA,oBAAC,wBAAwBmF;IAMlEG,aAAAA,EAAOhC,WAEV8B,IAAe,EACdE,GAAiC;MAChCC,cAAc,EACbF,GAEAD;;AAQL;EASA,OAHc;IACb,CAAC,KAAKvE,sBHQO,EACb,MACA,OACA,OACA,SGZ8D,WAAWuE;;AAG3E;;AC9EO,SAASI,eAAuDC,GAAUC;EAEhF,IAAIzF,IAAS,CAAA;EAEb,IAAIwF,aAAAA,EAAKnC,UAEJoC,EAAKpC,QACT;IACCoC,IAAOC,MAAMC,QAAQF,KAAQA,IAAO,EAACA;IAErC,MAAMG,IAAK,IAAIC,OAAO,IA6BlB,SAASC,0BAA0BN;MAEzC,OAAOA,EAAIO,IAAIC,KAAKC,EAAAA,aAAaD,IAAI7E,KAAK;AAC3C,KAhC6B2E,CAA0BL;IAEpDD,EAAIU,QAASC;MACb,IAAAC,GAAAC;MACC,IAAIC,IAAKH,aAAuB,UAAlBC,KAANC,IAACF,GAAkBI,eAAK,MAAAH,SAAA,IAAxBA,EAAAI,KAAAH,GAA2BT;MACnC,IAAIU,GACJ;QAAA,IAAAG;QACC,MAAMC,IAAIJ,EAAE;SACF,UAAVG,IAACzG,EAAO0G,YAAED,MAAAA,IAAAA,IAATzG,EAAO0G,KAAO,IAAI3D,KAAKoD;AACzB;MACA,OAAOnG;;AAET;EAGD,OAAOA;AACR;;ACrCO,SAAS2G,kBAAkBzC;EAClC,IAAA0C,GAAAC,GAAAC;EACC,MAAMzF,IAAgCuF,UAAtBA,IAAG1C,iBAAO,IAAPA,EAAS7C,0BAAUuF,IAAAA,IAAI,IAIpCG,IAAwC,GAFjCxB,eAAelE,EAAW0F,YAAY,UAMlC,UAAKvG,iBAAiB,iBAAiBR,WAC9B,UAAzB6G,IAAIxF,EAAW0F,oBAAU,MAAAF,IAAAA,IAAI,KAE5B5G,OAAOC,UAEH8G,IAAqB,eAY1BF,IAAIzF,EAAW2F,4BAAkB,MAAAF,IAAAA,IAAI,KACpC7G,OAAOC,UAEH+G,IAAM,CAAA;EAWZ,OATIF,EAAW1D,WAEd4D,EAAIF,aAAaA,IAEdC,EAAmB3D,WAEtB4D,EAAID,qBAAqBA,IAGnBC;AACR;;ACrBA,MAAM3D,kBAAiB4D,EAAAA;;AAiBhB,SAASC,gBAAuC9F,GAAgB+F,GACtExF;EACD,IAAAyF;EAGChG,cAAAA,IAAe;EAcf,MAAMiG,IAAgBlG,cAAc;IACnCmD,SAAS,CAKR;IAEDjB;IAEAiE,YAAY;IAEZC,aAAY;IAEZC,kBAAiB;IAEjBC,sBN/Ba,EACb,MACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,QACA;OM2BGjH,oBNnEU,EAGb,MACA,OACA,OACA;IM+DAkH,wBN6Da,EACb,kBACA,kBACA,wBACA,cACA,uBACA,qBACA,aACA;OMjEGhB;IAIHiB,UAAS;IAQTC,kBAAkB;IAElBC,kBAAiB;IAEjBC,4BNaa,EACb,kBACA,mBACA,eACA,cAIA,UACA,UACA,aACA,wBACA;OMlBG1G;;EAoBJ,OAVuBgG,UAAvBA,IAAAC,EAAc3D,mBAAS0D,MAAAA,MAAvBC,EAAc3D,YAAcsB,iBAAiB;IAC5C5D;IACA+F;IACAxF;IACA0F;OAIDF,KAAa5E,oBAAoB8E,GAAe1F,IAEzC0F;AACR;;;;;wCN/DO,SAASU;EAcf,OAZc,EACb,MACA,OACA,OACA,OACA,MACA,OACA,OACA;AAKF,+CA+BO,SAASC;EAgBf,OAdc,EACb,kBACA,mBACA,eACA,cAIA,UACA,UACA,aACA,wBACA;AAGF,yCAzFO,SAASC;EAcf,OAZc,EACb,MACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,QACA;AAGF,sFA7CO,SAASC;EAiBf,OAfc,EAGb,MACA,OACA,OACA;AAUF,2CAgHO,SAASC;EAYf,OAVc,EACb,kBACA,kBACA,wBACA,cACA,uBACA,qBACA,aACA;AAGF,yFA7DO,SAASC;EAQf,OANc,EACb,MACA,OACA,OACA;AAGF;"}
|