@ihk-gfi/lux-components-update 11.3.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.
Files changed (158) hide show
  1. package/LICENSE +198 -0
  2. package/README.md +55 -0
  3. package/package.json +54 -0
  4. package/src/add-lux-components/files/app/app-routing.module.ts +19 -0
  5. package/src/add-lux-components/files/app/app.component.html +27 -0
  6. package/src/add-lux-components/files/app/app.component.spec.ts +19 -0
  7. package/src/add-lux-components/files/app/app.component.ts +13 -0
  8. package/src/add-lux-components/files/app/app.module.ts +56 -0
  9. package/src/add-lux-components/files/app/error/error.component.html +10 -0
  10. package/src/add-lux-components/files/app/error/error.component.scss +3 -0
  11. package/src/add-lux-components/files/app/error/error.component.spec.ts +49 -0
  12. package/src/add-lux-components/files/app/error/error.component.ts +17 -0
  13. package/src/add-lux-components/files/app/home/home.component.html +7 -0
  14. package/src/add-lux-components/files/app/home/home.component.scss +0 -0
  15. package/src/add-lux-components/files/app/home/home.component.ts +13 -0
  16. package/src/add-lux-components/files/app/profil/profil.component.html +1 -0
  17. package/src/add-lux-components/files/app/profil/profil.component.scss +0 -0
  18. package/src/add-lux-components/files/app/profil/profil.component.spec.ts +24 -0
  19. package/src/add-lux-components/files/app/profil/profil.component.ts +11 -0
  20. package/src/add-lux-components/files/environments/environment.prod.ts +4 -0
  21. package/src/add-lux-components/files/environments/environment.ts +17 -0
  22. package/src/add-lux-components/files/locale/messages.en.xlf +948 -0
  23. package/src/add-lux-components/files/locale/messages.xlf +822 -0
  24. package/src/add-lux-components/files/scripts/.browserslistrc +17 -0
  25. package/src/add-lux-components/files/src/polyfills.ts +68 -0
  26. package/src/add-lux-components/index.d.ts +10 -0
  27. package/src/add-lux-components/index.js +143 -0
  28. package/src/add-lux-components/index.js.map +1 -0
  29. package/src/add-lux-components/index.ts +183 -0
  30. package/src/add-lux-components/index_spec.d.ts +1 -0
  31. package/src/add-lux-components/index_spec.js +51 -0
  32. package/src/add-lux-components/index_spec.js.map +1 -0
  33. package/src/add-lux-components/index_spec.ts +55 -0
  34. package/src/add-lux-components/schema.json +23 -0
  35. package/src/collection.json +55 -0
  36. package/src/migrate-to-eslint/files/.eslintrc.json +68 -0
  37. package/src/migrate-to-eslint/files/.prettierrc +25 -0
  38. package/src/migrate-to-eslint/index.d.ts +6 -0
  39. package/src/migrate-to-eslint/index.js +149 -0
  40. package/src/migrate-to-eslint/index.js.map +1 -0
  41. package/src/migrate-to-eslint/index.ts +181 -0
  42. package/src/migrate-to-eslint/index_spec.d.ts +1 -0
  43. package/src/migrate-to-eslint/index_spec.js +129 -0
  44. package/src/migrate-to-eslint/index_spec.js.map +1 -0
  45. package/src/migrate-to-eslint/index_spec.ts +152 -0
  46. package/src/migrate-to-eslint/schema.json +23 -0
  47. package/src/migrate-to-webcomponent/index.d.ts +10 -0
  48. package/src/migrate-to-webcomponent/index.js +278 -0
  49. package/src/migrate-to-webcomponent/index.js.map +1 -0
  50. package/src/migrate-to-webcomponent/index.ts +331 -0
  51. package/src/migrate-to-webcomponent/index_spec.d.ts +1 -0
  52. package/src/migrate-to-webcomponent/index_spec.js +580 -0
  53. package/src/migrate-to-webcomponent/index_spec.js.map +1 -0
  54. package/src/migrate-to-webcomponent/index_spec.ts +703 -0
  55. package/src/migrate-to-webcomponent/schema.json +23 -0
  56. package/src/update/files/locale/messages.en.xlf +940 -0
  57. package/src/update/files/locale/messages.xlf +815 -0
  58. package/src/update/files/scripts/move-de-files.js +15 -0
  59. package/src/update/index.d.ts +23 -0
  60. package/src/update/index.js +635 -0
  61. package/src/update/index.js.map +1 -0
  62. package/src/update/index.ts +712 -0
  63. package/src/update/index_spec.d.ts +1 -0
  64. package/src/update/index_spec.js +990 -0
  65. package/src/update/index_spec.js.map +1 -0
  66. package/src/update/index_spec.ts +1145 -0
  67. package/src/update/schema.json +23 -0
  68. package/src/update-dependencies/index.d.ts +5 -0
  69. package/src/update-dependencies/index.js +113 -0
  70. package/src/update-dependencies/index.js.map +1 -0
  71. package/src/update-dependencies/index.ts +114 -0
  72. package/src/update-dependencies/schema.json +23 -0
  73. package/src/update110001/index.d.ts +2 -0
  74. package/src/update110001/index.js +42 -0
  75. package/src/update110001/index.js.map +1 -0
  76. package/src/update110001/index.ts +40 -0
  77. package/src/update110001/index_spec.d.ts +1 -0
  78. package/src/update110001/index_spec.js +67 -0
  79. package/src/update110001/index_spec.js.map +1 -0
  80. package/src/update110001/index_spec.ts +72 -0
  81. package/src/update110001/schema.json +23 -0
  82. package/src/update110100/index.d.ts +2 -0
  83. package/src/update110100/index.js +27 -0
  84. package/src/update110100/index.js.map +1 -0
  85. package/src/update110100/index.ts +24 -0
  86. package/src/update110100/index_spec.d.ts +1 -0
  87. package/src/update110100/index_spec.js +69 -0
  88. package/src/update110100/index_spec.js.map +1 -0
  89. package/src/update110100/index_spec.ts +73 -0
  90. package/src/update110100/schema.json +23 -0
  91. package/src/update110101/index.d.ts +2 -0
  92. package/src/update110101/index.js +24 -0
  93. package/src/update110101/index.js.map +1 -0
  94. package/src/update110101/index.ts +21 -0
  95. package/src/update110101/index_spec.d.ts +1 -0
  96. package/src/update110101/index_spec.js +65 -0
  97. package/src/update110101/index_spec.js.map +1 -0
  98. package/src/update110101/index_spec.ts +69 -0
  99. package/src/update110101/schema.json +23 -0
  100. package/src/update110200/index.d.ts +2 -0
  101. package/src/update110200/index.js +24 -0
  102. package/src/update110200/index.js.map +1 -0
  103. package/src/update110200/index.ts +21 -0
  104. package/src/update110200/index_spec.d.ts +1 -0
  105. package/src/update110200/index_spec.js +65 -0
  106. package/src/update110200/index_spec.js.map +1 -0
  107. package/src/update110200/index_spec.ts +69 -0
  108. package/src/update110200/schema.json +23 -0
  109. package/src/update110300/index.d.ts +2 -0
  110. package/src/update110300/index.js +133 -0
  111. package/src/update110300/index.js.map +1 -0
  112. package/src/update110300/index.ts +148 -0
  113. package/src/update110300/index_spec.d.ts +1 -0
  114. package/src/update110300/index_spec.js +121 -0
  115. package/src/update110300/index_spec.js.map +1 -0
  116. package/src/update110300/index_spec.ts +139 -0
  117. package/src/update110300/schema.json +23 -0
  118. package/src/utility/dependencies.d.ts +39 -0
  119. package/src/utility/dependencies.js +96 -0
  120. package/src/utility/dependencies.js.map +1 -0
  121. package/src/utility/dependencies.ts +116 -0
  122. package/src/utility/files.d.ts +60 -0
  123. package/src/utility/files.js +299 -0
  124. package/src/utility/files.js.map +1 -0
  125. package/src/utility/files.ts +355 -0
  126. package/src/utility/html.d.ts +49 -0
  127. package/src/utility/html.js +183 -0
  128. package/src/utility/html.js.map +1 -0
  129. package/src/utility/html.ts +212 -0
  130. package/src/utility/json.d.ts +34 -0
  131. package/src/utility/json.js +70 -0
  132. package/src/utility/json.js.map +1 -0
  133. package/src/utility/json.ts +70 -0
  134. package/src/utility/logging.d.ts +32 -0
  135. package/src/utility/logging.js +82 -0
  136. package/src/utility/logging.js.map +1 -0
  137. package/src/utility/logging.ts +80 -0
  138. package/src/utility/test.d.ts +10 -0
  139. package/src/utility/test.js +24 -0
  140. package/src/utility/test.js.map +1 -0
  141. package/src/utility/test.ts +24 -0
  142. package/src/utility/typescript.d.ts +22 -0
  143. package/src/utility/typescript.js +521 -0
  144. package/src/utility/typescript.js.map +1 -0
  145. package/src/utility/typescript.ts +598 -0
  146. package/src/utility/typescript_spec.d.ts +1 -0
  147. package/src/utility/typescript_spec.js +1006 -0
  148. package/src/utility/typescript_spec.js.map +1 -0
  149. package/src/utility/typescript_spec.ts +1267 -0
  150. package/src/utility/util.d.ts +33 -0
  151. package/src/utility/util.js +139 -0
  152. package/src/utility/util.js.map +1 -0
  153. package/src/utility/util.ts +140 -0
  154. package/src/utility/validation.d.ts +11 -0
  155. package/src/utility/validation.js +44 -0
  156. package/src/utility/validation.js.map +1 -0
  157. package/src/utility/validation.ts +49 -0
  158. package/tsconfig.json +37 -0
