@ngrx/data 21.0.0 → 21.0.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/package.json +4 -4
- package/schematics/ng-add/index.js +130 -131
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.js +2 -0
- package/schematics-core/index.js +75 -24
- package/schematics-core/index.js.map +1 -1
- package/schematics-core/utility/ast-utils.js +234 -260
- package/schematics-core/utility/ast-utils.js.map +1 -1
- package/schematics-core/utility/change.js +82 -92
- package/schematics-core/utility/change.js.map +1 -1
- package/schematics-core/utility/config.js +13 -9
- package/schematics-core/utility/config.js.map +1 -1
- package/schematics-core/utility/find-component.js +35 -30
- package/schematics-core/utility/find-component.js.map +1 -1
- package/schematics-core/utility/find-module.js +38 -33
- package/schematics-core/utility/find-module.js.map +1 -1
- package/schematics-core/utility/json-utilts.js +8 -27
- package/schematics-core/utility/json-utilts.js.map +1 -1
- package/schematics-core/utility/libs-version.js +4 -1
- package/schematics-core/utility/libs-version.js.map +1 -1
- package/schematics-core/utility/ngrx-utils.js +129 -152
- package/schematics-core/utility/ngrx-utils.js.map +1 -1
- package/schematics-core/utility/package.js +6 -4
- package/schematics-core/utility/package.js.map +1 -1
- package/schematics-core/utility/parse-name.js +8 -5
- package/schematics-core/utility/parse-name.js.map +1 -1
- package/schematics-core/utility/project.js +23 -17
- package/schematics-core/utility/project.js.map +1 -1
- package/schematics-core/utility/standalone.js +141 -214
- package/schematics-core/utility/standalone.js.map +1 -1
- package/schematics-core/utility/strings.js +32 -21
- package/schematics-core/utility/strings.js.map +1 -1
- package/schematics-core/utility/update.js +18 -15
- package/schematics-core/utility/update.js.map +1 -1
- package/schematics-core/utility/visitors.js +104 -192
- package/schematics-core/utility/visitors.js.map +1 -1
|
@@ -1,45 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return { value: o && o[i++], done: !o };
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
-
};
|
|
12
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
-
if (!m) return o;
|
|
15
|
-
var i = m.call(o), r, ar = [], e;
|
|
16
|
-
try {
|
|
17
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
-
}
|
|
19
|
-
catch (error) { e = { error: error }; }
|
|
20
|
-
finally {
|
|
21
|
-
try {
|
|
22
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
-
}
|
|
24
|
-
finally { if (e) throw e.error; }
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
7
|
}
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.callsProvidersFunction = callsProvidersFunction;
|
|
37
|
+
exports.addFunctionalProvidersToStandaloneBootstrap = addFunctionalProvidersToStandaloneBootstrap;
|
|
38
|
+
exports.findBootstrapApplicationCall = findBootstrapApplicationCall;
|
|
37
39
|
// copied from https://github.com/angular/angular-cli/blob/17.3.x/packages/schematics/angular/private/standalone.ts
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const ast_utils_1 = require("./ast-utils");
|
|
43
|
+
const change_1 = require("./change");
|
|
44
|
+
const ts = __importStar(require("typescript"));
|
|
43
45
|
/**
|
|
44
46
|
* Checks whether a providers function is being called in a `bootstrapApplication` call.
|
|
45
47
|
* @param tree File tree of the project.
|
|
@@ -48,20 +50,18 @@ import * as ts from 'typescript';
|
|
|
48
50
|
* @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from
|
|
49
51
|
* `@schematics/angular/utility` instead.
|
|
50
52
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
function callsProvidersFunction(tree, filePath, functionName) {
|
|
54
|
+
const sourceFile = createSourceFile(tree, filePath);
|
|
55
|
+
const bootstrapCall = findBootstrapApplicationCall(sourceFile);
|
|
56
|
+
const appConfig = bootstrapCall
|
|
55
57
|
? findAppConfig(bootstrapCall, tree, filePath)
|
|
56
58
|
: null;
|
|
57
|
-
|
|
59
|
+
const providersLiteral = appConfig
|
|
58
60
|
? findProvidersLiteral(appConfig.node)
|
|
59
61
|
: null;
|
|
60
|
-
return !!
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
el.expression.text === functionName;
|
|
64
|
-
}));
|
|
62
|
+
return !!providersLiteral?.elements.some((el) => ts.isCallExpression(el) &&
|
|
63
|
+
ts.isIdentifier(el.expression) &&
|
|
64
|
+
el.expression.text === functionName);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Adds a providers function call to the `bootstrapApplication` call.
|
|
@@ -74,44 +74,43 @@ export function callsProvidersFunction(tree, filePath, functionName) {
|
|
|
74
74
|
* @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from
|
|
75
75
|
* `@schematics/angular/utility` instead.
|
|
76
76
|
*/
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (change instanceof InsertChange) {
|
|
77
|
+
function addFunctionalProvidersToStandaloneBootstrap(tree, filePath, functionName, importPath, args = []) {
|
|
78
|
+
const sourceFile = createSourceFile(tree, filePath);
|
|
79
|
+
const bootstrapCall = findBootstrapApplicationCall(sourceFile);
|
|
80
|
+
const addImports = (file, recorder) => {
|
|
81
|
+
const change = (0, ast_utils_1.insertImport)(file, file.getText(), functionName, importPath);
|
|
82
|
+
if (change instanceof change_1.InsertChange) {
|
|
84
83
|
recorder.insertLeft(change.pos, change.toAdd);
|
|
85
84
|
}
|
|
86
85
|
};
|
|
87
86
|
if (!bootstrapCall) {
|
|
88
|
-
throw new SchematicsException(
|
|
87
|
+
throw new schematics_1.SchematicsException(`Could not find bootstrapApplication call in ${filePath}`);
|
|
89
88
|
}
|
|
90
|
-
|
|
89
|
+
const providersCall = ts.factory.createCallExpression(ts.factory.createIdentifier(functionName), undefined, args);
|
|
91
90
|
// If there's only one argument, we have to create a new object literal.
|
|
92
91
|
if (bootstrapCall.arguments.length === 1) {
|
|
93
|
-
|
|
94
|
-
addNewAppConfigToCall(bootstrapCall, providersCall,
|
|
95
|
-
addImports(sourceFile,
|
|
96
|
-
tree.commitUpdate(
|
|
92
|
+
const recorder = tree.beginUpdate(filePath);
|
|
93
|
+
addNewAppConfigToCall(bootstrapCall, providersCall, recorder);
|
|
94
|
+
addImports(sourceFile, recorder);
|
|
95
|
+
tree.commitUpdate(recorder);
|
|
97
96
|
return filePath;
|
|
98
97
|
}
|
|
99
98
|
// If the config is a `mergeApplicationProviders` call, add another config to it.
|
|
100
99
|
if (isMergeAppConfigCall(bootstrapCall.arguments[1])) {
|
|
101
|
-
|
|
102
|
-
addNewAppConfigToCall(bootstrapCall.arguments[1], providersCall,
|
|
103
|
-
addImports(sourceFile,
|
|
104
|
-
tree.commitUpdate(
|
|
100
|
+
const recorder = tree.beginUpdate(filePath);
|
|
101
|
+
addNewAppConfigToCall(bootstrapCall.arguments[1], providersCall, recorder);
|
|
102
|
+
addImports(sourceFile, recorder);
|
|
103
|
+
tree.commitUpdate(recorder);
|
|
105
104
|
return filePath;
|
|
106
105
|
}
|
|
107
106
|
// Otherwise attempt to merge into the current config.
|
|
108
|
-
|
|
107
|
+
const appConfig = findAppConfig(bootstrapCall, tree, filePath);
|
|
109
108
|
if (!appConfig) {
|
|
110
|
-
throw new SchematicsException(
|
|
109
|
+
throw new schematics_1.SchematicsException(`Could not statically analyze config in bootstrapApplication call in ${filePath}`);
|
|
111
110
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
const { filePath: configFilePath, node: config } = appConfig;
|
|
112
|
+
const recorder = tree.beginUpdate(configFilePath);
|
|
113
|
+
const providersLiteral = findProvidersLiteral(config);
|
|
115
114
|
addImports(config.getSourceFile(), recorder);
|
|
116
115
|
if (providersLiteral) {
|
|
117
116
|
// If there's a `providers` array, add the import to it.
|
|
@@ -129,12 +128,12 @@ export function addFunctionalProvidersToStandaloneBootstrap(tree, filePath, func
|
|
|
129
128
|
* @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from
|
|
130
129
|
* `@schematics/angular/utility` instead.
|
|
131
130
|
*/
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
function findBootstrapApplicationCall(sourceFile) {
|
|
132
|
+
const localName = findImportLocalName(sourceFile, 'bootstrapApplication', '@angular/platform-browser');
|
|
134
133
|
if (!localName) {
|
|
135
134
|
return null;
|
|
136
135
|
}
|
|
137
|
-
|
|
136
|
+
let result = null;
|
|
138
137
|
sourceFile.forEachChild(function walk(node) {
|
|
139
138
|
if (ts.isCallExpression(node) &&
|
|
140
139
|
ts.isIdentifier(node.expression) &&
|
|
@@ -149,24 +148,13 @@ export function findBootstrapApplicationCall(sourceFile) {
|
|
|
149
148
|
}
|
|
150
149
|
/** Finds the `providers` array literal within an application config. */
|
|
151
150
|
function findProvidersLiteral(config) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
prop.name.text === 'providers' &&
|
|
159
|
-
ts.isArrayLiteralExpression(prop.initializer)) {
|
|
160
|
-
return prop.initializer;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
165
|
-
finally {
|
|
166
|
-
try {
|
|
167
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
151
|
+
for (const prop of config.properties) {
|
|
152
|
+
if (ts.isPropertyAssignment(prop) &&
|
|
153
|
+
ts.isIdentifier(prop.name) &&
|
|
154
|
+
prop.name.text === 'providers' &&
|
|
155
|
+
ts.isArrayLiteralExpression(prop.initializer)) {
|
|
156
|
+
return prop.initializer;
|
|
168
157
|
}
|
|
169
|
-
finally { if (e_1) throw e_1.error; }
|
|
170
158
|
}
|
|
171
159
|
return null;
|
|
172
160
|
}
|
|
@@ -178,9 +166,9 @@ function findProvidersLiteral(config) {
|
|
|
178
166
|
*/
|
|
179
167
|
function findAppConfig(bootstrapCall, tree, filePath) {
|
|
180
168
|
if (bootstrapCall.arguments.length > 1) {
|
|
181
|
-
|
|
169
|
+
const config = bootstrapCall.arguments[1];
|
|
182
170
|
if (ts.isObjectLiteralExpression(config)) {
|
|
183
|
-
return { filePath
|
|
171
|
+
return { filePath, node: config };
|
|
184
172
|
}
|
|
185
173
|
if (ts.isIdentifier(config)) {
|
|
186
174
|
return resolveAppConfigFromIdentifier(config, tree, filePath);
|
|
@@ -195,56 +183,34 @@ function findAppConfig(bootstrapCall, tree, filePath) {
|
|
|
195
183
|
* @param bootstapFilePath Path of the bootstrap call.
|
|
196
184
|
*/
|
|
197
185
|
function resolveAppConfigFromIdentifier(identifier, tree, bootstapFilePath) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
186
|
+
const sourceFile = identifier.getSourceFile();
|
|
187
|
+
for (const node of sourceFile.statements) {
|
|
188
|
+
// Only look at relative imports. This will break if the app uses a path
|
|
189
|
+
// mapping to refer to the import, but in order to resolve those, we would
|
|
190
|
+
// need knowledge about the entire program.
|
|
191
|
+
if (!ts.isImportDeclaration(node) ||
|
|
192
|
+
!node.importClause?.namedBindings ||
|
|
193
|
+
!ts.isNamedImports(node.importClause.namedBindings) ||
|
|
194
|
+
!ts.isStringLiteralLike(node.moduleSpecifier) ||
|
|
195
|
+
!node.moduleSpecifier.text.startsWith('.')) {
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
for (const specifier of node.importClause.namedBindings.elements) {
|
|
199
|
+
if (specifier.name.text !== identifier.text) {
|
|
212
200
|
continue;
|
|
213
201
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
// operate on individual files, not the entire program.
|
|
223
|
-
var filePath = join(dirname(bootstapFilePath), node.moduleSpecifier.text + '.ts');
|
|
224
|
-
var importedSourceFile = createSourceFile(tree, filePath);
|
|
225
|
-
var resolvedVariable = findAppConfigFromVariableName(importedSourceFile, (specifier.propertyName || specifier.name).text);
|
|
226
|
-
if (resolvedVariable) {
|
|
227
|
-
return { filePath: filePath, node: resolvedVariable };
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
232
|
-
finally {
|
|
233
|
-
try {
|
|
234
|
-
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
235
|
-
}
|
|
236
|
-
finally { if (e_3) throw e_3.error; }
|
|
202
|
+
// Look for a variable with the imported name in the file. Note that ideally we would use
|
|
203
|
+
// the type checker to resolve this, but we can't because these utilities are set up to
|
|
204
|
+
// operate on individual files, not the entire program.
|
|
205
|
+
const filePath = (0, path_1.join)((0, path_1.dirname)(bootstapFilePath), node.moduleSpecifier.text + '.ts');
|
|
206
|
+
const importedSourceFile = createSourceFile(tree, filePath);
|
|
207
|
+
const resolvedVariable = findAppConfigFromVariableName(importedSourceFile, (specifier.propertyName || specifier.name).text);
|
|
208
|
+
if (resolvedVariable) {
|
|
209
|
+
return { filePath, node: resolvedVariable };
|
|
237
210
|
}
|
|
238
211
|
}
|
|
239
212
|
}
|
|
240
|
-
|
|
241
|
-
finally {
|
|
242
|
-
try {
|
|
243
|
-
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
244
|
-
}
|
|
245
|
-
finally { if (e_2) throw e_2.error; }
|
|
246
|
-
}
|
|
247
|
-
var variableInSameFile = findAppConfigFromVariableName(sourceFile, identifier.text);
|
|
213
|
+
const variableInSameFile = findAppConfigFromVariableName(sourceFile, identifier.text);
|
|
248
214
|
return variableInSameFile
|
|
249
215
|
? { filePath: bootstapFilePath, node: variableInSameFile }
|
|
250
216
|
: null;
|
|
@@ -255,39 +221,18 @@ function resolveAppConfigFromIdentifier(identifier, tree, bootstapFilePath) {
|
|
|
255
221
|
* @param variableName Name of the variable containing the config.
|
|
256
222
|
*/
|
|
257
223
|
function findAppConfigFromVariableName(sourceFile, variableName) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
if (ts.isIdentifier(decl.name) &&
|
|
267
|
-
decl.name.text === variableName &&
|
|
268
|
-
decl.initializer &&
|
|
269
|
-
ts.isObjectLiteralExpression(decl.initializer)) {
|
|
270
|
-
return decl.initializer;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
275
|
-
finally {
|
|
276
|
-
try {
|
|
277
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
278
|
-
}
|
|
279
|
-
finally { if (e_5) throw e_5.error; }
|
|
224
|
+
for (const node of sourceFile.statements) {
|
|
225
|
+
if (ts.isVariableStatement(node)) {
|
|
226
|
+
for (const decl of node.declarationList.declarations) {
|
|
227
|
+
if (ts.isIdentifier(decl.name) &&
|
|
228
|
+
decl.name.text === variableName &&
|
|
229
|
+
decl.initializer &&
|
|
230
|
+
ts.isObjectLiteralExpression(decl.initializer)) {
|
|
231
|
+
return decl.initializer;
|
|
280
232
|
}
|
|
281
233
|
}
|
|
282
234
|
}
|
|
283
235
|
}
|
|
284
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
285
|
-
finally {
|
|
286
|
-
try {
|
|
287
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
288
|
-
}
|
|
289
|
-
finally { if (e_4) throw e_4.error; }
|
|
290
|
-
}
|
|
291
236
|
return null;
|
|
292
237
|
}
|
|
293
238
|
/**
|
|
@@ -297,47 +242,26 @@ function findAppConfigFromVariableName(sourceFile, variableName) {
|
|
|
297
242
|
* @param moduleName Name of the module from which the symbol is imported.
|
|
298
243
|
*/
|
|
299
244
|
function findImportLocalName(sourceFile, name, moduleName) {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
!ts.isStringLiteral(node.moduleSpecifier) ||
|
|
307
|
-
node.moduleSpecifier.text !== moduleName) {
|
|
308
|
-
continue;
|
|
309
|
-
}
|
|
310
|
-
// Filter out imports that don't have the right shape.
|
|
311
|
-
if (!node.importClause ||
|
|
312
|
-
!node.importClause.namedBindings ||
|
|
313
|
-
!ts.isNamedImports(node.importClause.namedBindings)) {
|
|
314
|
-
continue;
|
|
315
|
-
}
|
|
316
|
-
try {
|
|
317
|
-
// Look through the elements of the declaration for the specific import.
|
|
318
|
-
for (var _e = (e_7 = void 0, __values(node.importClause.namedBindings.elements)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
319
|
-
var element = _f.value;
|
|
320
|
-
if ((element.propertyName || element.name).text === name) {
|
|
321
|
-
// The local name is always in `name`.
|
|
322
|
-
return element.name.text;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
327
|
-
finally {
|
|
328
|
-
try {
|
|
329
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
330
|
-
}
|
|
331
|
-
finally { if (e_7) throw e_7.error; }
|
|
332
|
-
}
|
|
245
|
+
for (const node of sourceFile.statements) {
|
|
246
|
+
// Only look for top-level imports.
|
|
247
|
+
if (!ts.isImportDeclaration(node) ||
|
|
248
|
+
!ts.isStringLiteral(node.moduleSpecifier) ||
|
|
249
|
+
node.moduleSpecifier.text !== moduleName) {
|
|
250
|
+
continue;
|
|
333
251
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
252
|
+
// Filter out imports that don't have the right shape.
|
|
253
|
+
if (!node.importClause ||
|
|
254
|
+
!node.importClause.namedBindings ||
|
|
255
|
+
!ts.isNamedImports(node.importClause.namedBindings)) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
// Look through the elements of the declaration for the specific import.
|
|
259
|
+
for (const element of node.importClause.namedBindings.elements) {
|
|
260
|
+
if ((element.propertyName || element.name).text === name) {
|
|
261
|
+
// The local name is always in `name`.
|
|
262
|
+
return element.name.text;
|
|
263
|
+
}
|
|
339
264
|
}
|
|
340
|
-
finally { if (e_6) throw e_6.error; }
|
|
341
265
|
}
|
|
342
266
|
return null;
|
|
343
267
|
}
|
|
@@ -352,11 +276,12 @@ function createSourceFile(tree, filePath) {
|
|
|
352
276
|
* @param recorder Recorder to which to log the change.
|
|
353
277
|
*/
|
|
354
278
|
function addNewAppConfigToCall(call, expression, recorder) {
|
|
355
|
-
|
|
279
|
+
const newCall = ts.factory.updateCallExpression(call, call.expression, call.typeArguments, [
|
|
280
|
+
...call.arguments,
|
|
356
281
|
ts.factory.createObjectLiteralExpression([
|
|
357
282
|
ts.factory.createPropertyAssignment('providers', ts.factory.createArrayLiteralExpression([expression])),
|
|
358
283
|
], true),
|
|
359
|
-
]
|
|
284
|
+
]);
|
|
360
285
|
recorder.remove(call.getStart(), call.getWidth());
|
|
361
286
|
recorder.insertRight(call.getStart(), ts
|
|
362
287
|
.createPrinter()
|
|
@@ -369,9 +294,10 @@ function addNewAppConfigToCall(call, expression, recorder) {
|
|
|
369
294
|
* @param recorder Recorder to which to log the change.
|
|
370
295
|
*/
|
|
371
296
|
function addElementToArray(node, element, recorder) {
|
|
372
|
-
|
|
297
|
+
const newLiteral = ts.factory.updateArrayLiteralExpression(node, [
|
|
298
|
+
...node.elements,
|
|
373
299
|
element,
|
|
374
|
-
]
|
|
300
|
+
]);
|
|
375
301
|
recorder.remove(node.getStart(), node.getWidth());
|
|
376
302
|
recorder.insertRight(node.getStart(), ts
|
|
377
303
|
.createPrinter()
|
|
@@ -384,9 +310,10 @@ function addElementToArray(node, element, recorder) {
|
|
|
384
310
|
* @param recorder Recorder to which to log the change.
|
|
385
311
|
*/
|
|
386
312
|
function addProvidersToObjectLiteral(node, expression, recorder) {
|
|
387
|
-
|
|
313
|
+
const newOptionsLiteral = ts.factory.updateObjectLiteralExpression(node, [
|
|
314
|
+
...node.properties,
|
|
388
315
|
ts.factory.createPropertyAssignment('providers', ts.factory.createArrayLiteralExpression([expression])),
|
|
389
|
-
]
|
|
316
|
+
]);
|
|
390
317
|
recorder.remove(node.getStart(), node.getWidth());
|
|
391
318
|
recorder.insertRight(node.getStart(), ts
|
|
392
319
|
.createPrinter()
|
|
@@ -397,7 +324,7 @@ function isMergeAppConfigCall(node) {
|
|
|
397
324
|
if (!ts.isCallExpression(node)) {
|
|
398
325
|
return false;
|
|
399
326
|
}
|
|
400
|
-
|
|
327
|
+
const localName = findImportLocalName(node.getSourceFile(), 'mergeApplicationConfig', '@angular/core');
|
|
401
328
|
return (!!localName &&
|
|
402
329
|
ts.isIdentifier(node.expression) &&
|
|
403
330
|
node.expression.text === localName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../../../../modules/data/schematics-core/utility/standalone.ts"],"names":[],"mappings":"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","sourcesContent":["// copied from https://github.com/angular/angular-cli/blob/17.3.x/packages/schematics/angular/private/standalone.ts\nimport {\n SchematicsException,\n Tree,\n UpdateRecorder,\n} from '@angular-devkit/schematics';\nimport { dirname, join } from 'path';\nimport { insertImport } from './ast-utils';\nimport { InsertChange } from './change';\nimport * as ts from 'typescript';\n\n/** App config that was resolved to its source node. */\ninterface ResolvedAppConfig {\n /** Tree-relative path of the file containing the app config. */\n filePath: string;\n\n /** Node defining the app config. */\n node: ts.ObjectLiteralExpression;\n}\n\n/**\n * Checks whether a providers function is being called in a `bootstrapApplication` call.\n * @param tree File tree of the project.\n * @param filePath Path of the file in which to check.\n * @param functionName Name of the function to search for.\n * @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from\n * `@schematics/angular/utility` instead.\n */\nexport function callsProvidersFunction(\n tree: Tree,\n filePath: string,\n functionName: string\n): boolean {\n const sourceFile = createSourceFile(tree, filePath);\n const bootstrapCall = findBootstrapApplicationCall(sourceFile);\n const appConfig = bootstrapCall\n ? findAppConfig(bootstrapCall, tree, filePath)\n : null;\n const providersLiteral = appConfig\n ? findProvidersLiteral(appConfig.node)\n : null;\n\n return !!providersLiteral?.elements.some(\n (el) =>\n ts.isCallExpression(el) &&\n ts.isIdentifier(el.expression) &&\n el.expression.text === functionName\n );\n}\n\n/**\n * Adds a providers function call to the `bootstrapApplication` call.\n * @param tree File tree of the project.\n * @param filePath Path to the file that should be updated.\n * @param functionName Name of the function that should be called.\n * @param importPath Path from which to import the function.\n * @param args Arguments to use when calling the function.\n * @return The file path that the provider was added to.\n * @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from\n * `@schematics/angular/utility` instead.\n */\nexport function addFunctionalProvidersToStandaloneBootstrap(\n tree: Tree,\n filePath: string,\n functionName: string,\n importPath: string,\n args: ts.Expression[] = []\n): string {\n const sourceFile = createSourceFile(tree, filePath);\n const bootstrapCall = findBootstrapApplicationCall(sourceFile);\n const addImports = (file: ts.SourceFile, recorder: UpdateRecorder) => {\n const change = insertImport(file, file.getText(), functionName, importPath);\n\n if (change instanceof InsertChange) {\n recorder.insertLeft(change.pos, change.toAdd);\n }\n };\n\n if (!bootstrapCall) {\n throw new SchematicsException(\n `Could not find bootstrapApplication call in ${filePath}`\n );\n }\n\n const providersCall = ts.factory.createCallExpression(\n ts.factory.createIdentifier(functionName),\n undefined,\n args\n );\n\n // If there's only one argument, we have to create a new object literal.\n if (bootstrapCall.arguments.length === 1) {\n const recorder = tree.beginUpdate(filePath);\n addNewAppConfigToCall(bootstrapCall, providersCall, recorder);\n addImports(sourceFile, recorder);\n tree.commitUpdate(recorder);\n\n return filePath;\n }\n\n // If the config is a `mergeApplicationProviders` call, add another config to it.\n if (isMergeAppConfigCall(bootstrapCall.arguments[1])) {\n const recorder = tree.beginUpdate(filePath);\n addNewAppConfigToCall(bootstrapCall.arguments[1], providersCall, recorder);\n addImports(sourceFile, recorder);\n tree.commitUpdate(recorder);\n\n return filePath;\n }\n\n // Otherwise attempt to merge into the current config.\n const appConfig = findAppConfig(bootstrapCall, tree, filePath);\n\n if (!appConfig) {\n throw new SchematicsException(\n `Could not statically analyze config in bootstrapApplication call in ${filePath}`\n );\n }\n\n const { filePath: configFilePath, node: config } = appConfig;\n const recorder = tree.beginUpdate(configFilePath);\n const providersLiteral = findProvidersLiteral(config);\n\n addImports(config.getSourceFile(), recorder);\n\n if (providersLiteral) {\n // If there's a `providers` array, add the import to it.\n addElementToArray(providersLiteral, providersCall, recorder);\n } else {\n // Otherwise add a `providers` array to the existing object literal.\n addProvidersToObjectLiteral(config, providersCall, recorder);\n }\n\n tree.commitUpdate(recorder);\n\n return configFilePath;\n}\n\n/**\n * Finds the call to `bootstrapApplication` within a file.\n * @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from\n * `@schematics/angular/utility` instead.\n */\nexport function findBootstrapApplicationCall(\n sourceFile: ts.SourceFile\n): ts.CallExpression | null {\n const localName = findImportLocalName(\n sourceFile,\n 'bootstrapApplication',\n '@angular/platform-browser'\n );\n\n if (!localName) {\n return null;\n }\n\n let result: ts.CallExpression | null = null;\n\n sourceFile.forEachChild(function walk(node) {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === localName\n ) {\n result = node;\n }\n\n if (!result) {\n node.forEachChild(walk);\n }\n });\n\n return result;\n}\n\n/** Finds the `providers` array literal within an application config. */\nfunction findProvidersLiteral(\n config: ts.ObjectLiteralExpression\n): ts.ArrayLiteralExpression | null {\n for (const prop of config.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'providers' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n return prop.initializer;\n }\n }\n\n return null;\n}\n\n/**\n * Resolves the node that defines the app config from a bootstrap call.\n * @param bootstrapCall Call for which to resolve the config.\n * @param tree File tree of the project.\n * @param filePath File path of the bootstrap call.\n */\nfunction findAppConfig(\n bootstrapCall: ts.CallExpression,\n tree: Tree,\n filePath: string\n): ResolvedAppConfig | null {\n if (bootstrapCall.arguments.length > 1) {\n const config = bootstrapCall.arguments[1];\n\n if (ts.isObjectLiteralExpression(config)) {\n return { filePath, node: config };\n }\n\n if (ts.isIdentifier(config)) {\n return resolveAppConfigFromIdentifier(config, tree, filePath);\n }\n }\n\n return null;\n}\n\n/**\n * Resolves the app config from an identifier referring to it.\n * @param identifier Identifier referring to the app config.\n * @param tree File tree of the project.\n * @param bootstapFilePath Path of the bootstrap call.\n */\nfunction resolveAppConfigFromIdentifier(\n identifier: ts.Identifier,\n tree: Tree,\n bootstapFilePath: string\n): ResolvedAppConfig | null {\n const sourceFile = identifier.getSourceFile();\n\n for (const node of sourceFile.statements) {\n // Only look at relative imports. This will break if the app uses a path\n // mapping to refer to the import, but in order to resolve those, we would\n // need knowledge about the entire program.\n if (\n !ts.isImportDeclaration(node) ||\n !node.importClause?.namedBindings ||\n !ts.isNamedImports(node.importClause.namedBindings) ||\n !ts.isStringLiteralLike(node.moduleSpecifier) ||\n !node.moduleSpecifier.text.startsWith('.')\n ) {\n continue;\n }\n\n for (const specifier of node.importClause.namedBindings.elements) {\n if (specifier.name.text !== identifier.text) {\n continue;\n }\n\n // Look for a variable with the imported name in the file. Note that ideally we would use\n // the type checker to resolve this, but we can't because these utilities are set up to\n // operate on individual files, not the entire program.\n const filePath = join(\n dirname(bootstapFilePath),\n node.moduleSpecifier.text + '.ts'\n );\n const importedSourceFile = createSourceFile(tree, filePath);\n const resolvedVariable = findAppConfigFromVariableName(\n importedSourceFile,\n (specifier.propertyName || specifier.name).text\n );\n\n if (resolvedVariable) {\n return { filePath, node: resolvedVariable };\n }\n }\n }\n\n const variableInSameFile = findAppConfigFromVariableName(\n sourceFile,\n identifier.text\n );\n\n return variableInSameFile\n ? { filePath: bootstapFilePath, node: variableInSameFile }\n : null;\n}\n\n/**\n * Finds an app config within the top-level variables of a file.\n * @param sourceFile File in which to search for the config.\n * @param variableName Name of the variable containing the config.\n */\nfunction findAppConfigFromVariableName(\n sourceFile: ts.SourceFile,\n variableName: string\n): ts.ObjectLiteralExpression | null {\n for (const node of sourceFile.statements) {\n if (ts.isVariableStatement(node)) {\n for (const decl of node.declarationList.declarations) {\n if (\n ts.isIdentifier(decl.name) &&\n decl.name.text === variableName &&\n decl.initializer &&\n ts.isObjectLiteralExpression(decl.initializer)\n ) {\n return decl.initializer;\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Finds the local name of an imported symbol. Could be the symbol name itself or its alias.\n * @param sourceFile File within which to search for the import.\n * @param name Actual name of the import, not its local alias.\n * @param moduleName Name of the module from which the symbol is imported.\n */\nfunction findImportLocalName(\n sourceFile: ts.SourceFile,\n name: string,\n moduleName: string\n): string | null {\n for (const node of sourceFile.statements) {\n // Only look for top-level imports.\n if (\n !ts.isImportDeclaration(node) ||\n !ts.isStringLiteral(node.moduleSpecifier) ||\n node.moduleSpecifier.text !== moduleName\n ) {\n continue;\n }\n\n // Filter out imports that don't have the right shape.\n if (\n !node.importClause ||\n !node.importClause.namedBindings ||\n !ts.isNamedImports(node.importClause.namedBindings)\n ) {\n continue;\n }\n\n // Look through the elements of the declaration for the specific import.\n for (const element of node.importClause.namedBindings.elements) {\n if ((element.propertyName || element.name).text === name) {\n // The local name is always in `name`.\n return element.name.text;\n }\n }\n }\n\n return null;\n}\n\n/** Creates a source file from a file path within a project. */\nfunction createSourceFile(tree: Tree, filePath: string): ts.SourceFile {\n return ts.createSourceFile(\n filePath,\n tree.readText(filePath),\n ts.ScriptTarget.Latest,\n true\n );\n}\n\n/**\n * Creates a new app config object literal and adds it to a call expression as an argument.\n * @param call Call to which to add the config.\n * @param expression Expression that should inserted into the new config.\n * @param recorder Recorder to which to log the change.\n */\nfunction addNewAppConfigToCall(\n call: ts.CallExpression,\n expression: ts.Expression,\n recorder: UpdateRecorder\n): void {\n const newCall = ts.factory.updateCallExpression(\n call,\n call.expression,\n call.typeArguments,\n [\n ...call.arguments,\n ts.factory.createObjectLiteralExpression(\n [\n ts.factory.createPropertyAssignment(\n 'providers',\n ts.factory.createArrayLiteralExpression([expression])\n ),\n ],\n true\n ),\n ]\n );\n\n recorder.remove(call.getStart(), call.getWidth());\n recorder.insertRight(\n call.getStart(),\n ts\n .createPrinter()\n .printNode(ts.EmitHint.Unspecified, newCall, call.getSourceFile())\n );\n}\n\n/**\n * Adds an element to an array literal expression.\n * @param node Array to which to add the element.\n * @param element Element to be added.\n * @param recorder Recorder to which to log the change.\n */\nfunction addElementToArray(\n node: ts.ArrayLiteralExpression,\n element: ts.Expression,\n recorder: UpdateRecorder\n): void {\n const newLiteral = ts.factory.updateArrayLiteralExpression(node, [\n ...node.elements,\n element,\n ]);\n recorder.remove(node.getStart(), node.getWidth());\n recorder.insertRight(\n node.getStart(),\n ts\n .createPrinter()\n .printNode(ts.EmitHint.Unspecified, newLiteral, node.getSourceFile())\n );\n}\n\n/**\n * Adds a `providers` property to an object literal.\n * @param node Literal to which to add the `providers`.\n * @param expression Provider that should be part of the generated `providers` array.\n * @param recorder Recorder to which to log the change.\n */\nfunction addProvidersToObjectLiteral(\n node: ts.ObjectLiteralExpression,\n expression: ts.Expression,\n recorder: UpdateRecorder\n) {\n const newOptionsLiteral = ts.factory.updateObjectLiteralExpression(node, [\n ...node.properties,\n ts.factory.createPropertyAssignment(\n 'providers',\n ts.factory.createArrayLiteralExpression([expression])\n ),\n ]);\n recorder.remove(node.getStart(), node.getWidth());\n recorder.insertRight(\n node.getStart(),\n ts\n .createPrinter()\n .printNode(\n ts.EmitHint.Unspecified,\n newOptionsLiteral,\n node.getSourceFile()\n )\n );\n}\n\n/** Checks whether a node is a call to `mergeApplicationConfig`. */\nfunction isMergeAppConfigCall(node: ts.Node): node is ts.CallExpression {\n if (!ts.isCallExpression(node)) {\n return false;\n }\n\n const localName = findImportLocalName(\n node.getSourceFile(),\n 'mergeApplicationConfig',\n '@angular/core'\n );\n\n return (\n !!localName &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === localName\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../../../../modules/data/schematics-core/utility/standalone.ts"],"names":[],"mappings":"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","sourcesContent":["// copied from https://github.com/angular/angular-cli/blob/17.3.x/packages/schematics/angular/private/standalone.ts\nimport {\n SchematicsException,\n Tree,\n UpdateRecorder,\n} from '@angular-devkit/schematics';\nimport { dirname, join } from 'path';\nimport { insertImport } from './ast-utils';\nimport { InsertChange } from './change';\nimport * as ts from 'typescript';\n\n/** App config that was resolved to its source node. */\ninterface ResolvedAppConfig {\n /** Tree-relative path of the file containing the app config. */\n filePath: string;\n\n /** Node defining the app config. */\n node: ts.ObjectLiteralExpression;\n}\n\n/**\n * Checks whether a providers function is being called in a `bootstrapApplication` call.\n * @param tree File tree of the project.\n * @param filePath Path of the file in which to check.\n * @param functionName Name of the function to search for.\n * @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from\n * `@schematics/angular/utility` instead.\n */\nexport function callsProvidersFunction(\n tree: Tree,\n filePath: string,\n functionName: string\n): boolean {\n const sourceFile = createSourceFile(tree, filePath);\n const bootstrapCall = findBootstrapApplicationCall(sourceFile);\n const appConfig = bootstrapCall\n ? findAppConfig(bootstrapCall, tree, filePath)\n : null;\n const providersLiteral = appConfig\n ? findProvidersLiteral(appConfig.node)\n : null;\n\n return !!providersLiteral?.elements.some(\n (el) =>\n ts.isCallExpression(el) &&\n ts.isIdentifier(el.expression) &&\n el.expression.text === functionName\n );\n}\n\n/**\n * Adds a providers function call to the `bootstrapApplication` call.\n * @param tree File tree of the project.\n * @param filePath Path to the file that should be updated.\n * @param functionName Name of the function that should be called.\n * @param importPath Path from which to import the function.\n * @param args Arguments to use when calling the function.\n * @return The file path that the provider was added to.\n * @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from\n * `@schematics/angular/utility` instead.\n */\nexport function addFunctionalProvidersToStandaloneBootstrap(\n tree: Tree,\n filePath: string,\n functionName: string,\n importPath: string,\n args: ts.Expression[] = []\n): string {\n const sourceFile = createSourceFile(tree, filePath);\n const bootstrapCall = findBootstrapApplicationCall(sourceFile);\n const addImports = (file: ts.SourceFile, recorder: UpdateRecorder) => {\n const change = insertImport(file, file.getText(), functionName, importPath);\n\n if (change instanceof InsertChange) {\n recorder.insertLeft(change.pos, change.toAdd);\n }\n };\n\n if (!bootstrapCall) {\n throw new SchematicsException(\n `Could not find bootstrapApplication call in ${filePath}`\n );\n }\n\n const providersCall = ts.factory.createCallExpression(\n ts.factory.createIdentifier(functionName),\n undefined,\n args\n );\n\n // If there's only one argument, we have to create a new object literal.\n if (bootstrapCall.arguments.length === 1) {\n const recorder = tree.beginUpdate(filePath);\n addNewAppConfigToCall(bootstrapCall, providersCall, recorder);\n addImports(sourceFile, recorder);\n tree.commitUpdate(recorder);\n\n return filePath;\n }\n\n // If the config is a `mergeApplicationProviders` call, add another config to it.\n if (isMergeAppConfigCall(bootstrapCall.arguments[1])) {\n const recorder = tree.beginUpdate(filePath);\n addNewAppConfigToCall(bootstrapCall.arguments[1], providersCall, recorder);\n addImports(sourceFile, recorder);\n tree.commitUpdate(recorder);\n\n return filePath;\n }\n\n // Otherwise attempt to merge into the current config.\n const appConfig = findAppConfig(bootstrapCall, tree, filePath);\n\n if (!appConfig) {\n throw new SchematicsException(\n `Could not statically analyze config in bootstrapApplication call in ${filePath}`\n );\n }\n\n const { filePath: configFilePath, node: config } = appConfig;\n const recorder = tree.beginUpdate(configFilePath);\n const providersLiteral = findProvidersLiteral(config);\n\n addImports(config.getSourceFile(), recorder);\n\n if (providersLiteral) {\n // If there's a `providers` array, add the import to it.\n addElementToArray(providersLiteral, providersCall, recorder);\n } else {\n // Otherwise add a `providers` array to the existing object literal.\n addProvidersToObjectLiteral(config, providersCall, recorder);\n }\n\n tree.commitUpdate(recorder);\n\n return configFilePath;\n}\n\n/**\n * Finds the call to `bootstrapApplication` within a file.\n * @deprecated Private utility that will be removed. Use `addRootImport` or `addRootProvider` from\n * `@schematics/angular/utility` instead.\n */\nexport function findBootstrapApplicationCall(\n sourceFile: ts.SourceFile\n): ts.CallExpression | null {\n const localName = findImportLocalName(\n sourceFile,\n 'bootstrapApplication',\n '@angular/platform-browser'\n );\n\n if (!localName) {\n return null;\n }\n\n let result: ts.CallExpression | null = null;\n\n sourceFile.forEachChild(function walk(node) {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === localName\n ) {\n result = node;\n }\n\n if (!result) {\n node.forEachChild(walk);\n }\n });\n\n return result;\n}\n\n/** Finds the `providers` array literal within an application config. */\nfunction findProvidersLiteral(\n config: ts.ObjectLiteralExpression\n): ts.ArrayLiteralExpression | null {\n for (const prop of config.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'providers' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n return prop.initializer;\n }\n }\n\n return null;\n}\n\n/**\n * Resolves the node that defines the app config from a bootstrap call.\n * @param bootstrapCall Call for which to resolve the config.\n * @param tree File tree of the project.\n * @param filePath File path of the bootstrap call.\n */\nfunction findAppConfig(\n bootstrapCall: ts.CallExpression,\n tree: Tree,\n filePath: string\n): ResolvedAppConfig | null {\n if (bootstrapCall.arguments.length > 1) {\n const config = bootstrapCall.arguments[1];\n\n if (ts.isObjectLiteralExpression(config)) {\n return { filePath, node: config };\n }\n\n if (ts.isIdentifier(config)) {\n return resolveAppConfigFromIdentifier(config, tree, filePath);\n }\n }\n\n return null;\n}\n\n/**\n * Resolves the app config from an identifier referring to it.\n * @param identifier Identifier referring to the app config.\n * @param tree File tree of the project.\n * @param bootstapFilePath Path of the bootstrap call.\n */\nfunction resolveAppConfigFromIdentifier(\n identifier: ts.Identifier,\n tree: Tree,\n bootstapFilePath: string\n): ResolvedAppConfig | null {\n const sourceFile = identifier.getSourceFile();\n\n for (const node of sourceFile.statements) {\n // Only look at relative imports. This will break if the app uses a path\n // mapping to refer to the import, but in order to resolve those, we would\n // need knowledge about the entire program.\n if (\n !ts.isImportDeclaration(node) ||\n !node.importClause?.namedBindings ||\n !ts.isNamedImports(node.importClause.namedBindings) ||\n !ts.isStringLiteralLike(node.moduleSpecifier) ||\n !node.moduleSpecifier.text.startsWith('.')\n ) {\n continue;\n }\n\n for (const specifier of node.importClause.namedBindings.elements) {\n if (specifier.name.text !== identifier.text) {\n continue;\n }\n\n // Look for a variable with the imported name in the file. Note that ideally we would use\n // the type checker to resolve this, but we can't because these utilities are set up to\n // operate on individual files, not the entire program.\n const filePath = join(\n dirname(bootstapFilePath),\n node.moduleSpecifier.text + '.ts'\n );\n const importedSourceFile = createSourceFile(tree, filePath);\n const resolvedVariable = findAppConfigFromVariableName(\n importedSourceFile,\n (specifier.propertyName || specifier.name).text\n );\n\n if (resolvedVariable) {\n return { filePath, node: resolvedVariable };\n }\n }\n }\n\n const variableInSameFile = findAppConfigFromVariableName(\n sourceFile,\n identifier.text\n );\n\n return variableInSameFile\n ? { filePath: bootstapFilePath, node: variableInSameFile }\n : null;\n}\n\n/**\n * Finds an app config within the top-level variables of a file.\n * @param sourceFile File in which to search for the config.\n * @param variableName Name of the variable containing the config.\n */\nfunction findAppConfigFromVariableName(\n sourceFile: ts.SourceFile,\n variableName: string\n): ts.ObjectLiteralExpression | null {\n for (const node of sourceFile.statements) {\n if (ts.isVariableStatement(node)) {\n for (const decl of node.declarationList.declarations) {\n if (\n ts.isIdentifier(decl.name) &&\n decl.name.text === variableName &&\n decl.initializer &&\n ts.isObjectLiteralExpression(decl.initializer)\n ) {\n return decl.initializer;\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Finds the local name of an imported symbol. Could be the symbol name itself or its alias.\n * @param sourceFile File within which to search for the import.\n * @param name Actual name of the import, not its local alias.\n * @param moduleName Name of the module from which the symbol is imported.\n */\nfunction findImportLocalName(\n sourceFile: ts.SourceFile,\n name: string,\n moduleName: string\n): string | null {\n for (const node of sourceFile.statements) {\n // Only look for top-level imports.\n if (\n !ts.isImportDeclaration(node) ||\n !ts.isStringLiteral(node.moduleSpecifier) ||\n node.moduleSpecifier.text !== moduleName\n ) {\n continue;\n }\n\n // Filter out imports that don't have the right shape.\n if (\n !node.importClause ||\n !node.importClause.namedBindings ||\n !ts.isNamedImports(node.importClause.namedBindings)\n ) {\n continue;\n }\n\n // Look through the elements of the declaration for the specific import.\n for (const element of node.importClause.namedBindings.elements) {\n if ((element.propertyName || element.name).text === name) {\n // The local name is always in `name`.\n return element.name.text;\n }\n }\n }\n\n return null;\n}\n\n/** Creates a source file from a file path within a project. */\nfunction createSourceFile(tree: Tree, filePath: string): ts.SourceFile {\n return ts.createSourceFile(\n filePath,\n tree.readText(filePath),\n ts.ScriptTarget.Latest,\n true\n );\n}\n\n/**\n * Creates a new app config object literal and adds it to a call expression as an argument.\n * @param call Call to which to add the config.\n * @param expression Expression that should inserted into the new config.\n * @param recorder Recorder to which to log the change.\n */\nfunction addNewAppConfigToCall(\n call: ts.CallExpression,\n expression: ts.Expression,\n recorder: UpdateRecorder\n): void {\n const newCall = ts.factory.updateCallExpression(\n call,\n call.expression,\n call.typeArguments,\n [\n ...call.arguments,\n ts.factory.createObjectLiteralExpression(\n [\n ts.factory.createPropertyAssignment(\n 'providers',\n ts.factory.createArrayLiteralExpression([expression])\n ),\n ],\n true\n ),\n ]\n );\n\n recorder.remove(call.getStart(), call.getWidth());\n recorder.insertRight(\n call.getStart(),\n ts\n .createPrinter()\n .printNode(ts.EmitHint.Unspecified, newCall, call.getSourceFile())\n );\n}\n\n/**\n * Adds an element to an array literal expression.\n * @param node Array to which to add the element.\n * @param element Element to be added.\n * @param recorder Recorder to which to log the change.\n */\nfunction addElementToArray(\n node: ts.ArrayLiteralExpression,\n element: ts.Expression,\n recorder: UpdateRecorder\n): void {\n const newLiteral = ts.factory.updateArrayLiteralExpression(node, [\n ...node.elements,\n element,\n ]);\n recorder.remove(node.getStart(), node.getWidth());\n recorder.insertRight(\n node.getStart(),\n ts\n .createPrinter()\n .printNode(ts.EmitHint.Unspecified, newLiteral, node.getSourceFile())\n );\n}\n\n/**\n * Adds a `providers` property to an object literal.\n * @param node Literal to which to add the `providers`.\n * @param expression Provider that should be part of the generated `providers` array.\n * @param recorder Recorder to which to log the change.\n */\nfunction addProvidersToObjectLiteral(\n node: ts.ObjectLiteralExpression,\n expression: ts.Expression,\n recorder: UpdateRecorder\n) {\n const newOptionsLiteral = ts.factory.updateObjectLiteralExpression(node, [\n ...node.properties,\n ts.factory.createPropertyAssignment(\n 'providers',\n ts.factory.createArrayLiteralExpression([expression])\n ),\n ]);\n recorder.remove(node.getStart(), node.getWidth());\n recorder.insertRight(\n node.getStart(),\n ts\n .createPrinter()\n .printNode(\n ts.EmitHint.Unspecified,\n newOptionsLiteral,\n node.getSourceFile()\n )\n );\n}\n\n/** Checks whether a node is a call to `mergeApplicationConfig`. */\nfunction isMergeAppConfigCall(node: ts.Node): node is ts.CallExpression {\n if (!ts.isCallExpression(node)) {\n return false;\n }\n\n const localName = findImportLocalName(\n node.getSourceFile(),\n 'mergeApplicationConfig',\n '@angular/core'\n );\n\n return (\n !!localName &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === localName\n );\n}\n"]}
|