@nx/cypress 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 +16 -0
- package/generators.json +66 -0
- package/index.d.ts +5 -0
- package/index.js +14 -0
- package/index.js.map +1 -0
- package/migrations.json +53 -0
- package/package.json +59 -0
- package/plugins/cypress-preset.d.ts +62 -0
- package/plugins/cypress-preset.js +53 -0
- package/plugins/cypress-preset.js.map +1 -0
- package/src/executors/cypress/compat.d.ts +2 -0
- package/src/executors/cypress/compat.js +6 -0
- package/src/executors/cypress/compat.js.map +1 -0
- package/src/executors/cypress/cypress.impl.d.ts +40 -0
- package/src/executors/cypress/cypress.impl.js +372 -0
- package/src/executors/cypress/cypress.impl.js.map +1 -0
- package/src/executors/cypress/schema.json +158 -0
- package/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.d.ts +4 -0
- package/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.js +104 -0
- package/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.js.map +1 -0
- package/src/generators/convert-tslint-to-eslint/schema.json +44 -0
- package/src/generators/cypress-component-project/cypress-component-project.d.ts +4 -0
- package/src/generators/cypress-component-project/cypress-component-project.js +127 -0
- package/src/generators/cypress-component-project/cypress-component-project.js.map +1 -0
- package/src/generators/cypress-component-project/files/cypress/fixtures/example.json +5 -0
- package/src/generators/cypress-component-project/files/cypress/support/commands.ts__ext__ +34 -0
- package/src/generators/cypress-component-project/files/cypress/support/component-index.html +13 -0
- package/src/generators/cypress-component-project/files/cypress/support/component.ts__ext__ +17 -0
- package/src/generators/cypress-component-project/files/cypress/tsconfig.cy.json +17 -0
- package/src/generators/cypress-component-project/files/cypress.config.ts__ext__ +3 -0
- package/src/generators/cypress-component-project/schema.d.ts +5 -0
- package/src/generators/cypress-component-project/schema.json +33 -0
- package/src/generators/cypress-e2e-configuration/cypress-e2e-configuration.d.ts +18 -0
- package/src/generators/cypress-e2e-configuration/cypress-e2e-configuration.js +133 -0
- package/src/generators/cypress-e2e-configuration/cypress-e2e-configuration.js.map +1 -0
- package/src/generators/cypress-e2e-configuration/files/v10/__dir__/e2e/app.cy.ts__tmpl__ +13 -0
- package/src/generators/cypress-e2e-configuration/files/v10/__dir__/fixtures/example.json__tmpl__ +4 -0
- package/src/generators/cypress-e2e-configuration/files/v10/__dir__/support/app.po.ts__tmpl__ +1 -0
- package/src/generators/cypress-e2e-configuration/files/v10/__dir__/support/commands.ts__tmpl__ +33 -0
- package/src/generators/cypress-e2e-configuration/files/v10/__dir__/support/e2e.ts__tmpl__ +17 -0
- package/src/generators/cypress-e2e-configuration/files/v10/cypress.config.ts__tmpl__ +9 -0
- package/src/generators/cypress-e2e-configuration/files/v10/tsconfig__tsFileExt__ +10 -0
- package/src/generators/cypress-e2e-configuration/files/v9/__dir__/fixtures/example.json__tmpl__ +4 -0
- package/src/generators/cypress-e2e-configuration/files/v9/__dir__/integration/app.spec.ts__tmpl__ +13 -0
- package/src/generators/cypress-e2e-configuration/files/v9/__dir__/plugins/index.js +22 -0
- package/src/generators/cypress-e2e-configuration/files/v9/__dir__/support/app.po.ts__tmpl__ +1 -0
- package/src/generators/cypress-e2e-configuration/files/v9/__dir__/support/commands.ts__tmpl__ +33 -0
- package/src/generators/cypress-e2e-configuration/files/v9/__dir__/support/index.ts__tmpl__ +17 -0
- package/src/generators/cypress-e2e-configuration/files/v9/cypress.json +12 -0
- package/src/generators/cypress-e2e-configuration/files/v9/tsconfig__tsFileExt__ +10 -0
- package/src/generators/cypress-e2e-configuration/schema.json +91 -0
- package/src/generators/cypress-project/cypress-project.d.ts +13 -0
- package/src/generators/cypress-project/cypress-project.js +172 -0
- package/src/generators/cypress-project/cypress-project.js.map +1 -0
- package/src/generators/cypress-project/files/v10-and-after/cypress.config.ts__tmpl__ +10 -0
- package/src/generators/cypress-project/files/v10-and-after/src/e2e/app.cy.ts__tmpl__ +13 -0
- package/src/generators/cypress-project/files/v10-and-after/src/fixtures/example.json__tmpl__ +4 -0
- package/src/generators/cypress-project/files/v10-and-after/src/support/app.po.ts__tmpl__ +1 -0
- package/src/generators/cypress-project/files/v10-and-after/src/support/commands.ts__tmpl__ +33 -0
- package/src/generators/cypress-project/files/v10-and-after/src/support/e2e.ts__tmpl__ +17 -0
- package/src/generators/cypress-project/files/v10-and-after/tsconfig.json +10 -0
- package/src/generators/cypress-project/files/v9-and-under/cypress.json +12 -0
- package/src/generators/cypress-project/files/v9-and-under/src/fixtures/example.json__tmpl__ +4 -0
- package/src/generators/cypress-project/files/v9-and-under/src/integration/app.spec.ts__tmpl__ +13 -0
- package/src/generators/cypress-project/files/v9-and-under/src/plugins/index.js +22 -0
- package/src/generators/cypress-project/files/v9-and-under/src/support/app.po.ts__tmpl__ +1 -0
- package/src/generators/cypress-project/files/v9-and-under/src/support/commands.ts__tmpl__ +33 -0
- package/src/generators/cypress-project/files/v9-and-under/src/support/index.ts__tmpl__ +17 -0
- package/src/generators/cypress-project/files/v9-and-under/tsconfig.json +10 -0
- package/src/generators/cypress-project/schema.d.ts +15 -0
- package/src/generators/cypress-project/schema.json +79 -0
- package/src/generators/init/init.d.ts +5 -0
- package/src/generators/init/init.js +47 -0
- package/src/generators/init/init.js.map +1 -0
- package/src/generators/init/schema.d.ts +5 -0
- package/src/generators/init/schema.json +16 -0
- package/src/generators/migrate-to-cypress-11/conversion.util.d.ts +34 -0
- package/src/generators/migrate-to-cypress-11/conversion.util.js +241 -0
- package/src/generators/migrate-to-cypress-11/conversion.util.js.map +1 -0
- package/src/generators/migrate-to-cypress-11/migrate-to-cypress-11.d.ts +3 -0
- package/src/generators/migrate-to-cypress-11/migrate-to-cypress-11.js +85 -0
- package/src/generators/migrate-to-cypress-11/migrate-to-cypress-11.js.map +1 -0
- package/src/generators/migrate-to-cypress-11/schema.json +15 -0
- package/src/migrations/update-12-8-0/remove-typescript-plugin.d.ts +2 -0
- package/src/migrations/update-12-8-0/remove-typescript-plugin.js +89 -0
- package/src/migrations/update-12-8-0/remove-typescript-plugin.js.map +1 -0
- package/src/migrations/update-14-6-1/update-cypress-configs-presets.d.ts +3 -0
- package/src/migrations/update-14-6-1/update-cypress-configs-presets.js +111 -0
- package/src/migrations/update-14-6-1/update-cypress-configs-presets.js.map +1 -0
- package/src/migrations/update-14-7-0/update-cypress-version-if-10.d.ts +3 -0
- package/src/migrations/update-14-7-0/update-cypress-version-if-10.js +33 -0
- package/src/migrations/update-14-7-0/update-cypress-version-if-10.js.map +1 -0
- package/src/migrations/update-15-0-0/add-cypress-inputs.d.ts +2 -0
- package/src/migrations/update-15-0-0/add-cypress-inputs.js +48 -0
- package/src/migrations/update-15-0-0/add-cypress-inputs.js.map +1 -0
- package/src/migrations/update-15-0-0/update-cy-mount-usage.d.ts +5 -0
- package/src/migrations/update-15-0-0/update-cy-mount-usage.js +124 -0
- package/src/migrations/update-15-0-0/update-cy-mount-usage.js.map +1 -0
- package/src/migrations/update-15-1-0/cypress-11.d.ts +6 -0
- package/src/migrations/update-15-1-0/cypress-11.js +118 -0
- package/src/migrations/update-15-1-0/cypress-11.js.map +1 -0
- package/src/migrations/update-15-5-0/helpers.d.ts +3 -0
- package/src/migrations/update-15-5-0/helpers.js +40 -0
- package/src/migrations/update-15-5-0/helpers.js.map +1 -0
- package/src/migrations/update-15-5-0/update-to-cypress-12.d.ts +24 -0
- package/src/migrations/update-15-5-0/update-to-cypress-12.js +183 -0
- package/src/migrations/update-15-5-0/update-to-cypress-12.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/plugins/preprocessor-vite.d.ts +32 -0
- package/src/plugins/preprocessor-vite.js +96 -0
- package/src/plugins/preprocessor-vite.js.map +1 -0
- package/src/utils/add-linter.d.ts +21 -0
- package/src/utils/add-linter.js +90 -0
- package/src/utils/add-linter.js.map +1 -0
- package/src/utils/ct-helpers.d.ts +16 -0
- package/src/utils/ct-helpers.js +86 -0
- package/src/utils/ct-helpers.js.map +1 -0
- package/src/utils/cypress-version.d.ts +5 -0
- package/src/utils/cypress-version.js +34 -0
- package/src/utils/cypress-version.js.map +1 -0
- package/src/utils/find-target-options.d.ts +16 -0
- package/src/utils/find-target-options.js +115 -0
- package/src/utils/find-target-options.js.map +1 -0
- package/src/utils/project-name.d.ts +3 -0
- package/src/utils/project-name.js +20 -0
- package/src/utils/project-name.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,89 @@
|
|
|
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 typescript_1 = require("typescript");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const cypress_version_1 = require("../../utils/cypress-version");
|
|
8
|
+
function removeTypescriptPlugin(tree) {
|
|
9
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
10
|
+
const cypressVersion = (0, cypress_version_1.installedCypressVersion)();
|
|
11
|
+
if (cypressVersion < 7) {
|
|
12
|
+
console.warn(`Cypress v${cypressVersion} is installed. This migration was skipped. Please rerun this migration after updating to Cypress 7.`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
for (const [_, proj] of (0, devkit_1.getProjects)(tree)) {
|
|
16
|
+
const cypressTargets = getCypressTargets(proj);
|
|
17
|
+
if (cypressTargets.length <= 0) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
for (const target of cypressTargets) {
|
|
21
|
+
const cypressConfigs = getCypressConfigs(target);
|
|
22
|
+
for (const config of cypressConfigs) {
|
|
23
|
+
const cypressConfig = (0, devkit_1.readJson)(tree, config);
|
|
24
|
+
if (cypressConfig.pluginsFile) {
|
|
25
|
+
let pluginPath = (0, path_1.join)((0, path_1.dirname)(config), cypressConfig.pluginsFile);
|
|
26
|
+
if (!tree.exists(pluginPath)) {
|
|
27
|
+
pluginPath = ['.js', '.ts']
|
|
28
|
+
.map((ext) => pluginPath + ext)
|
|
29
|
+
.find((path) => tree.exists(path));
|
|
30
|
+
}
|
|
31
|
+
removePreprocessor(tree, pluginPath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
exports.default = removeTypescriptPlugin;
|
|
40
|
+
function removePreprocessor(tree, pluginPath) {
|
|
41
|
+
const pluginContents = tree.read(pluginPath, 'utf-8');
|
|
42
|
+
const sourceFile = (0, typescript_1.createSourceFile)(pluginPath, pluginContents, typescript_1.ScriptTarget.ESNext, true);
|
|
43
|
+
const deletions = [];
|
|
44
|
+
const callback = (node) => {
|
|
45
|
+
// Look for the invocation of preprocessTypescript
|
|
46
|
+
if ((0, typescript_1.isCallExpression)(node) &&
|
|
47
|
+
(0, typescript_1.isIdentifier)(node.expression) &&
|
|
48
|
+
node.expression.getText(sourceFile) === 'preprocessTypescript' &&
|
|
49
|
+
node.arguments.length < 2) {
|
|
50
|
+
// Get the Statement that the function call belongs to
|
|
51
|
+
let n = node.parent;
|
|
52
|
+
while (!(0, typescript_1.isExpressionStatement)(n) && n === sourceFile) {
|
|
53
|
+
n = n.parent;
|
|
54
|
+
}
|
|
55
|
+
deletions.push({
|
|
56
|
+
type: devkit_1.ChangeType.Delete,
|
|
57
|
+
start: n.getStart(),
|
|
58
|
+
length: n.getWidth() +
|
|
59
|
+
(pluginContents[n.getStart() + n.getWidth()] === ';' ? 1 : 0),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Call the callback for every node in the file
|
|
64
|
+
sourceFile.forEachChild(recurse);
|
|
65
|
+
function recurse(node) {
|
|
66
|
+
callback(node);
|
|
67
|
+
node.forEachChild((child) => recurse(child));
|
|
68
|
+
}
|
|
69
|
+
// Remove the preprocessor from the file
|
|
70
|
+
tree.write(pluginPath, (0, devkit_1.applyChangesToString)(pluginContents, deletions));
|
|
71
|
+
}
|
|
72
|
+
function getCypressConfigs(target) {
|
|
73
|
+
if (!target.configurations && !target.options.cypressConfig) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
else if (!target.configurations && target.options.cypressConfig) {
|
|
77
|
+
return [target.options.cypressConfig];
|
|
78
|
+
}
|
|
79
|
+
return [target.options, Object.values(target.configurations)]
|
|
80
|
+
.filter((options) => !!options.cypressConfig)
|
|
81
|
+
.map((options) => options.cypressConfig);
|
|
82
|
+
}
|
|
83
|
+
function getCypressTargets(proj) {
|
|
84
|
+
if (!proj.targets) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
return Object.values(proj.targets).filter((target) => target.executor === '@nrwl/cypress:cypress');
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=remove-typescript-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-typescript-plugin.js","sourceRoot":"","sources":["../../../../../../packages/cypress/src/migrations/update-12-8-0/remove-typescript-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateCypressConfigsPresets = 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 tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
8
|
+
const cypress_version_1 = require("../../utils/cypress-version");
|
|
9
|
+
const find_target_options_1 = require("../../utils/find-target-options");
|
|
10
|
+
function updateCypressConfigsPresets(tree) {
|
|
11
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
12
|
+
if ((0, cypress_version_1.installedCypressVersion)() < 10) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const projectsWithoutDevServerTarget = new Set();
|
|
16
|
+
const updateTasks = [];
|
|
17
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/cypress:cypress', (options, projectName, targetName, configName) => {
|
|
18
|
+
var _a, _b, _c, _d;
|
|
19
|
+
if (options.cypressConfig && tree.exists(options.cypressConfig)) {
|
|
20
|
+
updatePreset(tree, options, targetName);
|
|
21
|
+
}
|
|
22
|
+
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, projectName);
|
|
23
|
+
const testingType = options.testingType ||
|
|
24
|
+
((_b = (_a = projectConfig.targets[targetName]) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.testingType);
|
|
25
|
+
const devServerTarget = options.devServerTarget ||
|
|
26
|
+
((_d = (_c = projectConfig.targets[targetName]) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.devServerTarget);
|
|
27
|
+
if (!devServerTarget && testingType === 'component') {
|
|
28
|
+
updateTasks.push(addBuildTargetToConfig(tree, projectName, targetName, configName).then((didUpdate) => {
|
|
29
|
+
if (!didUpdate) {
|
|
30
|
+
projectsWithoutDevServerTarget.add(projectName);
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (updateTasks.length > 0) {
|
|
36
|
+
cacheComponentTestTarget(tree);
|
|
37
|
+
}
|
|
38
|
+
yield Promise.all(updateTasks);
|
|
39
|
+
if (projectsWithoutDevServerTarget.size > 0) {
|
|
40
|
+
devkit_1.logger.warn(`Unable to find a build target to add to the component testing target in the following projects:`);
|
|
41
|
+
devkit_1.logger.warn(`- ${Array.from(projectsWithoutDevServerTarget).join('\n- ')}`);
|
|
42
|
+
devkit_1.logger.warn((0, devkit_1.stripIndents) `
|
|
43
|
+
You can manually add the 'devServerTarget' option to the
|
|
44
|
+
component testing target to specify the build target to use.
|
|
45
|
+
The build configuration should be using @nrwl/web:webpack as the executor.
|
|
46
|
+
Usually this is a React app in your workspace.
|
|
47
|
+
Component testing will fallback to a default configuration if one isn't provided,
|
|
48
|
+
but might require modifications if your projects are more complex.
|
|
49
|
+
`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
exports.updateCypressConfigsPresets = updateCypressConfigsPresets;
|
|
54
|
+
function updatePreset(tree, options, targetName) {
|
|
55
|
+
let contents = tsquery_1.tsquery.replace(tree.read(options.cypressConfig, 'utf-8'), 'CallExpression', (node) => {
|
|
56
|
+
// technically someone could have both component and e2e in the same project.
|
|
57
|
+
const expression = node.expression.getText();
|
|
58
|
+
if (expression === 'nxE2EPreset') {
|
|
59
|
+
return 'nxE2EPreset(__filename)';
|
|
60
|
+
}
|
|
61
|
+
else if (expression === 'nxE2EStorybookPreset') {
|
|
62
|
+
return 'nxE2EStorybookPreset(__filename)';
|
|
63
|
+
}
|
|
64
|
+
else if (node.expression.getText() === 'nxComponentTestingPreset') {
|
|
65
|
+
return targetName && targetName !== 'component-test' // the default
|
|
66
|
+
? `nxComponentTestingPreset(__filename, { ctTargetName: '${targetName}' })`
|
|
67
|
+
: 'nxComponentTestingPreset(__filename)';
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
});
|
|
71
|
+
tree.write(options.cypressConfig, contents);
|
|
72
|
+
}
|
|
73
|
+
function addBuildTargetToConfig(tree, projectName, targetName, configName) {
|
|
74
|
+
var _a, _b;
|
|
75
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const projectWithBuild = yield (0, find_target_options_1.findBuildConfig)(tree, {
|
|
77
|
+
project: projectName,
|
|
78
|
+
validExecutorNames: new Set(['@nrwl/web:webpack']),
|
|
79
|
+
});
|
|
80
|
+
// didn't find the config so can't update. consumer should collect list of them and display a warning at the end
|
|
81
|
+
// no reason to fail since the preset will fallback to a default config so should still keep working.
|
|
82
|
+
if (!(projectWithBuild === null || projectWithBuild === void 0 ? void 0 : projectWithBuild.target) || !(projectWithBuild === null || projectWithBuild === void 0 ? void 0 : projectWithBuild.config)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, projectName);
|
|
86
|
+
// if using a custom config and the devServerTarget default args
|
|
87
|
+
// has a different target, then add it to the custom target config
|
|
88
|
+
// otherwise add it to the default options
|
|
89
|
+
if (configName &&
|
|
90
|
+
projectWithBuild.target !==
|
|
91
|
+
((_b = (_a = projectConfig.targets[targetName]) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.devServerTarget)) {
|
|
92
|
+
projectConfig.targets[targetName].configurations[configName] = Object.assign(Object.assign({}, projectConfig.targets[targetName].configurations[configName]), { devServerTarget: projectWithBuild.target, skipServe: true });
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
projectConfig.targets[targetName].options = Object.assign(Object.assign({}, projectConfig.targets[targetName].options), { devServerTarget: projectWithBuild.target, skipServe: true });
|
|
96
|
+
}
|
|
97
|
+
(0, devkit_1.updateProjectConfiguration)(tree, projectName, projectConfig);
|
|
98
|
+
return true;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function cacheComponentTestTarget(tree) {
|
|
102
|
+
(0, devkit_1.updateJson)(tree, 'nx.json', (json) => {
|
|
103
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
104
|
+
return (Object.assign(Object.assign({}, json), { tasksRunnerOptions: Object.assign(Object.assign({}, json.tasksRunnerOptions), { default: Object.assign(Object.assign({}, (_a = json.tasksRunnerOptions) === null || _a === void 0 ? void 0 : _a.default), { options: Object.assign(Object.assign({}, (_c = (_b = json.tasksRunnerOptions) === null || _b === void 0 ? void 0 : _b.default) === null || _c === void 0 ? void 0 : _c.options), { cacheableOperations: Array.from(new Set([
|
|
105
|
+
...((_g = (_f = (_e = (_d = json.tasksRunnerOptions) === null || _d === void 0 ? void 0 : _d.default) === null || _e === void 0 ? void 0 : _e.options) === null || _f === void 0 ? void 0 : _f.cacheableOperations) !== null && _g !== void 0 ? _g : []),
|
|
106
|
+
'component-test',
|
|
107
|
+
])) }) }) }) }));
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
exports.default = updateCypressConfigsPresets;
|
|
111
|
+
//# sourceMappingURL=update-cypress-configs-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cypress-configs-presets.js","sourceRoot":"","sources":["../../../../../../packages/cypress/src/migrations/update-14-6-1/update-cypress-configs-presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateCypressVersionIf10 = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
// don't import from root level to prevent issue where angular isn't installed.
|
|
6
|
+
const semver_1 = require("@nx/devkit/src/utils/semver");
|
|
7
|
+
const semver_2 = require("semver");
|
|
8
|
+
function updateCypressVersionIf10(tree) {
|
|
9
|
+
var _a;
|
|
10
|
+
const installedVersion = (_a = (0, devkit_1.readJson)(tree, 'package.json').devDependencies) === null || _a === void 0 ? void 0 : _a['cypress'];
|
|
11
|
+
if (!installedVersion) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const normalizedInstalledCypressVersion = (0, semver_1.checkAndCleanWithSemver)('cypress', installedVersion);
|
|
15
|
+
// not using v10
|
|
16
|
+
if ((0, semver_2.lt)(normalizedInstalledCypressVersion, '10.0.0') ||
|
|
17
|
+
(0, semver_2.gte)(normalizedInstalledCypressVersion, '11.0.0')) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const ngComponentTestingVersion = '10.7.0';
|
|
21
|
+
if ((0, semver_2.lt)(normalizedInstalledCypressVersion, ngComponentTestingVersion)) {
|
|
22
|
+
(0, devkit_1.updateJson)(tree, 'package.json', (json) => {
|
|
23
|
+
json.devDependencies['cypress'] = `^${ngComponentTestingVersion}`;
|
|
24
|
+
return json;
|
|
25
|
+
});
|
|
26
|
+
return () => {
|
|
27
|
+
(0, devkit_1.installPackagesTask)(tree);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.updateCypressVersionIf10 = updateCypressVersionIf10;
|
|
32
|
+
exports.default = updateCypressVersionIf10;
|
|
33
|
+
//# sourceMappingURL=update-cypress-version-if-10.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cypress-version-if-10.js","sourceRoot":"","sources":["../../../../../../packages/cypress/src/migrations/update-14-7-0/update-cypress-version-if-10.ts"],"names":[],"mappings":";;;AAAA,uCAMoB;AACpB,+EAA+E;AAC/E,wDAAsE;AACtE,mCAAiC;AAEjC,SAAgB,wBAAwB,CAAC,IAAU;;IACjD,MAAM,gBAAgB,GAAG,MAAA,IAAA,iBAAQ,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC,eAAe,0CACrE,SAAS,CACV,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO;KACR;IACD,MAAM,iCAAiC,GAAG,IAAA,gCAAuB,EAC/D,SAAS,EACT,gBAAgB,CACjB,CAAC;IAEF,gBAAgB;IAChB,IACE,IAAA,WAAE,EAAC,iCAAiC,EAAE,QAAQ,CAAC;QAC/C,IAAA,YAAG,EAAC,iCAAiC,EAAE,QAAQ,CAAC,EAChD;QACA,OAAO;KACR;IAED,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAE3C,IAAI,IAAA,WAAE,EAAC,iCAAiC,EAAE,yBAAyB,CAAC,EAAE;QACpE,IAAA,mBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;YACxC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,yBAAyB,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;KACH;AACH,CAAC;AAhCD,4DAgCC;AAED,kBAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 { cypressTargets, hasComponentTesting } = getCypressTargetNames(tree);
|
|
12
|
+
const hasProductionFileset = !!((_a = nxJson.namedInputs) === null || _a === void 0 ? void 0 : _a.production);
|
|
13
|
+
if (hasComponentTesting && hasProductionFileset && cypressTargets.size > 0) {
|
|
14
|
+
const productionFileset = new Set(nxJson.namedInputs.production);
|
|
15
|
+
for (const exclusion of [
|
|
16
|
+
'!{projectRoot}/cypress/**/*',
|
|
17
|
+
'!{projectRoot}/**/*.cy.[jt]s?(x)',
|
|
18
|
+
'!{projectRoot}/cypress.config.[jt]s',
|
|
19
|
+
]) {
|
|
20
|
+
productionFileset.add(exclusion);
|
|
21
|
+
}
|
|
22
|
+
nxJson.namedInputs.production = Array.from(productionFileset);
|
|
23
|
+
}
|
|
24
|
+
for (const targetName of cypressTargets) {
|
|
25
|
+
(_b = nxJson.targetDefaults) !== null && _b !== void 0 ? _b : (nxJson.targetDefaults = {});
|
|
26
|
+
const cypressTargetDefaults = ((_c = (_e = nxJson.targetDefaults)[targetName]) !== null && _c !== void 0 ? _c : (_e[targetName] = {}));
|
|
27
|
+
(_d = cypressTargetDefaults.inputs) !== null && _d !== void 0 ? _d : (cypressTargetDefaults.inputs = [
|
|
28
|
+
'default',
|
|
29
|
+
hasProductionFileset ? '^production' : '^default',
|
|
30
|
+
]);
|
|
31
|
+
}
|
|
32
|
+
(0, devkit_1.updateNxJson)(tree, nxJson);
|
|
33
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.default = default_1;
|
|
37
|
+
function getCypressTargetNames(tree) {
|
|
38
|
+
const cypressTargets = new Set();
|
|
39
|
+
let hasComponentTesting = false;
|
|
40
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/cypress:cypress', (options, __, target) => {
|
|
41
|
+
cypressTargets.add(target);
|
|
42
|
+
if (options.testingType === 'component') {
|
|
43
|
+
hasComponentTesting = true;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return { cypressTargets, hasComponentTesting };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=add-cypress-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-cypress-inputs.js","sourceRoot":"","sources":["../../../../../../packages/cypress/src/migrations/update-15-0-0/add-cypress-inputs.ts"],"names":[],"mappings":";;;AAAA,uCAAyE;AACzE,6FAA0F;AAG1F,mBAA+B,IAAU;;;;QACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,WAAW,0CAAE,UAAU,CAAA,CAAC;QAE9D,IAAI,mBAAmB,IAAI,oBAAoB,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;YAC1E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACjE,KAAK,MAAM,SAAS,IAAI;gBACtB,6BAA6B;gBAC7B,kCAAkC;gBAClC,qCAAqC;aACtC,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,cAAc,EAAE;YACvC,MAAA,MAAM,CAAC,cAAc,oCAArB,MAAM,CAAC,cAAc,GAAK,EAAE,EAAC;YAC7B,MAAM,qBAAqB,GAAG,aAAC,MAAM,CAAC,cAAc,EAAC,UAAU,wCAAV,UAAU,IAAM,EAAE,EAAC,CAAC;YAEzE,MAAA,qBAAqB,CAAC,MAAM,oCAA5B,qBAAqB,CAAC,MAAM,GAAK;gBAC/B,SAAS;gBACT,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;aAClD,EAAC;SACH;QAED,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;;CACzB;AA/BD,4BA+BC;AAED,SAAS,qBAAqB,CAAC,IAAU;IACvC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAA,+CAAsB,EACpB,IAAI,EACJ,uBAAuB,EACvB,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;QACtB,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE;YACvC,mBAAmB,GAAG,IAAI,CAAC;SAC5B;IACH,CAAC,CACF,CAAC;IACF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tree } from '@nx/devkit';
|
|
2
|
+
export declare function updateCyMountUsage(tree: Tree): Promise<void>;
|
|
3
|
+
export declare function addMountCommand(tree: Tree, projectRoot: string, framework: string): void;
|
|
4
|
+
export declare function updateCyFile(tree: Tree, filePath: string, framework: 'angular' | 'react' | 'react18'): void;
|
|
5
|
+
export default updateCyMountUsage;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateCyFile = exports.addMountCommand = exports.updateCyMountUsage = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ct_helpers_1 = require("../../utils/ct-helpers");
|
|
6
|
+
const cypress_version_1 = require("../../utils/cypress-version");
|
|
7
|
+
const devkit_1 = require("@nx/devkit");
|
|
8
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
9
|
+
const semver_1 = require("@nx/devkit/src/utils/semver");
|
|
10
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
11
|
+
const semver_2 = require("semver");
|
|
12
|
+
function updateCyMountUsage(tree) {
|
|
13
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
if ((0, cypress_version_1.installedCypressVersion)() < 10) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const projects = (0, devkit_1.getProjects)(tree);
|
|
18
|
+
const graph = yield (0, devkit_1.createProjectGraphAsync)();
|
|
19
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/cypress:cypress', (options, projectName) => {
|
|
20
|
+
if (options.testingType !== 'component' || !options.devServerTarget) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const parsed = (0, devkit_1.parseTargetString)(options.devServerTarget, graph);
|
|
24
|
+
if (!(parsed === null || parsed === void 0 ? void 0 : parsed.project) || !(parsed === null || parsed === void 0 ? void 0 : parsed.target)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const buildProjectConfig = projects.get(parsed.project);
|
|
28
|
+
const framework = getFramework(tree, parsed.configuration
|
|
29
|
+
? buildProjectConfig.targets[parsed.target].configurations[parsed.configuration]
|
|
30
|
+
: buildProjectConfig.targets[parsed.target]);
|
|
31
|
+
const ctProjectConfig = projects.get(projectName);
|
|
32
|
+
addMountCommand(tree, ctProjectConfig.root, framework);
|
|
33
|
+
(0, devkit_1.visitNotIgnoredFiles)(tree, ctProjectConfig.sourceRoot, (filePath) => {
|
|
34
|
+
if (ct_helpers_1.CY_FILE_MATCHER.test(filePath)) {
|
|
35
|
+
updateCyFile(tree, filePath, framework);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
exports.updateCyMountUsage = updateCyMountUsage;
|
|
43
|
+
function addMountCommand(tree, projectRoot, framework) {
|
|
44
|
+
const commandFilePath = (0, devkit_1.joinPathFragments)(projectRoot, 'cypress', 'support', 'commands.ts');
|
|
45
|
+
if (!tree.exists(commandFilePath)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const commandFile = tree.read(commandFilePath, 'utf-8');
|
|
49
|
+
const mountCommand = tsquery_1.tsquery.query(commandFile, 'CallExpression:has(StringLiteral[value="mount"]) PropertyAccessExpression:has(Identifier[name="add"])');
|
|
50
|
+
if ((mountCommand === null || mountCommand === void 0 ? void 0 : mountCommand.length) > 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const existingCommands = tsquery_1.tsquery.query(commandFile, 'InterfaceDeclaration:has(Identifier[name="Chainable"]) > MethodSignature, InterfaceDeclaration:has(Identifier[name="Chainable"]) > PropertySignature');
|
|
54
|
+
const isGlobalDeclaration = tsquery_1.tsquery.query(commandFile, 'ModuleDeclaration > Identifier[name="global"]');
|
|
55
|
+
const updatedInterface = tsquery_1.tsquery.replace(commandFile, 'ModuleDeclaration:has(Identifier[name="Cypress"])', (node) => {
|
|
56
|
+
const newModuleDelcaration = `declare global {
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
58
|
+
namespace Cypress {
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
60
|
+
interface Chainable<Subject> {
|
|
61
|
+
${existingCommands.map((c) => c.getText()).join('\n')}
|
|
62
|
+
mount: typeof mount;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}`;
|
|
66
|
+
/*
|
|
67
|
+
* this is to prevent the change being applied twice since
|
|
68
|
+
* declare global { 1
|
|
69
|
+
* interface Cypress { 2
|
|
70
|
+
* }
|
|
71
|
+
* }
|
|
72
|
+
* matches twice.
|
|
73
|
+
* i.e. if there is no global declaration, then add it
|
|
74
|
+
* or if the node is the global declaration, then add it,
|
|
75
|
+
* but not to the cypress module declaration inside the global declaration
|
|
76
|
+
*/
|
|
77
|
+
if ((isGlobalDeclaration === null || isGlobalDeclaration === void 0 ? void 0 : isGlobalDeclaration.length) === 0 ||
|
|
78
|
+
node.name.getText() === 'global') {
|
|
79
|
+
return newModuleDelcaration;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const updatedCommandFile = `import { mount } from 'cypress/${framework}'\n${updatedInterface}\nCypress.Commands.add('mount', mount);`;
|
|
83
|
+
tree.write(commandFilePath, updatedCommandFile);
|
|
84
|
+
}
|
|
85
|
+
exports.addMountCommand = addMountCommand;
|
|
86
|
+
function getFramework(tree, target) {
|
|
87
|
+
var _a;
|
|
88
|
+
if (target.executor === '@nrwl/angular:webpack-browser' ||
|
|
89
|
+
target.executor === '@angular-devkit/build-angular:browser') {
|
|
90
|
+
return 'angular';
|
|
91
|
+
}
|
|
92
|
+
const pkgJson = (0, devkit_1.readJson)(tree, 'package.json');
|
|
93
|
+
const reactDomVersion = (_a = pkgJson === null || pkgJson === void 0 ? void 0 : pkgJson.dependencies) === null || _a === void 0 ? void 0 : _a['react-dom'];
|
|
94
|
+
const hasReact18 = reactDomVersion &&
|
|
95
|
+
(0, semver_2.gte)((0, semver_1.checkAndCleanWithSemver)('react-dom', reactDomVersion), '18.0.0');
|
|
96
|
+
if (hasReact18) {
|
|
97
|
+
return 'react18';
|
|
98
|
+
}
|
|
99
|
+
return 'react';
|
|
100
|
+
}
|
|
101
|
+
function updateCyFile(tree, filePath, framework) {
|
|
102
|
+
if (!tree.exists(filePath)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const contents = tree.read(filePath, 'utf-8');
|
|
106
|
+
const withCyMount = tsquery_1.tsquery.replace(contents, ':matches(CallExpression>Identifier[name="mount"])', (node) => {
|
|
107
|
+
return `cy.mount`;
|
|
108
|
+
});
|
|
109
|
+
const withUpdatedImports = tsquery_1.tsquery.replace(withCyMount, ':matches(ImportDeclaration, VariableStatement):has(Identifier[name="mount"]):has(StringLiteral[value="cypress/react"], StringLiteral[value="cypress/angular"], StringLiteral[value="cypress/react18"])', (node) => {
|
|
110
|
+
switch (framework) {
|
|
111
|
+
case 'angular':
|
|
112
|
+
return `import { MountConfig } from 'cypress/angular';`;
|
|
113
|
+
case 'react18':
|
|
114
|
+
case 'react':
|
|
115
|
+
return ' '; // have to return non falsy string to remove the node
|
|
116
|
+
default:
|
|
117
|
+
return node.getText().replace('mount', '');
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
tree.write(filePath, withUpdatedImports);
|
|
121
|
+
}
|
|
122
|
+
exports.updateCyFile = updateCyFile;
|
|
123
|
+
exports.default = updateCyMountUsage;
|
|
124
|
+
//# sourceMappingURL=update-cy-mount-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cy-mount-usage.js","sourceRoot":"","sources":["../../../../../../packages/cypress/src/migrations/update-15-0-0/update-cy-mount-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Tree } from '@nx/devkit';
|
|
2
|
+
export declare function updateToCypress11(tree: Tree): Promise<() => void>;
|
|
3
|
+
export declare function updateMountHookUsage(tree: Tree, filePath: string): void;
|
|
4
|
+
export declare function updateUnmountUsage(tree: Tree, filePath: string): void;
|
|
5
|
+
export declare function updateProviderUsage(tree: Tree, filePath: string): void;
|
|
6
|
+
export default updateToCypress11;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateProviderUsage = exports.updateUnmountUsage = exports.updateMountHookUsage = exports.updateToCypress11 = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ct_helpers_1 = require("../../utils/ct-helpers");
|
|
6
|
+
const devkit_1 = require("@nx/devkit");
|
|
7
|
+
const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
|
|
8
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const ts = require("typescript");
|
|
11
|
+
const cypress_version_1 = require("../../utils/cypress-version");
|
|
12
|
+
const versions_1 = require("../../utils/versions");
|
|
13
|
+
function updateToCypress11(tree) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
const installedVersion = (0, cypress_version_1.installedCypressVersion)();
|
|
16
|
+
if (installedVersion < 10) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const projects = (0, devkit_1.getProjects)(tree);
|
|
20
|
+
(0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/cypress:cypress', (options, projectName, targetName, configurationName) => {
|
|
21
|
+
if (options.testingType !== 'component' ||
|
|
22
|
+
!(options.cypressConfig && tree.exists(options.cypressConfig))) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const projectConfig = projects.get(projectName);
|
|
26
|
+
const commandsFile = (0, devkit_1.joinPathFragments)(projectConfig.root, 'cypress', 'support', 'commands.ts');
|
|
27
|
+
const framework = getFramework(tree.exists(commandsFile)
|
|
28
|
+
? tree.read(commandsFile, 'utf-8')
|
|
29
|
+
: tree.read(options.cypressConfig, 'utf-8'));
|
|
30
|
+
(0, devkit_1.visitNotIgnoredFiles)(tree, projectConfig.sourceRoot, (filePath) => {
|
|
31
|
+
if (!ct_helpers_1.CY_FILE_MATCHER.test(filePath)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const frameworkFromFile = getFramework(tree.read(filePath, 'utf-8'));
|
|
35
|
+
if (framework === 'react' || frameworkFromFile === 'react') {
|
|
36
|
+
updateUnmountUsage(tree, filePath);
|
|
37
|
+
updateMountHookUsage(tree, filePath);
|
|
38
|
+
}
|
|
39
|
+
if (framework === 'angular' || frameworkFromFile === 'angular') {
|
|
40
|
+
updateProviderUsage(tree, filePath);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
const installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { cypress: versions_1.cypressVersion });
|
|
45
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
46
|
+
return () => {
|
|
47
|
+
installTask();
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.updateToCypress11 = updateToCypress11;
|
|
52
|
+
function updateMountHookUsage(tree, filePath) {
|
|
53
|
+
const originalContents = tree.read(filePath, 'utf-8');
|
|
54
|
+
const commentedMountHook = tsquery_1.tsquery.replace(originalContents, ':matches(ImportDeclaration, VariableStatement):has(Identifier[name="mountHook"]):has(StringLiteral[value="cypress/react"], StringLiteral[value="cypress/react18"])', (node) => {
|
|
55
|
+
return `/** TODO: mountHook is deprecate.
|
|
56
|
+
* Use a wrapper component instead.
|
|
57
|
+
* See post for details: https://www.cypress.io/blog/2022/11/04/upcoming-changes-to-component-testing/#reactmounthook-removed
|
|
58
|
+
* */\n${node.getText()}`;
|
|
59
|
+
});
|
|
60
|
+
tree.write(filePath, commentedMountHook);
|
|
61
|
+
}
|
|
62
|
+
exports.updateMountHookUsage = updateMountHookUsage;
|
|
63
|
+
function updateUnmountUsage(tree, filePath) {
|
|
64
|
+
const reactDomImport = (0, path_1.extname)(filePath).includes('ts')
|
|
65
|
+
? `import ReactDom from 'react-dom'`
|
|
66
|
+
: `const ReactDom = require('react-dom')`;
|
|
67
|
+
const originalContents = tree.read(filePath, 'utf-8');
|
|
68
|
+
const updatedImports = tsquery_1.tsquery.replace(originalContents, ':matches(ImportDeclaration, VariableStatement):has(Identifier[name="unmount"]):has(StringLiteral[value="cypress/react"], StringLiteral[value="cypress/react18"])', (node) => {
|
|
69
|
+
return `${node.getText().replace('unmount', 'getContainerEl')}
|
|
70
|
+
${reactDomImport}`;
|
|
71
|
+
});
|
|
72
|
+
const updatedUnmountApi = tsquery_1.tsquery.replace(updatedImports, 'ExpressionStatement > CallExpression:has(Identifier[name="unmount"])', (node) => {
|
|
73
|
+
if (node.expression.getText() === 'unmount') {
|
|
74
|
+
return `cy.then(() => ReactDom.unmountComponentAtNode(getContainerEl()))`;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
tree.write(filePath, updatedUnmountApi);
|
|
78
|
+
}
|
|
79
|
+
exports.updateUnmountUsage = updateUnmountUsage;
|
|
80
|
+
function updateProviderUsage(tree, filePath) {
|
|
81
|
+
var _a;
|
|
82
|
+
const originalContents = tree.read(filePath, 'utf-8');
|
|
83
|
+
const isTestBedImported = ((_a = tsquery_1.tsquery.query(originalContents, ':matches(ImportDeclaration, VariableStatement):has(Identifier[name="TestBed"]):has(StringLiteral[value="@angular/core/testing"])')) === null || _a === void 0 ? void 0 : _a.length) > 0;
|
|
84
|
+
let updatedProviders = tsquery_1.tsquery.replace(originalContents, 'CallExpression:has(PropertyAccessExpression:has(Identifier[name="mount"]))', (node) => {
|
|
85
|
+
var _a, _b, _c, _d;
|
|
86
|
+
const expressionName = node.expression.getText();
|
|
87
|
+
if (expressionName === 'cy.mount' && ((_a = node === null || node === void 0 ? void 0 : node.arguments) === null || _a === void 0 ? void 0 : _a.length) > 1) {
|
|
88
|
+
const component = node.arguments[0].getText();
|
|
89
|
+
if (ts.isObjectLiteralExpression(node.arguments[1])) {
|
|
90
|
+
const providers = (_d = (_c = (_b = node.arguments[1]) === null || _b === void 0 ? void 0 : _b.properties) === null || _c === void 0 ? void 0 : _c.find((p) => { var _a; return ((_a = p.name) === null || _a === void 0 ? void 0 : _a.getText()) === 'providers'; })) === null || _d === void 0 ? void 0 : _d.getText();
|
|
91
|
+
const noProviders = tsquery_1.tsquery.replace(node.getText(), 'PropertyAssignment:has(Identifier[name="providers"])', (n) => {
|
|
92
|
+
// set it to undefined so we don't run into a hanging comma causing invalid syntax
|
|
93
|
+
return 'providers: undefined';
|
|
94
|
+
});
|
|
95
|
+
return `TestBed.overrideComponent(${component}, { add: { ${providers} }});\n${noProviders}`;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return `TestBed.overrideComponent(${component}, {add: { providers: ${node.arguments[1].getText()}.providers}});\n${node.getText()}`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
tree.write(filePath, `${isTestBedImported
|
|
103
|
+
? ''
|
|
104
|
+
: "import {TestBed} from '@angular/core/testing';\n"}${updatedProviders}`);
|
|
105
|
+
}
|
|
106
|
+
exports.updateProviderUsage = updateProviderUsage;
|
|
107
|
+
function getFramework(contents) {
|
|
108
|
+
if (contents.includes('cypress/react') || contents.includes('@nrwl/react')) {
|
|
109
|
+
return 'react';
|
|
110
|
+
}
|
|
111
|
+
if (contents.includes('cypress/angular') ||
|
|
112
|
+
contents.includes('@nrwl/angular')) {
|
|
113
|
+
return 'angular';
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
exports.default = updateToCypress11;
|
|
118
|
+
//# sourceMappingURL=cypress-11.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cypress-11.js","sourceRoot":"","sources":["../../../../../../packages/cypress/src/migrations/update-15-1-0/cypress-11.ts"],"names":[],"mappings":"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"}
|