valtech-components 2.0.729 → 2.0.731

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 (32) hide show
  1. package/esm2022/lib/components/organisms/bottom-nav/bottom-nav.component.mjs +4 -4
  2. package/esm2022/lib/components/organisms/bottom-nav/types.mjs +2 -2
  3. package/esm2022/lib/config/company-footer.config.mjs +34 -20
  4. package/esm2022/lib/services/legal-link/legal-link.service.mjs +68 -0
  5. package/esm2022/lib/services/markdown-article/legal-content.service.mjs +65 -14
  6. package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +266 -0
  7. package/esm2022/lib/services/markdown-article/markdown-article-parser.service.mjs +6 -275
  8. package/esm2022/lib/services/preferences/index.mjs +3 -0
  9. package/esm2022/lib/services/preferences/preferences.service.mjs +164 -0
  10. package/esm2022/lib/services/preferences/preferences.types.mjs +7 -0
  11. package/esm2022/lib/version.mjs +2 -2
  12. package/esm2022/public-api.mjs +10 -1
  13. package/fesm2022/valtech-components.mjs +555 -267
  14. package/fesm2022/valtech-components.mjs.map +1 -1
  15. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  16. package/lib/components/atoms/text/text.component.d.ts +1 -1
  17. package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
  18. package/lib/components/organisms/article/article.component.d.ts +3 -3
  19. package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +1 -1
  20. package/lib/components/organisms/bottom-nav/types.d.ts +1 -1
  21. package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
  22. package/lib/config/company-footer.config.d.ts +24 -4
  23. package/lib/services/legal-link/legal-link.service.d.ts +59 -0
  24. package/lib/services/markdown-article/legal-content.service.d.ts +49 -7
  25. package/lib/services/markdown-article/markdown-article-parser.d.ts +16 -0
  26. package/lib/services/markdown-article/markdown-article-parser.service.d.ts +3 -22
  27. package/lib/services/preferences/index.d.ts +2 -0
  28. package/lib/services/preferences/preferences.service.d.ts +51 -0
  29. package/lib/services/preferences/preferences.types.d.ts +35 -0
  30. package/lib/version.d.ts +1 -1
  31. package/package.json +1 -1
  32. package/public-api.d.ts +3 -0
