@schematics/angular 21.0.0-next.6 → 21.0.0-next.8

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.
Files changed (216) hide show
  1. package/ai-config/index.js +1 -0
  2. package/ai-config/index.js.map +1 -0
  3. package/ai-config/schema.js +1 -0
  4. package/ai-config/schema.js.map +1 -0
  5. package/app-shell/index.js +1 -0
  6. package/app-shell/index.js.map +1 -0
  7. package/app-shell/schema.js +1 -0
  8. package/app-shell/schema.js.map +1 -0
  9. package/application/files/module-files/src/app/app__suffix__.spec.ts.template +1 -1
  10. package/application/files/standalone-files/src/app/app__suffix__.spec.ts.template +1 -1
  11. package/application/index.js +1 -0
  12. package/application/index.js.map +1 -0
  13. package/application/schema.js +1 -0
  14. package/application/schema.js.map +1 -0
  15. package/application/schema.json +0 -1
  16. package/class/index.js +1 -0
  17. package/class/index.js.map +1 -0
  18. package/class/schema.js +1 -0
  19. package/class/schema.js.map +1 -0
  20. package/collection.json +6 -0
  21. package/component/index.js +1 -0
  22. package/component/index.js.map +1 -0
  23. package/component/schema.js +1 -0
  24. package/component/schema.js.map +1 -0
  25. package/config/index.js +1 -0
  26. package/config/index.js.map +1 -0
  27. package/config/schema.js +1 -0
  28. package/config/schema.js.map +1 -0
  29. package/directive/index.js +1 -0
  30. package/directive/index.js.map +1 -0
  31. package/directive/schema.js +1 -0
  32. package/directive/schema.js.map +1 -0
  33. package/e2e/index.js +1 -0
  34. package/e2e/index.js.map +1 -0
  35. package/e2e/schema.js +1 -0
  36. package/e2e/schema.js.map +1 -0
  37. package/enum/index.js +1 -0
  38. package/enum/index.js.map +1 -0
  39. package/enum/schema.js +1 -0
  40. package/enum/schema.js.map +1 -0
  41. package/environments/index.js +1 -0
  42. package/environments/index.js.map +1 -0
  43. package/environments/schema.js +1 -0
  44. package/environments/schema.js.map +1 -0
  45. package/guard/index.js +1 -0
  46. package/guard/index.js.map +1 -0
  47. package/guard/schema.js +1 -0
  48. package/guard/schema.js.map +1 -0
  49. package/interceptor/index.js +1 -0
  50. package/interceptor/index.js.map +1 -0
  51. package/interceptor/schema.js +1 -0
  52. package/interceptor/schema.js.map +1 -0
  53. package/interface/index.js +1 -0
  54. package/interface/index.js.map +1 -0
  55. package/interface/schema.js +1 -0
  56. package/interface/schema.js.map +1 -0
  57. package/library/index.js +1 -0
  58. package/library/index.js.map +1 -0
  59. package/library/schema.js +1 -0
  60. package/library/schema.js.map +1 -0
  61. package/migrations/karma/karma-config-analyzer.js +1 -0
  62. package/migrations/karma/karma-config-analyzer.js.map +1 -0
  63. package/migrations/karma/karma-config-comparer.js +1 -0
  64. package/migrations/karma/karma-config-comparer.js.map +1 -0
  65. package/migrations/karma/migration.js +1 -0
  66. package/migrations/karma/migration.js.map +1 -0
  67. package/migrations/migration-collection.json +5 -0
  68. package/migrations/update-module-resolution/migration.d.ts +9 -0
  69. package/migrations/update-module-resolution/migration.js +53 -0
  70. package/migrations/update-module-resolution/migration.js.map +1 -0
  71. package/migrations/update-typescript-lib/migration.js +1 -0
  72. package/migrations/update-typescript-lib/migration.js.map +1 -0
  73. package/migrations/use-application-builder/css-import-lexer.js +1 -0
  74. package/migrations/use-application-builder/css-import-lexer.js.map +1 -0
  75. package/migrations/use-application-builder/migration.js +1 -0
  76. package/migrations/use-application-builder/migration.js.map +1 -0
  77. package/migrations/use-application-builder/stylesheet-updates.js +1 -0
  78. package/migrations/use-application-builder/stylesheet-updates.js.map +1 -0
  79. package/module/index.js +1 -0
  80. package/module/index.js.map +1 -0
  81. package/module/schema.js +1 -0
  82. package/module/schema.js.map +1 -0
  83. package/ng-new/index.js +1 -0
  84. package/ng-new/index.js.map +1 -0
  85. package/ng-new/schema.js +1 -0
  86. package/ng-new/schema.js.map +1 -0
  87. package/package.json +4 -4
  88. package/pipe/index.js +1 -0
  89. package/pipe/index.js.map +1 -0
  90. package/pipe/schema.js +1 -0
  91. package/pipe/schema.js.map +1 -0
  92. package/refactor/jasmine-vitest/index.d.ts +10 -0
  93. package/refactor/jasmine-vitest/index.js +103 -0
  94. package/refactor/jasmine-vitest/index.js.map +1 -0
  95. package/refactor/jasmine-vitest/schema.d.ts +25 -0
  96. package/refactor/jasmine-vitest/schema.js +5 -0
  97. package/refactor/jasmine-vitest/schema.js.map +1 -0
  98. package/refactor/jasmine-vitest/schema.json +30 -0
  99. package/refactor/jasmine-vitest/test-file-transformer.d.ts +16 -0
  100. package/refactor/jasmine-vitest/test-file-transformer.js +113 -0
  101. package/refactor/jasmine-vitest/test-file-transformer.js.map +1 -0
  102. package/refactor/jasmine-vitest/transformers/jasmine-lifecycle.d.ts +18 -0
  103. package/refactor/jasmine-vitest/transformers/jasmine-lifecycle.js +250 -0
  104. package/refactor/jasmine-vitest/transformers/jasmine-lifecycle.js.map +1 -0
  105. package/refactor/jasmine-vitest/transformers/jasmine-matcher.d.ts +26 -0
  106. package/refactor/jasmine-vitest/transformers/jasmine-matcher.js +398 -0
  107. package/refactor/jasmine-vitest/transformers/jasmine-matcher.js.map +1 -0
  108. package/refactor/jasmine-vitest/transformers/jasmine-misc.d.ts +21 -0
  109. package/refactor/jasmine-vitest/transformers/jasmine-misc.js +164 -0
  110. package/refactor/jasmine-vitest/transformers/jasmine-misc.js.map +1 -0
  111. package/refactor/jasmine-vitest/transformers/jasmine-spy.d.ts +19 -0
  112. package/refactor/jasmine-vitest/transformers/jasmine-spy.js +284 -0
  113. package/refactor/jasmine-vitest/transformers/jasmine-spy.js.map +1 -0
  114. package/refactor/jasmine-vitest/utils/ast-helpers.d.ts +11 -0
  115. package/refactor/jasmine-vitest/utils/ast-helpers.js +29 -0
  116. package/refactor/jasmine-vitest/utils/ast-helpers.js.map +1 -0
  117. package/refactor/jasmine-vitest/utils/ast-validation.d.ts +25 -0
  118. package/refactor/jasmine-vitest/utils/ast-validation.js +44 -0
  119. package/refactor/jasmine-vitest/utils/ast-validation.js.map +1 -0
  120. package/refactor/jasmine-vitest/utils/comment-helpers.d.ts +29 -0
  121. package/refactor/jasmine-vitest/utils/comment-helpers.js +37 -0
  122. package/refactor/jasmine-vitest/utils/comment-helpers.js.map +1 -0
  123. package/refactor/jasmine-vitest/utils/refactor-context.d.ts +26 -0
  124. package/refactor/jasmine-vitest/utils/refactor-context.js +10 -0
  125. package/refactor/jasmine-vitest/utils/refactor-context.js.map +1 -0
  126. package/refactor/jasmine-vitest/utils/refactor-reporter.d.ts +24 -0
  127. package/refactor/jasmine-vitest/utils/refactor-reporter.js +72 -0
  128. package/refactor/jasmine-vitest/utils/refactor-reporter.js.map +1 -0
  129. package/refactor/jasmine-vitest/utils/todo-notes.d.ts +132 -0
  130. package/refactor/jasmine-vitest/utils/todo-notes.js +108 -0
  131. package/refactor/jasmine-vitest/utils/todo-notes.js.map +1 -0
  132. package/resolver/index.js +1 -0
  133. package/resolver/index.js.map +1 -0
  134. package/resolver/schema.js +1 -0
  135. package/resolver/schema.js.map +1 -0
  136. package/server/index.js +1 -0
  137. package/server/index.js.map +1 -0
  138. package/server/schema.js +1 -0
  139. package/server/schema.js.map +1 -0
  140. package/service/index.js +1 -0
  141. package/service/index.js.map +1 -0
  142. package/service/schema.js +1 -0
  143. package/service/schema.js.map +1 -0
  144. package/service-worker/index.js +1 -0
  145. package/service-worker/index.js.map +1 -0
  146. package/service-worker/schema.js +1 -0
  147. package/service-worker/schema.js.map +1 -0
  148. package/ssr/index.js +1 -0
  149. package/ssr/index.js.map +1 -0
  150. package/ssr/schema.js +1 -0
  151. package/ssr/schema.js.map +1 -0
  152. package/ssr/tty.js +1 -0
  153. package/ssr/tty.js.map +1 -0
  154. package/tailwind/index.js +1 -0
  155. package/tailwind/index.js.map +1 -0
  156. package/tailwind/schema.js +1 -0
  157. package/tailwind/schema.js.map +1 -0
  158. package/utility/add-declaration-to-ng-module.js +1 -0
  159. package/utility/add-declaration-to-ng-module.js.map +1 -0
  160. package/utility/ast-utils.js +1 -0
  161. package/utility/ast-utils.js.map +1 -0
  162. package/utility/change.js +1 -0
  163. package/utility/change.js.map +1 -0
  164. package/utility/dependencies.js +1 -0
  165. package/utility/dependencies.js.map +1 -0
  166. package/utility/dependency.js +1 -0
  167. package/utility/dependency.js.map +1 -0
  168. package/utility/eol.js +1 -0
  169. package/utility/eol.js.map +1 -0
  170. package/utility/find-module.js +1 -0
  171. package/utility/find-module.js.map +1 -0
  172. package/utility/generate-from-files.js +1 -0
  173. package/utility/generate-from-files.js.map +1 -0
  174. package/utility/index.js +1 -0
  175. package/utility/index.js.map +1 -0
  176. package/utility/json-file.js +1 -0
  177. package/utility/json-file.js.map +1 -0
  178. package/utility/latest-versions/package.json +1 -1
  179. package/utility/latest-versions.js +4 -3
  180. package/utility/latest-versions.js.map +1 -0
  181. package/utility/ng-ast-utils.js +1 -0
  182. package/utility/ng-ast-utils.js.map +1 -0
  183. package/utility/parse-name.js +1 -0
  184. package/utility/parse-name.js.map +1 -0
  185. package/utility/paths.js +1 -0
  186. package/utility/paths.js.map +1 -0
  187. package/utility/project-targets.js +1 -0
  188. package/utility/project-targets.js.map +1 -0
  189. package/utility/project.js +1 -0
  190. package/utility/project.js.map +1 -0
  191. package/utility/standalone/app_component.js +1 -0
  192. package/utility/standalone/app_component.js.map +1 -0
  193. package/utility/standalone/app_config.js +1 -0
  194. package/utility/standalone/app_config.js.map +1 -0
  195. package/utility/standalone/code_block.js +1 -0
  196. package/utility/standalone/code_block.js.map +1 -0
  197. package/utility/standalone/index.js +1 -0
  198. package/utility/standalone/index.js.map +1 -0
  199. package/utility/standalone/rules.js +1 -0
  200. package/utility/standalone/rules.js.map +1 -0
  201. package/utility/standalone/util.js +1 -0
  202. package/utility/standalone/util.js.map +1 -0
  203. package/utility/validation.js +1 -0
  204. package/utility/validation.js.map +1 -0
  205. package/utility/workspace-models.js +1 -0
  206. package/utility/workspace-models.js.map +1 -0
  207. package/utility/workspace.js +1 -0
  208. package/utility/workspace.js.map +1 -0
  209. package/web-worker/index.js +1 -0
  210. package/web-worker/index.js.map +1 -0
  211. package/web-worker/schema.js +1 -0
  212. package/web-worker/schema.js.map +1 -0
  213. package/workspace/index.js +1 -0
  214. package/workspace/index.js.map +1 -0
  215. package/workspace/schema.js +1 -0
  216. package/workspace/schema.js.map +1 -0
