@futdevpro/dynamo-eslint 1.20.29 → 1.20.55

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 (93) hide show
  1. package/README.md +80 -0
  2. package/build/configs/ngx.d.ts +29 -0
  3. package/build/configs/ngx.d.ts.map +1 -1
  4. package/build/configs/ngx.js +57 -0
  5. package/build/configs/ngx.js.map +1 -1
  6. package/build/plugin/index.d.ts +5 -0
  7. package/build/plugin/index.d.ts.map +1 -1
  8. package/build/plugin/index.js +13 -0
  9. package/build/plugin/index.js.map +1 -1
  10. package/build/plugin/rules/angular/empty-state-guard.util.d.ts +58 -0
  11. package/build/plugin/rules/angular/empty-state-guard.util.d.ts.map +1 -0
  12. package/build/plugin/rules/angular/empty-state-guard.util.js +158 -0
  13. package/build/plugin/rules/angular/empty-state-guard.util.js.map +1 -0
  14. package/build/plugin/rules/angular/empty-state-requires-guard.d.ts +10 -0
  15. package/build/plugin/rules/angular/empty-state-requires-guard.d.ts.map +1 -0
  16. package/build/plugin/rules/angular/empty-state-requires-guard.js +61 -0
  17. package/build/plugin/rules/angular/empty-state-requires-guard.js.map +1 -0
  18. package/build/plugin/rules/angular/module-load-failed-branch.d.ts +11 -0
  19. package/build/plugin/rules/angular/module-load-failed-branch.d.ts.map +1 -0
  20. package/build/plugin/rules/angular/module-load-failed-branch.js +58 -0
  21. package/build/plugin/rules/angular/module-load-failed-branch.js.map +1 -0
  22. package/build/plugin/rules/angular/no-unlisted-inner-html.d.ts +15 -0
  23. package/build/plugin/rules/angular/no-unlisted-inner-html.d.ts.map +1 -0
  24. package/build/plugin/rules/angular/no-unlisted-inner-html.js +106 -0
  25. package/build/plugin/rules/angular/no-unlisted-inner-html.js.map +1 -0
  26. package/build/plugin/rules/angular/no-unused-component.d.ts +11 -0
  27. package/build/plugin/rules/angular/no-unused-component.d.ts.map +1 -0
  28. package/build/plugin/rules/angular/no-unused-component.js +78 -0
  29. package/build/plugin/rules/angular/no-unused-component.js.map +1 -0
  30. package/build/plugin/rules/angular/scroll-container-min-h-0.d.ts +11 -0
  31. package/build/plugin/rules/angular/scroll-container-min-h-0.d.ts.map +1 -0
  32. package/build/plugin/rules/angular/scroll-container-min-h-0.js +59 -0
  33. package/build/plugin/rules/angular/scroll-container-min-h-0.js.map +1 -0
  34. package/build/plugin/rules/angular/ui-building-blocks-baseline.interface.d.ts +15 -0
  35. package/build/plugin/rules/angular/ui-building-blocks-baseline.interface.d.ts.map +1 -0
  36. package/build/plugin/rules/angular/ui-building-blocks-baseline.interface.js +3 -0
  37. package/build/plugin/rules/angular/ui-building-blocks-baseline.interface.js.map +1 -0
  38. package/build/plugin/rules/angular/ui-building-blocks-element.interface.d.ts +19 -0
  39. package/build/plugin/rules/angular/ui-building-blocks-element.interface.d.ts.map +1 -0
  40. package/build/plugin/rules/angular/ui-building-blocks-element.interface.js +3 -0
  41. package/build/plugin/rules/angular/ui-building-blocks-element.interface.js.map +1 -0
  42. package/build/plugin/rules/angular/ui-building-blocks-rule-context.util.d.ts +28 -0
  43. package/build/plugin/rules/angular/ui-building-blocks-rule-context.util.d.ts.map +1 -0
  44. package/build/plugin/rules/angular/ui-building-blocks-rule-context.util.js +50 -0
  45. package/build/plugin/rules/angular/ui-building-blocks-rule-context.util.js.map +1 -0
  46. package/build/plugin/rules/angular/ui-building-blocks-scroll-finding.interface.d.ts +12 -0
  47. package/build/plugin/rules/angular/ui-building-blocks-scroll-finding.interface.d.ts.map +1 -0
  48. package/build/plugin/rules/angular/ui-building-blocks-scroll-finding.interface.js +3 -0
  49. package/build/plugin/rules/angular/ui-building-blocks-scroll-finding.interface.js.map +1 -0
  50. package/build/plugin/rules/angular/ui-building-blocks.util.d.ts +111 -0
  51. package/build/plugin/rules/angular/ui-building-blocks.util.d.ts.map +1 -0
  52. package/build/plugin/rules/angular/ui-building-blocks.util.js +377 -0
  53. package/build/plugin/rules/angular/ui-building-blocks.util.js.map +1 -0
  54. package/build/plugin/rules/angular/unused-component-finding.interface.d.ts +14 -0
  55. package/build/plugin/rules/angular/unused-component-finding.interface.d.ts.map +1 -0
  56. package/build/plugin/rules/angular/unused-component-finding.interface.js +3 -0
  57. package/build/plugin/rules/angular/unused-component-finding.interface.js.map +1 -0
  58. package/build/plugin/rules/angular/unused-component.util.d.ts +86 -0
  59. package/build/plugin/rules/angular/unused-component.util.d.ts.map +1 -0
  60. package/build/plugin/rules/angular/unused-component.util.js +243 -0
  61. package/build/plugin/rules/angular/unused-component.util.js.map +1 -0
  62. package/build/plugin/rules/angular/xss-surface-baseline-files.interface.d.ts +8 -0
  63. package/build/plugin/rules/angular/xss-surface-baseline-files.interface.d.ts.map +1 -0
  64. package/build/plugin/rules/angular/xss-surface-baseline-files.interface.js +3 -0
  65. package/build/plugin/rules/angular/xss-surface-baseline-files.interface.js.map +1 -0
  66. package/build/plugin/rules/angular/xss-surface-occurrences.interface.d.ts +6 -0
  67. package/build/plugin/rules/angular/xss-surface-occurrences.interface.d.ts.map +1 -0
  68. package/build/plugin/rules/angular/xss-surface-occurrences.interface.js +3 -0
  69. package/build/plugin/rules/angular/xss-surface-occurrences.interface.js.map +1 -0
  70. package/build/plugin/rules/angular/xss-surface.util.d.ts +44 -0
  71. package/build/plugin/rules/angular/xss-surface.util.d.ts.map +1 -0
  72. package/build/plugin/rules/angular/xss-surface.util.js +121 -0
  73. package/build/plugin/rules/angular/xss-surface.util.js.map +1 -0
  74. package/build/plugin/rules/prefer-interface-over-duplicate-types.d.ts.map +1 -1
  75. package/build/plugin/rules/prefer-interface-over-duplicate-types.js +31 -19
  76. package/build/plugin/rules/prefer-interface-over-duplicate-types.js.map +1 -1
  77. package/build/scripts/lint-strict.d.ts +62 -0
  78. package/build/scripts/lint-strict.d.ts.map +1 -0
  79. package/build/scripts/lint-strict.js +151 -0
  80. package/build/scripts/lint-strict.js.map +1 -0
  81. package/build/scripts/ui-building-blocks-baseline.d.ts +21 -0
  82. package/build/scripts/ui-building-blocks-baseline.d.ts.map +1 -0
  83. package/build/scripts/ui-building-blocks-baseline.js +123 -0
  84. package/build/scripts/ui-building-blocks-baseline.js.map +1 -0
  85. package/build/scripts/unused-components-baseline.d.ts +17 -0
  86. package/build/scripts/unused-components-baseline.d.ts.map +1 -0
  87. package/build/scripts/unused-components-baseline.js +62 -0
  88. package/build/scripts/unused-components-baseline.js.map +1 -0
  89. package/build/scripts/xss-surface-baseline.d.ts +17 -0
  90. package/build/scripts/xss-surface-baseline.d.ts.map +1 -0
  91. package/build/scripts/xss-surface-baseline.js +73 -0
  92. package/build/scripts/xss-surface-baseline.js.map +1 -0
  93. package/package.json +7 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unused-component.util.d.ts","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/unused-component.util.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AAGzF,oCAAoC;AACpC,UAAU,gCAAgC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kHAAkH;AAClH,UAAU,+BAA+B;IACvC,sDAAsD;IACtD,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,mGAAmG;IACnG,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACrC;AAUD;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAoB;IAE/B,6GAA6G;IAC7G,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAA6C;IAExF,2CAA2C;IAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA2C;IAEzE,8FAA8F;IAC9F,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAA8B;IAE7D,0FAA0F;IAC1F,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAG9B;IAEF,gGAAgG;IAChG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAEjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkE;IAEtG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA8D;IAEnG,6FAA6F;IAC7F,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,gCAAgC,EAAE,EAC3C,KAAK,EAAE,+BAA+B,GACrC,iCAAiC,EAAE;IA+BtC,0FAA0F;IAC1F,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;IAyB/F,qDAAqD;IACrD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,gCAAgC,EAAE,GAAG,+BAA+B;IAgD/F;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;QAAC,KAAK,EAAE,+BAA+B,CAAA;KAAE;IAgC1H,wGAAwG;IACxG,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;IA0BnD,wGAAwG;IACxG,MAAM,CAAC,UAAU,IAAI,IAAI;IAKzB,qCAAqC;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAIhE,uBAAuB;IACvB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,4FAA4F;IAC5F,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B,2GAA2G;IAC3G,OAAO,CAAC,MAAM,CAAC,SAAS;IAMxB,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,MAAM;IAIrB,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,8GAA8G;IAC9G,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA0BlC"}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnusedComponent_Util = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fast_glob_1 = tslib_1.__importDefault(require("fast-glob"));
