@mnaoumov/typescript-dev-toolkit 1.3.1 → 2.1.0

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 (177) hide show
  1. package/README.md +4 -0
  2. package/assets/docs-site/components/ConstructorBlock.astro +16 -0
  3. package/assets/docs-site/components/ImportStatement.astro +12 -0
  4. package/assets/docs-site/components/MemberDetail.astro +101 -0
  5. package/assets/docs-site/components/MethodTable.astro +45 -0
  6. package/assets/docs-site/components/PropertyTable.astro +45 -0
  7. package/assets/docs-site/components/SiteTitle.astro +43 -0
  8. package/assets/docs-site/components/TypeSignature.astro +20 -0
  9. package/assets/docs-site/fonts/inter-latin-400-normal.ttf +0 -0
  10. package/assets/docs-site/fonts/inter-latin-700-normal.ttf +0 -0
  11. package/assets/docs-site/styles/global.css +221 -0
  12. package/dist/lib/cjs/build.cjs +1 -1
  13. package/dist/lib/cjs/build.d.cts +1 -1
  14. package/dist/lib/cjs/commitlint-config.cjs +18 -3
  15. package/dist/lib/cjs/commitlint-config.d.cts +6 -0
  16. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +2 -2
  17. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
  18. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +2 -2
  19. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
  20. package/dist/lib/cjs/docs-site/api-doc-constants.cjs +171 -0
  21. package/dist/lib/cjs/docs-site/api-doc-constants.d.cts +18 -0
  22. package/dist/lib/cjs/docs-site/api-doc-jsdoc.cjs +414 -0
  23. package/dist/lib/cjs/docs-site/api-doc-jsdoc.d.cts +149 -0
  24. package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +377 -0
  25. package/dist/lib/cjs/docs-site/api-doc-link-rendering.d.cts +185 -0
  26. package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +118 -0
  27. package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +36 -0
  28. package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +561 -0
  29. package/dist/lib/cjs/docs-site/api-doc-page-generation.d.cts +159 -0
  30. package/dist/lib/cjs/docs-site/api-doc-route-segments.cjs +42 -0
  31. package/dist/lib/cjs/docs-site/api-doc-route-segments.d.cts +25 -0
  32. package/dist/lib/cjs/docs-site/api-doc-settings.cjs +47 -0
  33. package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +53 -0
  34. package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +288 -0
  35. package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +75 -0
  36. package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +281 -0
  37. package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +178 -0
  38. package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +157 -0
  39. package/dist/lib/cjs/docs-site/api-doc-type-merging.d.cts +51 -0
  40. package/dist/lib/cjs/docs-site/api-doc-types.cjs +22 -0
  41. package/dist/lib/cjs/docs-site/api-doc-types.d.cts +157 -0
  42. package/dist/lib/cjs/docs-site/api-docs.cjs +143 -0
  43. package/dist/lib/cjs/docs-site/api-docs.d.cts +34 -0
  44. package/dist/lib/cjs/docs-site/astro-config.cjs +169 -0
  45. package/dist/lib/cjs/docs-site/astro-config.d.cts +23 -0
  46. package/dist/lib/cjs/docs-site/docs-links.cjs +123 -0
  47. package/dist/lib/cjs/docs-site/docs-links.d.cts +32 -0
  48. package/dist/lib/cjs/docs-site/docs-site-assets.cjs +64 -0
  49. package/dist/lib/cjs/docs-site/docs-site-assets.d.cts +23 -0
  50. package/dist/lib/cjs/docs-site/docs-site-commands.cjs +72 -0
  51. package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +29 -0
  52. package/dist/lib/cjs/docs-site/docs-site-config.cjs +122 -0
  53. package/dist/lib/cjs/docs-site/docs-site-config.d.cts +162 -0
  54. package/dist/lib/cjs/docs-site/index.cjs +116 -0
  55. package/dist/lib/cjs/docs-site/index.d.cts +26 -0
  56. package/dist/lib/cjs/docs-site/link-check.cjs +197 -0
  57. package/dist/lib/cjs/docs-site/link-check.d.cts +163 -0
  58. package/dist/lib/cjs/docs-site/og-image-page.cjs +45 -0
  59. package/dist/lib/cjs/docs-site/og-image-page.d.cts +15 -0
  60. package/dist/lib/cjs/docs-site/og-image.cjs +326 -0
  61. package/dist/lib/cjs/docs-site/og-image.d.cts +70 -0
  62. package/dist/lib/cjs/docs-site/og-images.cjs +170 -0
  63. package/dist/lib/cjs/docs-site/og-images.d.cts +41 -0
  64. package/dist/lib/cjs/docs-site/route-data.cjs +47 -0
  65. package/dist/lib/cjs/docs-site/route-data.d.cts +14 -0
  66. package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +97 -0
  67. package/dist/lib/cjs/docs-site/satteri-github-alerts.d.cts +31 -0
  68. package/dist/lib/cjs/docs-site/satteri-relative-links.cjs +87 -0
  69. package/dist/lib/cjs/docs-site/satteri-relative-links.d.cts +29 -0
  70. package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +51 -0
  71. package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +38 -0
  72. package/dist/lib/cjs/index.cjs +4 -1
  73. package/dist/lib/cjs/index.d.cts +1 -0
  74. package/dist/lib/cjs/library-build.cjs +1 -1
  75. package/dist/lib/cjs/library-build.d.cts +2 -2
  76. package/dist/lib/cjs/linters/eslint-config.cjs +17 -17
  77. package/dist/lib/cjs/linters/eslint-config.d.cts +1 -7
  78. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +2 -2
  79. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +5 -8
  80. package/dist/lib/cjs/package-manager.cjs +2 -2
  81. package/dist/lib/esm/build.d.mts +1 -1
  82. package/dist/lib/esm/build.mjs +1 -1
  83. package/dist/lib/esm/commitlint-config.d.mts +6 -0
  84. package/dist/lib/esm/commitlint-config.mjs +7 -3
  85. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
  86. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
  87. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
  88. package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
  89. package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
  90. package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
  91. package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
  92. package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
  93. package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
  94. package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
  95. package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
  96. package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
  97. package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
  98. package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
  99. package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
  100. package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
  101. package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
  102. package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
  103. package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
  104. package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
  105. package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
  106. package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
  107. package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
  108. package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
  109. package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
  110. package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
  111. package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
  112. package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
  113. package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
  114. package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
  115. package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
  116. package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
  117. package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
  118. package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
  119. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
  120. package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
  121. package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
  122. package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
  123. package/dist/lib/esm/docs-site/index.d.mts +26 -0
  124. package/dist/lib/esm/docs-site/index.mjs +58 -0
  125. package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
  126. package/dist/lib/esm/docs-site/link-check.mjs +166 -0
  127. package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
  128. package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
  129. package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
  130. package/dist/lib/esm/docs-site/og-image.mjs +292 -0
  131. package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
  132. package/dist/lib/esm/docs-site/og-images.mjs +156 -0
  133. package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
  134. package/dist/lib/esm/docs-site/route-data.mjs +23 -0
  135. package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
  136. package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
  137. package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
  138. package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
  139. package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
  140. package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
  141. package/dist/lib/esm/index.d.mts +1 -0
  142. package/dist/lib/esm/index.mjs +3 -1
  143. package/dist/lib/esm/library-build.d.mts +2 -2
  144. package/dist/lib/esm/library-build.mjs +1 -1
  145. package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
  146. package/dist/lib/esm/linters/eslint-config.mjs +17 -17
  147. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
  148. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
  149. package/dist/lib/esm/package-manager.mjs +2 -2
  150. package/docs-site/api-doc-constants/package.json +6 -0
  151. package/docs-site/api-doc-jsdoc/package.json +6 -0
  152. package/docs-site/api-doc-link-rendering/package.json +6 -0
  153. package/docs-site/api-doc-package-sites/package.json +6 -0
  154. package/docs-site/api-doc-page-generation/package.json +6 -0
  155. package/docs-site/api-doc-route-segments/package.json +6 -0
  156. package/docs-site/api-doc-settings/package.json +6 -0
  157. package/docs-site/api-doc-source-processing/package.json +6 -0
  158. package/docs-site/api-doc-text-utils/package.json +6 -0
  159. package/docs-site/api-doc-type-merging/package.json +6 -0
  160. package/docs-site/api-doc-types/package.json +6 -0
  161. package/docs-site/api-docs/package.json +6 -0
  162. package/docs-site/astro-config/package.json +6 -0
  163. package/docs-site/docs-links/package.json +6 -0
  164. package/docs-site/docs-site-assets/package.json +6 -0
  165. package/docs-site/docs-site-commands/package.json +6 -0
  166. package/docs-site/docs-site-config/package.json +6 -0
  167. package/docs-site/index/package.json +6 -0
  168. package/docs-site/link-check/package.json +6 -0
  169. package/docs-site/og-image/package.json +6 -0
  170. package/docs-site/og-image-page/package.json +6 -0
  171. package/docs-site/og-images/package.json +6 -0
  172. package/docs-site/package.json +6 -0
  173. package/docs-site/route-data/package.json +6 -0
  174. package/docs-site/satteri-github-alerts/package.json +6 -0
  175. package/docs-site/satteri-relative-links/package.json +6 -0
  176. package/docs-site/unrendered-alerts/package.json +6 -0
  177. package/package.json +75 -5
package/README.md CHANGED
@@ -8,6 +8,10 @@ Generic tooling for TypeScript projects: the build, lint, format, spellcheck, te
8
8
  npm install --save-dev @mnaoumov/typescript-dev-toolkit