@@ -0,0 +1,266 @@
1
+ const BOX_DRAWING = /[┌┐└┘├┤┬┴┼─│╔╗╚╝═║]/;
2
+ const CALLOUT_RE = /^>\s*\[!(NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT)\]\s*(.*)$/i;
3
+ const FENCE_RE = /^```([\w-]*)\s*$/;
4
+ const HEADING_RE = /^(#{1,6})\s+(.+)$/;
5
+ const SEPARATOR_RE = /^\s*(?:-{3,}|\*{3,}|_{3,})\s*$/;
6
+ const UNORDERED_RE = /^\s*[-*+]\s+(.+)$/;
7
+ const CHECKLIST_RE = /^\s*[-*+]\s+\[([ xX])\]\s+(.+)$/;
8
+ const ORDERED_RE = /^\s*\d+\.\s+(.+)$/;
9
+ const TABLE_DIVIDER_RE = /^\s*\|?[\s:|-]+\|?\s*$/;
10
+ const TABLE_ROW_RE = /^\s*\|(.+)\|\s*$/;
11
+ /**
12
+ * Pure Markdown → ArticleMetadata parser. No Angular deps — usable from Node scripts
13
+ * (build-time generation) and from the Angular `MarkdownArticleParserService` wrapper.
14
+ *
15
+ * Supported syntax:
16
+ * - Headings (#, ##, ### …) → title / subtitle
17
+ * - Paragraphs → paragraph (with `processLinks` + `allowPartialBold`)
18
+ * - Lists (-, *, 1.) → unordered / ordered list (- [ ] / - [x] for checklist)
19
+ * - Blockquotes (>) → quote, with GitHub callouts `> [!NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT]` mapped to notes
20
+ * - Code fences (```lang) → code
21
+ * - Box-drawing ASCII art (┌┐└┘│─) auto-wrapped as code
22
+ * - Tables → flattened into paragraphs with bold keys
23
+ * - Horizontal rules (---, ***, ___) → separator
24
+ */
25
+ export function parseMarkdownArticle(markdown, config) {
26
+ const lines = normalize(markdown).split('\n');
27
+ const elements = [];
28
+ let i = 0;
29
+ while (i < lines.length) {
30
+ const line = lines[i];
31
+ if (line.trim() === '') {
32
+ i++;
33
+ continue;
34
+ }
35
+ const fence = line.match(FENCE_RE);
36
+ if (fence) {
37
+ const lang = fence[1] || undefined;
38
+ const body = [];
39
+ i++;
40
+ while (i < lines.length && !FENCE_RE.test(lines[i])) {
41
+ body.push(lines[i]);
42
+ i++;
43
+ }
44
+ i++;
45
+ elements.push({
46
+ type: 'code',
47
+ props: { code: body.join('\n'), language: lang, theme: 'dark' },
48
+ });
49
+ continue;
50
+ }
51
+ if (BOX_DRAWING.test(line)) {
52
+ const body = [];
53
+ while (i < lines.length && (lines[i].trim() === '' || BOX_DRAWING.test(lines[i]))) {
54
+ body.push(lines[i]);
55
+ i++;
56
+ }
57
+ while (body.length && body[body.length - 1].trim() === '')
58
+ body.pop();
59
+ elements.push({
60
+ type: 'code',
61
+ props: { code: body.join('\n'), language: 'text', theme: 'dark' },
62
+ });
63
+ continue;
64
+ }
65
+ if (SEPARATOR_RE.test(line)) {
66
+ elements.push({ type: 'separator', props: { style: 'line' } });
67
+ i++;
68
+ continue;
69
+ }
70
+ const heading = line.match(HEADING_RE);
71
+ if (heading) {
72
+ elements.push(makeHeading(heading[1].length, heading[2].trim()));
73
+ i++;
74
+ continue;
75
+ }
76
+ if (line.startsWith('>')) {
77
+ const block = [];
78
+ while (i < lines.length && lines[i].startsWith('>')) {
79
+ block.push(lines[i]);
80
+ i++;
81
+ }
82
+ elements.push(makeQuoteOrCallout(block));
83
+ continue;
84
+ }
85
+ if (TABLE_ROW_RE.test(line)) {
86
+ const rows = [];
87
+ while (i < lines.length && TABLE_ROW_RE.test(lines[i])) {
88
+ rows.push(lines[i]);
89
+ i++;
90
+ }
91
+ elements.push(...makeTable(rows));
92
+ continue;
93
+ }
94
+ if (CHECKLIST_RE.test(line) || UNORDERED_RE.test(line) || ORDERED_RE.test(line)) {
95
+ const listType = CHECKLIST_RE.test(line)
96
+ ? 'checklist'
97
+ : ORDERED_RE.test(line)
98
+ ? 'ordered'
99
+ : 'unordered';
100
+ const items = [];
101
+ while (i < lines.length && lines[i].trim() !== '') {
102
+ const cur = lines[i];
103
+ const check = cur.match(CHECKLIST_RE);
104
+ const unord = cur.match(UNORDERED_RE);
105
+ const ord = cur.match(ORDERED_RE);
106
+ if (check)
107
+ items.push({ text: check[2].trim() });
108
+ else if (ord && listType === 'ordered')
109
+ items.push({ text: ord[1].trim() });
110
+ else if (unord && listType !== 'ordered')
111
+ items.push({ text: unord[1].trim() });
112
+ else
113
+ break;
114
+ i++;
115
+ }
116
+ elements.push({ type: 'list', props: { items, listType } });
117
+ continue;
118
+ }
119
+ const paragraph = [];
120
+ while (i < lines.length && lines[i].trim() !== '' && !startsNewBlock(lines[i])) {
121
+ paragraph.push(lines[i]);
122
+ i++;
123
+ }
124
+ const text = paragraph.join(' ').trim();
125
+ if (text) {
126
+ elements.push({
127
+ type: 'paragraph',
128
+ props: {
129
+ content: text,
130
+ size: 'medium',
131
+ color: 'dark',
132
+ bold: false,
133
+ processLinks: true,
134
+ allowPartialBold: true,
135
+ },
136
+ });
137
+ }
138
+ }
139
+ return {
140
+ elements,
141
+ maxWidth: '900px',
142
+ centered: true,
143
+ theme: 'auto',
144
+ ...config,
145
+ };
146
+ }
147
+ function normalize(md) {
148
+ return md.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
149
+ }
150
+ function startsNewBlock(line) {
151
+ return (HEADING_RE.test(line) ||
152
+ FENCE_RE.test(line) ||
153
+ SEPARATOR_RE.test(line) ||
154
+ TABLE_ROW_RE.test(line) ||
155
+ UNORDERED_RE.test(line) ||
156
+ ORDERED_RE.test(line) ||
157
+ CHECKLIST_RE.test(line) ||
158
+ line.startsWith('>') ||
159
+ BOX_DRAWING.test(line));
160
+ }
161
+ function makeHeading(level, content) {
162
+ if (level === 1) {
163
+ return {
164
+ type: 'title',
165
+ props: { content, size: 'xlarge', color: 'dark', bold: true },
166
+ };
167
+ }
168
+ const size = level === 2 ? 'large' : level === 3 ? 'medium' : 'small';
169
+ return {
170
+ type: 'subtitle',
171
+ props: { content, size, color: 'dark', bold: true },
172
+ };
173
+ }
174
+ function makeQuoteOrCallout(block) {
175
+ const first = block[0];
176
+ const callout = first.match(CALLOUT_RE);
177
+ const lines = block.map(l => l.replace(/^>\s?/, ''));
178
+ if (callout) {
179
+ const type = callout[1].toUpperCase();
180
+ const firstLineRest = callout[2] || '';
181
+ const rest = lines.slice(1).join(' ').trim();
182
+ const text = [firstLineRest, rest].filter(Boolean).join(' ').trim();
183
+ return makeNote(type, text);
184
+ }
185
+ const text = lines.join(' ').trim();
186
+ return {
187
+ type: 'quote',
188
+ props: {
189
+ content: text,
190
+ size: 'medium',
191
+ color: 'medium',
192
+ bold: false,
193
+ showQuoteMark: true,
194
+ alignment: 'left',
195
+ },
196
+ };
197
+ }
198
+ function makeNote(kind, text) {
199
+ const map = {
200
+ NOTE: { color: 'primary', prefix: 'Nota' },
201
+ TIP: { color: 'success', prefix: 'Tip' },
202
+ INFO: { color: 'tertiary', prefix: 'Info' },
203
+ IMPORTANT: { color: 'warning', prefix: 'Importante' },
204
+ WARNING: { color: 'warning', prefix: 'Atención' },
205
+ CAUTION: { color: 'danger', prefix: 'Precaución' },
206
+ };
207
+ const cfg = map[kind];
208
+ return {
209
+ type: 'note',
210
+ props: {
211
+ text,
212
+ prefix: `${cfg.prefix}:`,
213
+ color: cfg.color,
214
+ textColor: 'dark',
215
+ size: 'medium',
216
+ rounded: true,
217
+ },
218
+ };
219
+ }
220
+ function makeTable(rows) {
221
+ const parsed = rows
222
+ .filter(r => !TABLE_DIVIDER_RE.test(r))
223
+ .map(r => r
224
+ .trim()
225
+ .replace(/^\|/, '')
226
+ .replace(/\|$/, '')
227
+ .split('|')
228
+ .map(c => c.trim()));
229
+ if (parsed.length === 0)
230
+ return [];
231
+ const header = parsed[0];
232
+ const dataRows = parsed.slice(1);
233
+ if (dataRows.length === 0) {
234
+ return [
235
+ {
236
+ type: 'paragraph',
237
+ props: {
238
+ content: header.join(' · '),
239
+ size: 'medium',
240
+ color: 'dark',
241
+ bold: false,
242
+ processLinks: true,
243
+ allowPartialBold: true,
244
+ },
245
+ },
246
+ ];
247
+ }
248
+ return dataRows.map(row => {
249
+ const pairs = row.map((cell, idx) => {
250
+ const key = header[idx] ?? '';
251
+ return key ? `**${key}:** ${cell}` : cell;
252
+ });
253
+ return {
254
+ type: 'paragraph',
255
+ props: {
256
+ content: pairs.join(' · '),
257
+ size: 'medium',
258
+ color: 'dark',
259
+ bold: false,
260
+ processLinks: true,
261
+ allowPartialBold: true,
262
+ },
263
+ };
264
+ });
265
+ }
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tYXJ0aWNsZS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL21hcmtkb3duLWFydGljbGUvbWFya2Rvd24tYXJ0aWNsZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUM7QUFDMUMsTUFBTSxVQUFVLEdBQUcsOERBQThELENBQUM7QUFDbEYsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUM7QUFDdkMsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUM7QUFDekMsTUFBTSxZQUFZLEdBQUcsaUNBQWlDLENBQUM7QUFDdkQsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUM7QUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQztBQUNsRCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUFnQixFQUNoQixNQUFpQztJQUVqQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUM7SUFFdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QixDQUFDLEVBQUUsQ0FBQztZQUNKLFNBQVM7UUFDWCxDQUFDO1FB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LENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFydGljbGVFbGVtZW50LFxuICBBcnRpY2xlTGlzdEVsZW1lbnQsXG4gIEFydGljbGVNZXRhZGF0YSxcbiAgQXJ0aWNsZU5vdGVFbGVtZW50LFxuICBBcnRpY2xlU3VidGl0bGVFbGVtZW50LFxuICBBcnRpY2xlVGl0bGVFbGVtZW50LFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL29yZ2FuaXNtcy9hcnRpY2xlL3R5cGVzJztcblxudHlwZSBDYWxsb3V0VHlwZSA9ICdOT1RFJyB8ICdUSVAnIHwgJ0lORk8nIHwgJ1dBUk5JTkcnIHwgJ0NBVVRJT04nIHwgJ0lNUE9SVEFOVCc7XG5cbmNvbnN0IEJPWF9EUkFXSU5HID0gL1vilIzilJDilJTilJjilJzilKTilKzilLTilLzilIDilILilZTilZfilZrilZ3ilZDilZFdLztcbmNvbnN0IENBTExPVVRfUkUgPSAvXj5cXHMqXFxbIShOT1RFfFRJUHxJTkZPfFdBUk5JTkd8Q0FVVElPTnxJTVBPUlRBTlQpXFxdXFxzKiguKikkL2k7XG5jb25zdCBGRU5DRV9SRSA9IC9eYGBgKFtcXHctXSopXFxzKiQvO1xuY29uc3QgSEVBRElOR19SRSA9IC9eKCN7MSw2fSlcXHMrKC4rKSQvO1xuY29uc3QgU0VQQVJBVE9SX1JFID0gL15cXHMqKD86LXszLH18XFwqezMsfXxfezMsfSlcXHMqJC87XG5jb25zdCBVTk9SREVSRURfUkUgPSAvXlxccypbLSorXVxccysoLispJC87XG5jb25zdCBDSEVDS0xJU1RfUkUgPSAvXlxccypbLSorXVxccytcXFsoWyB4WF0pXFxdXFxzKyguKykkLztcbmNvbnN0IE9SREVSRURfUkUgPSAvXlxccypcXGQrXFwuXFxzKyguKykkLztcbmNvbnN0IFRBQkxFX0RJVklERVJfUkUgPSAvXlxccypcXHw/W1xcczp8LV0rXFx8P1xccyokLztcbmNvbnN0IFRBQkxFX1JPV19SRSA9IC9eXFxzKlxcfCguKylcXHxcXHMqJC87XG5cbi8qKlxuICogUHVyZSBNYXJrZG93biDihpIgQXJ0aWNsZU1ldGFkYXRhIHBhcnNlci4gTm8gQW5ndWxhciBkZXBzIOKAlCB1c2FibGUgZnJvbSBOb2RlIHNjcmlwdHNcbiAqIChidWlsZC10aW1lIGdlbmVyYXRpb24pIGFuZCBmcm9tIHRoZSBBbmd1bGFyIGBNYXJrZG93bkFydGljbGVQYXJzZXJTZXJ2aWNlYCB3cmFwcGVyLlxuICpcbiAqIFN1cHBvcnRlZCBzeW50YXg6XG4gKiAtIEhlYWRpbmdzICgjLCAjIywgIyMjIOKApikg4oaSIHRpdGxlIC8gc3VidGl0bGVcbiAqIC0gUGFyYWdyYXBocyDihpIgcGFyYWdyYXBoICh3aXRoIGBwcm9jZXNzTGlua3NgICsgYGFsbG93UGFydGlhbEJvbGRgKVxuICogLSBMaXN0cyAoLSwgKiwgMS4pIOKGkiB1bm9yZGVyZWQgLyBvcmRlcmVkIGxpc3QgKC0gWyBdIC8gLSBbeF0gZm9yIGNoZWNrbGlzdClcbiAqIC0gQmxvY2txdW90ZXMgKD4pIOKGkiBxdW90ZSwgd2l0aCBHaXRIdWIgY2FsbG91dHMgYD4gWyFOT1RFfFRJUHxJTkZPfFdBUk5JTkd8Q0FVVElPTnxJTVBPUlRBTlRdYCBtYXBwZWQgdG8gbm90ZXNcbiAqIC0gQ29kZSBmZW5jZXMgKGBgYGxhbmcpIOKGkiBjb2RlXG4gKiAtIEJveC1kcmF3aW5nIEFTQ0lJIGFydCAo4pSM4pSQ4pSU4pSY4pSC4pSAKSBhdXRvLXdyYXBwZWQgYXMgY29kZVxuICogLSBUYWJsZXMg4oaSIGZsYXR0ZW5lZCBpbnRvIHBhcmFncmFwaHMgd2l0aCBib2xkIGtleXNcbiAqIC0gSG9yaXpvbnRhbCBydWxlcyAoLS0tLCAqKiosIF9fXykg4oaSIHNlcGFyYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNYXJrZG93bkFydGljbGUoXG4gIG1hcmtkb3duOiBzdHJpbmcsXG4gIGNvbmZpZz86IFBhcnRpYWw8QXJ0aWNsZU1ldGFkYXRhPlxuKTogQXJ0aWNsZU1ldGFkYXRhIHtcbiAgY29uc3QgbGluZXMgPSBub3JtYWxpemUobWFya2Rvd24pLnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgZWxlbWVudHM6IEFydGljbGVFbGVtZW50W10gPSBbXTtcblxuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgbGluZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgbGluZSA9IGxpbmVzW2ldO1xuXG4gICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmVuY2UgPSBsaW5lLm1hdGNoKEZFTkNFX1JFKTtcbiAgICBpZiAoZmVuY2UpIHtcbiAgICAgIGNvbnN0IGxhbmcgPSBmZW5jZVsxXSB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBib2R5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaSsrO1xuICAgICAgd2hpbGUgKGkgPCBsaW5lcy5sZW5ndGggJiYgIUZFTkNFX1JFLnRlc3QobGluZXNbaV0pKSB7XG4gICAgICAgIGJvZHkucHVzaChsaW5lc1tpXSk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgIHByb3BzOiB7IGNvZGU6IGJvZHkuam9pbignXFxuJyksIGxhbmd1YWdlOiBsYW5nLCB0aGVtZTogJ2RhcmsnIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChCT1hfRFJBV0lORy50ZXN0KGxpbmUpKSB7XG4gICAgICBjb25zdCBib2R5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgd2hpbGUgKGkgPCBsaW5lcy5sZW5ndGggJiYgKGxpbmVzW2ldLnRyaW0oKSA9PT0gJycgfHwgQk9YX0RSQVdJTkcudGVzdChsaW5lc1tpXSkpKSB7XG4gICAgICAgIGJvZHkucHVzaChsaW5lc1tpXSk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICAgIHdoaWxlIChib2R5Lmxlbmd0aCAmJiBib2R5W2JvZHkubGVuZ3RoIC0gMV0udHJpbSgpID09PSAnJykgYm9keS5wb3AoKTtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgIHByb3BzOiB7IGNvZGU6IGJvZHkuam9pbignXFxuJyksIGxhbmd1YWdlOiAndGV4dCcsIHRoZW1lOiAnZGFyaycgfSxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFNFUEFSQVRPUl9SRS50ZXN0KGxpbmUpKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKHsgdHlwZTogJ3NlcGFyYXRvcicsIHByb3BzOiB7IHN0eWxlOiAnbGluZScgfSB9KTtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRpbmcgPSBsaW5lLm1hdGNoKEhFQURJTkdfUkUpO1xuICAgIGlmIChoZWFkaW5nKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKG1ha2VIZWFkaW5nKGhlYWRpbmdbMV0ubGVuZ3RoLCBoZWFkaW5nWzJdLnRyaW0oKSkpO1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnPicpKSB7XG4gICAgICBjb25zdCBibG9jazogc3RyaW5nW10gPSBbXTtcbiAgICAgIHdoaWxlIChpIDwgbGluZXMubGVuZ3RoICYmIGxpbmVzW2ldLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgICBibG9jay5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgICAgZWxlbWVudHMucHVzaChtYWtlUXVvdGVPckNhbGxvdXQoYmxvY2spKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChUQUJMRV9ST1dfUkUudGVzdChsaW5lKSkge1xuICAgICAgY29uc3Qgcm93czogc3RyaW5nW10gPSBbXTtcbiAgICAgIHdoaWxlIChpIDwgbGluZXMubGVuZ3RoICYmIFRBQkxFX1JPV19SRS50ZXN0KGxpbmVzW2ldKSkge1xuICAgICAgICByb3dzLnB1c2gobGluZXNbaV0pO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLm1ha2VUYWJsZShyb3dzKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoQ0hFQ0tMSVNUX1JFLnRlc3QobGluZSkgfHwgVU5PUkRFUkVEX1JFLnRlc3QobGluZSkgfHwgT1JERVJFRF9SRS50ZXN0KGxpbmUpKSB7XG4gICAgICBjb25zdCBsaXN0VHlwZTogJ2NoZWNrbGlzdCcgfCAndW5vcmRlcmVkJyB8ICdvcmRlcmVkJyA9IENIRUNLTElTVF9SRS50ZXN0KGxpbmUpXG4gICAgICAgID8gJ2NoZWNrbGlzdCdcbiAgICAgICAgOiBPUkRFUkVEX1JFLnRlc3QobGluZSlcbiAgICAgICAgICA/ICdvcmRlcmVkJ1xuICAgICAgICAgIDogJ3Vub3JkZXJlZCc7XG5cbiAgICAgIGNvbnN0IGl0ZW1zOiBBcnRpY2xlTGlzdEVsZW1lbnRbJ3Byb3BzJ11bJ2l0ZW1zJ10gPSBbXTtcbiAgICAgIHdoaWxlIChpIDwgbGluZXMubGVuZ3RoICYmIGxpbmVzW2ldLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgY3VyID0gbGluZXNbaV07XG4gICAgICAgIGNvbnN0IGNoZWNrID0gY3VyLm1hdGNoKENIRUNLTElTVF9SRSk7XG4gICAgICAgIGNvbnN0IHVub3JkID0gY3VyLm1hdGNoKFVOT1JERVJFRF9SRSk7XG4gICAgICAgIGNvbnN0IG9yZCA9IGN1ci5tYXRjaChPUkRFUkVEX1JFKTtcbiAgICAgICAgaWYgKGNoZWNrKSBpdGVtcy5wdXNoKHsgdGV4dDogY2hlY2tbMl0udHJpbSgpIH0pO1xuICAgICAgICBlbHNlIGlmIChvcmQgJiYgbGlzdFR5cGUgPT09ICdvcmRlcmVkJykgaXRlbXMucHVzaCh7IHRleHQ6IG9yZFsxXS50cmltKCkgfSk7XG4gICAgICAgIGVsc2UgaWYgKHVub3JkICYmIGxpc3RUeXBlICE9PSAnb3JkZXJlZCcpIGl0ZW1zLnB1c2goeyB0ZXh0OiB1bm9yZFsxXS50cmltKCkgfSk7XG4gICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzLnB1c2goeyB0eXBlOiAnbGlzdCcsIHByb3BzOiB7IGl0ZW1zLCBsaXN0VHlwZSB9IH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYWdyYXBoOiBzdHJpbmdbXSA9IFtdO1xuICAgIHdoaWxlIChpIDwgbGluZXMubGVuZ3RoICYmIGxpbmVzW2ldLnRyaW0oKSAhPT0gJycgJiYgIXN0YXJ0c05ld0Jsb2NrKGxpbmVzW2ldKSkge1xuICAgICAgcGFyYWdyYXBoLnB1c2gobGluZXNbaV0pO1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gcGFyYWdyYXBoLmpvaW4oJyAnKS50cmltKCk7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LFxuICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UGFydGlhbEJvbGQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzLFxuICAgIG1heFdpZHRoOiAnOTAwcHgnLFxuICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgIHRoZW1lOiAnYXV0bycsXG4gICAgLi4uY29uZmlnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUobWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBtZC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpLnJlcGxhY2UoL1xcci9nLCAnXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0c05ld0Jsb2NrKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIEhFQURJTkdfUkUudGVzdChsaW5lKSB8fFxuICAgIEZFTkNFX1JFLnRlc3QobGluZSkgfHxcbiAgICBTRVBBUkFUT1JfUkUudGVzdChsaW5lKSB8fFxuICAgIFRBQkxFX1JPV19SRS50ZXN0KGxpbmUpIHx8XG4gICAgVU5PUkRFUkVEX1JFLnRlc3QobGluZSkgfHxcbiAgICBPUkRFUkVEX1JFLnRlc3QobGluZSkgfHxcbiAgICBDSEVDS0xJU1RfUkUudGVzdChsaW5lKSB8fFxuICAgIGxpbmUuc3RhcnRzV2l0aCgnPicpIHx8XG4gICAgQk9YX0RSQVdJTkcudGVzdChsaW5lKVxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlSGVhZGluZyhsZXZlbDogbnVtYmVyLCBjb250ZW50OiBzdHJpbmcpOiBBcnRpY2xlVGl0bGVFbGVtZW50IHwgQXJ0aWNsZVN1YnRpdGxlRWxlbWVudCB7XG4gIGlmIChsZXZlbCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndGl0bGUnLFxuICAgICAgcHJvcHM6IHsgY29udGVudCwgc2l6ZTogJ3hsYXJnZScsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IHRydWUgfSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHNpemU6ICdsYXJnZScgfCAnbWVkaXVtJyB8ICdzbWFsbCcgPVxuICAgIGxldmVsID09PSAyID8gJ2xhcmdlJyA6IGxldmVsID09PSAzID8gJ21lZGl1bScgOiAnc21hbGwnO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdzdWJ0aXRsZScsXG4gICAgcHJvcHM6IHsgY29udGVudCwgc2l6ZSwgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtYWtlUXVvdGVPckNhbGxvdXQoYmxvY2s6IHN0cmluZ1tdKTogQXJ0aWNsZUVsZW1lbnQge1xuICBjb25zdCBmaXJzdCA9IGJsb2NrWzBdO1xuICBjb25zdCBjYWxsb3V0ID0gZmlyc3QubWF0Y2goQ0FMTE9VVF9SRSk7XG4gIGNvbnN0IGxpbmVzID0gYmxvY2subWFwKGwgPT4gbC5yZXBsYWNlKC9ePlxccz8vLCAnJykpO1xuXG4gIGlmIChjYWxsb3V0KSB7XG4gICAgY29uc3QgdHlwZSA9IGNhbGxvdXRbMV0udG9VcHBlckNhc2UoKSBhcyBDYWxsb3V0VHlwZTtcbiAgICBjb25zdCBmaXJzdExpbmVSZXN0ID0gY2FsbG91dFsyXSB8fCAnJztcbiAgICBjb25zdCByZXN0ID0gbGluZXMuc2xpY2UoMSkuam9pbignICcpLnRyaW0oKTtcbiAgICBjb25zdCB0ZXh0ID0gW2ZpcnN0TGluZVJlc3QsIHJlc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykudHJpbSgpO1xuICAgIHJldHVybiBtYWtlTm90ZSh0eXBlLCB0ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBsaW5lcy5qb2luKCcgJykudHJpbSgpO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdxdW90ZScsXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvbnRlbnQ6IHRleHQsXG4gICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgc2hvd1F1b3RlTWFyazogdHJ1ZSxcbiAgICAgIGFsaWdubWVudDogJ2xlZnQnLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1ha2VOb3RlKGtpbmQ6IENhbGxvdXRUeXBlLCB0ZXh0OiBzdHJpbmcpOiBBcnRpY2xlTm90ZUVsZW1lbnQge1xuICBjb25zdCBtYXA6IFJlY29yZDxDYWxsb3V0VHlwZSwgeyBjb2xvcjogQXJ0aWNsZU5vdGVFbGVtZW50Wydwcm9wcyddWydjb2xvciddOyBwcmVmaXg6IHN0cmluZyB9PiA9XG4gICAge1xuICAgICAgTk9URTogeyBjb2xvcjogJ3ByaW1hcnknLCBwcmVmaXg6ICdOb3RhJyB9LFxuICAgICAgVElQOiB7IGNvbG9yOiAnc3VjY2VzcycsIHByZWZpeDogJ1RpcCcgfSxcbiAgICAgIElORk86IHsgY29sb3I6ICd0ZXJ0aWFyeScsIHByZWZpeDogJ0luZm8nIH0sXG4gICAgICBJTVBPUlRBTlQ6IHsgY29sb3I6ICd3YXJuaW5nJywgcHJlZml4OiAnSW1wb3J0YW50ZScgfSxcbiAgICAgIFdBUk5JTkc6IHsgY29sb3I6ICd3YXJuaW5nJywgcHJlZml4OiAnQXRlbmNpw7NuJyB9LFxuICAgICAgQ0FVVElPTjogeyBjb2xvcjogJ2RhbmdlcicsIHByZWZpeDogJ1ByZWNhdWNpw7NuJyB9LFxuICAgIH07XG4gIGNvbnN0IGNmZyA9IG1hcFtraW5kXTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnbm90ZScsXG4gICAgcHJvcHM6IHtcbiAgICAgIHRleHQsXG4gICAgICBwcmVmaXg6IGAke2NmZy5wcmVmaXh9OmAsXG4gICAgICBjb2xvcjogY2ZnLmNvbG9yLFxuICAgICAgdGV4dENvbG9yOiAnZGFyaycsXG4gICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgIHJvdW5kZWQ6IHRydWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZVRhYmxlKHJvd3M6IHN0cmluZ1tdKTogQXJ0aWNsZUVsZW1lbnRbXSB7XG4gIGNvbnN0IHBhcnNlZCA9IHJvd3NcbiAgICAuZmlsdGVyKHIgPT4gIVRBQkxFX0RJVklERVJfUkUudGVzdChyKSlcbiAgICAubWFwKHIgPT5cbiAgICAgIHJcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAucmVwbGFjZSgvXlxcfC8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXFx8JC8sICcnKVxuICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAubWFwKGMgPT4gYy50cmltKCkpXG4gICAgKTtcbiAgaWYgKHBhcnNlZC5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCBoZWFkZXIgPSBwYXJzZWRbMF07XG4gIGNvbnN0IGRhdGFSb3dzID0gcGFyc2VkLnNsaWNlKDEpO1xuICBpZiAoZGF0YVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgY29udGVudDogaGVhZGVyLmpvaW4oJyDCtyAnKSxcbiAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1BhcnRpYWxCb2xkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIGRhdGFSb3dzLm1hcChyb3cgPT4ge1xuICAgIGNvbnN0IHBhaXJzID0gcm93Lm1hcCgoY2VsbCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBoZWFkZXJbaWR4XSA/PyAnJztcbiAgICAgIHJldHVybiBrZXkgPyBgKioke2tleX06KiogJHtjZWxsfWAgOiBjZWxsO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNvbnRlbnQ6IHBhaXJzLmpvaW4oJyDCtyAnKSxcbiAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgICAgIGFsbG93UGFydGlhbEJvbGQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0gYXMgQXJ0aWNsZUVsZW1lbnQ7XG4gIH0pO1xufVxuIl19
@@ -1,283 +1,14 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { parseMarkdownArticle } from './markdown-article-parser';
2
3
  import * as i0 from "@angular/core";