6
+ const fs_1 = require("fs");
7
+ const path = tslib_1.__importStar(require("path"));
8
+ const ui_building_blocks_util_1 = require("./ui-building-blocks.util");
9
+ const xss_surface_util_1 = require("./xss-surface.util");
10
+ /**
11
+ * BFR-QA-006 — the ONE scanner behind the `no-unused-component` rule AND the `dynamo-unused-components-baseline`
12
+ * generator: an Angular `@Component` that is built but used NOWHERE — its selector is in no (comment-free) template
13
+ * and its class is referenced in no other source in a usage position.
14
+ *
15
+ * Usage positions: routes (`component: X`, `loadComponent: … m.X`), dialogs (`dialog.open(X`), bootstrap,
16
+ * `createComponent(X)`, an assignment… — any reference EXCEPT:
17
+ * - `import … from` / `export … from` statements (a route can disappear while its import stays — measured on the
18
+ * credit client: `Ad_Page_Component` imported by a routing module and routed nowhere);
19
+ * - `imports` / `declarations` / `exports` arrays (registering a component is not using it — the organizer's
20
+ * `T_Search_Component` was one uncommented line away from being "registered but never rendered");
21
+ * - its own file, `*.spec.ts` (a component only its own test uses is exactly the case) and `*.stories.ts`.
22
+ * A reference that exists only inside a comment is flagged separately (`commentedOut`).
23
+ */
24
+ class UnusedComponent_Util {
25
+ /** The default location of the committed per-project baseline (relative to the ESLint working directory). */
26
+ static defaultBaselineFile = '.dynamo/unused-components-baseline.json';
27
+ /** The rule id the baseline belongs to. */
28
+ static ruleId = '@futdevpro/dynamo/no-unused-component';
29
+ /** The project files the scan reads (relative globs, run in the ESLint working directory). */
30
+ static globs = ['**/*.ts', '**/*.html'];
31
+ /** Never part of the scan: generated / vendored folders, tests, stories, declarations. */
32
+ static ignore = [
33
+ '**/node_modules/**', '**/dist/**', '**/build/**', '**/.angular/**', '**/coverage/**',
34
+ '**/*.spec.ts', '**/*.stories.ts', '**/*.d.ts',
35
+ ];
36
+ /** How long a project scan is trusted before its files are re-stamped (editor lint-on-save). */
37
+ static recheckMs = 3000;
38
+ static projectCache = new Map();
39
+ static baselineCache = new Map();
40
+ /** The unused components declared in `sources`, measured against the whole project index. */
41
+ static findUnused(sources, index) {
42
+ const findings = [];
43
+ sources.forEach((source) => {
44
+ if (!source.file.endsWith('.ts')) {
45
+ return;
46
+ }
47
+ UnusedComponent_Util.componentsOf(source.text).forEach((component) => {
48
+ const bySelector = component.selectors.some((s) => UnusedComponent_Util.selectorUsed(s, index));
49
+ const byClass = [...(index.references.get(component.className) ?? [])]
50
+ .some((file) => file !== UnusedComponent_Util.normalize(source.file));
51
+ if (bySelector || byClass) {
52
+ return;
53
+ }
54
+ findings.push({
55
+ file: UnusedComponent_Util.normalize(source.file),
56
+ className: component.className,
57
+ selectors: component.selectors,
58
+ offset: component.offset,
59
+ commentedOut: [component.className, ...component.selectors.map((s) => UnusedComponent_Util.elementOf(s))]
60
+ .some((name) => [...(index.commented.get(name) ?? [])]
61
+ .some((file) => file !== UnusedComponent_Util.normalize(source.file))),
62
+ });
63
+ });
64
+ });
65
+ return findings;
66
+ }
67
+ /** The `@Component`s of a TypeScript source: class name, selectors, class-name offset. */
68
+ static componentsOf(text) {
69
+ const code = xss_surface_util_1.XssSurface_Util.blankComments(text, 'x.ts');
70
+ const result = [];
71
+ const decorator = /@Component\s*\(/g;
72
+ let match = decorator.exec(code);
73
+ while (match !== null) {
74
+ const classMatch = /\bclass\s+([A-Za-z_$][\w$]*)/.exec(code.slice(match.index));
75
+ if (classMatch) {
76
+ const block = code.slice(match.index, match.index + classMatch.index);
77
+ const selector = /\bselector\s*:\s*(['"`])([\s\S]*?)\1/.exec(block);
78
+ result.push({
79
+ className: classMatch[1],
80
+ selectors: selector ? selector[2].split(',').map((s) => s.trim()).filter(Boolean) : [],
81
+ offset: match.index + classMatch.index + classMatch[0].length - classMatch[1].length,
82
+ });
83
+ }
84
+ match = decorator.exec(code);
85
+ }
86
+ return result;
87
+ }
88
+ /** Builds the usage index of a project's sources. */
89
+ static buildIndex(sources) {
90
+ const tags = new Set();
91
+ const references = new Map();
92
+ const commented = new Map();
93
+ /** Records a name mentioned inside a comment of `file`. */
94
+ const mention = (name, file) => {
95
+ commented.set(name, (commented.get(name) ?? new Set()).add(file));
96
+ };
97
+ const templateTexts = [];
98
+ sources.forEach((source) => {
99
+ const file = UnusedComponent_Util.normalize(source.file);
100
+ ui_building_blocks_util_1.UiBuildingBlocks_Util.templates(source.text, file).forEach((template) => {
101
+ const clean = template.text.replace(/<!--[\s\S]*?-->/g, (c) => {
102
+ UnusedComponent_Util.tagsIn(c).forEach((t) => mention(t, file));
103
+ return ' ';
104
+ });
105
+ templateTexts.push(clean);
106
+ UnusedComponent_Util.tagsIn(clean).forEach((t) => { tags.add(t); });
107
+ });
108
+ if (!file.endsWith('.ts')) {
109
+ return;
110
+ }
111
+ const code = xss_surface_util_1.XssSurface_Util.blankComments(source.text, file);
112
+ // the comment text = the characters the blanker turned into spaces
113
+ const commentText = source.text.split('').map((c, i) => (code[i] === c ? ' ' : c)).join('');
114
+ UnusedComponent_Util.identifiersIn(commentText).forEach((id) => mention(id, file));
115
+ UnusedComponent_Util.identifiersIn(UnusedComponent_Util.stripRegistrations(code)).forEach((id) => {
116
+ if (!references.has(id)) {
117
+ references.set(id, new Set());
118
+ }
119
+ references.get(id)?.add(file);
120
+ });
121
+ });
122
+ return {
123
+ tags: tags,
124
+ templates: templateTexts.join('\n'),
125
+ references: references,
126
+ commented: commented,
127
+ };
128
+ }
129
+ /**
130
+ * The index of the project in `root` (cached; re-stamped at most every few seconds, rebuilt only when a file
131
+ * changed).
132
+ */
133
+ static projectIndex(root) {
134
+ const cached = UnusedComponent_Util.projectCache.get(root);
135
+ if (cached && Date.now() - cached.checkedAt < UnusedComponent_Util.recheckMs) {
136
+ return cached;
137
+ }
138
+ const files = fast_glob_1.default.sync(UnusedComponent_Util.globs, { cwd: root, ignore: UnusedComponent_Util.ignore })
139
+ .sort();
140
+ const fingerprint = files.map((f) => {
141
+ const stat = (0, fs_1.statSync)(path.join(root, f));
142
+ return f + ':' + stat.mtimeMs + ':' + stat.size;
143
+ }).join('|');
144
+ if (cached?.fingerprint === fingerprint) {
145
+ cached.checkedAt = Date.now();
146
+ return cached;
147
+ }
148
+ const sources = files.map((f) => ({
149
+ file: UnusedComponent_Util.normalize(f),
150
+ text: (0, fs_1.readFileSync)(path.join(root, f), 'utf8'),
151
+ }));
152
+ const fresh = {
153
+ checkedAt: Date.now(), fingerprint: fingerprint, sources: sources, index: UnusedComponent_Util.buildIndex(sources),
154
+ };
155
+ UnusedComponent_Util.projectCache.set(root, fresh);
156
+ return fresh;
157
+ }
158
+ /** Reads the committed baseline: the accepted component keys (`<file>#<Class>`). Broken file THROWS. */
159
+ static readBaseline(baselinePath) {
160
+ if (!(0, fs_1.existsSync)(baselinePath)) {
161
+ return [];
162
+ }
163
+ const stat = (0, fs_1.statSync)(baselinePath);
164
+ const stamp = stat.mtimeMs + ':' + stat.size;
165
+ const cached = UnusedComponent_Util.baselineCache.get(baselinePath);
166
+ if (cached?.stamp === stamp) {
167
+ return cached.files;
168
+ }
169
+ const parsed = JSON.parse((0, fs_1.readFileSync)(baselinePath, 'utf8'));
170
+ const list = typeof parsed === 'object' && parsed !== null ? Reflect.get(parsed, 'components') : undefined;
171
+ if (!Array.isArray(list)) {
172
+ throw new Error(`Unused-components baseline ${baselinePath} has no "components" array — regenerate it with `
173
+ + '`npx dynamo-unused-components-baseline`.');
174
+ }
175
+ const files = list.filter((k) => typeof k === 'string')
176
+ .map((k) => UnusedComponent_Util.normalize(k));
177
+ UnusedComponent_Util.baselineCache.set(baselinePath, { stamp: stamp, files: files });
178
+ return files;
179
+ }
180
+ /** Forgets every cached project scan and baseline (tests; a long-lived process after a bulk change). */
181
+ static clearCache() {
182
+ UnusedComponent_Util.projectCache.clear();
183
+ UnusedComponent_Util.baselineCache.clear();
184
+ }
185
+ /** The baseline key of a finding. */
186
+ static key(finding) {
187
+ return UnusedComponent_Util.normalize(finding.file) + '#' + finding.className;
188
+ }
189
+ /** Forward slashes. */
190
+ static normalize(value) {
191
+ return value.replace(/\\/g, '/');
192
+ }
193
+ /** Whether one selector (`app-x`, `button[app-btn]`, `[appX]`) is used in the templates. */
194
+ static selectorUsed(selector, index) {
195
+ const element = UnusedComponent_Util.elementOf(selector);
196
+ const attribute = /\[([\w-]+)/.exec(selector);
197
+ if (!attribute) {
198
+ return !!element && index.tags.has(element);
199
+ }
200
+ // `button[appBusy]` needs BOTH on one element; `[appBusy]` any element with the attribute
201
+ const tag = element ? element + '\\b' : '[a-zA-Z][\\w-]*';
202
+ return new RegExp('<' + tag + '[^>]*[\\s\\[(*]' + attribute[1] + '[\\s=>\\])/]', 'i').test(index.templates);
203
+ }
204
+ /** The element part of a selector (`app-x` of `app-x[y]:not(z)`), lower-case; empty for attribute-only. */
205
+ static elementOf(selector) {
206
+ const match = /^([a-zA-Z][\w-]*)/.exec(selector.trim());
207
+ return match ? match[1].toLowerCase() : '';
208
+ }
209
+ /** Element names opened in a template text. */
210
+ static tagsIn(text) {
211
+ return (text.match(/<[a-zA-Z][\w-]*/g) ?? []).map((t) => t.slice(1).toLowerCase());
212
+ }
213
+ /** Identifiers of a code text. */
214
+ static identifiersIn(text) {
215
+ return new Set(text.match(/[A-Za-z_$][\w$]*/g) ?? []);
216
+ }
217
+ /** Removes `import`/`export … from` statements and `imports`/`declarations`/`exports` arrays (not usages). */
218
+ static stripRegistrations(code) {
219
+ let result = code
220
+ // `[^;'"]` keeps it inside ONE import clause (a side-effect `import 'x';` must not swallow the code after it)
221
+ .replace(/\bimport\s+(?:type\s+)?[^;'"]*?\bfrom\s*['"][^'"]+['"]/g, ' ')
222
+ .replace(/\bexport\s+(?:type\s+)?(?:\*|\{[\s\S]*?\})\s*from\s*['"][^'"]+['"]/g, ' ');
223
+ const arrayStart = /\b(?:imports|declarations|exports)\s*:\s*\[/g;
224
+ let match = arrayStart.exec(result);
225
+ while (match !== null) {
226
+ // blank up to the MATCHING bracket (nested arrays included)
227
+ let depth = 0;
228
+ let end = match.index + match[0].length - 1;
229
+ for (; end < result.length; end++) {
230
+ depth += result[end] === '[' ? 1 : result[end] === ']' ? -1 : 0;
231
+ if (!depth) {
232
+ break;
233
+ }
234
+ }
235
+ result = result.slice(0, match.index) + ' '.repeat(end + 1 - match.index) + result.slice(end + 1);
236
+ arrayStart.lastIndex = match.index + 1;
237
+ match = arrayStart.exec(result);
238
+ }
239
+ return result;
240
+ }
241
+ }
242
+ exports.UnusedComponent_Util = UnusedComponent_Util;
243
+ //# sourceMappingURL=unused-component.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unused-component.util.js","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/unused-component.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Baseline: relative path → the accepted count per kind — BFR-QA-005. */
2
+ export interface XssSurface_BaselineFiles_Interface {
3
+ [relativePath: string]: {
4
+ innerHtml: number;
5
+ bypass: number;
6
+ };
7
+ }
8
+ //# sourceMappingURL=xss-surface-baseline-files.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-surface-baseline-files.interface.d.ts","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/xss-surface-baseline-files.interface.ts"],"names":[],"mappings":"AACA,0EAA0E;AAC1E,MAAM,WAAW,kCAAkC;IACjD,CAAC,YAAY,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=xss-surface-baseline-files.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-surface-baseline-files.interface.js","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/xss-surface-baseline-files.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ /** The XSS-surface occurrences of one file (offsets) — BFR-QA-005. */
2
+ export interface XssSurface_Occurrences_Interface {
3
+ innerHtml: number[];
4
+ bypass: number[];
5
+ }
6
+ //# sourceMappingURL=xss-surface-occurrences.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-surface-occurrences.interface.d.ts","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/xss-surface-occurrences.interface.ts"],"names":[],"mappings":"AACA,sEAAsE;AACtE,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=xss-surface-occurrences.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-surface-occurrences.interface.js","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/xss-surface-occurrences.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { XssSurface_BaselineFiles_Interface } from './xss-surface-baseline-files.interface';
2
+ import { XssSurface_Occurrences_Interface } from './xss-surface-occurrences.interface';
3
+ /**
4
+ * BFR-QA-005 — the ONE scanner behind the `no-unlisted-inner-html` rule AND the `dynamo-xss-surface-baseline`
5
+ * generator, so the baseline counts exactly what the rule counts.
6
+ *
7
+ * XSS surface = a place where a string reaches the DOM as HTML without Angular's sanitizer:
8
+ * - `[innerHTML]` bindings (in `.html` templates and inline `.ts` templates);
9
+ * - `DomSanitizer.bypassSecurityTrust…(…)` calls.
10
+ * Comments are ignored (a mention in a comment is not a surface).
11
+ */
12
+ export declare class XssSurface_Util {
13
+ /** The default location of the committed per-project baseline (relative to the ESLint working directory). */
14
+ static readonly defaultBaselineFile: string;
15
+ /** The rule id the baseline belongs to. */
16
+ static readonly ruleId: string;
17
+ private static readonly innerHtmlRegex;
18
+ private static readonly bypassRegex;
19
+ /** Baseline cache: path → { mtime, counts } (one read per lint run and file change). */
20
+ private static readonly baselineCache;
21
+ /** Offsets of every XSS-surface occurrence in a `.html` / `.ts` source text. */
22
+ static scan(text: string, filename: string): XssSurface_Occurrences_Interface;
23
+ /** Whether a file is in scope (Angular templates and sources; tests excluded — no DOM reaches a user there). */
24
+ static isInScope(filename: string): boolean;
25
+ /** A path in the baseline / allow-list form: forward slashes, relative to `cwd` when inside it. */
26
+ static relativeKey(filename: string, cwd: string): string;
27
+ /** Reads the committed baseline (missing file = empty baseline; a broken file THROWS — never a silent pass). */
28
+ static readBaseline(baselinePath: string): XssSurface_BaselineFiles_Interface;
29
+ /**
30
+ * Checks an escaping pipe: all four escapes (`&amp; &lt; &gt; &quot;`) present, and the `<` escape BEFORE the first
31
+ * replacement that produces HTML (escaping after the mapping would escape nothing the mapping let through).
32
+ * @returns the problems (empty = sound).
33
+ */
34
+ static checkEscapePipe(text: string): string[];
35
+ /** Forward slashes. */
36
+ static normalize(value: string): string;
37
+ /** Replaces comments with spaces (offsets and line breaks preserved; string literals kept). Shared by BFR-QA-006. */
38
+ static blankComments(text: string, filename: string): string;
39
+ /** All match offsets of a global regex. */
40
+ private static offsets;
41
+ /** A non-negative integer count from a baseline entry (anything else = 0). */
42
+ private static count;
43
+ }
44
+ //# sourceMappingURL=xss-surface.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-surface.util.d.ts","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/xss-surface.util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,wCAAwC,CAAC;AAC5F,OAAO,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAC;AAEvF;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAE1B,6GAA6G;IAC7G,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAuC;IAElF,2CAA2C;IAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA8C;IAE5E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAElE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CACkC;IAErE,wFAAwF;IACxF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CACzB;IAEZ,gFAAgF;IAChF,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gCAAgC;IAS7E,gHAAgH;IAChH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQ3C,mGAAmG;IACnG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAOzD,gHAAgH;IAChH,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,kCAAkC;IA+B7E;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB9C,uBAAuB;IACvB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,qHAAqH;IACrH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAa5D,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,OAAO;IAatB,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK;CAKrB"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XssSurface_Util = void 0;
4
+ const fs_1 = require("fs");
5
+ /**
6
+ * BFR-QA-005 — the ONE scanner behind the `no-unlisted-inner-html` rule AND the `dynamo-xss-surface-baseline`
7
+ * generator, so the baseline counts exactly what the rule counts.
8
+ *
9
+ * XSS surface = a place where a string reaches the DOM as HTML without Angular's sanitizer:
10
+ * - `[innerHTML]` bindings (in `.html` templates and inline `.ts` templates);
11
+ * - `DomSanitizer.bypassSecurityTrust…(…)` calls.
12
+ * Comments are ignored (a mention in a comment is not a surface).
13
+ */
14
+ class XssSurface_Util {
15
+ /** The default location of the committed per-project baseline (relative to the ESLint working directory). */
16
+ static defaultBaselineFile = '.dynamo/xss-surface-baseline.json';
17
+ /** The rule id the baseline belongs to. */
18
+ static ruleId = '@futdevpro/dynamo/no-unlisted-inner-html';
19
+ static innerHtmlRegex = /\[innerHTML\]/g;
20
+ static bypassRegex = /\bbypassSecurityTrust(?:Html|Style|Script|Url|ResourceUrl)\s*\(/g;
21
+ /** Baseline cache: path → { mtime, counts } (one read per lint run and file change). */
22
+ static baselineCache = new Map();
23
+ /** Offsets of every XSS-surface occurrence in a `.html` / `.ts` source text. */
24
+ static scan(text, filename) {
25
+ const code = XssSurface_Util.blankComments(text, filename);
26
+ return {
27
+ innerHtml: XssSurface_Util.offsets(code, XssSurface_Util.innerHtmlRegex),
28
+ bypass: filename.endsWith('.html') ? [] : XssSurface_Util.offsets(code, XssSurface_Util.bypassRegex),
29
+ };
30
+ }
31
+ /** Whether a file is in scope (Angular templates and sources; tests excluded — no DOM reaches a user there). */
32
+ static isInScope(filename) {
33
+ const normalized = XssSurface_Util.normalize(filename);
34
+ return (normalized.endsWith('.html') || normalized.endsWith('.ts'))
35
+ && !normalized.endsWith('.spec.ts')
36
+ && !normalized.endsWith('.d.ts');
37
+ }
38
+ /** A path in the baseline / allow-list form: forward slashes, relative to `cwd` when inside it. */
39
+ static relativeKey(filename, cwd) {
40
+ const file = XssSurface_Util.normalize(filename);
41
+ const root = XssSurface_Util.normalize(cwd).replace(/\/$/, '');
42
+ return file.toLowerCase().startsWith(root.toLowerCase() + '/') ? file.slice(root.length + 1) : file;
43
+ }
44
+ /** Reads the committed baseline (missing file = empty baseline; a broken file THROWS — never a silent pass). */
45
+ static readBaseline(baselinePath) {
46
+ if (!(0, fs_1.existsSync)(baselinePath)) {
47
+ return {};
48
+ }
49
+ const mtimeMs = (0, fs_1.statSync)(baselinePath).mtimeMs;
50
+ const cached = XssSurface_Util.baselineCache.get(baselinePath);
51
+ if (cached?.mtimeMs === mtimeMs) {
52
+ return cached.files;
53
+ }
54
+ const parsed = JSON.parse((0, fs_1.readFileSync)(baselinePath, 'utf8'));
55
+ const files = typeof parsed === 'object' && parsed !== null ? Reflect.get(parsed, 'files') : undefined;
56
+ if (!files || typeof files !== 'object') {
57
+ throw new Error(`XSS-surface baseline ${baselinePath} has no "files" object — regenerate it with `
58
+ + '`npx dynamo-xss-surface-baseline`.');
59
+ }
60
+ const result = {};
61
+ Object.entries(files).forEach(([key, value]) => {
62
+ result[XssSurface_Util.normalize(key)] = {
63
+ innerHtml: XssSurface_Util.count(value, 'innerHtml'),
64
+ bypass: XssSurface_Util.count(value, 'bypass'),
65
+ };
66
+ });
67
+ XssSurface_Util.baselineCache.set(baselinePath, { mtimeMs: mtimeMs, files: result });
68
+ return result;
69
+ }
70
+ /**
71
+ * Checks an escaping pipe: all four escapes (`&amp; &lt; &gt; &quot;`) present, and the `<` escape BEFORE the first
72
+ * replacement that produces HTML (escaping after the mapping would escape nothing the mapping let through).
73
+ * @returns the problems (empty = sound).
74
+ */
75
+ static checkEscapePipe(text) {
76
+ const code = XssSurface_Util.blankComments(text, 'pipe.ts');
77
+ const problems = [];
78
+ const missing = ['&amp;', '&lt;', '&gt;', '&quot;'].filter((e) => !code.includes(e));
79
+ if (missing.length) {
80
+ problems.push(`missing escape(s): ${missing.join(' ')}`);
81
+ }
82
+ const escapeIndex = code.indexOf('&lt;');
83
+ const htmlReplace = /\.replace\([^;]*?['"`][^'"`\n]*<[a-zA-Z/]/.exec(code);
84
+ if (escapeIndex >= 0 && htmlReplace && htmlReplace.index < escapeIndex) {
85
+ problems.push('the `<` escape comes AFTER the first HTML-producing replacement');
86
+ }
87
+ return problems;
88
+ }
89
+ /** Forward slashes. */
90
+ static normalize(value) {
91
+ return value.replace(/\\/g, '/');
92
+ }
93
+ /** Replaces comments with spaces (offsets and line breaks preserved; string literals kept). Shared by BFR-QA-006. */
94
+ static blankComments(text, filename) {
95
+ /** A comment becomes spaces — offsets and line breaks stay where they were. */
96
+ const blank = (match) => match.replace(/[^\n]/g, ' ');
97
+ if (filename.endsWith('.html')) {
98
+ return text.replace(/<!--[\s\S]*?-->/g, blank);
99
+ }
100
+ // strings are kept (an inline template's `[innerHTML]` lives in one); block + line comments are blanked
101
+ return text.replace(/("(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`(?:\\[\s\S]|[^`\\])*`)|\/\*[\s\S]*?\*\/|\/\/[^\n]*/g, (match, stringLiteral) => (stringLiteral ? match : blank(match)));
102
+ }
103
+ /** All match offsets of a global regex. */
104
+ static offsets(code, regex) {
105
+ const local = new RegExp(regex.source, 'g');
106
+ const result = [];
107
+ let match = local.exec(code);
108
+ while (match !== null) {
109
+ result.push(match.index);
110
+ match = local.exec(code);
111
+ }
112
+ return result;
113
+ }
114
+ /** A non-negative integer count from a baseline entry (anything else = 0). */
115
+ static count(entry, key) {
116
+ const value = entry && typeof entry === 'object' ? Reflect.get(entry, key) : undefined;
117
+ return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : 0;
118
+ }
119
+ }
120
+ exports.XssSurface_Util = XssSurface_Util;
121
+ //# sourceMappingURL=xss-surface.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-surface.util.js","sourceRoot":"","sources":["../../../../src/plugin/rules/angular/xss-surface.util.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-interface-over-duplicate-types.d.ts","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAY9B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA2ShB,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"prefer-interface-over-duplicate-types.d.ts","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiB9B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UAkThB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -16,12 +16,19 @@ const rule = {
16
16
  minimum: 2,
17
17
  default: 3,
18
18
  },
19
+ interfacePrefix: {
20
+ type: 'string',
21
+ minLength: 1,
22
+ },
19
23
  },
20
24
  additionalProperties: false,
21
25
  },
22
26
  ],
23
27
  messages: {
24
- preferInterface: 'Object type used {{count}} times. Consider creating interface "{{interfaceName}}"}}',
28
+ preferInterface: 'Object type used {{count}} times. Consider creating interface "{{interfaceName}}"',
29
+ // BFR-DYNCLI-001: no FDP-conform name can be derived (no `interfacePrefix`, or no property keys) ⇒ report only
30
+ preferInterfaceNoFix: 'Object type used {{count}} times. Extract it into a named, module-prefixed interface'
31
+ + ' (e.g. "{{suggestion}}") — auto-fix runs only with the `interfacePrefix` option.',
25
32
  },
26
33
  // BFR-ADVENTOR-009 (2. lépcső): a fixer forrás-szöveg-megőrzőre átírva (`sourceCode.getText` per property)
27
34
  // → a komplex/union/qualified/function típusok EXAKT megőrződnek, a generált interface ÉRVÉNYES TS. Ezért
@@ -104,21 +111,6 @@ const rule = {
104
111
  return 'complex';
105
112
  }
106
113
  }
107
- /**
108
- * Generate interface name based on context
109
- */
110
- function generateInterfaceName(signature, usageCount) {
111
- // Try to extract meaningful name from signature
112
- const properties = signature.split(';');
113
- if (properties.length === 1) {
114
- const prop = properties[0].split(':')[0].replace('readonly ', '').replace('?', '');
115
- if (prop && prop !== 'unknown') {
116
- return `${prop.charAt(0).toUpperCase() + prop.slice(1)}Interface`;
117
- }
118
- }
119
- // Fallback to generic name
120
- return `GeneratedInterface${usageCount}`;
121
- }
122
114
  /**
123
115
  * Check if interface name conflicts with existing identifiers
124
116
  */
@@ -169,8 +161,10 @@ const rule = {
169
161
  .map((m) => String(m.key?.name ?? m.key?.value ?? ''))
170
162
  .filter((k) => !!k)
171
163
  .slice(0, 3);
164
+ // no property keys ⇒ no meaningful name (the former `Generated_Interface` / `GeneratedInterfaceN` fallback
165
+ // wrote meaningless, convention-breaking names into the source — BFR-DYNCLI-001)
172
166
  if (!keys.length) {
173
- return 'Generated_Interface';
167
+ return undefined;
174
168
  }
175
169
  const pascal = keys
176
170
  .map((k) => k.charAt(0).toUpperCase() + k.slice(1))
@@ -202,8 +196,26 @@ const rule = {
202
196
  // Process all collected type usages
203
197
  for (const [signature, usages] of typeUsages) {
204
198
  if (usages.length >= threshold) {
205
- // beszédes név a property-kulcsokból (ütközés-mentesre pontosítva)
206
- const interfaceName = generateUniqueInterfaceName(deriveInterfaceName(usages[0].node));
199
+ // beszédes név a property-kulcsokból; BFR-DYNCLI-001: FDP-konform (modul-prefixes) név CSAK az
200
+ // `interfacePrefix` opcióval vezethető le — enélkül (vagy kulcsok nélkül) a szabály csak jelez, ⛔ fixel
201
+ const derived = deriveInterfaceName(usages[0].node);
202
+ const prefix = options.interfacePrefix;
203
+ const interfaceName = derived && prefix
204
+ ? generateUniqueInterfaceName(`${prefix}${derived}`)
205
+ : undefined;
206
+ if (!interfaceName) {
207
+ for (const usage of usages) {
208
+ context.report({
209
+ node: usage.node,
210
+ messageId: 'preferInterfaceNoFix',
211
+ data: {
212
+ count: usages.length.toString(),
213
+ suggestion: derived ? `<ModulePrefix>_${derived}` : '<ModulePrefix>_<Name>_Interface',
214
+ },
215
+ });
216
+ }
217
+ continue;
218
+ }
207
219
  // a törzs a FORRÁS-SZÖVEGBŐL (getText) — a komplex/union/qualified típusok EXAKT megőrződnek
208
220
  const interfaceBody = buildInterfaceBody(usages[0].node);
209
221
  // Report on each usage
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-interface-over-duplicate-types.js","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-interface-over-duplicate-types.js","sourceRoot":"","sources":["../../../src/plugin/rules/prefer-interface-over-duplicate-types.ts"],"names":[],"mappings":";;AAiBA,MAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,2FAA2F;YACxG,WAAW,EAAE,IAAI;SAClB;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;qBACX;oBACD,eAAe,EAAE;wBACf,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,CAAC;qBACb;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,mFAAmF;YACpG,+GAA+G;YAC/G,oBAAoB,EAAE,sFAAsF;kBACxG,kFAAkF;SACvF;QACD,2GAA2G;QAC3G,0GAA0G;QAC1G,uGAAuG;QACvG,8FAA8F;QAC9F,OAAO,EAAE,MAAM;KAChB;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,OAAO,GAAgB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,gDAAgD;QAChD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,MAAM,eAAe,GAAU,EAAE,CAAC;QAElC;;WAEG;QACH,SAAS,mBAAmB,CAAC,IAAS;YACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC3C,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,8BAA8B;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;iBAC5B,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC;iBAC9D,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;gBACnB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,SAAS,CAAC;gBAC/D,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEpD,OAAO,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;YAChD,CAAC,CAAC;iBACD,IAAI,EAAE,CAAC,CAAC,sBAAsB;YAEjC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED;;WAEG;QACH,SAAS,aAAa,CAAC,cAAmB;YACxC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;gBACtD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC;YAE3C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,iBAAiB;oBACpB,OAAO,QAAQ,CAAC;gBAClB,KAAK,iBAAiB;oBACpB,OAAO,QAAQ,CAAC;gBAClB,KAAK,kBAAkB;oBACrB,OAAO,SAAS,CAAC;gBACnB,KAAK,eAAe;oBAClB,OAAO,MAAM,CAAC;gBAChB,KAAK,eAAe;oBAClB,OAAO,MAAM,CAAC;gBAChB,KAAK,oBAAoB;oBACvB,OAAO,WAAW,CAAC;gBACrB,KAAK,cAAc;oBACjB,OAAO,KAAK,CAAC;gBACf,KAAK,kBAAkB;oBACrB,OAAO,SAAS,CAAC;gBACnB,KAAK,gBAAgB;oBACnB,OAAO,OAAO,CAAC;gBACjB,KAAK,iBAAiB;oBACpB,OAAO,QAAQ,CAAC;gBAClB,KAAK,eAAe;oBAClB,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,SAAS,CAAC;gBACtD,KAAK,aAAa;oBAChB,OAAO,GAAG,aAAa,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC;gBACpE,KAAK,iBAAiB;oBACpB,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,WAAW,CAAC;gBAC5C,KAAK,eAAe;oBAClB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACnC,KAAK,aAAa;oBAChB,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;gBAChG,KAAK,oBAAoB;oBACvB,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC;gBAEvG;oBACE,OAAO,SAAS,CAAC;YACrB,CAAC;QACH,CAAC;QAED;;WAEG;QACH,SAAS,cAAc,CAAC,IAAY;YAClC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAElE,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED;;WAEG;QACH,SAAS,2BAA2B,CAAC,QAAgB;YACnD,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,IAAI,GAAG,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;;;WAKG;QACH,SAAS,kBAAkB,CAAC,IAAS;YACnC,MAAM,OAAO,GAAU,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAExE,OAAO,OAAO;iBACX,GAAG,CAAC,CAAC,MAAW,EAAU,EAAE;gBAC3B,MAAM,IAAI,GAAW,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC/E,OAAO,KAAK,IAAI,GAAG,CAAC;YACtB,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED;;;WAGG;QACH,SAAS,mBAAmB,CAAC,IAAS;YACpC,MAAM,OAAO,GAAU,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,GAAa,OAAO;iBAC3B,MAAM,CAAC,CAAC,CAAM,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC;iBAC7D,GAAG,CAAC,CAAC,CAAM,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;iBAClE,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEf,2GAA2G;YAC3G,iFAAiF;YACjF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,MAAM,GAAW,IAAI;iBACxB,GAAG,CAAC,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,OAAO,GAAG,MAAM,YAAY,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,aAAa,CAAC,IAAS;gBACrB,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO;oBACT,CAAC;oBAED,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAE3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/B,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;oBAChC,CAAC;oBAED,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC;wBAC9B,IAAI;wBACJ,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yEAAyE,EAAE,KAAK,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;YAED,cAAc,CAAC,IAAS;gBACtB,IAAI,CAAC;oBACH,oCAAoC;oBACpC,KAAK,MAAM,CAAE,SAAS,EAAE,MAAM,CAAE,IAAI,UAAU,EAAE,CAAC;wBAC/C,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;4BAC/B,+FAA+F;4BAC/F,wGAAwG;4BACxG,MAAM,OAAO,GAAuB,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;4BACxE,MAAM,MAAM,GAAuB,OAAO,CAAC,eAAe,CAAC;4BAC3D,MAAM,aAAa,GAAuB,OAAO,IAAI,MAAM;gCACzD,CAAC,CAAC,2BAA2B,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;gCACpD,CAAC,CAAC,SAAS,CAAC;4BAEd,IAAI,CAAC,aAAa,EAAE,CAAC;gCACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oCAC3B,OAAO,CAAC,MAAM,CAAC;wCACb,IAAI,EAAE,KAAK,CAAC,IAAI;wCAChB,SAAS,EAAE,sBAAsB;wCACjC,IAAI,EAAE;4CACJ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;4CAC/B,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC,iCAAiC;yCACtF;qCACF,CAAC,CAAC;gCACL,CAAC;gCACD,SAAS;4BACX,CAAC;4BAED,6FAA6F;4BAC7F,MAAM,aAAa,GAAW,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;4BAEjE,uBAAuB;4BACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gCAC3B,OAAO,CAAC,MAAM,CAAC;oCACb,IAAI,EAAE,KAAK,CAAC,IAAI;oCAChB,SAAS,EAAE,iBAAiB;oCAC5B,IAAI,EAAE;wCACJ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;wCAC/B,aAAa;qCACd;oCACD,GAAG,CAAC,KAAK;wCACP,IAAI,CAAC;4CACH,MAAM,oBAAoB,GAAG,aAAa,aAAa,OAAO,aAAa,KAAK,CAAC;4CAEjF,0DAA0D;4CAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4CACzC,IAAI,cAAc,GAAG,CAAC,CAAC;4CAEvB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gDACxD,mBAAmB;gDACnB,IAAI,UAAU,GAAG,SAAS,CAAC;gDAE3B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oDACvC,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;wDACtC,UAAU,GAAG,IAAI,CAAC;oDACpB,CAAC;yDAAM,CAAC;wDACN,MAAM;oDACR,CAAC;gDACH,CAAC;gDACD,cAAc,GAAG,UAAU,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC;4CACxC,CAAC;4CAED,4BAA4B;4CAC5B,MAAM,KAAK,GAAG;gDACZ,KAAK,CAAC,oBAAoB,CAAC,CAAE,cAAc,EAAE,cAAc,CAAE,EAAE,OAAO,oBAAoB,IAAI,CAAC;6CAChG,CAAC;4CAEF,8CAA8C;4CAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gDAC3B,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAC7C,CAAC;4CACJ,CAAC;4CAED,OAAO,KAAK,CAAC;wCACf,CAAC;wCAAC,OAAO,QAAQ,EAAE,CAAC;4CAClB,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,QAAQ,CAAC,CAAC;4CAE1F,OAAO,IAAI,CAAC;wCACd,CAAC;oCACH,CAAC;iCACF,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wEAAwE,EAAE,KAAK,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,kBAAe,IAAI,CAAC"}