@analogjs/content 1.4.0 → 1.5.0-beta.2

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 (39) hide show
  1. package/esm2022/index.mjs +3 -2
  2. package/esm2022/lib/marked-content-highlighter.mjs +13 -0
  3. package/esm2022/lib/marked-setup.service.mjs +16 -52
  4. package/esm2022/prism-highlighter/analogjs-content-prism-highlighter.mjs +5 -0
  5. package/esm2022/prism-highlighter/index.mjs +7 -0
  6. package/esm2022/prism-highlighter/lib/prism/angular.mjs +20 -0
  7. package/esm2022/prism-highlighter/lib/prism-highlighter.mjs +61 -0
  8. package/esm2022/shiki-highlighter/analogjs-content-shiki-highlighter.mjs +5 -0
  9. package/esm2022/shiki-highlighter/index.mjs +30 -0
  10. package/esm2022/shiki-highlighter/lib/shiki-highlighter.mjs +59 -0
  11. package/fesm2022/analogjs-content-prism-highlighter.mjs +91 -0
  12. package/fesm2022/analogjs-content-prism-highlighter.mjs.map +1 -0
  13. package/fesm2022/analogjs-content-shiki-highlighter.mjs +93 -0
  14. package/fesm2022/analogjs-content-shiki-highlighter.mjs.map +1 -0
  15. package/fesm2022/analogjs-content.mjs +24 -69
  16. package/fesm2022/analogjs-content.mjs.map +1 -1
  17. package/index.d.ts +2 -1
  18. package/lib/marked-content-highlighter.d.ts +19 -0
  19. package/lib/marked-setup.service.d.ts +1 -10
  20. package/package.json +18 -2
  21. package/plugin/README.md +11 -0
  22. package/{migrations/migration.json → plugin/migrations.json} +24 -2
  23. package/plugin/src/index.d.ts +2 -0
  24. package/plugin/src/index.js +4 -0
  25. package/plugin/src/index.js.map +1 -0
  26. package/plugin/src/migrations/update-markdown-renderer-feature/compat.d.ts +2 -0
  27. package/plugin/src/migrations/update-markdown-renderer-feature/compat.js +6 -0
  28. package/plugin/src/migrations/update-markdown-renderer-feature/compat.js.map +1 -0
  29. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.d.ts +2 -0
  30. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.js +39 -0
  31. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.js.map +1 -0
  32. package/prism-highlighter/README.md +3 -0
  33. package/prism-highlighter/index.d.ts +4 -0
  34. package/prism-highlighter/lib/prism-highlighter.d.ts +18 -0
  35. package/shiki-highlighter/README.md +3 -0
  36. package/shiki-highlighter/index.d.ts +12 -0
  37. package/shiki-highlighter/lib/shiki-highlighter.d.ts +21 -0
  38. package/esm2022/lib/prism/angular.mjs +0 -20
  39. /package/{lib → prism-highlighter/lib}/prism/angular.d.ts +0 -0
package/esm2022/index.mjs CHANGED
@@ -2,9 +2,10 @@ export { AnchorNavigationDirective } from './lib/anchor-navigation.directive';
2
2
  export { injectContent } from './lib/content';
3
3
  export { ContentRenderer } from './lib/content-renderer';
4
4
  export { injectContentFiles } from './lib/inject-content-files';
5
- export { MarkdownContentRendererService, provideContent, withMarkdownRenderer, } from './lib/markdown-content-renderer.service';
5
+ export { MarkdownContentRendererService, provideContent, withMarkdownRenderer, MERMAID_IMPORT_TOKEN, } from './lib/markdown-content-renderer.service';
6
6
  export { default as MarkdownRouteComponent } from './lib/markdown-route.component';
7
7
  export { default as MarkdownComponent } from './lib/markdown.component';
8
8
  export { parseRawContentFile } from './lib/parse-raw-content-file';
9
9
  export { MarkedSetupService } from './lib/marked-setup.service';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCxvQkFBb0IsR0FDckIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxJQUFJLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQW5jaG9yTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2FuY2hvci1uYXZpZ2F0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBpbmplY3RDb250ZW50IH0gZnJvbSAnLi9saWIvY29udGVudCc7XG5leHBvcnQgeyBDb250ZW50RmlsZSB9IGZyb20gJy4vbGliL2NvbnRlbnQtZmlsZSc7XG5leHBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2xpYi9jb250ZW50LXJlbmRlcmVyJztcbmV4cG9ydCB7IGluamVjdENvbnRlbnRGaWxlcyB9IGZyb20gJy4vbGliL2luamVjdC1jb250ZW50LWZpbGVzJztcbmV4cG9ydCB7XG4gIE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSxcbiAgcHJvdmlkZUNvbnRlbnQsXG4gIHdpdGhNYXJrZG93blJlbmRlcmVyLFxufSBmcm9tICcuL2xpYi9tYXJrZG93bi1jb250ZW50LXJlbmRlcmVyLnNlcnZpY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXJrZG93blJvdXRlQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvbWFya2Rvd24tcm91dGUuY29tcG9uZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWFya2Rvd25Db21wb25lbnQgfSBmcm9tICcuL2xpYi9tYXJrZG93bi5jb21wb25lbnQnO1xuZXhwb3J0IHsgcGFyc2VSYXdDb250ZW50RmlsZSB9IGZyb20gJy4vbGliL3BhcnNlLXJhdy1jb250ZW50LWZpbGUnO1xuZXhwb3J0IHsgTWFya2VkU2V0dXBTZXJ2aWNlIH0gZnJvbSAnLi9saWIvbWFya2VkLXNldHVwLnNlcnZpY2UnO1xuIl19
