@nx/jest 16.0.0-beta.1
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 +8 -0
- package/LICENSE +22 -0
- package/README.md +63 -0
- package/executors.json +17 -0
- package/generators.json +34 -0
- package/index.d.ts +5 -0
- package/index.js +16 -0
- package/index.js.map +1 -0
- package/migrations.json +275 -0
- package/package.json +57 -0
- package/plugins/resolver.d.ts +1 -0
- package/plugins/resolver.js +56 -0
- package/plugins/resolver.js.map +1 -0
- package/preset/index.d.ts +2 -0
- package/preset/index.js +5 -0
- package/preset/index.js.map +1 -0
- package/preset/jest-preset.d.ts +2 -0
- package/preset/jest-preset.js +34 -0
- package/preset/jest-preset.js.map +1 -0
- package/src/executors/jest/compat.d.ts +2 -0
- package/src/executors/jest/compat.js +6 -0
- package/src/executors/jest/compat.js.map +1 -0
- package/src/executors/jest/jest.impl.d.ts +11 -0
- package/src/executors/jest/jest.impl.js +153 -0
- package/src/executors/jest/jest.impl.js.map +1 -0
- package/src/executors/jest/schema.d.ts +42 -0
- package/src/executors/jest/schema.json +218 -0
- package/src/executors/jest/summary.d.ts +7 -0
- package/src/executors/jest/summary.js +155 -0
- package/src/executors/jest/summary.js.map +1 -0
- package/src/generators/init/init.d.ts +5 -0
- package/src/generators/init/init.js +169 -0
- package/src/generators/init/init.js.map +1 -0
- package/src/generators/init/schema.d.ts +11 -0
- package/src/generators/init/schema.json +42 -0
- package/src/generators/jest-project/files/jest.config.ts__tmpl__ +16 -0
- package/src/generators/jest-project/files/src/test-setup.ts__tmpl__ +0 -0
- package/src/generators/jest-project/files/tsconfig.spec.json__tmpl__ +21 -0
- package/src/generators/jest-project/files-angular/jest.config.ts__tmpl__ +27 -0
- package/src/generators/jest-project/files-angular/src/test-setup.ts__tmpl__ +1 -0
- package/src/generators/jest-project/files-angular/tsconfig.spec.json__tmpl__ +22 -0
- package/src/generators/jest-project/jest-project.d.ts +4 -0
- package/src/generators/jest-project/jest-project.js +55 -0
- package/src/generators/jest-project/jest-project.js.map +1 -0
- package/src/generators/jest-project/lib/check-for-test-target.d.ts +3 -0
- package/src/generators/jest-project/lib/check-for-test-target.js +13 -0
- package/src/generators/jest-project/lib/check-for-test-target.js.map +1 -0
- package/src/generators/jest-project/lib/create-files.d.ts +3 -0
- package/src/generators/jest-project/lib/create-files.js +44 -0
- package/src/generators/jest-project/lib/create-files.js.map +1 -0
- package/src/generators/jest-project/lib/update-jestconfig.d.ts +3 -0
- package/src/generators/jest-project/lib/update-jestconfig.js +22 -0
- package/src/generators/jest-project/lib/update-jestconfig.js.map +1 -0
- package/src/generators/jest-project/lib/update-tsconfig.d.ts +3 -0
- package/src/generators/jest-project/lib/update-tsconfig.js +22 -0
- package/src/generators/jest-project/lib/update-tsconfig.js.map +1 -0
- package/src/generators/jest-project/lib/update-workspace.d.ts +3 -0
- package/src/generators/jest-project/lib/update-workspace.js +37 -0
- package/src/generators/jest-project/lib/update-workspace.js.map +1 -0
- package/src/generators/jest-project/schema.d.ts +23 -0
- package/src/generators/jest-project/schema.json +80 -0
- package/src/migrations/update-12-1-2/update-jest-preset-angular.d.ts +1 -0
- package/src/migrations/update-12-1-2/update-jest-preset-angular.js +55 -0
- package/src/migrations/update-12-1-2/update-jest-preset-angular.js.map +1 -0
- package/src/migrations/update-12-1-2/update-ts-jest.d.ts +2 -0
- package/src/migrations/update-12-1-2/update-ts-jest.js +36 -0
- package/src/migrations/update-12-1-2/update-ts-jest.js.map +1 -0
- package/src/migrations/update-12-4-0/add-test-environment-for-node.d.ts +2 -0
- package/src/migrations/update-12-4-0/add-test-environment-for-node.js +38 -0
- package/src/migrations/update-12-4-0/add-test-environment-for-node.js.map +1 -0
- package/src/migrations/update-12-4-0/update-jest-preset-angular.d.ts +25 -0
- package/src/migrations/update-12-4-0/update-jest-preset-angular.js +89 -0
- package/src/migrations/update-12-4-0/update-jest-preset-angular.js.map +1 -0
- package/src/migrations/update-12-6-0/update-base-jest-config.d.ts +2 -0
- package/src/migrations/update-12-6-0/update-base-jest-config.js +43 -0
- package/src/migrations/update-12-6-0/update-base-jest-config.js.map +1 -0
- package/src/migrations/update-13-1-2/update-tsconfigs-for-tests.d.ts +2 -0
- package/src/migrations/update-13-1-2/update-tsconfigs-for-tests.js +60 -0
- package/src/migrations/update-13-1-2/update-tsconfigs-for-tests.js.map +1 -0
- package/src/migrations/update-13-4-4/add-missing-root-babel-config.d.ts +2 -0
- package/src/migrations/update-13-4-4/add-missing-root-babel-config.js +43 -0
- package/src/migrations/update-13-4-4/add-missing-root-babel-config.js.map +1 -0
- package/src/migrations/update-14-0-0/update-jest-config-ext.d.ts +3 -0
- package/src/migrations/update-14-0-0/update-jest-config-ext.js +115 -0
- package/src/migrations/update-14-0-0/update-jest-config-ext.js.map +1 -0
- package/src/migrations/update-14-1-5/update-exports-jest-config.d.ts +7 -0
- package/src/migrations/update-14-1-5/update-exports-jest-config.js +66 -0
- package/src/migrations/update-14-1-5/update-exports-jest-config.js.map +1 -0
- package/src/migrations/update-14-6-0/update-configs-jest-28.d.ts +5 -0
- package/src/migrations/update-14-6-0/update-configs-jest-28.js +82 -0
- package/src/migrations/update-14-6-0/update-configs-jest-28.js.map +1 -0
- package/src/migrations/update-14-6-0/update-tests-jest-28.d.ts +24 -0
- package/src/migrations/update-14-6-0/update-tests-jest-28.js +158 -0
- package/src/migrations/update-14-6-0/update-tests-jest-28.js.map +1 -0
- package/src/migrations/update-15-0-0/add-jest-inputs.d.ts +2 -0
- package/src/migrations/update-15-0-0/add-jest-inputs.js +47 -0
- package/src/migrations/update-15-0-0/add-jest-inputs.js.map +1 -0
- package/src/migrations/update-15-8-0/update-configs-jest-29.d.ts +3 -0
- package/src/migrations/update-15-8-0/update-configs-jest-29.js +153 -0
- package/src/migrations/update-15-8-0/update-configs-jest-29.js.map +1 -0
- package/src/migrations/update-15-8-0/update-tests-jest-29.d.ts +5 -0
- package/src/migrations/update-15-8-0/update-tests-jest-29.js +64 -0
- package/src/migrations/update-15-8-0/update-tests-jest-29.js.map +1 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +13 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js.map +1 -0
- package/src/utils/ast-utils.d.ts +9 -0
- package/src/utils/ast-utils.js +33 -0
- package/src/utils/ast-utils.js.map +1 -0
- package/src/utils/config/find-root-jest-files.d.ts +3 -0
- package/src/utils/config/find-root-jest-files.js +21 -0
- package/src/utils/config/find-root-jest-files.js.map +1 -0
- package/src/utils/config/functions.d.ts +17 -0
- package/src/utils/config/functions.js +214 -0
- package/src/utils/config/functions.js.map +1 -0
- package/src/utils/config/get-jest-projects.d.ts +19 -0
- package/src/utils/config/get-jest-projects.js +64 -0
- package/src/utils/config/get-jest-projects.js.map +1 -0
- package/src/utils/config/update-config.d.ts +20 -0
- package/src/utils/config/update-config.js +84 -0
- package/src/utils/config/update-config.js.map +1 -0
- package/src/utils/versions.d.ts +9 -0
- package/src/utils/versions.js +13 -0
- package/src/utils/versions.js.map +1 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateJestConfigExt = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
|
6
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const allowedExt = ['.ts', '.js'];
|
|
9
|
+
function updateTsConfig(tree, tsConfigPath) {
|
|
10
|
+
try {
|
|
11
|
+
(0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
|
|
12
|
+
json.exclude = Array.from(new Set([...(json.exclude || []), 'jest.config.ts']));
|
|
13
|
+
return json;
|
|
14
|
+
}, {
|
|
15
|
+
allowTrailingComma: true,
|
|
16
|
+
disallowComments: false,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
devkit_1.logger.warn((0, devkit_1.stripIndents) `Nx Unable to update ${tsConfigPath}. Please manually ignore the jest.config.ts file.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function addEsLintIgnoreComments(tree, filePath) {
|
|
24
|
+
if (tree.exists(filePath)) {
|
|
25
|
+
const contents = tree.read(filePath, 'utf-8');
|
|
26
|
+
if (!contents.startsWith('/* eslint-disable */')) {
|
|
27
|
+
tree.write(filePath, `/* eslint-disable */
|
|
28
|
+
${contents}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function isJestConfigValid(tree, options) {
|
|
33
|
+
const configExt = (0, path_1.extname)(options.jestConfig);
|
|
34
|
+
if (!tree.exists(options.jestConfig) || !allowedExt.includes(configExt)) {
|
|
35
|
+
devkit_1.logger.debug(`unable to update file because it doesn't exist or is not a js or ts file. Config: ${options.jestConfig}. Exists?: ${tree.exists(options.jestConfig)}`);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
function updateTsconfigSpec(tree, projectConfig, path, options = {
|
|
41
|
+
isNextWithProjectParse: false,
|
|
42
|
+
tsConfigPath: '',
|
|
43
|
+
}) {
|
|
44
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(projectConfig.root, path), (json) => {
|
|
45
|
+
json.include = Array.from(new Set([...(json.include || []), 'jest.config.ts']));
|
|
46
|
+
if (options.isNextWithProjectParse) {
|
|
47
|
+
const tsConfig = (0, devkit_1.readJson)(tree, options.tsConfigPath);
|
|
48
|
+
const tsConfigExclude = (tsConfig.exclude || []).filter((e) => e !== 'jest.config.ts');
|
|
49
|
+
json.exclude = Array.from(new Set([...(json.exclude || []), ...tsConfigExclude]));
|
|
50
|
+
}
|
|
51
|
+
return json;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function isNextWithProjectLint(projectConfig, esLintJson) {
|
|
55
|
+
var _a, _b, _c, _d;
|
|
56
|
+
const esLintOverrides = (_a = esLintJson === null || esLintJson === void 0 ? void 0 : esLintJson.overrides) === null || _a === void 0 ? void 0 : _a.find((o) => ['*.ts', '*.tsx', '*.js', '*.jsx'].every((ext) => o.files.includes(ext)));
|
|
57
|
+
// check if it's a next app and has a parserOptions.project set in the eslint overrides
|
|
58
|
+
return !!(((_c = (_b = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.targets) === null || _b === void 0 ? void 0 : _b['build']) === null || _c === void 0 ? void 0 : _c.executor) === '@nrwl/next:build' &&
|
|
59
|
+
((_d = esLintOverrides === null || esLintOverrides === void 0 ? void 0 : esLintOverrides.parserOptions) === null || _d === void 0 ? void 0 : _d.project));
|
|
60
|
+
}
|
|
61
|
+
function updateJestConfigExt(tree) {
|
|
62
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
if (tree.exists('jest.config.js')) {
|
|
64
|
+
tree.rename('jest.config.js', 'jest.config.ts');
|
|
65
|
+
}
|
|
66
|
+
const projects = (0, devkit_1.getProjects)(tree);
|
|
67
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options, projectName, target, configuration) => {
|
|
68
|
+
const projectConfig = projects.get(projectName);
|
|
69
|
+
if (!options.jestConfig || !isJestConfigValid(tree, options)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
addEsLintIgnoreComments(tree, options.jestConfig);
|
|
73
|
+
const newJestConfigPath = options.jestConfig.replace('.js', '.ts');
|
|
74
|
+
tree.rename(options.jestConfig, newJestConfigPath);
|
|
75
|
+
const rootFiles = tree.children(projectConfig.root);
|
|
76
|
+
for (const fileName of rootFiles) {
|
|
77
|
+
if (fileName === 'tsconfig.json') {
|
|
78
|
+
const filePath = (0, devkit_1.joinPathFragments)(projectConfig.root, fileName);
|
|
79
|
+
const tsConfig = (0, devkit_1.readJson)(tree, filePath, {
|
|
80
|
+
allowTrailingComma: true,
|
|
81
|
+
disallowComments: false,
|
|
82
|
+
});
|
|
83
|
+
if (tsConfig.references) {
|
|
84
|
+
for (const { path } of tsConfig.references) {
|
|
85
|
+
// skip as editor.json should include everything anyway.
|
|
86
|
+
if (path.endsWith('tsconfig.editor.json')) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (path.endsWith('tsconfig.spec.json')) {
|
|
90
|
+
const eslintPath = (0, devkit_1.joinPathFragments)(projectConfig.root, '.eslintrc.json');
|
|
91
|
+
updateTsconfigSpec(tree, projectConfig, path, {
|
|
92
|
+
isNextWithProjectParse: tree.exists(eslintPath)
|
|
93
|
+
? isNextWithProjectLint(projectConfig, (0, devkit_1.readJson)(tree, eslintPath))
|
|
94
|
+
: false,
|
|
95
|
+
tsConfigPath: filePath,
|
|
96
|
+
});
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
updateTsConfig(tree, (0, devkit_1.joinPathFragments)(projectConfig.root, path));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
updateTsConfig(tree, filePath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
projectConfig.targets[target].options.jestConfig = newJestConfigPath;
|
|
108
|
+
(0, devkit_1.updateProjectConfiguration)(tree, projectName, projectConfig);
|
|
109
|
+
});
|
|
110
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
exports.updateJestConfigExt = updateJestConfigExt;
|
|
114
|
+
exports.default = updateJestConfigExt;
|
|
115
|
+
//# sourceMappingURL=update-jest-config-ext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-jest-config-ext.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-0-0/update-jest-config-ext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Tree } from '@nx/devkit';
|
|
2
|
+
export declare function updateExportsJestConfig(tree: Tree): import("@nx/devkit").GeneratorCallback;
|
|
3
|
+
export declare function updateRootFiles(tree: Tree): {
|
|
4
|
+
didUpdateRootPreset: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare function updateToDefaultExport(tree: Tree, filePath: string): void;
|
|
7
|
+
export default updateExportsJestConfig;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateToDefaultExport = exports.updateRootFiles = exports.updateExportsJestConfig = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
6
|
+
const versions_1 = require("../../utils/versions");
|
|
7
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
8
|
+
function updateExportsJestConfig(tree) {
|
|
9
|
+
const { didUpdateRootPreset } = updateRootFiles(tree);
|
|
10
|
+
let shouldInstallTsNode = false;
|
|
11
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options) => {
|
|
12
|
+
if (options.jestConfig && tree.exists(options.jestConfig)) {
|
|
13
|
+
if (options.jestConfig.endsWith('.ts')) {
|
|
14
|
+
updateToDefaultExport(tree, options.jestConfig);
|
|
15
|
+
shouldInstallTsNode = true;
|
|
16
|
+
}
|
|
17
|
+
const updatedImport = updateNxPresetImport(tree.read(options.jestConfig, 'utf-8'));
|
|
18
|
+
tree.write(options.jestConfig, updatedImport);
|
|
19
|
+
// jest.preset.ts => jest.preset.js
|
|
20
|
+
if (didUpdateRootPreset) {
|
|
21
|
+
const projectConfig = tree.read(options.jestConfig, 'utf-8');
|
|
22
|
+
const updatedConfig = projectConfig.replace(/(preset:\s*['"][.\/]*)(jest\.preset\.ts)(['"])/g, '$1jest.preset.js$3');
|
|
23
|
+
tree.write(options.jestConfig, updatedConfig);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return shouldInstallTsNode
|
|
28
|
+
? (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { 'ts-node': versions_1.tsNodeVersion })
|
|
29
|
+
: () => { };
|
|
30
|
+
}
|
|
31
|
+
exports.updateExportsJestConfig = updateExportsJestConfig;
|
|
32
|
+
function updateRootFiles(tree) {
|
|
33
|
+
let didUpdateRootPreset = false;
|
|
34
|
+
if (tree.exists('jest.config.ts')) {
|
|
35
|
+
updateToDefaultExport(tree, 'jest.config.ts');
|
|
36
|
+
}
|
|
37
|
+
if (tree.exists('jest.preset.ts')) {
|
|
38
|
+
// fix those who ran v14 migration where this was renamed.
|
|
39
|
+
tree.rename('jest.preset.ts', 'jest.preset.js');
|
|
40
|
+
didUpdateRootPreset = true;
|
|
41
|
+
}
|
|
42
|
+
if (tree.exists('jest.preset.js')) {
|
|
43
|
+
const newContents = updateNxPresetImport(tree.read('jest.preset.js', 'utf-8'));
|
|
44
|
+
tree.write('jest.preset.js', newContents);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
didUpdateRootPreset,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
exports.updateRootFiles = updateRootFiles;
|
|
51
|
+
function updateNxPresetImport(fileContents) {
|
|
52
|
+
return fileContents.replace(/require\(['"]@nrwl\/jest\/preset['"]\)[;\s]*?[\n\r]/g, `require('@nrwl/jest/preset').default;
|
|
53
|
+
`);
|
|
54
|
+
}
|
|
55
|
+
function updateToDefaultExport(tree, filePath) {
|
|
56
|
+
const newConfig = tsquery_1.tsquery.replace(tree.read(filePath, 'utf-8'), 'ExpressionStatement BinaryExpression', (node) => {
|
|
57
|
+
if (node.left.getText() === 'module.exports') {
|
|
58
|
+
return `export default ${node.right.getText()}`;
|
|
59
|
+
}
|
|
60
|
+
return node.getText();
|
|
61
|
+
});
|
|
62
|
+
tree.write(filePath, newConfig);
|
|
63
|
+
}
|
|
64
|
+
exports.updateToDefaultExport = updateToDefaultExport;
|
|
65
|
+
exports.default = updateExportsJestConfig;
|
|
66
|
+
//# sourceMappingURL=update-exports-jest-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-exports-jest-config.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-1-5/update-exports-jest-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tree } from '@nx/devkit';
|
|
2
|
+
export declare function updateConfigsJest28(tree: Tree): import("@nx/devkit").GeneratorCallback;
|
|
3
|
+
export declare function updateJestConfig(config: string): string;
|
|
4
|
+
export declare function checkDeps(tree: Tree): Record<string, string>;
|
|
5
|
+
export default updateConfigsJest28;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkDeps = exports.updateJestConfig = exports.updateConfigsJest28 = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
6
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
7
|
+
const typescript_1 = require("typescript");
|
|
8
|
+
const find_root_jest_files_1 = require("../../utils/config/find-root-jest-files");
|
|
9
|
+
const jestVersion = '28.1.1';
|
|
10
|
+
const JASMINE_TEST_RUNNER = /(testRunner:\s*['"`])(jest-jasmine2)(['"`])/g;
|
|
11
|
+
const JSDOM_TEST_ENV = /(testEnvironment:\s*['"`])(jsdom)(['"`])/g;
|
|
12
|
+
function updateConfigsJest28(tree) {
|
|
13
|
+
let devDeps = checkDeps(tree);
|
|
14
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options) => {
|
|
15
|
+
if (options.jestConfig && tree.exists(options.jestConfig)) {
|
|
16
|
+
const updatedConfig = updateJestConfig(tree.read(options.jestConfig, 'utf-8'));
|
|
17
|
+
tree.write(options.jestConfig, updatedConfig);
|
|
18
|
+
const projectConfigCheck = testFileForDep(updatedConfig);
|
|
19
|
+
devDeps = Object.assign(Object.assign({}, devDeps), projectConfigCheck);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return (0, devkit_1.addDependenciesToPackageJson)(tree, {}, devDeps);
|
|
23
|
+
}
|
|
24
|
+
exports.updateConfigsJest28 = updateConfigsJest28;
|
|
25
|
+
function updateJestConfig(config) {
|
|
26
|
+
let content = tsquery_1.tsquery.replace(config, 'PropertyAssignment:has(Identifier[name="testURL"])', (node) => {
|
|
27
|
+
var _a;
|
|
28
|
+
const value = (_a = node === null || node === void 0 ? void 0 : node.initializer) === null || _a === void 0 ? void 0 : _a.getText();
|
|
29
|
+
return `testEnvironmentOptions: {url: ${value}}`;
|
|
30
|
+
});
|
|
31
|
+
content = tsquery_1.tsquery.replace(content, 'PropertyAssignment > Identifier[name="extraGlobals"]', () => {
|
|
32
|
+
return 'sandboxInjectedGlobals';
|
|
33
|
+
});
|
|
34
|
+
return tsquery_1.tsquery.replace(content, 'PropertyAssignment:has(Identifier[name="timers"])', (node) => {
|
|
35
|
+
// must guard against non string properties as that means it's already been manually migrated
|
|
36
|
+
if ((node === null || node === void 0 ? void 0 : node.initializer) && (0, typescript_1.isStringLiteralLike)(node.initializer)) {
|
|
37
|
+
const value = node === null || node === void 0 ? void 0 : node.initializer.getText().trim();
|
|
38
|
+
// use .includes to ignore the different quotes (' " `)
|
|
39
|
+
if (value.includes('fake') || value.includes('modern')) {
|
|
40
|
+
return `fakeTimers: { enableGlobally: true }`;
|
|
41
|
+
}
|
|
42
|
+
if (value.includes('real')) {
|
|
43
|
+
return `fakeTimers: { enableGlobally: false }`;
|
|
44
|
+
}
|
|
45
|
+
if (value.includes('legacy')) {
|
|
46
|
+
return `fakeTimers: { enableGlobally: true, legacyFakeTimers: true }`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.updateJestConfig = updateJestConfig;
|
|
52
|
+
function checkDeps(tree) {
|
|
53
|
+
const packageJson = (0, devkit_1.readJson)(tree, 'package.json');
|
|
54
|
+
let devDeps = {};
|
|
55
|
+
if (packageJson.devDependencies['jest-preset-angular']) {
|
|
56
|
+
devDeps['jest-environment-jsdom'] = jestVersion;
|
|
57
|
+
}
|
|
58
|
+
const rootJestConfig = (0, find_root_jest_files_1.findRootJestConfig)(tree);
|
|
59
|
+
if (rootJestConfig) {
|
|
60
|
+
const rootConfigCheck = testFileForDep(tree.read(rootJestConfig, 'utf-8'));
|
|
61
|
+
devDeps = Object.assign(Object.assign({}, devDeps), rootConfigCheck);
|
|
62
|
+
}
|
|
63
|
+
const rootJestPreset = (0, find_root_jest_files_1.findRootJestPreset)(tree);
|
|
64
|
+
if (rootJestPreset) {
|
|
65
|
+
const rootPresetCheck = testFileForDep(tree.read(rootJestPreset, 'utf-8'));
|
|
66
|
+
devDeps = Object.assign(Object.assign({}, devDeps), rootPresetCheck);
|
|
67
|
+
}
|
|
68
|
+
return devDeps;
|
|
69
|
+
}
|
|
70
|
+
exports.checkDeps = checkDeps;
|
|
71
|
+
function testFileForDep(config) {
|
|
72
|
+
const deps = {};
|
|
73
|
+
if (JASMINE_TEST_RUNNER.test(config)) {
|
|
74
|
+
deps['jest-jasmine2'] = jestVersion;
|
|
75
|
+
}
|
|
76
|
+
if (JSDOM_TEST_ENV.test(config)) {
|
|
77
|
+
deps['jest-environment-jsdom'] = jestVersion;
|
|
78
|
+
}
|
|
79
|
+
return deps;
|
|
80
|
+
}
|
|
81
|
+
exports.default = updateConfigsJest28;
|
|
82
|
+
//# sourceMappingURL=update-configs-jest-28.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-configs-jest-28.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-6-0/update-configs-jest-28.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Tree } from '@nx/devkit';
|
|
2
|
+
export declare function updateTestsJest28(tree: Tree): void;
|
|
3
|
+
/**
|
|
4
|
+
* jest.useFakeTimers('modern') -> jest.useFakeTimers()
|
|
5
|
+
* jest.useFakeTimers('legacy') -> jest.useFakeTimers({legacyFakeTimers: true})
|
|
6
|
+
* if legacyFakeTimers is true in config, then
|
|
7
|
+
* jest.useFakeTimers('modern') -> jest.useRealTimers({legacyFakeTimers: false})
|
|
8
|
+
*/
|
|
9
|
+
export declare function updateJestTimers(fileContents: string, legacyFakeTimersInConfig: boolean): string;
|
|
10
|
+
/**
|
|
11
|
+
* this only applies to tests using @jest/globals
|
|
12
|
+
* jest.fn<Promise<string>, []>() -> jest.fn<() => Promise<string>>()
|
|
13
|
+
* jest.fn<number, string[]>() -> jest.fn<() => number>()
|
|
14
|
+
* jest.fn<ReturnType<typeof add>, Parameters<typeof add>>(); -> jest.fn<typeof add>()
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateJestFnMocks(fileContents: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* import expect from 'expect' -> import { expect } from 'expect'
|
|
19
|
+
* const expect = require('expect') -> const { expect } = require('expect')
|
|
20
|
+
* import { mocked } from 'ts-jest/utils' => import { mocked } from 'jest-mock';
|
|
21
|
+
* const { mocked } = require('ts-jest/utils'); => const { mocked } = require('jest-mock');
|
|
22
|
+
*/
|
|
23
|
+
export declare function updateJestImports(content: string): string;
|
|
24
|
+
export default updateTestsJest28;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateJestImports = exports.updateJestFnMocks = exports.updateJestTimers = exports.updateTestsJest28 = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
6
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
7
|
+
const ts = require("typescript");
|
|
8
|
+
function updateTestsJest28(tree) {
|
|
9
|
+
const testFilePatterns = /.*.(spec|test)\.(ts|js)x?/g;
|
|
10
|
+
const legacyTimers = /(timers:\s*['"`]legacy['"`])|(legacyFakeTimers:\s*true)/g;
|
|
11
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options, projectName) => {
|
|
12
|
+
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, projectName);
|
|
13
|
+
const isUsingLegacyTimers = options.jestConfig &&
|
|
14
|
+
tree.exists(options.jestConfig) &&
|
|
15
|
+
legacyTimers.test(tree.read(options.jestConfig, 'utf-8'));
|
|
16
|
+
(0, devkit_1.visitNotIgnoredFiles)(tree, projectConfig.root, (filePath) => {
|
|
17
|
+
if (!filePath.match(testFilePatterns)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
let fileContent = tree.read(filePath, 'utf-8');
|
|
21
|
+
fileContent = updateJestTimers(fileContent, isUsingLegacyTimers);
|
|
22
|
+
if (fileContent.includes('@jest/globals')) {
|
|
23
|
+
fileContent = updateJestFnMocks(fileContent);
|
|
24
|
+
}
|
|
25
|
+
fileContent = updateJestImports(fileContent);
|
|
26
|
+
tree.write(filePath, fileContent);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
exports.updateTestsJest28 = updateTestsJest28;
|
|
31
|
+
/**
|
|
32
|
+
* jest.useFakeTimers('modern') -> jest.useFakeTimers()
|
|
33
|
+
* jest.useFakeTimers('legacy') -> jest.useFakeTimers({legacyFakeTimers: true})
|
|
34
|
+
* if legacyFakeTimers is true in config, then
|
|
35
|
+
* jest.useFakeTimers('modern') -> jest.useRealTimers({legacyFakeTimers: false})
|
|
36
|
+
*/
|
|
37
|
+
function updateJestTimers(fileContents, legacyFakeTimersInConfig) {
|
|
38
|
+
return tsquery_1.tsquery.replace(fileContents, 'CallExpression', (node) => {
|
|
39
|
+
if (!(node === null || node === void 0 ? void 0 : node.getText().startsWith('jest.useFakeTimers'))) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const timerType = node.getText();
|
|
43
|
+
// will be modern or legacy with quotes
|
|
44
|
+
// just make sure it's included to ignore different quote types
|
|
45
|
+
if (timerType.includes('legacy')) {
|
|
46
|
+
return 'jest.useFakeTimers({ legacyFakeTimers: true })';
|
|
47
|
+
}
|
|
48
|
+
if (legacyFakeTimersInConfig) {
|
|
49
|
+
// using modern but have config set to legacy
|
|
50
|
+
return 'jest.useRealTimers({ legacyFakeTimers: false })';
|
|
51
|
+
}
|
|
52
|
+
// have to include space otherwise empty string will not remove the string literal
|
|
53
|
+
return 'jest.useFakeTimers()';
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
exports.updateJestTimers = updateJestTimers;
|
|
57
|
+
/**
|
|
58
|
+
* make sure using jest.fn<T>
|
|
59
|
+
*/
|
|
60
|
+
function isTypedJestFnMock(node) {
|
|
61
|
+
return ts.isCallExpression(node) && node.getText().startsWith('jest.fn<');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* has 2 args where the second is a tuple or array
|
|
65
|
+
* i.e.
|
|
66
|
+
* jest.fn<Promise<string>, []>()
|
|
67
|
+
* jest.fn<number, MyType[]>()
|
|
68
|
+
* jest.fn<number, [string, number, SomeType]>()
|
|
69
|
+
*/
|
|
70
|
+
function isValid2Args(node) {
|
|
71
|
+
var _a, _b;
|
|
72
|
+
const r = (node === null || node === void 0 ? void 0 : node.typeArguments.length) === 2 &&
|
|
73
|
+
(((_a = node.typeArguments[1]) === null || _a === void 0 ? void 0 : _a.kind) === ts.SyntaxKind.TupleType ||
|
|
74
|
+
((_b = node.typeArguments[1]) === null || _b === void 0 ? void 0 : _b.kind) === ts.SyntaxKind.ArrayType);
|
|
75
|
+
return r;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* has 1 arg where the type is NOT a FunctionType
|
|
79
|
+
* if it's a function type then it's already using the correct syntax
|
|
80
|
+
* i.e.
|
|
81
|
+
* jest.fn<string>()
|
|
82
|
+
* jest.fn<() => Promise<string>>() is already valid, don't change it.
|
|
83
|
+
*/
|
|
84
|
+
function isValid1Arg(node) {
|
|
85
|
+
var _a, _b;
|
|
86
|
+
const r = (node === null || node === void 0 ? void 0 : node.typeArguments.length) === 1 &&
|
|
87
|
+
((_a = node.typeArguments[0]) === null || _a === void 0 ? void 0 : _a.kind) !== ts.SyntaxKind.FunctionType &&
|
|
88
|
+
((_b = node.typeArguments[0]) === null || _b === void 0 ? void 0 : _b.kind) !== ts.SyntaxKind.TypeQuery;
|
|
89
|
+
return r;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* has a type reference as a type args
|
|
93
|
+
* jest.fn<ReturnType<typeof add>, Parameters<typeof add>>();
|
|
94
|
+
*/
|
|
95
|
+
function isValidTypeRef(node) {
|
|
96
|
+
var _a, _b;
|
|
97
|
+
const r = node.typeArguments[0].kind === ts.SyntaxKind.TypeReference &&
|
|
98
|
+
!!((_b = (_a = node.typeArguments) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.typeArguments);
|
|
99
|
+
return r;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* has valid type args. prevent converting an already converted jest.fn<T>()
|
|
103
|
+
*/
|
|
104
|
+
function isValidType(node) {
|
|
105
|
+
var _a, _b, _c;
|
|
106
|
+
const r = (node === null || node === void 0 ? void 0 : node.typeArguments.length) === 1 &&
|
|
107
|
+
(((_a = node.typeArguments[0]) === null || _a === void 0 ? void 0 : _a.kind) === ts.SyntaxKind.FunctionType ||
|
|
108
|
+
((_b = node.typeArguments[0]) === null || _b === void 0 ? void 0 : _b.kind) === ts.SyntaxKind.TypeReference ||
|
|
109
|
+
((_c = node.typeArguments[0]) === null || _c === void 0 ? void 0 : _c.kind) === ts.SyntaxKind.TypeQuery ||
|
|
110
|
+
node.parent.getText().includes('/** TODO:')); // has already been marked by a previous run.
|
|
111
|
+
return r;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* this only applies to tests using @jest/globals
|
|
115
|
+
* jest.fn<Promise<string>, []>() -> jest.fn<() => Promise<string>>()
|
|
116
|
+
* jest.fn<number, string[]>() -> jest.fn<() => number>()
|
|
117
|
+
* jest.fn<ReturnType<typeof add>, Parameters<typeof add>>(); -> jest.fn<typeof add>()
|
|
118
|
+
*/
|
|
119
|
+
function updateJestFnMocks(fileContents) {
|
|
120
|
+
return tsquery_1.tsquery.replace(fileContents, 'CallExpression', (node) => {
|
|
121
|
+
if (!isTypedJestFnMock(node) || isValidType(node)) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (isValid2Args(node) || isValid1Arg(node)) {
|
|
125
|
+
return `${node.getText().split('<')[0]}<() => ${node.typeArguments[0].getText()}>()`;
|
|
126
|
+
}
|
|
127
|
+
if (isValidTypeRef(node)) {
|
|
128
|
+
const innerType = node.typeArguments[0]
|
|
129
|
+
.typeArguments;
|
|
130
|
+
return `${node.getText().split('<')[0]}<${innerType[0].getText()}>()`;
|
|
131
|
+
}
|
|
132
|
+
return `/** TODO: Update jest.fn<T>() type args for Jest v28 https://jestjs.io/docs/upgrading-to-jest28#jestfn */ ${node.getText()}`;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
exports.updateJestFnMocks = updateJestFnMocks;
|
|
136
|
+
/**
|
|
137
|
+
* import expect from 'expect' -> import { expect } from 'expect'
|
|
138
|
+
* const expect = require('expect') -> const { expect } = require('expect')
|
|
139
|
+
* import { mocked } from 'ts-jest/utils' => import { mocked } from 'jest-mock';
|
|
140
|
+
* const { mocked } = require('ts-jest/utils'); => const { mocked } = require('jest-mock');
|
|
141
|
+
*/
|
|
142
|
+
function updateJestImports(content) {
|
|
143
|
+
const mockUpdatedImports = tsquery_1.tsquery.replace(content, ':matches(ImportDeclaration:has(Identifier[name="mocked"]) StringLiteral[value="ts-jest/utils"], VariableStatement:has(Identifier[name="mocked"]) StringLiteral[value="ts-jest/utils"])', () => {
|
|
144
|
+
return "'jest-mock'";
|
|
145
|
+
});
|
|
146
|
+
return tsquery_1.tsquery.replace(mockUpdatedImports, ':matches(ImportDeclaration:has(StringLiteral[value="expect"]), VariableDeclaration:has(StringLiteral[value="expect"]))', (node) => {
|
|
147
|
+
if (ts.isImportDeclaration(node)) {
|
|
148
|
+
return `import { expect } from 'expect';`;
|
|
149
|
+
}
|
|
150
|
+
if (ts.isVariableDeclaration(node)) {
|
|
151
|
+
return `{ expect } = require('expect')`; // this query doesn't capture the ; so we don't need to add it in the replace.
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
exports.updateJestImports = updateJestImports;
|
|
157
|
+
exports.default = updateTestsJest28;
|
|
158
|
+
//# sourceMappingURL=update-tests-jest-28.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-tests-jest-28.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-6-0/update-tests-jest-28.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
6
|
+
function default_1(tree) {
|
|
7
|
+
var _a, _b, _c, _d;
|
|
8
|
+
var _e;
|
|
9
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
10
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
|
11
|
+
const jestTargets = getJestTargetNames(tree);
|
|
12
|
+
const hasProductionFileset = !!((_a = nxJson.namedInputs) === null || _a === void 0 ? void 0 : _a.production);
|
|
13
|
+
if (jestTargets.size > 0 && hasProductionFileset) {
|
|
14
|
+
const productionFileset = new Set(nxJson.namedInputs.production);
|
|
15
|
+
for (const exclusion of [
|
|
16
|
+
'!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)',
|
|
17
|
+
'!{projectRoot}/tsconfig.spec.json',
|
|
18
|
+
'!{projectRoot}/jest.config.[jt]s',
|
|
19
|
+
]) {
|
|
20
|
+
productionFileset.add(exclusion);
|
|
21
|
+
}
|
|
22
|
+
nxJson.namedInputs.production = Array.from(productionFileset);
|
|
23
|
+
}
|
|
24
|
+
for (const targetName of jestTargets) {
|
|
25
|
+
(_b = nxJson.targetDefaults) !== null && _b !== void 0 ? _b : (nxJson.targetDefaults = {});
|
|
26
|
+
const jestTargetDefaults = ((_c = (_e = nxJson.targetDefaults)[targetName]) !== null && _c !== void 0 ? _c : (_e[targetName] = {}));
|
|
27
|
+
(_d = jestTargetDefaults.inputs) !== null && _d !== void 0 ? _d : (jestTargetDefaults.inputs = [
|
|
28
|
+
'default',
|
|
29
|
+
hasProductionFileset ? '^production' : '^default',
|
|
30
|
+
...(tree.exists('jest.preset.js')
|
|
31
|
+
? ['{workspaceRoot}/jest.preset.js']
|
|
32
|
+
: []),
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
35
|
+
(0, devkit_1.updateNxJson)(tree, nxJson);
|
|
36
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
exports.default = default_1;
|
|
40
|
+
function getJestTargetNames(tree) {
|
|
41
|
+
const jestTargetNames = new Set();
|
|
42
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (_, __, target) => {
|
|
43
|
+
jestTargetNames.add(target);
|
|
44
|
+
});
|
|
45
|
+
return jestTargetNames;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=add-jest-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-jest-inputs.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-15-0-0/add-jest-inputs.ts"],"names":[],"mappings":";;;AAAA,uCAAyE;AACzE,6FAA0F;AAE1F,mBAA+B,IAAU;;;;QACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,WAAW,0CAAE,UAAU,CAAA,CAAC;QAE9D,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,oBAAoB,EAAE;YAChD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACjE,KAAK,MAAM,SAAS,IAAI;gBACtB,uDAAuD;gBACvD,mCAAmC;gBACnC,kCAAkC;aACnC,EAAE;gBACD,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aAClC;YACD,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC/D;QAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,MAAA,MAAM,CAAC,cAAc,oCAArB,MAAM,CAAC,cAAc,GAAK,EAAE,EAAC;YAC7B,MAAM,kBAAkB,GAAG,aAAC,MAAM,CAAC,cAAc,EAAC,UAAU,wCAAV,UAAU,IAAM,EAAE,EAAC,CAAC;YAEtE,MAAA,kBAAkB,CAAC,MAAM,oCAAzB,kBAAkB,CAAC,MAAM,GAAK;gBAC5B,SAAS;gBACT,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;gBACjD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC/B,CAAC,CAAC,CAAC,gCAAgC,CAAC;oBACpC,CAAC,CAAC,EAAE,CAAC;aACR,EAAC;SACH;QAED,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;;CACzB;AAlCD,4BAkCC;AAED,SAAS,kBAAkB,CAAC,IAAU;IACpC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAA,+CAAsB,EAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;QAChE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;AACzB,CAAC"}
|