3
- const BOX_DRAWING = /[┌┐└┘├┤┬┴┼─│╔╗╚╝═║]/;
4
- const CALLOUT_RE = /^>\s*\[!(NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT)\]\s*(.*)$/i;
5
- const FENCE_RE = /^```([\w-]*)\s*$/;
6
- const HEADING_RE = /^(#{1,6})\s+(.+)$/;
7
- const SEPARATOR_RE = /^\s*(?:-{3,}|\*{3,}|_{3,})\s*$/;
8
- const UNORDERED_RE = /^\s*[-*+]\s+(.+)$/;
9
- const CHECKLIST_RE = /^\s*[-*+]\s+\[([ xX])\]\s+(.+)$/;
10
- const ORDERED_RE = /^\s*\d+\.\s+(.+)$/;
11
- const TABLE_DIVIDER_RE = /^\s*\|?[\s:|-]+\|?\s*$/;
12
- const TABLE_ROW_RE = /^\s*\|(.+)\|\s*$/;
13
4
  /**
14
- * Converts Markdown documents into ArticleMetadata for the val-article organism.
15
- *
16
- * Supported syntax:
17
- * - Headings (#, ##, ### …) → title / subtitle
18
- * - Paragraphs → paragraph (with `processLinks` + `allowPartialBold`)
19
- * - Lists (-, *, 1.) → unordered / ordered list (- [ ] / - [x] for checklist)
20
- * - Blockquotes (>) → quote, with GitHub callouts `> [!NOTE|TIP|INFO|WARNING|CAUTION|IMPORTANT]` mapped to notes
21
- * - Code fences (```lang) → code
22
- * - Box-drawing ASCII art (┌┐└┘│─) auto-wrapped as code
23
- * - Tables → flattened into paragraphs with bold keys
24
- * - Horizontal rules (---, ***, ___) → separator
5
+ * Angular service wrapper for the pure {@link parseMarkdownArticle} function.
6
+ * Provided in root so it can be injected anywhere. The actual parsing logic lives in
7
+ * `markdown-article-parser.ts` and is also usable from Node scripts (build-time generation).
25
8
  */