10
+ export { MarkedContentHighlighter, withHighlighter, } from './lib/marked-content-highlighter';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0seUNBQXlDLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sSUFBSSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxPQUFPLElBQUksaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGVBQWUsR0FDaEIsTUFBTSxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFuY2hvck5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9hbmNob3ItbmF2aWdhdGlvbi5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgaW5qZWN0Q29udGVudCB9IGZyb20gJy4vbGliL2NvbnRlbnQnO1xuZXhwb3J0IHsgQ29udGVudEZpbGUgfSBmcm9tICcuL2xpYi9jb250ZW50LWZpbGUnO1xuZXhwb3J0IHsgQ29udGVudFJlbmRlcmVyIH0gZnJvbSAnLi9saWIvY29udGVudC1yZW5kZXJlcic7XG5leHBvcnQgeyBpbmplY3RDb250ZW50RmlsZXMgfSBmcm9tICcuL2xpYi9pbmplY3QtY29udGVudC1maWxlcyc7XG5leHBvcnQge1xuICBNYXJrZG93bkNvbnRlbnRSZW5kZXJlclNlcnZpY2UsXG4gIHByb3ZpZGVDb250ZW50LFxuICB3aXRoTWFya2Rvd25SZW5kZXJlcixcbiAgTUVSTUFJRF9JTVBPUlRfVE9LRU4sXG59IGZyb20gJy4vbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcmtkb3duUm91dGVDb21wb25lbnQgfSBmcm9tICcuL2xpYi9tYXJrZG93bi1yb3V0ZS5jb21wb25lbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXJrZG93bkNvbXBvbmVudCB9IGZyb20gJy4vbGliL21hcmtkb3duLmNvbXBvbmVudCc7XG5leHBvcnQgeyBwYXJzZVJhd0NvbnRlbnRGaWxlIH0gZnJvbSAnLi9saWIvcGFyc2UtcmF3LWNvbnRlbnQtZmlsZSc7XG5leHBvcnQgeyBNYXJrZWRTZXR1cFNlcnZpY2UgfSBmcm9tICcuL2xpYi9tYXJrZWQtc2V0dXAuc2VydmljZSc7XG5leHBvcnQge1xuICBNYXJrZWRDb250ZW50SGlnaGxpZ2h0ZXIsXG4gIHdpdGhIaWdobGlnaHRlcixcbn0gZnJvbSAnLi9saWIvbWFya2VkLWNvbnRlbnQtaGlnaGxpZ2h0ZXInO1xuIl19
@@ -0,0 +1,13 @@
1
+ import { Injectable, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class MarkedContentHighlighter {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MarkedContentHighlighter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MarkedContentHighlighter }); }
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MarkedContentHighlighter, decorators: [{
8
+ type: Injectable
9
+ }] });
10
+ export function withHighlighter(provider) {
11
+ return { provide: MarkedContentHighlighter, ...provider };
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VkLWNvbnRlbnQtaGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9saWIvbWFya2VkLWNvbnRlbnQtaGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsR0FJWCxNQUFNLGVBQWUsQ0FBQzs7QUFPdkIsTUFBTSxPQUFnQix3QkFBd0I7OEdBQXhCLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUQ3QyxVQUFVOztBQUtYLE1BQU0sVUFBVSxlQUFlLENBQzdCLFFBUW1DO0lBRW5DLE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxRQUFRLEVBQWMsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWJzdHJhY3RUeXBlLFxuICBJbmplY3RhYmxlLFxuICBQcm92aWRlcixcbiAgUHJvdmlkZXJUb2tlbixcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFya2VkQ29udGVudEhpZ2hsaWdodGVyIHtcbiAgYXVnbWVudENvZGVCbG9jaz8oY29kZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYXJrZWRDb250ZW50SGlnaGxpZ2h0ZXIge1xuICBhYnN0cmFjdCBnZXRIaWdobGlnaHRFeHRlbnNpb24oKTogaW1wb3J0KCdtYXJrZWQnKS5tYXJrZWQuTWFya2VkRXh0ZW5zaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEhpZ2hsaWdodGVyKFxuICBwcm92aWRlcjogKFxuICAgIHwgeyB1c2VWYWx1ZTogTWFya2VkQ29udGVudEhpZ2hsaWdodGVyIH1cbiAgICB8IHtcbiAgICAgICAgdXNlQ2xhc3M6XG4gICAgICAgICAgfCBUeXBlPE1hcmtlZENvbnRlbnRIaWdobGlnaHRlcj5cbiAgICAgICAgICB8IEFic3RyYWN0VHlwZTxNYXJrZWRDb250ZW50SGlnaGxpZ2h0ZXI+O1xuICAgICAgfVxuICAgIHwgeyB1c2VGYWN0b3J5OiAoLi4uZGVwczogYW55W10pID0+IE1hcmtlZENvbnRlbnRIaWdobGlnaHRlciB9XG4gICkgJiB7IGRlcHM/OiBQcm92aWRlclRva2VuPGFueT5bXSB9XG4pOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IE1hcmtlZENvbnRlbnRIaWdobGlnaHRlciwgLi4ucHJvdmlkZXIgfSBhcyBQcm92aWRlcjtcbn1cbiJdfQ==
@@ -2,23 +2,17 @@
2
2
  * Credit goes to Scully for original implementation
3
3
  * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts
4
4
  */
5
- import { Injectable } from '@angular/core';
5
+ import { inject, Injectable } from '@angular/core';
6
6
  import { marked } from 'marked';
7
7
  import { gfmHeadingId } from 'marked-gfm-heading-id';
8
- import { markedHighlight } from 'marked-highlight';
9
- import 'prismjs';
10
- import 'prismjs/components/prism-bash';
11
- import 'prismjs/components/prism-css';
12
- import 'prismjs/components/prism-javascript';
13
- import 'prismjs/components/prism-json';
14
- import 'prismjs/components/prism-markup';
15
- import 'prismjs/components/prism-typescript';
16
- import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
17
- import 'prismjs/plugins/toolbar/prism-toolbar';
18
- import './prism/angular';
8
+ import { mangle } from 'marked-mangle';
9
+ import { MarkedContentHighlighter } from './marked-content-highlighter';
19
10
  import * as i0 from "@angular/core";
20
11
  export class MarkedSetupService {
21
12
  constructor() {
13
+ this.highlighter = inject(MarkedContentHighlighter, {
14
+ optional: true,
15
+ });
22
16
  const renderer = new marked.Renderer();
23
17
  renderer.code = (code, lang) => {
24
18
  // Let's do a language based detection like on GitHub
@@ -29,50 +23,20 @@ export class MarkedSetupService {
29
23
  if (!lang) {
30
24
  return '<pre><code>' + code + '</code></pre>';
31
25
  }
32
- const classes = lang.startsWith('diff') && Prism.languages['diff']
33
- ? `language-${lang} diff-highlight`
34
- : `language-${lang.replace('diff-', '')}`;
35
- return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
26
+ if (this.highlighter?.augmentCodeBlock) {
27
+ return this.highlighter?.augmentCodeBlock(code, lang);
28
+ }
29
+ return `<pre class="language-${lang}"><code class="language-${lang}">${code}</code></pre>`;
36
30
  };
37
- marked.use(gfmHeadingId(), markedHighlight({
38
- async: true,
39
- highlight: (code, lang) => {
40
- let diff = lang?.startsWith('diff-');
41
- lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
42
- if (diff && !Prism.languages['diff']) {
43
- diff = false;
44
- console.warn(`Notice:
45
- ---------------------------------------------------------------------------------------
46
- The \`diff\` language and plugin are not available in the provided setup.
47
- To enable it, add the following imports your \`main.ts\`:
48
- import 'prismjs/components/prism-diff';
49
- import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
50
- ---------------------------------------------------------------------------------------
51
- `);
52
- }
53
- if (!Prism.languages[lang]) {
54
- if (lang !== 'mermaid') {
55
- console.warn(`Notice:
56
- ---------------------------------------------------------------------------------------
57
- The requested language '${lang}' is not available in the provided setup.
58
- To enable it, add the following import your \`main.ts\`:
59
- import 'prismjs/components/prism-${lang}';
60
- ---------------------------------------------------------------------------------------
61
- `);
62
- }
63
- return code;
64
- }
65
- return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
66
- },
67
- }), {
31
+ const extensions = [gfmHeadingId(), mangle()];
32
+ if (this.highlighter) {
33
+ extensions.push(this.highlighter.getHighlightExtension());
34
+ }
35
+ marked.use(...extensions, {
68
36
  renderer,
69
37
  pedantic: false,
70
38
  gfm: true,
71
39
  breaks: false,
72
- sanitize: false,
73
- smartypants: false,
74
- xhtml: false,
75
- mangle: false,
76
40
  });
77
41
  this.marked = marked;
78
42
  }
@@ -85,4 +49,4 @@ export class MarkedSetupService {
85
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MarkedSetupService, decorators: [{
86
50
  type: Injectable
87
51
  }], ctorParameters: () => [] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VkLXNldHVwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9saWIvbWFya2VkLXNldHVwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxTQUFTLENBQUM7QUFDakIsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywyREFBMkQsQ0FBQztBQUNuRSxPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8saUJBQWlCLENBQUM7O0FBS3pCLE1BQU0sT0FBTyxrQkFBa0I7SUFHN0I7UUFDRSxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxFQUFFO1lBQzdDLHFEQUFxRDtZQUNyRCxvREFBb0Q7WUFDcEQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNuRCxDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sYUFBYSxHQUFHLElBQUksR0FBRyxlQUFlLENBQUM7WUFDaEQsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxZQUFZLElBQUksaUJBQWlCO2dCQUNuQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sZUFBZSxPQUFPLGtCQUFrQixPQUFPLEtBQUssSUFBSSxlQUFlLENBQUM7UUFDakYsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLEdBQUcsQ0FDUixZQUFZLEVBQUUsRUFDZCxlQUFlLENBQUM7WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUM7Z0JBRS9ELElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNyQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7YUFPWixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQzs7OEJBRUcsSUFBSTs7eUNBRU8sSUFBSTs7ZUFFOUIsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ3RELElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsRUFDRjtZQUNFLFFBQVE7WUFDUixRQUFRLEVBQUUsS0FBSztZQUNmLEdBQUcsRUFBRSxJQUFJO1lBQ1QsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7OEdBL0VVLGtCQUFrQjtrSEFBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVkaXQgZ29lcyB0byBTY3VsbHkgZm9yIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc2N1bGx5aW8vc2N1bGx5L2Jsb2IvbWFpbi9saWJzL3NjdWxseS9zcmMvbGliL2ZpbGVIYW5kZXJQbHVnaW5zL21hcmtkb3duLnRzXG4gKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gJ21hcmtlZCc7XG5pbXBvcnQgeyBnZm1IZWFkaW5nSWQgfSBmcm9tICdtYXJrZWQtZ2ZtLWhlYWRpbmctaWQnO1xuaW1wb3J0IHsgbWFya2VkSGlnaGxpZ2h0IH0gZnJvbSAnbWFya2VkLWhpZ2hsaWdodCc7XG5cbmltcG9ydCAncHJpc21qcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1iYXNoJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWNzcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1qYXZhc2NyaXB0JztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWpzb24nO1xuaW1wb3J0ICdwcmlzbWpzL2NvbXBvbmVudHMvcHJpc20tbWFya3VwJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLXR5cGVzY3JpcHQnO1xuaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvY29weS10by1jbGlwYm9hcmQvcHJpc20tY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvdG9vbGJhci9wcmlzbS10b29sYmFyJztcbmltcG9ydCAnLi9wcmlzbS9hbmd1bGFyJztcblxuZGVjbGFyZSBjb25zdCBQcmlzbTogdHlwZW9mIGltcG9ydCgncHJpc21qcycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWFya2VkU2V0dXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXJrZWQ6IHR5cGVvZiBtYXJrZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgbWFya2VkLlJlbmRlcmVyKCk7XG4gICAgcmVuZGVyZXIuY29kZSA9IChjb2RlOiBzdHJpbmcsIGxhbmc6IHN0cmluZykgPT4ge1xuICAgICAgLy8gTGV0J3MgZG8gYSBsYW5ndWFnZSBiYXNlZCBkZXRlY3Rpb24gbGlrZSBvbiBHaXRIdWJcbiAgICAgIC8vIFNvIHdlIGNhbiBzdGlsbCBoYXZlIG5vbi1pbnRlcnByZXRlZCBtZXJtYWlkIGNvZGVcbiAgICAgIGlmIChsYW5nID09PSAnbWVybWFpZCcpIHtcbiAgICAgICAgcmV0dXJuICc8cHJlIGNsYXNzPVwibWVybWFpZFwiPicgKyBjb2RlICsgJzwvcHJlPic7XG4gICAgICB9XG5cbiAgICAgIGlmICghbGFuZykge1xuICAgICAgICByZXR1cm4gJzxwcmU+PGNvZGU+JyArIGNvZGUgKyAnPC9jb2RlPjwvcHJlPic7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPVxuICAgICAgICBsYW5nLnN0YXJ0c1dpdGgoJ2RpZmYnKSAmJiBQcmlzbS5sYW5ndWFnZXNbJ2RpZmYnXVxuICAgICAgICAgID8gYGxhbmd1YWdlLSR7bGFuZ30gZGlmZi1oaWdobGlnaHRgXG4gICAgICAgICAgOiBgbGFuZ3VhZ2UtJHtsYW5nLnJlcGxhY2UoJ2RpZmYtJywgJycpfWA7XG4gICAgICByZXR1cm4gYDxwcmUgY2xhc3M9XCIke2NsYXNzZXN9XCI+PGNvZGUgY2xhc3M9XCIke2NsYXNzZXN9XCI+JHtjb2RlfTwvY29kZT48L3ByZT5gO1xuICAgIH07XG5cbiAgICBtYXJrZWQudXNlKFxuICAgICAgZ2ZtSGVhZGluZ0lkKCksXG4gICAgICBtYXJrZWRIaWdobGlnaHQoe1xuICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgaGlnaGxpZ2h0OiAoY29kZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBsZXQgZGlmZiA9IGxhbmc/LnN0YXJ0c1dpdGgoJ2RpZmYtJyk7XG4gICAgICAgICAgbGFuZyA9IGRpZmYgPyBsYW5nLnJlcGxhY2UoJ2RpZmYtJywgJycpIDogbGFuZyB8fCAndHlwZXNjcmlwdCc7XG5cbiAgICAgICAgICBpZiAoZGlmZiAmJiAhUHJpc20ubGFuZ3VhZ2VzWydkaWZmJ10pIHtcbiAgICAgICAgICAgIGRpZmYgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFRoZSBcXGBkaWZmXFxgIGxhbmd1YWdlIGFuZCBwbHVnaW4gYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNldHVwLlxuICAgIFRvIGVuYWJsZSBpdCwgYWRkIHRoZSBmb2xsb3dpbmcgaW1wb3J0cyB5b3VyIFxcYG1haW4udHNcXGA6XG4gICAgICBpbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1kaWZmJztcbiAgICAgIGltcG9ydCAncHJpc21qcy9wbHVnaW5zL2RpZmYtaGlnaGxpZ2h0L3ByaXNtLWRpZmYtaGlnaGxpZ2h0JztcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgIGApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghUHJpc20ubGFuZ3VhZ2VzW2xhbmddKSB7XG4gICAgICAgICAgICBpZiAobGFuZyAhPT0gJ21lcm1haWQnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgJyR7bGFuZ30nIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNldHVwLlxuICAgIFRvIGVuYWJsZSBpdCwgYWRkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHlvdXIgXFxgbWFpbi50c1xcYDpcbiAgICAgIGltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLSR7bGFuZ30nO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJpc20uaGlnaGxpZ2h0KFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIGRpZmYgPyBQcmlzbS5sYW5ndWFnZXNbJ2RpZmYnXSA6IFByaXNtLmxhbmd1YWdlc1tsYW5nXSxcbiAgICAgICAgICAgIGxhbmdcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIHJlbmRlcmVyLFxuICAgICAgICBwZWRhbnRpYzogZmFsc2UsXG4gICAgICAgIGdmbTogdHJ1ZSxcbiAgICAgICAgYnJlYWtzOiBmYWxzZSxcbiAgICAgICAgc2FuaXRpemU6IGZhbHNlLFxuICAgICAgICBzbWFydHlwYW50czogZmFsc2UsXG4gICAgICAgIHhodG1sOiBmYWxzZSxcbiAgICAgICAgbWFuZ2xlOiBmYWxzZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXJrZWQgPSBtYXJrZWQ7XG4gIH1cblxuICBnZXRNYXJrZWRJbnN0YW5jZSgpOiB0eXBlb2YgbWFya2VkIHtcbiAgICByZXR1cm4gdGhpcy5tYXJrZWQ7XG4gIH1cbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VkLXNldHVwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9saWIvbWFya2VkLXNldHVwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFHeEUsTUFBTSxPQUFPLGtCQUFrQjtJQU03QjtRQUppQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRTtZQUM5RCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUdELE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQUU7WUFDN0MscURBQXFEO1lBQ3JELG9EQUFvRDtZQUNwRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ25ELENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxhQUFhLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztZQUNoRCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUVELE9BQU8sd0JBQXdCLElBQUksMkJBQTJCLElBQUksS0FBSyxJQUFJLGVBQWUsQ0FBQztRQUM3RixDQUFDLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRTtZQUN4QixRQUFRO1lBQ1IsUUFBUSxFQUFFLEtBQUs7WUFDZixHQUFHLEVBQUUsSUFBSTtZQUNULE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDOzhHQTVDVSxrQkFBa0I7a0hBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlZGl0IGdvZXMgdG8gU2N1bGx5IGZvciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvblxuICogaHR0cHM6Ly9naXRodWIuY29tL3NjdWxseWlvL3NjdWxseS9ibG9iL21haW4vbGlicy9zY3VsbHkvc3JjL2xpYi9maWxlSGFuZGVyUGx1Z2lucy9tYXJrZG93bi50c1xuICovXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gJ21hcmtlZCc7XG5pbXBvcnQgeyBnZm1IZWFkaW5nSWQgfSBmcm9tICdtYXJrZWQtZ2ZtLWhlYWRpbmctaWQnO1xuaW1wb3J0IHsgbWFuZ2xlIH0gZnJvbSAnbWFya2VkLW1hbmdsZSc7XG5pbXBvcnQgeyBNYXJrZWRDb250ZW50SGlnaGxpZ2h0ZXIgfSBmcm9tICcuL21hcmtlZC1jb250ZW50LWhpZ2hsaWdodGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcmtlZFNldHVwU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFya2VkOiB0eXBlb2YgbWFya2VkO1xuICBwcml2YXRlIHJlYWRvbmx5IGhpZ2hsaWdodGVyID0gaW5qZWN0KE1hcmtlZENvbnRlbnRIaWdobGlnaHRlciwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcbiAgICByZW5kZXJlci5jb2RlID0gKGNvZGU6IHN0cmluZywgbGFuZzogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBMZXQncyBkbyBhIGxhbmd1YWdlIGJhc2VkIGRldGVjdGlvbiBsaWtlIG9uIEdpdEh1YlxuICAgICAgLy8gU28gd2UgY2FuIHN0aWxsIGhhdmUgbm9uLWludGVycHJldGVkIG1lcm1haWQgY29kZVxuICAgICAgaWYgKGxhbmcgPT09ICdtZXJtYWlkJykge1xuICAgICAgICByZXR1cm4gJzxwcmUgY2xhc3M9XCJtZXJtYWlkXCI+JyArIGNvZGUgKyAnPC9wcmU+JztcbiAgICAgIH1cblxuICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgIHJldHVybiAnPHByZT48Y29kZT4nICsgY29kZSArICc8L2NvZGU+PC9wcmU+JztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZXI/LmF1Z21lbnRDb2RlQmxvY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZXI/LmF1Z21lbnRDb2RlQmxvY2soY29kZSwgbGFuZyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgPHByZSBjbGFzcz1cImxhbmd1YWdlLSR7bGFuZ31cIj48Y29kZSBjbGFzcz1cImxhbmd1YWdlLSR7bGFuZ31cIj4ke2NvZGV9PC9jb2RlPjwvcHJlPmA7XG4gICAgfTtcblxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbZ2ZtSGVhZGluZ0lkKCksIG1hbmdsZSgpXTtcblxuICAgIGlmICh0aGlzLmhpZ2hsaWdodGVyKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2godGhpcy5oaWdobGlnaHRlci5nZXRIaWdobGlnaHRFeHRlbnNpb24oKSk7XG4gICAgfVxuXG4gICAgbWFya2VkLnVzZSguLi5leHRlbnNpb25zLCB7XG4gICAgICByZW5kZXJlcixcbiAgICAgIHBlZGFudGljOiBmYWxzZSxcbiAgICAgIGdmbTogdHJ1ZSxcbiAgICAgIGJyZWFrczogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1hcmtlZCA9IG1hcmtlZDtcbiAgfVxuXG4gIGdldE1hcmtlZEluc3RhbmNlKCk6IHR5cGVvZiBtYXJrZWQge1xuICAgIHJldHVybiB0aGlzLm1hcmtlZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtY29udGVudC1wcmlzbS1oaWdobGlnaHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvcHJpc20taGlnaGxpZ2h0ZXIvc3JjL2FuYWxvZ2pzLWNvbnRlbnQtcHJpc20taGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import { withHighlighter } from '@analogjs/content';
2
+ import { PrismHighlighter } from './lib/prism-highlighter';
3
+ export { PrismHighlighter };
4
+ export function withPrismHighlighter() {
5
+ return withHighlighter({ useClass: PrismHighlighter });
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3ByaXNtLWhpZ2hsaWdodGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUM7QUFFNUIsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhIaWdobGlnaHRlciB9IGZyb20gJ0BhbmFsb2dqcy9jb250ZW50JztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmlzbUhpZ2hsaWdodGVyIH0gZnJvbSAnLi9saWIvcHJpc20taGlnaGxpZ2h0ZXInO1xuXG5leHBvcnQgeyBQcmlzbUhpZ2hsaWdodGVyIH07XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJpc21IaWdobGlnaHRlcigpOiBQcm92aWRlciB7XG4gIHJldHVybiB3aXRoSGlnaGxpZ2h0ZXIoeyB1c2VDbGFzczogUHJpc21IaWdobGlnaHRlciB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ (function () {
3
+ if (typeof Prism === 'undefined') {
4
+ return;
5
+ }
6
+ Prism.languages.angular = Prism.languages.extend('markup', {
7
+ keyword: /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\b/,
8
+ operator: /\b(?:on|when)\b/,
9
+ number: {
10
+ pattern: /\b(minimum|after)\s+\d+(?:s|ms|)/gi,
11
+ lookbehind: true,
12
+ },
13
+ builtin: {
14
+ pattern: /\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,
15
+ },
16
+ function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
17
+ });
18
+ Prism.languages.ng = Prism.languages.angular;
19
+ })();
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvcHJpc20taGlnaGxpZ2h0ZXIvc3JjL2xpYi9wcmlzbS9hbmd1bGFyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxDQUFDO0lBQ0MsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxPQUFPO0lBQ1QsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUN6RCxPQUFPLEVBQ0wscUVBQXFFO1FBQ3ZFLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUFFLG9DQUFvQztZQUM3QyxVQUFVLEVBQUUsSUFBSTtTQUNqQjtRQUNELE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFDTCxxRUFBcUU7U0FDeEU7UUFDRCxRQUFRLEVBQ04sbUdBQW1HO0tBQ3RHLENBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIFByaXNtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFByaXNtLmxhbmd1YWdlcy5hbmd1bGFyID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuICAgIGtleXdvcmQ6XG4gICAgICAvKD86QGlmfEBmb3J8QHN3aXRjaHxAZGVmZXJ8QGxvYWRpbmd8QGVycm9yfEBwbGFjZWhvbGRlcnxwcmVmZXRjaClcXGIvLFxuICAgIG9wZXJhdG9yOiAvXFxiKD86b258d2hlbilcXGIvLFxuICAgIG51bWJlcjoge1xuICAgICAgcGF0dGVybjogL1xcYihtaW5pbXVtfGFmdGVyKVxccytcXGQrKD86c3xtc3wpL2dpLFxuICAgICAgbG9va2JlaGluZDogdHJ1ZSxcbiAgICB9LFxuICAgIGJ1aWx0aW46IHtcbiAgICAgIHBhdHRlcm46XG4gICAgICAgIC9cXGIoPzp2aWV3cG9ydHx0aW1lcnxtaW5pbXVtfGFmdGVyfGhvdmVyfGlkbGV8aW1tZWRpYXRlfGludGVyYWN0aW9uKS8sXG4gICAgfSxcbiAgICBmdW5jdGlvbjpcbiAgICAgIC8jPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqKD86XFwuXFxzKig/OmFwcGx5fGJpbmR8Y2FsbClcXHMqKT9cXCgpLyxcbiAgfSk7XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLm5nID0gUHJpc20ubGFuZ3VhZ2VzLmFuZ3VsYXI7XG59KSgpO1xuIl19
@@ -0,0 +1,61 @@
1
+ import { MarkedContentHighlighter } from '@analogjs/content';
2
+ import { Injectable } from '@angular/core';
3
+ import { markedHighlight } from 'marked-highlight';
4
+ import 'prismjs';
5
+ import 'prismjs/components/prism-bash';
6
+ import 'prismjs/components/prism-css';
7
+ import 'prismjs/components/prism-javascript';
8
+ import 'prismjs/components/prism-json';
9
+ import 'prismjs/components/prism-markup';
10
+ import 'prismjs/components/prism-typescript';
11
+ import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
12
+ import 'prismjs/plugins/toolbar/prism-toolbar';
13
+ import './prism/angular';
14
+ import * as i0 from "@angular/core";
15
+ export class PrismHighlighter extends MarkedContentHighlighter {
16
+ augmentCodeBlock(code, lang) {
17
+ const classes = lang.startsWith('diff') && Prism.languages['diff']
18
+ ? `language-${lang} diff-highlight`
19
+ : `language-${lang.replace('diff-', '')}`;
20
+ return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
21
+ }
22
+ getHighlightExtension() {
23
+ return markedHighlight({
24
+ async: true,
25
+ highlight: (code, lang) => {
26
+ let diff = lang?.startsWith('diff-');
27
+ lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
28
+ if (diff && !Prism.languages['diff']) {
29
+ diff = false;
30
+ console.warn(`Notice:
31
+ ---------------------------------------------------------------------------------------
32
+ The \`diff\` language and plugin are not available in the provided setup.
33
+ To enable it, add the following imports your \`main.ts\`:
34
+ import 'prismjs/components/prism-diff';
35
+ import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
36
+ ---------------------------------------------------------------------------------------
37
+ `);
38
+ }
39
+ if (!Prism.languages[lang]) {
40
+ if (lang !== 'mermaid') {
41
+ console.warn(`Notice:
42
+ ---------------------------------------------------------------------------------------
43
+ The requested language '${lang}' is not available in the provided setup.
44
+ To enable it, add the following import your \`main.ts\`:
45
+ import 'prismjs/components/prism-${lang}';
46
+ ---------------------------------------------------------------------------------------
47
+ `);
48
+ }
49
+ return code;
50
+ }
51
+ return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
52
+ },
53
+ });
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
56
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, decorators: [{
59
+ type: Injectable
60
+ }] });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20taGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3ByaXNtLWhpZ2hsaWdodGVyL3NyYy9saWIvcHJpc20taGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxTQUFTLENBQUM7QUFDakIsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywyREFBMkQsQ0FBQztBQUNuRSxPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8saUJBQWlCLENBQUM7O0FBS3pCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSx3QkFBd0I7SUFDbkQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDbEQsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoRCxDQUFDLENBQUMsWUFBWSxJQUFJLGlCQUFpQjtZQUNuQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sZUFBZSxPQUFPLGtCQUFrQixPQUFPLEtBQUssSUFBSSxlQUFlLENBQUM7SUFDakYsQ0FBQztJQUVRLHFCQUFxQjtRQUM1QixPQUFPLGVBQWUsQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSTtZQUNYLFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUM7Z0JBRS9ELElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNyQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7YUFPVixDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQzs7OEJBRUssSUFBSTs7eUNBRU8sSUFBSTs7ZUFFOUIsQ0FBQyxDQUFDO29CQUNQLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ3RELElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBL0NVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWFya2VkQ29udGVudEhpZ2hsaWdodGVyIH0gZnJvbSAnQGFuYWxvZ2pzL2NvbnRlbnQnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFya2VkSGlnaGxpZ2h0IH0gZnJvbSAnbWFya2VkLWhpZ2hsaWdodCc7XG5cbmltcG9ydCAncHJpc21qcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1iYXNoJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWNzcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1qYXZhc2NyaXB0JztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWpzb24nO1xuaW1wb3J0ICdwcmlzbWpzL2NvbXBvbmVudHMvcHJpc20tbWFya3VwJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLXR5cGVzY3JpcHQnO1xuaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvY29weS10by1jbGlwYm9hcmQvcHJpc20tY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvdG9vbGJhci9wcmlzbS10b29sYmFyJztcbmltcG9ydCAnLi9wcmlzbS9hbmd1bGFyJztcblxuZGVjbGFyZSBjb25zdCBQcmlzbTogdHlwZW9mIGltcG9ydCgncHJpc21qcycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJpc21IaWdobGlnaHRlciBleHRlbmRzIE1hcmtlZENvbnRlbnRIaWdobGlnaHRlciB7XG4gIG92ZXJyaWRlIGF1Z21lbnRDb2RlQmxvY2soY29kZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPVxuICAgICAgbGFuZy5zdGFydHNXaXRoKCdkaWZmJykgJiYgUHJpc20ubGFuZ3VhZ2VzWydkaWZmJ11cbiAgICAgICAgPyBgbGFuZ3VhZ2UtJHtsYW5nfSBkaWZmLWhpZ2hsaWdodGBcbiAgICAgICAgOiBgbGFuZ3VhZ2UtJHtsYW5nLnJlcGxhY2UoJ2RpZmYtJywgJycpfWA7XG4gICAgcmV0dXJuIGA8cHJlIGNsYXNzPVwiJHtjbGFzc2VzfVwiPjxjb2RlIGNsYXNzPVwiJHtjbGFzc2VzfVwiPiR7Y29kZX08L2NvZGU+PC9wcmU+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldEhpZ2hsaWdodEV4dGVuc2lvbigpIHtcbiAgICByZXR1cm4gbWFya2VkSGlnaGxpZ2h0KHtcbiAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgaGlnaGxpZ2h0OiAoY29kZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGRpZmYgPSBsYW5nPy5zdGFydHNXaXRoKCdkaWZmLScpO1xuICAgICAgICBsYW5nID0gZGlmZiA/IGxhbmcucmVwbGFjZSgnZGlmZi0nLCAnJykgOiBsYW5nIHx8ICd0eXBlc2NyaXB0JztcblxuICAgICAgICBpZiAoZGlmZiAmJiAhUHJpc20ubGFuZ3VhZ2VzWydkaWZmJ10pIHtcbiAgICAgICAgICBkaWZmID0gZmFsc2U7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBOb3RpY2U6XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgVGhlIFxcYGRpZmZcXGAgbGFuZ3VhZ2UgYW5kIHBsdWdpbiBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgcHJvdmlkZWQgc2V0dXAuXG4gICAgVG8gZW5hYmxlIGl0LCBhZGQgdGhlIGZvbGxvd2luZyBpbXBvcnRzIHlvdXIgXFxgbWFpbi50c1xcYDpcbiAgICAgIGltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWRpZmYnO1xuICAgICAgaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvZGlmZi1oaWdobGlnaHQvcHJpc20tZGlmZi1oaWdobGlnaHQnO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuICAgICAgICAgIGlmIChsYW5nICE9PSAnbWVybWFpZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgJyR7bGFuZ30nIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNldHVwLlxuICAgIFRvIGVuYWJsZSBpdCwgYWRkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHlvdXIgXFxgbWFpbi50c1xcYDpcbiAgICAgIGltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLSR7bGFuZ30nO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICBgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByaXNtLmhpZ2hsaWdodChcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIGRpZmYgPyBQcmlzbS5sYW5ndWFnZXNbJ2RpZmYnXSA6IFByaXNtLmxhbmd1YWdlc1tsYW5nXSxcbiAgICAgICAgICBsYW5nXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtY29udGVudC1zaGlraS1oaWdobGlnaHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc2hpa2ktaGlnaGxpZ2h0ZXIvc3JjL2FuYWxvZ2pzLWNvbnRlbnQtc2hpa2ktaGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { withHighlighter } from '@analogjs/content';
2
+ import { defaultHighlighterOptions, SHIKI_CONTAINER_OPTION, SHIKI_HIGHLIGHT_OPTIONS, SHIKI_HIGHLIGHTER_OPTIONS, ShikiHighlighter, } from './lib/shiki-highlighter';
3
+ export { ShikiHighlighter };
4
+ export function withShikiHighlighter({ highlighter = {}, highlight = {}, container = '%s', } = {}) {
5
+ if (!highlighter.themes) {
6
+ if (highlight.theme) {
7
+ highlighter.themes = [highlight.theme];
8
+ }
9
+ else if (highlight.themes && typeof highlight.themes === 'object') {
10
+ highlighter.themes = Object.values(highlight.themes);
11
+ }
12
+ else {
13
+ highlighter.themes = defaultHighlighterOptions.themes;
14
+ }
15
+ }
16
+ if (!highlighter.langs) {
17
+ highlighter.langs = defaultHighlighterOptions.langs;
18
+ }
19
+ if (highlighter.additionalLangs) {
20
+ highlighter.langs.push(...highlighter.additionalLangs);
21
+ delete highlighter.additionalLangs;
22
+ }
23
+ return [
24
+ { provide: SHIKI_HIGHLIGHTER_OPTIONS, useValue: highlighter },
25
+ { provide: SHIKI_HIGHLIGHT_OPTIONS, useValue: highlight },
26
+ { provide: SHIKI_CONTAINER_OPTION, useValue: container },
27
+ withHighlighter({ useClass: ShikiHighlighter }),
28
+ ];
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NoaWtpLWhpZ2hsaWdodGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixnQkFBZ0IsR0FHakIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQVU1QixNQUFNLFVBQVUsb0JBQW9CLENBQUMsRUFDbkMsV0FBVyxHQUFHLEVBQUUsRUFDaEIsU0FBUyxHQUFHLEVBQUUsRUFDZCxTQUFTLEdBQUcsSUFBSSxNQUNlLEVBQUU7SUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFhLENBQUM7UUFDbkUsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLENBQUMsTUFBTSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsV0FBVyxDQUFDLEtBQUssR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sV0FBVyxDQUFDLGVBQWUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7UUFDN0QsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtRQUN6RCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO1FBQ3hELGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ2hELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aEhpZ2hsaWdodGVyIH0gZnJvbSAnQGFuYWxvZ2pzL2NvbnRlbnQnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQnVuZGxlZExhbmd1YWdlIH0gZnJvbSAnc2hpa2knO1xuaW1wb3J0IHtcbiAgZGVmYXVsdEhpZ2hsaWdodGVyT3B0aW9ucyxcbiAgU0hJS0lfQ09OVEFJTkVSX09QVElPTixcbiAgU0hJS0lfSElHSExJR0hUX09QVElPTlMsXG4gIFNISUtJX0hJR0hMSUdIVEVSX09QVElPTlMsXG4gIFNoaWtpSGlnaGxpZ2h0ZXIsXG4gIHR5cGUgU2hpa2lIaWdobGlnaHRlck9wdGlvbnMsXG4gIHR5cGUgU2hpa2lIaWdobGlnaHRPcHRpb25zLFxufSBmcm9tICcuL2xpYi9zaGlraS1oaWdobGlnaHRlcic7XG5cbmV4cG9ydCB7IFNoaWtpSGlnaGxpZ2h0ZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoU2hpa2lIaWdobGlnaHRlck9wdGlvbnMge1xuICBoaWdobGlnaHRlcj86IFBhcnRpYWw8U2hpa2lIaWdobGlnaHRlck9wdGlvbnM+ICYge1xuICAgIGFkZGl0aW9uYWxMYW5ncz86IEJ1bmRsZWRMYW5ndWFnZVtdO1xuICB9O1xuICBoaWdobGlnaHQ/OiBTaGlraUhpZ2hsaWdodE9wdGlvbnM7XG4gIGNvbnRhaW5lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTaGlraUhpZ2hsaWdodGVyKHtcbiAgaGlnaGxpZ2h0ZXIgPSB7fSxcbiAgaGlnaGxpZ2h0ID0ge30sXG4gIGNvbnRhaW5lciA9ICclcycsXG59OiBXaXRoU2hpa2lIaWdobGlnaHRlck9wdGlvbnMgPSB7fSk6IFByb3ZpZGVyIHtcbiAgaWYgKCFoaWdobGlnaHRlci50aGVtZXMpIHtcbiAgICBpZiAoaGlnaGxpZ2h0LnRoZW1lKSB7XG4gICAgICBoaWdobGlnaHRlci50aGVtZXMgPSBbaGlnaGxpZ2h0LnRoZW1lXTtcbiAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50aGVtZXMgJiYgdHlwZW9mIGhpZ2hsaWdodC50aGVtZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBoaWdobGlnaHRlci50aGVtZXMgPSBPYmplY3QudmFsdWVzKGhpZ2hsaWdodC50aGVtZXMpIGFzIHN0cmluZ1tdO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRlci50aGVtZXMgPSBkZWZhdWx0SGlnaGxpZ2h0ZXJPcHRpb25zLnRoZW1lcztcbiAgICB9XG4gIH1cblxuICBpZiAoIWhpZ2hsaWdodGVyLmxhbmdzKSB7XG4gICAgaGlnaGxpZ2h0ZXIubGFuZ3MgPSBkZWZhdWx0SGlnaGxpZ2h0ZXJPcHRpb25zLmxhbmdzO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodGVyLmFkZGl0aW9uYWxMYW5ncykge1xuICAgIGhpZ2hsaWdodGVyLmxhbmdzLnB1c2goLi4uaGlnaGxpZ2h0ZXIuYWRkaXRpb25hbExhbmdzKTtcbiAgICBkZWxldGUgaGlnaGxpZ2h0ZXIuYWRkaXRpb25hbExhbmdzO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICB7IHByb3ZpZGU6IFNISUtJX0hJR0hMSUdIVEVSX09QVElPTlMsIHVzZVZhbHVlOiBoaWdobGlnaHRlciB9LFxuICAgIHsgcHJvdmlkZTogU0hJS0lfSElHSExJR0hUX09QVElPTlMsIHVzZVZhbHVlOiBoaWdobGlnaHQgfSxcbiAgICB7IHByb3ZpZGU6IFNISUtJX0NPTlRBSU5FUl9PUFRJT04sIHVzZVZhbHVlOiBjb250YWluZXIgfSxcbiAgICB3aXRoSGlnaGxpZ2h0ZXIoeyB1c2VDbGFzczogU2hpa2lIaWdobGlnaHRlciB9KSxcbiAgXTtcbn1cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { MarkedContentHighlighter, MERMAID_IMPORT_TOKEN, } from '@analogjs/content';
2
+ import { inject, Injectable, InjectionToken } from '@angular/core';
3
+ import markedShiki from 'marked-shiki';
4
+ import { getHighlighter, } from 'shiki';
5
+ import * as i0 from "@angular/core";
6
+ export const defaultHighlighterOptions = {
7
+ langs: [
8
+ 'json',
9
+ 'ts',
10
+ 'tsx',
11
+ 'js',
12
+ 'jsx',
13
+ 'html',
14
+ 'css',
15
+ 'angular-html',
16
+ 'angular-ts',
17
+ ],
18
+ themes: ['github-dark', 'github-light'],
19
+ };
20
+ export const [SHIKI_HIGHLIGHTER_OPTIONS, SHIKI_HIGHLIGHT_OPTIONS, SHIKI_CONTAINER_OPTION,] = [
21
+ new InjectionToken('SHIKI_HIGHLIGHTER_OPTIONS'),
22
+ new InjectionToken('SHIKI_HIGHLIGHT_OPTIONS'),
23
+ new InjectionToken('SHIKI_CONTAINER_OPTION'),
24
+ ];
25
+ export class ShikiHighlighter extends MarkedContentHighlighter {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.highlighterOptions = inject(SHIKI_HIGHLIGHTER_OPTIONS);
29
+ this.highlightOptions = inject(SHIKI_HIGHLIGHT_OPTIONS);
30
+ this.highlighterContainer = inject(SHIKI_CONTAINER_OPTION);
31
+ this.hasLoadMermaid = inject(MERMAID_IMPORT_TOKEN, {
32
+ optional: true,
33
+ });
34
+ this.highlighter = getHighlighter(this.highlighterOptions);
35
+ }
36
+ getHighlightExtension() {
37
+ return markedShiki({
38
+ container: this.highlighterContainer,
39
+ highlight: async (code, lang, props) => {
40
+ if (this.hasLoadMermaid && lang === 'mermaid') {
41
+ return `<pre class="mermaid">${code}</pre>`;
42
+ }
43
+ const { codeToHtml } = await this.highlighter;
44
+ return codeToHtml(code, Object.assign({
45
+ lang,
46
+ // required by `transformerMeta*`
47
+ meta: { __raw: props.join(' ') },
48
+ themes: { dark: 'github-dark', light: 'github-light' },
49
+ }, this.highlightOptions));
50
+ },
51
+ });
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
54
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter }); }
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, decorators: [{
57
+ type: Injectable
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpa2ktaGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NoaWtpLWhpZ2hsaWdodGVyL3NyYy9saWIvc2hpa2ktaGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFPTCxjQUFjLEdBQ2YsTUFBTSxPQUFPLENBQUM7O0FBVWYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFDdkMsS0FBSyxFQUFFO1FBQ0wsTUFBTTtRQUNOLElBQUk7UUFDSixLQUFLO1FBQ0wsSUFBSTtRQUNKLEtBQUs7UUFDTCxNQUFNO1FBQ04sS0FBSztRQUNMLGNBQWM7UUFDZCxZQUFZO0tBQ2I7SUFDRCxNQUFNLEVBQUUsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDO0NBQ3hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxDQUNYLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3ZCLEdBQUc7SUFDRixJQUFJLGNBQWMsQ0FBMEIsMkJBQTJCLENBQUM7SUFDeEUsSUFBSSxjQUFjLENBQXdCLHlCQUF5QixDQUFDO0lBQ3BFLElBQUksY0FBYyxDQUFTLHdCQUF3QixDQUFDO0NBQ3JELENBQUM7QUFHRixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsd0JBQXdCO0lBRDlEOztRQUVtQix1QkFBa0IsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN2RCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuRCx5QkFBb0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0RCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUM3RCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUNjLGdCQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBMEJ4RTtJQXhCVSxxQkFBcUI7UUFDNUIsT0FBTyxXQUFXLENBQUM7WUFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7WUFDcEMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM5QyxPQUFPLHdCQUF3QixJQUFJLFFBQVEsQ0FBQztnQkFDOUMsQ0FBQztnQkFFRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM5QyxPQUFPLFVBQVUsQ0FDZixJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU0sQ0FDWDtvQkFDRSxJQUFJO29CQUNKLGlDQUFpQztvQkFDakMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtpQkFDdkQsRUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWhDVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1hcmtlZENvbnRlbnRIaWdobGlnaHRlcixcbiAgTUVSTUFJRF9JTVBPUlRfVE9LRU4sXG59IGZyb20gJ0BhbmFsb2dqcy9jb250ZW50JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtYXJrZWRTaGlraSBmcm9tICdtYXJrZWQtc2hpa2knO1xuaW1wb3J0IHtcbiAgdHlwZSBCdW5kbGVkTGFuZ3VhZ2UsXG4gIHR5cGUgQnVuZGxlZFRoZW1lLFxuICB0eXBlIENvZGVPcHRpb25zTWV0YSxcbiAgdHlwZSBDb2RlT3B0aW9uc011bHRpcGxlVGhlbWVzLFxuICB0eXBlIENvZGVPcHRpb25zU2luZ2xlVGhlbWUsXG4gIHR5cGUgQ29kZVRvSGFzdE9wdGlvbnNDb21tb24sXG4gIGdldEhpZ2hsaWdodGVyLFxufSBmcm9tICdzaGlraSc7XG5cbmV4cG9ydCB0eXBlIFNoaWtpSGlnaGxpZ2h0ZXJPcHRpb25zID0gUGFyYW1ldGVyczx0eXBlb2YgZ2V0SGlnaGxpZ2h0ZXI+WzBdO1xuZXhwb3J0IHR5cGUgU2hpa2lIaWdobGlnaHRPcHRpb25zID0gUGFydGlhbDxcbiAgT21pdDxDb2RlVG9IYXN0T3B0aW9uc0NvbW1vbjxCdW5kbGVkTGFuZ3VhZ2U+LCAnbGFuZyc+XG4+ICZcbiAgQ29kZU9wdGlvbnNNZXRhICZcbiAgUGFydGlhbDxDb2RlT3B0aW9uc1NpbmdsZVRoZW1lPEJ1bmRsZWRUaGVtZT4+ICZcbiAgUGFydGlhbDxDb2RlT3B0aW9uc011bHRpcGxlVGhlbWVzPEJ1bmRsZWRUaGVtZT4+O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEhpZ2hsaWdodGVyT3B0aW9ucyA9IHtcbiAgbGFuZ3M6IFtcbiAgICAnanNvbicsXG4gICAgJ3RzJyxcbiAgICAndHN4JyxcbiAgICAnanMnLFxuICAgICdqc3gnLFxuICAgICdodG1sJyxcbiAgICAnY3NzJyxcbiAgICAnYW5ndWxhci1odG1sJyxcbiAgICAnYW5ndWxhci10cycsXG4gIF0sXG4gIHRoZW1lczogWydnaXRodWItZGFyaycsICdnaXRodWItbGlnaHQnXSxcbn07XG5cbmV4cG9ydCBjb25zdCBbXG4gIFNISUtJX0hJR0hMSUdIVEVSX09QVElPTlMsXG4gIFNISUtJX0hJR0hMSUdIVF9PUFRJT05TLFxuICBTSElLSV9DT05UQUlORVJfT1BUSU9OLFxuXSA9IFtcbiAgbmV3IEluamVjdGlvblRva2VuPFNoaWtpSGlnaGxpZ2h0ZXJPcHRpb25zPignU0hJS0lfSElHSExJR0hURVJfT1BUSU9OUycpLFxuICBuZXcgSW5qZWN0aW9uVG9rZW48U2hpa2lIaWdobGlnaHRPcHRpb25zPignU0hJS0lfSElHSExJR0hUX09QVElPTlMnKSxcbiAgbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ1NISUtJX0NPTlRBSU5FUl9PUFRJT04nKSxcbl07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaGlraUhpZ2hsaWdodGVyIGV4dGVuZHMgTWFya2VkQ29udGVudEhpZ2hsaWdodGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRlck9wdGlvbnMgPSBpbmplY3QoU0hJS0lfSElHSExJR0hURVJfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0T3B0aW9ucyA9IGluamVjdChTSElLSV9ISUdITElHSFRfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZXJDb250YWluZXIgPSBpbmplY3QoU0hJS0lfQ09OVEFJTkVSX09QVElPTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzTG9hZE1lcm1haWQgPSBpbmplY3QoTUVSTUFJRF9JTVBPUlRfVE9LRU4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZXIgPSBnZXRIaWdobGlnaHRlcih0aGlzLmhpZ2hsaWdodGVyT3B0aW9ucyk7XG5cbiAgb3ZlcnJpZGUgZ2V0SGlnaGxpZ2h0RXh0ZW5zaW9uKCkge1xuICAgIHJldHVybiBtYXJrZWRTaGlraSh7XG4gICAgICBjb250YWluZXI6IHRoaXMuaGlnaGxpZ2h0ZXJDb250YWluZXIsXG4gICAgICBoaWdobGlnaHQ6IGFzeW5jIChjb2RlLCBsYW5nLCBwcm9wcykgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNMb2FkTWVybWFpZCAmJiBsYW5nID09PSAnbWVybWFpZCcpIHtcbiAgICAgICAgICByZXR1cm4gYDxwcmUgY2xhc3M9XCJtZXJtYWlkXCI+JHtjb2RlfTwvcHJlPmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGNvZGVUb0h0bWwgfSA9IGF3YWl0IHRoaXMuaGlnaGxpZ2h0ZXI7XG4gICAgICAgIHJldHVybiBjb2RlVG9IdG1sKFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgYnkgYHRyYW5zZm9ybWVyTWV0YSpgXG4gICAgICAgICAgICAgIG1ldGE6IHsgX19yYXc6IHByb3BzLmpvaW4oJyAnKSB9LFxuICAgICAgICAgICAgICB0aGVtZXM6IHsgZGFyazogJ2dpdGh1Yi1kYXJrJywgbGlnaHQ6ICdnaXRodWItbGlnaHQnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRPcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,91 @@
1
+ import { MarkedContentHighlighter, withHighlighter } from '@analogjs/content';
2
+ import * as i0 from '@angular/core';
3
+ import { Injectable } from '@angular/core';
4
+ import { markedHighlight } from 'marked-highlight';
5
+ import 'prismjs';
6
+ import 'prismjs/components/prism-bash';
7
+ import 'prismjs/components/prism-css';
8
+ import 'prismjs/components/prism-javascript';
9
+ import 'prismjs/components/prism-json';
10
+ import 'prismjs/components/prism-markup';
11
+ import 'prismjs/components/prism-typescript';
12
+ import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
13
+ import 'prismjs/plugins/toolbar/prism-toolbar';
14
+
15
+ "use strict";
16
+ (function () {
17
+ if (typeof Prism === 'undefined') {
18
+ return;
19
+ }
20
+ Prism.languages.angular = Prism.languages.extend('markup', {
21
+ keyword: /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\b/,
22
+ operator: /\b(?:on|when)\b/,
23
+ number: {
24
+ pattern: /\b(minimum|after)\s+\d+(?:s|ms|)/gi,
25
+ lookbehind: true,
26
+ },
27
+ builtin: {
28
+ pattern: /\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,
29
+ },
30
+ function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
31
+ });
32
+ Prism.languages.ng = Prism.languages.angular;
33
+ })();
34
+
35
+ class PrismHighlighter extends MarkedContentHighlighter {
36
+ augmentCodeBlock(code, lang) {
37
+ const classes = lang.startsWith('diff') && Prism.languages['diff']
38
+ ? `language-${lang} diff-highlight`
39
+ : `language-${lang.replace('diff-', '')}`;
40
+ return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
41
+ }
42
+ getHighlightExtension() {
43
+ return markedHighlight({
44
+ async: true,
45
+ highlight: (code, lang) => {
46
+ let diff = lang?.startsWith('diff-');
47
+ lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
48
+ if (diff && !Prism.languages['diff']) {
49
+ diff = false;
50
+ console.warn(`Notice:
51
+ ---------------------------------------------------------------------------------------
52
+ The \`diff\` language and plugin are not available in the provided setup.
53
+ To enable it, add the following imports your \`main.ts\`:
54
+ import 'prismjs/components/prism-diff';
55
+ import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
56
+ ---------------------------------------------------------------------------------------
57
+ `);
58
+ }
59
+ if (!Prism.languages[lang]) {
60
+ if (lang !== 'mermaid') {
61
+ console.warn(`Notice:
62
+ ---------------------------------------------------------------------------------------
63
+ The requested language '${lang}' is not available in the provided setup.
64
+ To enable it, add the following import your \`main.ts\`:
65
+ import 'prismjs/components/prism-${lang}';
66
+ ---------------------------------------------------------------------------------------
67
+ `);
68
+ }
69
+ return code;
70
+ }
71
+ return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
72
+ },
73
+ });
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
76
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter }); }
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, decorators: [{
79
+ type: Injectable
80
+ }] });
81
+
82
+ function withPrismHighlighter() {
83
+ return withHighlighter({ useClass: PrismHighlighter });
84
+ }
85
+
86
+ /**
87
+ * Generated bundle index. Do not edit.
88
+ */
89
+
90
+ export { PrismHighlighter, withPrismHighlighter };
91
+ //# sourceMappingURL=analogjs-content-prism-highlighter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-content-prism-highlighter.mjs","sources":["../../../../packages/content/prism-highlighter/src/lib/prism/angular.js","../../../../packages/content/prism-highlighter/src/lib/prism-highlighter.ts","../../../../packages/content/prism-highlighter/src/index.ts","../../../../packages/content/prism-highlighter/src/analogjs-content-prism-highlighter.ts"],"sourcesContent":["(function () {\n if (typeof Prism === 'undefined') {\n return;\n }\n\n Prism.languages.angular = Prism.languages.extend('markup', {\n keyword:\n /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\\b/,\n operator: /\\b(?:on|when)\\b/,\n number: {\n pattern: /\\b(minimum|after)\\s+\\d+(?:s|ms|)/gi,\n lookbehind: true,\n },\n builtin: {\n pattern:\n /\\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,\n },\n function:\n /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n });\n\n Prism.languages.ng = Prism.languages.angular;\n})();\n","import { MarkedContentHighlighter } from '@analogjs/content';\nimport { Injectable } from '@angular/core';\nimport { markedHighlight } from 'marked-highlight';\n\nimport 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport './prism/angular';\n\ndeclare const Prism: typeof import('prismjs');\n\n@Injectable()\nexport class PrismHighlighter extends MarkedContentHighlighter {\n override augmentCodeBlock(code: string, lang: string): string {\n const classes =\n lang.startsWith('diff') && Prism.languages['diff']\n ? `language-${lang} diff-highlight`\n : `language-${lang.replace('diff-', '')}`;\n return `<pre class=\"${classes}\"><code class=\"${classes}\">${code}</code></pre>`;\n }\n\n override getHighlightExtension() {\n return markedHighlight({\n async: true,\n highlight: (code: string, lang: string) => {\n let diff = lang?.startsWith('diff-');\n lang = diff ? lang.replace('diff-', '') : lang || 'typescript';\n\n if (diff && !Prism.languages['diff']) {\n diff = false;\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The \\`diff\\` language and plugin are not available in the provided setup.\n To enable it, add the following imports your \\`main.ts\\`:\n import 'prismjs/components/prism-diff';\n import 'prismjs/plugins/diff-highlight/prism-diff-highlight';\n ---------------------------------------------------------------------------------------\n `);\n }\n\n if (!Prism.languages[lang]) {\n if (lang !== 'mermaid') {\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The requested language '${lang}' is not available in the provided setup.\n To enable it, add the following import your \\`main.ts\\`:\n import 'prismjs/components/prism-${lang}';\n ---------------------------------------------------------------------------------------\n `);\n }\n return code;\n }\n return Prism.highlight(\n code,\n diff ? Prism.languages['diff'] : Prism.languages[lang],\n lang\n );\n },\n });\n }\n}\n","import { withHighlighter } from '@analogjs/content';\nimport { Provider } from '@angular/core';\nimport { PrismHighlighter } from './lib/prism-highlighter';\n\nexport { PrismHighlighter };\n\nexport function withPrismHighlighter(): Provider {\n return withHighlighter({ useClass: PrismHighlighter });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,CAAC,YAAA;AACC,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;QAChC,OAAO;KACR;AAED,IAAA,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzD,QAAA,OAAO,EACL,qEAAqE;AACvE,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EACL,qEAAqE;AACxE,SAAA;AACD,QAAA,QAAQ,EACN,mGAAmG;AACtG,KAAA,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;AAC/C,CAAC,GAAG;;ACJE,MAAO,gBAAiB,SAAQ,wBAAwB,CAAA;IACnD,gBAAgB,CAAC,IAAY,EAAE,IAAY,EAAA;AAClD,QAAA,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;cAC9C,CAAY,SAAA,EAAA,IAAI,CAAiB,eAAA,CAAA;cACjC,CAAY,SAAA,EAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAE,CAAC;AAC9C,QAAA,OAAO,eAAe,OAAO,CAAA,eAAA,EAAkB,OAAO,CAAK,EAAA,EAAA,IAAI,eAAe,CAAC;KAChF;IAEQ,qBAAqB,GAAA;AAC5B,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,SAAS,EAAE,CAAC,IAAY,EAAE,IAAY,KAAI;gBACxC,IAAI,IAAI,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACrC,gBAAA,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC;gBAE/D,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;oBACpC,IAAI,GAAG,KAAK,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,CAAA;;;;;;;AAOV,YAAA,CAAA,CAAC,CAAC;iBACN;gBAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAC1B,oBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,CAAC,IAAI,CAAC,CAAA;;8BAEK,IAAI,CAAA;;yCAEO,IAAI,CAAA;;AAE9B,cAAA,CAAA,CAAC,CAAC;qBACN;AACD,oBAAA,OAAO,IAAI,CAAC;iBACb;AACD,gBAAA,OAAO,KAAK,CAAC,SAAS,CACpB,IAAI,EACJ,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EACtD,IAAI,CACL,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACJ;8GA/CU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;SCXK,oBAAoB,GAAA;IAClC,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACzD;;ACRA;;AAEG;;;;"}
@@ -0,0 +1,93 @@
1
+ import { MarkedContentHighlighter, MERMAID_IMPORT_TOKEN, withHighlighter } from '@analogjs/content';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, inject, Injectable } from '@angular/core';
4
+ import markedShiki from 'marked-shiki';
5
+ import { getHighlighter } from 'shiki';
6
+
7
+ const defaultHighlighterOptions = {
8
+ langs: [
9
+ 'json',
10
+ 'ts',
11
+ 'tsx',
12
+ 'js',
13
+ 'jsx',
14
+ 'html',
15
+ 'css',
16
+ 'angular-html',
17
+ 'angular-ts',
18
+ ],
19
+ themes: ['github-dark', 'github-light'],
20
+ };
21
+ const [SHIKI_HIGHLIGHTER_OPTIONS, SHIKI_HIGHLIGHT_OPTIONS, SHIKI_CONTAINER_OPTION,] = [
22
+ new InjectionToken('SHIKI_HIGHLIGHTER_OPTIONS'),
23
+ new InjectionToken('SHIKI_HIGHLIGHT_OPTIONS'),
24
+ new InjectionToken('SHIKI_CONTAINER_OPTION'),
25
+ ];
26
+ class ShikiHighlighter extends MarkedContentHighlighter {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.highlighterOptions = inject(SHIKI_HIGHLIGHTER_OPTIONS);
30
+ this.highlightOptions = inject(SHIKI_HIGHLIGHT_OPTIONS);
31
+ this.highlighterContainer = inject(SHIKI_CONTAINER_OPTION);
32
+ this.hasLoadMermaid = inject(MERMAID_IMPORT_TOKEN, {
33
+ optional: true,
34
+ });
35
+ this.highlighter = getHighlighter(this.highlighterOptions);
36
+ }
37
+ getHighlightExtension() {
38
+ return markedShiki({
39
+ container: this.highlighterContainer,
40
+ highlight: async (code, lang, props) => {
41
+ if (this.hasLoadMermaid && lang === 'mermaid') {
42
+ return `<pre class="mermaid">${code}</pre>`;
43
+ }
44
+ const { codeToHtml } = await this.highlighter;
45
+ return codeToHtml(code, Object.assign({
46
+ lang,
47
+ // required by `transformerMeta*`
48
+ meta: { __raw: props.join(' ') },
49
+ themes: { dark: 'github-dark', light: 'github-light' },
50
+ }, this.highlightOptions));
51
+ },
52
+ });
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
55
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, decorators: [{
58
+ type: Injectable
59
+ }] });
60
+
61
+ function withShikiHighlighter({ highlighter = {}, highlight = {}, container = '%s', } = {}) {
62
+ if (!highlighter.themes) {
63
+ if (highlight.theme) {
64
+ highlighter.themes = [highlight.theme];
65
+ }
66
+ else if (highlight.themes && typeof highlight.themes === 'object') {
67
+ highlighter.themes = Object.values(highlight.themes);
68
+ }
69
+ else {
70
+ highlighter.themes = defaultHighlighterOptions.themes;
71
+ }
72
+ }
73
+ if (!highlighter.langs) {
74
+ highlighter.langs = defaultHighlighterOptions.langs;
75
+ }
76
+ if (highlighter.additionalLangs) {
77
+ highlighter.langs.push(...highlighter.additionalLangs);
78
+ delete highlighter.additionalLangs;
79
+ }
80
+ return [
81
+ { provide: SHIKI_HIGHLIGHTER_OPTIONS, useValue: highlighter },
82
+ { provide: SHIKI_HIGHLIGHT_OPTIONS, useValue: highlight },
83
+ { provide: SHIKI_CONTAINER_OPTION, useValue: container },
84
+ withHighlighter({ useClass: ShikiHighlighter }),
85
+ ];
86
+ }
87
+
88
+ /**
89
+ * Generated bundle index. Do not edit.
90
+ */
91
+
92
+ export { ShikiHighlighter, withShikiHighlighter };
93
+ //# sourceMappingURL=analogjs-content-shiki-highlighter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-content-shiki-highlighter.mjs","sources":["../../../../packages/content/shiki-highlighter/src/lib/shiki-highlighter.ts","../../../../packages/content/shiki-highlighter/src/index.ts","../../../../packages/content/shiki-highlighter/src/analogjs-content-shiki-highlighter.ts"],"sourcesContent":["import {\n MarkedContentHighlighter,\n MERMAID_IMPORT_TOKEN,\n} from '@analogjs/content';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport markedShiki from 'marked-shiki';\nimport {\n type BundledLanguage,\n type BundledTheme,\n type CodeOptionsMeta,\n type CodeOptionsMultipleThemes,\n type CodeOptionsSingleTheme,\n type CodeToHastOptionsCommon,\n getHighlighter,\n} from 'shiki';\n\nexport type ShikiHighlighterOptions = Parameters<typeof getHighlighter>[0];\nexport type ShikiHighlightOptions = Partial<\n Omit<CodeToHastOptionsCommon<BundledLanguage>, 'lang'>\n> &\n CodeOptionsMeta &\n Partial<CodeOptionsSingleTheme<BundledTheme>> &\n Partial<CodeOptionsMultipleThemes<BundledTheme>>;\n\nexport const defaultHighlighterOptions = {\n langs: [\n 'json',\n 'ts',\n 'tsx',\n 'js',\n 'jsx',\n 'html',\n 'css',\n 'angular-html',\n 'angular-ts',\n ],\n themes: ['github-dark', 'github-light'],\n};\n\nexport const [\n SHIKI_HIGHLIGHTER_OPTIONS,\n SHIKI_HIGHLIGHT_OPTIONS,\n SHIKI_CONTAINER_OPTION,\n] = [\n new InjectionToken<ShikiHighlighterOptions>('SHIKI_HIGHLIGHTER_OPTIONS'),\n new InjectionToken<ShikiHighlightOptions>('SHIKI_HIGHLIGHT_OPTIONS'),\n new InjectionToken<string>('SHIKI_CONTAINER_OPTION'),\n];\n\n@Injectable()\nexport class ShikiHighlighter extends MarkedContentHighlighter {\n private readonly highlighterOptions = inject(SHIKI_HIGHLIGHTER_OPTIONS);\n private readonly highlightOptions = inject(SHIKI_HIGHLIGHT_OPTIONS);\n private readonly highlighterContainer = inject(SHIKI_CONTAINER_OPTION);\n private readonly hasLoadMermaid = inject(MERMAID_IMPORT_TOKEN, {\n optional: true,\n });\n private readonly highlighter = getHighlighter(this.highlighterOptions);\n\n override getHighlightExtension() {\n return markedShiki({\n container: this.highlighterContainer,\n highlight: async (code, lang, props) => {\n if (this.hasLoadMermaid && lang === 'mermaid') {\n return `<pre class=\"mermaid\">${code}</pre>`;\n }\n\n const { codeToHtml } = await this.highlighter;\n return codeToHtml(\n code,\n Object.assign(\n {\n lang,\n // required by `transformerMeta*`\n meta: { __raw: props.join(' ') },\n themes: { dark: 'github-dark', light: 'github-light' },\n },\n this.highlightOptions\n )\n );\n },\n });\n }\n}\n","import { withHighlighter } from '@analogjs/content';\nimport { Provider } from '@angular/core';\nimport type { BundledLanguage } from 'shiki';\nimport {\n defaultHighlighterOptions,\n SHIKI_CONTAINER_OPTION,\n SHIKI_HIGHLIGHT_OPTIONS,\n SHIKI_HIGHLIGHTER_OPTIONS,\n ShikiHighlighter,\n type ShikiHighlighterOptions,\n type ShikiHighlightOptions,\n} from './lib/shiki-highlighter';\n\nexport { ShikiHighlighter };\n\nexport interface WithShikiHighlighterOptions {\n highlighter?: Partial<ShikiHighlighterOptions> & {\n additionalLangs?: BundledLanguage[];\n };\n highlight?: ShikiHighlightOptions;\n container?: string;\n}\n\nexport function withShikiHighlighter({\n highlighter = {},\n highlight = {},\n container = '%s',\n}: WithShikiHighlighterOptions = {}): Provider {\n if (!highlighter.themes) {\n if (highlight.theme) {\n highlighter.themes = [highlight.theme];\n } else if (highlight.themes && typeof highlight.themes === 'object') {\n highlighter.themes = Object.values(highlight.themes) as string[];\n } else {\n highlighter.themes = defaultHighlighterOptions.themes;\n }\n }\n\n if (!highlighter.langs) {\n highlighter.langs = defaultHighlighterOptions.langs;\n }\n\n if (highlighter.additionalLangs) {\n highlighter.langs.push(...highlighter.additionalLangs);\n delete highlighter.additionalLangs;\n }\n\n return [\n { provide: SHIKI_HIGHLIGHTER_OPTIONS, useValue: highlighter },\n { provide: SHIKI_HIGHLIGHT_OPTIONS, useValue: highlight },\n { provide: SHIKI_CONTAINER_OPTION, useValue: container },\n withHighlighter({ useClass: ShikiHighlighter }),\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAwBO,MAAM,yBAAyB,GAAG;AACvC,IAAA,KAAK,EAAE;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,MAAM;QACN,KAAK;QACL,cAAc;QACd,YAAY;AACb,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;CACxC,CAAC;AAEK,MAAM,CACX,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACvB,GAAG;IACF,IAAI,cAAc,CAA0B,2BAA2B,CAAC;IACxE,IAAI,cAAc,CAAwB,yBAAyB,CAAC;IACpE,IAAI,cAAc,CAAS,wBAAwB,CAAC;CACrD,CAAC;AAGI,MAAO,gBAAiB,SAAQ,wBAAwB,CAAA;AAD9D,IAAA,WAAA,GAAA;;AAEmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE;AAC7D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AA0BxE,KAAA;IAxBU,qBAAqB,GAAA;AAC5B,QAAA,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,oBAAoB;YACpC,SAAS,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,KAAK,KAAI;gBACrC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,KAAK,SAAS,EAAE;oBAC7C,OAAO,CAAA,qBAAA,EAAwB,IAAI,CAAA,MAAA,CAAQ,CAAC;iBAC7C;gBAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;AAC9C,gBAAA,OAAO,UAAU,CACf,IAAI,EACJ,MAAM,CAAC,MAAM,CACX;oBACE,IAAI;;oBAEJ,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAChC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;AACvD,iBAAA,EACD,IAAI,CAAC,gBAAgB,CACtB,CACF,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACJ;8GAhCU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;SC1BK,oBAAoB,CAAC,EACnC,WAAW,GAAG,EAAE,EAChB,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,IAAI,MACe,EAAE,EAAA;AACjC,IAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvB,QAAA,IAAI,SAAS,CAAC,KAAK,EAAE;YACnB,WAAW,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACxC;aAAM,IAAI,SAAS,CAAC,MAAM,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE;YACnE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAa,CAAC;SAClE;aAAM;AACL,YAAA,WAAW,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC;SACvD;KACF;AAED,IAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACtB,QAAA,WAAW,CAAC,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC;KACrD;AAED,IAAA,IAAI,WAAW,CAAC,eAAe,EAAE;QAC/B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QACvD,OAAO,WAAW,CAAC,eAAe,CAAC;KACpC;IAED,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC7D,QAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE;AACzD,QAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE;AACxD,QAAA,eAAe,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;KAChD,CAAC;AACJ;;ACrDA;;AAEG;;;;"}