@@ -0,0 +1,68 @@
1
+ {
2
+ "root": true,
3
+ "ignorePatterns": [
4
+ "projects/**/*"
5
+ ],
6
+ "overrides": [
7
+ {
8
+ "files": [
9
+ "*.ts"
10
+ ],
11
+ "parserOptions": {
12
+ "project": [
13
+ "tsconfig.json",
14
+ "e2e/tsconfig.json"
15
+ ],
16
+ "createDefaultProgram": true
17
+ },
18
+ "extends": [
19
+ "plugin:jsdoc/recommended",
20
+ "plugin:@angular-eslint/recommended",
21
+ "plugin:@angular-eslint/template/process-inline-templates"
22
+ ],
23
+ "rules": {
24
+ // Zusätzliche Regeln (siehe Abschnitt "extends")
25
+ "id-blacklist": "error",
26
+ "id-match": "error",
27
+ "no-shadow": "off",
28
+ "max-classes-per-file": ["error", 1],
29
+ "brace-style": ["error", "1tbs"],
30
+ "@typescript-eslint/no-shadow": "error",
31
+ "@typescript-eslint/consistent-type-definitions": "error",
32
+ "@typescript-eslint/member-delimiter-style": "error",
33
+ "@typescript-eslint/no-inferrable-types": "error",
34
+ "@typescript-eslint/member-ordering": "off",
35
+ "@angular-eslint/component-selector": ["error", { "type": "element", "prefix": "", "style": "kebab-case" }],
36
+ "@angular-eslint/directive-selector": ["error", { "type": "attribute", "prefix": "", "style": "camelCase" }],
37
+ "@angular-eslint/no-attribute-decorator": "error",
38
+ "@angular-eslint/no-forward-ref": "error",
39
+ "@angular-eslint/no-input-rename": "error",
40
+ "@angular-eslint/no-output-rename": "error",
41
+ "@angular-eslint/no-pipe-impure": "error",
42
+ "@angular-eslint/use-component-view-encapsulation": "error",
43
+ "@angular-eslint/no-empty-lifecycle-method": "error",
44
+
45
+ // Deaktivierte Regeln
46
+ "jsdoc/require-param-type": "off",
47
+ "jsdoc/require-returns-type": "off",
48
+ "jsdoc/require-returns": "off",
49
+ "jsdoc/check-param-names": "off",
50
+ "jsdoc/require-param-description": "off",
51
+ "@typescript-eslint/naming-convention": "off",
52
+ "@typescript-eslint/dot-notation": "off",
53
+ "@typescript-eslint/explicit-member-accessibility": ["off", { "accessibility": "explicit" }],
54
+ "@angular-eslint/directive-class-suffix": "off",
55
+ "@angular-eslint/no-host-metadata-property": "off"
56
+ }
57
+ },
58
+ {
59
+ "files": [
60
+ "*.html"
61
+ ],
62
+ "extends": [
63
+ "plugin:@angular-eslint/template/recommended"
64
+ ],
65
+ "rules": {}
66
+ }
67
+ ]
68
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "endOfLine": "lf",
3
+ "trailingComma": "none",
4
+ "printWidth": 140,
5
+ "singleQuote": true,
6
+ "useTabs": false,
7
+ "tabWidth": 2,
8
+ "semi": true,
9
+ "bracketSpacing": true,
10
+ "jsxBracketSameLine": true,
11
+ "overrides": [
12
+ {
13
+ "files": "*.component.html",
14
+ "options": {
15
+ "parser": "angular"
16
+ }
17
+ },
18
+ {
19
+ "files": "*.html",
20
+ "options": {
21
+ "parser": "html"
22
+ }
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,6 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ export declare function migrateToEsLint(options: any): Rule;
3
+ export declare function deleteEmptyLifecyleHooksInTsFiles(options: any): Rule;
4
+ export declare function updateAngularJson(options: any): Rule;
5
+ export declare function updatePackageJson(options: any): Rule;
6
+ export declare function copyFiles(options: any): Rule;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.copyFiles = exports.updatePackageJson = exports.updateAngularJson = exports.deleteEmptyLifecyleHooksInTsFiles = exports.migrateToEsLint = void 0;
4
+ const schematics_1 = require("@angular-devkit/schematics");
5
+ const chalk = require("chalk");
6
+ const jsonc_parser_1 = require("jsonc-parser");
7
+ const ts = require("typescript");
8
+ const files_1 = require("../utility/files");
9
+ const json_1 = require("../utility/json");
10
+ const logging_1 = require("../utility/logging");
11
+ const typescript_1 = require("../utility/typescript");
12
+ const util_1 = require("../utility/util");
13
+ function migrateToEsLint(options) {
14
+ return schematics_1.chain([
15
+ util_1.messageInfoRule(`Bereitet das LUX-Componentsprojekt für die Migration auf ES-Lint vor...`),
16
+ copyFiles(options),
17
+ updatePackageJson(options),
18
+ updateAngularJson(options),
19
+ deleteEmptyLifecyleHooksInTsFiles(options),
20
+ util_1.messageSuccessRule(`Die Vorbereitungen wurden abgeschlossen.`),
21
+ util_1.finish(`
22
+
23
+ ${chalk.yellowBright('Wichtig! Die folgenden Schritte müssen noch manuell ausgeführt werden:')}
24
+ - In der Console ${chalk.greenBright('ng add @angular-eslint/schematics')} ausführen.
25
+ - In der Console ${chalk.greenBright('ng g @angular-eslint/schematics:convert-tslint-to-eslint ' + options.project)} ausführen.
26
+ ? Would you like to remove TSLint and its related config if there are no TSLint projects remaining after this conversion? (Y/n) ${chalk.greenBright(`yes`)}
27
+ ? Would you like to ignore the existing TSLint config? Recommended if the TSLint config has not been altered much as it makes the new ESLint config cleaner. (y/N) ${chalk.greenBright(`yes`)}
28
+ - In der Console ${chalk.greenBright(`npm run lint`)} ausführen.
29
+ - Lint-Fehler beheben
30
+ - Fertig!
31
+ `)
32
+ ]);
33
+ }
34
+ exports.migrateToEsLint = migrateToEsLint;
35
+ function removeLifeCycleHookMethod(tree, filePath, lifeCycleHookMethodeName) {
36
+ const content = tree.read(filePath).toString();
37
+ const fileName = filePath.substring(filePath.lastIndexOf('/') + 1, filePath.length);
38
+ const sourceFile = ts.createSourceFile(`${fileName}`, content, ts.ScriptTarget.Latest, true);
39
+ const nodes = typescript_1.getSourceNodes(sourceFile);
40
+ const methodNodes = nodes.filter((n) => n.kind === ts.SyntaxKind.MethodDeclaration);
41
+ if (methodNodes) {
42
+ methodNodes.forEach(methodNode => {
43
+ const methodNameNode = methodNode.getChildren().find((n) => n.kind === ts.SyntaxKind.Identifier);
44
+ if (!methodNameNode) {
45
+ throw new schematics_1.SchematicsException(`Die Methode in der Datei ${fileName} hat keinen Namen.`);
46
+ }
47
+ if (methodNameNode.getText() === lifeCycleHookMethodeName) {
48
+ const blockNode = methodNode.getChildren().find((n) => n.kind === ts.SyntaxKind.Block);
49
+ if (!blockNode) {
50
+ throw new schematics_1.SchematicsException(`Die Methode in der Datei ${fileName} hat keinen Block.`);
51
+ }
52
+ const syntaxListNode = blockNode.getChildren().find((n) => n.kind === ts.SyntaxKind.SyntaxList);
53
+ if (!syntaxListNode) {
54
+ throw new schematics_1.SchematicsException(`Die Methode in der Datei ${fileName} hat keinen Inhalt.`);
55
+ }
56
+ if (syntaxListNode.getChildren().length === 0) {
57
+ // Leere Lifecycle-Hook-Methode löschen
58
+ const updateRecorder = tree.beginUpdate(filePath);
59
+ updateRecorder.remove(methodNode.pos, methodNode.end - methodNode.pos);
60
+ tree.commitUpdate(updateRecorder);
61
+ const interfaceName = methodNameNode.getText().substring(2);
62
+ typescript_1.removeInterface(tree, filePath, interfaceName, false);
63
+ typescript_1.removeImport(tree, filePath, '@angular/core', interfaceName, false);
64
+ logging_1.logInfo(`Aus der Datei "${filePath}" wurde der leere Lifecycle-Hook "${lifeCycleHookMethodeName}" entfernt.`);
65
+ }
66
+ }
67
+ });
68
+ }
69
+ }
70
+ function deleteEmptyLifecyleHooksInTsFiles(options) {
71
+ return schematics_1.chain([
72
+ util_1.messageInfoRule(`Leere Lifecycle-Hooks werden entfernt...`),
73
+ (tree, context) => {
74
+ files_1.iterateFilesAndModifyContent(tree, options.path, (filePath, content) => {
75
+ removeLifeCycleHookMethod(tree, filePath, 'ngOnChanges');
76
+ removeLifeCycleHookMethod(tree, filePath, 'ngOnInit');
77
+ removeLifeCycleHookMethod(tree, filePath, 'ngDoCheck');
78
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterContentInit');
79
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterContentChecked');
80
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterViewInit');
81
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterViewChecked');
82
+ removeLifeCycleHookMethod(tree, filePath, 'ngOnDestroy');
83
+ }, '.component.ts');
84
+ },
85
+ util_1.messageSuccessRule(`Leere Lifecycle-Hooks wurden entfernt.`)
86
+ ]);
87
+ }
88
+ exports.deleteEmptyLifecyleHooksInTsFiles = deleteEmptyLifecyleHooksInTsFiles;
89
+ function updateAngularJson(options) {
90
+ return schematics_1.chain([
91
+ util_1.messageInfoRule(`Die Datei "angular.json" wird angepasst...`),
92
+ (tree, _context) => {
93
+ const filePath = `/angular.json`;
94
+ const newValuesArr = [];
95
+ const packageJsonAsNode = json_1.readJson(tree, filePath);
96
+ const appLintNode = jsonc_parser_1.findNodeAtLocation(packageJsonAsNode, ['projects', options.project, 'architect', 'app-lint']);
97
+ if (appLintNode) {
98
+ newValuesArr.push({ path: ['projects', options.project, 'architect', 'app-lint'], value: undefined, message: `Der alte Abschnitt "app-lint" wurde entfernt.` });
99
+ }
100
+ const specLintNode = jsonc_parser_1.findNodeAtLocation(packageJsonAsNode, ['projects', options.project, 'architect', 'spec-lint']);
101
+ if (specLintNode) {
102
+ newValuesArr.push({ path: ['projects', options.project, 'architect', 'spec-lint'], value: undefined, message: `Der alte Abschnitt "spec-lint" wurde entfernt.` });
103
+ }
104
+ const e2eLintNode = jsonc_parser_1.findNodeAtLocation(packageJsonAsNode, ['projects', options.project + '-e2e', 'architect', 'lint']);
105
+ if (e2eLintNode) {
106
+ newValuesArr.push({ path: ['projects', options.project + '-e2e', 'architect', 'lint'], value: undefined, message: `Der alte Abschnitt "lint" wurde entfernt.` });
107
+ }
108
+ newValuesArr.forEach(change => {
109
+ const tsConfigJson = json_1.readJsonAsString(tree, filePath);
110
+ const edits = jsonc_parser_1.modify(tsConfigJson, change.path, change.value, { formattingOptions: json_1.jsonFormattingOptions });
111
+ tree.overwrite(filePath, jsonc_parser_1.applyEdits(tsConfigJson, edits));
112
+ logging_1.logInfo(change.message);
113
+ });
114
+ return tree;
115
+ },
116
+ util_1.messageSuccessRule(`Die Datei "angular.json" wurde angepasst.`)
117
+ ]);
118
+ }
119
+ exports.updateAngularJson = updateAngularJson;
120
+ function updatePackageJson(options) {
121
+ return schematics_1.chain([
122
+ util_1.messageInfoRule(`Die Datei "package.json" wird angepasst...`),
123
+ (tree, _context) => {
124
+ const filePath = `/package.json`;
125
+ const newValuesArr = [
126
+ { path: ['scripts', 'lint'], value: "ng lint --fix", message: `Skript "lint" aktualisiert.` },
127
+ { path: ['devDependencies', 'eslint-plugin-jsdoc'], value: "32.3.1", message: `devDependencies "eslint-plugin-jsdoc" hinzugefügt.` }
128
+ ];
129
+ newValuesArr.forEach(change => {
130
+ const tsConfigJson = json_1.readJsonAsString(tree, filePath);
131
+ const edits = jsonc_parser_1.modify(tsConfigJson, change.path, change.value, { formattingOptions: json_1.jsonFormattingOptions });
132
+ tree.overwrite(filePath, jsonc_parser_1.applyEdits(tsConfigJson, edits));
133
+ logging_1.logInfo(change.message);
134
+ });
135
+ return tree;
136
+ },
137
+ util_1.messageSuccessRule(`Die Datei "package.json" wurde angepasst.`)
138
+ ]);
139
+ }
140
+ exports.updatePackageJson = updatePackageJson;
141
+ function copyFiles(options) {
142
+ return schematics_1.chain([
143
+ util_1.messageInfoRule(`Die benötigten Dateien werden kopiert...`),
144
+ files_1.moveFilesToDirectory(options, 'files', '/'),
145
+ util_1.messageSuccessRule(`Die benötigten Dateien wurden kopiert.`)
146
+ ]);
147
+ }
148
+ exports.copyFiles = copyFiles;
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import { chain, Rule, SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics';
2
+ import * as chalk from 'chalk';
3
+ import { applyEdits, Edit, findNodeAtLocation, modify } from 'jsonc-parser';
4
+ import * as ts from 'typescript';
5
+ import { iterateFilesAndModifyContent, moveFilesToDirectory } from '../utility/files';
6
+ import { jsonFormattingOptions, readJson, readJsonAsString } from '../utility/json';
7
+ import { logInfo } from '../utility/logging';
8
+ import { getSourceNodes, removeImport, removeInterface } from '../utility/typescript';
9
+ import { finish, messageInfoRule, messageSuccessRule } from '../utility/util';
10
+
11
+ export function migrateToEsLint(options: any): Rule {
12
+ return chain([
13
+ messageInfoRule(`Bereitet das LUX-Componentsprojekt für die Migration auf ES-Lint vor...`),
14
+ copyFiles(options),
15
+ updatePackageJson(options),
16
+ updateAngularJson(options),
17
+ deleteEmptyLifecyleHooksInTsFiles(options),
18
+ messageSuccessRule(`Die Vorbereitungen wurden abgeschlossen.`),
19
+ finish(
20
+ `
21
+
22
+ ${chalk.yellowBright('Wichtig! Die folgenden Schritte müssen noch manuell ausgeführt werden:')}
23
+ - In der Console ${chalk.greenBright('ng add @angular-eslint/schematics')} ausführen.
24
+ - In der Console ${chalk.greenBright('ng g @angular-eslint/schematics:convert-tslint-to-eslint ' + options.project)} ausführen.
25
+ ? Would you like to remove TSLint and its related config if there are no TSLint projects remaining after this conversion? (Y/n) ${chalk.greenBright(`yes`)}
26
+ ? Would you like to ignore the existing TSLint config? Recommended if the TSLint config has not been altered much as it makes the new ESLint config cleaner. (y/N) ${chalk.greenBright(`yes`)}
27
+ - In der Console ${chalk.greenBright(`npm run lint`)} ausführen.
28
+ - Lint-Fehler beheben
29
+ - Fertig!
30
+ `
31
+ )
32
+ ]);
33
+ }
34
+
35
+ function removeLifeCycleHookMethod(tree: Tree, filePath: string, lifeCycleHookMethodeName: string) {
36
+ const content = (tree.read(filePath) as Buffer).toString();
37
+ const fileName = filePath.substring(filePath.lastIndexOf('/') + 1, filePath.length);
38
+ const sourceFile = ts.createSourceFile(`${ fileName }`, content, ts.ScriptTarget.Latest, true);
39
+
40
+ const nodes = getSourceNodes(sourceFile);
41
+ const methodNodes = nodes.filter((n) => n.kind === ts.SyntaxKind.MethodDeclaration);
42
+ if (methodNodes) {
43
+ methodNodes.forEach(methodNode => {
44
+
45
+ const methodNameNode = methodNode.getChildren().find((n) => n.kind === ts.SyntaxKind.Identifier);
46
+ if (!methodNameNode) {
47
+ throw new SchematicsException(`Die Methode in der Datei ${ fileName } hat keinen Namen.`);
48
+
49
+ }
50
+ if (methodNameNode.getText() === lifeCycleHookMethodeName) {
51
+ const blockNode = methodNode.getChildren().find((n) => n.kind === ts.SyntaxKind.Block);
52
+
53
+ if (!blockNode) {
54
+ throw new SchematicsException(`Die Methode in der Datei ${ fileName } hat keinen Block.`);
55
+ }
56
+
57
+ const syntaxListNode = blockNode.getChildren().find((n) => n.kind === ts.SyntaxKind.SyntaxList);
58
+
59
+ if (!syntaxListNode) {
60
+ throw new SchematicsException(`Die Methode in der Datei ${ fileName } hat keinen Inhalt.`);
61
+ }
62
+
63
+ if (syntaxListNode.getChildren().length === 0) {
64
+ // Leere Lifecycle-Hook-Methode löschen
65
+ const updateRecorder = tree.beginUpdate(filePath);
66
+ updateRecorder.remove(methodNode.pos, methodNode.end - methodNode.pos);
67
+ tree.commitUpdate(updateRecorder);
68
+
69
+ const interfaceName = methodNameNode.getText().substring(2);
70
+ removeInterface(tree, filePath, interfaceName, false);
71
+ removeImport(tree, filePath, '@angular/core', interfaceName, false);
72
+
73
+ logInfo(`Aus der Datei "${filePath}" wurde der leere Lifecycle-Hook "${lifeCycleHookMethodeName}" entfernt.`);
74
+ }
75
+ }
76
+ });
77
+ }
78
+ }
79
+
80
+ export function deleteEmptyLifecyleHooksInTsFiles(options: any): Rule {
81
+ return chain([
82
+ messageInfoRule(`Leere Lifecycle-Hooks werden entfernt...`),
83
+ (tree: Tree, context: SchematicContext) => {
84
+ iterateFilesAndModifyContent(
85
+ tree,
86
+ options.path,
87
+ (filePath: string, content: string) => {
88
+ removeLifeCycleHookMethod(tree, filePath, 'ngOnChanges');
89
+ removeLifeCycleHookMethod(tree, filePath, 'ngOnInit');
90
+ removeLifeCycleHookMethod(tree, filePath, 'ngDoCheck');
91
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterContentInit');
92
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterContentChecked');
93
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterViewInit');
94
+ removeLifeCycleHookMethod(tree, filePath, 'ngAfterViewChecked');
95
+ removeLifeCycleHookMethod(tree, filePath, 'ngOnDestroy');
96
+ },
97
+ '.component.ts'
98
+ );
99
+ },
100
+ messageSuccessRule(`Leere Lifecycle-Hooks wurden entfernt.`)
101
+ ]);
102
+ }
103
+
104
+ export function updateAngularJson(options: any): Rule {
105
+ return chain([
106
+ messageInfoRule(`Die Datei "angular.json" wird angepasst...`),
107
+ (tree: Tree, _context: SchematicContext) => {
108
+ const filePath = `/angular.json`;
109
+
110
+ const newValuesArr: { path: string[]; value: any; message: string }[] = [];
111
+
112
+ const packageJsonAsNode = readJson(tree, filePath);
113
+ const appLintNode = findNodeAtLocation(packageJsonAsNode, ['projects', options.project, 'architect', 'app-lint']);
114
+ if (appLintNode) {
115
+ newValuesArr.push({ path: ['projects', options.project, 'architect', 'app-lint'], value: undefined, message: `Der alte Abschnitt "app-lint" wurde entfernt.`});
116
+ }
117
+
118
+ const specLintNode = findNodeAtLocation(packageJsonAsNode, ['projects', options.project, 'architect', 'spec-lint']);
119
+ if (specLintNode) {
120
+ newValuesArr.push({ path: ['projects', options.project, 'architect', 'spec-lint'], value: undefined, message: `Der alte Abschnitt "spec-lint" wurde entfernt.`});
121
+ }
122
+
123
+ const e2eLintNode = findNodeAtLocation(packageJsonAsNode, ['projects', options.project + '-e2e', 'architect', 'lint']);
124
+ if (e2eLintNode) {
125
+ newValuesArr.push({ path: ['projects', options.project + '-e2e', 'architect', 'lint'], value: undefined, message: `Der alte Abschnitt "lint" wurde entfernt.`});
126
+ }
127
+
128
+ newValuesArr.forEach(change => {
129
+ const tsConfigJson = readJsonAsString(tree, filePath);
130
+ const edits: Edit[] = modify(tsConfigJson, change.path, change.value, { formattingOptions: jsonFormattingOptions })
131
+
132
+ tree.overwrite(
133
+ filePath,
134
+ applyEdits(tsConfigJson, edits)
135
+ );
136
+
137
+ logInfo(change.message);
138
+ });
139
+
140
+ return tree;
141
+ },
142
+ messageSuccessRule(`Die Datei "angular.json" wurde angepasst.`)
143
+ ]);
144
+ }
145
+
146
+ export function updatePackageJson(options: any): Rule {
147
+ return chain([
148
+ messageInfoRule(`Die Datei "package.json" wird angepasst...`),
149
+ (tree: Tree, _context: SchematicContext) => {
150
+ const filePath = `/package.json`;
151
+
152
+ const newValuesArr = [
153
+ { path: ['scripts', 'lint'], value: "ng lint --fix", message: `Skript "lint" aktualisiert.`},
154
+ { path: ['devDependencies', 'eslint-plugin-jsdoc'], value: "32.3.1", message: `devDependencies "eslint-plugin-jsdoc" hinzugefügt.`}
155
+ ];
156
+
157
+ newValuesArr.forEach(change => {
158
+ const tsConfigJson = readJsonAsString(tree, filePath);
159
+ const edits: Edit[] = modify(tsConfigJson, change.path, change.value, { formattingOptions: jsonFormattingOptions })
160
+
161
+ tree.overwrite(
162
+ filePath,
163
+ applyEdits(tsConfigJson, edits)
164
+ );
165
+
166
+ logInfo(change.message);
167
+ });
168
+
169
+ return tree;
170
+ },
171
+ messageSuccessRule(`Die Datei "package.json" wurde angepasst.`)
172
+ ]);
173
+ }
174
+
175
+ export function copyFiles(options: any): Rule {
176
+ return chain([
177
+ messageInfoRule(`Die benötigten Dateien werden kopiert...`),
178
+ moveFilesToDirectory(options, 'files', '/'),
179
+ messageSuccessRule(`Die benötigten Dateien wurden kopiert.`)
180
+ ]);
181
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const schematics_1 = require("@angular-devkit/schematics");
13
+ const testing_1 = require("@angular-devkit/schematics/testing");
14
+ const path = require("path");
15
+ const rxjs_1 = require("rxjs");
16
+ const test_1 = require("../utility/test");
17
+ const util_1 = require("../utility/util");
18
+ const index_1 = require("./index");
19
+ const collectionPath = path.join(__dirname, '../collection.json');
20
+ describe('migrate-to-eslint', () => {
21
+ let appTree;
22
+ let runner;
23
+ let context;
24
+ const testOptions = {};
25
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
26
+ runner = new testing_1.SchematicTestRunner('schematics', collectionPath);
27
+ appTree = yield runner.runExternalSchematicAsync('@schematics/angular', 'workspace', test_1.workspaceOptions).toPromise();
28
+ appTree = yield runner
29
+ .runExternalSchematicAsync('@schematics/angular', 'application', test_1.appOptions, appTree)
30
+ .toPromise();
31
+ util_1.UtilConfig.defaultWaitMS = 0;
32
+ const collection = runner.engine.createCollection(collectionPath);
33
+ const schematic = runner.engine.createSchematic('migrate-to-eslint', collection);
34
+ context = runner.engine.createContext(schematic);
35
+ testOptions.project = test_1.appOptions.name;
36
+ testOptions.path = test_1.workspaceOptions.newProjectRoot + '/' + test_1.appOptions.name;
37
+ testOptions.verbose = true;
38
+ }));
39
+ describe('[Rule] deleteEmptyLifecyleHooksInTsFiles', () => {
40
+ it('Sollte die leeren Lifecycle-Hooks (vollständiger Import) entfernen', (done) => {
41
+ appTree.create(testOptions.path + '/src/app/test.component.ts', `
42
+ import { Component, OnInit } from '@angular/core';
43
+
44
+ @Component({
45
+ selector : 'bp-anbindung-lazy',
46
+ templateUrl: './anbindung-lazy.component.html'
47
+ })
48
+ export class AnbindungLazyComponent implements OnInit {
49
+
50
+ constructor() {
51
+ }
52
+
53
+ ngOnInit() {
54
+ }
55
+
56
+ }
57
+
58
+ `);
59
+ schematics_1.callRule(index_1.deleteEmptyLifecyleHooksInTsFiles(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
60
+ var _a;
61
+ const content = (_a = success.read(testOptions.path + '/src/app/test.component.ts')) === null || _a === void 0 ? void 0 : _a.toString();
62
+ expect(content).toContain('import { Component } from \'@angular/core\';');
63
+ expect(content).toContain('export class AnbindungLazyComponent {');
64
+ expect(content).not.toContain('ngOnInit');
65
+ done();
66
+ }, (reason) => expect(reason).toBeUndefined());
67
+ });
68
+ it('Sollte die leeren Lifecycle-Hooks (fehlender Import) entfernen', (done) => {
69
+ appTree.create(testOptions.path + '/src/app/test.component.ts', `
70
+ import { Component, OnChanges } from '@angular/core';
71
+
72
+ @Component({
73
+ selector : 'bp-anbindung-lazy',
74
+ templateUrl: './anbindung-lazy.component.html'
75
+ })
76
+ export class AnbindungLazyComponent implements OnInit, OnChanges {
77
+
78
+ constructor() {
79
+ }
80
+
81
+ ngOnInit() {
82
+ }
83
+
84
+ ngOnChanges() {}
85
+
86
+ }
87
+
88
+ `);
89
+ schematics_1.callRule(index_1.deleteEmptyLifecyleHooksInTsFiles(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
90
+ var _a;
91
+ const content = (_a = success.read(testOptions.path + '/src/app/test.component.ts')) === null || _a === void 0 ? void 0 : _a.toString();
92
+ expect(content).toContain('import { Component } from \'@angular/core\';');
93
+ expect(content).toContain('export class AnbindungLazyComponent {');
94
+ expect(content).not.toContain('ngOnInit');
95
+ expect(content).not.toContain('ngOnChanges');
96
+ done();
97
+ }, (reason) => expect(reason).toBeUndefined());
98
+ });
99
+ it('Sollte die leeren Lifecycle-Hooks (einziger Import) entfernen', (done) => {
100
+ appTree.create(testOptions.path + '/src/app/test.component.ts', `
101
+ import { Aaa, OnInit, Bbb } from '@angular/core';
102
+
103
+ @Component({
104
+ selector : 'bp-anbindung-lazy',
105
+ templateUrl: './anbindung-lazy.component.html'
106
+ })
107
+ export class AnbindungLazyComponent implements Aaa,OnInit, Bbb {
108
+
109
+ constructor() {
110
+ }
111
+
112
+ ngOnInit() {
113
+ }
114
+
115
+ }
116
+
117
+ `);
118
+ schematics_1.callRule(index_1.deleteEmptyLifecyleHooksInTsFiles(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
119
+ var _a;
120
+ const content = (_a = success.read(testOptions.path + '/src/app/test.component.ts')) === null || _a === void 0 ? void 0 : _a.toString();
121
+ expect(content).toContain('import { Aaa, Bbb } from \'@angular/core\';');
122
+ expect(content).toContain('export class AnbindungLazyComponent implements Aaa, Bbb {');
123
+ expect(content).not.toContain('ngOnInit');
124
+ done();
125
+ }, (reason) => expect(reason).toBeUndefined());
126
+ });
127
+ });
128
+ });
129
+ //# sourceMappingURL=index_spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":"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"}