valtech-components 2.0.729 → 2.0.730

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 (25) hide show
  1. package/esm2022/lib/services/markdown-article/legal-content.service.mjs +65 -14
  2. package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +266 -0
  3. package/esm2022/lib/services/markdown-article/markdown-article-parser.service.mjs +6 -275
  4. package/esm2022/lib/services/preferences/index.mjs +3 -0
  5. package/esm2022/lib/services/preferences/preferences.service.mjs +164 -0
  6. package/esm2022/lib/services/preferences/preferences.types.mjs +7 -0
  7. package/esm2022/lib/version.mjs +2 -2
  8. package/esm2022/public-api.mjs +7 -1
  9. package/fesm2022/valtech-components.mjs +452 -244
  10. package/fesm2022/valtech-components.mjs.map +1 -1
  11. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  12. package/lib/components/atoms/text/text.component.d.ts +1 -1
  13. package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
  14. package/lib/components/organisms/article/article.component.d.ts +3 -3
  15. package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +1 -1
  16. package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
  17. package/lib/services/markdown-article/legal-content.service.d.ts +49 -7
  18. package/lib/services/markdown-article/markdown-article-parser.d.ts +16 -0
  19. package/lib/services/markdown-article/markdown-article-parser.service.d.ts +3 -22
  20. package/lib/services/preferences/index.d.ts +2 -0
  21. package/lib/services/preferences/preferences.service.d.ts +51 -0
  22. package/lib/services/preferences/preferences.types.d.ts +35 -0
  23. package/lib/version.d.ts +1 -1
  24. package/package.json +1 -1
  25. package/public-api.d.ts +2 -0
@@ -1,45 +1,79 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
- import { Injectable, inject } from '@angular/core';
3
- import { catchError, map, of, shareReplay, switchMap, throwError } from 'rxjs';
2
+ import { InjectionToken, Injectable, inject } from '@angular/core';
3
+ import { catchError, from, map, of, shareReplay, switchMap, throwError } from 'rxjs';
4
4
  import { MarkdownArticleParserService } from './markdown-article-parser.service';
5
5
  import * as i0 from "@angular/core";
6
+ export const LEGAL_CONTENT_CONFIG = new InjectionToken('LEGAL_CONTENT_CONFIG');
6
7
  /**
7
- * Loads Markdown legal documents from `/assets/legal/{locale}/{slug}.md` and parses them
8
- * into ArticleMetadata ready for `<val-article>`. Caches parsed results by `locale:slug`
9
- * so multiple views consuming the same doc share one HTTP request.
8
+ * Loads legal articles via one of two modes:
9
+ *
10
+ * 1. **Build-time** (preferred): when the app provides `LEGAL_CONTENT_CONFIG.factories`
11
+ * via `provideLegalContent()`, the service dynamically imports the matching
12
+ * locale module and returns the pre-parsed `ArticleMetadata` synchronously
13
+ * (wrapped in an Observable). Each locale is code-split.
14
+ *
15
+ * 2. **Runtime**: when no factory matches, falls back to fetching
16
+ * `/assets/legal/{locale}/{slug}.md` and parsing on the fly.
17
+ *
18
+ * Both modes cache by `locale:slug` so concurrent loads share one promise/HTTP request.
10
19
  */