@@ -0,0 +1,398 @@
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.transformSyntacticSugarMatchers = transformSyntacticSugarMatchers;
14
+ exports.transformAsymmetricMatchers = transformAsymmetricMatchers;
15
+ exports.transformtoHaveBeenCalledBefore = transformtoHaveBeenCalledBefore;
16
+ exports.transformToHaveClass = transformToHaveClass;
17
+ exports.transformExpectAsync = transformExpectAsync;
18
+ exports.transformComplexMatchers = transformComplexMatchers;
19
+ exports.transformArrayWithExactContents = transformArrayWithExactContents;
20
+ exports.transformCalledOnceWith = transformCalledOnceWith;
21
+ exports.transformWithContext = transformWithContext;
22
+ exports.transformExpectNothing = transformExpectNothing;
23
+ /**
24
+ * @fileoverview This file contains transformers that migrate Jasmine matchers to their
25
+ * Vitest counterparts. It handles a wide range of matchers, including syntactic sugar
26
+ * (e.g., `toBeTrue`), asymmetric matchers (e.g., `jasmine.any`), async promise matchers
27
+ * (`expectAsync`), and complex matchers that require restructuring, such as
28
+ * `toHaveBeenCalledOnceWith` and `arrayWithExactContents`.
29
+ */
30
+ const typescript_1 = __importDefault(require("../../../third_party/github.com/Microsoft/TypeScript/lib/typescript"));
31
+ const ast_helpers_1 = require("../utils/ast-helpers");
32
+ const ast_validation_1 = require("../utils/ast-validation");
33
+ const comment_helpers_1 = require("../utils/comment-helpers");
34
+ const SUGAR_MATCHER_CHANGES = new Map([
35
+ ['toBeTrue', { newName: 'toBe', newArgs: [typescript_1.default.factory.createTrue()] }],
36
+ ['toBeFalse', { newName: 'toBe', newArgs: [typescript_1.default.factory.createFalse()] }],
37
+ ['toBePositiveInfinity', { newName: 'toBe', newArgs: [typescript_1.default.factory.createIdentifier('Infinity')] }],
38
+ [
39
+ 'toBeNegativeInfinity',
40
+ {
41
+ newName: 'toBe',
42
+ newArgs: [
43
+ typescript_1.default.factory.createPrefixUnaryExpression(typescript_1.default.SyntaxKind.MinusToken, typescript_1.default.factory.createIdentifier('Infinity')),
44
+ ],
45
+ },
46
+ ],
47
+ ['toHaveSize', { newName: 'toHaveLength' }],
48
+ ]);
49
+ function transformSyntacticSugarMatchers(node, { sourceFile, reporter }) {
50
+ if (!typescript_1.default.isCallExpression(node) || !typescript_1.default.isPropertyAccessExpression(node.expression)) {
51
+ return node;
52
+ }
53
+ const pae = node.expression;
54
+ const matcherName = pae.name.text;
55
+ if (matcherName === 'toHaveSpyInteractions') {
56
+ const category = 'toHaveSpyInteractions';
57
+ reporter.recordTodo(category);
58
+ (0, comment_helpers_1.addTodoComment)(node, category);
59
+ return node;
60
+ }
61
+ if (matcherName === 'toThrowMatching') {
62
+ const category = 'toThrowMatching';
63
+ reporter.recordTodo(category);
64
+ (0, comment_helpers_1.addTodoComment)(node, category, { name: matcherName });
65
+ return node;
66
+ }
67
+ const mapping = SUGAR_MATCHER_CHANGES.get(matcherName);
68
+ if (mapping) {
69
+ reporter.reportTransformation(sourceFile, node, `Transformed matcher ".${matcherName}()" to ".${mapping.newName}()".`);
70
+ const newExpression = (0, ast_helpers_1.createPropertyAccess)(pae.expression, mapping.newName);
71
+ const newArgs = mapping.newArgs ?? [...node.arguments];
72
+ return typescript_1.default.factory.updateCallExpression(node, newExpression, node.typeArguments, newArgs);
73
+ }
74
+ return node;
75
+ }
76
+ const ASYMMETRIC_MATCHER_NAMES = [
77
+ 'anything',
78
+ 'any',
79
+ 'stringMatching',
80
+ 'objectContaining',
81
+ 'arrayContaining',
82
+ 'stringContaining',
83
+ ];
84
+ function transformAsymmetricMatchers(node, { sourceFile, reporter }) {
85
+ if (typescript_1.default.isPropertyAccessExpression(node) &&
86
+ typescript_1.default.isIdentifier(node.expression) &&
87
+ node.expression.text === 'jasmine') {
88
+ const matcherName = node.name.text;
89
+ if (ASYMMETRIC_MATCHER_NAMES.includes(matcherName)) {
90
+ reporter.reportTransformation(sourceFile, node, `Transformed asymmetric matcher \`jasmine.${matcherName}\` to \`expect.${matcherName}\`.`);
91
+ return (0, ast_helpers_1.createPropertyAccess)('expect', node.name);
92
+ }
93
+ }
94
+ return node;
95
+ }
96
+ function transformtoHaveBeenCalledBefore(node, { sourceFile, reporter }) {
97
+ if (!typescript_1.default.isCallExpression(node) ||
98
+ !typescript_1.default.isPropertyAccessExpression(node.expression) ||
99
+ node.arguments.length !== 1) {
100
+ return node;
101
+ }
102
+ const pae = node.expression;
103
+ const matcherName = pae.name.text;
104
+ let isNegated = false;
105
+ let expectExpression = pae.expression;
106
+ if (typescript_1.default.isPropertyAccessExpression(expectExpression) && expectExpression.name.text === 'not') {
107
+ isNegated = true;
108
+ expectExpression = expectExpression.expression;
109
+ }
110
+ if (!typescript_1.default.isCallExpression(expectExpression) || matcherName !== 'toHaveBeenCalledBefore') {
111
+ return node;
112
+ }
113
+ reporter.reportTransformation(sourceFile, node, 'Transformed `toHaveBeenCalledBefore` to a Vitest-compatible spy invocation order comparison.');
114
+ const [spyB] = node.arguments;
115
+ const [spyA] = expectExpression.arguments;
116
+ const createInvocationOrderAccess = (spyIdentifier) => {
117
+ const mockedSpy = typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)('vi', 'mocked'), undefined, [spyIdentifier]);
118
+ const mockProperty = (0, ast_helpers_1.createPropertyAccess)(mockedSpy, 'mock');
119
+ return (0, ast_helpers_1.createPropertyAccess)(mockProperty, 'invocationCallOrder');
120
+ };
121
+ const createMinCall = (spyIdentifier) => {
122
+ return typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)('Math', 'min'), undefined, [
123
+ typescript_1.default.factory.createSpreadElement(createInvocationOrderAccess(spyIdentifier)),
124
+ ]);
125
+ };
126
+ const newExpect = (0, ast_helpers_1.createExpectCallExpression)([createMinCall(spyA)]);
127
+ const newMatcherName = isNegated ? 'toBeGreaterThanOrEqual' : 'toBeLessThan';
128
+ return typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)(newExpect, newMatcherName), undefined, [createMinCall(spyB)]);
129
+ }
130
+ function transformToHaveClass(node, { sourceFile, reporter }) {
131
+ if (!typescript_1.default.isCallExpression(node) ||
132
+ !typescript_1.default.isPropertyAccessExpression(node.expression) ||
133
+ node.arguments.length !== 1) {
134
+ return node;
135
+ }
136
+ const pae = node.expression;
137
+ const matcherName = pae.name.text;
138
+ let isNegated = false;
139
+ let expectExpression = pae.expression;
140
+ if (typescript_1.default.isPropertyAccessExpression(expectExpression) && expectExpression.name.text === 'not') {
141
+ isNegated = true;
142
+ expectExpression = expectExpression.expression;
143
+ }
144
+ if (matcherName !== 'toHaveClass') {
145
+ return node;
146
+ }
147
+ reporter.reportTransformation(sourceFile, node, 'Transformed `.toHaveClass()` to a `classList.contains()` check.');
148
+ const [className] = node.arguments;
149
+ const newExpectArgs = [];
150
+ if (typescript_1.default.isCallExpression(expectExpression)) {
151
+ const [element] = expectExpression.arguments;
152
+ const classListContains = typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)((0, ast_helpers_1.createPropertyAccess)(element, 'classList'), 'contains'), undefined, [className]);
153
+ newExpectArgs.push(classListContains);
154
+ // Pass the context message from withContext to the new expect call
155
+ if (expectExpression.arguments.length > 1) {
156
+ newExpectArgs.push(expectExpression.arguments[1]);
157
+ }
158
+ }
159
+ else {
160
+ return node;
161
+ }
162
+ const newExpect = (0, ast_helpers_1.createExpectCallExpression)(newExpectArgs);
163
+ const newMatcher = isNegated ? typescript_1.default.factory.createFalse() : typescript_1.default.factory.createTrue();
164
+ return typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)(newExpect, 'toBe'), undefined, [
165
+ newMatcher,
166
+ ]);
167
+ }
168
+ const ASYNC_MATCHER_CHANGES = new Map([
169
+ ['toBeResolved', { base: 'resolves', matcher: 'toThrow', not: true, keepArgs: false }],
170
+ ['toBeResolvedTo', { base: 'resolves', matcher: 'toEqual', keepArgs: true }],
171
+ ['toBeRejected', { base: 'rejects', matcher: 'toThrow', keepArgs: false }],
172
+ ['toBeRejectedWith', { base: 'rejects', matcher: 'toEqual', keepArgs: true }],
173
+ ['toBeRejectedWithError', { base: 'rejects', matcher: 'toThrowError', keepArgs: true }],
174
+ ]);
175
+ function transformExpectAsync(node, { sourceFile, reporter }) {
176
+ if (!typescript_1.default.isCallExpression(node) ||
177
+ !typescript_1.default.isPropertyAccessExpression(node.expression) ||
178
+ !typescript_1.default.isCallExpression(node.expression.expression)) {
179
+ return node;
180
+ }
181
+ const matcherCall = node;
182
+ const matcherPae = node.expression;
183
+ const expectCall = node.expression.expression;
184
+ if (!typescript_1.default.isIdentifier(expectCall.expression) || expectCall.expression.text !== 'expectAsync') {
185
+ return node;
186
+ }
187
+ const matcherName = typescript_1.default.isIdentifier(matcherPae.name) ? matcherPae.name.text : undefined;
188
+ const mapping = matcherName ? ASYNC_MATCHER_CHANGES.get(matcherName) : undefined;
189
+ if (mapping) {
190
+ reporter.reportTransformation(sourceFile, node, `Transformed \`expectAsync(...).${matcherName}\` to \`expect(...).${mapping.base}.${mapping.matcher}\`.`);
191
+ const newExpectCall = (0, ast_helpers_1.createExpectCallExpression)([expectCall.arguments[0]]);
192
+ let newMatcherChain = (0, ast_helpers_1.createPropertyAccess)(newExpectCall, mapping.base);
193
+ if (mapping.not) {
194
+ newMatcherChain = (0, ast_helpers_1.createPropertyAccess)(newMatcherChain, 'not');
195
+ }
196
+ newMatcherChain = (0, ast_helpers_1.createPropertyAccess)(newMatcherChain, mapping.matcher);
197
+ const newMatcherArgs = mapping.keepArgs ? [...matcherCall.arguments] : [];
198
+ return typescript_1.default.factory.createCallExpression(newMatcherChain, undefined, newMatcherArgs);
199
+ }
200
+ if (matcherName) {
201
+ if (matcherName === 'toBePending') {
202
+ const category = 'toBePending';
203
+ reporter.recordTodo(category);
204
+ (0, comment_helpers_1.addTodoComment)(node, category);
205
+ }
206
+ else {
207
+ const category = 'unsupported-expect-async-matcher';
208
+ reporter.recordTodo(category);
209
+ (0, comment_helpers_1.addTodoComment)(node, category, { name: matcherName });
210
+ }
211
+ }
212
+ return node;
213
+ }
214
+ function transformComplexMatchers(node, { sourceFile, reporter }) {
215
+ if (!typescript_1.default.isCallExpression(node) ||
216
+ !typescript_1.default.isPropertyAccessExpression(node.expression) ||
217
+ node.expression.name.text !== 'toEqual' ||
218
+ node.arguments.length !== 1) {
219
+ return node;
220
+ }
221
+ const argument = node.arguments[0];
222
+ const jasmineMatcherName = (0, ast_validation_1.getJasmineMethodName)(argument);
223
+ if (!jasmineMatcherName) {
224
+ return node;
225
+ }
226
+ const expectCall = node.expression.expression;
227
+ let newMatcherName;
228
+ let newArgs;
229
+ let negate = false;
230
+ switch (jasmineMatcherName) {
231
+ case 'truthy':
232
+ newMatcherName = 'toBeTruthy';
233
+ break;
234
+ case 'falsy':
235
+ newMatcherName = 'toBeFalsy';
236
+ break;
237
+ case 'empty':
238
+ newMatcherName = 'toHaveLength';
239
+ newArgs = [typescript_1.default.factory.createNumericLiteral(0)];
240
+ break;
241
+ case 'notEmpty':
242
+ newMatcherName = 'toHaveLength';
243
+ newArgs = [typescript_1.default.factory.createNumericLiteral(0)];
244
+ negate = true;
245
+ break;
246
+ case 'is':
247
+ newMatcherName = 'toBe';
248
+ if (typescript_1.default.isCallExpression(argument)) {
249
+ newArgs = [...argument.arguments];
250
+ }
251
+ break;
252
+ }
253
+ if (newMatcherName) {
254
+ reporter.reportTransformation(sourceFile, node, `Transformed \`.toEqual(jasmine.${jasmineMatcherName}())\` to \`.${newMatcherName}()\`.`);
255
+ let expectExpression = expectCall;
256
+ // Handle cases like `expect(...).not.toEqual(jasmine.notEmpty())`
257
+ if (typescript_1.default.isPropertyAccessExpression(expectCall) && expectCall.name.text === 'not') {
258
+ // The original expression was negated, so flip the negate flag
259
+ negate = !negate;
260
+ // Use the expression before the `.not`
261
+ expectExpression = expectCall.expression;
262
+ }
263
+ if (negate) {
264
+ expectExpression = (0, ast_helpers_1.createPropertyAccess)(expectExpression, 'not');
265
+ }
266
+ const newExpression = (0, ast_helpers_1.createPropertyAccess)(expectExpression, newMatcherName);
267
+ return typescript_1.default.factory.createCallExpression(newExpression, undefined, newArgs ?? []);
268
+ }
269
+ return node;
270
+ }
271
+ function transformArrayWithExactContents(node, { sourceFile, reporter }) {
272
+ if (!typescript_1.default.isExpressionStatement(node) ||
273
+ !typescript_1.default.isCallExpression(node.expression) ||
274
+ !typescript_1.default.isPropertyAccessExpression(node.expression.expression) ||
275
+ node.expression.expression.name.text !== 'toEqual' ||
276
+ node.expression.arguments.length !== 1) {
277
+ return node;
278
+ }
279
+ const argument = node.expression.arguments[0];
280
+ if (!(0, ast_validation_1.isJasmineCallExpression)(argument, 'arrayWithExactContents') ||
281
+ argument.arguments.length !== 1) {
282
+ return node;
283
+ }
284
+ if (!typescript_1.default.isArrayLiteralExpression(argument.arguments[0])) {
285
+ const category = 'arrayWithExactContents-dynamic-variable';
286
+ reporter.recordTodo(category);
287
+ (0, comment_helpers_1.addTodoComment)(node, category);
288
+ return node;
289
+ }
290
+ reporter.reportTransformation(sourceFile, node, 'Transformed `jasmine.arrayWithExactContents()` to `.toHaveLength()` and `.toEqual(expect.arrayContaining())`.');
291
+ const expectCall = node.expression.expression.expression;
292
+ const arrayLiteral = argument.arguments[0];
293
+ const lengthCall = typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)(expectCall, 'toHaveLength'), undefined, [typescript_1.default.factory.createNumericLiteral(arrayLiteral.elements.length)]);
294
+ const containingCall = typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)(expectCall, 'toEqual'), undefined, [
295
+ typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)('expect', 'arrayContaining'), undefined, [arrayLiteral]),
296
+ ]);
297
+ return [
298
+ typescript_1.default.factory.createExpressionStatement(lengthCall),
299
+ typescript_1.default.factory.createExpressionStatement(containingCall),
300
+ ];
301
+ }
302
+ function transformCalledOnceWith(node, { sourceFile, reporter }) {
303
+ if (!typescript_1.default.isExpressionStatement(node)) {
304
+ return node;
305
+ }
306
+ const call = node.expression;
307
+ if (!typescript_1.default.isCallExpression(call) ||
308
+ !typescript_1.default.isPropertyAccessExpression(call.expression) ||
309
+ call.expression.name.text !== 'toHaveBeenCalledOnceWith') {
310
+ return node;
311
+ }
312
+ reporter.reportTransformation(sourceFile, node, 'Transformed `.toHaveBeenCalledOnceWith()` to `.toHaveBeenCalledTimes(1)` and `.toHaveBeenCalledWith()`.');
313
+ const expectCall = call.expression.expression;
314
+ const args = call.arguments;
315
+ const timesCall = typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)(expectCall, 'toHaveBeenCalledTimes'), undefined, [typescript_1.default.factory.createNumericLiteral(1)]);
316
+ const withCall = typescript_1.default.factory.createCallExpression((0, ast_helpers_1.createPropertyAccess)(expectCall, 'toHaveBeenCalledWith'), undefined, args);
317
+ return [
318
+ typescript_1.default.factory.createExpressionStatement(timesCall),
319
+ typescript_1.default.factory.createExpressionStatement(withCall),
320
+ ];
321
+ }
322
+ function transformWithContext(node, { sourceFile, reporter }) {
323
+ if (!typescript_1.default.isCallExpression(node) || !typescript_1.default.isPropertyAccessExpression(node.expression)) {
324
+ return node;
325
+ }
326
+ // Traverse the chain of property access expressions to find the .withContext() call
327
+ let currentExpression = node.expression;
328
+ const propertyChain = [];
329
+ while (typescript_1.default.isPropertyAccessExpression(currentExpression)) {
330
+ if (!typescript_1.default.isIdentifier(currentExpression.name)) {
331
+ // Break if we encounter a private identifier or something else unexpected
332
+ return node;
333
+ }
334
+ propertyChain.push(currentExpression.name);
335
+ currentExpression = currentExpression.expression;
336
+ }
337
+ const withContextCall = currentExpression;
338
+ // Check if we found a .withContext() call
339
+ if (!typescript_1.default.isCallExpression(withContextCall) ||
340
+ !typescript_1.default.isPropertyAccessExpression(withContextCall.expression) ||
341
+ !typescript_1.default.isIdentifier(withContextCall.expression.name) ||
342
+ withContextCall.expression.name.text !== 'withContext') {
343
+ return node;
344
+ }
345
+ reporter.reportTransformation(sourceFile, withContextCall, 'Transformed `.withContext()` to the `expect(..., message)` syntax.');
346
+ const expectCall = withContextCall.expression.expression;
347
+ if (!typescript_1.default.isCallExpression(expectCall) ||
348
+ !typescript_1.default.isIdentifier(expectCall.expression) ||
349
+ expectCall.expression.text !== 'expect') {
350
+ return node;
351
+ }
352
+ const contextMessage = withContextCall.arguments[0];
353
+ if (!contextMessage) {
354
+ // No message provided, so unwrap the .withContext() call.
355
+ let newChain = expectCall;
356
+ for (let i = propertyChain.length - 1; i >= 0; i--) {
357
+ newChain = typescript_1.default.factory.createPropertyAccessExpression(newChain, propertyChain[i]);
358
+ }
359
+ return typescript_1.default.factory.updateCallExpression(node, newChain, node.typeArguments, node.arguments);
360
+ }
361
+ const newExpectArgs = [...expectCall.arguments, contextMessage];
362
+ const newExpectCall = typescript_1.default.factory.updateCallExpression(expectCall, expectCall.expression, expectCall.typeArguments, newExpectArgs);
363
+ // Rebuild the property access chain
364
+ let newExpression = newExpectCall;
365
+ for (let i = propertyChain.length - 1; i >= 0; i--) {
366
+ newExpression = typescript_1.default.factory.createPropertyAccessExpression(newExpression, propertyChain[i]);
367
+ }
368
+ return typescript_1.default.factory.updateCallExpression(node, newExpression, node.typeArguments, node.arguments);
369
+ }
370
+ function transformExpectNothing(node, { sourceFile, reporter }) {
371
+ if (!typescript_1.default.isExpressionStatement(node)) {
372
+ return node;
373
+ }
374
+ const call = node.expression;
375
+ if (!typescript_1.default.isCallExpression(call) ||
376
+ !typescript_1.default.isPropertyAccessExpression(call.expression) ||
377
+ !typescript_1.default.isIdentifier(call.expression.name) ||
378
+ call.expression.name.text !== 'nothing') {
379
+ return node;
380
+ }
381
+ const expectCall = call.expression.expression;
382
+ if (!typescript_1.default.isCallExpression(expectCall) ||
383
+ !typescript_1.default.isIdentifier(expectCall.expression) ||
384
+ expectCall.expression.text !== 'expect' ||
385
+ expectCall.arguments.length > 0) {
386
+ return node;
387
+ }
388
+ // The statement is `expect().nothing()`, which can be removed.
389
+ const replacement = typescript_1.default.factory.createEmptyStatement();
390
+ const originalText = node.getFullText().trim();
391
+ reporter.reportTransformation(sourceFile, node, 'Removed `expect().nothing()` statement.');
392
+ const category = 'expect-nothing';
393
+ reporter.recordTodo(category);
394
+ (0, comment_helpers_1.addTodoComment)(replacement, category);
395
+ typescript_1.default.addSyntheticLeadingComment(replacement, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, ` ${originalText}`, true);
396
+ return replacement;
397
+ }
398
+ //# sourceMappingURL=jasmine-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jasmine-matcher.js","sourceRoot":"","sources":["jasmine-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
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 for miscellaneous Jasmine APIs that don't
10
+ * fit into other categories. This includes timer mocks (`jasmine.clock`), the `fail()`
11
+ * function, and configuration settings like `jasmine.DEFAULT_TIMEOUT_INTERVAL`. It also
12
+ * includes logic to identify and add TODO comments for unsupported Jasmine features.
13
+ */
14
+ import ts from '../../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
15
+ import { RefactorContext } from '../utils/refactor-context';
16
+ export declare function transformTimerMocks(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
17
+ export declare function transformFail(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
18
+ export declare function transformDefaultTimeoutInterval(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
19
+ export declare function transformGlobalFunctions(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
20
+ export declare function transformUnsupportedJasmineCalls(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
21
+ export declare function transformUnknownJasmineProperties(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
@@ -0,0 +1,164 @@
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.transformTimerMocks = transformTimerMocks;
14
+ exports.transformFail = transformFail;
15
+ exports.transformDefaultTimeoutInterval = transformDefaultTimeoutInterval;
16
+ exports.transformGlobalFunctions = transformGlobalFunctions;
17
+ exports.transformUnsupportedJasmineCalls = transformUnsupportedJasmineCalls;
18
+ exports.transformUnknownJasmineProperties = transformUnknownJasmineProperties;
19
+ /**
20
+ * @fileoverview This file contains transformers for miscellaneous Jasmine APIs that don't
21
+ * fit into other categories. This includes timer mocks (`jasmine.clock`), the `fail()`
22
+ * function, and configuration settings like `jasmine.DEFAULT_TIMEOUT_INTERVAL`. It also
23
+ * includes logic to identify and add TODO comments for unsupported Jasmine features.
24
+ */
25
+ const typescript_1 = __importDefault(require("../../../third_party/github.com/Microsoft/TypeScript/lib/typescript"));
26
+ const ast_helpers_1 = require("../utils/ast-helpers");
27
+ const ast_validation_1 = require("../utils/ast-validation");
28
+ const comment_helpers_1 = require("../utils/comment-helpers");
29
+ function transformTimerMocks(node, { sourceFile, reporter }) {
30
+ if (!typescript_1.default.isCallExpression(node) ||
31
+ !typescript_1.default.isPropertyAccessExpression(node.expression) ||
32
+ !typescript_1.default.isIdentifier(node.expression.name)) {
33
+ return node;
34
+ }
35
+ const pae = node.expression;
36
+ const clockCall = pae.expression;
37
+ if (!(0, ast_validation_1.isJasmineCallExpression)(clockCall, 'clock')) {
38
+ return node;
39
+ }
40
+ let newMethodName;
41
+ switch (pae.name.text) {
42
+ case 'install':
43
+ newMethodName = 'useFakeTimers';
44
+ break;
45
+ case 'tick':
46
+ newMethodName = 'advanceTimersByTime';
47
+ break;
48
+ case 'uninstall':
49
+ newMethodName = 'useRealTimers';
50
+ break;
51
+ case 'mockDate':
52
+ newMethodName = 'setSystemTime';
53
+ break;
54
+ }
55
+ if (newMethodName) {
56
+ reporter.reportTransformation(sourceFile, node, `Transformed \`jasmine.clock().${pae.name.text}\` to \`vi.${newMethodName}\`.`);
57
+ const newArgs = newMethodName === 'useFakeTimers' ? [] : node.arguments;
58
+ return (0, ast_helpers_1.createViCallExpression)(newMethodName, newArgs);
59
+ }
60
+ return node;
61
+ }
62
+ function transformFail(node, { sourceFile, reporter }) {
63
+ if (typescript_1.default.isExpressionStatement(node) &&
64
+ typescript_1.default.isCallExpression(node.expression) &&
65
+ typescript_1.default.isIdentifier(node.expression.expression) &&
66
+ node.expression.expression.text === 'fail') {
67
+ reporter.reportTransformation(sourceFile, node, 'Transformed `fail()` to `throw new Error()`.');
68
+ const reason = node.expression.arguments[0];
69
+ const replacement = typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier('Error'), undefined, reason ? [reason] : []));
70
+ return typescript_1.default.setOriginalNode(typescript_1.default.setTextRange(replacement, node), node);
71
+ }
72
+ return node;
73
+ }
74
+ function transformDefaultTimeoutInterval(node, { sourceFile, reporter }) {
75
+ if (typescript_1.default.isExpressionStatement(node) &&
76
+ typescript_1.default.isBinaryExpression(node.expression) &&
77
+ node.expression.operatorToken.kind === typescript_1.default.SyntaxKind.EqualsToken) {
78
+ const assignment = node.expression;
79
+ if (typescript_1.default.isPropertyAccessExpression(assignment.left) &&
80
+ typescript_1.default.isIdentifier(assignment.left.expression) &&
81
+ assignment.left.expression.text === 'jasmine' &&
82
+ assignment.left.name.text === 'DEFAULT_TIMEOUT_INTERVAL') {
83
+ reporter.reportTransformation(sourceFile, node, 'Transformed `jasmine.DEFAULT_TIMEOUT_INTERVAL` to `vi.setConfig()`.');
84
+ const timeoutValue = assignment.right;
85
+ const setConfigCall = (0, ast_helpers_1.createViCallExpression)('setConfig', [
86
+ typescript_1.default.factory.createObjectLiteralExpression([typescript_1.default.factory.createPropertyAssignment('testTimeout', timeoutValue)], false),
87
+ ]);
88
+ return typescript_1.default.factory.updateExpressionStatement(node, setConfigCall);
89
+ }
90
+ }
91
+ return node;
92
+ }
93
+ function transformGlobalFunctions(node, { sourceFile, reporter }) {
94
+ if (typescript_1.default.isCallExpression(node) &&
95
+ typescript_1.default.isIdentifier(node.expression) &&
96
+ (node.expression.text === 'setSpecProperty' || node.expression.text === 'setSuiteProperty')) {
97
+ const functionName = node.expression.text;
98
+ reporter.reportTransformation(sourceFile, node, `Found unsupported global function \`${functionName}\`.`);
99
+ const category = 'unsupported-global-function';
100
+ reporter.recordTodo(category);
101
+ (0, comment_helpers_1.addTodoComment)(node, category, { name: functionName });
102
+ }
103
+ return node;
104
+ }
105
+ const UNSUPPORTED_JASMINE_CALLS_CATEGORIES = new Set([
106
+ 'addMatchers',
107
+ 'addCustomEqualityTester',
108
+ 'mapContaining',
109
+ 'setContaining',
110
+ ]);
111
+ // A type guard to ensure that the methodName is one of the categories handled by this transformer.
112
+ function isUnsupportedJasmineCall(methodName) {
113
+ return UNSUPPORTED_JASMINE_CALLS_CATEGORIES.has(methodName);
114
+ }
115
+ function transformUnsupportedJasmineCalls(node, { sourceFile, reporter }) {
116
+ const methodName = (0, ast_validation_1.getJasmineMethodName)(node);
117
+ if (methodName && isUnsupportedJasmineCall(methodName)) {
118
+ reporter.reportTransformation(sourceFile, node, `Found unsupported call \`jasmine.${methodName}\`.`);
119
+ reporter.recordTodo(methodName);
120
+ (0, comment_helpers_1.addTodoComment)(node, methodName);
121
+ }
122
+ return node;
123
+ }
124
+ // If any additional properties are added to transforms, they should also be added to this list.
125
+ const HANDLED_JASMINE_PROPERTIES = new Set([
126
+ // Spies
127
+ 'createSpy',
128
+ 'createSpyObj',
129
+ 'spyOnAllFunctions',
130
+ // Clock
131
+ 'clock',
132
+ // Matchers
133
+ 'any',
134
+ 'anything',
135
+ 'stringMatching',
136
+ 'objectContaining',
137
+ 'arrayContaining',
138
+ 'arrayWithExactContents',
139
+ 'truthy',
140
+ 'falsy',
141
+ 'empty',
142
+ 'notEmpty',
143
+ 'mapContaining',
144
+ 'setContaining',
145
+ // Other
146
+ 'DEFAULT_TIMEOUT_INTERVAL',
147
+ 'addMatchers',
148
+ 'addCustomEqualityTester',
149
+ ]);
150
+ function transformUnknownJasmineProperties(node, { sourceFile, reporter }) {
151
+ if (typescript_1.default.isPropertyAccessExpression(node) &&
152
+ typescript_1.default.isIdentifier(node.expression) &&
153
+ node.expression.text === 'jasmine') {
154
+ const propName = node.name.text;
155
+ if (!HANDLED_JASMINE_PROPERTIES.has(propName)) {
156
+ reporter.reportTransformation(sourceFile, node, `Found unknown jasmine property \`jasmine.${propName}\`.`);
157
+ const category = 'unknown-jasmine-property';
158
+ reporter.recordTodo(category);
159
+ (0, comment_helpers_1.addTodoComment)(node, category, { name: propName });
160
+ }
161
+ }
162
+ return node;
163
+ }
164
+ //# sourceMappingURL=jasmine-misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jasmine-misc.js","sourceRoot":"","sources":["jasmine-misc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
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 dedicated to converting Jasmine's spying
10
+ * functionality to Vitest's mocking APIs. It handles the creation of spies (`spyOn`,
11
+ * `createSpy`, `createSpyObj`), spy strategies (`and.returnValue`, `and.callFake`),
12
+ * and the inspection of spy calls (`spy.calls.reset`, `spy.calls.mostRecent`).
13
+ */
14
+ import ts from '../../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
15
+ import { RefactorContext } from '../utils/refactor-context';
16
+ export declare function transformSpies(node: ts.Node, refactorCtx: RefactorContext): ts.Node;
17
+ export declare function transformCreateSpyObj(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
18
+ export declare function transformSpyReset(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;
19
+ export declare function transformSpyCallInspection(node: ts.Node, { sourceFile, reporter }: RefactorContext): ts.Node;