@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,99 +1,99 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@yarn-tool/require-resolve'), require('debug-color2'), require('array-hyper-unique'), require('@yarn-tool/table'), require('util'), require('jest-cache-directory')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', '@yarn-tool/require-resolve', 'debug-color2', 'array-hyper-unique', '@yarn-tool/table', 'util', 'jest-cache-directory'], factory) :
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.BlueloversJestConfig = {}, global.requireResolve, global.debugColor2, global.arrayHyperUnique, global.table, global.util, global.jestCacheDirectory));
|
|
5
|
-
})(this, (function (exports, requireResolve, debugColor2, arrayHyperUnique, table, util, jestCacheDirectory) { 'use strict';
|
|
6
|
-
|
|
7
|
-
function defaultTsJestTransformerOptions(runtime) {
|
|
8
|
-
var _runtime$jestConfig$g, _runtime$jestConfig$g2;
|
|
9
|
-
const old = (_runtime$jestConfig$g = (_runtime$jestConfig$g2 = runtime.jestConfig.globals) === null || _runtime$jestConfig$g2 === void 0 ? void 0 : _runtime$jestConfig$g2['ts-jest']) !== null && _runtime$jestConfig$g !== void 0 ? _runtime$jestConfig$g : {};
|
|
10
|
-
const tsconfig = typeof old.tsconfig === 'object' ? old.tsconfig : {};
|
|
11
|
-
return {
|
|
12
|
-
...old,
|
|
13
|
-
tsconfig: {
|
|
14
|
-
noEmit: true,
|
|
15
|
-
emitDeclarationOnly: false,
|
|
16
|
-
noUnusedParameters: false,
|
|
17
|
-
allowUnusedLabels: true,
|
|
18
|
-
noUnusedLocals: false,
|
|
19
|
-
noPropertyAccessFromIndexSignature: false,
|
|
20
|
-
noImplicitAny: false,
|
|
21
|
-
...tsconfig
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
}
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@yarn-tool/require-resolve'), require('debug-color2'), require('array-hyper-unique'), require('@yarn-tool/table'), require('util'), require('jest-cache-directory'), require('regexp-helper-core')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', '@yarn-tool/require-resolve', 'debug-color2', 'array-hyper-unique', '@yarn-tool/table', 'util', 'jest-cache-directory', 'regexp-helper-core'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.BlueloversJestConfig = {}, global.requireResolve, global.debugColor2, global.arrayHyperUnique, global.table, global.util, global.jestCacheDirectory, global.regexpHelperCore));
|
|
5
|
+
})(this, (function (exports, requireResolve, debugColor2, arrayHyperUnique, table, util, jestCacheDirectory, regexpHelperCore) { 'use strict';
|
|
25
6
|
|
|
7
|
+
/**
|
|
8
|
+
* 取得預設的測試檔案副檔名列表
|
|
9
|
+
* Get default test file extensions list
|
|
10
|
+
*
|
|
11
|
+
* 定義哪些副檔名的檔案會被視為測試檔案
|
|
12
|
+
* Defines which file extensions are recognized as test files
|
|
13
|
+
*
|
|
14
|
+
* @returns {string[]} 測試檔案副檔名陣列 / Array of test file extensions
|
|
15
|
+
*/
|
|
26
16
|
function defaultTestFileExtensions() {
|
|
27
|
-
const value = ['ts', 'tsx', 'mts', 'cts'
|
|
28
|
-
// 'js',
|
|
29
|
-
// 'jsx',
|
|
30
|
-
// 'mjs',
|
|
31
|
-
// 'cjs',
|
|
32
|
-
];
|
|
33
|
-
|
|
17
|
+
const value = ['ts', 'tsx', 'mts', 'cts'];
|
|
34
18
|
return value;
|
|
35
19
|
}
|
|
36
20
|
/**
|
|
21
|
+
* 取得預設的模組檔案副檔名列表
|
|
22
|
+
* Get default module file extensions list
|
|
23
|
+
*
|
|
24
|
+
* 定義模組解析時搜尋的副檔名順序
|
|
25
|
+
* Defines the order of extensions to search during module resolution
|
|
26
|
+
*
|
|
37
27
|
* @see https://jestjs.io/docs/configuration#options
|
|
28
|
+
* @returns {string[]} 模組檔案副檔名陣列 / Array of module file extensions
|
|
38
29
|
*/
|
|
39
30
|
function defaultModuleFileExtensions() {
|
|
40
31
|
const value = ['js', 'mjs', 'cjs', 'jsx', 'ts', 'mts', 'cts', 'tsx', 'json', 'node'];
|
|
41
32
|
return value;
|
|
42
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* 取得預設的覆蓋率檔案副檔名列表
|
|
36
|
+
* Get default coverage file extensions list
|
|
37
|
+
*
|
|
38
|
+
* 定義哪些副檔名的檔案會被納入覆蓋率統計
|
|
39
|
+
* Defines which file extensions are included in coverage statistics
|
|
40
|
+
*
|
|
41
|
+
* @returns {string[]} 覆蓋率檔案副檔名陣列 / Array of coverage file extensions
|
|
42
|
+
*/
|
|
43
43
|
function defaultCoverageFileExtensions() {
|
|
44
|
-
const value = ['js', 'mjs', 'cjs', 'jsx', 'ts', 'mts', 'cts', 'tsx'
|
|
45
|
-
//'json',
|
|
46
|
-
//'node',
|
|
47
|
-
];
|
|
48
|
-
|
|
44
|
+
const value = ['js', 'mjs', 'cjs', 'jsx', 'ts', 'mts', 'cts', 'tsx'];
|
|
49
45
|
return value;
|
|
50
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* 取得預設的轉換器檔案副檔名列表
|
|
49
|
+
* Get default transformer file extensions list
|
|
50
|
+
*
|
|
51
|
+
* 定義哪些副檔名的檔案需要經過 ts-jest 轉換
|
|
52
|
+
* Defines which file extensions need to be transformed by ts-jest
|
|
53
|
+
*
|
|
54
|
+
* @returns {string[]} 轉換器檔案副檔名陣列 / Array of transformer file extensions
|
|
55
|
+
*/
|
|
51
56
|
function defaultTransformFileExtensions() {
|
|
52
57
|
const value = ['ts', 'tsx', 'mts', 'cts'];
|
|
53
58
|
return value;
|
|
54
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* 取得預設的覆蓋率忽略路徑模式
|
|
62
|
+
* Get default coverage path ignore patterns
|
|
63
|
+
*
|
|
64
|
+
* 定義哪些路徑的檔案不納入覆蓋率統計
|
|
65
|
+
* Defines which paths are excluded from coverage statistics
|
|
66
|
+
*
|
|
67
|
+
* @returns {string[]} 覆蓋率忽略路徑模式陣列 / Array of coverage ignore patterns
|
|
68
|
+
*/
|
|
55
69
|
function defaultCoveragePathIgnorePatterns() {
|
|
56
|
-
const value = ['/node_modules/', '/__snapshots__/', '/__tests__/', '/__test__/',
|
|
57
|
-
//'**/node_modules/',
|
|
58
|
-
//'**/__snapshots__/',
|
|
59
|
-
//'**/__tests__/',
|
|
60
|
-
'/dist/', '/test/', '/fixture/', '/__file_snapshots__/', '/__fixtures__/'];
|
|
70
|
+
const value = ['/node_modules/', '/__snapshots__/', '/__tests__/', '/__test__/', '/dist/', '/test/', '/fixture/', '/__file_snapshots__/', '/__fixtures__/'];
|
|
61
71
|
return value;
|
|
62
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* 取得預設的測試路徑忽略模式
|
|
75
|
+
* Get default test path ignore patterns
|
|
76
|
+
*
|
|
77
|
+
* 定義哪些路徑的檔案不會被視為測試檔案
|
|
78
|
+
* Defines which paths are excluded from test file recognition
|
|
79
|
+
*
|
|
80
|
+
* @returns {string[]} 測試路徑忽略模式陣列 / Array of test path ignore patterns
|
|
81
|
+
*/
|
|
63
82
|
function defaultTestPathIgnorePatterns() {
|
|
64
83
|
const value = ['/node_modules/', '/__fixtures__/', '/__file_snapshots__/', '/fixtures/', '/__tests__/helpers/', '/__tests__/utils/', '__mocks__', '/dist/'];
|
|
65
84
|
return value;
|
|
66
85
|
}
|
|
67
|
-
function defaultTransform(runtime) {
|
|
68
|
-
const paths = [requireResolve.requireResolveExtra('@bluelovers/jest-config').result].filter(Boolean);
|
|
69
|
-
const opts = {
|
|
70
|
-
includeGlobal: true,
|
|
71
|
-
includeCurrentDirectory: true,
|
|
72
|
-
paths
|
|
73
|
-
};
|
|
74
|
-
let ts_transform = _requireResolve('ts-jest');
|
|
75
|
-
ts_transform = [ts_transform, defaultTsJestTransformerOptions(runtime)];
|
|
76
|
-
const {
|
|
77
|
-
result: tsd
|
|
78
|
-
} = requireResolve.requireResolveExtra('jest-tsd-transform', opts);
|
|
79
|
-
if (tsd !== null && tsd !== void 0 && tsd.length) {
|
|
80
|
-
const {
|
|
81
|
-
result: chain
|
|
82
|
-
} = requireResolve.requireResolveExtra('jest-chain-transform', opts);
|
|
83
|
-
if (chain !== null && chain !== void 0 && chain.length) {
|
|
84
|
-
ts_transform = [chain, {
|
|
85
|
-
transformers: [tsd,
|
|
86
|
-
// @ts-ignore
|
|
87
|
-
ts_transform]
|
|
88
|
-
}];
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const value = {
|
|
92
|
-
[`.(${_handleFileExtensions(defaultTransformFileExtensions(), '|')})$`]: ts_transform
|
|
93
|
-
};
|
|
94
|
-
return value;
|
|
95
|
-
}
|
|
96
86
|
|
|
87
|
+
/**
|
|
88
|
+
* 解析模組路徑的內部輔助函數
|
|
89
|
+
* Internal helper function for resolving module paths
|
|
90
|
+
*
|
|
91
|
+
* 優先從 @bluelovers/tsdx 或 tsdx 套件路徑中搜尋,若失敗則使用標準 require.resolve
|
|
92
|
+
* Searches from @bluelovers/tsdx or tsdx package paths first, falls back to standard require.resolve
|
|
93
|
+
*
|
|
94
|
+
* @param {string} name - 要解析的模組名稱 / Module name to resolve
|
|
95
|
+
* @returns {string} 解析後的模組絕對路徑 / Resolved absolute module path
|
|
96
|
+
*/
|
|
97
97
|
function _requireResolve(name) {
|
|
98
98
|
const paths = [requireResolve.requireResolveExtra('@bluelovers/tsdx').result, requireResolve.requireResolveExtra('tsdx').result].filter(Boolean);
|
|
99
99
|
const result = requireResolve.requireResolveCore(name, {
|
|
@@ -104,21 +104,64 @@
|
|
|
104
104
|
debugColor2.console.debug('[require.resolve]', name, '=>', result);
|
|
105
105
|
return result;
|
|
106
106
|
}
|
|
107
|
+
function _requireResolve2(name) {
|
|
108
|
+
return requireResolve.requireResolveExtra(name, {
|
|
109
|
+
includeGlobal: true,
|
|
110
|
+
includeCurrentDirectory: true
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 建立測試正則表達式配置
|
|
115
|
+
* Create test regex configuration
|
|
116
|
+
*
|
|
117
|
+
* 根據測試檔案副檔名生成 testMatch 和 testRegex 配置
|
|
118
|
+
* Generates testMatch and testRegex configs based on test file extensions
|
|
119
|
+
*
|
|
120
|
+
* @param {T} testExt - 測試檔案副檔名或陣列 / Test file extension(s)
|
|
121
|
+
* @returns {object} 包含 testMatch 和 testRegex 的配置物件 / Object containing testMatch and testRegex
|
|
122
|
+
*/
|
|
107
123
|
function makeTestRegexConfig(testExt) {
|
|
108
|
-
|
|
109
|
-
(_testExt2 = testExt) !== null && _testExt2 !== void 0 ? _testExt2 : testExt = defaultTestFileExtensions();
|
|
124
|
+
testExt !== null && testExt !== void 0 ? testExt : testExt = defaultTestFileExtensions();
|
|
110
125
|
const _testExt = _handleFileExtensions(testExt, '|');
|
|
111
126
|
return {
|
|
112
127
|
testMatch: null,
|
|
113
128
|
testRegex: [`\\.(tests?|spec)\\.(${_testExt})$`, `__tests__\/\.*\\.(tests?|spec)\\.(${_testExt})$`]
|
|
114
129
|
};
|
|
115
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* 處理檔案副檔名陣列的核心函數
|
|
133
|
+
* Core function for processing file extension arrays
|
|
134
|
+
*
|
|
135
|
+
* 將輸入轉換為唯一的副檔名陣列
|
|
136
|
+
* Converts input to unique array of extensions
|
|
137
|
+
*
|
|
138
|
+
* @param {T} testExt - 輸入的副檔名(可為陣列或單一值) / Input extension(s)
|
|
139
|
+
* @returns {T[]} 唯一的副檔名陣列 / Unique array of extensions
|
|
140
|
+
*/
|
|
116
141
|
function _handleFileExtensionsCore(testExt) {
|
|
117
142
|
return arrayHyperUnique.array_unique([testExt].flat());
|
|
118
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* 處理檔案副檔名並以指定分隔符連接
|
|
146
|
+
* Process file extensions and join with specified separator
|
|
147
|
+
*
|
|
148
|
+
* @param {T} testExt - 輸入的副檔名(可為陣列或單一值) / Input extension(s)
|
|
149
|
+
* @param {string} sep - 分隔符號 / Separator string
|
|
150
|
+
* @returns {string} 連接後的副檔名字串 / Joined extension string
|
|
151
|
+
*/
|
|
119
152
|
function _handleFileExtensions(testExt, sep) {
|
|
120
153
|
return _handleFileExtensionsCore(testExt).join(sep);
|
|
121
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* 修復 Jest 配置中的相容性問題
|
|
157
|
+
* Fix compatibility issues in Jest configuration
|
|
158
|
+
*
|
|
159
|
+
* 處理 testMatch/testRegex 互斥問題以及 testURL 已棄用選項的遷移
|
|
160
|
+
* Handles testMatch/testRegex mutual exclusivity and testURL deprecated option migration
|
|
161
|
+
*
|
|
162
|
+
* @param {T} jestConfig - 原始 Jest 配置 / Original Jest configuration
|
|
163
|
+
* @returns {T} 修復後的 Jest 配置 / Fixed Jest configuration
|
|
164
|
+
*/
|
|
122
165
|
function fixJestConfig(jestConfig) {
|
|
123
166
|
if (jestConfig.testMatch) {
|
|
124
167
|
jestConfig.testRegex = null;
|
|
@@ -126,7 +169,10 @@
|
|
|
126
169
|
jestConfig.testMatch = null;
|
|
127
170
|
}
|
|
128
171
|
/**
|
|
129
|
-
*
|
|
172
|
+
* testURL 選項已被 testEnvironmentOptions.url 取代
|
|
173
|
+
* testURL option has been replaced by testEnvironmentOptions.url
|
|
174
|
+
*
|
|
175
|
+
* @see https://jestjs.io/docs/configuration#testurl-string
|
|
130
176
|
*/
|
|
131
177
|
if (jestConfig.testURL) {
|
|
132
178
|
var _jestConfig$testEnvir, _jestConfig$testEnvir2, _url, _jestConfig$testEnvir3;
|
|
@@ -137,12 +183,21 @@
|
|
|
137
183
|
}
|
|
138
184
|
|
|
139
185
|
var name = "@bluelovers/jest-config";
|
|
140
|
-
var version = "1.1.
|
|
186
|
+
var version = "1.1.13";
|
|
141
187
|
|
|
188
|
+
/**
|
|
189
|
+
* 建立無邊框表格實例
|
|
190
|
+
* Create borderless table instance
|
|
191
|
+
*
|
|
192
|
+
* 用於以整齊的格式顯示 Jest 配置資訊
|
|
193
|
+
* Used to display Jest configuration info in a neat format
|
|
194
|
+
*
|
|
195
|
+
* @param {TableConstructorOptions} options - 表格建構選項 / Table constructor options
|
|
196
|
+
* @returns {Table} 無邊框表格實例 / Borderless table instance
|
|
197
|
+
*/
|
|
142
198
|
function _newTableBorderless(options) {
|
|
143
199
|
let table$1 = new table.Table({
|
|
144
200
|
colAligns: ['right', 'left'],
|
|
145
|
-
//colAligns: ['left', 'center', 'center', 'center'],
|
|
146
201
|
chars: {
|
|
147
202
|
top: '',
|
|
148
203
|
'top-mid': '',
|
|
@@ -165,12 +220,22 @@
|
|
|
165
220
|
table$1 = table.applyStyleBorderless(table$1);
|
|
166
221
|
return table$1;
|
|
167
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* 印出 Jest 配置資訊
|
|
225
|
+
* Print Jest configuration information
|
|
226
|
+
*
|
|
227
|
+
* 以表格格式顯示當前 Jest 配置的關鍵資訊,方便除錯和確認設定
|
|
228
|
+
* Displays key info of current Jest config in table format for debugging and verification
|
|
229
|
+
*
|
|
230
|
+
* @param {IJestConfig} jestConfig - Jest 配置物件 / Jest configuration object
|
|
231
|
+
* @param {IOptionsPrintJestConfigInfo} options - 印出選項 / Print options
|
|
232
|
+
*/
|
|
168
233
|
function printJestConfigInfo(jestConfig, options) {
|
|
169
|
-
var _options
|
|
234
|
+
var _options$cwd, _options$file, _jestConfig$cacheDire, _jestConfig$rootDir, _jestConfig$roots, _jestConfig$preset;
|
|
170
235
|
const table = _newTableBorderless();
|
|
171
|
-
|
|
236
|
+
options !== null && options !== void 0 ? options : options = {};
|
|
172
237
|
// @ts-ignore
|
|
173
|
-
|
|
238
|
+
jestConfig !== null && jestConfig !== void 0 ? jestConfig : jestConfig = {};
|
|
174
239
|
table.push([`${name}:`, version]);
|
|
175
240
|
table.push([`process.versions.node:`, process.versions.node]);
|
|
176
241
|
table.push(['cwd:', (_options$cwd = options.cwd) !== null && _options$cwd !== void 0 ? _options$cwd : process.cwd()]);
|
|
@@ -188,51 +253,198 @@
|
|
|
188
253
|
debugColor2.console.gray.log('─'.repeat(20));
|
|
189
254
|
}
|
|
190
255
|
|
|
256
|
+
/**
|
|
257
|
+
* 取得預設的 ts-jest 轉換器選項
|
|
258
|
+
* Get default ts-jest transformer options
|
|
259
|
+
*
|
|
260
|
+
* 此函數會合併使用者自定義的 ts-jest 設定與預設值,確保測試環境的最佳配置
|
|
261
|
+
* This function merges user custom ts-jest settings with defaults for optimal test environment
|
|
262
|
+
*
|
|
263
|
+
* 主要調整項目:
|
|
264
|
+
* - 禁用輸出檔案(noEmit: true)
|
|
265
|
+
* - 允許未使用的參數和標籤(用於測試開發)
|
|
266
|
+
* - 禁用嚴格的型別檢查選項(確保測試能順利執行)
|
|
267
|
+
*
|
|
268
|
+
* Key adjustments:
|
|
269
|
+
* - Disable file output (noEmit: true)
|
|
270
|
+
* - Allow unused parameters and labels (for test development)
|
|
271
|
+
* - Disable strict type checking options (ensure tests run smoothly)
|
|
272
|
+
*
|
|
273
|
+
* @param runtime - 執行時期配置,包含原始 Jest 配置 / Runtime configuration containing original Jest config
|
|
274
|
+
* @returns ts-jest 轉換器選項 / ts-jest transformer options
|
|
275
|
+
*/
|
|
276
|
+
function defaultTsJestTransformerOptions(runtime) {
|
|
277
|
+
var _runtime$jestConfig$g, _runtime$jestConfig$g2, _tsconfig$types;
|
|
278
|
+
const old = (_runtime$jestConfig$g = (_runtime$jestConfig$g2 = runtime.jestConfig.globals) === null || _runtime$jestConfig$g2 === void 0 ? void 0 : _runtime$jestConfig$g2['ts-jest']) !== null && _runtime$jestConfig$g !== void 0 ? _runtime$jestConfig$g : {};
|
|
279
|
+
const tsconfig = typeof old.tsconfig === 'object' ? old.tsconfig : {};
|
|
280
|
+
const types = arrayHyperUnique.array_unique([...((_tsconfig$types = tsconfig.types) !== null && _tsconfig$types !== void 0 ? _tsconfig$types : []), 'jest']);
|
|
281
|
+
return {
|
|
282
|
+
...old,
|
|
283
|
+
tsconfig: {
|
|
284
|
+
noEmit: true,
|
|
285
|
+
emitDeclarationOnly: false,
|
|
286
|
+
noUnusedParameters: false,
|
|
287
|
+
allowUnusedLabels: true,
|
|
288
|
+
noUnusedLocals: false,
|
|
289
|
+
noPropertyAccessFromIndexSignature: false,
|
|
290
|
+
noImplicitAny: false,
|
|
291
|
+
...tsconfig,
|
|
292
|
+
types
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* 建立預設的轉換器配置
|
|
299
|
+
* Create default transformer configuration
|
|
300
|
+
*
|
|
301
|
+
* 配置 ts-jest 作為主要轉換器,並在可用時整合 jest-tsd-transform 和 jest-chain-transform
|
|
302
|
+
* Configures ts-jest as the main transformer, integrating jest-tsd-transform and jest-chain-transform when available
|
|
303
|
+
*
|
|
304
|
+
* @param {IRuntime} runtime - 執行時期配置 / Runtime configuration
|
|
305
|
+
* @returns {object} 轉換器配置物件 / Transformer configuration object
|
|
306
|
+
*/
|
|
307
|
+
function defaultTransform(runtime) {
|
|
308
|
+
const paths = [requireResolve.requireResolveExtra('@bluelovers/jest-config').result].filter(Boolean);
|
|
309
|
+
const opts = {
|
|
310
|
+
includeGlobal: true,
|
|
311
|
+
includeCurrentDirectory: true,
|
|
312
|
+
paths
|
|
313
|
+
};
|
|
314
|
+
let ts_transform = _requireResolve('ts-jest');
|
|
315
|
+
ts_transform = [ts_transform, defaultTsJestTransformerOptions(runtime)];
|
|
316
|
+
const {
|
|
317
|
+
result: tsd
|
|
318
|
+
} = requireResolve.requireResolveExtra('jest-tsd-transform', opts);
|
|
319
|
+
if (tsd !== null && tsd !== void 0 && tsd.length) {
|
|
320
|
+
const {
|
|
321
|
+
result: chain
|
|
322
|
+
} = requireResolve.requireResolveExtra('jest-chain-transform', opts);
|
|
323
|
+
if (chain !== null && chain !== void 0 && chain.length) {
|
|
324
|
+
ts_transform = [chain, {
|
|
325
|
+
transformers: [tsd,
|
|
326
|
+
// @ts-ignore
|
|
327
|
+
ts_transform]
|
|
328
|
+
}];
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const value = {
|
|
332
|
+
[`.(${_handleFileExtensions(defaultTransformFileExtensions(), '|')})$`]: ts_transform
|
|
333
|
+
};
|
|
334
|
+
return value;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Detects all values in an array that include any of the given keys.
|
|
339
|
+
*
|
|
340
|
+
* @example
|
|
341
|
+
* const arr = ['abc', 'def', 'ghi'];
|
|
342
|
+
* const keys = ['a', 'e', 'i'];
|
|
343
|
+
* const result = detectIncludes(arr, keys);
|
|
344
|
+
* // result is { a: ['abc', 'def'], e: ['def', 'ghi'], i: ['abc', 'ghi'] }
|
|
345
|
+
*
|
|
346
|
+
* @param arr - The array to search.
|
|
347
|
+
* @param keys - The keys to search for.
|
|
348
|
+
* @returns An object with the keys as properties and the
|
|
349
|
+
* corresponding values as arrays of strings.
|
|
350
|
+
*/
|
|
351
|
+
function detectIncludes(arr, keys) {
|
|
352
|
+
let result = {};
|
|
353
|
+
if (arr !== null && arr !== void 0 && arr.length) {
|
|
354
|
+
if (keys.length) {
|
|
355
|
+
keys = Array.isArray(keys) ? keys : [keys];
|
|
356
|
+
const re = new RegExp(`(${escapeArrayToRegExpSource(keys)})`);
|
|
357
|
+
arr.forEach(value => {
|
|
358
|
+
var _match, _ref;
|
|
359
|
+
let m = value === null || value === void 0 || (_match = (_ref = value).match) === null || _match === void 0 ? void 0 : _match.call(_ref, re);
|
|
360
|
+
if (m) {
|
|
361
|
+
var _result$k;
|
|
362
|
+
const k = m[1];
|
|
363
|
+
((_result$k = result[k]) !== null && _result$k !== void 0 ? _result$k : result[k] = []).push(value);
|
|
364
|
+
}
|
|
365
|
+
return result;
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Escapes all strings in an array to be used in a regular expression source.
|
|
373
|
+
*
|
|
374
|
+
* @example
|
|
375
|
+
* const arr = ['abc', 'def', 'ghi'];
|
|
376
|
+
* const result = escapeArrayToRegExpSource(arr);
|
|
377
|
+
* // result is 'abc|def|ghi'
|
|
378
|
+
*
|
|
379
|
+
* @param arr - The array of strings to escape.
|
|
380
|
+
* @returns A single string that can be used as a regular expression source.
|
|
381
|
+
*/
|
|
382
|
+
function escapeArrayToRegExpSource(arr) {
|
|
383
|
+
return arr.map(s => regexpHelperCore.escapeRegExp(s)).join("|");
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function defaultSetupFiles(runtime) {
|
|
387
|
+
var _runtime$jestConfig, _jestConfig$setupFile, _jestConfig$setupFile2;
|
|
388
|
+
const jestConfig = (_runtime$jestConfig = runtime === null || runtime === void 0 ? void 0 : runtime.jestConfig) !== null && _runtime$jestConfig !== void 0 ? _runtime$jestConfig : {};
|
|
389
|
+
let detect = detectIncludes(jestConfig.setupFiles, 'dotenv');
|
|
390
|
+
const setupFiles = [
|
|
391
|
+
/**
|
|
392
|
+
* @see https://lusbuab.medium.com/using-dotenv-with-jest-7e735b34e55f
|
|
393
|
+
*/
|
|
394
|
+
!detect['dotenv'] && _requireResolve2('dotenv/config').result, ...((_jestConfig$setupFile = jestConfig.setupFiles) !== null && _jestConfig$setupFile !== void 0 ? _jestConfig$setupFile : [])].filter(Boolean);
|
|
395
|
+
const setupFilesAfterEnv = [
|
|
396
|
+
/**
|
|
397
|
+
* 跨平台測試支援參考 / Cross-platform testing support reference
|
|
398
|
+
* @see https://medium.com/doctolib/how-to-run-the-same-jest-test-suite-across-several-platforms-jest-os-detection-plugin-included-f8113832482b
|
|
399
|
+
* @see https://github.com/doctolib/jest-os-detection
|
|
400
|
+
*/
|
|
401
|
+
...((_jestConfig$setupFile2 = jestConfig.setupFilesAfterEnv) !== null && _jestConfig$setupFile2 !== void 0 ? _jestConfig$setupFile2 : [])].filter(Boolean);
|
|
402
|
+
const ret = {};
|
|
403
|
+
if (setupFiles.length) {
|
|
404
|
+
ret.setupFiles = setupFiles;
|
|
405
|
+
}
|
|
406
|
+
if (setupFilesAfterEnv.length) {
|
|
407
|
+
ret.setupFilesAfterEnv = setupFilesAfterEnv;
|
|
408
|
+
}
|
|
409
|
+
return ret;
|
|
410
|
+
}
|
|
411
|
+
|
|
191
412
|
const cacheDirectory = /*#__PURE__*/jestCacheDirectory.getJestCacheDirectory();
|
|
413
|
+
/**
|
|
414
|
+
* 混合 Jest 配置函數 - 將預設配置與使用者自定義配置合併
|
|
415
|
+
* Mix Jest configuration function - Merges default config with user custom config
|
|
416
|
+
*
|
|
417
|
+
* 此函數提供了一個完整的 Jest 配置模板,包含 TypeScript 支援、快取管理、覆蓋率收集等功能
|
|
418
|
+
* This function provides a complete Jest configuration template with TypeScript support,
|
|
419
|
+
* cache management, coverage collection, and more.
|
|
420
|
+
*
|
|
421
|
+
* @param {T} jestConfig - 使用者自定義的 Jest 配置 / User custom Jest configuration
|
|
422
|
+
* @param {boolean} autoPrint - 是否自動印出配置資訊 / Whether to auto print config info
|
|
423
|
+
* @param {IOptionsPrintJestConfigInfo} options - 印出配置的選項 / Options for printing config
|
|
424
|
+
* @returns {T} 合併後的完整 Jest 配置 / Merged complete Jest configuration
|
|
425
|
+
*/
|
|
192
426
|
function mixinJestConfig(jestConfig, autoPrint, options) {
|
|
193
|
-
var
|
|
427
|
+
var _newJestConfig$transf;
|
|
194
428
|
// @ts-ignore
|
|
195
|
-
|
|
429
|
+
jestConfig !== null && jestConfig !== void 0 ? jestConfig : jestConfig = {};
|
|
196
430
|
const newJestConfig = fixJestConfig({
|
|
197
|
-
globals: {
|
|
198
|
-
// 'ts-jest': {
|
|
199
|
-
// //tsconfig: 'tsconfig.spec.json',
|
|
200
|
-
// },
|
|
201
|
-
},
|
|
431
|
+
globals: {},
|
|
202
432
|
cacheDirectory,
|
|
203
433
|
maxWorkers: 1,
|
|
204
434
|
clearMocks: true,
|
|
205
435
|
passWithNoTests: true,
|
|
206
436
|
moduleFileExtensions: defaultModuleFileExtensions(),
|
|
207
|
-
//testEnvironment: 'node',
|
|
208
|
-
//testMatch: ['**/*.test.ts', '**/*.spec.ts'],
|
|
209
437
|
...makeTestRegexConfig(defaultTestFileExtensions()),
|
|
210
438
|
testPathIgnorePatterns: defaultTestPathIgnorePatterns(),
|
|
211
|
-
|
|
212
|
-
setupFilesAfterEnv: [
|
|
213
|
-
//"jest-chain",
|
|
214
|
-
//"jest-extended/all",
|
|
215
|
-
//"jest-extended-extra",
|
|
216
|
-
//"jest-num-close-with",
|
|
217
|
-
/**
|
|
218
|
-
* https://medium.com/doctolib/how-to-run-the-same-jest-test-suite-across-several-platforms-jest-os-detection-plugin-included-f8113832482b
|
|
219
|
-
* https://github.com/doctolib/jest-os-detection
|
|
220
|
-
*/
|
|
221
|
-
//'jest-os-detection',
|
|
222
|
-
],
|
|
223
|
-
//transform: defaultTransform(),
|
|
439
|
+
...defaultSetupFiles(),
|
|
224
440
|
verbose: true,
|
|
225
|
-
/**
|
|
226
|
-
* if didn't set `coverageProvider` to `v8`
|
|
227
|
-
* with `collectCoverage` `true`, nodejs debug point maybe will fail
|
|
228
|
-
*/
|
|
229
441
|
coverageProvider: 'v8',
|
|
230
442
|
collectCoverage: false,
|
|
231
443
|
coveragePathIgnorePatterns: defaultCoveragePathIgnorePatterns(),
|
|
232
444
|
/**
|
|
233
|
-
*
|
|
445
|
+
* Jest 模組解析器參考 / Jest module resolver reference
|
|
446
|
+
* @see https://github.com/facebook/jest/issues/9771#issuecomment-872764344
|
|
234
447
|
*/
|
|
235
|
-
//resolver: 'jest-node-exports-resolver',
|
|
236
448
|
...jestConfig
|
|
237
449
|
});
|
|
238
450
|
(_newJestConfig$transf = newJestConfig.transform) !== null && _newJestConfig$transf !== void 0 ? _newJestConfig$transf : newJestConfig.transform = defaultTransform({
|
|
@@ -249,11 +461,13 @@
|
|
|
249
461
|
exports._handleFileExtensionsCore = _handleFileExtensionsCore;
|
|
250
462
|
exports._newTableBorderless = _newTableBorderless;
|
|
251
463
|
exports._requireResolve = _requireResolve;
|
|
464
|
+
exports._requireResolve2 = _requireResolve2;
|
|
252
465
|
exports.cacheDirectory = cacheDirectory;
|
|
253
466
|
exports.default = mixinJestConfig;
|
|
254
467
|
exports.defaultCoverageFileExtensions = defaultCoverageFileExtensions;
|
|
255
468
|
exports.defaultCoveragePathIgnorePatterns = defaultCoveragePathIgnorePatterns;
|
|
256
469
|
exports.defaultModuleFileExtensions = defaultModuleFileExtensions;
|
|
470
|
+
exports.defaultSetupFiles = defaultSetupFiles;
|
|
257
471
|
exports.defaultTestFileExtensions = defaultTestFileExtensions;
|
|
258
472
|
exports.defaultTestPathIgnorePatterns = defaultTestPathIgnorePatterns;
|
|
259
473
|
exports.defaultTransform = defaultTransform;
|