@breadstone-infrastructure/nx-tasks 0.0.231 → 0.0.233

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 (141) hide show
  1. package/executors/doppler-config-sync/executor.task.d.ts.map +1 -1
  2. package/executors/doppler-config-sync/executor.task.js +37 -18
  3. package/executors/doppler-config-sync/executor.task.js.map +1 -1
  4. package/executors/doppler-vercel-sync/executor.d.ts +11 -0
  5. package/executors/doppler-vercel-sync/executor.d.ts.map +1 -0
  6. package/executors/doppler-vercel-sync/executor.js +71 -0
  7. package/executors/doppler-vercel-sync/executor.js.map +1 -0
  8. package/executors/doppler-vercel-sync/executor.options.d.ts +8 -0
  9. package/executors/doppler-vercel-sync/executor.options.d.ts.map +1 -0
  10. package/executors/doppler-vercel-sync/executor.options.js +4 -0
  11. package/executors/doppler-vercel-sync/executor.options.js.map +1 -0
  12. package/executors/doppler-vercel-sync/executor.task.d.ts +30 -0
  13. package/executors/doppler-vercel-sync/executor.task.d.ts.map +1 -0
  14. package/executors/doppler-vercel-sync/executor.task.js +522 -0
  15. package/executors/doppler-vercel-sync/executor.task.js.map +1 -0
  16. package/executors/doppler-vercel-sync/schema.json +95 -0
  17. package/executors/generate-package-docs/executor.d.ts +6 -0
  18. package/executors/generate-package-docs/executor.d.ts.map +1 -0
  19. package/executors/generate-package-docs/executor.js +72 -0
  20. package/executors/generate-package-docs/executor.js.map +1 -0
  21. package/executors/generate-package-docs/executor.options.d.ts +6 -0
  22. package/executors/generate-package-docs/executor.options.d.ts.map +1 -0
  23. package/executors/generate-package-docs/executor.options.js +4 -0
  24. package/executors/generate-package-docs/executor.options.js.map +1 -0
  25. package/executors/generate-package-docs/executor.task.d.ts +103 -0
  26. package/executors/generate-package-docs/executor.task.d.ts.map +1 -0
  27. package/executors/generate-package-docs/executor.task.js +259 -0
  28. package/executors/generate-package-docs/executor.task.js.map +1 -0
  29. package/executors/generate-package-docs/schema.json +258 -0
  30. package/executors/icon-collection-builder/executor.d.ts.map +1 -1
  31. package/executors/icon-collection-builder/executor.js +3 -2
  32. package/executors/icon-collection-builder/executor.js.map +1 -1
  33. package/executors/icon-collection-builder/executor.task.d.ts +1 -0
  34. package/executors/icon-collection-builder/executor.task.d.ts.map +1 -1
  35. package/executors/icon-collection-builder/executor.task.js +73 -11
  36. package/executors/icon-collection-builder/executor.task.js.map +1 -1
  37. package/executors/icon-collection-builder/svg.d.ts +19 -0
  38. package/executors/icon-collection-builder/svg.d.ts.map +1 -1
  39. package/executors/icon-collection-builder/svg.js +106 -0
  40. package/executors/icon-collection-builder/svg.js.map +1 -1
  41. package/executors/icon-collection-downloader/executor.d.ts.map +1 -1
  42. package/executors/icon-collection-downloader/executor.js +3 -2
  43. package/executors/icon-collection-downloader/executor.js.map +1 -1
  44. package/executors/icon-collection-downloader/executor.task.d.ts +2 -0
  45. package/executors/icon-collection-downloader/executor.task.d.ts.map +1 -1
  46. package/executors/icon-collection-downloader/executor.task.js +130 -15
  47. package/executors/icon-collection-downloader/executor.task.js.map +1 -1
  48. package/executors/lit-docs/ComponentDocFixer.d.ts +176 -0
  49. package/executors/lit-docs/ComponentDocFixer.d.ts.map +1 -0
  50. package/executors/lit-docs/ComponentDocFixer.js +424 -0
  51. package/executors/lit-docs/ComponentDocFixer.js.map +1 -0
  52. package/executors/lit-docs/JSDocFixer.d.ts +97 -0
  53. package/executors/lit-docs/JSDocFixer.d.ts.map +1 -0
  54. package/executors/lit-docs/JSDocFixer.js +200 -0
  55. package/executors/lit-docs/JSDocFixer.js.map +1 -0
  56. package/executors/lit-docs/executor.d.ts.map +1 -1
  57. package/executors/lit-docs/executor.js +2 -1
  58. package/executors/lit-docs/executor.js.map +1 -1
  59. package/executors/lit-docs/executor.task.d.ts +1 -0
  60. package/executors/lit-docs/executor.task.d.ts.map +1 -1
  61. package/executors/lit-docs/executor.task.js +71 -24
  62. package/executors/lit-docs/executor.task.js.map +1 -1
  63. package/executors/lit-style-transform/executor.js +1 -1
  64. package/executors/lit-style-transform/executor.js.map +1 -1
  65. package/executors/prisma-seeds/executor.options.d.ts +1 -1
  66. package/executors/prisma-seeds/executor.task.d.ts +1 -1
  67. package/executors/secrets-config-sync/executor.d.ts +11 -0
  68. package/executors/secrets-config-sync/executor.d.ts.map +1 -0
  69. package/executors/secrets-config-sync/executor.js +64 -0
  70. package/executors/secrets-config-sync/executor.js.map +1 -0
  71. package/executors/secrets-config-sync/executor.options.d.ts +6 -0
  72. package/executors/secrets-config-sync/executor.options.d.ts.map +1 -0
  73. package/executors/secrets-config-sync/executor.options.js +4 -0
  74. package/executors/secrets-config-sync/executor.options.js.map +1 -0
  75. package/executors/secrets-config-sync/executor.task.d.ts +14 -0
  76. package/executors/secrets-config-sync/executor.task.d.ts.map +1 -0
  77. package/executors/secrets-config-sync/executor.task.js +157 -0
  78. package/executors/secrets-config-sync/executor.task.js.map +1 -0
  79. package/executors/secrets-config-sync/providers/azure-keyvault.provider.d.ts +42 -0
  80. package/executors/secrets-config-sync/providers/azure-keyvault.provider.d.ts.map +1 -0
  81. package/executors/secrets-config-sync/providers/azure-keyvault.provider.js +120 -0
  82. package/executors/secrets-config-sync/providers/azure-keyvault.provider.js.map +1 -0
  83. package/executors/secrets-config-sync/providers/doppler.provider.d.ts +18 -0
  84. package/executors/secrets-config-sync/providers/doppler.provider.d.ts.map +1 -0
  85. package/executors/secrets-config-sync/providers/doppler.provider.js +53 -0
  86. package/executors/secrets-config-sync/providers/doppler.provider.js.map +1 -0
  87. package/executors/secrets-config-sync/providers/secrets-provider.factory.d.ts +17 -0
  88. package/executors/secrets-config-sync/providers/secrets-provider.factory.d.ts.map +1 -0
  89. package/executors/secrets-config-sync/providers/secrets-provider.factory.js +25 -0
  90. package/executors/secrets-config-sync/providers/secrets-provider.factory.js.map +1 -0
  91. package/executors/secrets-config-sync/providers/secrets-provider.interface.d.ts +28 -0
  92. package/executors/secrets-config-sync/providers/secrets-provider.interface.d.ts.map +1 -0
  93. package/executors/secrets-config-sync/providers/secrets-provider.interface.js +4 -0
  94. package/executors/secrets-config-sync/providers/secrets-provider.interface.js.map +1 -0
  95. package/executors/secrets-config-sync/schema.json +44 -0
  96. package/executors/secrets-vercel-sync/executor.d.ts +11 -0
  97. package/executors/secrets-vercel-sync/executor.d.ts.map +1 -0
  98. package/executors/secrets-vercel-sync/executor.js +74 -0
  99. package/executors/secrets-vercel-sync/executor.js.map +1 -0
  100. package/executors/secrets-vercel-sync/executor.options.d.ts +8 -0
  101. package/executors/secrets-vercel-sync/executor.options.d.ts.map +1 -0
  102. package/executors/secrets-vercel-sync/executor.options.js +4 -0
  103. package/executors/secrets-vercel-sync/executor.options.js.map +1 -0
  104. package/executors/secrets-vercel-sync/executor.task.d.ts +34 -0
  105. package/executors/secrets-vercel-sync/executor.task.d.ts.map +1 -0
  106. package/executors/secrets-vercel-sync/executor.task.js +492 -0
  107. package/executors/secrets-vercel-sync/executor.task.js.map +1 -0
  108. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.d.ts +42 -0
  109. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.d.ts.map +1 -0
  110. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.js +118 -0
  111. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.js.map +1 -0
  112. package/executors/secrets-vercel-sync/providers/doppler.provider.d.ts +18 -0
  113. package/executors/secrets-vercel-sync/providers/doppler.provider.d.ts.map +1 -0
  114. package/executors/secrets-vercel-sync/providers/doppler.provider.js +61 -0
  115. package/executors/secrets-vercel-sync/providers/doppler.provider.js.map +1 -0
  116. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.d.ts +17 -0
  117. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.d.ts.map +1 -0
  118. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.js +25 -0
  119. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.js.map +1 -0
  120. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.d.ts +28 -0
  121. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.d.ts.map +1 -0
  122. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.js +4 -0
  123. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.js.map +1 -0
  124. package/executors/secrets-vercel-sync/schema.json +112 -0
  125. package/executors/token-linter/executor.options.d.ts +1 -1
  126. package/executors/token-linter/executor.task.d.ts +1 -1
  127. package/executors/token-linter/schema.json +1 -1
  128. package/executors.json +40 -30
  129. package/index.d.ts +4 -3
  130. package/index.d.ts.map +1 -1
  131. package/index.js +41 -39
  132. package/index.js.map +1 -1
  133. package/package.json +21 -19
  134. package/utils/markdown-processing.d.ts +43 -0
  135. package/utils/markdown-processing.d.ts.map +1 -0
  136. package/utils/markdown-processing.js +186 -0
  137. package/utils/markdown-processing.js.map +1 -0
  138. package/utils/valid-html-tags.d.ts +6 -0
  139. package/utils/valid-html-tags.d.ts.map +1 -0
  140. package/utils/valid-html-tags.js +83 -0
  141. package/utils/valid-html-tags.js.map +1 -0
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ // #region Imports
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ComponentDocFixer = void 0;
5
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
6
+ /**
7
+ * Reconciles component documentation comment blocks with the actual code.
8
+ * Removes stale tags, adds missing tags, and reorders all tags according to
9
+ * the canonical tag order.
10
+ *
11
+ * @public
12
+ */
13
+ class ComponentDocFixer {
14
+ // #region Fields
15
+ /**
16
+ * The canonical order of custom element documentation tags.
17
+ *
18
+ * @private
19
+ */
20
+ static _TAG_ORDER = [
21
+ 'description', 'name', 'element', 'category',
22
+ 'slot', 'csspart', 'cssprop', 'fires', 'dependency',
23
+ 'example', 'public'
24
+ ];
25
+ /**
26
+ * Defines which tags belong to the same visual group in the output.
27
+ * Tags within a group are consecutive; groups are separated by blank lines.
28
+ *
29
+ * @private
30
+ */
31
+ static _TAG_GROUPS = [
32
+ ['description'],
33
+ ['name', 'element', 'category'],
34
+ ['slot'],
35
+ ['csspart'],
36
+ ['cssprop'],
37
+ ['fires'],
38
+ ['dependency'],
39
+ ['example'],
40
+ ['public'],
41
+ ];
42
+ /**
43
+ * Tags that can contain multiple continuation lines (free-form content).
44
+ *
45
+ * @private
46
+ */
47
+ static _MULTILINE_TAGS = new Set(['description', 'example']);
48
+ // #endregion
49
+ // #region Methods
50
+ /**
51
+ * Reconciles component documentation tags in a file with the actual code.
52
+ * Removes stale tags, adds missing tags, and reorders all tags to match
53
+ * the canonical tag order.
54
+ *
55
+ * @param filePath - The absolute path to the component file to fix.
56
+ * @param result - The validation result containing the class name and missing details.
57
+ * @param slots - The full list of expected slot names from the template.
58
+ * @param parts - The full list of expected csspart names from the template.
59
+ * @param cssVars - The full list of expected CSS custom property names.
60
+ * @param dependencies - The full list of expected dependency class names.
61
+ * @param cssVarTypes - Optional map from CSS variable name to token type (e.g. `color`, `time`).
62
+ * @returns `true` if the file was modified, or a failure reason string.
63
+ * @public
64
+ */
65
+ static fix(filePath, result, slots, parts, cssVars, dependencies, cssVarTypes = new Map()) {
66
+ const content = utilities_1.File.readAllText(filePath, 'utf8');
67
+ const docMatch = this.findClassDoc(content, result.className);
68
+ if (!docMatch) {
69
+ return `Could not locate a documentation comment block (/** ... */) before class '${result.className}'. ` +
70
+ `The file may use a complex @Component() decorator that the regex cannot parse.`;
71
+ }
72
+ const { start, end, docText } = docMatch;
73
+ const parsed = this.parseDocBlock(docText);
74
+ const reconciled = this.reconcile(parsed, slots, parts, cssVars, dependencies, cssVarTypes);
75
+ const rebuilt = this.rebuildDocBlock(parsed.preambleLines, reconciled);
76
+ if (rebuilt === docText) {
77
+ return `Documentation comment for class '${result.className}' is already correct after reconciliation.`;
78
+ }
79
+ const updatedContent = content.substring(0, start) + rebuilt + content.substring(end);
80
+ utilities_1.File.writeAllText(filePath, updatedContent, 'utf8');
81
+ return true;
82
+ }
83
+ /**
84
+ * Finds the documentation comment block immediately preceding a class declaration.
85
+ * Searches backwards from the class keyword to find the nearest doc block,
86
+ * ensuring it does not accidentally match a doc block for a different declaration.
87
+ *
88
+ * @param content - The full file content.
89
+ * @param className - The class name to find the documentation for.
90
+ * @returns The doc match or `null` if not found.
91
+ * @private
92
+ */
93
+ static findClassDoc(content, className) {
94
+ // Find the class declaration position
95
+ const classPattern = new RegExp(`export\\s+(?:abstract\\s+)?class\\s+${className}\\b`);
96
+ const classMatch = classPattern.exec(content);
97
+ if (!classMatch) {
98
+ return null;
99
+ }
100
+ // Search backwards from the class declaration for the nearest /** ... */ block.
101
+ // Only consider the content before the class keyword.
102
+ const contentBeforeClass = content.substring(0, classMatch.index);
103
+ const docBlockPattern = /\/\*\*[\s\S]*?\*\//g;
104
+ let lastDocMatch = null;
105
+ let currentMatch;
106
+ while ((currentMatch = docBlockPattern.exec(contentBeforeClass)) !== null) {
107
+ lastDocMatch = currentMatch;
108
+ }
109
+ if (!lastDocMatch) {
110
+ return null;
111
+ }
112
+ // Verify there are no other declarations (interface, class, type, enum, function)
113
+ // between the doc block end and the class declaration.
114
+ const betweenContent = contentBeforeClass.substring(lastDocMatch.index + lastDocMatch[0].length);
115
+ const declarationPattern = /\b(?:export\s+)?(?:interface|class|type|enum|function)\s+\w+/;
116
+ if (declarationPattern.test(betweenContent)) {
117
+ return null;
118
+ }
119
+ const docText = lastDocMatch[0];
120
+ const start = lastDocMatch.index;
121
+ const end = start + docText.length;
122
+ return { start, end, docText };
123
+ }
124
+ /**
125
+ * Parses a raw documentation comment block into structured preamble and tag sections.
126
+ *
127
+ * @param docText - The raw documentation comment text including opening and closing markers.
128
+ * @returns The parsed representation with preamble lines and tag sections.
129
+ * @private
130
+ */
131
+ static parseDocBlock(docText) {
132
+ const lines = docText.split('\n');
133
+ const preambleLines = [];
134
+ const tagSections = [];
135
+ let currentTag = null;
136
+ let currentLines = [];
137
+ let inPreamble = true;
138
+ const tagPattern = /^\s*\*\s*@(\w+)/;
139
+ const saveCurrentTag = () => {
140
+ if (currentTag !== null && currentLines.length > 0) {
141
+ // Strip trailing blank comment lines
142
+ while (currentLines.length > 0 && currentLines[currentLines.length - 1].trim() === '*') {
143
+ currentLines.pop();
144
+ }
145
+ if (currentLines.length > 0) {
146
+ tagSections.push({ tag: currentTag, lines: [...currentLines] });
147
+ }
148
+ }
149
+ currentLines = [];
150
+ };
151
+ for (const line of lines) {
152
+ const trimmed = line.trim();
153
+ if (trimmed === '/**' || trimmed === '*/') {
154
+ continue;
155
+ }
156
+ const tagMatch = tagPattern.exec(line);
157
+ if (tagMatch) {
158
+ saveCurrentTag();
159
+ inPreamble = false;
160
+ currentTag = tagMatch[1];
161
+ currentLines = [line];
162
+ }
163
+ else if (inPreamble) {
164
+ preambleLines.push(line);
165
+ }
166
+ else if (currentTag !== null) {
167
+ const isBlank = trimmed === '*' || trimmed === '';
168
+ if (!isBlank || ComponentDocFixer._MULTILINE_TAGS.has(currentTag)) {
169
+ currentLines.push(line);
170
+ }
171
+ }
172
+ }
173
+ saveCurrentTag();
174
+ // Strip trailing blank lines from preamble
175
+ while (preambleLines.length > 0 && preambleLines[preambleLines.length - 1].trim() === '*') {
176
+ preambleLines.pop();
177
+ }
178
+ return { preambleLines, tagSections };
179
+ }
180
+ /**
181
+ * Reconciles parsed tag sections with the expected values from the actual code.
182
+ * Removes stale tags, adds missing tags, and orders everything canonically.
183
+ *
184
+ * @param parsed - The parsed documentation block.
185
+ * @param slots - The expected slot names.
186
+ * @param parts - The expected csspart names.
187
+ * @param cssVars - The expected CSS custom property names.
188
+ * @param dependencies - The expected dependency class names.
189
+ * @param cssVarTypes - Map from CSS variable name to token type.
190
+ * @returns The reconciled and ordered tag list.
191
+ * @private
192
+ */
193
+ static reconcile(parsed, slots, parts, cssVars, dependencies, cssVarTypes = new Map()) {
194
+ // Group existing tags by type
195
+ const tagsByType = new Map();
196
+ for (const section of parsed.tagSections) {
197
+ const group = tagsByType.get(section.tag);
198
+ if (group) {
199
+ group.push(section);
200
+ }
201
+ else {
202
+ tagsByType.set(section.tag, [section]);
203
+ }
204
+ }
205
+ const result = [];
206
+ // Emit tags in canonical order
207
+ for (const tag of ComponentDocFixer._TAG_ORDER) {
208
+ const existing = tagsByType.get(tag) ?? [];
209
+ switch (tag) {
210
+ case 'slot':
211
+ result.push(...this.reconcileTagGroup('slot', existing, slots, (value) => ` * @slot ${value} - The ${value || 'default'} slot.`));
212
+ break;
213
+ case 'csspart':
214
+ result.push(...this.reconcileTagGroup('csspart', existing, parts, (value) => ` * @csspart ${value} - The ${value} part.`));
215
+ break;
216
+ case 'cssprop':
217
+ result.push(...this.reconcileTagGroup('cssprop', existing, cssVars, (value) => ` * @cssprop {${this.tokenTypeToCsspropType(cssVarTypes.get(value))}} ${value} - The ${this.cssVarToDescription(value)} CSS custom property.`));
218
+ break;
219
+ case 'dependency':
220
+ result.push(...this.reconcileTagGroup('dependency', existing, dependencies, (value) => ` * @dependency ${value} - The ${this.tagNameToDescription(value)} element.`));
221
+ break;
222
+ default:
223
+ // Non-reconcilable tags (description, name, element, category, fires, example, public): keep as-is
224
+ result.push(...existing);
225
+ break;
226
+ }
227
+ }
228
+ // Preserve unknown tags not in _TAG_ORDER
229
+ for (const [tag, sections] of tagsByType.entries()) {
230
+ if (!ComponentDocFixer._TAG_ORDER.includes(tag)) {
231
+ result.push(...sections);
232
+ }
233
+ }
234
+ return result;
235
+ }
236
+ /**
237
+ * Reconciles a single tag group against the expected values.
238
+ * Keeps existing tags that match an expected value, removes stale ones,
239
+ * and adds new tags for uncovered values.
240
+ *
241
+ * @param tagName - The tag type being reconciled.
242
+ * @param existing - The existing tags of this type from the doc block.
243
+ * @param expectedValues - The expected values from the actual code.
244
+ * @param generateLine - A factory to produce new tag lines for missing values.
245
+ * @returns The reconciled tags: preserved originals first, then newly generated ones.
246
+ * @private
247
+ */
248
+ static reconcileTagGroup(tagName, existing, expectedValues, generateLine) {
249
+ const result = [];
250
+ const covered = new Set();
251
+ const tagToValue = new Map();
252
+ // Keep existing tags that match an expected value
253
+ for (const tag of existing) {
254
+ const tagText = tag.lines.join(' ');
255
+ let matched = false;
256
+ for (const value of expectedValues) {
257
+ if (!covered.has(value) && this.tagContainsValue(tagText, value, tagName)) {
258
+ covered.add(value);
259
+ matched = true;
260
+ tagToValue.set(tag, value);
261
+ break;
262
+ }
263
+ }
264
+ if (matched) {
265
+ result.push(tag);
266
+ }
267
+ }
268
+ // Add new tags for uncovered expected values
269
+ for (const value of expectedValues) {
270
+ if (!covered.has(value)) {
271
+ const tag = { tag: tagName, lines: [generateLine(value)] };
272
+ tagToValue.set(tag, value);
273
+ result.push(tag);
274
+ }
275
+ }
276
+ // Sort alphabetically; empty string (default slot) always first
277
+ result.sort((a, b) => {
278
+ const valueA = tagToValue.get(a) ?? '';
279
+ const valueB = tagToValue.get(b) ?? '';
280
+ if (valueA === '' && valueB !== '') {
281
+ return -1;
282
+ }
283
+ if (valueA !== '' && valueB === '') {
284
+ return 1;
285
+ }
286
+ return valueA.localeCompare(valueB);
287
+ });
288
+ return result;
289
+ }
290
+ /**
291
+ * Checks whether a tag text contains a specific expected value using
292
+ * precise matching to avoid substring false positives.
293
+ *
294
+ * @param tagText - The concatenated text of the tag lines.
295
+ * @param value - The expected value to look for.
296
+ * @param tagName - The tag type for context-aware matching.
297
+ * @returns `true` if the tag documents the given value.
298
+ * @private
299
+ */
300
+ static tagContainsValue(tagText, value, tagName) {
301
+ if (value === '') {
302
+ // Default/unnamed slot: matches @slot - description (no name before the dash)
303
+ if (tagName === 'slot') {
304
+ return /\*\s*@slot\s+-\s/.test(tagText) || /\*\s*@slot\s*$/.test(tagText);
305
+ }
306
+ return true;
307
+ }
308
+ const escaped = value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
309
+ // CSS variables: exact match with non-word-hyphen lookahead
310
+ if (value.startsWith('--')) {
311
+ return new RegExp(`${escaped}(?![\\w-])`).test(tagText);
312
+ }
313
+ // Identifiers: exact match with word-boundary-like checks
314
+ return new RegExp(`(?<![\\w-])${escaped}(?![\\w-])`).test(tagText);
315
+ }
316
+ /**
317
+ * Rebuilds a documentation comment block from preamble and ordered tag sections.
318
+ * Groups tags visually according to the tag group definitions and separates
319
+ * groups with blank comment lines.
320
+ *
321
+ * @param preambleLines - The preamble text lines.
322
+ * @param tags - The ordered tag sections.
323
+ * @returns The complete documentation comment string.
324
+ * @private
325
+ */
326
+ static rebuildDocBlock(preambleLines, tags) {
327
+ const sections = [];
328
+ // Section 0: preamble
329
+ if (preambleLines.length > 0) {
330
+ sections.push([...preambleLines]);
331
+ }
332
+ // Group tags by their visual group
333
+ let currentGroupIndex = -1;
334
+ let currentGroupLines = [];
335
+ let lastTag = null;
336
+ for (const tag of tags) {
337
+ const groupIndex = this.getTagGroupIndex(tag.tag);
338
+ if (groupIndex !== currentGroupIndex && currentGroupLines.length > 0) {
339
+ sections.push(currentGroupLines);
340
+ currentGroupLines = [];
341
+ }
342
+ // Separate consecutive multiline tags (e.g. @example) with a blank line
343
+ if (tag.tag === lastTag && ComponentDocFixer._MULTILINE_TAGS.has(tag.tag)) {
344
+ currentGroupLines.push(' *');
345
+ }
346
+ currentGroupLines.push(...tag.lines);
347
+ currentGroupIndex = groupIndex;
348
+ lastTag = tag.tag;
349
+ }
350
+ if (currentGroupLines.length > 0) {
351
+ sections.push(currentGroupLines);
352
+ }
353
+ // Join sections with ' *' separators
354
+ const output = ['/**'];
355
+ for (let i = 0; i < sections.length; i++) {
356
+ if (i > 0) {
357
+ output.push(' *');
358
+ }
359
+ output.push(...sections[i]);
360
+ }
361
+ output.push(' */');
362
+ return output.join('\n');
363
+ }
364
+ /**
365
+ * Gets the visual group index for a tag type.
366
+ *
367
+ * @param tag - The tag type.
368
+ * @returns The group index, or `-1` for unknown tags.
369
+ * @private
370
+ */
371
+ static getTagGroupIndex(tag) {
372
+ return ComponentDocFixer._TAG_GROUPS.findIndex((group) => group.includes(tag));
373
+ }
374
+ /**
375
+ * Generates a human-readable description from a CSS variable name.
376
+ *
377
+ * @param cssVar - The CSS variable name (e.g. `--button-font-family`).
378
+ * @returns A human-readable description.
379
+ * @private
380
+ */
381
+ static cssVarToDescription(cssVar) {
382
+ const segments = cssVar.replace(/^--/, '').split('-');
383
+ if (segments.length <= 1) {
384
+ return cssVar;
385
+ }
386
+ return segments.slice(1).join(' ');
387
+ }
388
+ /**
389
+ * Converts a `mosaik-*` tag name to a human-readable description.
390
+ *
391
+ * @param tagName - The tag name (e.g. `mosaik-fab`).
392
+ * @returns A human-readable description (e.g. `Fab`).
393
+ * @private
394
+ */
395
+ static tagNameToDescription(tagName) {
396
+ return tagName
397
+ .replace(/^mosaik-/, '')
398
+ .split('-')
399
+ .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
400
+ .join(' ');
401
+ }
402
+ /**
403
+ * Maps a token type from the JSON definition to the PascalCase type
404
+ * used in `@cssprop` annotations.
405
+ *
406
+ * @param tokenType - The token type from the JSON (e.g. `color`, `time`).
407
+ * @returns The PascalCase type for the `@cssprop` tag (e.g. `Color`, `String`).
408
+ * @private
409
+ */
410
+ static tokenTypeToCsspropType(tokenType) {
411
+ switch (tokenType) {
412
+ case 'color':
413
+ return 'Color';
414
+ case 'number':
415
+ return 'Number';
416
+ case 'array':
417
+ return 'Array';
418
+ default:
419
+ return 'String';
420
+ }
421
+ }
422
+ }
423
+ exports.ComponentDocFixer = ComponentDocFixer;
424
+ //# sourceMappingURL=ComponentDocFixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentDocFixer.js","sourceRoot":"","sources":["../../../src/executors/lit-docs/ComponentDocFixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { IJSDocCheckerResult } from './JSDocChecker';
2
+ /**
3
+ * Represents the location and text of a JSDoc comment block.
4
+ *
5
+ * @public
6
+ */
7
+ export interface IJSDocMatch {
8
+ readonly start: number;
9
+ readonly end: number;
10
+ readonly jsDocText: string;
11
+ }
12
+ /**
13
+ * Surgically fixes missing JSDoc tags in component files by inserting
14
+ * only the missing tags at their correct positions, preserving all existing content.
15
+ *
16
+ * @public
17
+ */
18
+ export declare class JSDocFixer {
19
+ /**
20
+ * The canonical order of JSDoc tags for component documentation.
21
+ *
22
+ * @private
23
+ */
24
+ private static readonly _TAG_ORDER;
25
+ /**
26
+ * Fixes missing JSDoc tags in a component file based on validation results.
27
+ *
28
+ * @param filePath - The absolute path to the component file to fix.
29
+ * @param result - The validation result containing missing tags.
30
+ * @param slots - The full list of expected slots.
31
+ * @param parts - The full list of expected cssparts.
32
+ * @param cssVars - The full list of expected CSS custom properties.
33
+ * @param dependencies - The full list of expected dependencies.
34
+ * @returns `true` if the file was modified, `false` otherwise.
35
+ * @public
36
+ */
37
+ static fix(filePath: string, result: IJSDocCheckerResult, slots: Array<string>, parts: Array<string>, cssVars: Array<string>, dependencies: Array<string>): boolean;
38
+ /**
39
+ * Finds the JSDoc comment block immediately preceding a class declaration.
40
+ *
41
+ * @param content - The full file content.
42
+ * @param className - The class name to find the JSDoc for.
43
+ * @returns The JSDoc match or `null` if not found.
44
+ * @private
45
+ */
46
+ private static findClassJSDoc;
47
+ /**
48
+ * Inserts missing tag lines into the existing JSDoc at correct positions.
49
+ *
50
+ * @param lines - The existing JSDoc lines.
51
+ * @param missingSlots - Lines to insert for missing slots.
52
+ * @param missingParts - Lines to insert for missing cssparts.
53
+ * @param missingProps - Lines to insert for missing cssprops.
54
+ * @param missingEvents - Lines to insert for missing events.
55
+ * @param missingDeps - Lines to insert for missing dependencies.
56
+ * @returns The updated lines or `null` if nothing was missing.
57
+ * @private
58
+ */
59
+ private static insertMissingTags;
60
+ /**
61
+ * Inserts a group of missing tag lines after existing tags of the same type,
62
+ * or at the correct position based on tag ordering rules.
63
+ *
64
+ * @param lines - The JSDoc lines to mutate.
65
+ * @param tagName - The tag type to insert (e.g. `slot`, `cssprop`).
66
+ * @param newLines - The new tag lines to insert.
67
+ * @private
68
+ */
69
+ private static insertTagGroup;
70
+ /**
71
+ * Finds the last line index containing a specific JSDoc tag.
72
+ *
73
+ * @param lines - The JSDoc lines to search.
74
+ * @param tagName - The tag name to search for.
75
+ * @returns The line index or `-1` if not found.
76
+ * @private
77
+ */
78
+ private static findLastTagIndex;
79
+ /**
80
+ * Finds the first line index containing a specific JSDoc tag.
81
+ *
82
+ * @param lines - The JSDoc lines to search.
83
+ * @param tagName - The tag name to search for.
84
+ * @returns The line index or `-1` if not found.
85
+ * @private
86
+ */
87
+ private static findFirstTagIndex;
88
+ /**
89
+ * Generates a human-readable description from a CSS variable name.
90
+ *
91
+ * @param cssVar - The CSS variable name (e.g. `--button-font-family`).
92
+ * @returns A human-readable description.
93
+ * @private
94
+ */
95
+ private static cssVarToDescription;
96
+ }
97
+ //# sourceMappingURL=JSDocFixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSDocFixer.d.ts","sourceRoot":"","sources":["../../../src/executors/lit-docs/JSDocFixer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IAInB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAIhC;IAMF;;;;;;;;;;;OAWG;WACW,GAAG,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EACpB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EACpB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,GAC5B,OAAO;IAmDV;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAiB7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA8BhC;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA4C7B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAYhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAYrC"}