26
9
  export class MarkdownArticleParserService {
27
10
  parse(markdown, config) {
28
- const lines = this.normalize(markdown).split('\n');
29
- const elements = [];
30
- let i = 0;
31
- while (i < lines.length) {
32
- const line = lines[i];
33
- if (line.trim() === '') {
34
- i++;
35
- continue;
36
- }
37
- // Fenced code block
38
- const fence = line.match(FENCE_RE);
39
- if (fence) {
40
- const lang = fence[1] || undefined;
41
- const body = [];
42
- i++;
43
- while (i < lines.length && !FENCE_RE.test(lines[i])) {
44
- body.push(lines[i]);
45
- i++;
46
- }
47
- i++; // skip closing fence
48
- elements.push({
49
- type: 'code',
50
- props: { code: body.join('\n'), language: lang, theme: 'dark' },
51
- });
52
- continue;
53
- }
54
- // ASCII box-drawing art → treat as code block
55
- if (BOX_DRAWING.test(line)) {
56
- const body = [];
57
- while (i < lines.length && (lines[i].trim() === '' || BOX_DRAWING.test(lines[i]))) {
58
- body.push(lines[i]);
59
- i++;
60
- }
61
- // Trim trailing blank lines from the block
62
- while (body.length && body[body.length - 1].trim() === '')
63
- body.pop();
64
- elements.push({
65
- type: 'code',
66
- props: { code: body.join('\n'), language: 'text', theme: 'dark' },
67
- });
68
- continue;
69
- }
70
- // Separator
71
- if (SEPARATOR_RE.test(line)) {
72
- elements.push({ type: 'separator', props: { style: 'line' } });
73
- i++;
74
- continue;
75
- }
76
- // Heading
77
- const heading = line.match(HEADING_RE);
78
- if (heading) {
79
- elements.push(this.makeHeading(heading[1].length, heading[2].trim()));
80
- i++;
81
- continue;
82
- }
83
- // Callout / blockquote (consume contiguous `>` lines)
84
- if (line.startsWith('>')) {
85
- const block = [];
86
- while (i < lines.length && lines[i].startsWith('>')) {
87
- block.push(lines[i]);
88
- i++;
89
- }
90
- elements.push(this.makeQuoteOrCallout(block));
91
- continue;
92
- }
93
- // Table (consume contiguous `|` lines)
94
- if (TABLE_ROW_RE.test(line)) {
95
- const rows = [];
96
- while (i < lines.length && TABLE_ROW_RE.test(lines[i])) {
97
- rows.push(lines[i]);
98
- i++;
99
- }
100
- elements.push(...this.makeTable(rows));
101
- continue;
102
- }
103
- // List (checklist / unordered / ordered) — consume contiguous lines
104
- if (CHECKLIST_RE.test(line) || UNORDERED_RE.test(line) || ORDERED_RE.test(line)) {
105
- const listType = CHECKLIST_RE.test(line)
106
- ? 'checklist'
107
- : ORDERED_RE.test(line)
108
- ? 'ordered'
109
- : 'unordered';
110
- const items = [];
111
- while (i < lines.length && lines[i].trim() !== '') {
112
- const cur = lines[i];
113
- const check = cur.match(CHECKLIST_RE);
114
- const unord = cur.match(UNORDERED_RE);
115
- const ord = cur.match(ORDERED_RE);
116
- if (check)
117
- items.push({ text: check[2].trim() });
118
- else if (ord && listType === 'ordered')
119
- items.push({ text: ord[1].trim() });
120
- else if (unord && listType !== 'ordered')
121
- items.push({ text: unord[1].trim() });
122
- else
123
- break;
124
- i++;
125
- }
126
- elements.push({ type: 'list', props: { items, listType } });
127
- continue;
128
- }
129
- // Paragraph — consume contiguous non-empty lines that aren't a special block
130
- const paragraph = [];
131
- while (i < lines.length && lines[i].trim() !== '' && !this.startsNewBlock(lines[i])) {
132
- paragraph.push(lines[i]);
133
- i++;
134
- }
135
- const text = paragraph.join(' ').trim();
136
- if (text) {
137
- elements.push({
138
- type: 'paragraph',
139
- props: {
140
- content: text,
141
- size: 'medium',
142
- color: 'dark',
143
- bold: false,
144
- processLinks: true,
145
- allowPartialBold: true,
146
- },
147
- });
148
- }
149
- }
150
- return {
151
- elements,
152
- maxWidth: '900px',
153
- centered: true,
154
- theme: 'auto',
155
- ...config,
156
- };
157
- }
158
- normalize(md) {
159
- return md.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
160
- }
161
- startsNewBlock(line) {
162
- return (HEADING_RE.test(line) ||
163
- FENCE_RE.test(line) ||
164
- SEPARATOR_RE.test(line) ||
165
- TABLE_ROW_RE.test(line) ||
166
- UNORDERED_RE.test(line) ||
167
- ORDERED_RE.test(line) ||
168
- CHECKLIST_RE.test(line) ||
169
- line.startsWith('>') ||
170
- BOX_DRAWING.test(line));
171
- }
172
- makeHeading(level, content) {
173
- if (level === 1) {
174
- return {
175
- type: 'title',
176
- props: { content, size: 'xlarge', color: 'dark', bold: true },
177
- };
178
- }
179
- const size = level === 2 ? 'large' : level === 3 ? 'medium' : 'small';
180
- return {
181
- type: 'subtitle',
182
- props: { content, size, color: 'dark', bold: true },
183
- };
184
- }
185
- makeQuoteOrCallout(block) {
186
- const first = block[0];
187
- const callout = first.match(CALLOUT_RE);
188
- const lines = block.map(l => l.replace(/^>\s?/, ''));
189
- if (callout) {
190
- const type = callout[1].toUpperCase();
191
- const firstLineRest = callout[2] || '';
192
- const rest = lines.slice(1).join(' ').trim();
193
- const text = [firstLineRest, rest].filter(Boolean).join(' ').trim();
194
- return this.makeNote(type, text);
195
- }
196
- const text = lines.join(' ').trim();
197
- return {
198
- type: 'quote',
199
- props: {
200
- content: text,
201
- size: 'medium',
202
- color: 'medium',
203
- bold: false,
204
- showQuoteMark: true,
205
- alignment: 'left',
206
- },
207
- };
208
- }
209
- makeNote(kind, text) {
210
- const map = {
211
- NOTE: { color: 'primary', prefix: 'Nota' },
212
- TIP: { color: 'success', prefix: 'Tip' },
213
- INFO: { color: 'tertiary', prefix: 'Info' },
214
- IMPORTANT: { color: 'warning', prefix: 'Importante' },
215
- WARNING: { color: 'warning', prefix: 'Atención' },
216
- CAUTION: { color: 'danger', prefix: 'Precaución' },
217
- };
218
- const cfg = map[kind];
219
- return {
220
- type: 'note',
221
- props: {
222
- text,
223
- prefix: `${cfg.prefix}:`,
224
- color: cfg.color,
225
- textColor: 'dark',
226
- size: 'medium',
227
- rounded: true,
228
- },
229
- };
230
- }
231
- /**
232
- * Tables are flattened into a header subtitle (if present) followed by one paragraph per
233
- * data row using `**col[0]:** col[1] · **col[2]:** col[3] …` format. val-article has no
234
- * native table element so this preserves the information without breaking the layout.
235
- */
236
- makeTable(rows) {
237
- const parsed = rows
238
- .filter(r => !TABLE_DIVIDER_RE.test(r))
239
- .map(r => r
240
- .trim()
241
- .replace(/^\|/, '')
242
- .replace(/\|$/, '')
243
- .split('|')
244
- .map(c => c.trim()));
245
- if (parsed.length === 0)
246
- return [];
247
- const header = parsed[0];
248
- const dataRows = parsed.slice(1);
249
- if (dataRows.length === 0) {
250
- return [
251
- {
252
- type: 'paragraph',
253
- props: {
254
- content: header.join(' · '),
255
- size: 'medium',
256
- color: 'dark',
257
- bold: false,
258
- processLinks: true,
259
- allowPartialBold: true,
260
- },
261
- },
262
- ];
263
- }
264
- return dataRows.map(row => {
265
- const pairs = row.map((cell, idx) => {
266
- const key = header[idx] ?? '';
267
- return key ? `**${key}:** ${cell}` : cell;
268
- });
269
- return {
270
- type: 'paragraph',
271
- props: {
272
- content: pairs.join(' · '),
273
- size: 'medium',
274
- color: 'dark',
275
- bold: false,
276
- processLinks: true,
277
- allowPartialBold: true,
278
- },
279
- };
280
- });
11
+ return parseMarkdownArticle(markdown, config);
281
12
  }
282
13
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownArticleParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
283
14
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MarkdownArticleParserService, providedIn: 'root' }); }
@@ -286,4 +17,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
286
17
  type: Injectable,
