@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,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deletePackageJsonDependency = exports.updatePackageJsonDependency = exports.updateDependencyDev = exports.updateDependency = exports.getPackageJsonDependency = exports.NodeDependencyType = void 0;
4
+ const chalk = require("chalk");
5
+ const jsonc_parser_1 = require("jsonc-parser");
6
+ const files_1 = require("./files");
7
+ const json_1 = require("./json");
8
+ const logging_1 = require("./logging");
9
+ var NodeDependencyType;
10
+ (function (NodeDependencyType) {
11
+ NodeDependencyType["Default"] = "dependencies";
12
+ NodeDependencyType["Dev"] = "devDependencies";
13
+ NodeDependencyType["Peer"] = "peerDependencies";
14
+ NodeDependencyType["Optional"] = "optionalDependencies";
15
+ })(NodeDependencyType = exports.NodeDependencyType || (exports.NodeDependencyType = {}));
16
+ /**
17
+ * Versucht eine Dependency aus der package.json auslesen und gibt diese zurück.
18
+ * @param tree
19
+ * @param name
20
+ */
21
+ function getPackageJsonDependency(tree, name) {
22
+ const packageJsonNode = json_1.readJson(tree, '/package.json');
23
+ let dependency = null;
24
+ [NodeDependencyType.Default, NodeDependencyType.Dev, NodeDependencyType.Optional, NodeDependencyType.Peer].forEach((depType) => {
25
+ let node = jsonc_parser_1.findNodeAtLocation(packageJsonNode, [depType.toString(), name]);
26
+ if (node) {
27
+ dependency = {
28
+ type: depType,
29
+ name: name,
30
+ version: node.value
31
+ };
32
+ }
33
+ });
34
+ if (dependency) {
35
+ return dependency;
36
+ }
37
+ else {
38
+ throw logging_1.formattedSchematicsException(`Dependency ${name} nicht in der package.json gefunden.`);
39
+ }
40
+ }
41
+ exports.getPackageJsonDependency = getPackageJsonDependency;
42
+ /**
43
+ * Aktualisiert eine Dependency in der package.json bzw. fügt diese hinzu, falls sie noch nicht vorhanden ist.
44
+ * @param tree
45
+ * @param name
46
+ * @param verion
47
+ */
48
+ function updateDependency(tree, name, version) {
49
+ updatePackageJsonDependency(tree, { type: NodeDependencyType.Default, name: name, version: version });
50
+ }
51
+ exports.updateDependency = updateDependency;
52
+ /**
53
+ * Aktualisiert eine Dependency in der package.json bzw. fügt diese hinzu, falls sie noch nicht vorhanden ist.
54
+ * @param tree
55
+ * @param name
56
+ * @param verion
57
+ */
58
+ function updateDependencyDev(tree, name, version) {
59
+ updatePackageJsonDependency(tree, { type: NodeDependencyType.Dev, name: name, version: version });
60
+ }
61
+ exports.updateDependencyDev = updateDependencyDev;
62
+ /**
63
+ * Aktualisiert eine Dependency in der package.json bzw. fügt diese hinzu, falls sie noch nicht vorhanden ist.
64
+ * @param tree
65
+ * @param dependency
66
+ */
67
+ function updatePackageJsonDependency(tree, dependency) {
68
+ const packageJsonAsNode = json_1.readJson(tree, '/package.json');
69
+ let node = jsonc_parser_1.findNodeAtLocation(packageJsonAsNode, [dependency.type.toString(), dependency.name]);
70
+ if (node) {
71
+ if (node && node.value !== dependency.version) {
72
+ logging_1.logInfo(`Dependency ` +
73
+ chalk.yellowBright(`${dependency.name}`) +
74
+ ` ${node.value} wird ersetzt durch ${dependency.version}.`);
75
+ }
76
+ }
77
+ else {
78
+ logging_1.logInfo(`Dependency ` +
79
+ chalk.yellowBright(`${dependency.name}`) +
80
+ ` ${dependency.version} wird im Abschnitt ${dependency.type} hinzugefügt.`);
81
+ }
82
+ if (!node || node.value !== dependency.version) {
83
+ const packageJonsAsString = json_1.readJsonAsString(tree, '/package.json');
84
+ const edits = jsonc_parser_1.modify(packageJonsAsString, [dependency.type.toString(), dependency.name], dependency.version, { formattingOptions: json_1.jsonFormattingOptions });
85
+ if (edits) {
86
+ tree.overwrite('/package.json', jsonc_parser_1.applyEdits(packageJonsAsString, edits));
87
+ }
88
+ }
89
+ }
90
+ exports.updatePackageJsonDependency = updatePackageJsonDependency;
91
+ function deletePackageJsonDependency(tree, context, dependency) {
92
+ files_1.deleteLineFromFile(tree, context, '/package.json', dependency.name);
93
+ logging_1.logInfo(`Dependency ` + chalk.yellowBright(`${dependency.name}`) + ` wurde aus dem Abschnitt ${dependency.type} gelöscht.`);
94
+ }
95
+ exports.deletePackageJsonDependency = deletePackageJsonDependency;
96
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { SchematicContext, Tree } from '@angular-devkit/schematics';
2
+ import * as chalk from 'chalk';
3
+ import { applyEdits, findNodeAtLocation, modify } from 'jsonc-parser';
4
+ import { deleteLineFromFile } from './files';
5
+ import { jsonFormattingOptions, readJson, readJsonAsString } from './json';
6
+ import { formattedSchematicsException, logInfo } from './logging';
7
+
8
+ export enum NodeDependencyType {
9
+ Default = 'dependencies',
10
+ Dev = 'devDependencies',
11
+ Peer = 'peerDependencies',
12
+ Optional = 'optionalDependencies'
13
+ }
14
+
15
+ export interface NodeDependency {
16
+ type: NodeDependencyType;
17
+ name: string;
18
+ version: string;
19
+ }
20
+
21
+ /**
22
+ * Versucht eine Dependency aus der package.json auslesen und gibt diese zurück.
23
+ * @param tree
24
+ * @param name
25
+ */
26
+ export function getPackageJsonDependency(tree: Tree, name: string): NodeDependency {
27
+ const packageJsonNode = readJson(tree, '/package.json');
28
+ let dependency: NodeDependency | null = null;
29
+
30
+ [NodeDependencyType.Default, NodeDependencyType.Dev, NodeDependencyType.Optional, NodeDependencyType.Peer].forEach(
31
+ (depType) => {
32
+
33
+ let node = findNodeAtLocation(packageJsonNode, [depType.toString(), name]);
34
+ if (node) {
35
+ dependency = {
36
+ type : depType,
37
+ name : name,
38
+ version: node.value
39
+ };
40
+ }
41
+ }
42
+ );
43
+
44
+ if (dependency) {
45
+ return dependency;
46
+ } else {
47
+ throw formattedSchematicsException(
48
+ `Dependency ${name} nicht in der package.json gefunden.`
49
+ );
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Aktualisiert eine Dependency in der package.json bzw. fügt diese hinzu, falls sie noch nicht vorhanden ist.
55
+ * @param tree
56
+ * @param name
57
+ * @param verion
58
+ */
59
+ export function updateDependency(tree: Tree, name: string, version: string): void {
60
+ updatePackageJsonDependency(tree, { type: NodeDependencyType.Default, name: name, version: version});
61
+ }
62
+
63
+ /**
64
+ * Aktualisiert eine Dependency in der package.json bzw. fügt diese hinzu, falls sie noch nicht vorhanden ist.
65
+ * @param tree
66
+ * @param name
67
+ * @param verion
68
+ */
69
+ export function updateDependencyDev(tree: Tree, name: string, version: string): void {
70
+ updatePackageJsonDependency(tree, { type: NodeDependencyType.Dev, name: name, version: version});
71
+ }
72
+
73
+ /**
74
+ * Aktualisiert eine Dependency in der package.json bzw. fügt diese hinzu, falls sie noch nicht vorhanden ist.
75
+ * @param tree
76
+ * @param dependency
77
+ */
78
+ export function updatePackageJsonDependency(tree: Tree, dependency: NodeDependency): void {
79
+ const packageJsonAsNode = readJson(tree, '/package.json');
80
+ let node = findNodeAtLocation(packageJsonAsNode, [dependency.type.toString(), dependency.name]);
81
+ if (node) {
82
+ if (node && node.value !== dependency.version) {
83
+ logInfo(
84
+ `Dependency ` +
85
+ chalk.yellowBright(`${ dependency.name }`) +
86
+ ` ${ node.value } wird ersetzt durch ${ dependency.version }.`
87
+ );
88
+ }
89
+ } else {
90
+ logInfo(
91
+ `Dependency ` +
92
+ chalk.yellowBright(`${ dependency.name }`) +
93
+ ` ${ dependency.version } wird im Abschnitt ${ dependency.type } hinzugefügt.`
94
+ );
95
+ }
96
+
97
+ if (!node || node.value !== dependency.version) {
98
+ const packageJonsAsString = readJsonAsString(tree, '/package.json');
99
+ const edits = modify(packageJonsAsString, [dependency.type.toString(), dependency.name], dependency.version, { formattingOptions: jsonFormattingOptions});
100
+
101
+ if (edits) {
102
+ tree.overwrite(
103
+ '/package.json',
104
+ applyEdits(packageJonsAsString, edits)
105
+ );
106
+ }
107
+ }
108
+ }
109
+
110
+ export function deletePackageJsonDependency(tree: Tree, context: SchematicContext, dependency: NodeDependency) {
111
+ deleteLineFromFile(tree, context, '/package.json', dependency.name);
112
+ logInfo(
113
+ `Dependency ` + chalk.yellowBright(`${dependency.name}`) + ` wurde aus dem Abschnitt ${dependency.type} gelöscht.`
114
+ );
115
+ }
116
+
@@ -0,0 +1,60 @@
1
+ import { Path } from '@angular-devkit/core';
2
+ import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
3
+ /**
4
+ * Entfernt eine Zeile aus der Datei, die den searchString beinhaltet.
5
+ * Gibt eine Log-Ausgabe aus, wenn die Datei nicht gefunden werden konnte.
6
+ * @param tree
7
+ * @param context
8
+ * @param filePath
9
+ * @param searchString
10
+ */
11
+ export declare function deleteLineFromFile(tree: Tree, context: SchematicContext, filePath: string, searchString: string): void;
12
+ /**
13
+ * Schreibt die übergebenen Zeilen in die Datei.
14
+ * Wenn die Datei existiert, wird der neue Inhalt am Ende der Datei angehangen.
15
+ * Wenn die Datei nicht exitiert, wird diese mit dem Inhalt erstellt.
16
+ * @param tree
17
+ * @param context
18
+ * @param filePath
19
+ * @param lines
20
+ */
21
+ export declare function writeLinesToFile(tree: Tree, context: SchematicContext, filePath: string, ...lines: string[]): void;
22
+ /**
23
+ * Iteriert über alle Dateien vom Root-Pfad aus.
24
+ * Über die filePathEndings lassen sich Einschränkungen bzgl. des Datei-Typs festlegen (z.B. .html).
25
+ * Wenn eine Datei die passende Endung und Inhalt hat, wird der Callback mit Pfad und Content aufgerufen.
26
+ * @param tree
27
+ * @param rootPath
28
+ * @param callback(filePath, content)
29
+ * @param filePathEndings Z.B. .html, .ts, src/styles.scss,...
30
+ */
31
+ export declare function iterateFilesAndModifyContent(tree: Tree, rootPath: string | undefined, callback: Function, ...filePathEndings: string[]): void;
32
+ /**
33
+ * Diese Methode ersetzt die angegebene Dateien. Sollten diese nicht existieren, werden sie neu angelegt.
34
+ *
35
+ * @param options Die Optionen.
36
+ * @param sourcePath Ein Quellpfad (z.B. files/theming für alle Dateien unter /theming).
37
+ * @param targetPath Ein Zielpfad (z.B. src/theming/).
38
+ */
39
+ export declare function moveFilesToDirectory(options: any, sourcePath: string, targetPath: string): Rule;
40
+ /**
41
+ * Diese Methode löscht die Dateien in dem angegebenen Ordner.
42
+ *
43
+ * @param options Die Optionen.
44
+ * @param path Der Pfad.
45
+ * @param exclude Ein Array mit Dateinamen, die nicht gelöscht werden sollen.
46
+ */
47
+ export declare function deleteFilesInDirectory(options: any, path: string, exclude: string[]): Rule;
48
+ export declare function searchInComponentAndModifyModule(tree: Tree, rootPath: string, searchStrings: string[], callback: Function, ...filePathEndings: string[]): void;
49
+ /**
50
+ * Function to find the "closest" module to a generated file's path.
51
+ *
52
+ * Source: https://github.com/angular/angular-cli/blob/master/packages/schematics/angular/utility/find-module.ts
53
+ */
54
+ export declare function findModule(host: Tree, generateDir: string, moduleExt?: string, routingModuleExt?: string): Path;
55
+ /**
56
+ * Löscht die Datei aus dem gegebenen Pfad.
57
+ * @param options
58
+ * @param targetPath
59
+ */
60
+ export declare function deleteFile(options: any, targetPath: string): Rule;
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteFile = exports.findModule = exports.searchInComponentAndModifyModule = exports.deleteFilesInDirectory = exports.moveFilesToDirectory = exports.iterateFilesAndModifyContent = exports.writeLinesToFile = exports.deleteLineFromFile = void 0;
4
+ const core_1 = require("@angular-devkit/core");
5
+ const schematics_1 = require("@angular-devkit/schematics");
6
+ const logging_1 = require("./logging");
7
+ /**
8
+ * Entfernt eine Zeile aus der Datei, die den searchString beinhaltet.
9
+ * Gibt eine Log-Ausgabe aus, wenn die Datei nicht gefunden werden konnte.
10
+ * @param tree
11
+ * @param context
12
+ * @param filePath
13
+ * @param searchString
14
+ */
15
+ function deleteLineFromFile(tree, context, filePath, searchString) {
16
+ const fileContent = tree.read(filePath);
17
+ if (fileContent) {
18
+ // String der Datei erhalten
19
+ let content = fileContent.toString();
20
+ if (content.indexOf(searchString) !== -1) {
21
+ // Standard-Separator
22
+ let separator = '\r\n';
23
+ // Wenn nicht gefunden, nur \n als Separator nutzen
24
+ if (content.indexOf(separator) === -1) {
25
+ separator = '\n';
26
+ }
27
+ // Alle Zeilen der Datei erhalten
28
+ const lines = content.split(separator);
29
+ // Lines iterieren und nach der dependency suchen
30
+ for (let i = 0; i < lines.length; i++) {
31
+ // Wenn gefunden, die Zeile entfernen
32
+ if (lines[i].indexOf(searchString) > -1) {
33
+ content = content.replace(lines[i], '');
34
+ // Sonderbehandlung für die .json-Dateien
35
+ // Wenn man aus einem Block die letzte Zeile entfernt,
36
+ // muss in der Zeile davor das Komma entfernt werden.
37
+ // Beispiel:
38
+ // "dependencies": {
39
+ // "@angular/common": "9.1.0",
40
+ // "lux-components": "1.8.3"
41
+ // },
42
+ // Entfernt man die Zeile "lux-components...",
43
+ // muss das Komma aus der Zeile "@angular/common..." ebenfalls
44
+ // entfernt werden, sonst ist dsa Json ungültig.
45
+ if (filePath.endsWith('.json') && i + 1 < lines.length) {
46
+ if (i > 0 && (lines[i + 1].trim() === '}' || lines[i + 1].trim() === '},')) {
47
+ content = content.replace(lines[i - 1], lines[i - 1].substring(0, lines[i - 1].lastIndexOf(',')));
48
+ }
49
+ }
50
+ }
51
+ }
52
+ // Doppelte Zeilenumbrüche entfernen
53
+ content = content.replace(new RegExp('\r\n', 'g'), '\r\n');
54
+ content = content.replace(new RegExp('\r\n\r\n', 'g'), '\r\n');
55
+ tree.overwrite(filePath, content);
56
+ }
57
+ else {
58
+ logging_1.logInfo(`Die Datei "${filePath}" enthält den String "${searchString}" nicht.`);
59
+ }
60
+ }
61
+ else {
62
+ logging_1.logInfo(`Die Datei "${filePath}" wurde nicht gefunden.`);
63
+ }
64
+ }
65
+ exports.deleteLineFromFile = deleteLineFromFile;
66
+ /**
67
+ * Schreibt die übergebenen Zeilen in die Datei.
68
+ * Wenn die Datei existiert, wird der neue Inhalt am Ende der Datei angehangen.
69
+ * Wenn die Datei nicht exitiert, wird diese mit dem Inhalt erstellt.
70
+ * @param tree
71
+ * @param context
72
+ * @param filePath
73
+ * @param lines
74
+ */
75
+ function writeLinesToFile(tree, context, filePath, ...lines) {
76
+ const fileContent = tree.read(filePath);
77
+ let content = '';
78
+ lines.forEach((line) => {
79
+ if (fileContent && fileContent.toString().indexOf(line) === -1) {
80
+ content += line + '\r\n';
81
+ }
82
+ });
83
+ if (fileContent !== null) {
84
+ tree.overwrite(filePath, fileContent.toString() + '\r\n' + content);
85
+ logging_1.logInfo(`Überschreibe die Datei "${filePath}".`);
86
+ }
87
+ else {
88
+ tree.create(filePath, content);
89
+ logging_1.logInfo(`Erstelle die Datei "${filePath}" und füge Inhalt hinzu.`);
90
+ }
91
+ }
92
+ exports.writeLinesToFile = writeLinesToFile;
93
+ /**
94
+ * Iteriert über alle Dateien vom Root-Pfad aus.
95
+ * Über die filePathEndings lassen sich Einschränkungen bzgl. des Datei-Typs festlegen (z.B. .html).
96
+ * Wenn eine Datei die passende Endung und Inhalt hat, wird der Callback mit Pfad und Content aufgerufen.
97
+ * @param tree
98
+ * @param rootPath
99
+ * @param callback(filePath, content)
100
+ * @param filePathEndings Z.B. .html, .ts, src/styles.scss,...
101
+ */
102
+ function iterateFilesAndModifyContent(tree, rootPath = '', callback, ...filePathEndings) {
103
+ tree.getDir(rootPath).visit((filePath) => {
104
+ // Ignoriere folende Odner
105
+ if (filePath.startsWith('/node_modules/') ||
106
+ filePath.startsWith('/.idea/') ||
107
+ filePath.startsWith('/coverage/') ||
108
+ filePath.startsWith('/dist/')) {
109
+ return;
110
+ }
111
+ // Endung der Datei mit erlaubten Endungen abgleichen
112
+ let modifyFile = false;
113
+ for (let fileEnding of filePathEndings) {
114
+ if (filePath.endsWith(fileEnding)) {
115
+ modifyFile = true;
116
+ break;
117
+ }
118
+ }
119
+ // Besitzt die Datei die richtige Endung?
120
+ if (!modifyFile) {
121
+ return;
122
+ }
123
+ // Inhalt auslesen
124
+ const content = tree.read(filePath);
125
+ // Wenn die Datei keinen Inhalt hat, die nächste Datei aufrufen
126
+ if (!content) {
127
+ return;
128
+ }
129
+ // Callback mit aktuellem Pfad + Inhalt der Datei aufrufen
130
+ callback(filePath, content.toString());
131
+ });
132
+ }
133
+ exports.iterateFilesAndModifyContent = iterateFilesAndModifyContent;
134
+ /**
135
+ * Diese Methode ersetzt die angegebene Dateien. Sollten diese nicht existieren, werden sie neu angelegt.
136
+ *
137
+ * @param options Die Optionen.
138
+ * @param sourcePath Ein Quellpfad (z.B. files/theming für alle Dateien unter /theming).
139
+ * @param targetPath Ein Zielpfad (z.B. src/theming/).
140
+ */
141
+ function moveFilesToDirectory(options, sourcePath, targetPath) {
142
+ return (tree, context) => {
143
+ if (!targetPath.startsWith('/')) {
144
+ targetPath = '/' + targetPath;
145
+ }
146
+ if (!sourcePath.startsWith('/')) {
147
+ sourcePath = '/' + sourcePath;
148
+ }
149
+ targetPath = (options.path ? options.path : '') + targetPath;
150
+ const templateSource = schematics_1.apply(schematics_1.url('.' + sourcePath), [
151
+ schematics_1.template(Object.assign(Object.assign({}, core_1.strings), options)),
152
+ schematics_1.forEach((file) => {
153
+ let newTargetPath = targetPath + file.path;
154
+ newTargetPath = newTargetPath.replace('//', '/');
155
+ if (tree.exists(newTargetPath)) {
156
+ tree.overwrite(newTargetPath, file.content);
157
+ logging_1.logInfo(`Datei '${newTargetPath}' aktualisiert.`);
158
+ }
159
+ else {
160
+ tree.create(newTargetPath, file.content);
161
+ logging_1.logInfo(`Datei '${newTargetPath}' angelegt.`);
162
+ }
163
+ return null;
164
+ })
165
+ ]);
166
+ return schematics_1.mergeWith(templateSource, schematics_1.MergeStrategy.Overwrite);
167
+ };
168
+ }
169
+ exports.moveFilesToDirectory = moveFilesToDirectory;
170
+ /**
171
+ * Diese Methode löscht die Dateien in dem angegebenen Ordner.
172
+ *
173
+ * @param options Die Optionen.
174
+ * @param path Der Pfad.
175
+ * @param exclude Ein Array mit Dateinamen, die nicht gelöscht werden sollen.
176
+ */
177
+ function deleteFilesInDirectory(options, path, exclude) {
178
+ return (tree, context) => {
179
+ if (!path.startsWith('/')) {
180
+ path = '/' + path;
181
+ }
182
+ if (!path.endsWith('/')) {
183
+ path = path + '/';
184
+ }
185
+ path = (options.path ? options.path : '') + path;
186
+ const dir = tree.getDir(path);
187
+ if (dir) {
188
+ dir.subfiles.forEach((filePath) => {
189
+ if (!exclude.find((excludeFilePath) => excludeFilePath === filePath)) {
190
+ tree.delete(path + filePath);
191
+ logging_1.logInfo(filePath + ' gelöscht.');
192
+ }
193
+ });
194
+ }
195
+ return tree;
196
+ };
197
+ }
198
+ exports.deleteFilesInDirectory = deleteFilesInDirectory;
199
+ function searchInComponentAndModifyModule(tree, rootPath, searchStrings, callback, ...filePathEndings) {
200
+ tree.getDir(rootPath).visit((filePath) => {
201
+ // Ignoriere folende Odner
202
+ if (filePath.startsWith('/node_modules/') ||
203
+ filePath.startsWith('/.idea/') ||
204
+ filePath.startsWith('/coverage/') ||
205
+ filePath.startsWith('/dist/') ||
206
+ filePath.endsWith('.spec.ts')) {
207
+ return;
208
+ }
209
+ // Endung der Datei mit erlaubten Endungen abgleichen
210
+ let modifyFile = false;
211
+ for (let fileEnding of filePathEndings) {
212
+ if (filePath.endsWith(fileEnding)) {
213
+ modifyFile = true;
214
+ break;
215
+ }
216
+ }
217
+ // Besitzt die Datei die richtige Endung?
218
+ if (!modifyFile) {
219
+ return;
220
+ }
221
+ // Inhalt auslesen
222
+ const content = tree.read(filePath);
223
+ // Wenn die Datei keinen Inhalt hat, die nächste Datei aufrufen
224
+ if (!content) {
225
+ return;
226
+ }
227
+ let foundSearchString = '';
228
+ searchStrings.forEach((searchString) => {
229
+ if (!foundSearchString && content.toString().indexOf(searchString) > -1) {
230
+ foundSearchString = searchString;
231
+ }
232
+ });
233
+ if (!foundSearchString) {
234
+ return;
235
+ }
236
+ // den Ordner der gefundenen Datei nehmen
237
+ const fileDir = filePath.substring(0, filePath.lastIndexOf('/'));
238
+ const modulePath = findModule(tree, fileDir);
239
+ let moduleContent = tree.read(modulePath);
240
+ if (moduleContent) {
241
+ // Callback mit aktuellem Pfad + Inhalt der Datei aufrufen
242
+ callback(modulePath, moduleContent.toString());
243
+ }
244
+ });
245
+ }
246
+ exports.searchInComponentAndModifyModule = searchInComponentAndModifyModule;
247
+ /**
248
+ * Function to find the "closest" module to a generated file's path.
249
+ *
250
+ * Source: https://github.com/angular/angular-cli/blob/master/packages/schematics/angular/utility/find-module.ts
251
+ */
252
+ function findModule(host, generateDir, moduleExt = '.module.ts', routingModuleExt = '-routing.module.ts') {
253
+ let dir = host.getDir('/' + generateDir);
254
+ let foundRoutingModule = false;
255
+ while (dir) {
256
+ const allMatches = dir.subfiles.filter((p) => p.endsWith(moduleExt));
257
+ const filteredMatches = allMatches.filter((p) => !p.endsWith(routingModuleExt));
258
+ foundRoutingModule = foundRoutingModule || allMatches.length !== filteredMatches.length;
259
+ if (filteredMatches.length == 1) {
260
+ return core_1.join(dir.path, filteredMatches[0]);
261
+ }
262
+ else if (filteredMatches.length > 1) {
263
+ throw new Error('More than one module matches. Use skip-import option to skip importing ' +
264
+ 'the component into the closest module.');
265
+ }
266
+ dir = dir.parent;
267
+ }
268
+ const errorMsg = foundRoutingModule
269
+ ? 'Could not find a non Routing NgModule.' +
270
+ `\nModules with suffix '${routingModuleExt}' are strictly reserved for routing.` +
271
+ '\nUse the skip-import option to skip importing in NgModule.'
272
+ : 'Could not find an NgModule. Use the skip-import option to skip importing in NgModule.';
273
+ throw new Error(errorMsg);
274
+ }
275
+ exports.findModule = findModule;
276
+ /**
277
+ * Löscht die Datei aus dem gegebenen Pfad.
278
+ * @param options
279
+ * @param targetPath
280
+ */
281
+ function deleteFile(options, targetPath) {
282
+ return (tree, context) => {
283
+ logging_1.logInfoWithDescriptor('Lösche Datei ' + targetPath + '.');
284
+ if (!targetPath.startsWith('/')) {
285
+ targetPath = '/' + targetPath;
286
+ }
287
+ targetPath = (options.path ? options.path : '') + targetPath;
288
+ if (tree.exists(targetPath)) {
289
+ tree.delete(targetPath);
290
+ logging_1.logSuccess(targetPath + ' erfolgreich gelöscht.');
291
+ }
292
+ else {
293
+ logging_1.logSuccess(targetPath + ' konnte nicht gefunden werden.');
294
+ }
295
+ return tree;
296
+ };
297
+ }
298
+ exports.deleteFile = deleteFile;
299
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["files.ts"],"names":[],"mappings":";;;AAAA,+CAA2D;AAC3D,2DAWoC;AACpC,uCAAuE;AAEvE;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,IAAU,EAAE,OAAyB,EAAE,QAAgB,EAAE,YAAoB;IAC9G,MAAM,WAAW,GAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,WAAW,EAAE;QACf,4BAA4B;QAC5B,IAAI,OAAO,GAAW,WAAW,CAAC,QAAQ,EAAE,CAAC;QAE7C,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;YACxC,qBAAqB;YACrB,IAAI,SAAS,GAAG,MAAM,CAAC;YAEvB,mDAAmD;YACnD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;gBACrC,SAAS,GAAG,IAAI,CAAC;aAClB;YAED,iCAAiC;YACjC,MAAM,KAAK,GAAa,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEjD,iDAAiD;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,qCAAqC;gBACrC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE;oBACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAExC,yCAAyC;oBACzC,sDAAsD;oBACtD,qDAAqD;oBACrD,YAAY;oBACZ,oBAAoB;oBACpB,kCAAkC;oBAClC,gCAAgC;oBAChC,OAAO;oBACP,8CAA8C;oBAC9C,8DAA8D;oBAC9D,gDAAgD;oBAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;wBACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;4BAC1E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;yBACnG;qBACF;iBACF;aACF;YACD,oCAAoC;YACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAE/D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACnC;aAAM;YACL,iBAAO,CAAC,cAAc,QAAQ,yBAAyB,YAAY,UAAU,CAAC,CAAC;SAChF;KACF;SAAM;QACL,iBAAO,CAAC,cAAc,QAAQ,yBAAyB,CAAC,CAAC;KAC1D;AACH,CAAC;AArDD,gDAqDC;AAED;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,IAAU,EAAE,OAAyB,EAAE,QAAgB,EAAE,GAAG,KAAe;IAC1G,MAAM,WAAW,GAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,OAAO,GAAW,EAAE,CAAC;IAEzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC7B,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAC9D,OAAO,IAAI,IAAI,GAAG,MAAM,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACpE,iBAAO,CAAC,2BAA2B,QAAQ,IAAI,CAAC,CAAC;KAClD;SAAM;QACL,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/B,iBAAO,CAAC,uBAAuB,QAAQ,0BAA0B,CAAC,CAAC;KACpE;AACH,CAAC;AAjBD,4CAiBC;AAED;;;;;;;;GAQG;AACH,SAAgB,4BAA4B,CAC1C,IAAU,EACV,WAAmB,EAAE,EACrB,QAAkB,EAClB,GAAG,eAAyB;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAgB,EAAE,EAAE;QAC/C,0BAA0B;QAC1B,IACE,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACrC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YACjC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC7B;YACA,OAAO;SACR;QAED,qDAAqD;QACrD,IAAI,UAAU,GAAY,KAAK,CAAC;QAChC,KAAK,IAAI,UAAU,IAAI,eAAe,EAAE;YACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACP;SACF;QACD,yCAAyC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,kBAAkB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,+DAA+D;QAC/D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,0DAA0D;QAC1D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAvCD,oEAuCC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,OAAY,EAAE,UAAkB,EAAE,UAAkB;IACvF,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;SAC/B;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;SAC/B;QAED,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE7D,MAAM,cAAc,GAAG,kBAAK,CAAC,gBAAG,CAAC,GAAG,GAAG,UAAU,CAAC,EAAE;YAClD,qBAAQ,iCACH,cAAO,GACP,OAAO,EACV;YACF,oBAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC3C,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;oBAC9B,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5C,iBAAO,CAAC,UAAU,aAAa,iBAAiB,CAAC,CAAC;iBACnD;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzC,iBAAO,CAAC,UAAU,aAAa,aAAa,CAAC,CAAC;iBAC/C;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,sBAAS,CAAC,cAAc,EAAE,0BAAa,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC;AAjCD,oDAiCC;AAED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CAAC,OAAY,EAAE,IAAY,EAAE,OAAiB;IAClF,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;SACnB;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACvB,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;SACnB;QAED,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,eAAe,KAAK,QAAQ,CAAC,EAAE;oBACpE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;oBAC7B,iBAAO,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC;iBAClC;YACH,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAxBD,wDAwBC;AAED,SAAgB,gCAAgC,CAC9C,IAAU,EACV,QAAgB,EAChB,aAAuB,EACvB,QAAkB,EAClB,GAAG,eAAyB;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAgB,EAAE,EAAE;QAC/C,0BAA0B;QAC1B,IACE,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACrC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YACjC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC7B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC7B;YACA,OAAO;SACR;QAED,qDAAqD;QACrD,IAAI,UAAU,GAAY,KAAK,CAAC;QAChC,KAAK,IAAI,UAAU,IAAI,eAAe,EAAE;YACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACP;SACF;QACD,yCAAyC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,kBAAkB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,+DAA+D;QAC/D,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,IAAI,iBAAiB,GAAW,EAAE,CAAC;QACnC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAoB,EAAE,EAAE;YAC7C,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvE,iBAAiB,GAAG,YAAY,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO;SACR;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAS,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,aAAa,EAAE;YACjB,0DAA0D;YAC1D,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChD;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AA1DD,4EA0DC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CACxB,IAAU,EACV,WAAmB,EACnB,SAAS,GAAG,YAAY,EACxB,gBAAgB,GAAG,oBAAoB;IAEvC,IAAI,GAAG,GAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC;IAC1D,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,OAAO,GAAG,EAAE;QACV,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEhF,kBAAkB,GAAG,kBAAkB,IAAI,UAAU,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,CAAC;QAExF,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE;YAC/B,OAAO,WAAI,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;aAAM,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CACb,yEAAyE;gBACvE,wCAAwC,CAC3C,CAAC;SACH;QAED,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;KAClB;IAED,MAAM,QAAQ,GAAG,kBAAkB;QACjC,CAAC,CAAC,wCAAwC;YACxC,0BAA0B,gBAAgB,sCAAsC;YAChF,6DAA6D;QAC/D,CAAC,CAAC,uFAAuF,CAAC;IAE5F,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAlCD,gCAkCC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,OAAY,EAAE,UAAkB;IACzD,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,+BAAqB,CAAC,eAAe,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/B,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;SAC/B;QAED,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxB,oBAAU,CAAC,UAAU,GAAG,wBAAwB,CAAC,CAAC;SACnD;aAAM;YACL,oBAAU,CAAC,UAAU,GAAG,gCAAgC,CAAC,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAjBD,gCAiBC"}