9
9
  ```
10
10
 
11
+ ## Documentation
12
+
13
+ The guides and the API reference are at <https://mnaoumov.dev/typescript-dev-toolkit/>.
14
+
11
15
  ## Where it fits
12
16
 
13
17
  It is one of five packages that replace [`obsidian-dev-utils`](https://github.com/mnaoumov/obsidian-dev-utils): [`@mnaoumov/typescript-lib`](https://github.com/mnaoumov/typescript-lib), [`@mnaoumov/typescript-test-toolkit`](https://github.com/mnaoumov/typescript-test-toolkit), [`@mnaoumov/typescript-dev-toolkit`](https://github.com/mnaoumov/typescript-dev-toolkit), [`@mnaoumov/obsidian-lib`](https://github.com/mnaoumov/obsidian-lib) and [`@mnaoumov/obsidian-dev-toolkit`](https://github.com/mnaoumov/obsidian-dev-toolkit). It depends on [`@mnaoumov/typescript-lib`](https://github.com/mnaoumov/typescript-lib). It moved here from that repository with its history.
@@ -0,0 +1,16 @@
1
+ ---
2
+ import { Code } from '@astrojs/starlight/components';
3
+
4
+ interface Props {
5
+ description?: string;
6
+ signature: string;
7
+ }
8
+
9
+ const { signature, description } = Astro.props;
10
+ ---
11
+
12
+ <div class="filterable-block" data-inherited="false">
13
+ <h2><span class="icon-own" title="Defined on this type"></span> Constructor</h2>
14
+ <Code code={signature} lang="ts" />
15
+ {description && <p set:html={description} />}
16
+ </div>
@@ -0,0 +1,12 @@
1
+ ---
2
+ import { Code } from '@astrojs/starlight/components';
3
+
4
+ interface Props {
5
+ text: string;
6
+ }
7
+
8
+ const { text } = Astro.props;
9
+ ---
10
+
11
+ <p><strong>Import:</strong></p>
12
+ <Code code={text} lang="ts" />
@@ -0,0 +1,101 @@
1
+ ---
2
+ import { Code } from '@astrojs/starlight/components';
3
+
4
+ /** A rendered API parameter. */
5
+ interface ParameterInfo {
6
+ description: string;
7
+ name: string;
8
+ type: string;
9
+ }
10
+
11
+ interface Props {
12
+ description?: string;
13
+ examples?: string[];
14
+ parameters?: ParameterInfo[];
15
+ remarks?: string;
16
+ returnDescription?: string;
17
+ returnType?: string;
18
+ signature?: string;
19
+ since?: string;
20
+ type?: string;
21
+ }
22
+
23
+ const {
24
+ type,
25
+ description,
26
+ signature,
27
+ parameters = [],
28
+ returnType,
29
+ returnDescription,
30
+ remarks,
31
+ examples = [],
32
+ since
33
+ } = Astro.props;
34
+
35
+ /** Strip markdown code fence markers and extract language + code */
36
+ function parseCodeFence(raw: string): { code: string; lang: string } {
37
+ const match = /^```(\w*)\n([\s\S]*?)(?:\n```)?$/.exec(raw.trim());
38
+ if (match) {
39
+ return { code: match[2]?.trimEnd() ?? '', lang: match[1] || 'ts' };
40
+ }
41
+ return { code: raw.trim(), lang: 'ts' };
42
+ }
43
+ const parsedExamples = examples.map(parseCodeFence);
44
+ ---
45
+
46
+ {type && <p><strong>Type:</strong> <span set:html={type} /></p>}
47
+
48
+ {description && <Fragment set:html={description} />}
49
+
50
+ {signature && (
51
+ <>
52
+ <p><strong>Signature:</strong></p>
53
+ <Code code={signature} lang="ts" />
54
+ </>
55
+ )}
56
+
57
+ {parameters.length > 0 && (
58
+ <>
59
+ <p><strong>Parameters:</strong></p>
60
+ <table>
61
+ <thead>
62
+ <tr>
63
+ <th style="text-align: left">Parameter</th>
64
+ <th style="text-align: left">Type</th>
65
+ <th style="text-align: left">Description</th>
66
+ </tr>
67
+ </thead>
68
+ <tbody>
69
+ {parameters.map((param) => (
70
+ <tr>
71
+ <td style="text-align: left">{param.name}</td>
72
+ <td style="text-align: left" set:html={param.type} />
73
+ <td style="text-align: left" set:html={param.description} />
74
+ </tr>
75
+ ))}
76
+ </tbody>
77
+ </table>
78
+ </>
79
+ )}
80
+
81
+ {returnType && (
82
+ <p><strong>Returns:</strong> <span set:html={returnType} />
83
+ {returnDescription && <> — <span set:html={returnDescription} /></>}
84
+ </p>
85
+ )}
86
+
87
+ {since && <p><strong>Since:</strong> {since}</p>}
88
+
89
+ {remarks && (
90
+ <>
91
+ <p><strong>Remarks:</strong></p>
92
+ <Fragment set:html={remarks} />
93
+ </>
94
+ )}
95
+
96
+ {parsedExamples.map(({ code, lang }) => (
97
+ <>
98
+ <p><strong>Example:</strong></p>
99
+ <Code code={code} lang={lang} />
100
+ </>
101
+ ))}
@@ -0,0 +1,45 @@
1
+ ---
2
+ interface MethodRow {
3
+ description: string;
4
+ href: string;
5
+ inheritedFrom?: string;
6
+ returns: string;
7
+ signature: string;
8
+ }
9
+
10
+ interface Props {
11
+ rows: MethodRow[];
12
+ }
13
+
14
+ const { rows } = Astro.props;
15
+ ---
16
+
17
+ <h2>Methods</h2>
18
+ <table>
19
+ <colgroup>
20
+ <col style="width: 20%" />
21
+ <col style="width: 30%" />
22
+ <col style="width: 50%" />
23
+ </colgroup>
24
+ <thead>
25
+ <tr>
26
+ <th style="text-align: left">Method</th>
27
+ <th style="text-align: left">Returns</th>
28
+ <th style="text-align: left">Description</th>
29
+ </tr>
30
+ </thead>
31
+ <tbody>
32
+ {rows.map((row) => {
33
+ const inherited = row.inheritedFrom
34
+ ? `<br/><em>(Inherited from ${row.inheritedFrom})</em>`
35
+ : '';
36
+ return (
37
+ <tr>
38
+ <td style="text-align: left">{row.href ? <a href={row.href} set:html={row.signature} /> : <span set:html={row.signature} />}</td>
39
+ <td style="text-align: left" set:html={row.returns} />
40
+ <td style="text-align: left" set:html={row.description + inherited} />
41
+ </tr>
42
+ );
43
+ })}
44
+ </tbody>
45
+ </table>
@@ -0,0 +1,45 @@
1
+ ---
2
+ interface PropertyRow {
3
+ description: string;
4
+ href: string;
5
+ inheritedFrom?: string;
6
+ name: string;
7
+ type: string;
8
+ }
9
+
10
+ interface Props {
11
+ rows: PropertyRow[];
12
+ }
13
+
14
+ const { rows } = Astro.props;
15
+ ---
16
+
17
+ <h2>Properties</h2>
18
+ <table>
19
+ <colgroup>
20
+ <col style="width: 20%" />
21
+ <col style="width: 30%" />
22
+ <col style="width: 50%" />
23
+ </colgroup>
24
+ <thead>
25
+ <tr>
26
+ <th style="text-align: left">Property</th>
27
+ <th style="text-align: left">Type</th>
28
+ <th style="text-align: left">Description</th>
29
+ </tr>
30
+ </thead>
31
+ <tbody>
32
+ {rows.map((row) => {
33
+ const inherited = row.inheritedFrom
34
+ ? `<br/><em>(Inherited from ${row.inheritedFrom})</em>`
35
+ : '';
36
+ return (
37
+ <tr>
38
+ <td style="text-align: left">{row.href ? <a href={row.href}>{row.name}</a> : row.name}</td>
39
+ <td style="text-align: left" set:html={row.type} />
40
+ <td style="text-align: left" set:html={row.description + inherited} />
41
+ </tr>
42
+ );
43
+ })}
44
+ </tbody>
45
+ </table>
@@ -0,0 +1,43 @@
1
+ ---
2
+ /**
3
+ * Site-title override: renders the title Starlight passes in, plus the documented package's version as an
4
+ * always-visible badge. `defineDocsSiteConfig` reads the version from the site's root package.json and defines it
5
+ * as `import.meta.env.DOCS_SITE_PACKAGE_VERSION`.
6
+ */
7
+ const { siteTitle, siteTitleHref } = Astro.locals.starlightRoute;
8
+ const version = `v${import.meta.env.DOCS_SITE_PACKAGE_VERSION}`;
9
+ ---
10
+
11
+ <a href={siteTitleHref} class="site-title sl-flex">
12
+ <span translate="no">{siteTitle}</span>
13
+ <span class="site-version" translate="no">{version}</span>
14
+ </a>
15
+
16
+ <style>
17
+ @layer starlight.core {
18
+ .site-title {
19
+ align-items: center;
20
+ gap: 0.5rem;
21
+ font-size: var(--sl-text-h4);
22
+ font-weight: 600;
23
+ color: var(--sl-color-text-accent);
24
+ text-decoration: none;
25
+ white-space: nowrap;
26
+ min-width: 0;
27
+ }
28
+ span:first-child {
29
+ overflow: hidden;
30
+ text-overflow: ellipsis;
31
+ }
32
+ .site-version {
33
+ flex: none;
34
+ font-size: var(--sl-text-xs);
35
+ font-weight: 500;
36
+ line-height: 1.5;
37
+ color: var(--sl-color-gray-1);
38
+ background: var(--sl-color-gray-6);
39
+ padding: 0.05rem 0.45rem;
40
+ border-radius: 999px;
41
+ }
42
+ }
43
+ </style>
@@ -0,0 +1,20 @@
1
+ ---
2
+ import { Code } from '@astrojs/starlight/components';
3
+
4
+ interface Props {
5
+ extends?: string[];
6
+ implements?: string[];
7
+ kind: 'class' | 'interface';
8
+ name: string;
9
+ typeParams?: string[];
10
+ }
11
+
12
+ const { kind, name, typeParams = [], extends: baseTypes = [], implements: implTypes = [] } = Astro.props;
13
+ const typeParamsStr = typeParams.length > 0 ? `<${typeParams.join(', ')}>` : '';
14
+ const extendsClause = baseTypes.length > 0 ? ` extends ${baseTypes.join(', ')}` : '';
15
+ const implementsClause = implTypes.length > 0 ? ` implements ${implTypes.join(', ')}` : '';
16
+ const signature = `export ${kind} ${name}${typeParamsStr}${extendsClause}${implementsClause}`;
17
+ ---
18
+
19
+ <p><strong>Signature:</strong></p>
20
+ <Code code={signature} lang="ts" />
@@ -0,0 +1,221 @@
1
+ :root {
2
+ --icon-size-med: 20px;
3
+
4
+ .starlight-aside--todo {
5
+ --sl-color-asides-text-accent: var(--sl-color-red-high);
6
+ --sl-color-asides-border: var(--sl-color-red);
7
+ background-color: var(--sl-color-red-low);
8
+ }
9
+ }
10
+
11
+ :root[data-theme='dark'] {
12
+ --sl-color-accent-high: hsl(255, 92%, 82%);
13
+ --sl-color-accent: hsl(258, 85%, 68%);
14
+ --sl-color-accent-low: hsl(260, 42%, 38%);
15
+ --sl-hero-color: hsla(258, 85%, 68%, 30%);
16
+
17
+ .starlight-aside--tutorial {
18
+ --sl-color-asides-text-accent: #157AFF;
19
+ --sl-color-asides-border: #21385a;
20
+ background-color: #1e314c;
21
+ }
22
+
23
+ .starlight-aside--remark {
24
+ --sl-color-asides-text-accent: #ea9f52;
25
+ --sl-color-asides-border: #af6b32;
26
+ background-color: #302418;
27
+ }
28
+
29
+ .starlight-aside--todo {
30
+ --sl-color-asides-text-accent: #d2c7ff;
31
+ --sl-color-asides-border: #291761;
32
+ background-color: #321c81;
33
+ }
34
+
35
+ .starlight-aside--note {
36
+ --sl-color-asides-text-accent: #85d4da;
37
+ --sl-color-asides-border: #5eb5bd;
38
+ background-color: #416263;
39
+ }
40
+ }
41
+
42
+ :root[data-theme='light'] {
43
+ --sl-color-accent-high: hsl(260, 55%, 32%);
44
+ --sl-color-accent: hsl(258, 66%, 55%);
45
+ --sl-color-accent-low: hsl(256, 82%, 84%);
46
+ --sl-hero-color: hsla(258, 66%, 55%, 25%);
47
+
48
+ .starlight-aside--tutorial {
49
+ --sl-color-asides-text-accent: #086DDD;
50
+ --sl-color-asides-border: #1e5a97;
51
+ background-color: #E6F0FB;
52
+ }
53
+
54
+ .starlight-aside--remark {
55
+ --sl-color-asides-text-accent: #EC7500;
56
+ --sl-color-asides-border: #7a390c;
57
+ background-color: #ffead5;
58
+ }
59
+
60
+ .starlight-aside--todo {
61
+ --sl-color-asides-text-accent: #6844dc;
62
+ --sl-color-asides-border: #5f3ad6;
63
+ background-color: #ddd5f8;
64
+ }
65
+
66
+ .starlight-aside--note {
67
+ --sl-color-asides-text-accent: #0d9a99;
68
+ --sl-color-asides-border: #21a6a5;
69
+ background-color: #cdeded;
70
+ }
71
+ }
72
+
73
+ /* Prevent horizontal scroll on mobile — any overflowing element (tables, code blocks,
74
+ long type names) is clipped at the page level. Individual containers like tables still
75
+ scroll horizontally via their own overflow:auto. Using `clip` instead of `hidden` avoids
76
+ creating a new scroll container. */
77
+ html,
78
+ body {
79
+ overflow-x: clip;
80
+ }
81
+
82
+ /* Widen content area for API reference tables */
83
+ :root {
84
+ --sl-content-width: 65rem;
85
+ --sl-content-pad-x: 1rem;
86
+ }
87
+
88
+ /* Ensure long content scrolls horizontally within its container on mobile */
89
+ .sl-markdown-content pre {
90
+ overflow-x: auto;
91
+ }
92
+
93
+ /* API reference tables */
94
+ .sl-markdown-content table {
95
+ width: 100%;
96
+ display: block;
97
+ overflow-x: auto;
98
+ }
99
+
100
+ .sl-markdown-content table th,
101
+ .sl-markdown-content table td {
102
+ text-align: left;
103
+ }
104
+
105
+ /* Hide graph view on API pages — not useful for reference docs */
106
+ .slsg-graph-panel { /* cspell:disable-line */
107
+ display: none;
108
+ }
109
+
110
+ .group-label {
111
+ text-transform: none;
112
+ }
113
+
114
+
115
+ /* Hero style */
116
+ [data-has-hero] .page {
117
+ height: 100%;
118
+ background:
119
+ linear-gradient(215deg, var(--sl-hero-color), transparent 40%),
120
+ radial-gradient(var(--sl-hero-color), transparent 40%) no-repeat -80vw -70vh / 150vw 200vh,
121
+ radial-gradient(var(--sl-hero-color), transparent 65%) no-repeat 50% calc(100% + 20rem) /
122
+ 150rem 30rem;
123
+ }
124
+
125
+ [data-has-hero] header {
126
+ border-bottom: 1px solid transparent;
127
+ background-color: transparent;
128
+ -webkit-backdrop-filter: blur(16px);
129
+ backdrop-filter: blur(16px);
130
+ }
131
+
132
+
133
+ [data-has-hero] .hero > img {
134
+ filter: drop-shadow(0 0 3rem var(--sl-hero-color));
135
+ }
136
+
137
+
138
+ .svg-embed {
139
+ display: flex;
140
+ }
141
+
142
+ .starlight-aside {
143
+ --sl-color-asides-text-accent: var(--sl-color-red-high);
144
+ --sl-color-asides-border: var(--sl-color-red);
145
+ background-color: var(--sl-color-red-low);
146
+ border-radius: 8px;
147
+ border: unset;
148
+
149
+ .starlight-aside__content:has(hr) {
150
+ display: none;
151
+ }
152
+
153
+ svg {
154
+ width: var(--icon-size-med);
155
+ height: var(--icon-size-med);
156
+ }
157
+ }
158
+
159
+ .sl-separator {
160
+ display: flex;
161
+ }
162
+
163
+ .sl-separator:after {
164
+ content: "";
165
+ height: 2rem;
166
+ border-inline-end: 1px solid var(--sl-color-gray-5);
167
+ }
168
+
169
+ .obsidian-docs-link {
170
+ text-decoration: none;
171
+ color: var(--sl-color-accent);
172
+ font-weight: 600;
173
+ padding: 0 8px;
174
+ }
175
+
176
+ .code-location-icon {
177
+ display: flex;
178
+ margin-left: auto;
179
+ }
180
+
181
+ .code-location-text {
182
+ display: flex;
183
+ flex-direction: row;
184
+ align-items: center;
185
+ gap: 0.5rem;
186
+ justify-content: flex-end;
187
+ }
188
+
189
+ h3, h4, h5 {
190
+ display: flex;
191
+ }
192
+
193
+
194
+ .content-badge {
195
+ color: white;
196
+ background-color: var(--badge-color, var(--sl-color-accent));
197
+ border-radius: 4px;
198
+ padding: 0.1rem 0.25rem;
199
+ font-weight: 800;
200
+ font-size: 0.75rem;
201
+ }
202
+
203
+ .content-badge--devtools {
204
+ --badge-color: var(--sl-color-accent);
205
+ }
206
+ .content-badge--css {
207
+ --badge-color: var(--sl-color-red);
208
+ }
209
+ .content-badge--js {
210
+ --badge-color: var(--sl-color-purple);
211
+ }
212
+ .content-badge--electron {
213
+ --badge-color: var(--sl-color-orange);
214
+ }
215
+ .content-badge--html {
216
+ --badge-color: var(--sl-color-blue);
217
+ }
218
+
219
+ .content-badge--warning {
220
+ --badge-color: var(--sl-color-red);
221
+ }
@@ -166,4 +166,4 @@ function shouldKeepProjectFile(params) {
166
166
  buildCompileTypeScript,
167
167
  buildTemplates
168
168
  });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBzdGF0aWMgYXNzZXRzIGFuZCBjbGVhbmluZ1xuICogdGhlIGJ1aWxkIG91dHB1dCBmb2xkZXIuIEl0IGluY2x1ZGVzIGZ1bmN0aW9ucyB0byBjb3B5IHN0YXRpYyBmaWxlcyB0byB0aGUgZGlzdHJpYnV0aW9uIGZvbGRlclxuICogYW5kIHRvIHJlbW92ZSB0aGUgZXhpc3RpbmcgYnVpbGQgb3V0cHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUGFja2FnZUpzb24sXG4gIFRzQ29uZmlnSnNvblxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyB0cmltU3RhcnQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7XG4gIGNwLFxuICBnbG9iLFxuICBybVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHtcbiAgY2hlY2tQcm9qZWN0VHlwZXMsXG4gIHBhcnNlVHNDb25maWcsXG4gIHRvQ2Fub25pY2FsXG59IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyByZWFkZGlyUG9zaXggfSBmcm9tICcuL2ZzLnRzJztcbmltcG9ydCB7IHJlYWRKc29uIH0gZnJvbSAnLi9qc29uLnRzJztcbmltcG9ydCB7XG4gIG5wbVJ1bk9wdGlvbmFsLFxuICBOcG1SdW5PcHRpb25hbFJlc3VsdFxufSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBkaXN0cmlidXRpb24gZm9sZGVyIGFuZCBpdHMgY29udGVudHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBlbnRpcmUgZGlzdHJpYnV0aW9uIGZvbGRlciB0byBlbnN1cmUgYSBjbGVhbiBidWlsZCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBoYXMgYmVlbiByZW1vdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDbGVhbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcm0oUmVwb1BhdGhzLkRpc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyB0aGUgY29kZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoYXdhaXQgbnBtUnVuT3B0aW9uYWwoJ2J1aWxkOmNvbXBpbGU6c3ZlbHRlJykgPT09IE5wbVJ1bk9wdGlvbmFsUmVzdWx0LlNraXBwZWQpIHtcbiAgICBhd2FpdCBidWlsZENvbXBpbGVTdmVsdGUoKTtcbiAgfVxuICBpZiAoYXdhaXQgbnBtUnVuT3B0aW9uYWwoJ2J1aWxkOmNvbXBpbGU6dHlwZXNjcmlwdCcpID09PSBOcG1SdW5PcHRpb25hbFJlc3VsdC5Ta2lwcGVkKSB7XG4gICAgYXdhaXQgYnVpbGRDb21waWxlVHlwZVNjcmlwdCgpO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZXMgdGhlIFN2ZWx0ZSBjb2RlLlxuICpcbiAqIFRoZSBwcm9qZWN0J3MgU3ZlbHRlIGZpbGVzIGFyZSBmb3VuZCBieSBnbG9iYmluZyB0aGUgU3ZlbHRlIGV4dGVuc2lvbnMgZGlyZWN0bHkuIEdsb2JiaW5nIHRoZSB0c2NvbmZpZ1xuICogYGluY2x1ZGVgIHBhdHRlcm5zIGFuZCBmaWx0ZXJpbmcgdGhhdCBsaXN0IHdvdWxkIG5ldmVyIG1hdGNoOiBgaW5jbHVkZWAgbGlzdHMgVHlwZVNjcmlwdCBnbG9ic1xuICogKGAuL3NyYy8qKlxcLyoudHNgLCDigKYpLCBzbyBubyBgLnN2ZWx0ZWAgcGF0aCBjYW4gZXZlciBhcHBlYXIgaW4gaXQgYW5kIHRoZSBjaGVjayB3b3VsZCBhbHdheXMgYmUgc2tpcHBlZC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICogQHRocm93cyBJZiB0aGUgcHJvamVjdCBoYXMgU3ZlbHRlIGZpbGVzIGJ1dCBkb2VzIG5vdCBkZWNsYXJlIGBzdmVsdGUtY2hlY2tgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlU3ZlbHRlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0c0NvbmZpZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24gfSk7XG4gIGNvbnN0IHRzQ29uZmlnID0gYXdhaXQgcmVhZEpzb248VHNDb25maWdKc29uPih0c0NvbmZpZ1BhdGgpO1xuICBjb25zdCBzdmVsdGVGaWxlcyA9IGF3YWl0IHRvQXJyYXkoZ2xvYihTVkVMVEVfRklMRV9QQVRURVJOUywge1xuICAgIGN3ZDogcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciB9KSxcbiAgICBleGNsdWRlOiBbLi4uU1ZFTFRFX0ZJTEVfRVhDTFVERV9QQVRURVJOUywgLi4udHNDb25maWcuZXhjbHVkZSA/PyBbXV1cbiAgfSkpO1xuXG4gIGNvbnN0IFtmaXJzdFN2ZWx0ZUZpbGVdID0gc3ZlbHRlRmlsZXM7XG5cbiAgaWYgKGZpcnN0U3ZlbHRlRmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ2J1aWxkOmJ1aWxkQ29tcGlsZVN2ZWx0ZScpKCdObyBTdmVsdGUgZmlsZXMgZm91bmQgaW4gdGhlIHByb2plY3QsIHNraXBwaW5nIFN2ZWx0ZSBjb21waWxhdGlvbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG5cbiAgaWYgKCFjaGVja1N2ZWx0ZUNoZWNrRGVjbGFyZWQocGFja2FnZUpzb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZvdW5kIFN2ZWx0ZSBmaWxlKHMpIGluIHRoZSBwcm9qZWN0IChlLmcuICR7Zmlyc3RTdmVsdGVGaWxlfSksIGJ1dCBcXGAke1NWRUxURV9DSEVDS19QQUNLQUdFX05BTUV9XFxgIGlzIG5vdCBkZWNsYXJlZCBpbiBwYWNrYWdlLmpzb24uYFxuICAgICAgICArIGAgQWRkIFxcYCR7U1ZFTFRFX0NIRUNLX1BBQ0tBR0VfTkFNRX1cXGAgYXMgYSBkZXZEZXBlbmRlbmN5IHRvIHR5cGUtY2hlY2sgdGhlIFN2ZWx0ZSBjb2RlLmBcbiAgICApO1xuICB9XG5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiBTVkVMVEVfQ0hFQ0tfUEFDS0FHRV9OQU1FIH0pLCAnLS10c2NvbmZpZycsIFJlcG9QYXRocy5Uc0NvbmZpZ0pzb25dKTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyB0aGUgVHlwZVNjcmlwdCBjb2RlLlxuICpcbiAqIFRoZSBnZW5lcmFsIGB0c2NgIHBhc3MgcnVucyB3aXRoIGBza2lwTGliQ2hlY2s6IHRydWVgIChjb25maWd1cmVkIGluIGB0c2NvbmZpZy5qc29uYCkgc28gaXQgZG9lc1xuICogbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wuIEFmdGVyd2FyZHMsIHtAbGluayBhcmVQcm9qZWN0VHlwZXNWYWxpZH1cbiAqIHJlLXJ1bnMgdGhlIHR5cGUtY2hlY2sgaW4tbWVtb3J5IHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgLCByZXBvcnRpbmcgb25seSBkaWFnbm9zdGljcyBmcm9tIHRoZVxuICogZmlsZXMgd2Ugb3duLCBzbyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvciBhcmUgc3RpbGwgZnVsbHkgdmFsaWRhdGVkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29kZSBjb21waWxlcyBzdWNjZXNzZnVsbHkuXG4gKiBAdGhyb3dzIElmIHRoZSBwcm9qZWN0J3Mgb3duIGRlY2xhcmF0aW9ucyBmYWlsIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENvbXBpbGVUeXBlU2NyaXB0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICd0c2MnIH0pLCAnLS1idWlsZCcsICctLWZvcmNlJ10pO1xuXG4gIGlmICghYXJlUHJvamVjdFR5cGVzVmFsaWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvcGllcyBhbGwgdGVtcGxhdGUgZmlsZXMgZnJvbSB0aGUgdGVtcGxhdGVzIGZvbGRlciB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGVcbiAqIGRpc3RyaWJ1dGlvbiBmb2xkZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSByZWFkcyB0aGUgY29udGVudHMgb2YgdGhlIHRlbXBsYXRlcyBmb2xkZXIgYW5kIGNvcGllcyBlYWNoIGZpbGUgdG8gdGhlXG4gKiBjb3JyZXNwb25kaW5nIHBhdGggdW5kZXIge0BsaW5rIFJlcG9QYXRocy5EaXN0VGVtcGxhdGVzfSwgc28gY29uc3VtZXJzIGNhbiBjb3B5IHRoZVxuICogdGVtcGxhdGVzIGZyb20gYG5vZGVfbW9kdWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMvZGlzdC90ZW1wbGF0ZXNgLiBBIHRyYWlsaW5nIGAudGVtcGxhdGVgIG9uIGEgc291cmNlXG4gKiBmaWxlIG5hbWUgaXMgc3RyaXBwZWQgaW4gdGhlIGRlc3RpbmF0aW9uIChlLmcuIGBlc2xpbnQuY29uZmlnLm10cy50ZW1wbGF0ZWAgaXMgY29waWVkIGFzXG4gKiBgZXNsaW50LmNvbmZpZy5tdHNgKSwgc28gYW4gYWN0aXZlIGNvbmZpZyB0ZW1wbGF0ZSBjYW4gbGl2ZSBpbiB0aGUgcmVwbyB1bmRlciBhIG5hbWUgdGhhdCB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgdG9vbCBkb2VzIG5vdCBhdXRvLWRpc2NvdmVyLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVGVtcGxhdGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlRlbXBsYXRlcywgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0ZpbGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IHRyaW1TdGFydCh7XG4gICAgICAkc3RyaW5nOiBqb2luKGRpcmVudC5wYXJlbnRQYXRoLCBkaXJlbnQubmFtZSksXG4gICAgICBwcmVmaXg6IGAke1JlcG9QYXRocy5UZW1wbGF0ZXN9L2BcbiAgICB9KTtcbiAgICBjb25zdCBkZXN0aW5hdGlvblBhdGggPSBwYXRoLmVuZHNXaXRoKFRFTVBMQVRFX0ZJTEVfU1VGRklYKSA/IHBhdGguc2xpY2UoMCwgLVRFTVBMQVRFX0ZJTEVfU1VGRklYLmxlbmd0aCkgOiBwYXRoO1xuICAgIGF3YWl0IGNwKGpvaW4oUmVwb1BhdGhzLlRlbXBsYXRlcywgcGF0aCksIGpvaW4oUmVwb1BhdGhzLkRpc3RUZW1wbGF0ZXMsIGRlc3RpbmF0aW9uUGF0aCkpO1xuICB9XG59XG5cbmNvbnN0IFRFTVBMQVRFX0ZJTEVfU1VGRklYID0gJy50ZW1wbGF0ZSc7XG5cbmNvbnN0IE5PREVfTU9EVUxFU19TRUdNRU5UID0gJy9ub2RlX21vZHVsZXMvJztcblxuY29uc3QgU1ZFTFRFX0NIRUNLX1BBQ0tBR0VfTkFNRSA9ICdzdmVsdGUtY2hlY2snO1xuXG5jb25zdCBTVkVMVEVfRklMRV9QQVRURVJOUyA9IFtcbiAgYCR7UmVwb1BhdGhzLkFueVBhdGh9Lyouc3ZlbHRlYCxcbiAgYCR7UmVwb1BhdGhzLkFueVBhdGh9Lyouc3ZlbHRlLmpzYCxcbiAgYCR7UmVwb1BhdGhzLkFueVBhdGh9Lyouc3ZlbHRlLnRzYFxuXTtcblxuLyoqXG4gKiBgbm9kZV9tb2R1bGVzYCBtdXN0IGJlIGxpc3RlZCBleHBsaWNpdGx5OiBhIHRzY29uZmlnIHRoYXQgc2V0cyBgZXhjbHVkZWAgYXQgYWxsICoqcmVwbGFjZXMqKiBUeXBlU2NyaXB0J3NcbiAqIGRlZmF1bHQgYG5vZGVfbW9kdWxlc2AgZXhjbHVzaW9uLCBzbyBpdCBjYW5ub3QgYmUgcmVsaWVkIG9uIHRvIGtlZXAgZGVwZW5kZW5jaWVzIG91dCBvZiB0aGUgZ2xvYi5cbiAqL1xuY29uc3QgU1ZFTFRFX0ZJTEVfRVhDTFVERV9QQVRURVJOUyA9IFtcbiAgYCR7UmVwb1BhdGhzLkFueVBhdGh9LyR7UmVwb1BhdGhzLk5vZGVNb2R1bGVzfS8ke1JlcG9QYXRocy5BbnlQYXRofWAsXG4gIGAke1JlcG9QYXRocy5BbnlQYXRofS8ke1JlcG9QYXRocy5EaXN0fS8ke1JlcG9QYXRocy5BbnlQYXRofWBcbl07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNob3VsZEtlZXBQcm9qZWN0RmlsZX0uXG4gKi9cbmludGVyZmFjZSBTaG91bGRLZWVwUHJvamVjdEZpbGVQYXJhbXMge1xuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB1bmRlciBjb25zaWRlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQWJzb2x1dGUgKGNhbm9uaWNhbCkgcGF0aCBvZiB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdENhbm9uaWNhbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlLXJ1bnMgdGhlIHByb2plY3QgdHlwZS1jaGVjayBpbi1tZW1vcnkgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIHJlcG9ydGluZyBvbmx5IGRpYWdub3N0aWNzXG4gKiB3aG9zZSBzb3VyY2UgZmlsZSBiZWxvbmdzIHRvIHRoZSBwcm9qZWN0ICh1bmRlciB0aGUgcm9vdCBmb2xkZXIsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2ApLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBwcm9qZWN0J3Mgb3duIGZpbGVzIGhhdmUgbm8gdHlwZSBlcnJvcnMsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHRocm93cyBJZiB0aGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBhcmVQcm9qZWN0VHlwZXNWYWxpZCgpOiBib29sZWFuIHtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3RGb2xkZXIoKTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHJvb3QgZm9sZGVyJyk7XG4gIH1cblxuICBjb25zdCByb290Q2Fub25pY2FsID0gdG9DYW5vbmljYWwocm9vdCk7XG4gIGNvbnN0IHsgZmlsZU5hbWVzLCBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKGpvaW4ocm9vdCwgUmVwb1BhdGhzLlRzQ29uZmlnSnNvbikpO1xuXG4gIHJldHVybiBjaGVja1Byb2plY3RUeXBlcyh7XG4gICAgb3B0aW9ucyxcbiAgICByb290TmFtZXM6IGZpbGVOYW1lcyxcbiAgICBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lKSA9PiBzaG91bGRLZWVwUHJvamVjdEZpbGUoeyBmaWxlTmFtZSwgcm9vdENhbm9uaWNhbCB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHByb2plY3QgZGVjbGFyZXMgYHN2ZWx0ZS1jaGVja2AuXG4gKlxuICogVGhlIGRlY2xhcmF0aW9uIGlzIHJlYWQgZnJvbSBgcGFja2FnZS5qc29uYCByYXRoZXIgdGhhbiBwcm9iZWQgaW4gYG5vZGVfbW9kdWxlcy8uYmluYCwgYmVjYXVzZVxuICoge0BsaW5rIHJlc29sdmVUb29sQ29tbWFuZH0gZGVsaWJlcmF0ZWx5IGZhbGxzIGJhY2sgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcidzIGV4ZWMgZm9ybSBmb3IgdG9vbHMgdGhhdCBoYXZlXG4gKiBubyBiaW4gc2hpbSDigJQgdGhlIG9ubHkgd2F5IGEgbG9jYWxseSBpbnN0YWxsZWQgdG9vbCByZXNvbHZlcyB1bmRlciB5YXJuIFBuUC4gVHJlYXRpbmcgYSBtaXNzaW5nIHNoaW0gYXMgYVxuICogbWlzc2luZyB0b29sIHdvdWxkIHRoZXJlZm9yZSBicmVhayBQblAgcHJvamVjdHMuXG4gKlxuICogQHBhcmFtIHBhY2thZ2VKc29uIC0gVGhlIHByb2plY3QncyBwYXJzZWQgYHBhY2thZ2UuanNvbmAuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiBgc3ZlbHRlLWNoZWNrYCBpcyBkZWNsYXJlZCBhcyBhIHJlZ3VsYXIsIGRldiwgb3IgcGVlciBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiBjaGVja1N2ZWx0ZUNoZWNrRGVjbGFyZWQocGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogYm9vbGVhbiB7XG4gIHJldHVybiBbcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzLCBwYWNrYWdlSnNvbi5kZXZEZXBlbmRlbmNpZXMsIHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXNdXG4gICAgLnNvbWUoKGRlcGVuZGVuY2llcykgPT4gZGVwZW5kZW5jaWVzPy5bU1ZFTFRFX0NIRUNLX1BBQ0tBR0VfTkFNRV0gIT09IHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZmlsZSBiZWxvbmdzIHRvIHRoZSBwcm9qZWN0ICh1bmRlciB0aGUgcm9vdCBmb2xkZXIsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2ApLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGZpbGUgYmVsb25ncyB0byB0aGUgcHJvamVjdC5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkS2VlcFByb2plY3RGaWxlKHBhcmFtczogU2hvdWxkS2VlcFByb2plY3RGaWxlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgZmlsZU5hbWUsIHJvb3RDYW5vbmljYWwgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGZpbGVOYW1lLnN0YXJ0c1dpdGgoYCR7cm9vdENhbm9uaWNhbH0vYCkgJiYgIWZpbGVOYW1lLmluY2x1ZGVzKE5PREVfTU9EVUxFU19TRUdN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
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBidWlsZCBwcm9jZXNzIGZvciBzdGF0aWMgYXNzZXRzIGFuZCBjbGVhbmluZ1xuICogdGhlIGJ1aWxkIG91dHB1dCBmb2xkZXIuIEl0IGluY2x1ZGVzIGZ1bmN0aW9ucyB0byBjb3B5IHN0YXRpYyBmaWxlcyB0byB0aGUgZGlzdHJpYnV0aW9uIGZvbGRlclxuICogYW5kIHRvIHJlbW92ZSB0aGUgZXhpc3RpbmcgYnVpbGQgb3V0cHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUGFja2FnZUpzb24sXG4gIFRzQ29uZmlnSnNvblxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyB0cmltU3RhcnQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7XG4gIGNwLFxuICBnbG9iLFxuICBybVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHtcbiAgY2hlY2tQcm9qZWN0VHlwZXMsXG4gIHBhcnNlVHNDb25maWcsXG4gIHRvQ2Fub25pY2FsXG59IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyByZWFkZGlyUG9zaXggfSBmcm9tICcuL2ZzLnRzJztcbmltcG9ydCB7IHJlYWRKc29uIH0gZnJvbSAnLi9qc29uLnRzJztcbmltcG9ydCB7XG4gIG5wbVJ1bk9wdGlvbmFsLFxuICBOcG1SdW5PcHRpb25hbFJlc3VsdFxufSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBkaXN0cmlidXRpb24gZm9sZGVyIGFuZCBpdHMgY29udGVudHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBlbnRpcmUgZGlzdHJpYnV0aW9uIGZvbGRlciB0byBlbnN1cmUgYSBjbGVhbiBidWlsZCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBoYXMgYmVlbiByZW1vdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDbGVhbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcm0oUmVwb1BhdGhzLkRpc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyB0aGUgY29kZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoYXdhaXQgbnBtUnVuT3B0aW9uYWwoJ2J1aWxkOmNvbXBpbGU6c3ZlbHRlJykgPT09IE5wbVJ1bk9wdGlvbmFsUmVzdWx0LlNraXBwZWQpIHtcbiAgICBhd2FpdCBidWlsZENvbXBpbGVTdmVsdGUoKTtcbiAgfVxuICBpZiAoYXdhaXQgbnBtUnVuT3B0aW9uYWwoJ2J1aWxkOmNvbXBpbGU6dHlwZXNjcmlwdCcpID09PSBOcG1SdW5PcHRpb25hbFJlc3VsdC5Ta2lwcGVkKSB7XG4gICAgYXdhaXQgYnVpbGRDb21waWxlVHlwZVNjcmlwdCgpO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZXMgdGhlIFN2ZWx0ZSBjb2RlLlxuICpcbiAqIFRoZSBwcm9qZWN0J3MgU3ZlbHRlIGZpbGVzIGFyZSBmb3VuZCBieSBnbG9iYmluZyB0aGUgU3ZlbHRlIGV4dGVuc2lvbnMgZGlyZWN0bHkuIEdsb2JiaW5nIHRoZSB0c2NvbmZpZ1xuICogYGluY2x1ZGVgIHBhdHRlcm5zIGFuZCBmaWx0ZXJpbmcgdGhhdCBsaXN0IHdvdWxkIG5ldmVyIG1hdGNoOiBgaW5jbHVkZWAgbGlzdHMgVHlwZVNjcmlwdCBnbG9ic1xuICogKGAuL3NyYy8qKlxcLyoudHNgLCDigKYpLCBzbyBubyBgLnN2ZWx0ZWAgcGF0aCBjYW4gZXZlciBhcHBlYXIgaW4gaXQgYW5kIHRoZSBjaGVjayB3b3VsZCBhbHdheXMgYmUgc2tpcHBlZC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvZGUgY29tcGlsZXMgc3VjY2Vzc2Z1bGx5LlxuICogQHRocm93cyBJZiB0aGUgcHJvamVjdCBoYXMgU3ZlbHRlIGZpbGVzIGJ1dCBkb2VzIG5vdCBkZWNsYXJlIGBzdmVsdGUtY2hlY2tgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDb21waWxlU3ZlbHRlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0c0NvbmZpZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24gfSk7XG4gIGNvbnN0IHRzQ29uZmlnID0gYXdhaXQgcmVhZEpzb248VHNDb25maWdKc29uPih0c0NvbmZpZ1BhdGgpO1xuICBjb25zdCBzdmVsdGVGaWxlcyA9IGF3YWl0IHRvQXJyYXkoZ2xvYihTVkVMVEVfRklMRV9QQVRURVJOUywge1xuICAgIGN3ZDogcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciB9KSxcbiAgICBleGNsdWRlOiBbLi4uU1ZFTFRFX0ZJTEVfRVhDTFVERV9QQVRURVJOUywgLi4udHNDb25maWcuZXhjbHVkZSA/PyBbXV1cbiAgfSkpO1xuXG4gIGNvbnN0IFtmaXJzdFN2ZWx0ZUZpbGVdID0gc3ZlbHRlRmlsZXM7XG5cbiAgaWYgKGZpcnN0U3ZlbHRlRmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ2J1aWxkOmJ1aWxkQ29tcGlsZVN2ZWx0ZScpKCdObyBTdmVsdGUgZmlsZXMgZm91bmQgaW4gdGhlIHByb2plY3QsIHNraXBwaW5nIFN2ZWx0ZSBjb21waWxhdGlvbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG5cbiAgaWYgKCFjaGVja1N2ZWx0ZUNoZWNrRGVjbGFyZWQocGFja2FnZUpzb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZvdW5kIFN2ZWx0ZSBmaWxlKHMpIGluIHRoZSBwcm9qZWN0IChlLmcuICR7Zmlyc3RTdmVsdGVGaWxlfSksIGJ1dCBcXGAke1NWRUxURV9DSEVDS19QQUNLQUdFX05BTUV9XFxgIGlzIG5vdCBkZWNsYXJlZCBpbiBwYWNrYWdlLmpzb24uYFxuICAgICAgICArIGAgQWRkIFxcYCR7U1ZFTFRFX0NIRUNLX1BBQ0tBR0VfTkFNRX1cXGAgYXMgYSBkZXZEZXBlbmRlbmN5IHRvIHR5cGUtY2hlY2sgdGhlIFN2ZWx0ZSBjb2RlLmBcbiAgICApO1xuICB9XG5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiBTVkVMVEVfQ0hFQ0tfUEFDS0FHRV9OQU1FIH0pLCAnLS10c2NvbmZpZycsIFJlcG9QYXRocy5Uc0NvbmZpZ0pzb25dKTtcbn1cblxuLyoqXG4gKiBDb21waWxlcyB0aGUgVHlwZVNjcmlwdCBjb2RlLlxuICpcbiAqIFRoZSBnZW5lcmFsIGB0c2NgIHBhc3MgcnVucyB3aXRoIGBza2lwTGliQ2hlY2s6IHRydWVgIChjb25maWd1cmVkIGluIGB0c2NvbmZpZy5qc29uYCkgc28gaXQgZG9lc1xuICogbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wuIEFmdGVyd2FyZHMsIHtAbGluayBhcmVQcm9qZWN0VHlwZXNWYWxpZH1cbiAqIHJlLXJ1bnMgdGhlIHR5cGUtY2hlY2sgaW4tbWVtb3J5IHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgLCByZXBvcnRpbmcgb25seSBkaWFnbm9zdGljcyBmcm9tIHRoZVxuICogZmlsZXMgd2Ugb3duLCBzbyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvciBhcmUgc3RpbGwgZnVsbHkgdmFsaWRhdGVkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29kZSBjb21waWxlcyBzdWNjZXNzZnVsbHkuXG4gKiBAdGhyb3dzIElmIHRoZSBwcm9qZWN0J3Mgb3duIGRlY2xhcmF0aW9ucyBmYWlsIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENvbXBpbGVUeXBlU2NyaXB0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICd0c2MnIH0pLCAnLS1idWlsZCcsICctLWZvcmNlJ10pO1xuXG4gIGlmICghYXJlUHJvamVjdFR5cGVzVmFsaWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvcGllcyBhbGwgdGVtcGxhdGUgZmlsZXMgZnJvbSB0aGUgdGVtcGxhdGVzIGZvbGRlciB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGVcbiAqIGRpc3RyaWJ1dGlvbiBmb2xkZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSByZWFkcyB0aGUgY29udGVudHMgb2YgdGhlIHRlbXBsYXRlcyBmb2xkZXIgYW5kIGNvcGllcyBlYWNoIGZpbGUgdG8gdGhlXG4gKiBjb3JyZXNwb25kaW5nIHBhdGggdW5kZXIge0BsaW5rIFJlcG9QYXRocy5EaXN0VGVtcGxhdGVzfSwgc28gY29uc3VtZXJzIGNhbiBjb3B5IHRoZVxuICogdGVtcGxhdGVzIGZyb20gYG5vZGVfbW9kdWxlcy9AbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9kaXN0L3RlbXBsYXRlc2AuIEEgdHJhaWxpbmcgYC50ZW1wbGF0ZWAgb24gYSBzb3VyY2VcbiAqIGZpbGUgbmFtZSBpcyBzdHJpcHBlZCBpbiB0aGUgZGVzdGluYXRpb24gKGUuZy4gYGVzbGludC5jb25maWcubXRzLnRlbXBsYXRlYCBpcyBjb3BpZWQgYXNcbiAqIGBlc2xpbnQuY29uZmlnLm10c2ApLCBzbyBhbiBhY3RpdmUgY29uZmlnIHRlbXBsYXRlIGNhbiBsaXZlIGluIHRoZSByZXBvIHVuZGVyIGEgbmFtZSB0aGF0IHRoZVxuICogY29ycmVzcG9uZGluZyB0b29sIGRvZXMgbm90IGF1dG8tZGlzY292ZXIuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBmaWxlcyBoYXZlIGJlZW4gY29waWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRUZW1wbGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAoY29uc3QgZGlyZW50IG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuVGVtcGxhdGVzLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGlmICghZGlyZW50LmlzRmlsZSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gdHJpbVN0YXJ0KHtcbiAgICAgICRzdHJpbmc6IGpvaW4oZGlyZW50LnBhcmVudFBhdGgsIGRpcmVudC5uYW1lKSxcbiAgICAgIHByZWZpeDogYCR7UmVwb1BhdGhzLlRlbXBsYXRlc30vYFxuICAgIH0pO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uUGF0aCA9IHBhdGguZW5kc1dpdGgoVEVNUExBVEVfRklMRV9TVUZGSVgpID8gcGF0aC5zbGljZSgwLCAtVEVNUExBVEVfRklMRV9TVUZGSVgubGVuZ3RoKSA6IHBhdGg7XG4gICAgYXdhaXQgY3Aoam9pbihSZXBvUGF0aHMuVGVtcGxhdGVzLCBwYXRoKSwgam9pbihSZXBvUGF0aHMuRGlzdFRlbXBsYXRlcywgZGVzdGluYXRpb25QYXRoKSk7XG4gIH1cbn1cblxuY29uc3QgVEVNUExBVEVfRklMRV9TVUZGSVggPSAnLnRlbXBsYXRlJztcblxuY29uc3QgTk9ERV9NT0RVTEVTX1NFR01FTlQgPSAnL25vZGVfbW9kdWxlcy8nO1xuXG5jb25zdCBTVkVMVEVfQ0hFQ0tfUEFDS0FHRV9OQU1FID0gJ3N2ZWx0ZS1jaGVjayc7XG5cbmNvbnN0IFNWRUxURV9GSUxFX1BBVFRFUk5TID0gW1xuICBgJHtSZXBvUGF0aHMuQW55UGF0aH0vKi5zdmVsdGVgLFxuICBgJHtSZXBvUGF0aHMuQW55UGF0aH0vKi5zdmVsdGUuanNgLFxuICBgJHtSZXBvUGF0aHMuQW55UGF0aH0vKi5zdmVsdGUudHNgXG5dO1xuXG4vKipcbiAqIGBub2RlX21vZHVsZXNgIG11c3QgYmUgbGlzdGVkIGV4cGxpY2l0bHk6IGEgdHNjb25maWcgdGhhdCBzZXRzIGBleGNsdWRlYCBhdCBhbGwgKipyZXBsYWNlcyoqIFR5cGVTY3JpcHQnc1xuICogZGVmYXVsdCBgbm9kZV9tb2R1bGVzYCBleGNsdXNpb24sIHNvIGl0IGNhbm5vdCBiZSByZWxpZWQgb24gdG8ga2VlcCBkZXBlbmRlbmNpZXMgb3V0IG9mIHRoZSBnbG9iLlxuICovXG5jb25zdCBTVkVMVEVfRklMRV9FWENMVURFX1BBVFRFUk5TID0gW1xuICBgJHtSZXBvUGF0aHMuQW55UGF0aH0vJHtSZXBvUGF0aHMuTm9kZU1vZHVsZXN9LyR7UmVwb1BhdGhzLkFueVBhdGh9YCxcbiAgYCR7UmVwb1BhdGhzLkFueVBhdGh9LyR7UmVwb1BhdGhzLkRpc3R9LyR7UmVwb1BhdGhzLkFueVBhdGh9YFxuXTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2hvdWxkS2VlcFByb2plY3RGaWxlfS5cbiAqL1xuaW50ZXJmYWNlIFNob3VsZEtlZXBQcm9qZWN0RmlsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHVuZGVyIGNvbnNpZGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSAoY2Fub25pY2FsKSBwYXRoIG9mIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSByb290Q2Fub25pY2FsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmUtcnVucyB0aGUgcHJvamVjdCB0eXBlLWNoZWNrIGluLW1lbW9yeSB3aXRoIGBza2lwTGliQ2hlY2s6IGZhbHNlYCwgcmVwb3J0aW5nIG9ubHkgZGlhZ25vc3RpY3NcbiAqIHdob3NlIHNvdXJjZSBmaWxlIGJlbG9uZ3MgdG8gdGhlIHByb2plY3QgKHVuZGVyIHRoZSByb290IGZvbGRlciwgb3V0c2lkZSBgbm9kZV9tb2R1bGVzYCkuXG4gKlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHByb2plY3QncyBvd24gZmlsZXMgaGF2ZSBubyB0eXBlIGVycm9ycywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGZvbGRlciBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGFyZVByb2plY3RUeXBlc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICBjb25zdCByb290ID0gZ2V0Um9vdEZvbGRlcigpO1xuXG4gIGlmICghcm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcm9vdCBmb2xkZXInKTtcbiAgfVxuXG4gIGNvbnN0IHJvb3RDYW5vbmljYWwgPSB0b0Nhbm9uaWNhbChyb290KTtcbiAgY29uc3QgeyBmaWxlTmFtZXMsIG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoam9pbihyb290LCBSZXBvUGF0aHMuVHNDb25maWdKc29uKSk7XG5cbiAgcmV0dXJuIGNoZWNrUHJvamVjdFR5cGVzKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogZmlsZU5hbWVzLFxuICAgIHNob3VsZEtlZXBGaWxlOiAoZmlsZU5hbWUpID0+IHNob3VsZEtlZXBQcm9qZWN0RmlsZSh7IGZpbGVOYW1lLCByb290Q2Fub25pY2FsIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcHJvamVjdCBkZWNsYXJlcyBgc3ZlbHRlLWNoZWNrYC5cbiAqXG4gKiBUaGUgZGVjbGFyYXRpb24gaXMgcmVhZCBmcm9tIGBwYWNrYWdlLmpzb25gIHJhdGhlciB0aGFuIHByb2JlZCBpbiBgbm9kZV9tb2R1bGVzLy5iaW5gLCBiZWNhdXNlXG4gKiB7QGxpbmsgcmVzb2x2ZVRvb2xDb21tYW5kfSBkZWxpYmVyYXRlbHkgZmFsbHMgYmFjayB0byB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlYyBmb3JtIGZvciB0b29scyB0aGF0IGhhdmVcbiAqIG5vIGJpbiBzaGltIOKAlCB0aGUgb25seSB3YXkgYSBsb2NhbGx5IGluc3RhbGxlZCB0b29sIHJlc29sdmVzIHVuZGVyIHlhcm4gUG5QLiBUcmVhdGluZyBhIG1pc3Npbmcgc2hpbSBhcyBhXG4gKiBtaXNzaW5nIHRvb2wgd291bGQgdGhlcmVmb3JlIGJyZWFrIFBuUCBwcm9qZWN0cy5cbiAqXG4gKiBAcGFyYW0gcGFja2FnZUpzb24gLSBUaGUgcHJvamVjdCdzIHBhcnNlZCBgcGFja2FnZS5qc29uYC5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIGBzdmVsdGUtY2hlY2tgIGlzIGRlY2xhcmVkIGFzIGEgcmVndWxhciwgZGV2LCBvciBwZWVyIGRlcGVuZGVuY3kuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrU3ZlbHRlQ2hlY2tEZWNsYXJlZChwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIFtwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMsIHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcywgcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llc11cbiAgICAuc29tZSgoZGVwZW5kZW5jaWVzKSA9PiBkZXBlbmRlbmNpZXM/LltTVkVMVEVfQ0hFQ0tfUEFDS0FHRV9OQU1FXSAhPT0gdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlIGJlbG9uZ3MgdG8gdGhlIHByb2plY3QgKHVuZGVyIHRoZSByb290IGZvbGRlciwgb3V0c2lkZSBgbm9kZV9tb2R1bGVzYCkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZmlsZSBiZWxvbmdzIHRvIHRoZSBwcm9qZWN0LlxuICovXG5mdW5jdGlvbiBzaG91bGRLZWVwUHJvamVjdEZpbGUocGFyYW1zOiBTaG91bGRLZWVwUHJvamVjdEZpbGVQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmaWxlTmFtZSwgcm9vdENhbm9uaWNhbCB9ID0gcGFyYW1zO1xuICByZXR1cm4gZmlsZU5hbWUuc3RhcnRzV2l0aChgJHtyb290Q2Fub25pY2FsfS9gKSAmJiAhZmlsZU5hbWUuaW5jbHVkZXMoTk9E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
@@ -49,7 +49,7 @@ export declare function buildCompileTypeScript(): Promise<void>;
49
49
  *
50
50
  * This function recursively reads the contents of the templates folder and copies each file to the
51
51
  * corresponding path under {@link RepoPaths.DistTemplates}, so consumers can copy the
52
- * templates from `node_modules/obsidian-dev-utils/dist/templates`. A trailing `.template` on a source
52
+ * templates from `node_modules/@mnaoumov/typescript-dev-toolkit/dist/templates`. A trailing `.template` on a source
53
53
  * file name is stripped in the destination (e.g. `eslint.config.mts.template` is copied as
54
54
  * `eslint.config.mts`), so an active config template can live in the repo under a name that the
55
55
  * corresponding tool does not auto-discover.
@@ -56,16 +56,29 @@ var __copyProps = (to, from, except, desc) => {
56
56
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
57
57
  var commitlint_config_exports = {};
58
58
  __export(commitlint_config_exports, {
59
+ commitlintConfig: () => commitlintConfig,
59
60
  obsidianDevUtilsConfig: () => obsidianDevUtilsConfig
60
61
  });
61
62
  module.exports = __toCommonJS(commitlint_config_exports);
62
63
  var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
64
+ var import_node_module = require('node:module');
63
65
  var import_commitlint_forbidden_patterns = require('./commitlint-forbidden-patterns.cjs');
64
66
  var import_commitlint_spellcheck_header = require('./commitlint-spellcheck-header.cjs');
67
+ var __import_meta_url = globalThis["import.meta.url"] ?? (function getCjsImportMetaUrl() {
68
+ if (typeof __filename === "string") {
69
+ const localRequire = require;
70
+ const url = localRequire("node:url");
71
+ if (typeof url.pathToFileURL === "function") {
72
+ return url.pathToFileURL(__filename).href;
73
+ }
74
+ }
75
+ return globalThis.location?.href ?? "";
76
+ })();
65
77
  const ERROR_SEVERITY_LEVEL = 2;
66
78
  const ERROR_SEVERITY = (0, import_object_utils.castTo)(ERROR_SEVERITY_LEVEL);
67
- const obsidianDevUtilsConfig = {
68
- extends: ["@commitlint/config-conventional"],
79
+ const CONFIG_CONVENTIONAL_PATH = (0, import_node_module.createRequire)(__import_meta_url).resolve("@commitlint/config-conventional");
80
+ const commitlintConfig = {
81
+ extends: [CONFIG_CONVENTIONAL_PATH],
69
82
  // ONE plugin object, never two: `@commitlint/load` stores every inline plugin under the same `local` key, so a
70
83
  // second object silently replaces the first and its rule then fails as "Found rules without implementation".
71
84
  plugins: [
@@ -81,8 +94,10 @@ const obsidianDevUtilsConfig = {
81
94
  [import_commitlint_spellcheck_header.SPELLCHECK_HEADER_RULE_NAME]: [ERROR_SEVERITY, "always"]
82
95
  }
83
96
  };
97
+ const obsidianDevUtilsConfig = commitlintConfig;
84
98
  // Annotate the CommonJS export names for ESM import in node:
85
99
  0 && (module.exports = {
100
+ commitlintConfig,
86
101
  obsidianDevUtilsConfig
87
102
  });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21taXRsaW50LWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbiBmb3IgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBjb21taXRsaW50LCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlQ29uZmlnU2V2ZXJpdHksXG4gIFVzZXJDb25maWdcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcblxuaW1wb3J0IHtcbiAgZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4sXG4gIE5PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVcbn0gZnJvbSAnLi9jb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucy50cyc7XG5pbXBvcnQge1xuICBTUEVMTENIRUNLX0hFQURFUl9SVUxFX05BTUUsXG4gIHNwZWxsY2hlY2tIZWFkZXJQbHVnaW5cbn0gZnJvbSAnLi9jb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyLnRzJztcblxuLypcbiAqIGBSdWxlQ29uZmlnU2V2ZXJpdHkuRXJyb3JgLiBUaGUgZW51bSBsaXZlcyBpbiBhIHBhY2thZ2UgdGhpcyBsaWJyYXJ5IG9ubHkgaGFzIGFzIGEgZGV2RGVwZW5kZW5jeSwgc28gaXRzIHZhbHVlIGNhbm5vdCBiZSBpbXBvcnRlZCBhdCBydW50aW1lLlxuICovXG5jb25zdCBFUlJPUl9TRVZFUklUWV9MRVZFTCA9IDI7XG5jb25zdCBFUlJPUl9TRVZFUklUWSA9IGNhc3RUbzxSdWxlQ29uZmlnU2V2ZXJpdHk+KEVSUk9SX1NFVkVSSVRZX0xFVkVMKTtcblxuLyoqXG4gKiBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZXh0ZW5kaW5nIGBAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsYCwgcGx1cyBhIHJ1bGUgcmVmdXNpbmcgYSBtZXNzYWdlIHdob3NlXG4gKiBoZWFkZXIsIGJvZHkgb3IgZm9vdGVyIG1hdGNoZXMgdGhlIHVucHVibGlzaGVkIGZvcmJpZGRlbi1wYXR0ZXJucyBsaXN0IChhIG5vLW9wIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkKSwgYW5kXG4gKiBhIHJ1bGUgc3BlbGxjaGVja2luZyB0aGUgaGVhZGVyIHRoZSB3YXkgdGhlIHJlbGVhc2Ugc3BlbGxjaGVja3MgdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lcyAoYSBuby1vcCBpbiBhXG4gKiBwcm9qZWN0IHdpdGggbm8gYHNwZWxsY2hlY2tgIHNjcmlwdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzQ29uZmlnOiBVc2VyQ29uZmlnID0ge1xuICBleHRlbmRzOiBbJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWwnXSxcbiAgLy8gT05FIHBsdWdpbiBvYmplY3QsIG5ldmVyIHR3bzogYEBjb21taXRsaW50L2xvYWRgIHN0b3JlcyBldmVyeSBpbmxpbmUgcGx1Z2luIHVuZGVyIHRoZSBzYW1lIGBsb2NhbGAga2V5LCBzbyBhXG4gIC8vIHNlY29uZCBvYmplY3Qgc2lsZW50bHkgcmVwbGFjZXMgdGhlIGZpcnN0IGFuZCBpdHMgcnVsZSB0aGVuIGZhaWxzIGFzIFwiRm91bmQgcnVsZXMgd2l0aG91dCBpbXBsZW1lbnRhdGlvblwiLlxuICBwbHVnaW5zOiBbXG4gICAge1xuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLi4uZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4ucnVsZXMsXG4gICAgICAgIC4uLnNwZWxsY2hlY2tIZWFkZXJQbHVnaW4ucnVsZXNcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIHJ1bGVzOiB7XG4gICAgW05PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVdOiBbRVJST1JfU0VWRVJJVFksICdhbHdheXMnXSxcbiAgICBbU1BFTExDSEVDS19IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ11cbiAgfVxufTtcblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsMEJBQXVCO0FBRXZCLDJDQUdPO0FBQ1AsMENBR087QUFLUCxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHFCQUFpQiw0QkFBMkIsb0JBQW9CO0FBUS9ELE1BQU0seUJBQXFDO0FBQUEsRUFDaEQsU0FBUyxDQUFDLGlDQUFpQztBQUFBO0FBQUE7QUFBQSxFQUczQyxTQUFTO0FBQUEsSUFDUDtBQUFBLE1BQ0UsT0FBTztBQUFBLFFBQ0wsR0FBRyw2REFBd0I7QUFBQSxRQUMzQixHQUFHLDJEQUF1QjtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLENBQUMsb0VBQStCLEdBQUcsQ0FBQyxnQkFBZ0IsUUFBUTtBQUFBLElBQzVELENBQUMsK0RBQTJCLEdBQUcsQ0FBQyxnQkFBZ0IsUUFBUTtBQUFBLEVBQzFEO0FBQ0Y7IiwibmFtZXMiOltdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21taXRsaW50LWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoZnVuY3Rpb24gZ2V0Q2pzSW1wb3J0TWV0YVVybCgpIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgIGlmICh0eXBlb2YgdXJsLnBhdGhUb0ZpbGVVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHRoZSBwYWdlIFVSTCwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duLlxuICByZXR1cm4gZ2xvYmFsVGhpcy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbn0pKCk7XG4vKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbiBmb3IgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBjb21taXRsaW50LCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlQ29uZmlnU2V2ZXJpdHksXG4gIFVzZXJDb25maWdcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5cbmltcG9ydCB7XG4gIGZvcmJpZGRlblBhdHRlcm5zUGx1Z2luLFxuICBOT19GT1JCSURERU5fUEFUVEVSTlNfUlVMRV9OQU1FXG59IGZyb20gJy4vY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuaW1wb3J0IHtcbiAgU1BFTExDSEVDS19IRUFERVJfUlVMRV9OQU1FLFxuICBzcGVsbGNoZWNrSGVhZGVyUGx1Z2luXG59IGZyb20gJy4vY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlci50cyc7XG5cbi8qXG4gKiBgUnVsZUNvbmZpZ1NldmVyaXR5LkVycm9yYC4gVGhlIGVudW0gbGl2ZXMgaW4gYSBwYWNrYWdlIHRoaXMgbGlicmFyeSBvbmx5IGhhcyBhcyBhIGRldkRlcGVuZGVuY3ksIHNvIGl0cyB2YWx1ZSBjYW5ub3QgYmUgaW1wb3J0ZWQgYXQgcnVudGltZS5cbiAqL1xuY29uc3QgRVJST1JfU0VWRVJJVFlfTEVWRUwgPSAyO1xuY29uc3QgRVJST1JfU0VWRVJJVFkgPSBjYXN0VG88UnVsZUNvbmZpZ1NldmVyaXR5PihFUlJPUl9TRVZFUklUWV9MRVZFTCk7XG5cbi8qKlxuICogVGhlIGFic29sdXRlIHBhdGggb2YgYEBjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxgJ3MgZW50cnksIHJlc29sdmVkIGZyb20gdGhpcyBtb2R1bGUuIENvbW1pdGxpbnQgcmVzb2x2ZXMgYVxuICogYmFyZSBgZXh0ZW5kc2AgbmFtZSBmcm9tIHRoZSBjb25zdW1lcidzIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGljaCBmaW5kcyB0aGlzIHBhY2thZ2UncyBvd24gZGVwZW5kZW5jeSBvbmx5IHdoZW4gdGhlXG4gKiBwYWNrYWdlIG1hbmFnZXIgaGFwcGVuZWQgdG8gaG9pc3QgaXQ7IGFuIGFic29sdXRlIHBhdGggZmluZHMgaXQgd2hlcmV2ZXIgaXQgd2FzIGluc3RhbGxlZC5cbiAqL1xuY29uc3QgQ09ORklHX0NPTlZFTlRJT05BTF9QQVRIID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWwnKTtcblxuLyoqXG4gKiBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZXh0ZW5kaW5nIGBAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsYCwgcGx1cyBhIHJ1bGUgcmVmdXNpbmcgYSBtZXNzYWdlIHdob3NlXG4gKiBoZWFkZXIsIGJvZHkgb3IgZm9vdGVyIG1hdGNoZXMgdGhlIHVucHVibGlzaGVkIGZvcmJpZGRlbi1wYXR0ZXJucyBsaXN0IChhIG5vLW9wIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkKSwgYW5kXG4gKiBhIHJ1bGUgc3BlbGxjaGVja2luZyB0aGUgaGVhZGVyIHRoZSB3YXkgdGhlIHJlbGVhc2Ugc3BlbGxjaGVja3MgdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lcyAoYSBuby1vcCBpbiBhXG4gKiBwcm9qZWN0IHdpdGggbm8gYHNwZWxsY2hlY2tgIHNjcmlwdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21taXRsaW50Q29uZmlnOiBVc2VyQ29uZmlnID0ge1xuICBleHRlbmRzOiBbQ09ORklHX0NPTlZFTlRJT05BTF9QQVRIXSxcbiAgLy8gT05FIHBsdWdpbiBvYmplY3QsIG5ldmVyIHR3bzogYEBjb21taXRsaW50L2xvYWRgIHN0b3JlcyBldmVyeSBpbmxpbmUgcGx1Z2luIHVuZGVyIHRoZSBzYW1lIGBsb2NhbGAga2V5LCBzbyBhXG4gIC8vIHNlY29uZCBvYmplY3Qgc2lsZW50bHkgcmVwbGFjZXMgdGhlIGZpcnN0IGFuZCBpdHMgcnVsZSB0aGVuIGZhaWxzIGFzIFwiRm91bmQgcnVsZXMgd2l0aG91dCBpbXBsZW1lbnRhdGlvblwiLlxuICBwbHVnaW5zOiBbXG4gICAge1xuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLi4uZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4ucnVsZXMsXG4gICAgICAgIC4uLnNwZWxsY2hlY2tIZWFkZXJQbHVnaW4ucnVsZXNcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIHJ1bGVzOiB7XG4gICAgW05PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVdOiBbRVJST1JfU0VWRVJJVFksICdhbHdheXMnXSxcbiAgICBbU1BFTExDSEVDS19IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ11cbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgcHJldmlvdXMgbmFtZSBvZiB7QGxpbmsgY29tbWl0bGludENvbmZpZ30uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBjb21taXRsaW50Q29uZmlnfS4gVGhpcyBhbGlhcyBpcyByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogVXNlckNvbmZpZyA9IGNvbW1pdGxpbnRDb25maWc7XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLDBCQUF1QjtBQUN2Qix5QkFBOEI7QUFFOUIsMkNBR087QUFDUCwwQ0FHTztBQW5DUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLFNBQVMsc0JBQXNCO0FBQ3ZGLE1BQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sTUFBTSxhQUFhLFVBQVU7QUFDbkMsUUFBSSxPQUFPLElBQUksa0JBQWtCLFlBQVk7QUFDM0MsYUFBTyxJQUFJLGNBQWMsVUFBVSxFQUFFO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBR0EsU0FBTyxXQUFXLFVBQVUsUUFBUTtBQUN0QyxHQUFHO0FBNkJILE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0scUJBQWlCLDRCQUEyQixvQkFBb0I7QUFPdEUsTUFBTSwrQkFBMkIsa0NBQWMsaUJBQWUsRUFBRSxRQUFRLGlDQUFpQztBQVFsRyxNQUFNLG1CQUErQjtBQUFBLEVBQzFDLFNBQVMsQ0FBQyx3QkFBd0I7QUFBQTtBQUFBO0FBQUEsRUFHbEMsU0FBUztBQUFBLElBQ1A7QUFBQSxNQUNFLE9BQU87QUFBQSxRQUNMLEdBQUcsNkRBQXdCO0FBQUEsUUFDM0IsR0FBRywyREFBdUI7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxDQUFDLG9FQUErQixHQUFHLENBQUMsZ0JBQWdCLFFBQVE7QUFBQSxJQUM1RCxDQUFDLCtEQUEyQixHQUFHLENBQUMsZ0JBQWdCLFFBQVE7QUFBQSxFQUMxRDtBQUNGO0FBT08sTUFBTSx5QkFBcUM7IiwibmFtZXMiOltdfQ==