287
18
  args: [{ providedIn: 'root' }]
288
19
  }] });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tYXJ0aWNsZS1wYXJzZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbWFya2Rvd24tYXJ0aWNsZS9tYXJrZG93bi1hcnRpY2xlLXBhcnNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWTNDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sVUFBVSxHQUFHLDhEQUE4RCxDQUFDO0FBQ2xGLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO0FBQ3ZDLE1BQU0sWUFBWSxHQUFHLGdDQUFnQyxDQUFDO0FBQ3RELE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDO0FBQ3pDLE1BQU0sWUFBWSxHQUFHLGlDQUFpQyxDQUFDO0FBQ3ZELE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDO0FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7QUFDbEQsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxLQUFLLENBQUMsUUFBZ0IsRUFBRSxNQUFpQztRQUN2RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBRXRDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEIsSUFBSSxJQUFJLENB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QyxLQUFLLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFO29CQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDMUIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLE1BQU07b0JBQ2IsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLGdCQUFnQixFQUFFLElBQUk7aUJBQ3ZCO2FBQ2dCLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTFSVSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQURmLE1BQU07OzRGQUNuQiw0QkFBNEI7a0JBRHhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXJ0aWNsZUVsZW1lbnQsXG4gIEFydGljbGVMaXN0RWxlbWVudCxcbiAgQXJ0aWNsZU1ldGFkYXRhLFxuICBBcnRpY2xlTm90ZUVsZW1lbnQsXG4gIEFydGljbGVTdWJ0aXRsZUVsZW1lbnQsXG4gIEFydGljbGVUaXRsZUVsZW1lbnQsXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvb3JnYW5pc21zL2FydGljbGUvdHlwZXMnO1xuXG50eXBlIENhbGxvdXRUeXBlID0gJ05PVEUnIHwgJ1RJUCcgfCAnSU5GTycgfCAnV0FSTklORycgfCAnQ0FVVElPTicgfCAnSU1QT1JUQU5UJztcblxuY29uc3QgQk9YX0RSQVdJTkcgPSAvW+KUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKUgOKUguKVlOKVl+KVmuKVneKVkOKVkV0vO1xuY29uc3QgQ0FMTE9VVF9SRSA9IC9ePlxccypcXFshKE5PVEV8VElQfElORk98V0FSTklOR3xDQVVUSU9OfElNUE9SVEFOVClcXF1cXHMqKC4qKSQvaTtcbmNvbnN0IEZFTkNFX1JFID0gL15gYGAoW1xcdy1dKilcXHMqJC87XG5jb25zdCBIRUFESU5HX1JFID0gL14oI3sxLDZ9KVxccysoLispJC87XG5jb25zdCBTRVBBUkFUT1JfUkUgPSAvXlxccyooPzotezMsfXxcXCp7Myx9fF97Myx9KVxccyokLztcbmNvbnN0IFVOT1JERVJFRF9SRSA9IC9eXFxzKlstKitdXFxzKyguKykkLztcbmNvbnN0IENIRUNLTElTVF9SRSA9IC9eXFxzKlstKitdXFxzK1xcWyhbIHhYXSlcXF1cXHMrKC4rKSQvO1xuY29uc3QgT1JERVJFRF9SRSA9IC9eXFxzKlxcZCtcXC5cXHMrKC4rKSQvO1xuY29uc3QgVEFCTEVfRElWSURFUl9SRSA9IC9eXFxzKlxcfD9bXFxzOnwtXStcXHw/XFxzKiQvO1xuY29uc3QgVEFCTEVfUk9XX1JFID0gL15cXHMqXFx8KC4rKVxcfFxccyokLztcblxuLyoqXG4gKiBDb252ZXJ0cyBNYXJrZG93biBkb2N1bWVudHMgaW50byBBcnRpY2xlTWV0YWRhdGEgZm9yIHRoZSB2YWwtYXJ0aWNsZSBvcmdhbmlzbS5cbiAqXG4gKiBTdXBwb3J0ZWQgc3ludGF4OlxuICogLSBIZWFkaW5ncyAoIywgIyMsICMjIyDigKYpIOKGkiB0aXRsZSAvIHN1YnRpdGxlXG4gKiAtIFBhcmFncmFwaHMg4oaSIHBhcmFncmFwaCAod2l0aCBgcHJvY2Vzc0xpbmtzYCArIGBhbGxvd1BhcnRpYWxCb2xkYClcbiAqIC0gTGlzdHMgKC0sICosIDEuKSDihpIgdW5vcmRlcmVkIC8gb3JkZXJlZCBsaXN0ICgtIFsgXSAvIC0gW3hdIGZvciBjaGVja2xpc3QpXG4gKiAtIEJsb2NrcXVvdGVzICg+KSDihpIgcXVvdGUsIHdpdGggR2l0SHViIGNhbGxvdXRzIGA+IFshTk9URXxUSVB8SU5GT3xXQVJOSU5HfENBVVRJT058SU1QT1JUQU5UXWAgbWFwcGVkIHRvIG5vdGVzXG4gKiAtIENvZGUgZmVuY2VzIChgYGBsYW5nKSDihpIgY29kZVxuICogLSBCb3gtZHJhd2luZyBBU0NJSSBhcnQgKOKUjOKUkOKUlOKUmOKUguKUgCkgYXV0by13cmFwcGVkIGFzIGNvZGVcbiAqIC0gVGFibGVzIOKGkiBmbGF0dGVuZWQgaW50byBwYXJhZ3JhcGhzIHdpdGggYm9sZCBrZXlzXG4gKiAtIEhvcml6b250YWwgcnVsZXMgKC0tLSwgKioqLCBfX18pIOKGkiBzZXBhcmF0b3JcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93bkFydGljbGVQYXJzZXJTZXJ2aWNlIHtcbiAgcGFyc2UobWFya2Rvd246IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxBcnRpY2xlTWV0YWRhdGE+KTogQXJ0aWNsZU1ldGFkYXRhIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubm9ybWFsaXplKG1hcmtkb3duKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgZWxlbWVudHM6IEFydGljbGVFbGVtZW50W10gPSBbXTtcblxuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxpbmVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldO1xuXG4gICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEZlbmNlZCBjb2RlIGJsb2NrXG4gICAgICBjb25zdCBmZW5jZSA9IGxpbmUubWF0Y2goRkVOQ0VfUkUpO1xuICAgICAgaWYgKGZlbmNlKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBmZW5jZVsxXSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGJvZHk6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGkrKztcbiAgICAgICAgd2hpbGUgKGkgPCBsaW5lcy5sZW5ndGggJiYgIUZFTkNFX1JFLnRlc3QobGluZXNbaV0pKSB7XG4gICAgICAgICAgYm9keS5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgaSsrOyAvLyBza2lwIGNsb3NpbmcgZmVuY2VcbiAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgIHByb3BzOiB7IGNvZGU6IGJvZHkuam9pbignXFxuJyksIGxhbmd1YWdlOiBsYW5nLCB0aGVtZTogJ2RhcmsnIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQVNDSUkgYm94LWRyYXdpbmcgYXJ0IOKGkiB0cmVhdCBhcyBjb2RlIGJsb2NrXG4gICAgICBpZiAoQk9YX0RSQVdJTkcudGVzdChsaW5lKSkge1xuICAgICAgICBjb25zdCBib2R5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICB3aGlsZSAoaSA8IGxpbmVzLmxlbmd0aCAmJiAobGluZXNbaV0udHJpbSgpID09PSAnJyB8fCBCT1hfRFJBV0lORy50ZXN0KGxpbmVzW2ldKSkpIHtcbiAgICAgICAgICBib2R5LnB1c2gobGluZXNbaV0pO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmltIHRyYWlsaW5nIGJsYW5rIGxpbmVzIGZyb20gdGhlIGJsb2NrXG4gICAgICAgIHdoaWxlIChib2R5Lmxlbmd0aCAmJiBib2R5W2JvZHkubGVuZ3RoIC0gMV0udHJpbSgpID09PSAnJykgYm9keS5wb3AoKTtcbiAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgIHByb3BzOiB7IGNvZGU6IGJvZHkuam9pbignXFxuJyksIGxhbmd1YWdlOiAndGV4dCcsIHRoZW1lOiAnZGFyaycgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXBhcmF0b3JcbiAgICAgIGlmIChTRVBBUkFUT1JfUkUudGVzdChsaW5lKSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKHsgdHlwZTogJ3NlcGFyYXRvcicsIHByb3BzOiB7IHN0eWxlOiAnbGluZScgfSB9KTtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGVhZGluZ1xuICAgICAgY29uc3QgaGVhZGluZyA9IGxpbmUubWF0Y2goSEVBRElOR19SRSk7XG4gICAgICBpZiAoaGVhZGluZykge1xuICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMubWFrZUhlYWRpbmcoaGVhZGluZ1sxXS5sZW5ndGgsIGhlYWRpbmdbMl0udHJpbSgpKSk7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGxvdXQgLyBibG9ja3F1b3RlIChjb25zdW1lIGNvbnRpZ3VvdXMgYD5gIGxpbmVzKVxuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnPicpKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICB3aGlsZSAoaSA8IGxpbmVzLmxlbmd0aCAmJiBsaW5lc1tpXS5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgICAgICBibG9jay5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHMucHVzaCh0aGlzLm1ha2VRdW90ZU9yQ2FsbG91dChibG9jaykpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFibGUgKGNvbnN1bWUgY29udGlndW91cyBgfGAgbGluZXMpXG4gICAgICBpZiAoVEFCTEVfUk9XX1JFLnRlc3QobGluZSkpIHtcbiAgICAgICAgY29uc3Qgcm93czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgd2hpbGUgKGkgPCBsaW5lcy5sZW5ndGggJiYgVEFCTEVfUk9XX1JFLnRlc3QobGluZXNbaV0pKSB7XG4gICAgICAgICAgcm93cy5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHMucHVzaCguLi50aGlzLm1ha2VUYWJsZShyb3dzKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBMaXN0IChjaGVja2xpc3QgLyB1bm9yZGVyZWQgLyBvcmRlcmVkKSDigJQgY29uc3VtZSBjb250aWd1b3VzIGxpbmVzXG4gICAgICBpZiAoQ0hFQ0tMSVNUX1JFLnRlc3QobGluZSkgfHwgVU5PUkRFUkVEX1JFLnRlc3QobGluZSkgfHwgT1JERVJFRF9SRS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGNvbnN0IGxpc3RUeXBlOiAnY2hlY2tsaXN0JyB8ICd1bm9yZGVyZWQnIHwgJ29yZGVyZWQnID0gQ0hFQ0tMSVNUX1JFLnRlc3QobGluZSlcbiAgICAgICAgICA/ICdjaGVja2xpc3QnXG4gICAgICAgICAgOiBPUkRFUkVEX1JFLnRlc3QobGluZSlcbiAgICAgICAgICAgID8gJ29yZGVyZWQnXG4gICAgICAgICAgICA6ICd1bm9yZGVyZWQnO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnRpY2xlTGlzdEVsZW1lbnRbJ3Byb3BzJ11bJ2l0ZW1zJ10gPSBbXTtcbiAgICAgICAgd2hpbGUgKGkgPCBsaW5lcy5sZW5ndGggJiYgbGluZXNbaV0udHJpbSgpICE9PSAnJykge1xuICAgICAgICAgIGNvbnN0IGN1ciA9IGxpbmVzW2ldO1xuICAgICAgICAgIGNvbnN0IGNoZWNrID0gY3VyLm1hdGNoKENIRUNLTElTVF9SRSk7XG4gICAgICAgICAgY29uc3QgdW5vcmQgPSBjdXIubWF0Y2goVU5PUkRFUkVEX1JFKTtcbiAgICAgICAgICBjb25zdCBvcmQgPSBjdXIubWF0Y2goT1JERVJFRF9SRSk7XG4gICAgICAgICAgaWYgKGNoZWNrKSBpdGVtcy5wdXNoKHsgdGV4dDogY2hlY2tbMl0udHJpbSgpIH0pO1xuICAgICAgICAgIGVsc2UgaWYgKG9yZCAmJiBsaXN0VHlwZSA9PT0gJ29yZGVyZWQnKSBpdGVtcy5wdXNoKHsgdGV4dDogb3JkWzFdLnRyaW0oKSB9KTtcbiAgICAgICAgICBlbHNlIGlmICh1bm9yZCAmJiBsaXN0VHlwZSAhPT0gJ29yZGVyZWQnKSBpdGVtcy5wdXNoKHsgdGV4dDogdW5vcmRbMV0udHJpbSgpIH0pO1xuICAgICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2goeyB0eXBlOiAnbGlzdCcsIHByb3BzOiB7IGl0ZW1zLCBsaXN0VHlwZSB9IH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyYWdyYXBoIOKAlCBjb25zdW1lIGNvbnRpZ3VvdXMgbm9uLWVtcHR5IGxpbmVzIHRoYXQgYXJlbid0IGEgc3BlY2lhbCBibG9ja1xuICAgICAgY29uc3QgcGFyYWdyYXBoOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgd2hpbGUgKGkgPCBsaW5lcy5sZW5ndGggJiYgbGluZXNbaV0udHJpbSgpICE9PSAnJyAmJiAhdGhpcy5zdGFydHNOZXdCbG9jayhsaW5lc1tpXSkpIHtcbiAgICAgICAgcGFyYWdyYXBoLnB1c2gobGluZXNbaV0pO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0ID0gcGFyYWdyYXBoLmpvaW4oJyAnKS50cmltKCk7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgY29udGVudDogdGV4dCxcbiAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvY2Vzc0xpbmtzOiB0cnVlLFxuICAgICAgICAgICAgYWxsb3dQYXJ0aWFsQm9sZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudHMsXG4gICAgICBtYXhXaWR0aDogJzkwMHB4JyxcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgdGhlbWU6ICdhdXRvJyxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUobWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1kLnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJykucmVwbGFjZSgvXFxyL2csICdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRzTmV3QmxvY2sobGluZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIEhFQURJTkdfUkUudGVzdChsaW5lKSB8fFxuICAgICAgRkVOQ0VfUkUudGVzdChsaW5lKSB8fFxuICAgICAgU0VQQVJBVE9SX1JFLnRlc3QobGluZSkgfHxcbiAgICAgIFRBQkxFX1JPV19SRS50ZXN0KGxpbmUpIHx8XG4gICAgICBVTk9SREVSRURfUkUudGVzdChsaW5lKSB8fFxuICAgICAgT1JERVJFRF9SRS50ZXN0KGxpbmUpIHx8XG4gICAgICBDSEVDS0xJU1RfUkUudGVzdChsaW5lKSB8fFxuICAgICAgbGluZS5zdGFydHNXaXRoKCc+JykgfHxcbiAgICAgIEJPWF9EUkFXSU5HLnRlc3QobGluZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSGVhZGluZyhcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIGNvbnRlbnQ6IHN0cmluZ1xuICApOiBBcnRpY2xlVGl0bGVFbGVtZW50IHwgQXJ0aWNsZVN1YnRpdGxlRWxlbWVudCB7XG4gICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAndGl0bGUnLFxuICAgICAgICBwcm9wczogeyBjb250ZW50LCBzaXplOiAneGxhcmdlJywgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZTogJ2xhcmdlJyB8ICdtZWRpdW0nIHwgJ3NtYWxsJyA9XG4gICAgICBsZXZlbCA9PT0gMiA/ICdsYXJnZScgOiBsZXZlbCA9PT0gMyA/ICdtZWRpdW0nIDogJ3NtYWxsJztcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3N1YnRpdGxlJyxcbiAgICAgIHByb3BzOiB7IGNvbnRlbnQsIHNpemUsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IHRydWUgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUXVvdGVPckNhbGxvdXQoYmxvY2s6IHN0cmluZ1tdKTogQXJ0aWNsZUVsZW1lbnQge1xuICAgIGNvbnN0IGZpcnN0ID0gYmxvY2tbMF07XG4gICAgY29uc3QgY2FsbG91dCA9IGZpcnN0Lm1hdGNoKENBTExPVVRfUkUpO1xuICAgIGNvbnN0IGxpbmVzID0gYmxvY2subWFwKGwgPT4gbC5yZXBsYWNlKC9ePlxccz8vLCAnJykpO1xuXG4gICAgaWYgKGNhbGxvdXQpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBjYWxsb3V0WzFdLnRvVXBwZXJDYXNlKCkgYXMgQ2FsbG91dFR5cGU7XG4gICAgICBjb25zdCBmaXJzdExpbmVSZXN0ID0gY2FsbG91dFsyXSB8fCAnJztcbiAgICAgIGNvbnN0IHJlc3QgPSBsaW5lcy5zbGljZSgxKS5qb2luKCcgJykudHJpbSgpO1xuICAgICAgY29uc3QgdGV4dCA9IFtmaXJzdExpbmVSZXN0LCByZXN0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLnRyaW0oKTtcbiAgICAgIHJldHVybiB0aGlzLm1ha2VOb3RlKHR5cGUsIHRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHQgPSBsaW5lcy5qb2luKCcgJykudHJpbSgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncXVvdGUnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29udGVudDogdGV4dCxcbiAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgIHNob3dRdW90ZU1hcms6IHRydWUsXG4gICAgICAgIGFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlTm90ZShraW5kOiBDYWxsb3V0VHlwZSwgdGV4dDogc3RyaW5nKTogQXJ0aWNsZU5vdGVFbGVtZW50IHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxcbiAgICAgIENhbGxvdXRUeXBlLFxuICAgICAgeyBjb2xvcjogQXJ0aWNsZU5vdGVFbGVtZW50Wydwcm9wcyddWydjb2xvciddOyBwcmVmaXg6IHN0cmluZyB9XG4gICAgPiA9IHtcbiAgICAgIE5PVEU6IHsgY29sb3I6ICdwcmltYXJ5JywgcHJlZml4OiAnTm90YScgfSxcbiAgICAgIFRJUDogeyBjb2xvcjogJ3N1Y2Nlc3MnLCBwcmVmaXg6ICdUaXAnIH0sXG4gICAgICBJTkZPOiB7IGNvbG9yOiAndGVydGlhcnknLCBwcmVmaXg6ICdJbmZvJyB9LFxuICAgICAgSU1QT1JUQU5UOiB7IGNvbG9yOiAnd2FybmluZycsIHByZWZpeDogJ0ltcG9ydGFudGUnIH0sXG4gICAgICBXQVJOSU5HOiB7IGNvbG9yOiAnd2FybmluZycsIHByZWZpeDogJ0F0ZW5jacOzbicgfSxcbiAgICAgIENBVVRJT046IHsgY29sb3I6ICdkYW5nZXInLCBwcmVmaXg6ICdQcmVjYXVjacOzbicgfSxcbiAgICB9O1xuICAgIGNvbnN0IGNmZyA9IG1hcFtraW5kXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ25vdGUnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGV4dCxcbiAgICAgICAgcHJlZml4OiBgJHtjZmcucHJlZml4fTpgLFxuICAgICAgICBjb2xvcjogY2ZnLmNvbG9yLFxuICAgICAgICB0ZXh0Q29sb3I6ICdkYXJrJyxcbiAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgIHJvdW5kZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGFibGVzIGFyZSBmbGF0dGVuZWQgaW50byBhIGhlYWRlciBzdWJ0aXRsZSAoaWYgcHJlc2VudCkgZm9sbG93ZWQgYnkgb25lIHBhcmFncmFwaCBwZXJcbiAgICogZGF0YSByb3cgdXNpbmcgYCoqY29sWzBdOioqIGNvbFsxXSDCtyAqKmNvbFsyXToqKiBjb2xbM10g4oCmYCBmb3JtYXQuIHZhbC1hcnRpY2xlIGhhcyBub1xuICAgKiBuYXRpdmUgdGFibGUgZWxlbWVudCBzbyB0aGlzIHByZXNlcnZlcyB0aGUgaW5mb3JtYXRpb24gd2l0aG91dCBicmVha2luZyB0aGUgbGF5b3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBtYWtlVGFibGUocm93czogc3RyaW5nW10pOiBBcnRpY2xlRWxlbWVudFtdIHtcbiAgICBjb25zdCBwYXJzZWQgPSByb3dzXG4gICAgICAuZmlsdGVyKHIgPT4gIVRBQkxFX0RJVklERVJfUkUudGVzdChyKSlcbiAgICAgIC5tYXAociA9PlxuICAgICAgICByXG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC5yZXBsYWNlKC9eXFx8LywgJycpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcfCQvLCAnJylcbiAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgIC5tYXAoYyA9PiBjLnRyaW0oKSlcbiAgICAgICk7XG4gICAgaWYgKHBhcnNlZC5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGhlYWRlciA9IHBhcnNlZFswXTtcbiAgICBjb25zdCBkYXRhUm93cyA9IHBhcnNlZC5zbGljZSgxKTtcbiAgICBpZiAoZGF0YVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGhlYWRlci5qb2luKCcgwrcgJyksXG4gICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NMaW5rczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93UGFydGlhbEJvbGQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFSb3dzLm1hcChyb3cgPT4ge1xuICAgICAgY29uc3QgcGFpcnMgPSByb3cubWFwKChjZWxsLCBpZHgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyW2lkeF0gPz8gJyc7XG4gICAgICAgIHJldHVybiBrZXkgPyBgKioke2tleX06KiogJHtjZWxsfWAgOiBjZWxsO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBjb250ZW50OiBwYWlycy5qb2luKCcgwrcgJyksXG4gICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICBwcm9jZXNzTGlua3M6IHRydWUsXG4gICAgICAgICAgYWxsb3dQYXJ0aWFsQm9sZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgQXJ0aWNsZUVsZW1lbnQ7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tYXJ0aWNsZS1wYXJzZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbWFya2Rvd24tYXJ0aWNsZS9tYXJrZG93bi1hcnRpY2xlLXBhcnNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBRWpFOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLEtBQUssQ0FBQyxRQUFnQixFQUFFLE1BQWlDO1FBQ3ZELE9BQU8sb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7K0dBSFUsNEJBQTRCO21IQUE1Qiw0QkFBNEIsY0FEZixNQUFNOzs0RkFDbkIsNEJBQTRCO2tCQUR4QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFydGljbGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvb3JnYW5pc21zL2FydGljbGUvdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VNYXJrZG93bkFydGljbGUgfSBmcm9tICcuL21hcmtkb3duLWFydGljbGUtcGFyc2VyJztcblxuLyoqXG4gKiBBbmd1bGFyIHNlcnZpY2Ugd3JhcHBlciBmb3IgdGhlIHB1cmUge0BsaW5rIHBhcnNlTWFya2Rvd25BcnRpY2xlfSBmdW5jdGlvbi5cbiAqIFByb3ZpZGVkIGluIHJvb3Qgc28gaXQgY2FuIGJlIGluamVjdGVkIGFueXdoZXJlLiBUaGUgYWN0dWFsIHBhcnNpbmcgbG9naWMgbGl2ZXMgaW5cbiAqIGBtYXJrZG93bi1hcnRpY2xlLXBhcnNlci50c2AgYW5kIGlzIGFsc28gdXNhYmxlIGZyb20gTm9kZSBzY3JpcHRzIChidWlsZC10aW1lIGdlbmVyYXRpb24pLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duQXJ0aWNsZVBhcnNlclNlcnZpY2Uge1xuICBwYXJzZShtYXJrZG93bjogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPEFydGljbGVNZXRhZGF0YT4pOiBBcnRpY2xlTWV0YWRhdGEge1xuICAgIHJldHVybiBwYXJzZU1hcmtkb3duQXJ0aWNsZShtYXJrZG93biwgY29uZmlnKTtcbiAgfVxufVxuIl19