@schematics/angular 21.0.0-next.7 → 21.0.0-next.9
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/ai-config/index.js +1 -0
- package/ai-config/index.js.map +1 -0
- package/ai-config/schema.js +1 -0
- package/ai-config/schema.js.map +1 -0
- package/app-shell/index.js +1 -0
- package/app-shell/index.js.map +1 -0
- package/app-shell/schema.js +1 -0
- package/app-shell/schema.js.map +1 -0
- package/application/files/common-files/tsconfig.spec.json.template +3 -4
- package/application/index.js +61 -13
- package/application/index.js.map +1 -0
- package/application/schema.d.ts +11 -0
- package/application/schema.js +10 -1
- package/application/schema.js.map +1 -0
- package/application/schema.json +6 -1
- package/class/index.js +1 -0
- package/class/index.js.map +1 -0
- package/class/schema.js +1 -0
- package/class/schema.js.map +1 -0
- package/collection.json +6 -0
- package/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template +6 -6
- package/component/index.js +1 -0
- package/component/index.js.map +1 -0
- package/component/schema.js +1 -0
- package/component/schema.js.map +1 -0
- package/config/index.js +2 -1
- package/config/index.js.map +1 -0
- package/config/schema.js +1 -0
- package/config/schema.js.map +1 -0
- package/directive/index.js +1 -0
- package/directive/index.js.map +1 -0
- package/directive/schema.js +1 -0
- package/directive/schema.js.map +1 -0
- package/e2e/index.js +1 -0
- package/e2e/index.js.map +1 -0
- package/e2e/schema.js +1 -0
- package/e2e/schema.js.map +1 -0
- package/enum/index.js +1 -0
- package/enum/index.js.map +1 -0
- package/enum/schema.js +1 -0
- package/enum/schema.js.map +1 -0
- package/environments/index.js +1 -0
- package/environments/index.js.map +1 -0
- package/environments/schema.js +1 -0
- package/environments/schema.js.map +1 -0
- package/guard/index.js +1 -0
- package/guard/index.js.map +1 -0
- package/guard/schema.js +1 -0
- package/guard/schema.js.map +1 -0
- package/interceptor/index.js +1 -0
- package/interceptor/index.js.map +1 -0
- package/interceptor/schema.js +1 -0
- package/interceptor/schema.js.map +1 -0
- package/interface/index.js +1 -0
- package/interface/index.js.map +1 -0
- package/interface/schema.js +1 -0
- package/interface/schema.js.map +1 -0
- package/library/files/tsconfig.spec.json.template +1 -1
- package/library/index.js +18 -8
- package/library/index.js.map +1 -0
- package/library/schema.js +1 -0
- package/library/schema.js.map +1 -0
- package/migrations/karma/karma-config-analyzer.js +1 -0
- package/migrations/karma/karma-config-analyzer.js.map +1 -0
- package/migrations/karma/karma-config-comparer.js +1 -0
- package/migrations/karma/karma-config-comparer.js.map +1 -0
- package/migrations/karma/migration.js +1 -0
- package/migrations/karma/migration.js.map +1 -0
- package/migrations/migration-collection.json +5 -0
- package/migrations/update-module-resolution/migration.d.ts +9 -0
- package/migrations/update-module-resolution/migration.js +53 -0
- package/migrations/update-module-resolution/migration.js.map +1 -0
- package/migrations/update-typescript-lib/migration.js +1 -0
- package/migrations/update-typescript-lib/migration.js.map +1 -0
- package/migrations/use-application-builder/css-import-lexer.js +1 -0
- package/migrations/use-application-builder/css-import-lexer.js.map +1 -0
- package/migrations/use-application-builder/migration.js +1 -0
- package/migrations/use-application-builder/migration.js.map +1 -0
- package/migrations/use-application-builder/stylesheet-updates.js +1 -0
- package/migrations/use-application-builder/stylesheet-updates.js.map +1 -0
- package/module/index.js +1 -0
- package/module/index.js.map +1 -0
- package/module/schema.js +1 -0
- package/module/schema.js.map +1 -0
- package/ng-new/index.js +9 -0
- package/ng-new/index.js.map +1 -0
- package/ng-new/schema.d.ts +11 -0
- package/ng-new/schema.js +10 -1
- package/ng-new/schema.js.map +1 -0
- package/ng-new/schema.json +6 -0
- package/package.json +4 -4
- package/pipe/index.js +1 -0
- package/pipe/index.js.map +1 -0
- package/pipe/schema.js +1 -0
- package/pipe/schema.js.map +1 -0
- package/refactor/jasmine-vitest/index.d.ts +10 -0
- package/refactor/jasmine-vitest/index.js +103 -0
- package/refactor/jasmine-vitest/index.js.map +1 -0
- package/refactor/jasmine-vitest/schema.d.ts +25 -0
- package/refactor/jasmine-vitest/schema.js +5 -0
- package/refactor/jasmine-vitest/schema.js.map +1 -0
- package/refactor/jasmine-vitest/schema.json +30 -0
- package/refactor/jasmine-vitest/test-file-transformer.d.ts +16 -0
- package/refactor/jasmine-vitest/test-file-transformer.js +141 -0
- package/refactor/jasmine-vitest/test-file-transformer.js.map +1 -0
- package/refactor/jasmine-vitest/transformers/jasmine-lifecycle.d.ts +18 -0
- package/refactor/jasmine-vitest/transformers/jasmine-lifecycle.js +250 -0
- package/refactor/jasmine-vitest/transformers/jasmine-lifecycle.js.map +1 -0
- package/refactor/jasmine-vitest/transformers/jasmine-matcher.d.ts +26 -0
- package/refactor/jasmine-vitest/transformers/jasmine-matcher.js +398 -0
- package/refactor/jasmine-vitest/transformers/jasmine-matcher.js.map +1 -0
- package/refactor/jasmine-vitest/transformers/jasmine-misc.d.ts +21 -0
- package/refactor/jasmine-vitest/transformers/jasmine-misc.js +164 -0
- package/refactor/jasmine-vitest/transformers/jasmine-misc.js.map +1 -0
- package/refactor/jasmine-vitest/transformers/jasmine-spy.d.ts +19 -0
- package/refactor/jasmine-vitest/transformers/jasmine-spy.js +284 -0
- package/refactor/jasmine-vitest/transformers/jasmine-spy.js.map +1 -0
- package/refactor/jasmine-vitest/transformers/jasmine-type.d.ts +16 -0
- package/refactor/jasmine-vitest/transformers/jasmine-type.js +64 -0
- package/refactor/jasmine-vitest/transformers/jasmine-type.js.map +1 -0
- package/refactor/jasmine-vitest/utils/ast-helpers.d.ts +13 -0
- package/refactor/jasmine-vitest/utils/ast-helpers.js +43 -0
- package/refactor/jasmine-vitest/utils/ast-helpers.js.map +1 -0
- package/refactor/jasmine-vitest/utils/ast-validation.d.ts +25 -0
- package/refactor/jasmine-vitest/utils/ast-validation.js +44 -0
- package/refactor/jasmine-vitest/utils/ast-validation.js.map +1 -0
- package/refactor/jasmine-vitest/utils/comment-helpers.d.ts +29 -0
- package/refactor/jasmine-vitest/utils/comment-helpers.js +37 -0
- package/refactor/jasmine-vitest/utils/comment-helpers.js.map +1 -0
- package/refactor/jasmine-vitest/utils/refactor-context.d.ts +28 -0
- package/refactor/jasmine-vitest/utils/refactor-context.js +10 -0
- package/refactor/jasmine-vitest/utils/refactor-context.js.map +1 -0
- package/refactor/jasmine-vitest/utils/refactor-reporter.d.ts +24 -0
- package/refactor/jasmine-vitest/utils/refactor-reporter.js +72 -0
- package/refactor/jasmine-vitest/utils/refactor-reporter.js.map +1 -0
- package/refactor/jasmine-vitest/utils/todo-notes.d.ts +132 -0
- package/refactor/jasmine-vitest/utils/todo-notes.js +108 -0
- package/refactor/jasmine-vitest/utils/todo-notes.js.map +1 -0
- package/resolver/index.js +1 -0
- package/resolver/index.js.map +1 -0
- package/resolver/schema.js +1 -0
- package/resolver/schema.js.map +1 -0
- package/server/index.js +1 -0
- package/server/index.js.map +1 -0
- package/server/schema.js +1 -0
- package/server/schema.js.map +1 -0
- package/service/index.js +1 -0
- package/service/index.js.map +1 -0
- package/service/schema.js +1 -0
- package/service/schema.js.map +1 -0
- package/service-worker/index.js +1 -0
- package/service-worker/index.js.map +1 -0
- package/service-worker/schema.js +1 -0
- package/service-worker/schema.js.map +1 -0
- package/ssr/index.js +1 -0
- package/ssr/index.js.map +1 -0
- package/ssr/schema.js +1 -0
- package/ssr/schema.js.map +1 -0
- package/ssr/tty.js +1 -0
- package/ssr/tty.js.map +1 -0
- package/tailwind/index.js +1 -0
- package/tailwind/index.js.map +1 -0
- package/tailwind/schema.js +1 -0
- package/tailwind/schema.js.map +1 -0
- package/utility/add-declaration-to-ng-module.js +1 -0
- package/utility/add-declaration-to-ng-module.js.map +1 -0
- package/utility/ast-utils.js +1 -0
- package/utility/ast-utils.js.map +1 -0
- package/utility/change.js +1 -0
- package/utility/change.js.map +1 -0
- package/utility/dependencies.js +1 -0
- package/utility/dependencies.js.map +1 -0
- package/utility/dependency.js +1 -0
- package/utility/dependency.js.map +1 -0
- package/utility/eol.js +1 -0
- package/utility/eol.js.map +1 -0
- package/utility/find-module.js +1 -0
- package/utility/find-module.js.map +1 -0
- package/utility/generate-from-files.js +1 -0
- package/utility/generate-from-files.js.map +1 -0
- package/utility/index.js +1 -0
- package/utility/index.js.map +1 -0
- package/utility/json-file.js +1 -0
- package/utility/json-file.js.map +1 -0
- package/utility/latest-versions/package.json +2 -0
- package/utility/latest-versions.js +4 -3
- package/utility/latest-versions.js.map +1 -0
- package/utility/ng-ast-utils.js +1 -0
- package/utility/ng-ast-utils.js.map +1 -0
- package/utility/parse-name.js +1 -0
- package/utility/parse-name.js.map +1 -0
- package/utility/paths.js +1 -0
- package/utility/paths.js.map +1 -0
- package/utility/project-targets.js +1 -0
- package/utility/project-targets.js.map +1 -0
- package/utility/project.js +1 -0
- package/utility/project.js.map +1 -0
- package/utility/standalone/app_component.js +1 -0
- package/utility/standalone/app_component.js.map +1 -0
- package/utility/standalone/app_config.js +1 -0
- package/utility/standalone/app_config.js.map +1 -0
- package/utility/standalone/code_block.js +1 -0
- package/utility/standalone/code_block.js.map +1 -0
- package/utility/standalone/index.js +1 -0
- package/utility/standalone/index.js.map +1 -0
- package/utility/standalone/rules.js +1 -0
- package/utility/standalone/rules.js.map +1 -0
- package/utility/standalone/util.js +1 -0
- package/utility/standalone/util.js.map +1 -0
- package/utility/validation.js +1 -0
- package/utility/validation.js.map +1 -0
- package/utility/workspace-models.d.ts +1 -0
- package/utility/workspace-models.js +2 -0
- package/utility/workspace-models.js.map +1 -0
- package/utility/workspace.js +1 -0
- package/utility/workspace.js.map +1 -0
- package/web-worker/index.js +1 -0
- package/web-worker/index.js.map +1 -0
- package/web-worker/schema.js +1 -0
- package/web-worker/schema.js.map +1 -0
- package/workspace/files/package.json.template +1 -8
- package/workspace/index.js +1 -0
- package/workspace/index.js.map +1 -0
- package/workspace/schema.js +1 -0
- package/workspace/schema.js.map +1 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refactors a Jasmine test file to use Vitest.
|
|
3
|
+
*/
|
|
4
|
+
export type Schema = {
|
|
5
|
+
/**
|
|
6
|
+
* The file suffix to identify test files (e.g., '.spec.ts', '.test.ts').
|
|
7
|
+
*/
|
|
8
|
+
fileSuffix?: string;
|
|
9
|
+
/**
|
|
10
|
+
* A path to a specific file or directory to refactor. If not provided, all test files in
|
|
11
|
+
* the project will be refactored.
|
|
12
|
+
*/
|
|
13
|
+
include?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The name of the project where the tests should be refactored. If not specified, the CLI
|
|
16
|
+
* will determine the project from the current directory.
|
|
17
|
+
*/
|
|
18
|
+
project?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Enable verbose logging to see detailed information about the transformations being
|
|
21
|
+
* applied.
|
|
22
|
+
*/
|
|
23
|
+
verbose?: boolean;
|
|
24
|
+
[property: string]: any;
|
|
25
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// THIS FILE IS AUTOMATICALLY GENERATED. TO UPDATE THIS FILE YOU NEED TO CHANGE THE
|
|
3
|
+
// CORRESPONDING JSON SCHEMA FILE, THEN RUN devkit-admin build (or bazel build ...).
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "SchematicsAngularJasmineToVitest",
|
|
4
|
+
"title": "Angular Jasmine to Vitest Schematic",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"description": "Refactors a Jasmine test file to use Vitest.",
|
|
7
|
+
"properties": {
|
|
8
|
+
"include": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "A path to a specific file or directory to refactor. If not provided, all test files in the project will be refactored."
|
|
11
|
+
},
|
|
12
|
+
"fileSuffix": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "The file suffix to identify test files (e.g., '.spec.ts', '.test.ts').",
|
|
15
|
+
"default": ".spec.ts"
|
|
16
|
+
},
|
|
17
|
+
"project": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "The name of the project where the tests should be refactored. If not specified, the CLI will determine the project from the current directory.",
|
|
20
|
+
"$default": {
|
|
21
|
+
"$source": "projectName"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"verbose": {
|
|
25
|
+
"type": "boolean",
|
|
26
|
+
"description": "Enable verbose logging to see detailed information about the transformations being applied.",
|
|
27
|
+
"default": false
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
import { RefactorReporter } from './utils/refactor-reporter';
|
|
9
|
+
/**
|
|
10
|
+
* Transforms a string of Jasmine test code to Vitest test code.
|
|
11
|
+
* This is the main entry point for the transformation.
|
|
12
|
+
* @param content The source code to transform.
|
|
13
|
+
* @param reporter The reporter to track TODOs.
|
|
14
|
+
* @returns The transformed code.
|
|
15
|
+
*/
|
|
16
|
+
export declare function transformJasmineToVitest(filePath: string, content: string, reporter: RefactorReporter): string;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.transformJasmineToVitest = transformJasmineToVitest;
|
|
14
|
+
const typescript_1 = __importDefault(require("../../third_party/github.com/Microsoft/TypeScript/lib/typescript"));
|
|
15
|
+
const jasmine_lifecycle_1 = require("./transformers/jasmine-lifecycle");
|
|
16
|
+
const jasmine_matcher_1 = require("./transformers/jasmine-matcher");
|
|
17
|
+
const jasmine_misc_1 = require("./transformers/jasmine-misc");
|
|
18
|
+
const jasmine_spy_1 = require("./transformers/jasmine-spy");
|
|
19
|
+
const jasmine_type_1 = require("./transformers/jasmine-type");
|
|
20
|
+
const ast_helpers_1 = require("./utils/ast-helpers");
|
|
21
|
+
const BLANK_LINE_PLACEHOLDER = '// __PRESERVE_BLANK_LINE__';
|
|
22
|
+
function preserveBlankLines(content) {
|
|
23
|
+
return content
|
|
24
|
+
.split('\n')
|
|
25
|
+
.map((line) => (line.trim() === '' ? BLANK_LINE_PLACEHOLDER : line))
|
|
26
|
+
.join('\n');
|
|
27
|
+
}
|
|
28
|
+
function restoreBlankLines(content) {
|
|
29
|
+
const regex = new RegExp(`^\\s*${BLANK_LINE_PLACEHOLDER.replace(/\//g, '\\/')}\\s*$`, 'gm');
|
|
30
|
+
return content.replace(regex, '');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Transforms a string of Jasmine test code to Vitest test code.
|
|
34
|
+
* This is the main entry point for the transformation.
|
|
35
|
+
* @param content The source code to transform.
|
|
36
|
+
* @param reporter The reporter to track TODOs.
|
|
37
|
+
* @returns The transformed code.
|
|
38
|
+
*/
|
|
39
|
+
function transformJasmineToVitest(filePath, content, reporter) {
|
|
40
|
+
const contentWithPlaceholders = preserveBlankLines(content);
|
|
41
|
+
const sourceFile = typescript_1.default.createSourceFile(filePath, contentWithPlaceholders, typescript_1.default.ScriptTarget.Latest, true, typescript_1.default.ScriptKind.TS);
|
|
42
|
+
const pendingVitestImports = new Set();
|
|
43
|
+
const transformer = (context) => {
|
|
44
|
+
const refactorCtx = {
|
|
45
|
+
sourceFile,
|
|
46
|
+
reporter,
|
|
47
|
+
tsContext: context,
|
|
48
|
+
pendingVitestImports,
|
|
49
|
+
};
|
|
50
|
+
const visitor = (node) => {
|
|
51
|
+
let transformedNode = node;
|
|
52
|
+
// Transform the node itself based on its type
|
|
53
|
+
if (typescript_1.default.isCallExpression(transformedNode)) {
|
|
54
|
+
const transformations = [
|
|
55
|
+
// **Stage 1: High-Level & Context-Sensitive Transformations**
|
|
56
|
+
// These transformers often wrap or fundamentally change the nature of the call,
|
|
57
|
+
// so they need to run before more specific matchers.
|
|
58
|
+
jasmine_matcher_1.transformWithContext,
|
|
59
|
+
jasmine_matcher_1.transformExpectAsync,
|
|
60
|
+
jasmine_lifecycle_1.transformFocusedAndSkippedTests,
|
|
61
|
+
jasmine_lifecycle_1.transformPending,
|
|
62
|
+
jasmine_lifecycle_1.transformDoneCallback,
|
|
63
|
+
// **Stage 2: Core Matcher & Spy Transformations**
|
|
64
|
+
// This is the bulk of the `expect(...)` and `spyOn(...)` conversions.
|
|
65
|
+
jasmine_matcher_1.transformSyntacticSugarMatchers,
|
|
66
|
+
jasmine_matcher_1.transformComplexMatchers,
|
|
67
|
+
jasmine_spy_1.transformSpies,
|
|
68
|
+
jasmine_spy_1.transformCreateSpyObj,
|
|
69
|
+
jasmine_spy_1.transformSpyReset,
|
|
70
|
+
jasmine_spy_1.transformSpyCallInspection,
|
|
71
|
+
jasmine_matcher_1.transformtoHaveBeenCalledBefore,
|
|
72
|
+
jasmine_matcher_1.transformToHaveClass,
|
|
73
|
+
// **Stage 3: Global Functions & Cleanup**
|
|
74
|
+
// These handle global Jasmine functions and catch-alls for unsupported APIs.
|
|
75
|
+
jasmine_misc_1.transformTimerMocks,
|
|
76
|
+
jasmine_misc_1.transformGlobalFunctions,
|
|
77
|
+
jasmine_misc_1.transformUnsupportedJasmineCalls,
|
|
78
|
+
];
|
|
79
|
+
for (const transformer of transformations) {
|
|
80
|
+
transformedNode = transformer(transformedNode, refactorCtx);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (typescript_1.default.isPropertyAccessExpression(transformedNode)) {
|
|
84
|
+
const transformations = [
|
|
85
|
+
// These transformers handle `jasmine.any()` and other `jasmine.*` properties.
|
|
86
|
+
jasmine_matcher_1.transformAsymmetricMatchers,
|
|
87
|
+
jasmine_spy_1.transformSpyCallInspection,
|
|
88
|
+
jasmine_misc_1.transformUnknownJasmineProperties,
|
|
89
|
+
];
|
|
90
|
+
for (const transformer of transformations) {
|
|
91
|
+
transformedNode = transformer(transformedNode, refactorCtx);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (typescript_1.default.isExpressionStatement(transformedNode)) {
|
|
95
|
+
// Statement-level transformers are mutually exclusive. The first one that
|
|
96
|
+
// matches will be applied, and then the visitor will stop for this node.
|
|
97
|
+
const statementTransformers = [
|
|
98
|
+
jasmine_matcher_1.transformCalledOnceWith,
|
|
99
|
+
jasmine_matcher_1.transformArrayWithExactContents,
|
|
100
|
+
jasmine_matcher_1.transformExpectNothing,
|
|
101
|
+
jasmine_misc_1.transformFail,
|
|
102
|
+
jasmine_misc_1.transformDefaultTimeoutInterval,
|
|
103
|
+
];
|
|
104
|
+
for (const transformer of statementTransformers) {
|
|
105
|
+
const result = transformer(transformedNode, refactorCtx);
|
|
106
|
+
if (result !== transformedNode) {
|
|
107
|
+
transformedNode = result;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (typescript_1.default.isQualifiedName(transformedNode) || typescript_1.default.isTypeReferenceNode(transformedNode)) {
|
|
113
|
+
transformedNode = (0, jasmine_type_1.transformJasmineTypes)(transformedNode, refactorCtx);
|
|
114
|
+
}
|
|
115
|
+
// Visit the children of the node to ensure they are transformed
|
|
116
|
+
if (Array.isArray(transformedNode)) {
|
|
117
|
+
return transformedNode.map((node) => typescript_1.default.visitEachChild(node, visitor, context));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return typescript_1.default.visitEachChild(transformedNode, visitor, context);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
return (node) => typescript_1.default.visitEachChild(node, visitor, context);
|
|
124
|
+
};
|
|
125
|
+
const result = typescript_1.default.transform(sourceFile, [transformer]);
|
|
126
|
+
let transformedSourceFile = result.transformed[0];
|
|
127
|
+
if (transformedSourceFile === sourceFile && !reporter.hasTodos && !pendingVitestImports.size) {
|
|
128
|
+
return content;
|
|
129
|
+
}
|
|
130
|
+
const vitestImport = (0, ast_helpers_1.getVitestAutoImports)(pendingVitestImports);
|
|
131
|
+
if (vitestImport) {
|
|
132
|
+
transformedSourceFile = typescript_1.default.factory.updateSourceFile(transformedSourceFile, [
|
|
133
|
+
vitestImport,
|
|
134
|
+
...transformedSourceFile.statements,
|
|
135
|
+
]);
|
|
136
|
+
}
|
|
137
|
+
const printer = typescript_1.default.createPrinter();
|
|
138
|
+
const transformedContentWithPlaceholders = printer.printFile(transformedSourceFile);
|
|
139
|
+
return restoreBlankLines(transformedContentWithPlaceholders);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=test-file-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-file-transformer.js","sourceRoot":"","sources":["test-file-transformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @fileoverview This file contains transformers that convert Jasmine lifecycle functions
|
|
10
|
+
* and test setup/teardown patterns to their Vitest equivalents. This includes handling
|
|
11
|
+
* focused/skipped tests (fdescribe, fit, xdescribe, xit), pending tests, and asynchronous
|
|
12
|
+
* operations that use the `done` callback.
|
|
13
|
+
*/
|
|
14
|
+
import ts from '../../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
|
|
15
|
+
import { RefactorContext } from '../utils/refactor-context';
|
|
16
|
+
export declare function transformFocusedAndSkippedTests(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
17
|
+
export declare function transformPending(node: ts.Node, { sourceFile, reporter, tsContext }: RefactorContext): ts.Node;
|
|
18
|
+
export declare function transformDoneCallback(node: ts.Node, refactorCtx: RefactorContext): ts.Node;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.transformFocusedAndSkippedTests = transformFocusedAndSkippedTests;
|
|
14
|
+
exports.transformPending = transformPending;
|
|
15
|
+
exports.transformDoneCallback = transformDoneCallback;
|
|
16
|
+
/**
|
|
17
|
+
* @fileoverview This file contains transformers that convert Jasmine lifecycle functions
|
|
18
|
+
* and test setup/teardown patterns to their Vitest equivalents. This includes handling
|
|
19
|
+
* focused/skipped tests (fdescribe, fit, xdescribe, xit), pending tests, and asynchronous
|
|
20
|
+
* operations that use the `done` callback.
|
|
21
|
+
*/
|
|
22
|
+
const typescript_1 = __importDefault(require("../../../third_party/github.com/Microsoft/TypeScript/lib/typescript"));
|
|
23
|
+
const ast_helpers_1 = require("../utils/ast-helpers");
|
|
24
|
+
const comment_helpers_1 = require("../utils/comment-helpers");
|
|
25
|
+
const FOCUSED_SKIPPED_RENAMES = new Map([
|
|
26
|
+
['fdescribe', { newBase: 'describe', newName: 'only' }],
|
|
27
|
+
['fit', { newBase: 'it', newName: 'only' }],
|
|
28
|
+
['xdescribe', { newBase: 'describe', newName: 'skip' }],
|
|
29
|
+
['xit', { newBase: 'it', newName: 'skip' }],
|
|
30
|
+
]);
|
|
31
|
+
function transformFocusedAndSkippedTests(node, { sourceFile, reporter }) {
|
|
32
|
+
if (!typescript_1.default.isCallExpression(node) || !typescript_1.default.isIdentifier(node.expression)) {
|
|
33
|
+
return node;
|
|
34
|
+
}
|
|
35
|
+
const oldName = node.expression.text;
|
|
36
|
+
const rename = FOCUSED_SKIPPED_RENAMES.get(oldName);
|
|
37
|
+
if (rename) {
|
|
38
|
+
reporter.reportTransformation(sourceFile, node, `Transformed \`${oldName}\` to \`${rename.newBase}.${rename.newName}\`.`);
|
|
39
|
+
const newPropAccess = (0, ast_helpers_1.createPropertyAccess)(rename.newBase, rename.newName);
|
|
40
|
+
return typescript_1.default.factory.updateCallExpression(node, newPropAccess, node.typeArguments, node.arguments);
|
|
41
|
+
}
|
|
42
|
+
return node;
|
|
43
|
+
}
|
|
44
|
+
function transformPending(node, { sourceFile, reporter, tsContext }) {
|
|
45
|
+
if (!typescript_1.default.isCallExpression(node) ||
|
|
46
|
+
!typescript_1.default.isIdentifier(node.expression) ||
|
|
47
|
+
node.expression.text !== 'it') {
|
|
48
|
+
return node;
|
|
49
|
+
}
|
|
50
|
+
const testFn = node.arguments[1];
|
|
51
|
+
if (!testFn || (!typescript_1.default.isArrowFunction(testFn) && !typescript_1.default.isFunctionExpression(testFn))) {
|
|
52
|
+
return node;
|
|
53
|
+
}
|
|
54
|
+
let hasPending = false;
|
|
55
|
+
const bodyTransformVisitor = (bodyNode) => {
|
|
56
|
+
if (typescript_1.default.isExpressionStatement(bodyNode) &&
|
|
57
|
+
typescript_1.default.isCallExpression(bodyNode.expression) &&
|
|
58
|
+
typescript_1.default.isIdentifier(bodyNode.expression.expression) &&
|
|
59
|
+
bodyNode.expression.expression.text === 'pending') {
|
|
60
|
+
hasPending = true;
|
|
61
|
+
const replacement = typescript_1.default.factory.createEmptyStatement();
|
|
62
|
+
const originalText = bodyNode.getFullText().trim();
|
|
63
|
+
reporter.reportTransformation(sourceFile, bodyNode, 'Converted `pending()` to a skipped test (`it.skip`).');
|
|
64
|
+
const category = 'pending';
|
|
65
|
+
reporter.recordTodo(category);
|
|
66
|
+
(0, comment_helpers_1.addTodoComment)(replacement, category);
|
|
67
|
+
typescript_1.default.addSyntheticLeadingComment(replacement, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, ` ${originalText}`, true);
|
|
68
|
+
return replacement;
|
|
69
|
+
}
|
|
70
|
+
return typescript_1.default.visitEachChild(bodyNode, bodyTransformVisitor, tsContext);
|
|
71
|
+
};
|
|
72
|
+
const newBody = typescript_1.default.visitNode(testFn.body, bodyTransformVisitor);
|
|
73
|
+
if (!hasPending) {
|
|
74
|
+
return node;
|
|
75
|
+
}
|
|
76
|
+
const newExpression = (0, ast_helpers_1.createPropertyAccess)(node.expression, 'skip');
|
|
77
|
+
const newTestFn = typescript_1.default.isArrowFunction(testFn)
|
|
78
|
+
? typescript_1.default.factory.updateArrowFunction(testFn, testFn.modifiers, testFn.typeParameters, testFn.parameters, testFn.type, testFn.equalsGreaterThanToken, newBody ?? typescript_1.default.factory.createBlock([]))
|
|
79
|
+
: typescript_1.default.factory.updateFunctionExpression(testFn, testFn.modifiers, testFn.asteriskToken, testFn.name, testFn.typeParameters, testFn.parameters, testFn.type, newBody ?? typescript_1.default.factory.createBlock([]));
|
|
80
|
+
const newArgs = [node.arguments[0], newTestFn, ...node.arguments.slice(2)];
|
|
81
|
+
return typescript_1.default.factory.updateCallExpression(node, newExpression, node.typeArguments, newArgs);
|
|
82
|
+
}
|
|
83
|
+
function transformComplexDoneCallback(node, doneIdentifier, refactorCtx) {
|
|
84
|
+
const { sourceFile, reporter } = refactorCtx;
|
|
85
|
+
if (!typescript_1.default.isExpressionStatement(node) ||
|
|
86
|
+
!typescript_1.default.isCallExpression(node.expression) ||
|
|
87
|
+
!typescript_1.default.isPropertyAccessExpression(node.expression.expression)) {
|
|
88
|
+
return node;
|
|
89
|
+
}
|
|
90
|
+
const call = node.expression;
|
|
91
|
+
const pae = call.expression;
|
|
92
|
+
if (!typescript_1.default.isPropertyAccessExpression(pae)) {
|
|
93
|
+
return node;
|
|
94
|
+
}
|
|
95
|
+
if (pae.name.text !== 'then' || call.arguments.length !== 1) {
|
|
96
|
+
return node;
|
|
97
|
+
}
|
|
98
|
+
const thenCallback = call.arguments[0];
|
|
99
|
+
if (!typescript_1.default.isArrowFunction(thenCallback) && !typescript_1.default.isFunctionExpression(thenCallback)) {
|
|
100
|
+
return node;
|
|
101
|
+
}
|
|
102
|
+
// Re-create the .then() call but with a modified callback that has `done()` removed.
|
|
103
|
+
const thenCallbackBody = typescript_1.default.isBlock(thenCallback.body)
|
|
104
|
+
? thenCallback.body
|
|
105
|
+
: typescript_1.default.factory.createBlock([typescript_1.default.factory.createExpressionStatement(thenCallback.body)]);
|
|
106
|
+
const newStatements = thenCallbackBody.statements.filter((stmt) => {
|
|
107
|
+
return (!typescript_1.default.isExpressionStatement(stmt) ||
|
|
108
|
+
!typescript_1.default.isCallExpression(stmt.expression) ||
|
|
109
|
+
!typescript_1.default.isIdentifier(stmt.expression.expression) ||
|
|
110
|
+
stmt.expression.expression.text !== doneIdentifier.text);
|
|
111
|
+
});
|
|
112
|
+
if (newStatements.length === thenCallbackBody.statements.length) {
|
|
113
|
+
// No "done()" call was removed, so don't transform.
|
|
114
|
+
return node;
|
|
115
|
+
}
|
|
116
|
+
reporter.reportTransformation(sourceFile, node, 'Transformed promise `.then()` with `done()` to `await`.');
|
|
117
|
+
const newThenCallback = typescript_1.default.isArrowFunction(thenCallback)
|
|
118
|
+
? typescript_1.default.factory.updateArrowFunction(thenCallback, thenCallback.modifiers, thenCallback.typeParameters, thenCallback.parameters, thenCallback.type, thenCallback.equalsGreaterThanToken, typescript_1.default.factory.updateBlock(thenCallbackBody, newStatements))
|
|
119
|
+
: typescript_1.default.factory.updateFunctionExpression(thenCallback, thenCallback.modifiers, thenCallback.asteriskToken, thenCallback.name, thenCallback.typeParameters, thenCallback.parameters, thenCallback.type, typescript_1.default.factory.updateBlock(thenCallbackBody, newStatements));
|
|
120
|
+
const newCall = typescript_1.default.factory.updateCallExpression(call, call.expression, call.typeArguments, [
|
|
121
|
+
newThenCallback,
|
|
122
|
+
]);
|
|
123
|
+
return typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createAwaitExpression(newCall));
|
|
124
|
+
}
|
|
125
|
+
function transformPromiseBasedDone(callExpr, doneIdentifier, refactorCtx) {
|
|
126
|
+
const { sourceFile, reporter } = refactorCtx;
|
|
127
|
+
if (typescript_1.default.isPropertyAccessExpression(callExpr.expression) &&
|
|
128
|
+
(callExpr.expression.name.text === 'then' || callExpr.expression.name.text === 'catch')) {
|
|
129
|
+
const promiseHandler = callExpr.arguments[0];
|
|
130
|
+
if (promiseHandler) {
|
|
131
|
+
let isDoneHandler = false;
|
|
132
|
+
// promise.then(done)
|
|
133
|
+
if (typescript_1.default.isIdentifier(promiseHandler) && promiseHandler.text === doneIdentifier.text) {
|
|
134
|
+
isDoneHandler = true;
|
|
135
|
+
}
|
|
136
|
+
// promise.catch(done.fail)
|
|
137
|
+
if (typescript_1.default.isPropertyAccessExpression(promiseHandler) &&
|
|
138
|
+
typescript_1.default.isIdentifier(promiseHandler.expression) &&
|
|
139
|
+
promiseHandler.expression.text === doneIdentifier.text &&
|
|
140
|
+
promiseHandler.name.text === 'fail') {
|
|
141
|
+
isDoneHandler = true;
|
|
142
|
+
}
|
|
143
|
+
// promise.then(() => done())
|
|
144
|
+
if (typescript_1.default.isArrowFunction(promiseHandler) && !promiseHandler.parameters.length) {
|
|
145
|
+
const body = promiseHandler.body;
|
|
146
|
+
if (typescript_1.default.isCallExpression(body) &&
|
|
147
|
+
typescript_1.default.isIdentifier(body.expression) &&
|
|
148
|
+
body.expression.text === doneIdentifier.text) {
|
|
149
|
+
isDoneHandler = true;
|
|
150
|
+
}
|
|
151
|
+
if (typescript_1.default.isBlock(body) && body.statements.length === 1) {
|
|
152
|
+
const stmt = body.statements[0];
|
|
153
|
+
if (typescript_1.default.isExpressionStatement(stmt) &&
|
|
154
|
+
typescript_1.default.isCallExpression(stmt.expression) &&
|
|
155
|
+
typescript_1.default.isIdentifier(stmt.expression.expression) &&
|
|
156
|
+
stmt.expression.expression.text === doneIdentifier.text) {
|
|
157
|
+
isDoneHandler = true;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (isDoneHandler) {
|
|
162
|
+
reporter.reportTransformation(sourceFile, callExpr, 'Transformed promise `.then(done)` to `await`.');
|
|
163
|
+
return typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createAwaitExpression(callExpr.expression.expression));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
function transformDoneCallback(node, refactorCtx) {
|
|
170
|
+
const { sourceFile, reporter, tsContext } = refactorCtx;
|
|
171
|
+
if (!typescript_1.default.isCallExpression(node) ||
|
|
172
|
+
!typescript_1.default.isIdentifier(node.expression) ||
|
|
173
|
+
!['it', 'beforeEach', 'afterEach', 'beforeAll', 'afterAll'].includes(node.expression.text)) {
|
|
174
|
+
return node;
|
|
175
|
+
}
|
|
176
|
+
const functionArg = node.arguments.find((arg) => typescript_1.default.isArrowFunction(arg) || typescript_1.default.isFunctionExpression(arg));
|
|
177
|
+
if (!functionArg || (!typescript_1.default.isArrowFunction(functionArg) && !typescript_1.default.isFunctionExpression(functionArg))) {
|
|
178
|
+
return node;
|
|
179
|
+
}
|
|
180
|
+
if (functionArg.parameters.length !== 1) {
|
|
181
|
+
return node;
|
|
182
|
+
}
|
|
183
|
+
const doneParam = functionArg.parameters[0];
|
|
184
|
+
if (!typescript_1.default.isIdentifier(doneParam.name)) {
|
|
185
|
+
return node;
|
|
186
|
+
}
|
|
187
|
+
const doneIdentifier = doneParam.name;
|
|
188
|
+
let doneWasUsed = false;
|
|
189
|
+
const bodyVisitor = (bodyNode) => {
|
|
190
|
+
const complexTransformed = transformComplexDoneCallback(bodyNode, doneIdentifier, refactorCtx);
|
|
191
|
+
if (complexTransformed !== bodyNode) {
|
|
192
|
+
doneWasUsed = true;
|
|
193
|
+
return complexTransformed;
|
|
194
|
+
}
|
|
195
|
+
if (typescript_1.default.isExpressionStatement(bodyNode) && typescript_1.default.isCallExpression(bodyNode.expression)) {
|
|
196
|
+
const callExpr = bodyNode.expression;
|
|
197
|
+
// Transform `done.fail('message')` to `throw new Error('message')`
|
|
198
|
+
if (typescript_1.default.isPropertyAccessExpression(callExpr.expression) &&
|
|
199
|
+
typescript_1.default.isIdentifier(callExpr.expression.expression) &&
|
|
200
|
+
callExpr.expression.expression.text === doneIdentifier.text &&
|
|
201
|
+
callExpr.expression.name.text === 'fail') {
|
|
202
|
+
doneWasUsed = true;
|
|
203
|
+
reporter.reportTransformation(sourceFile, bodyNode, 'Transformed `done.fail()` to `throw new Error()`.');
|
|
204
|
+
const errorArgs = callExpr.arguments.length > 0 ? [callExpr.arguments[0]] : [];
|
|
205
|
+
return typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier('Error'), undefined, errorArgs));
|
|
206
|
+
}
|
|
207
|
+
// Transform `promise.then(done)` or `promise.catch(done.fail)` to `await promise`
|
|
208
|
+
const promiseTransformed = transformPromiseBasedDone(callExpr, doneIdentifier, refactorCtx);
|
|
209
|
+
if (promiseTransformed) {
|
|
210
|
+
doneWasUsed = true;
|
|
211
|
+
return promiseTransformed;
|
|
212
|
+
}
|
|
213
|
+
// Remove `done()`
|
|
214
|
+
if (typescript_1.default.isIdentifier(callExpr.expression) &&
|
|
215
|
+
callExpr.expression.text === doneIdentifier.text) {
|
|
216
|
+
doneWasUsed = true;
|
|
217
|
+
return typescript_1.default.setTextRange(typescript_1.default.factory.createEmptyStatement(), callExpr.expression);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return typescript_1.default.visitEachChild(bodyNode, bodyVisitor, tsContext);
|
|
221
|
+
};
|
|
222
|
+
const newBody = typescript_1.default.visitNode(functionArg.body, (node) => {
|
|
223
|
+
if (typescript_1.default.isBlock(node)) {
|
|
224
|
+
const newStatements = node.statements.flatMap((stmt) => bodyVisitor(stmt));
|
|
225
|
+
return typescript_1.default.factory.updateBlock(node, newStatements.filter((s) => !!s));
|
|
226
|
+
}
|
|
227
|
+
return bodyVisitor(node);
|
|
228
|
+
});
|
|
229
|
+
if (!doneWasUsed) {
|
|
230
|
+
return node;
|
|
231
|
+
}
|
|
232
|
+
reporter.reportTransformation(sourceFile, node, `Converted test with \`done\` callback to an \`async\` test.`);
|
|
233
|
+
const newModifiers = [
|
|
234
|
+
typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.AsyncKeyword),
|
|
235
|
+
...(typescript_1.default.getModifiers(functionArg) ?? []).filter((mod) => mod.kind !== typescript_1.default.SyntaxKind.AsyncKeyword),
|
|
236
|
+
];
|
|
237
|
+
let newFunction;
|
|
238
|
+
if (typescript_1.default.isArrowFunction(functionArg)) {
|
|
239
|
+
newFunction = typescript_1.default.factory.updateArrowFunction(functionArg, newModifiers, functionArg.typeParameters, [], // remove parameters
|
|
240
|
+
functionArg.type, functionArg.equalsGreaterThanToken, newBody ?? typescript_1.default.factory.createBlock([]));
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
// isFunctionExpression
|
|
244
|
+
newFunction = typescript_1.default.factory.updateFunctionExpression(functionArg, newModifiers, functionArg.asteriskToken, functionArg.name, functionArg.typeParameters, [], // remove parameters
|
|
245
|
+
functionArg.type, newBody ?? typescript_1.default.factory.createBlock([]));
|
|
246
|
+
}
|
|
247
|
+
const newArgs = node.arguments.map((arg) => (arg === functionArg ? newFunction : arg));
|
|
248
|
+
return typescript_1.default.factory.updateCallExpression(node, node.expression, node.typeArguments, newArgs);
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=jasmine-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jasmine-lifecycle.js","sourceRoot":"","sources":["jasmine-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @fileoverview This file contains transformers that migrate Jasmine matchers to their
|
|
10
|
+
* Vitest counterparts. It handles a wide range of matchers, including syntactic sugar
|
|
11
|
+
* (e.g., `toBeTrue`), asymmetric matchers (e.g., `jasmine.any`), async promise matchers
|
|
12
|
+
* (`expectAsync`), and complex matchers that require restructuring, such as
|
|
13
|
+
* `toHaveBeenCalledOnceWith` and `arrayWithExactContents`.
|
|
14
|
+
*/
|
|
15
|
+
import ts from '../../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
|
|
16
|
+
import { RefactorContext } from '../utils/refactor-context';
|
|
17
|
+
export declare function transformSyntacticSugarMatchers(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
18
|
+
export declare function transformAsymmetricMatchers(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
19
|
+
export declare function transformtoHaveBeenCalledBefore(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
20
|
+
export declare function transformToHaveClass(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
21
|
+
export declare function transformExpectAsync(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
22
|
+
export declare function transformComplexMatchers(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
23
|
+
export declare function transformArrayWithExactContents(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node | readonly ts.Node[];
|
|
24
|
+
export declare function transformCalledOnceWith(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node | readonly ts.Node[];
|
|
25
|
+
export declare function transformWithContext(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|
|
26
|
+
export declare function transformExpectNothing(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
|