@ngrx/data 20.1.0 → 21.0.0-rc.0
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/fesm2022/ngrx-data.mjs +86 -86
- package/package.json +8 -8
- package/schematics/ng-add/index.js +39 -42
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.js +0 -2
- package/schematics-core/index.js +24 -75
- package/schematics-core/index.js.map +1 -1
- package/schematics-core/utility/ast-utils.js +28 -44
- package/schematics-core/utility/ast-utils.js.map +1 -1
- package/schematics-core/utility/change.js +8 -15
- package/schematics-core/utility/change.js.map +1 -1
- package/schematics-core/utility/config.js +4 -8
- package/schematics-core/utility/config.js.map +1 -1
- package/schematics-core/utility/find-component.js +17 -22
- package/schematics-core/utility/find-component.js.map +1 -1
- package/schematics-core/utility/find-module.js +19 -24
- package/schematics-core/utility/find-module.js.map +1 -1
- package/schematics-core/utility/json-utilts.js +1 -4
- package/schematics-core/utility/json-utilts.js.map +1 -1
- package/schematics-core/utility/libs-version.js +1 -4
- package/schematics-core/utility/libs-version.js.map +1 -1
- package/schematics-core/utility/ngrx-utils.js +28 -36
- package/schematics-core/utility/ngrx-utils.js.map +1 -1
- package/schematics-core/utility/package.js +1 -4
- package/schematics-core/utility/package.js.map +1 -1
- package/schematics-core/utility/parse-name.js +5 -8
- package/schematics-core/utility/parse-name.js.map +1 -1
- package/schematics-core/utility/project.js +9 -15
- package/schematics-core/utility/project.js.map +1 -1
- package/schematics-core/utility/standalone.js +13 -18
- package/schematics-core/utility/standalone.js.map +1 -1
- package/schematics-core/utility/strings.js +9 -20
- package/schematics-core/utility/strings.js.map +1 -1
- package/schematics-core/utility/update.js +4 -7
- package/schematics-core/utility/update.js.map +1 -1
- package/schematics-core/utility/visitors.js +16 -30
- package/schematics-core/utility/visitors.js.map +1 -1
- package/types/ngrx-data.d.ts +3465 -0
- package/index.d.ts +0 -6
- package/public_api.d.ts +0 -1
- package/src/actions/entity-action-factory.d.ts +0 -38
- package/src/actions/entity-action-guard.d.ts +0 -33
- package/src/actions/entity-action-operators.d.ts +0 -30
- package/src/actions/entity-action.d.ts +0 -37
- package/src/actions/entity-cache-action.d.ts +0 -147
- package/src/actions/entity-cache-change-set.d.ts +0 -66
- package/src/actions/entity-op.d.ts +0 -70
- package/src/actions/merge-strategy.d.ts +0 -20
- package/src/actions/update-response-data.d.ts +0 -20
- package/src/dataservices/data-service-error.d.ts +0 -18
- package/src/dataservices/default-data-service-config.d.ts +0 -27
- package/src/dataservices/default-data.service.d.ts +0 -57
- package/src/dataservices/entity-cache-data.service.d.ts +0 -58
- package/src/dataservices/entity-data.service.d.ts +0 -48
- package/src/dataservices/http-url-generator.d.ts +0 -94
- package/src/dataservices/interfaces.d.ts +0 -61
- package/src/dataservices/persistence-result-handler.service.d.ts +0 -30
- package/src/dispatchers/entity-cache-dispatcher.d.ts +0 -114
- package/src/dispatchers/entity-commands.d.ts +0 -217
- package/src/dispatchers/entity-dispatcher-base.d.ts +0 -269
- package/src/dispatchers/entity-dispatcher-default-options.d.ts +0 -23
- package/src/dispatchers/entity-dispatcher-factory.d.ts +0 -46
- package/src/dispatchers/entity-dispatcher.d.ts +0 -58
- package/src/effects/entity-cache-effects.d.ts +0 -46
- package/src/effects/entity-effects-scheduler.d.ts +0 -4
- package/src/effects/entity-effects.d.ts +0 -55
- package/src/entity-data-config.d.ts +0 -15
- package/src/entity-data-without-effects.module.d.ts +0 -15
- package/src/entity-data.module.d.ts +0 -15
- package/src/entity-metadata/entity-definition.d.ts +0 -16
- package/src/entity-metadata/entity-definition.service.d.ts +0 -62
- package/src/entity-metadata/entity-filters.d.ts +0 -12
- package/src/entity-metadata/entity-metadata.d.ts +0 -19
- package/src/entity-services/entity-collection-service-base.d.ts +0 -299
- package/src/entity-services/entity-collection-service-elements-factory.d.ts +0 -28
- package/src/entity-services/entity-collection-service-factory.d.ts +0 -22
- package/src/entity-services/entity-collection-service.d.ts +0 -37
- package/src/entity-services/entity-services-base.d.ts +0 -79
- package/src/entity-services/entity-services-elements.d.ts +0 -41
- package/src/entity-services/entity-services.d.ts +0 -50
- package/src/index.d.ts +0 -65
- package/src/provide-entity-data.d.ts +0 -78
- package/src/reducers/constants.d.ts +0 -8
- package/src/reducers/entity-cache-reducer.d.ts +0 -50
- package/src/reducers/entity-cache.d.ts +0 -4
- package/src/reducers/entity-change-tracker-base.d.ts +0 -181
- package/src/reducers/entity-change-tracker.d.ts +0 -169
- package/src/reducers/entity-collection-creator.d.ts +0 -15
- package/src/reducers/entity-collection-reducer-methods.d.ts +0 -365
- package/src/reducers/entity-collection-reducer-registry.d.ts +0 -47
- package/src/reducers/entity-collection-reducer.d.ts +0 -14
- package/src/reducers/entity-collection.d.ts +0 -41
- package/src/selectors/entity-cache-selector.d.ts +0 -7
- package/src/selectors/entity-selectors$.d.ts +0 -63
- package/src/selectors/entity-selectors.d.ts +0 -117
- package/src/utils/correlation-id-generator.d.ts +0 -20
- package/src/utils/default-logger.d.ts +0 -9
- package/src/utils/default-pluralizer.d.ts +0 -18
- package/src/utils/guid-fns.d.ts +0 -24
- package/src/utils/interfaces.d.ts +0 -16
- package/src/utils/utilities.d.ts +0 -26
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __values = (this && this.__values) || function(o) {
|
|
3
2
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
3
|
if (m) return m.call(o);
|
|
@@ -35,21 +34,6 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
35
34
|
}
|
|
36
35
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
37
36
|
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.findNodes = findNodes;
|
|
40
|
-
exports.getSourceNodes = getSourceNodes;
|
|
41
|
-
exports.insertAfterLastOccurrence = insertAfterLastOccurrence;
|
|
42
|
-
exports.getContentOfKeyLiteral = getContentOfKeyLiteral;
|
|
43
|
-
exports.getDecoratorMetadata = getDecoratorMetadata;
|
|
44
|
-
exports.addDeclarationToModule = addDeclarationToModule;
|
|
45
|
-
exports.addImportToModule = addImportToModule;
|
|
46
|
-
exports.addProviderToModule = addProviderToModule;
|
|
47
|
-
exports.addProviderToComponent = addProviderToComponent;
|
|
48
|
-
exports.addExportToModule = addExportToModule;
|
|
49
|
-
exports.addBootstrapToModule = addBootstrapToModule;
|
|
50
|
-
exports.insertImport = insertImport;
|
|
51
|
-
exports.replaceImport = replaceImport;
|
|
52
|
-
exports.containsProperty = containsProperty;
|
|
53
37
|
/* istanbul ignore file */
|
|
54
38
|
/**
|
|
55
39
|
* @license
|
|
@@ -58,8 +42,8 @@ exports.containsProperty = containsProperty;
|
|
|
58
42
|
* Use of this source code is governed by an MIT-style license that can be
|
|
59
43
|
* found in the LICENSE file at https://angular.io/license
|
|
60
44
|
*/
|
|
61
|
-
|
|
62
|
-
|
|
45
|
+
import * as ts from 'typescript';
|
|
46
|
+
import { InsertChange, NoopChange, createReplaceChange, createRemoveChange, } from './change';
|
|
63
47
|
/**
|
|
64
48
|
* Find all nodes from the AST in the subtree of node of SyntaxKind kind.
|
|
65
49
|
* @param node
|
|
@@ -67,7 +51,7 @@ var change_1 = require("./change");
|
|
|
67
51
|
* @param max The maximum number of items to return.
|
|
68
52
|
* @return all nodes of kind, or [] if none is found
|
|
69
53
|
*/
|
|
70
|
-
function findNodes(node, kind, max) {
|
|
54
|
+
export function findNodes(node, kind, max) {
|
|
71
55
|
var e_1, _a;
|
|
72
56
|
if (max === void 0) { max = Infinity; }
|
|
73
57
|
if (!node || max == 0) {
|
|
@@ -108,7 +92,7 @@ function findNodes(node, kind, max) {
|
|
|
108
92
|
* @param sourceFile The source file object.
|
|
109
93
|
* @returns {Observable<ts.Node>} An observable of all the nodes in the source.
|
|
110
94
|
*/
|
|
111
|
-
function getSourceNodes(sourceFile) {
|
|
95
|
+
export function getSourceNodes(sourceFile) {
|
|
112
96
|
var nodes = [sourceFile];
|
|
113
97
|
var result = [];
|
|
114
98
|
while (nodes.length > 0) {
|
|
@@ -142,7 +126,7 @@ function nodesByPosition(first, second) {
|
|
|
142
126
|
* @return Change instance
|
|
143
127
|
* @throw Error if toInsert is first occurence but fall back is not set
|
|
144
128
|
*/
|
|
145
|
-
function insertAfterLastOccurrence(nodes, toInsert, file, fallbackPos, syntaxKind) {
|
|
129
|
+
export function insertAfterLastOccurrence(nodes, toInsert, file, fallbackPos, syntaxKind) {
|
|
146
130
|
var lastItem = nodes.sort(nodesByPosition).pop();
|
|
147
131
|
if (!lastItem) {
|
|
148
132
|
throw new Error();
|
|
@@ -154,9 +138,9 @@ function insertAfterLastOccurrence(nodes, toInsert, file, fallbackPos, syntaxKin
|
|
|
154
138
|
throw new Error("tried to insert ".concat(toInsert, " as first occurence with no fallback position"));
|
|
155
139
|
}
|
|
156
140
|
var lastItemPosition = lastItem ? lastItem.end : fallbackPos;
|
|
157
|
-
return new
|
|
141
|
+
return new InsertChange(file, lastItemPosition, toInsert);
|
|
158
142
|
}
|
|
159
|
-
function getContentOfKeyLiteral(_source, node) {
|
|
143
|
+
export function getContentOfKeyLiteral(_source, node) {
|
|
160
144
|
if (node.kind == ts.SyntaxKind.Identifier) {
|
|
161
145
|
return node.text;
|
|
162
146
|
}
|
|
@@ -214,7 +198,7 @@ function _angularImportsFromNode(node, _sourceFile) {
|
|
|
214
198
|
return {};
|
|
215
199
|
}
|
|
216
200
|
}
|
|
217
|
-
function getDecoratorMetadata(source, identifier, module) {
|
|
201
|
+
export function getDecoratorMetadata(source, identifier, module) {
|
|
218
202
|
var angularImports = findNodes(source, ts.SyntaxKind.ImportDeclaration)
|
|
219
203
|
.map(function (node) {
|
|
220
204
|
return _angularImportsFromNode(node, source);
|
|
@@ -315,7 +299,7 @@ function _addSymbolToNgModuleMetadata(source, ngModulePath, metadataField, symbo
|
|
|
315
299
|
toInsert_1 = ", ".concat(metadataField, ": [").concat(symbolName, "]");
|
|
316
300
|
}
|
|
317
301
|
}
|
|
318
|
-
var newMetadataProperty = new
|
|
302
|
+
var newMetadataProperty = new InsertChange(ngModulePath, position_1, toInsert_1);
|
|
319
303
|
var newMetadataImport = insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath);
|
|
320
304
|
return [newMetadataProperty, newMetadataImport];
|
|
321
305
|
}
|
|
@@ -359,7 +343,7 @@ function _addSymbolToNgModuleMetadata(source, ngModulePath, metadataField, symbo
|
|
|
359
343
|
var epos = void 0;
|
|
360
344
|
if (effectsElements.length === 0) {
|
|
361
345
|
epos = effectsArgs.getStart() + 1;
|
|
362
|
-
return [new
|
|
346
|
+
return [new InsertChange(ngModulePath, epos, effectsSymbol)];
|
|
363
347
|
}
|
|
364
348
|
else {
|
|
365
349
|
var lastEffect = effectsElements[effectsElements.length - 1];
|
|
@@ -373,7 +357,7 @@ function _addSymbolToNgModuleMetadata(source, ngModulePath, metadataField, symbo
|
|
|
373
357
|
else {
|
|
374
358
|
effectInsert = ", ".concat(effectsSymbol);
|
|
375
359
|
}
|
|
376
|
-
return [new
|
|
360
|
+
return [new InsertChange(ngModulePath, epos, effectInsert)];
|
|
377
361
|
}
|
|
378
362
|
}
|
|
379
363
|
else {
|
|
@@ -419,7 +403,7 @@ function _addSymbolToNgModuleMetadata(source, ngModulePath, metadataField, symbo
|
|
|
419
403
|
toInsert = ", ".concat(symbolName);
|
|
420
404
|
}
|
|
421
405
|
}
|
|
422
|
-
var insert = new
|
|
406
|
+
var insert = new InsertChange(ngModulePath, position, toInsert);
|
|
423
407
|
var importInsert = insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath);
|
|
424
408
|
return [insert, importInsert];
|
|
425
409
|
}
|
|
@@ -471,7 +455,7 @@ function _addSymbolToComponentMetadata(source, componentPath, metadataField, sym
|
|
|
471
455
|
toInsert_2 = ", ".concat(metadataField, ": [").concat(symbolName, "]");
|
|
472
456
|
}
|
|
473
457
|
}
|
|
474
|
-
var newMetadataProperty = new
|
|
458
|
+
var newMetadataProperty = new InsertChange(componentPath, position_2, toInsert_2);
|
|
475
459
|
var newMetadataImport = insertImport(source, componentPath, symbolName.replace(/\..*$/, ''), importPath);
|
|
476
460
|
return [newMetadataProperty, newMetadataImport];
|
|
477
461
|
}
|
|
@@ -538,7 +522,7 @@ function _addSymbolToComponentMetadata(source, componentPath, metadataField, sym
|
|
|
538
522
|
toInsert = ", ".concat(symbolName);
|
|
539
523
|
}
|
|
540
524
|
}
|
|
541
|
-
var insert = new
|
|
525
|
+
var insert = new InsertChange(componentPath, position, toInsert);
|
|
542
526
|
var importInsert = insertImport(source, componentPath, symbolName.replace(/\..*$/, ''), importPath);
|
|
543
527
|
return [insert, importInsert];
|
|
544
528
|
}
|
|
@@ -546,38 +530,38 @@ function _addSymbolToComponentMetadata(source, componentPath, metadataField, sym
|
|
|
546
530
|
* Custom function to insert a declaration (component, pipe, directive)
|
|
547
531
|
* into NgModule declarations. It also imports the component.
|
|
548
532
|
*/
|
|
549
|
-
function addDeclarationToModule(source, modulePath, classifiedName, importPath) {
|
|
533
|
+
export function addDeclarationToModule(source, modulePath, classifiedName, importPath) {
|
|
550
534
|
return _addSymbolToNgModuleMetadata(source, modulePath, 'declarations', classifiedName, importPath);
|
|
551
535
|
}
|
|
552
536
|
/**
|
|
553
537
|
* Custom function to insert a declaration (component, pipe, directive)
|
|
554
538
|
* into NgModule declarations. It also imports the component.
|
|
555
539
|
*/
|
|
556
|
-
function addImportToModule(source, modulePath, classifiedName, importPath) {
|
|
540
|
+
export function addImportToModule(source, modulePath, classifiedName, importPath) {
|
|
557
541
|
return _addSymbolToNgModuleMetadata(source, modulePath, 'imports', classifiedName, importPath);
|
|
558
542
|
}
|
|
559
543
|
/**
|
|
560
544
|
* Custom function to insert a provider into NgModule. It also imports it.
|
|
561
545
|
*/
|
|
562
|
-
function addProviderToModule(source, modulePath, classifiedName, importPath) {
|
|
546
|
+
export function addProviderToModule(source, modulePath, classifiedName, importPath) {
|
|
563
547
|
return _addSymbolToNgModuleMetadata(source, modulePath, 'providers', classifiedName, importPath);
|
|
564
548
|
}
|
|
565
549
|
/**
|
|
566
550
|
* Custom function to insert a provider into Component. It also imports it.
|
|
567
551
|
*/
|
|
568
|
-
function addProviderToComponent(source, componentPath, classifiedName, importPath) {
|
|
552
|
+
export function addProviderToComponent(source, componentPath, classifiedName, importPath) {
|
|
569
553
|
return _addSymbolToComponentMetadata(source, componentPath, 'providers', classifiedName, importPath);
|
|
570
554
|
}
|
|
571
555
|
/**
|
|
572
556
|
* Custom function to insert an export into NgModule. It also imports it.
|
|
573
557
|
*/
|
|
574
|
-
function addExportToModule(source, modulePath, classifiedName, importPath) {
|
|
558
|
+
export function addExportToModule(source, modulePath, classifiedName, importPath) {
|
|
575
559
|
return _addSymbolToNgModuleMetadata(source, modulePath, 'exports', classifiedName, importPath);
|
|
576
560
|
}
|
|
577
561
|
/**
|
|
578
562
|
* Custom function to insert an export into NgModule. It also imports it.
|
|
579
563
|
*/
|
|
580
|
-
function addBootstrapToModule(source, modulePath, classifiedName, importPath) {
|
|
564
|
+
export function addBootstrapToModule(source, modulePath, classifiedName, importPath) {
|
|
581
565
|
return _addSymbolToNgModuleMetadata(source, modulePath, 'bootstrap', classifiedName, importPath);
|
|
582
566
|
}
|
|
583
567
|
/**
|
|
@@ -589,7 +573,7 @@ function addBootstrapToModule(source, modulePath, classifiedName, importPath) {
|
|
|
589
573
|
* @param isDefault (if true, import follows style for importing default exports)
|
|
590
574
|
* @return Change
|
|
591
575
|
*/
|
|
592
|
-
function insertImport(source, fileToEdit, symbolName, fileName, isDefault) {
|
|
576
|
+
export function insertImport(source, fileToEdit, symbolName, fileName, isDefault) {
|
|
593
577
|
if (isDefault === void 0) { isDefault = false; }
|
|
594
578
|
var rootNode = source;
|
|
595
579
|
var allImports = findNodes(rootNode, ts.SyntaxKind.ImportDeclaration);
|
|
@@ -614,7 +598,7 @@ function insertImport(source, fileToEdit, symbolName, fileName, isDefault) {
|
|
|
614
598
|
});
|
|
615
599
|
// if imports * from fileName, don't add symbolName
|
|
616
600
|
if (importsAsterisk_1) {
|
|
617
|
-
return new
|
|
601
|
+
return new NoopChange();
|
|
618
602
|
}
|
|
619
603
|
var importTextNodes = imports_1.filter(function (n) { return n.text === symbolName; });
|
|
620
604
|
// insert import if it's not there
|
|
@@ -623,7 +607,7 @@ function insertImport(source, fileToEdit, symbolName, fileName, isDefault) {
|
|
|
623
607
|
findNodes(relevantImports[0], ts.SyntaxKind.FromKeyword)[0].getStart();
|
|
624
608
|
return insertAfterLastOccurrence(imports_1, ", ".concat(symbolName), fileToEdit, fallbackPos_1);
|
|
625
609
|
}
|
|
626
|
-
return new
|
|
610
|
+
return new NoopChange();
|
|
627
611
|
}
|
|
628
612
|
// no such import declaration exists
|
|
629
613
|
var useStrict = findNodes(rootNode, ts.SyntaxKind.StringLiteral).filter(function (n) { return n.getText() === 'use strict'; });
|
|
@@ -640,7 +624,7 @@ function insertImport(source, fileToEdit, symbolName, fileName, isDefault) {
|
|
|
640
624
|
" from '".concat(fileName, "'").concat(insertAtBeginning ? ';\n' : '');
|
|
641
625
|
return insertAfterLastOccurrence(allImports, toInsert, fileToEdit, fallbackPos, ts.SyntaxKind.StringLiteral);
|
|
642
626
|
}
|
|
643
|
-
function replaceImport(sourceFile, path, importFrom, importAsIs, importToBe) {
|
|
627
|
+
export function replaceImport(sourceFile, path, importFrom, importAsIs, importToBe) {
|
|
644
628
|
var imports = sourceFile.statements
|
|
645
629
|
.filter(ts.isImportDeclaration)
|
|
646
630
|
.filter(function (_a) {
|
|
@@ -679,21 +663,21 @@ function replaceImport(sourceFile, path, importFrom, importAsIs, importToBe) {
|
|
|
679
663
|
}
|
|
680
664
|
// identifier has not been imported, simply replace the old text with the new text
|
|
681
665
|
if (!isAlreadyImported) {
|
|
682
|
-
return
|
|
666
|
+
return createReplaceChange(sourceFile, specifier, importAsIs, importToBe);
|
|
683
667
|
}
|
|
684
668
|
var nextIdentifier = importSpecifiers[index + 1];
|
|
685
669
|
// identifer is not the last, also clean up the comma
|
|
686
670
|
if (nextIdentifier) {
|
|
687
|
-
return
|
|
671
|
+
return createRemoveChange(sourceFile, specifier, specifier.getStart(sourceFile), nextIdentifier.getStart(sourceFile));
|
|
688
672
|
}
|
|
689
673
|
// there are no imports following, just remove it
|
|
690
|
-
return
|
|
674
|
+
return createRemoveChange(sourceFile, specifier, specifier.getStart(sourceFile), specifier.getEnd());
|
|
691
675
|
});
|
|
692
676
|
return importChanges.filter(Boolean);
|
|
693
677
|
});
|
|
694
678
|
return changes.reduce(function (imports, curr) { return imports.concat(curr); }, []);
|
|
695
679
|
}
|
|
696
|
-
function containsProperty(objectLiteral, propertyName) {
|
|
680
|
+
export function containsProperty(objectLiteral, propertyName) {
|
|
697
681
|
return (objectLiteral &&
|
|
698
682
|
objectLiteral.properties.some(function (prop) {
|
|
699
683
|
return ts.isPropertyAssignment(prop) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../../../../modules/data/schematics-core/utility/ast-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* istanbul ignore file */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ts from 'typescript';\nimport {\n Change,\n InsertChange,\n NoopChange,\n createReplaceChange,\n ReplaceChange,\n RemoveChange,\n createRemoveChange,\n} from './change';\nimport { Path } from '@angular-devkit/core';\n\n/**\n * Find all nodes from the AST in the subtree of node of SyntaxKind kind.\n * @param node\n * @param kind\n * @param max The maximum number of items to return.\n * @return all nodes of kind, or [] if none is found\n */\nexport function findNodes(\n node: ts.Node,\n kind: ts.SyntaxKind,\n max = Infinity\n): ts.Node[] {\n if (!node || max == 0) {\n return [];\n }\n\n const arr: ts.Node[] = [];\n if (node.kind === kind) {\n arr.push(node);\n max--;\n }\n if (max > 0) {\n for (const child of node.getChildren()) {\n findNodes(child, kind, max).forEach((node) => {\n if (max > 0) {\n arr.push(node);\n }\n max--;\n });\n\n if (max <= 0) {\n break;\n }\n }\n }\n\n return arr;\n}\n\n/**\n * Get all the nodes from a source.\n * @param sourceFile The source file object.\n * @returns {Observable<ts.Node>} An observable of all the nodes in the source.\n */\nexport function getSourceNodes(sourceFile: ts.SourceFile): ts.Node[] {\n const nodes: ts.Node[] = [sourceFile];\n const result = [];\n\n while (nodes.length > 0) {\n const node = nodes.shift();\n\n if (node) {\n result.push(node);\n if (node.getChildCount(sourceFile) >= 0) {\n nodes.unshift(...node.getChildren());\n }\n }\n }\n\n return result;\n}\n\n/**\n * Helper for sorting nodes.\n * @return function to sort nodes in increasing order of position in sourceFile\n */\nfunction nodesByPosition(first: ts.Node, second: ts.Node): number {\n return first.pos - second.pos;\n}\n\n/**\n * Insert `toInsert` after the last occurence of `ts.SyntaxKind[nodes[i].kind]`\n * or after the last of occurence of `syntaxKind` if the last occurence is a sub child\n * of ts.SyntaxKind[nodes[i].kind] and save the changes in file.\n *\n * @param nodes insert after the last occurence of nodes\n * @param toInsert string to insert\n * @param file file to insert changes into\n * @param fallbackPos position to insert if toInsert happens to be the first occurence\n * @param syntaxKind the ts.SyntaxKind of the subchildren to insert after\n * @return Change instance\n * @throw Error if toInsert is first occurence but fall back is not set\n */\nexport function insertAfterLastOccurrence(\n nodes: ts.Node[],\n toInsert: string,\n file: string,\n fallbackPos: number,\n syntaxKind?: ts.SyntaxKind\n): Change {\n let lastItem = nodes.sort(nodesByPosition).pop();\n if (!lastItem) {\n throw new Error();\n }\n if (syntaxKind) {\n lastItem = findNodes(lastItem, syntaxKind).sort(nodesByPosition).pop();\n }\n if (!lastItem && fallbackPos == undefined) {\n throw new Error(\n `tried to insert ${toInsert} as first occurence with no fallback position`\n );\n }\n const lastItemPosition: number = lastItem ? lastItem.end : fallbackPos;\n\n return new InsertChange(file, lastItemPosition, toInsert);\n}\n\nexport function getContentOfKeyLiteral(\n _source: ts.SourceFile,\n node: ts.Node\n): string | null {\n if (node.kind == ts.SyntaxKind.Identifier) {\n return (node as ts.Identifier).text;\n } else if (node.kind == ts.SyntaxKind.StringLiteral) {\n return (node as ts.StringLiteral).text;\n } else {\n return null;\n }\n}\n\nfunction _angularImportsFromNode(\n node: ts.ImportDeclaration,\n _sourceFile: ts.SourceFile\n): { [name: string]: string } {\n const ms = node.moduleSpecifier;\n let modulePath: string;\n switch (ms.kind) {\n case ts.SyntaxKind.StringLiteral:\n modulePath = (ms as ts.StringLiteral).text;\n break;\n default:\n return {};\n }\n\n if (!modulePath.startsWith('@angular/')) {\n return {};\n }\n\n if (node.importClause) {\n if (node.importClause.name) {\n // This is of the form `import Name from 'path'`. Ignore.\n return {};\n } else if (node.importClause.namedBindings) {\n const nb = node.importClause.namedBindings;\n if (nb.kind == ts.SyntaxKind.NamespaceImport) {\n // This is of the form `import * as name from 'path'`. Return `name.`.\n return {\n [(nb as ts.NamespaceImport).name.text + '.']: modulePath,\n };\n } else {\n // This is of the form `import {a,b,c} from 'path'`\n const namedImports = nb as ts.NamedImports;\n\n return namedImports.elements\n .map((is: ts.ImportSpecifier) =>\n is.propertyName ? is.propertyName.text : is.name.text\n )\n .reduce((acc: { [name: string]: string }, curr: string) => {\n acc[curr] = modulePath;\n\n return acc;\n }, {});\n }\n }\n\n return {};\n } else {\n // This is of the form `import 'path';`. Nothing to do.\n return {};\n }\n}\n\nexport function getDecoratorMetadata(\n source: ts.SourceFile,\n identifier: string,\n module: string\n): ts.Node[] {\n const angularImports: { [name: string]: string } = findNodes(\n source,\n ts.SyntaxKind.ImportDeclaration\n )\n .map((node) =>\n _angularImportsFromNode(node as ts.ImportDeclaration, source)\n )\n .reduce(\n (\n acc: { [name: string]: string },\n current: { [name: string]: string }\n ) => {\n for (const key of Object.keys(current)) {\n acc[key] = current[key];\n }\n\n return acc;\n },\n {}\n );\n\n return getSourceNodes(source)\n .filter((node) => {\n return (\n node.kind == ts.SyntaxKind.Decorator &&\n (node as ts.Decorator).expression.kind == ts.SyntaxKind.CallExpression\n );\n })\n .map((node) => (node as ts.Decorator).expression as ts.CallExpression)\n .filter((expr) => {\n if (expr.expression.kind == ts.SyntaxKind.Identifier) {\n const id = expr.expression as ts.Identifier;\n\n return (\n id.getFullText(source) == identifier &&\n angularImports[id.getFullText(source)] === module\n );\n } else if (\n expr.expression.kind == ts.SyntaxKind.PropertyAccessExpression\n ) {\n // This covers foo.NgModule when importing * as foo.\n const paExpr = expr.expression as ts.PropertyAccessExpression;\n // If the left expression is not an identifier, just give up at that point.\n if (paExpr.expression.kind !== ts.SyntaxKind.Identifier) {\n return false;\n }\n\n const id = paExpr.name.text;\n const moduleId = (paExpr.expression as ts.Identifier).getText(source);\n\n return id === identifier && angularImports[moduleId + '.'] === module;\n }\n\n return false;\n })\n .filter(\n (expr) =>\n expr.arguments[0] &&\n expr.arguments[0].kind == ts.SyntaxKind.ObjectLiteralExpression\n )\n .map((expr) => expr.arguments[0] as ts.ObjectLiteralExpression);\n}\n\nfunction _addSymbolToNgModuleMetadata(\n source: ts.SourceFile,\n ngModulePath: string,\n metadataField: string,\n symbolName: string,\n importPath: string\n): Change[] {\n const nodes = getDecoratorMetadata(source, 'NgModule', '@angular/core');\n let node: any = nodes[0]; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n // Find the decorator declaration.\n if (!node) {\n return [];\n }\n\n // Get all the children property assignment of object literals.\n const matchingProperties: ts.ObjectLiteralElement[] = (\n node as ts.ObjectLiteralExpression\n ).properties\n .filter((prop) => prop.kind == ts.SyntaxKind.PropertyAssignment)\n // Filter out every fields that's not \"metadataField\". Also handles string literals\n // (but not expressions).\n .filter((prop: any) => {\n const name = prop.name;\n switch (name.kind) {\n case ts.SyntaxKind.Identifier:\n return (name as ts.Identifier).getText(source) == metadataField;\n case ts.SyntaxKind.StringLiteral:\n return (name as ts.StringLiteral).text == metadataField;\n }\n\n return false;\n });\n\n // Get the last node of the array literal.\n if (!matchingProperties) {\n return [];\n }\n if (matchingProperties.length == 0) {\n // We haven't found the field in the metadata declaration. Insert a new field.\n const expr = node as ts.ObjectLiteralExpression;\n let position: number;\n let toInsert: string;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n const matches = text.match(/^\\r?\\n\\s*/);\n if (matches.length > 0) {\n toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n const newMetadataProperty = new InsertChange(\n ngModulePath,\n position,\n toInsert\n );\n const newMetadataImport = insertImport(\n source,\n ngModulePath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [newMetadataProperty, newMetadataImport];\n }\n\n const assignment = matchingProperties[0] as ts.PropertyAssignment;\n\n // If it's not an array, nothing we can do really.\n if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) {\n return [];\n }\n\n const arrLiteral = assignment.initializer as ts.ArrayLiteralExpression;\n if (arrLiteral.elements.length == 0) {\n // Forward the property.\n node = arrLiteral;\n } else {\n node = arrLiteral.elements;\n }\n\n if (!node) {\n console.log(\n 'No app module found. Please add your new class to your component.'\n );\n\n return [];\n }\n\n if (Array.isArray(node)) {\n const nodeArray = node as {} as Array<ts.Node>;\n const symbolsArray = nodeArray.map((node) => node.getText());\n if (symbolsArray.includes(symbolName)) {\n return [];\n }\n\n node = node[node.length - 1];\n\n const effectsModule = nodeArray.find(\n (node) =>\n (node.getText().includes('EffectsModule.forRoot') &&\n symbolName.includes('EffectsModule.forRoot')) ||\n (node.getText().includes('EffectsModule.forFeature') &&\n symbolName.includes('EffectsModule.forFeature'))\n );\n\n if (effectsModule && symbolName.includes('EffectsModule')) {\n const effectsArgs = (effectsModule as any).arguments.shift();\n\n if (\n effectsArgs &&\n effectsArgs.kind === ts.SyntaxKind.ArrayLiteralExpression\n ) {\n const effectsElements = (effectsArgs as ts.ArrayLiteralExpression)\n .elements;\n const [, effectsSymbol] = (<any>symbolName).match(/\\[(.*)\\]/);\n\n let epos;\n if (effectsElements.length === 0) {\n epos = effectsArgs.getStart() + 1;\n return [new InsertChange(ngModulePath, epos, effectsSymbol)];\n } else {\n const lastEffect = effectsElements[\n effectsElements.length - 1\n ] as ts.Expression;\n epos = lastEffect.getEnd();\n // Get the indentation of the last element, if any.\n const text: any = lastEffect.getFullText(source);\n\n let effectInsert: string;\n if (text.match('^\\r?\\r?\\n')) {\n effectInsert = `,${text.match(/^\\r?\\n\\s+/)[0]}${effectsSymbol}`;\n } else {\n effectInsert = `, ${effectsSymbol}`;\n }\n\n return [new InsertChange(ngModulePath, epos, effectInsert)];\n }\n } else {\n return [];\n }\n }\n }\n\n let toInsert: string;\n let position = node.getEnd();\n if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) {\n // We haven't found the field in the metadata declaration. Insert a new\n // field.\n const expr = node as ts.ObjectLiteralExpression;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match('^\\r?\\r?\\n')) {\n toInsert = `,${\n text.match(/^\\r?\\n\\s+/)[0]\n }${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n } else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) {\n // We found the field but it's empty. Insert it just before the `]`.\n position--;\n toInsert = `${symbolName}`;\n } else {\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match(/^\\r?\\n/)) {\n toInsert = `,${text.match(/^\\r?\\n(\\r?)\\s+/)[0]}${symbolName}`;\n } else {\n toInsert = `, ${symbolName}`;\n }\n }\n const insert = new InsertChange(ngModulePath, position, toInsert);\n const importInsert: Change = insertImport(\n source,\n ngModulePath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [insert, importInsert];\n}\n\nfunction _addSymbolToComponentMetadata(\n source: ts.SourceFile,\n componentPath: string,\n metadataField: string,\n symbolName: string,\n importPath: string\n): Change[] {\n const nodes = getDecoratorMetadata(source, 'Component', '@angular/core');\n let node: any = nodes[0]; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n // Find the decorator declaration.\n if (!node) {\n return [];\n }\n\n // Get all the children property assignment of object literals.\n const matchingProperties: ts.ObjectLiteralElement[] = (\n node as ts.ObjectLiteralExpression\n ).properties\n .filter((prop) => prop.kind == ts.SyntaxKind.PropertyAssignment)\n // Filter out every fields that's not \"metadataField\". Also handles string literals\n // (but not expressions).\n .filter((prop: any) => {\n const name = prop.name;\n switch (name.kind) {\n case ts.SyntaxKind.Identifier:\n return (name as ts.Identifier).getText(source) == metadataField;\n case ts.SyntaxKind.StringLiteral:\n return (name as ts.StringLiteral).text == metadataField;\n }\n\n return false;\n });\n\n // Get the last node of the array literal.\n if (!matchingProperties) {\n return [];\n }\n if (matchingProperties.length == 0) {\n // We haven't found the field in the metadata declaration. Insert a new field.\n const expr = node as ts.ObjectLiteralExpression;\n let position: number;\n let toInsert: string;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n const matches = text.match(/^\\r?\\n\\s*/);\n if (matches.length > 0) {\n toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n const newMetadataProperty = new InsertChange(\n componentPath,\n position,\n toInsert\n );\n const newMetadataImport = insertImport(\n source,\n componentPath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [newMetadataProperty, newMetadataImport];\n }\n\n const assignment = matchingProperties[0] as ts.PropertyAssignment;\n\n // If it's not an array, nothing we can do really.\n if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) {\n return [];\n }\n\n const arrLiteral = assignment.initializer as ts.ArrayLiteralExpression;\n if (arrLiteral.elements.length == 0) {\n // Forward the property.\n node = arrLiteral;\n } else {\n node = arrLiteral.elements;\n }\n\n if (!node) {\n console.log(\n 'No component found. Please add your new class to your component.'\n );\n\n return [];\n }\n\n if (Array.isArray(node)) {\n const nodeArray = node as {} as Array<ts.Node>;\n const symbolsArray = nodeArray.map((node) => node.getText());\n if (symbolsArray.includes(symbolName)) {\n return [];\n }\n\n node = node[node.length - 1];\n }\n\n let toInsert: string;\n let position = node.getEnd();\n if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) {\n // We haven't found the field in the metadata declaration. Insert a new\n // field.\n const expr = node as ts.ObjectLiteralExpression;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match('^\\r?\\r?\\n')) {\n toInsert = `,${\n text.match(/^\\r?\\n\\s+/)[0]\n }${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n } else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) {\n // We found the field but it's empty. Insert it just before the `]`.\n position--;\n toInsert = `${symbolName}`;\n } else {\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match(/^\\r?\\n/)) {\n toInsert = `,${text.match(/^\\r?\\n(\\r?)\\s+/)[0]}${symbolName}`;\n } else {\n toInsert = `, ${symbolName}`;\n }\n }\n const insert = new InsertChange(componentPath, position, toInsert);\n const importInsert: Change = insertImport(\n source,\n componentPath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [insert, importInsert];\n}\n\n/**\n * Custom function to insert a declaration (component, pipe, directive)\n * into NgModule declarations. It also imports the component.\n */\nexport function addDeclarationToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'declarations',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert a declaration (component, pipe, directive)\n * into NgModule declarations. It also imports the component.\n */\nexport function addImportToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'imports',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert a provider into NgModule. It also imports it.\n */\nexport function addProviderToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'providers',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert a provider into Component. It also imports it.\n */\nexport function addProviderToComponent(\n source: ts.SourceFile,\n componentPath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToComponentMetadata(\n source,\n componentPath,\n 'providers',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert an export into NgModule. It also imports it.\n */\nexport function addExportToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'exports',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert an export into NgModule. It also imports it.\n */\nexport function addBootstrapToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'bootstrap',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Add Import `import { symbolName } from fileName` if the import doesn't exit\n * already. Assumes fileToEdit can be resolved and accessed.\n * @param fileToEdit (file we want to add import to)\n * @param symbolName (item to import)\n * @param fileName (path to the file)\n * @param isDefault (if true, import follows style for importing default exports)\n * @return Change\n */\n\nexport function insertImport(\n source: ts.SourceFile,\n fileToEdit: string,\n symbolName: string,\n fileName: string,\n isDefault = false\n): Change {\n const rootNode = source;\n const allImports = findNodes(rootNode, ts.SyntaxKind.ImportDeclaration);\n\n // get nodes that map to import statements from the file fileName\n const relevantImports = allImports.filter((node) => {\n // StringLiteral of the ImportDeclaration is the import file (fileName in this case).\n const importFiles = node\n .getChildren()\n .filter((child) => child.kind === ts.SyntaxKind.StringLiteral)\n .map((n) => (n as ts.StringLiteral).text);\n\n return importFiles.filter((file) => file === fileName).length === 1;\n });\n\n if (relevantImports.length > 0) {\n let importsAsterisk = false;\n // imports from import file\n const imports: ts.Node[] = [];\n relevantImports.forEach((n) => {\n Array.prototype.push.apply(\n imports,\n findNodes(n, ts.SyntaxKind.Identifier)\n );\n if (findNodes(n, ts.SyntaxKind.AsteriskToken).length > 0) {\n importsAsterisk = true;\n }\n });\n\n // if imports * from fileName, don't add symbolName\n if (importsAsterisk) {\n return new NoopChange();\n }\n\n const importTextNodes = imports.filter(\n (n) => (n as ts.Identifier).text === symbolName\n );\n\n // insert import if it's not there\n if (importTextNodes.length === 0) {\n const fallbackPos =\n findNodes(\n relevantImports[0],\n ts.SyntaxKind.CloseBraceToken\n )[0].getStart() ||\n findNodes(relevantImports[0], ts.SyntaxKind.FromKeyword)[0].getStart();\n\n return insertAfterLastOccurrence(\n imports,\n `, ${symbolName}`,\n fileToEdit,\n fallbackPos\n );\n }\n\n return new NoopChange();\n }\n\n // no such import declaration exists\n const useStrict = findNodes(rootNode, ts.SyntaxKind.StringLiteral).filter(\n (n) => n.getText() === 'use strict'\n );\n let fallbackPos = 0;\n if (useStrict.length > 0) {\n fallbackPos = useStrict[0].end;\n }\n const open = isDefault ? '' : '{ ';\n const close = isDefault ? '' : ' }';\n // if there are no imports or 'use strict' statement, insert import at beginning of file\n const insertAtBeginning = allImports.length === 0 && useStrict.length === 0;\n const separator = insertAtBeginning ? '' : ';\\n';\n const toInsert =\n `${separator}import ${open}${symbolName}${close}` +\n ` from '${fileName}'${insertAtBeginning ? ';\\n' : ''}`;\n\n return insertAfterLastOccurrence(\n allImports,\n toInsert,\n fileToEdit,\n fallbackPos,\n ts.SyntaxKind.StringLiteral\n );\n}\n\nexport function replaceImport(\n sourceFile: ts.SourceFile,\n path: Path,\n importFrom: string,\n importAsIs: string,\n importToBe: string\n): (ReplaceChange | RemoveChange)[] {\n const imports = sourceFile.statements\n .filter(ts.isImportDeclaration)\n .filter(\n ({ moduleSpecifier }) =>\n moduleSpecifier.getText(sourceFile) === `'${importFrom}'` ||\n moduleSpecifier.getText(sourceFile) === `\"${importFrom}\"`\n );\n\n if (imports.length === 0) {\n return [];\n }\n\n const importText = (specifier: ts.ImportSpecifier) => {\n if (specifier.name.text) {\n return specifier.name.text;\n }\n\n // if import is renamed\n if (specifier.propertyName && specifier.propertyName.text) {\n return specifier.propertyName.text;\n }\n\n return '';\n };\n\n const changes = imports.map((p) => {\n const namedImports = p?.importClause?.namedBindings as ts.NamedImports;\n if (!namedImports) {\n return [];\n }\n\n const importSpecifiers = namedImports.elements;\n const isAlreadyImported = importSpecifiers\n .map(importText)\n .includes(importToBe);\n\n const importChanges = importSpecifiers.map((specifier, index) => {\n const text = importText(specifier);\n\n // import is not the one we're looking for, can be skipped\n if (text !== importAsIs) {\n return undefined;\n }\n\n // identifier has not been imported, simply replace the old text with the new text\n if (!isAlreadyImported) {\n return createReplaceChange(\n sourceFile,\n specifier,\n importAsIs,\n importToBe\n );\n }\n\n const nextIdentifier = importSpecifiers[index + 1];\n // identifer is not the last, also clean up the comma\n if (nextIdentifier) {\n return createRemoveChange(\n sourceFile,\n specifier,\n specifier.getStart(sourceFile),\n nextIdentifier.getStart(sourceFile)\n );\n }\n\n // there are no imports following, just remove it\n return createRemoveChange(\n sourceFile,\n specifier,\n specifier.getStart(sourceFile),\n specifier.getEnd()\n );\n });\n\n return importChanges.filter(Boolean) as (ReplaceChange | RemoveChange)[];\n });\n\n return changes.reduce((imports, curr) => imports.concat(curr), []);\n}\n\nexport function containsProperty(\n objectLiteral: ts.ObjectLiteralExpression,\n propertyName: string\n) {\n return (\n objectLiteral &&\n objectLiteral.properties.some(\n (prop) =>\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === propertyName\n )\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../../../../modules/data/schematics-core/utility/ast-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* istanbul ignore file */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ts from 'typescript';\nimport {\n Change,\n InsertChange,\n NoopChange,\n createReplaceChange,\n ReplaceChange,\n RemoveChange,\n createRemoveChange,\n} from './change';\nimport { Path } from '@angular-devkit/core';\n\n/**\n * Find all nodes from the AST in the subtree of node of SyntaxKind kind.\n * @param node\n * @param kind\n * @param max The maximum number of items to return.\n * @return all nodes of kind, or [] if none is found\n */\nexport function findNodes(\n node: ts.Node,\n kind: ts.SyntaxKind,\n max = Infinity\n): ts.Node[] {\n if (!node || max == 0) {\n return [];\n }\n\n const arr: ts.Node[] = [];\n if (node.kind === kind) {\n arr.push(node);\n max--;\n }\n if (max > 0) {\n for (const child of node.getChildren()) {\n findNodes(child, kind, max).forEach((node) => {\n if (max > 0) {\n arr.push(node);\n }\n max--;\n });\n\n if (max <= 0) {\n break;\n }\n }\n }\n\n return arr;\n}\n\n/**\n * Get all the nodes from a source.\n * @param sourceFile The source file object.\n * @returns {Observable<ts.Node>} An observable of all the nodes in the source.\n */\nexport function getSourceNodes(sourceFile: ts.SourceFile): ts.Node[] {\n const nodes: ts.Node[] = [sourceFile];\n const result = [];\n\n while (nodes.length > 0) {\n const node = nodes.shift();\n\n if (node) {\n result.push(node);\n if (node.getChildCount(sourceFile) >= 0) {\n nodes.unshift(...node.getChildren());\n }\n }\n }\n\n return result;\n}\n\n/**\n * Helper for sorting nodes.\n * @return function to sort nodes in increasing order of position in sourceFile\n */\nfunction nodesByPosition(first: ts.Node, second: ts.Node): number {\n return first.pos - second.pos;\n}\n\n/**\n * Insert `toInsert` after the last occurence of `ts.SyntaxKind[nodes[i].kind]`\n * or after the last of occurence of `syntaxKind` if the last occurence is a sub child\n * of ts.SyntaxKind[nodes[i].kind] and save the changes in file.\n *\n * @param nodes insert after the last occurence of nodes\n * @param toInsert string to insert\n * @param file file to insert changes into\n * @param fallbackPos position to insert if toInsert happens to be the first occurence\n * @param syntaxKind the ts.SyntaxKind of the subchildren to insert after\n * @return Change instance\n * @throw Error if toInsert is first occurence but fall back is not set\n */\nexport function insertAfterLastOccurrence(\n nodes: ts.Node[],\n toInsert: string,\n file: string,\n fallbackPos: number,\n syntaxKind?: ts.SyntaxKind\n): Change {\n let lastItem = nodes.sort(nodesByPosition).pop();\n if (!lastItem) {\n throw new Error();\n }\n if (syntaxKind) {\n lastItem = findNodes(lastItem, syntaxKind).sort(nodesByPosition).pop();\n }\n if (!lastItem && fallbackPos == undefined) {\n throw new Error(\n `tried to insert ${toInsert} as first occurence with no fallback position`\n );\n }\n const lastItemPosition: number = lastItem ? lastItem.end : fallbackPos;\n\n return new InsertChange(file, lastItemPosition, toInsert);\n}\n\nexport function getContentOfKeyLiteral(\n _source: ts.SourceFile,\n node: ts.Node\n): string | null {\n if (node.kind == ts.SyntaxKind.Identifier) {\n return (node as ts.Identifier).text;\n } else if (node.kind == ts.SyntaxKind.StringLiteral) {\n return (node as ts.StringLiteral).text;\n } else {\n return null;\n }\n}\n\nfunction _angularImportsFromNode(\n node: ts.ImportDeclaration,\n _sourceFile: ts.SourceFile\n): { [name: string]: string } {\n const ms = node.moduleSpecifier;\n let modulePath: string;\n switch (ms.kind) {\n case ts.SyntaxKind.StringLiteral:\n modulePath = (ms as ts.StringLiteral).text;\n break;\n default:\n return {};\n }\n\n if (!modulePath.startsWith('@angular/')) {\n return {};\n }\n\n if (node.importClause) {\n if (node.importClause.name) {\n // This is of the form `import Name from 'path'`. Ignore.\n return {};\n } else if (node.importClause.namedBindings) {\n const nb = node.importClause.namedBindings;\n if (nb.kind == ts.SyntaxKind.NamespaceImport) {\n // This is of the form `import * as name from 'path'`. Return `name.`.\n return {\n [(nb as ts.NamespaceImport).name.text + '.']: modulePath,\n };\n } else {\n // This is of the form `import {a,b,c} from 'path'`\n const namedImports = nb as ts.NamedImports;\n\n return namedImports.elements\n .map((is: ts.ImportSpecifier) =>\n is.propertyName ? is.propertyName.text : is.name.text\n )\n .reduce((acc: { [name: string]: string }, curr: string) => {\n acc[curr] = modulePath;\n\n return acc;\n }, {});\n }\n }\n\n return {};\n } else {\n // This is of the form `import 'path';`. Nothing to do.\n return {};\n }\n}\n\nexport function getDecoratorMetadata(\n source: ts.SourceFile,\n identifier: string,\n module: string\n): ts.Node[] {\n const angularImports: { [name: string]: string } = findNodes(\n source,\n ts.SyntaxKind.ImportDeclaration\n )\n .map((node) =>\n _angularImportsFromNode(node as ts.ImportDeclaration, source)\n )\n .reduce(\n (\n acc: { [name: string]: string },\n current: { [name: string]: string }\n ) => {\n for (const key of Object.keys(current)) {\n acc[key] = current[key];\n }\n\n return acc;\n },\n {}\n );\n\n return getSourceNodes(source)\n .filter((node) => {\n return (\n node.kind == ts.SyntaxKind.Decorator &&\n (node as ts.Decorator).expression.kind == ts.SyntaxKind.CallExpression\n );\n })\n .map((node) => (node as ts.Decorator).expression as ts.CallExpression)\n .filter((expr) => {\n if (expr.expression.kind == ts.SyntaxKind.Identifier) {\n const id = expr.expression as ts.Identifier;\n\n return (\n id.getFullText(source) == identifier &&\n angularImports[id.getFullText(source)] === module\n );\n } else if (\n expr.expression.kind == ts.SyntaxKind.PropertyAccessExpression\n ) {\n // This covers foo.NgModule when importing * as foo.\n const paExpr = expr.expression as ts.PropertyAccessExpression;\n // If the left expression is not an identifier, just give up at that point.\n if (paExpr.expression.kind !== ts.SyntaxKind.Identifier) {\n return false;\n }\n\n const id = paExpr.name.text;\n const moduleId = (paExpr.expression as ts.Identifier).getText(source);\n\n return id === identifier && angularImports[moduleId + '.'] === module;\n }\n\n return false;\n })\n .filter(\n (expr) =>\n expr.arguments[0] &&\n expr.arguments[0].kind == ts.SyntaxKind.ObjectLiteralExpression\n )\n .map((expr) => expr.arguments[0] as ts.ObjectLiteralExpression);\n}\n\nfunction _addSymbolToNgModuleMetadata(\n source: ts.SourceFile,\n ngModulePath: string,\n metadataField: string,\n symbolName: string,\n importPath: string\n): Change[] {\n const nodes = getDecoratorMetadata(source, 'NgModule', '@angular/core');\n let node: any = nodes[0]; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n // Find the decorator declaration.\n if (!node) {\n return [];\n }\n\n // Get all the children property assignment of object literals.\n const matchingProperties: ts.ObjectLiteralElement[] = (\n node as ts.ObjectLiteralExpression\n ).properties\n .filter((prop) => prop.kind == ts.SyntaxKind.PropertyAssignment)\n // Filter out every fields that's not \"metadataField\". Also handles string literals\n // (but not expressions).\n .filter((prop: any) => {\n const name = prop.name;\n switch (name.kind) {\n case ts.SyntaxKind.Identifier:\n return (name as ts.Identifier).getText(source) == metadataField;\n case ts.SyntaxKind.StringLiteral:\n return (name as ts.StringLiteral).text == metadataField;\n }\n\n return false;\n });\n\n // Get the last node of the array literal.\n if (!matchingProperties) {\n return [];\n }\n if (matchingProperties.length == 0) {\n // We haven't found the field in the metadata declaration. Insert a new field.\n const expr = node as ts.ObjectLiteralExpression;\n let position: number;\n let toInsert: string;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n const matches = text.match(/^\\r?\\n\\s*/);\n if (matches.length > 0) {\n toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n const newMetadataProperty = new InsertChange(\n ngModulePath,\n position,\n toInsert\n );\n const newMetadataImport = insertImport(\n source,\n ngModulePath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [newMetadataProperty, newMetadataImport];\n }\n\n const assignment = matchingProperties[0] as ts.PropertyAssignment;\n\n // If it's not an array, nothing we can do really.\n if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) {\n return [];\n }\n\n const arrLiteral = assignment.initializer as ts.ArrayLiteralExpression;\n if (arrLiteral.elements.length == 0) {\n // Forward the property.\n node = arrLiteral;\n } else {\n node = arrLiteral.elements;\n }\n\n if (!node) {\n console.log(\n 'No app module found. Please add your new class to your component.'\n );\n\n return [];\n }\n\n if (Array.isArray(node)) {\n const nodeArray = node as {} as Array<ts.Node>;\n const symbolsArray = nodeArray.map((node) => node.getText());\n if (symbolsArray.includes(symbolName)) {\n return [];\n }\n\n node = node[node.length - 1];\n\n const effectsModule = nodeArray.find(\n (node) =>\n (node.getText().includes('EffectsModule.forRoot') &&\n symbolName.includes('EffectsModule.forRoot')) ||\n (node.getText().includes('EffectsModule.forFeature') &&\n symbolName.includes('EffectsModule.forFeature'))\n );\n\n if (effectsModule && symbolName.includes('EffectsModule')) {\n const effectsArgs = (effectsModule as any).arguments.shift();\n\n if (\n effectsArgs &&\n effectsArgs.kind === ts.SyntaxKind.ArrayLiteralExpression\n ) {\n const effectsElements = (effectsArgs as ts.ArrayLiteralExpression)\n .elements;\n const [, effectsSymbol] = (<any>symbolName).match(/\\[(.*)\\]/);\n\n let epos;\n if (effectsElements.length === 0) {\n epos = effectsArgs.getStart() + 1;\n return [new InsertChange(ngModulePath, epos, effectsSymbol)];\n } else {\n const lastEffect = effectsElements[\n effectsElements.length - 1\n ] as ts.Expression;\n epos = lastEffect.getEnd();\n // Get the indentation of the last element, if any.\n const text: any = lastEffect.getFullText(source);\n\n let effectInsert: string;\n if (text.match('^\\r?\\r?\\n')) {\n effectInsert = `,${text.match(/^\\r?\\n\\s+/)[0]}${effectsSymbol}`;\n } else {\n effectInsert = `, ${effectsSymbol}`;\n }\n\n return [new InsertChange(ngModulePath, epos, effectInsert)];\n }\n } else {\n return [];\n }\n }\n }\n\n let toInsert: string;\n let position = node.getEnd();\n if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) {\n // We haven't found the field in the metadata declaration. Insert a new\n // field.\n const expr = node as ts.ObjectLiteralExpression;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match('^\\r?\\r?\\n')) {\n toInsert = `,${\n text.match(/^\\r?\\n\\s+/)[0]\n }${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n } else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) {\n // We found the field but it's empty. Insert it just before the `]`.\n position--;\n toInsert = `${symbolName}`;\n } else {\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match(/^\\r?\\n/)) {\n toInsert = `,${text.match(/^\\r?\\n(\\r?)\\s+/)[0]}${symbolName}`;\n } else {\n toInsert = `, ${symbolName}`;\n }\n }\n const insert = new InsertChange(ngModulePath, position, toInsert);\n const importInsert: Change = insertImport(\n source,\n ngModulePath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [insert, importInsert];\n}\n\nfunction _addSymbolToComponentMetadata(\n source: ts.SourceFile,\n componentPath: string,\n metadataField: string,\n symbolName: string,\n importPath: string\n): Change[] {\n const nodes = getDecoratorMetadata(source, 'Component', '@angular/core');\n let node: any = nodes[0]; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n // Find the decorator declaration.\n if (!node) {\n return [];\n }\n\n // Get all the children property assignment of object literals.\n const matchingProperties: ts.ObjectLiteralElement[] = (\n node as ts.ObjectLiteralExpression\n ).properties\n .filter((prop) => prop.kind == ts.SyntaxKind.PropertyAssignment)\n // Filter out every fields that's not \"metadataField\". Also handles string literals\n // (but not expressions).\n .filter((prop: any) => {\n const name = prop.name;\n switch (name.kind) {\n case ts.SyntaxKind.Identifier:\n return (name as ts.Identifier).getText(source) == metadataField;\n case ts.SyntaxKind.StringLiteral:\n return (name as ts.StringLiteral).text == metadataField;\n }\n\n return false;\n });\n\n // Get the last node of the array literal.\n if (!matchingProperties) {\n return [];\n }\n if (matchingProperties.length == 0) {\n // We haven't found the field in the metadata declaration. Insert a new field.\n const expr = node as ts.ObjectLiteralExpression;\n let position: number;\n let toInsert: string;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n const matches = text.match(/^\\r?\\n\\s*/);\n if (matches.length > 0) {\n toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n const newMetadataProperty = new InsertChange(\n componentPath,\n position,\n toInsert\n );\n const newMetadataImport = insertImport(\n source,\n componentPath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [newMetadataProperty, newMetadataImport];\n }\n\n const assignment = matchingProperties[0] as ts.PropertyAssignment;\n\n // If it's not an array, nothing we can do really.\n if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) {\n return [];\n }\n\n const arrLiteral = assignment.initializer as ts.ArrayLiteralExpression;\n if (arrLiteral.elements.length == 0) {\n // Forward the property.\n node = arrLiteral;\n } else {\n node = arrLiteral.elements;\n }\n\n if (!node) {\n console.log(\n 'No component found. Please add your new class to your component.'\n );\n\n return [];\n }\n\n if (Array.isArray(node)) {\n const nodeArray = node as {} as Array<ts.Node>;\n const symbolsArray = nodeArray.map((node) => node.getText());\n if (symbolsArray.includes(symbolName)) {\n return [];\n }\n\n node = node[node.length - 1];\n }\n\n let toInsert: string;\n let position = node.getEnd();\n if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) {\n // We haven't found the field in the metadata declaration. Insert a new\n // field.\n const expr = node as ts.ObjectLiteralExpression;\n if (expr.properties.length == 0) {\n position = expr.getEnd() - 1;\n toInsert = ` ${metadataField}: [${symbolName}]\\n`;\n } else {\n node = expr.properties[expr.properties.length - 1];\n position = node.getEnd();\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match('^\\r?\\r?\\n')) {\n toInsert = `,${\n text.match(/^\\r?\\n\\s+/)[0]\n }${metadataField}: [${symbolName}]`;\n } else {\n toInsert = `, ${metadataField}: [${symbolName}]`;\n }\n }\n } else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) {\n // We found the field but it's empty. Insert it just before the `]`.\n position--;\n toInsert = `${symbolName}`;\n } else {\n // Get the indentation of the last element, if any.\n const text = node.getFullText(source);\n if (text.match(/^\\r?\\n/)) {\n toInsert = `,${text.match(/^\\r?\\n(\\r?)\\s+/)[0]}${symbolName}`;\n } else {\n toInsert = `, ${symbolName}`;\n }\n }\n const insert = new InsertChange(componentPath, position, toInsert);\n const importInsert: Change = insertImport(\n source,\n componentPath,\n symbolName.replace(/\\..*$/, ''),\n importPath\n );\n\n return [insert, importInsert];\n}\n\n/**\n * Custom function to insert a declaration (component, pipe, directive)\n * into NgModule declarations. It also imports the component.\n */\nexport function addDeclarationToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'declarations',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert a declaration (component, pipe, directive)\n * into NgModule declarations. It also imports the component.\n */\nexport function addImportToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'imports',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert a provider into NgModule. It also imports it.\n */\nexport function addProviderToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'providers',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert a provider into Component. It also imports it.\n */\nexport function addProviderToComponent(\n source: ts.SourceFile,\n componentPath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToComponentMetadata(\n source,\n componentPath,\n 'providers',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert an export into NgModule. It also imports it.\n */\nexport function addExportToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'exports',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Custom function to insert an export into NgModule. It also imports it.\n */\nexport function addBootstrapToModule(\n source: ts.SourceFile,\n modulePath: string,\n classifiedName: string,\n importPath: string\n): Change[] {\n return _addSymbolToNgModuleMetadata(\n source,\n modulePath,\n 'bootstrap',\n classifiedName,\n importPath\n );\n}\n\n/**\n * Add Import `import { symbolName } from fileName` if the import doesn't exit\n * already. Assumes fileToEdit can be resolved and accessed.\n * @param fileToEdit (file we want to add import to)\n * @param symbolName (item to import)\n * @param fileName (path to the file)\n * @param isDefault (if true, import follows style for importing default exports)\n * @return Change\n */\n\nexport function insertImport(\n source: ts.SourceFile,\n fileToEdit: string,\n symbolName: string,\n fileName: string,\n isDefault = false\n): Change {\n const rootNode = source;\n const allImports = findNodes(rootNode, ts.SyntaxKind.ImportDeclaration);\n\n // get nodes that map to import statements from the file fileName\n const relevantImports = allImports.filter((node) => {\n // StringLiteral of the ImportDeclaration is the import file (fileName in this case).\n const importFiles = node\n .getChildren()\n .filter((child) => child.kind === ts.SyntaxKind.StringLiteral)\n .map((n) => (n as ts.StringLiteral).text);\n\n return importFiles.filter((file) => file === fileName).length === 1;\n });\n\n if (relevantImports.length > 0) {\n let importsAsterisk = false;\n // imports from import file\n const imports: ts.Node[] = [];\n relevantImports.forEach((n) => {\n Array.prototype.push.apply(\n imports,\n findNodes(n, ts.SyntaxKind.Identifier)\n );\n if (findNodes(n, ts.SyntaxKind.AsteriskToken).length > 0) {\n importsAsterisk = true;\n }\n });\n\n // if imports * from fileName, don't add symbolName\n if (importsAsterisk) {\n return new NoopChange();\n }\n\n const importTextNodes = imports.filter(\n (n) => (n as ts.Identifier).text === symbolName\n );\n\n // insert import if it's not there\n if (importTextNodes.length === 0) {\n const fallbackPos =\n findNodes(\n relevantImports[0],\n ts.SyntaxKind.CloseBraceToken\n )[0].getStart() ||\n findNodes(relevantImports[0], ts.SyntaxKind.FromKeyword)[0].getStart();\n\n return insertAfterLastOccurrence(\n imports,\n `, ${symbolName}`,\n fileToEdit,\n fallbackPos\n );\n }\n\n return new NoopChange();\n }\n\n // no such import declaration exists\n const useStrict = findNodes(rootNode, ts.SyntaxKind.StringLiteral).filter(\n (n) => n.getText() === 'use strict'\n );\n let fallbackPos = 0;\n if (useStrict.length > 0) {\n fallbackPos = useStrict[0].end;\n }\n const open = isDefault ? '' : '{ ';\n const close = isDefault ? '' : ' }';\n // if there are no imports or 'use strict' statement, insert import at beginning of file\n const insertAtBeginning = allImports.length === 0 && useStrict.length === 0;\n const separator = insertAtBeginning ? '' : ';\\n';\n const toInsert =\n `${separator}import ${open}${symbolName}${close}` +\n ` from '${fileName}'${insertAtBeginning ? ';\\n' : ''}`;\n\n return insertAfterLastOccurrence(\n allImports,\n toInsert,\n fileToEdit,\n fallbackPos,\n ts.SyntaxKind.StringLiteral\n );\n}\n\nexport function replaceImport(\n sourceFile: ts.SourceFile,\n path: Path,\n importFrom: string,\n importAsIs: string,\n importToBe: string\n): (ReplaceChange | RemoveChange)[] {\n const imports = sourceFile.statements\n .filter(ts.isImportDeclaration)\n .filter(\n ({ moduleSpecifier }) =>\n moduleSpecifier.getText(sourceFile) === `'${importFrom}'` ||\n moduleSpecifier.getText(sourceFile) === `\"${importFrom}\"`\n );\n\n if (imports.length === 0) {\n return [];\n }\n\n const importText = (specifier: ts.ImportSpecifier) => {\n if (specifier.name.text) {\n return specifier.name.text;\n }\n\n // if import is renamed\n if (specifier.propertyName && specifier.propertyName.text) {\n return specifier.propertyName.text;\n }\n\n return '';\n };\n\n const changes = imports.map((p) => {\n const namedImports = p?.importClause?.namedBindings as ts.NamedImports;\n if (!namedImports) {\n return [];\n }\n\n const importSpecifiers = namedImports.elements;\n const isAlreadyImported = importSpecifiers\n .map(importText)\n .includes(importToBe);\n\n const importChanges = importSpecifiers.map((specifier, index) => {\n const text = importText(specifier);\n\n // import is not the one we're looking for, can be skipped\n if (text !== importAsIs) {\n return undefined;\n }\n\n // identifier has not been imported, simply replace the old text with the new text\n if (!isAlreadyImported) {\n return createReplaceChange(\n sourceFile,\n specifier,\n importAsIs,\n importToBe\n );\n }\n\n const nextIdentifier = importSpecifiers[index + 1];\n // identifer is not the last, also clean up the comma\n if (nextIdentifier) {\n return createRemoveChange(\n sourceFile,\n specifier,\n specifier.getStart(sourceFile),\n nextIdentifier.getStart(sourceFile)\n );\n }\n\n // there are no imports following, just remove it\n return createRemoveChange(\n sourceFile,\n specifier,\n specifier.getStart(sourceFile),\n specifier.getEnd()\n );\n });\n\n return importChanges.filter(Boolean) as (ReplaceChange | RemoveChange)[];\n });\n\n return changes.reduce((imports, curr) => imports.concat(curr), []);\n}\n\nexport function containsProperty(\n objectLiteral: ts.ObjectLiteralExpression,\n propertyName: string\n) {\n return (\n objectLiteral &&\n objectLiteral.properties.some(\n (prop) =>\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === propertyName\n )\n );\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __values = (this && this.__values) || function(o) {
|
|
3
2
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
3
|
if (m) return m.call(o);
|
|
@@ -10,12 +9,6 @@ var __values = (this && this.__values) || function(o) {
|
|
|
10
9
|
};
|
|
11
10
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
11
|
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.ReplaceChange = exports.RemoveChange = exports.InsertChange = exports.NoopChange = void 0;
|
|
15
|
-
exports.createReplaceChange = createReplaceChange;
|
|
16
|
-
exports.createRemoveChange = createRemoveChange;
|
|
17
|
-
exports.createChangeRecorder = createChangeRecorder;
|
|
18
|
-
exports.commitChanges = commitChanges;
|
|
19
12
|
/**
|
|
20
13
|
* An operation that does nothing.
|
|
21
14
|
*/
|
|
@@ -30,7 +23,7 @@ var NoopChange = /** @class */ (function () {
|
|
|
30
23
|
};
|
|
31
24
|
return NoopChange;
|
|
32
25
|
}());
|
|
33
|
-
|
|
26
|
+
export { NoopChange };
|
|
34
27
|
/**
|
|
35
28
|
* Will add text to the source code.
|
|
36
29
|
*/
|
|
@@ -58,7 +51,7 @@ var InsertChange = /** @class */ (function () {
|
|
|
58
51
|
};
|
|
59
52
|
return InsertChange;
|
|
60
53
|
}());
|
|
61
|
-
|
|
54
|
+
export { InsertChange };
|
|
62
55
|
/**
|
|
63
56
|
* Will remove text from the source code.
|
|
64
57
|
*/
|
|
@@ -84,7 +77,7 @@ var RemoveChange = /** @class */ (function () {
|
|
|
84
77
|
};
|
|
85
78
|
return RemoveChange;
|
|
86
79
|
}());
|
|
87
|
-
|
|
80
|
+
export { RemoveChange };
|
|
88
81
|
/**
|
|
89
82
|
* Will replace text from the source code.
|
|
90
83
|
*/
|
|
@@ -115,16 +108,16 @@ var ReplaceChange = /** @class */ (function () {
|
|
|
115
108
|
};
|
|
116
109
|
return ReplaceChange;
|
|
117
110
|
}());
|
|
118
|
-
|
|
119
|
-
function createReplaceChange(sourceFile, node, oldText, newText) {
|
|
111
|
+
export { ReplaceChange };
|
|
112
|
+
export function createReplaceChange(sourceFile, node, oldText, newText) {
|
|
120
113
|
return new ReplaceChange(sourceFile.fileName, node.getStart(sourceFile), oldText, newText);
|
|
121
114
|
}
|
|
122
|
-
function createRemoveChange(sourceFile, node, from, to) {
|
|
115
|
+
export function createRemoveChange(sourceFile, node, from, to) {
|
|
123
116
|
if (from === void 0) { from = node.getStart(sourceFile); }
|
|
124
117
|
if (to === void 0) { to = node.getEnd(); }
|
|
125
118
|
return new RemoveChange(sourceFile.fileName, from, to);
|
|
126
119
|
}
|
|
127
|
-
function createChangeRecorder(tree, path, changes) {
|
|
120
|
+
export function createChangeRecorder(tree, path, changes) {
|
|
128
121
|
var e_1, _a;
|
|
129
122
|
var recorder = tree.beginUpdate(path);
|
|
130
123
|
try {
|
|
@@ -151,7 +144,7 @@ function createChangeRecorder(tree, path, changes) {
|
|
|
151
144
|
}
|
|
152
145
|
return recorder;
|
|
153
146
|
}
|
|
154
|
-
function commitChanges(tree, path, changes) {
|
|
147
|
+
export function commitChanges(tree, path, changes) {
|
|
155
148
|
if (changes.length === 0) {
|
|
156
149
|
return false;
|
|
157
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../../modules/data/schematics-core/utility/change.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../../modules/data/schematics-core/utility/change.ts"],"names":[],"mappings":";;;;;;;;;;;AAgCA;;GAEG;AACH;IAAA;QACE,gBAAW,GAAG,eAAe,CAAC;QAC9B,UAAK,GAAG,QAAQ,CAAC;QACjB,SAAI,GAAG,IAAI,CAAC;IAId,CAAC;IAHC,0BAAK,GAAL;QACE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACH,iBAAC;AAAD,CAAC,AAPD,IAOC;;AAED;;GAEG;AACH;IAIE,sBACS,IAAY,EACZ,GAAW,EACX,KAAa;QAFb,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAQ;QACX,UAAK,GAAL,KAAK,CAAQ;QAEpB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,mBAAY,KAAK,4BAAkB,GAAG,iBAAO,IAAI,CAAE,CAAC;QACvE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,4BAAK,GAAL,UAAM,IAAU;QAAhB,iBAOC;QANC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,OAAO;YACvC,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC;YAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,IAAI,EAAE,UAAG,MAAM,SAAG,KAAI,CAAC,KAAK,SAAG,MAAM,CAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC;IACH,mBAAC;AAAD,CAAC,AA3BD,IA2BC;;AAED;;GAEG;AACH;IAIE,sBACS,IAAY,EACZ,GAAW,EACX,GAAW;QAFX,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAQ;QACX,QAAG,GAAH,GAAG,CAAQ;QAElB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,mCAA4B,GAAG,iBAAO,GAAG,iBAAO,IAAI,CAAE,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,4BAAK,GAAL,UAAM,IAAU;QAAhB,iBAQC;QAPC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,OAAO;YACvC,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC;YAE3C,8DAA8D;YAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,IAAI,EAAE,UAAG,MAAM,SAAG,MAAM,CAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IACH,mBAAC;AAAD,CAAC,AAzBD,IAyBC;;AAED;;GAEG;AACH;IAIE,uBACS,IAAY,EACZ,GAAW,EACX,OAAe,EACf,OAAe;QAHf,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAQ;QACX,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAQ;QAEtB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,mBAAY,OAAO,4BAAkB,GAAG,iBAAO,IAAI,mBAAS,OAAO,CAAE,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,6BAAK,GAAL,UAAM,IAAU;QAAhB,iBAeC;QAdC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,OAAO;YACvC,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAI,CAAC,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjE,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,KAAI,CAAC,GAAG,EAAE,KAAI,CAAC,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEzE,IAAI,IAAI,KAAK,KAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,6BAAqB,IAAI,qBAAS,KAAI,CAAC,OAAO,QAAI,CAAC,CAC9D,CAAC;YACJ,CAAC;YAED,6DAA6D;YAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,IAAI,EAAE,UAAG,MAAM,SAAG,KAAI,CAAC,OAAO,SAAG,MAAM,CAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;IACH,oBAAC;AAAD,CAAC,AAjCD,IAiCC;;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAyB,EACzB,IAAa,EACb,OAAe,EACf,OAAe;IAEf,OAAO,IAAI,aAAa,CACtB,UAAU,CAAC,QAAQ,EACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,UAAyB,EACzB,IAAa,EACb,IAAgC,EAChC,EAAkB;IADlB,qBAAA,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChC,mBAAA,EAAA,KAAK,IAAI,CAAC,MAAM,EAAE;IAElB,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAU,EACV,IAAY,EACZ,OAAiB;;IAEjB,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;QACxC,KAAqB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE,CAAC;YAA1B,IAAM,MAAM,oBAAA;YACf,IAAI,MAAM,YAAY,YAAY,EAAE,CAAC;gBACnC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,MAAM,YAAY,YAAY,EAAE,CAAC;gBAC1C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,MAAM,YAAY,aAAa,EAAE,CAAC;gBAC3C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnD,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;;;;;;;;;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,IAAY,EAAE,OAAiB;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import * as ts from 'typescript';\nimport { Tree, UpdateRecorder } from '@angular-devkit/schematics';\nimport { Path } from '@angular-devkit/core';\n\n/* istanbul ignore file */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport interface Host {\n write(path: string, content: string): Promise<void>;\n read(path: string): Promise<string>;\n}\n\nexport interface Change {\n apply(host: Host): Promise<void>;\n\n // The file this change should be applied to. Some changes might not apply to\n // a file (maybe the config).\n readonly path: string | null;\n\n // The order this change should be applied. Normally the position inside the file.\n // Changes are applied from the bottom of a file to the top.\n readonly order: number;\n\n // The description of this change. This will be outputted in a dry or verbose run.\n readonly description: string;\n}\n\n/**\n * An operation that does nothing.\n */\nexport class NoopChange implements Change {\n description = 'No operation.';\n order = Infinity;\n path = null;\n apply() {\n return Promise.resolve();\n }\n}\n\n/**\n * Will add text to the source code.\n */\nexport class InsertChange implements Change {\n order: number;\n description: string;\n\n constructor(\n public path: string,\n public pos: number,\n public toAdd: string\n ) {\n if (pos < 0) {\n throw new Error('Negative positions are invalid');\n }\n this.description = `Inserted ${toAdd} into position ${pos} of ${path}`;\n this.order = pos;\n }\n\n /**\n * This method does not insert spaces if there is none in the original string.\n */\n apply(host: Host) {\n return host.read(this.path).then((content) => {\n const prefix = content.substring(0, this.pos);\n const suffix = content.substring(this.pos);\n\n return host.write(this.path, `${prefix}${this.toAdd}${suffix}`);\n });\n }\n}\n\n/**\n * Will remove text from the source code.\n */\nexport class RemoveChange implements Change {\n order: number;\n description: string;\n\n constructor(\n public path: string,\n public pos: number,\n public end: number\n ) {\n if (pos < 0 || end < 0) {\n throw new Error('Negative positions are invalid');\n }\n this.description = `Removed text in position ${pos} to ${end} of ${path}`;\n this.order = pos;\n }\n\n apply(host: Host): Promise<void> {\n return host.read(this.path).then((content) => {\n const prefix = content.substring(0, this.pos);\n const suffix = content.substring(this.end);\n\n // TODO: throw error if toRemove doesn't match removed string.\n return host.write(this.path, `${prefix}${suffix}`);\n });\n }\n}\n\n/**\n * Will replace text from the source code.\n */\nexport class ReplaceChange implements Change {\n order: number;\n description: string;\n\n constructor(\n public path: string,\n public pos: number,\n public oldText: string,\n public newText: string\n ) {\n if (pos < 0) {\n throw new Error('Negative positions are invalid');\n }\n this.description = `Replaced ${oldText} into position ${pos} of ${path} with ${newText}`;\n this.order = pos;\n }\n\n apply(host: Host): Promise<void> {\n return host.read(this.path).then((content) => {\n const prefix = content.substring(0, this.pos);\n const suffix = content.substring(this.pos + this.oldText.length);\n const text = content.substring(this.pos, this.pos + this.oldText.length);\n\n if (text !== this.oldText) {\n return Promise.reject(\n new Error(`Invalid replace: \"${text}\" != \"${this.oldText}\".`)\n );\n }\n\n // TODO: throw error if oldText doesn't match removed string.\n return host.write(this.path, `${prefix}${this.newText}${suffix}`);\n });\n }\n}\n\nexport function createReplaceChange(\n sourceFile: ts.SourceFile,\n node: ts.Node,\n oldText: string,\n newText: string\n): ReplaceChange {\n return new ReplaceChange(\n sourceFile.fileName,\n node.getStart(sourceFile),\n oldText,\n newText\n );\n}\n\nexport function createRemoveChange(\n sourceFile: ts.SourceFile,\n node: ts.Node,\n from = node.getStart(sourceFile),\n to = node.getEnd()\n): RemoveChange {\n return new RemoveChange(sourceFile.fileName, from, to);\n}\n\nexport function createChangeRecorder(\n tree: Tree,\n path: string,\n changes: Change[]\n): UpdateRecorder {\n const recorder = tree.beginUpdate(path);\n for (const change of changes) {\n if (change instanceof InsertChange) {\n recorder.insertLeft(change.pos, change.toAdd);\n } else if (change instanceof RemoveChange) {\n recorder.remove(change.pos, change.end - change.pos);\n } else if (change instanceof ReplaceChange) {\n recorder.remove(change.pos, change.oldText.length);\n recorder.insertLeft(change.pos, change.newText);\n }\n }\n return recorder;\n}\n\nexport function commitChanges(tree: Tree, path: string, changes: Change[]) {\n if (changes.length === 0) {\n return false;\n }\n\n const recorder = createChangeRecorder(tree, path, changes);\n tree.commitUpdate(recorder);\n return true;\n}\n"]}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.getWorkspacePath = getWorkspacePath;
|
|
4
|
-
exports.getWorkspace = getWorkspace;
|
|
5
|
-
var schematics_1 = require("@angular-devkit/schematics");
|
|
6
|
-
function getWorkspacePath(host) {
|
|
1
|
+
import { SchematicsException } from '@angular-devkit/schematics';
|
|
2
|
+
export function getWorkspacePath(host) {
|
|
7
3
|
var possibleFiles = ['/angular.json', '/.angular.json', '/workspace.json'];
|
|
8
4
|
var path = possibleFiles.filter(function (path) { return host.exists(path); })[0];
|
|
9
5
|
return path;
|
|
10
6
|
}
|
|
11
|
-
function getWorkspace(host) {
|
|
7
|
+
export function getWorkspace(host) {
|
|
12
8
|
var path = getWorkspacePath(host);
|
|
13
9
|
var configBuffer = host.read(path);
|
|
14
10
|
if (configBuffer === null) {
|
|
15
|
-
throw new
|
|
11
|
+
throw new SchematicsException("Could not find (".concat(path, ")"));
|
|
16
12
|
}
|
|
17
13
|
var config = configBuffer.toString();
|
|
18
14
|
return JSON.parse(config);
|