11
20
  export class LegalContentService {
12
21
  constructor() {
13
22
  this.http = inject(HttpClient);
14
23
  this.parser = inject(MarkdownArticleParserService);
24
+ this.config = inject(LEGAL_CONTENT_CONFIG, { optional: true }) ?? {};
15
25
  this.DEFAULT_BASE = '/assets/legal';
16
26
  this.cache = new Map();
27
+ this.factoryCache = new Map();
17
28
  }
18
29
  load(slug, options = {}) {
19
30
  const locale = (options.locale ?? 'es').toLowerCase();
20
- const base = options.basePath ?? this.DEFAULT_BASE;
21
- const fallback = options.fallbackLocale === undefined ? 'es' : options.fallbackLocale;
22
- const key = `${base}|${locale}|${slug}`;
31
+ const fallback = options.fallbackLocale === undefined
32
+ ? (this.config.fallbackLocale ?? 'es')
33
+ : options.fallbackLocale;
34
+ const key = `${locale}|${slug}`;
23
35
  const cached = this.cache.get(key);
24
36
  if (cached)
25
37
  return cached;
26
- const primary = this.fetchAndParse(`${base}/${locale}/${slug}.md`);
38
+ const primary = this.loadOne(slug, locale, options.basePath);
27
39
  const stream = fallback && fallback !== locale
28
- ? primary.pipe(catchError(() => this.fetchAndParse(`${base}/${fallback}/${slug}.md`)))
40
+ ? primary.pipe(catchError(() => this.loadOne(slug, fallback, options.basePath)))
29
41
  : primary;
30
42
  const shared = stream.pipe(shareReplay({ bufferSize: 1, refCount: false }));
31
43
  this.cache.set(key, shared);
32
44
  return shared;
33
45
  }
34
- /** Returns the raw Markdown string without parsing. Useful for debugging. */
46
+ /** Raw Markdown only available in runtime mode (HTTP). */
35
47
  raw(slug, options = {}) {
36
48
  const locale = (options.locale ?? 'es').toLowerCase();
37
- const base = options.basePath ?? this.DEFAULT_BASE;
49
+ const base = options.basePath ?? this.config.basePath ?? this.DEFAULT_BASE;
38
50
  return this.http.get(`${base}/${locale}/${slug}.md`, { responseType: 'text' });
39
51
  }
40
- /** Clears the in-memory cache. Call when the user changes locale at runtime. */
52
+ /** Clears in-memory caches. Call on runtime locale change. */
41
53
  invalidate() {
42
54
  this.cache.clear();
55
+ this.factoryCache.clear();
56
+ }
57
+ loadOne(slug, locale, basePathOverride) {
58
+ const factory = this.config.factories?.[locale];
59
+ if (factory) {
60
+ return from(this.runFactory(locale, factory)).pipe(switchMap(content => {
61
+ const article = content[slug];
62
+ return article
63
+ ? of(article)
64
+ : throwError(() => new Error(`Legal doc not found: ${locale}/${slug}`));
65
+ }));
66
+ }
67
+ const base = basePathOverride ?? this.config.basePath ?? this.DEFAULT_BASE;
68
+ return this.fetchAndParse(`${base}/${locale}/${slug}.md`);
69
+ }
70
+ runFactory(locale, factory) {
71
+ const cached = this.factoryCache.get(locale);
72
+ if (cached)
73
+ return cached;
74
+ const promise = factory();
75
+ this.factoryCache.set(locale, promise);
76
+ return promise;
43
77
  }
44
78
  fetchAndParse(url) {
45
79
  return this.http.get(url, { responseType: 'text' }).pipe(switchMap(md => md && md.trim().length > 0
@@ -53,4 +87,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
53
87
  type: Injectable,
54
88
  args: [{ providedIn: 'root' }]
55
89
  }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWwtY29udGVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9tYXJrZG93bi1hcnRpY2xlL2xlZ2FsLWNvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQWFqRjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUVtQixTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLFdBQU0sR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUU5QyxpQkFBWSxHQUFHLGVBQWUsQ0FBQztRQUMvQixVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7S0E0Q3pFO0lBMUNDLElBQUksQ0FBQyxJQUFlLEVBQUUsVUFBNEIsRUFBRTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFFdEYsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxNQUFNLEdBQ1YsUUFBUSxJQUFJLFFBQVEsS0FBSyxNQUFNO1lBQzdCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEYsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUVkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLEdBQUcsQ0FBQyxJQUFlLEVBQUUsVUFBNEIsRUFBRTtRQUNqRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVc7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RELFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUNiLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQzNELEVBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQ3RCLENBQUM7SUFDSixDQUFDOytHQWhEVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUROLE1BQU07OzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgbWFwLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXJ0aWNsZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9vcmdhbmlzbXMvYXJ0aWNsZS90eXBlcyc7XG5pbXBvcnQgeyBNYXJrZG93bkFydGljbGVQYXJzZXJTZXJ2aWNlIH0gZnJvbSAnLi9tYXJrZG93bi1hcnRpY2xlLXBhcnNlci5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgTGVnYWxTbHVnID0gJ3Rlcm1zJyB8ICdwcml2YWN5JyB8ICdjb29raWVzJyB8ICdkYXRhLXVzYWdlJyB8ICdsZWdhbC1ub3RpY2UnIHwgc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FsTG9hZE9wdGlvbnMge1xuICAvKiogVHdvLWxldHRlciBsb2NhbGUgY29kZSAoZXMsIGVuLCBwdCkuIEZhbGxzIGJhY2sgdG8gYGVzYCBvbiA0MDQuICovXG4gIGxvY2FsZT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIGJhc2UgcGF0aCAoZGVmYXVsdCBgL2Fzc2V0cy9sZWdhbGApLiAqL1xuICBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqIEZhbGxiYWNrIGxvY2FsZSB0cmllZCB3aGVuIHRoZSByZXF1ZXN0ZWQgb25lIGlzIG1pc3NpbmcuIFNldCBudWxsIHRvIGRpc2FibGUuICovXG4gIGZhbGxiYWNrTG9jYWxlPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBMb2FkcyBNYXJrZG93biBsZWdhbCBkb2N1bWVudHMgZnJvbSBgL2Fzc2V0cy9sZWdhbC97bG9jYWxlfS97c2x1Z30ubWRgIGFuZCBwYXJzZXMgdGhlbVxuICogaW50byBBcnRpY2xlTWV0YWRhdGEgcmVhZHkgZm9yIGA8dmFsLWFydGljbGU+YC4gQ2FjaGVzIHBhcnNlZCByZXN1bHRzIGJ5IGBsb2NhbGU6c2x1Z2BcbiAqIHNvIG11bHRpcGxlIHZpZXdzIGNvbnN1bWluZyB0aGUgc2FtZSBkb2Mgc2hhcmUgb25lIEhUVFAgcmVxdWVzdC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMZWdhbENvbnRlbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnNlciA9IGluamVjdChNYXJrZG93bkFydGljbGVQYXJzZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfQkFTRSA9ICcvYXNzZXRzL2xlZ2FsJztcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPEFydGljbGVNZXRhZGF0YT4+KCk7XG5cbiAgbG9hZChzbHVnOiBMZWdhbFNsdWcsIG9wdGlvbnM6IExlZ2FsTG9hZE9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8QXJ0aWNsZU1ldGFkYXRhPiB7XG4gICAgY29uc3QgbG9jYWxlID0gKG9wdGlvbnMubG9jYWxlID8/ICdlcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYmFzZSA9IG9wdGlvbnMuYmFzZVBhdGggPz8gdGhpcy5ERUZBVUxUX0JBU0U7XG4gICAgY29uc3QgZmFsbGJhY2sgPSBvcHRpb25zLmZhbGxiYWNrTG9jYWxlID09PSB1bmRlZmluZWQgPyAnZXMnIDogb3B0aW9ucy5mYWxsYmFja0xvY2FsZTtcblxuICAgIGNvbnN0IGtleSA9IGAke2Jhc2V9fCR7bG9jYWxlfXwke3NsdWd9YDtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBwcmltYXJ5ID0gdGhpcy5mZXRjaEFuZFBhcnNlKGAke2Jhc2V9LyR7bG9jYWxlfS8ke3NsdWd9Lm1kYCk7XG4gICAgY29uc3Qgc3RyZWFtID1cbiAgICAgIGZhbGxiYWNrICYmIGZhbGxiYWNrICE9PSBsb2NhbGVcbiAgICAgICAgPyBwcmltYXJ5LnBpcGUoY2F0Y2hFcnJvcigoKSA9PiB0aGlzLmZldGNoQW5kUGFyc2UoYCR7YmFzZX0vJHtmYWxsYmFja30vJHtzbHVnfS5tZGApKSlcbiAgICAgICAgOiBwcmltYXJ5O1xuXG4gICAgY29uc3Qgc2hhcmVkID0gc3RyZWFtLnBpcGUoc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSkpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgc2hhcmVkKTtcbiAgICByZXR1cm4gc2hhcmVkO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHJhdyBNYXJrZG93biBzdHJpbmcgd2l0aG91dCBwYXJzaW5nLiBVc2VmdWwgZm9yIGRlYnVnZ2luZy4gKi9cbiAgcmF3KHNsdWc6IExlZ2FsU2x1Zywgb3B0aW9uczogTGVnYWxMb2FkT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsb2NhbGUgPSAob3B0aW9ucy5sb2NhbGUgPz8gJ2VzJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlUGF0aCA/PyB0aGlzLkRFRkFVTFRfQkFTRTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHtiYXNlfS8ke2xvY2FsZX0vJHtzbHVnfS5tZGAsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSk7XG4gIH1cblxuICAvKiogQ2xlYXJzIHRoZSBpbi1tZW1vcnkgY2FjaGUuIENhbGwgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIGxvY2FsZSBhdCBydW50aW1lLiAqL1xuICBpbnZhbGlkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hBbmRQYXJzZSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8QXJ0aWNsZU1ldGFkYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAobWQgPT5cbiAgICAgICAgbWQgJiYgbWQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IG9mKHRoaXMucGFyc2VyLnBhcnNlKG1kKSlcbiAgICAgICAgICA6IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBFbXB0eSBsZWdhbCBkb2M6ICR7dXJsfWApKVxuICAgICAgKSxcbiAgICAgIG1hcChwYXJzZWQgPT4gcGFyc2VkKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
90
+ /**
91
+ * Wires pre-generated legal content into `LegalContentService`. Call from `main.ts`
92
+ * (or any `providers: []` array). The factories use dynamic `import()` so each
93
+ * locale is code-split — only the active locale's bundle is loaded.
94
+ *
95
+ * @example
96
+ * provideLegalContent({
97
+ * factories: {
98
+ * es: () => import('./app/generated/legal-content.es').then((m) => m.LEGAL_CONTENT_ES),
99
+ * en: () => import('./app/generated/legal-content.en').then((m) => m.LEGAL_CONTENT_EN),
100
+ * pt: () => import('./app/generated/legal-content.pt').then((m) => m.LEGAL_CONTENT_PT),
101
+ * },
102
+ * })
103
+ */
104
+ export function provideLegalContent(config) {
105
+ return { provide: LEGAL_CONTENT_CONFIG, useValue: config };
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWwtY29udGVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9tYXJrZG93bi1hcnRpY2xlL2xlZ2FsLWNvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBbUJqRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsc0JBQXNCLENBQUMsQ0FBQztBQVduRzs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRW1CLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzlDLFdBQU0sR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFaEUsaUJBQVksR0FBRyxlQUFlLENBQUM7UUFDL0IsVUFBSyxHQUFHLElBQUksR0FBRyxFQUF1QyxDQUFDO1FBQ3ZELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW9ELENBQUM7S0E4RTdGO0lBNUVDLElBQUksQ0FBQyxJQUFlLEVBQUUsVUFBNEIsRUFBRTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElB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QUFNLEVBQUU7O0FBd0ZsQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQTBCO0lBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIEluamVjdGFibGUsIFByb3ZpZGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZyb20sIG1hcCwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFydGljbGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvb3JnYW5pc21zL2FydGljbGUvdHlwZXMnO1xuaW1wb3J0IHsgTWFya2Rvd25BcnRpY2xlUGFyc2VyU2VydmljZSB9IGZyb20gJy4vbWFya2Rvd24tYXJ0aWNsZS1wYXJzZXIuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIExlZ2FsU2x1ZyA9ICd0ZXJtcycgfCAncHJpdmFjeScgfCAnY29va2llcycgfCAnZGF0YS11c2FnZScgfCAnbGVnYWwtbm90aWNlJyB8IHN0cmluZztcblxuLyoqXG4gKiBGYWN0b3J5IHRoYXQgcmV0dXJucyBhIFJlY29yZDxzbHVnLCBBcnRpY2xlTWV0YWRhdGE+IGZvciBhIGdpdmVuIGxvY2FsZS5cbiAqIFVzZSBhIGR5bmFtaWMgYGltcG9ydCgpYCBzbyBlYWNoIGxvY2FsZSBtb2R1bGUgaXMgY29kZS1zcGxpdCBieSB0aGUgYnVuZGxlci5cbiAqL1xuZXhwb3J0IHR5cGUgTGVnYWxDb250ZW50RmFjdG9yeSA9ICgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgQXJ0aWNsZU1ldGFkYXRhPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWxDb250ZW50Q29uZmlnIHtcbiAgLyoqIFByZS1nZW5lcmF0ZWQgY29udGVudCBmYWN0b3JpZXMga2V5ZWQgYnkgbG9jYWxlIChlLmcuIGB7IGVzOiAoKSA9PiBpbXBvcnQoJy4vZ2VuZXJhdGVkL2xlZ2FsLWNvbnRlbnQuZXMnKSAuLi4gfWApLiAqL1xuICBmYWN0b3JpZXM/OiBSZWNvcmQ8c3RyaW5nLCBMZWdhbENvbnRlbnRGYWN0b3J5PjtcbiAgLyoqIE92ZXJyaWRlIGRlZmF1bHQgYC9hc3NldHMvbGVnYWxgIGJhc2UgcGF0aCB1c2VkIHdoZW4gbm8gZmFjdG9yeSBtYXRjaGVzLiAqL1xuICBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqIEZhbGxiYWNrIGxvY2FsZSAoZGVmYXVsdCBgZXNgKS4gU2V0IG51bGwgdG8gZGlzYWJsZS4gKi9cbiAgZmFsbGJhY2tMb2NhbGU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgTEVHQUxfQ09OVEVOVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TGVnYWxDb250ZW50Q29uZmlnPignTEVHQUxfQ09OVEVOVF9DT05GSUcnKTtcblxuZXhwb3J0IGludGVyZmFjZSBMZWdhbExvYWRPcHRpb25zIHtcbiAgLyoqIFR3by1sZXR0ZXIgbG9jYWxlIGNvZGUgKGVzLCBlbiwgcHQpLiAqL1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIC8qKiBPdmVycmlkZSBiYXNlIHBhdGggZm9yIHJ1bnRpbWUgbW9kZSAoZGVmYXVsdCBgL2Fzc2V0cy9sZWdhbGApLiAqL1xuICBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqIEZhbGxiYWNrIGxvY2FsZSB0cmllZCB3aGVuIHRoZSByZXF1ZXN0ZWQgb25lIGlzIG1pc3NpbmcuIFNldCBudWxsIHRvIGRpc2FibGUuICovXG4gIGZhbGxiYWNrTG9jYWxlPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBMb2FkcyBsZWdhbCBhcnRpY2xlcyB2aWEgb25lIG9mIHR3byBtb2RlczpcbiAqXG4gKiAxLiAqKkJ1aWxkLXRpbWUqKiAocHJlZmVycmVkKTogd2hlbiB0aGUgYXBwIHByb3ZpZGVzIGBMRUdBTF9DT05URU5UX0NPTkZJRy5mYWN0b3JpZXNgXG4gKiAgICB2aWEgYHByb3ZpZGVMZWdhbENvbnRlbnQoKWAsIHRoZSBzZXJ2aWNlIGR5bmFtaWNhbGx5IGltcG9ydHMgdGhlIG1hdGNoaW5nXG4gKiAgICBsb2NhbGUgbW9kdWxlIGFuZCByZXR1cm5zIHRoZSBwcmUtcGFyc2VkIGBBcnRpY2xlTWV0YWRhdGFgIHN5bmNocm9ub3VzbHlcbiAqICAgICh3cmFwcGVkIGluIGFuIE9ic2VydmFibGUpLiBFYWNoIGxvY2FsZSBpcyBjb2RlLXNwbGl0LlxuICpcbiAqIDIuICoqUnVudGltZSoqOiB3aGVuIG5vIGZhY3RvcnkgbWF0Y2hlcywgZmFsbHMgYmFjayB0byBmZXRjaGluZ1xuICogICAgYC9hc3NldHMvbGVnYWwve2xvY2FsZX0ve3NsdWd9Lm1kYCBhbmQgcGFyc2luZyBvbiB0aGUgZmx5LlxuICpcbiAqIEJvdGggbW9kZXMgY2FjaGUgYnkgYGxvY2FsZTpzbHVnYCBzbyBjb25jdXJyZW50IGxvYWRzIHNoYXJlIG9uZSBwcm9taXNlL0hUVFAgcmVxdWVzdC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMZWdhbENvbnRlbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnNlciA9IGluamVjdChNYXJrZG93bkFydGljbGVQYXJzZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoTEVHQUxfQ09OVEVOVF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8ge307XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0JBU0UgPSAnL2Fzc2V0cy9sZWdhbCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxBcnRpY2xlTWV0YWRhdGE+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhY3RvcnlDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEFydGljbGVNZXRhZGF0YT4+PigpO1xuXG4gIGxvYWQoc2x1ZzogTGVnYWxTbHVnLCBvcHRpb25zOiBMZWdhbExvYWRPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPEFydGljbGVNZXRhZGF0YT4ge1xuICAgIGNvbnN0IGxvY2FsZSA9IChvcHRpb25zLmxvY2FsZSA/PyAnZXMnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZhbGxiYWNrID1cbiAgICAgIG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUgPT09IHVuZGVmaW5lZFxuICAgICAgICA/ICh0aGlzLmNvbmZpZy5mYWxsYmFja0xvY2FsZSA/PyAnZXMnKVxuICAgICAgICA6IG9wdGlvbnMuZmFsbGJhY2tMb2NhbGU7XG5cbiAgICBjb25zdCBrZXkgPSBgJHtsb2NhbGV9fCR7c2x1Z31gO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IHByaW1hcnkgPSB0aGlzLmxvYWRPbmUoc2x1ZywgbG9jYWxlLCBvcHRpb25zLmJhc2VQYXRoKTtcbiAgICBjb25zdCBzdHJlYW0gPVxuICAgICAgZmFsbGJhY2sgJiYgZmFsbGJhY2sgIT09IGxvY2FsZVxuICAgICAgICA/IHByaW1hcnkucGlwZShjYXRjaEVycm9yKCgpID0+IHRoaXMubG9hZE9uZShzbHVnLCBmYWxsYmFjaywgb3B0aW9ucy5iYXNlUGF0aCkpKVxuICAgICAgICA6IHByaW1hcnk7XG5cbiAgICBjb25zdCBzaGFyZWQgPSBzdHJlYW0ucGlwZShzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiBmYWxzZSB9KSk7XG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBzaGFyZWQpO1xuICAgIHJldHVybiBzaGFyZWQ7XG4gIH1cblxuICAvKiogUmF3IE1hcmtkb3duIOKAlCBvbmx5IGF2YWlsYWJsZSBpbiBydW50aW1lIG1vZGUgKEhUVFApLiAqL1xuICByYXcoc2x1ZzogTGVnYWxTbHVnLCBvcHRpb25zOiBMZWdhbExvYWRPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvY2FsZSA9IChvcHRpb25zLmxvY2FsZSA/PyAnZXMnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGJhc2UgPSBvcHRpb25zLmJhc2VQYXRoID8/IHRoaXMuY29uZmlnLmJhc2VQYXRoID8/IHRoaXMuREVGQVVMVF9CQVNFO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke2Jhc2V9LyR7bG9jYWxlfS8ke3NsdWd9Lm1kYCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KTtcbiAgfVxuXG4gIC8qKiBDbGVhcnMgaW4tbWVtb3J5IGNhY2hlcy4gQ2FsbCBvbiBydW50aW1lIGxvY2FsZSBjaGFuZ2UuICovXG4gIGludmFsaWRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuZmFjdG9yeUNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRPbmUoXG4gICAgc2x1Zzogc3RyaW5nLFxuICAgIGxvY2FsZTogc3RyaW5nLFxuICAgIGJhc2VQYXRoT3ZlcnJpZGU/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxBcnRpY2xlTWV0YWRhdGE+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jb25maWcuZmFjdG9yaWVzPy5bbG9jYWxlXTtcbiAgICBpZiAoZmFjdG9yeSkge1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5ydW5GYWN0b3J5KGxvY2FsZSwgZmFjdG9yeSkpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChjb250ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBhcnRpY2xlID0gY29udGVudFtzbHVnXTtcbiAgICAgICAgICByZXR1cm4gYXJ0aWNsZVxuICAgICAgICAgICAgPyBvZihhcnRpY2xlKVxuICAgICAgICAgICAgOiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgTGVnYWwgZG9jIG5vdCBmb3VuZDogJHtsb2NhbGV9LyR7c2x1Z31gKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBiYXNlID0gYmFzZVBhdGhPdmVycmlkZSA/PyB0aGlzLmNvbmZpZy5iYXNlUGF0aCA/PyB0aGlzLkRFRkFVTFRfQkFTRTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEFuZFBhcnNlKGAke2Jhc2V9LyR7bG9jYWxlfS8ke3NsdWd9Lm1kYCk7XG4gIH1cblxuICBwcml2YXRlIHJ1bkZhY3RvcnkoXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgZmFjdG9yeTogTGVnYWxDb250ZW50RmFjdG9yeVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEFydGljbGVNZXRhZGF0YT4+IHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmZhY3RvcnlDYWNoZS5nZXQobG9jYWxlKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuICAgIGNvbnN0IHByb21pc2UgPSBmYWN0b3J5KCk7XG4gICAgdGhpcy5mYWN0b3J5Q2FjaGUuc2V0KGxvY2FsZSwgcHJvbWlzZSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIGZldGNoQW5kUGFyc2UodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFydGljbGVNZXRhZGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKG1kID0+XG4gICAgICAgIG1kICYmIG1kLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgICAgPyBvZih0aGlzLnBhcnNlci5wYXJzZShtZCkpXG4gICAgICAgICAgOiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgRW1wdHkgbGVnYWwgZG9jOiAke3VybH1gKSlcbiAgICAgICksXG4gICAgICBtYXAocGFyc2VkID0+IHBhcnNlZClcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogV2lyZXMgcHJlLWdlbmVyYXRlZCBsZWdhbCBjb250ZW50IGludG8gYExlZ2FsQ29udGVudFNlcnZpY2VgLiBDYWxsIGZyb20gYG1haW4udHNgXG4gKiAob3IgYW55IGBwcm92aWRlcnM6IFtdYCBhcnJheSkuIFRoZSBmYWN0b3JpZXMgdXNlIGR5bmFtaWMgYGltcG9ydCgpYCBzbyBlYWNoXG4gKiBsb2NhbGUgaXMgY29kZS1zcGxpdCDigJQgb25seSB0aGUgYWN0aXZlIGxvY2FsZSdzIGJ1bmRsZSBpcyBsb2FkZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3ZpZGVMZWdhbENvbnRlbnQoe1xuICogICBmYWN0b3JpZXM6IHtcbiAqICAgICBlczogKCkgPT4gaW1wb3J0KCcuL2FwcC9nZW5lcmF0ZWQvbGVnYWwtY29udGVudC5lcycpLnRoZW4oKG0pID0+IG0uTEVHQUxfQ09OVEVOVF9FUyksXG4gKiAgICAgZW46ICgpID0+IGltcG9ydCgnLi9hcHAvZ2VuZXJhdGVkL2xlZ2FsLWNvbnRlbnQuZW4nKS50aGVuKChtKSA9PiBtLkxFR0FMX0NPTlRFTlRfRU4pLFxuICogICAgIHB0OiAoKSA9PiBpbXBvcnQoJy4vYXBwL2dlbmVyYXRlZC9sZWdhbC1jb250ZW50LnB0JykudGhlbigobSkgPT4gbS5MRUdBTF9DT05URU5UX1BUKSxcbiAqICAgfSxcbiAqIH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTGVnYWxDb250ZW50KGNvbmZpZzogTGVnYWxDb250ZW50Q29uZmlnKTogUHJvdmlkZXIge1xuICByZXR1cm4geyBwcm92aWRlOiBMRUdBTF9DT05URU5UX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9O1xufVxuIl19
@@ -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