@o3r/schematics 10.0.0-prerelease.47 → 10.0.0-prerelease.48
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +5 -5
- package/src/utility/index.d.ts +1 -0
- package/src/utility/index.d.ts.map +1 -1
- package/src/utility/index.js +1 -0
- package/src/utility/index.js.map +1 -1
- package/src/utility/update-pipes.d.ts +15 -0
- package/src/utility/update-pipes.d.ts.map +1 -0
- package/src/utility/update-pipes.js +82 -0
- package/src/utility/update-pipes.js.map +1 -0
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@o3r/schematics",
|
3
|
-
"version": "10.0.0-prerelease.
|
3
|
+
"version": "10.0.0-prerelease.48",
|
4
4
|
"description": "Schematics module of the Otter framework",
|
5
5
|
"main": "./src/public_api.js",
|
6
6
|
"typings": "./src/public_api.d.ts",
|
@@ -25,7 +25,7 @@
|
|
25
25
|
"@angular-devkit/core": "~17.0.0",
|
26
26
|
"@angular-devkit/schematics": "~17.0.0",
|
27
27
|
"@angular/cli": "~17.0.0",
|
28
|
-
"@o3r/telemetry": "^10.0.0-prerelease.
|
28
|
+
"@o3r/telemetry": "^10.0.0-prerelease.48",
|
29
29
|
"@schematics/angular": "~17.0.0",
|
30
30
|
"eslint": "^8.42.0",
|
31
31
|
"rxjs": "^7.8.1",
|
@@ -71,9 +71,9 @@
|
|
71
71
|
"@nx/eslint-plugin": "~17.2.0",
|
72
72
|
"@nx/jest": "~17.2.0",
|
73
73
|
"@nx/js": "~17.2.0",
|
74
|
-
"@o3r/build-helpers": "^10.0.0-prerelease.
|
75
|
-
"@o3r/eslint-plugin": "^10.0.0-prerelease.
|
76
|
-
"@o3r/telemetry": "^10.0.0-prerelease.
|
74
|
+
"@o3r/build-helpers": "^10.0.0-prerelease.48",
|
75
|
+
"@o3r/eslint-plugin": "^10.0.0-prerelease.48",
|
76
|
+
"@o3r/telemetry": "^10.0.0-prerelease.48",
|
77
77
|
"@schematics/angular": "~17.0.3",
|
78
78
|
"@types/jest": "~29.5.2",
|
79
79
|
"@types/node": "^20.0.0",
|
package/src/utility/index.d.ts
CHANGED
@@ -19,6 +19,7 @@ export * from './routes';
|
|
19
19
|
export * from './sub-entry';
|
20
20
|
export * from './template-property.helper';
|
21
21
|
export * from './update-imports';
|
22
|
+
export * from './update-pipes';
|
22
23
|
export * from './builder';
|
23
24
|
export * from './wrapper';
|
24
25
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utility/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utility/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
package/src/utility/index.js
CHANGED
@@ -22,6 +22,7 @@ tslib_1.__exportStar(require("./routes"), exports);
|
|
22
22
|
tslib_1.__exportStar(require("./sub-entry"), exports);
|
23
23
|
tslib_1.__exportStar(require("./template-property.helper"), exports);
|
24
24
|
tslib_1.__exportStar(require("./update-imports"), exports);
|
25
|
+
tslib_1.__exportStar(require("./update-pipes"), exports);
|
25
26
|
tslib_1.__exportStar(require("./builder"), exports);
|
26
27
|
tslib_1.__exportStar(require("./wrapper"), exports);
|
27
28
|
//# sourceMappingURL=index.js.map
|
package/src/utility/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utility/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,uDAA6B;AAC7B,sDAA4B;AAC5B,yDAA+B;AAC/B,wDAA8B;AAC9B,kDAAwB;AACxB,sDAA4B;AAC5B,uDAA6B;AAC7B,sDAA4B;AAC5B,oDAA0B;AAC1B,iDAAuB;AACvB,2DAAiC;AACjC,oDAA0B;AAC1B,qDAA2B;AAC3B,mEAAyC;AACzC,4DAAkC;AAClC,qDAA2B;AAC3B,mDAAyB;AACzB,sDAA4B;AAC5B,qEAA2C;AAC3C,2DAAiC;AACjC,oDAA0B;AAC1B,oDAA0B"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utility/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,uDAA6B;AAC7B,sDAA4B;AAC5B,yDAA+B;AAC/B,wDAA8B;AAC9B,kDAAwB;AACxB,sDAA4B;AAC5B,uDAA6B;AAC7B,sDAA4B;AAC5B,oDAA0B;AAC1B,iDAAuB;AACvB,2DAAiC;AACjC,oDAA0B;AAC1B,qDAA2B;AAC3B,mEAAyC;AACzC,4DAAkC;AAClC,qDAA2B;AAC3B,mDAAyB;AACzB,sDAA4B;AAC5B,qEAA2C;AAC3C,2DAAiC;AACjC,yDAA+B;AAC/B,oDAA0B;AAC1B,oDAA0B"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Rule } from '@angular-devkit/schematics';
|
2
|
+
/** Dictionary of pipes to be updated */
|
3
|
+
export type PipeReplacementInfo = Record<string, {
|
4
|
+
new: {
|
5
|
+
name: string;
|
6
|
+
import?: string;
|
7
|
+
};
|
8
|
+
import: string;
|
9
|
+
}>;
|
10
|
+
/**
|
11
|
+
* Returns a rule tu update pipes
|
12
|
+
* @param pipeReplacementInfo
|
13
|
+
*/
|
14
|
+
export declare const updatePipes: (pipeReplacementInfo: PipeReplacementInfo) => Rule;
|
15
|
+
//# sourceMappingURL=update-pipes.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"update-pipes.d.ts","sourceRoot":"","sources":["../../../src/utility/update-pipes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA0B,MAAM,4BAA4B,CAAC;AAO1E,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAmD7G;;;GAGG;AACH,eAAO,MAAM,WAAW,wBAAyB,mBAAmB,KAAG,IAoDtE,CAAC"}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.updatePipes = void 0;
|
4
|
+
const node_path_1 = require("node:path");
|
5
|
+
const ts = require("typescript");
|
6
|
+
const ast_1 = require("./ast");
|
7
|
+
const component_1 = require("./component");
|
8
|
+
const loaders_1 = require("./loaders");
|
9
|
+
const applyChanges = (pipeReplacementInfo, ngDecorator, matchers, fileWithImports, templateFile, tree, context) => {
|
10
|
+
if (ts.isObjectLiteralExpression(ngDecorator.expression.arguments[0])) {
|
11
|
+
const importsProp = ngDecorator.expression.arguments[0].properties.find((prop) => ts.isPropertyAssignment(prop)
|
12
|
+
&& ts.isIdentifier(prop.name)
|
13
|
+
&& prop.name.text === 'imports'
|
14
|
+
&& ts.isArrayLiteralExpression(prop.initializer));
|
15
|
+
if (importsProp) {
|
16
|
+
matchers.forEach((matcher) => {
|
17
|
+
const pipeName = matcher[1];
|
18
|
+
const importModuleRegexp = new RegExp(`\\b${pipeReplacementInfo[pipeName].import}\\b`, 'g');
|
19
|
+
if (importsProp.initializer.elements.some((element) => importModuleRegexp.test(element.getText()))) {
|
20
|
+
if (pipeReplacementInfo[pipeName].new.import) {
|
21
|
+
tree.overwrite(fileWithImports, tree.readText(fileWithImports).replaceAll(importModuleRegexp, pipeReplacementInfo[pipeName].new.import));
|
22
|
+
}
|
23
|
+
tree.overwrite(templateFile, tree.readText(templateFile).replaceAll(new RegExp(`\\|\\s*${pipeName}`, 'g'), `| ${pipeReplacementInfo[pipeName].new.name}`));
|
24
|
+
}
|
25
|
+
else {
|
26
|
+
context.logger.warn(`Deprecated pipe ${pipeName} was found in ${templateFile} `
|
27
|
+
+ `but no associated import in ${fileWithImports}`
|
28
|
+
+ `to be able to migrate to the new pipe ${pipeReplacementInfo[pipeName].new.name}.`);
|
29
|
+
}
|
30
|
+
});
|
31
|
+
}
|
32
|
+
}
|
33
|
+
};
|
34
|
+
const isNgModuleDecorator = (decorator) => ts.isCallExpression(decorator.expression)
|
35
|
+
&& decorator.expression.expression
|
36
|
+
&& ts.isIdentifier(decorator.expression.expression)
|
37
|
+
&& decorator.expression.expression.text === 'NgModule';
|
38
|
+
/**
|
39
|
+
* Returns a rule tu update pipes
|
40
|
+
* @param pipeReplacementInfo
|
41
|
+
*/
|
42
|
+
const updatePipes = (pipeReplacementInfo) => (tree, context) => {
|
43
|
+
const pipeRegex = new RegExp(`\\|\\s*(${Object.keys(pipeReplacementInfo).join('|')})`, 'g');
|
44
|
+
const files = (0, loaders_1.findFilesInTree)(tree.root, (file) => file.endsWith('.html'));
|
45
|
+
files.forEach((file) => {
|
46
|
+
const matchers = Array.from(file.content.toString().matchAll(pipeRegex)).filter((matcher) => !!pipeReplacementInfo[matcher[1]]);
|
47
|
+
if (matchers.length) {
|
48
|
+
const directory = (0, node_path_1.dirname)(file.path);
|
49
|
+
const baseFileName = (0, node_path_1.basename)(file.path, '.template.html');
|
50
|
+
const componentFile = (0, node_path_1.join)(directory, `${baseFileName}.component.ts`);
|
51
|
+
const moduleFile = (0, node_path_1.join)(directory, `${baseFileName}.module.ts`);
|
52
|
+
let standalone = false;
|
53
|
+
if (tree.exists(componentFile)) {
|
54
|
+
try {
|
55
|
+
const info = (0, component_1.getO3rComponentInfoOrThrowIfNotFound)(tree, componentFile);
|
56
|
+
standalone = info.standalone;
|
57
|
+
}
|
58
|
+
catch { }
|
59
|
+
}
|
60
|
+
if (standalone) {
|
61
|
+
const componentSourceFile = ts.createSourceFile(componentFile, tree.readText(componentFile), ts.ScriptTarget.ES2020, true);
|
62
|
+
const [ngClass] = componentSourceFile.statements.filter((statement) => ts.isClassDeclaration(statement)
|
63
|
+
&& (0, component_1.isNgClassComponent)(statement));
|
64
|
+
const [ngDecorator] = ((ngClass && ts.getDecorators(ngClass)) || []).filter(component_1.isNgClassDecorator);
|
65
|
+
if (ngDecorator) {
|
66
|
+
applyChanges(pipeReplacementInfo, ngDecorator, matchers, componentFile, file.path, tree, context);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
else if (tree.exists(moduleFile)) {
|
70
|
+
const moduleSourceFile = ts.createSourceFile(moduleFile, tree.readText(moduleFile), ts.ScriptTarget.ES2020, true);
|
71
|
+
const ngModuleClass = moduleSourceFile.statements.find((statement) => ts.isClassDeclaration(statement)
|
72
|
+
&& !!(ts.getDecorators(statement) || []).find(isNgModuleDecorator));
|
73
|
+
const ngDecorator = ((ngModuleClass && ts.getDecorators(ngModuleClass)) || []).find(isNgModuleDecorator);
|
74
|
+
if (ngDecorator && (0, ast_1.isDecoratorWithArg)(ngDecorator)) {
|
75
|
+
applyChanges(pipeReplacementInfo, ngDecorator, matchers, moduleFile, file.path, tree, context);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
});
|
80
|
+
};
|
81
|
+
exports.updatePipes = updatePipes;
|
82
|
+
//# sourceMappingURL=update-pipes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"update-pipes.js","sourceRoot":"","sources":["../../../src/utility/update-pipes.ts"],"names":[],"mappings":"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"}
|