@mnaoumov/typescript-dev-toolkit 1.3.1 → 2.0.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.
- package/assets/docs-site/components/ConstructorBlock.astro +16 -0
- package/assets/docs-site/components/ImportStatement.astro +12 -0
- package/assets/docs-site/components/MemberDetail.astro +101 -0
- package/assets/docs-site/components/MethodTable.astro +45 -0
- package/assets/docs-site/components/PropertyTable.astro +45 -0
- package/assets/docs-site/components/SiteTitle.astro +43 -0
- package/assets/docs-site/components/TypeSignature.astro +20 -0
- package/assets/docs-site/fonts/inter-latin-400-normal.ttf +0 -0
- package/assets/docs-site/fonts/inter-latin-700-normal.ttf +0 -0
- package/assets/docs-site/styles/global.css +221 -0
- package/dist/lib/cjs/build.cjs +1 -1
- package/dist/lib/cjs/build.d.cts +1 -1
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +2 -2
- package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +2 -2
- package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
- package/dist/lib/cjs/docs-site/api-doc-constants.cjs +171 -0
- package/dist/lib/cjs/docs-site/api-doc-constants.d.cts +18 -0
- package/dist/lib/cjs/docs-site/api-doc-jsdoc.cjs +414 -0
- package/dist/lib/cjs/docs-site/api-doc-jsdoc.d.cts +149 -0
- package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +377 -0
- package/dist/lib/cjs/docs-site/api-doc-link-rendering.d.cts +185 -0
- package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +118 -0
- package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +36 -0
- package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +561 -0
- package/dist/lib/cjs/docs-site/api-doc-page-generation.d.cts +159 -0
- package/dist/lib/cjs/docs-site/api-doc-route-segments.cjs +42 -0
- package/dist/lib/cjs/docs-site/api-doc-route-segments.d.cts +25 -0
- package/dist/lib/cjs/docs-site/api-doc-settings.cjs +47 -0
- package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +53 -0
- package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +288 -0
- package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +75 -0
- package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +281 -0
- package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +178 -0
- package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +157 -0
- package/dist/lib/cjs/docs-site/api-doc-type-merging.d.cts +51 -0
- package/dist/lib/cjs/docs-site/api-doc-types.cjs +22 -0
- package/dist/lib/cjs/docs-site/api-doc-types.d.cts +157 -0
- package/dist/lib/cjs/docs-site/api-docs.cjs +143 -0
- package/dist/lib/cjs/docs-site/api-docs.d.cts +34 -0
- package/dist/lib/cjs/docs-site/astro-config.cjs +169 -0
- package/dist/lib/cjs/docs-site/astro-config.d.cts +23 -0
- package/dist/lib/cjs/docs-site/docs-links.cjs +123 -0
- package/dist/lib/cjs/docs-site/docs-links.d.cts +32 -0
- package/dist/lib/cjs/docs-site/docs-site-assets.cjs +64 -0
- package/dist/lib/cjs/docs-site/docs-site-assets.d.cts +23 -0
- package/dist/lib/cjs/docs-site/docs-site-commands.cjs +72 -0
- package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +29 -0
- package/dist/lib/cjs/docs-site/docs-site-config.cjs +122 -0
- package/dist/lib/cjs/docs-site/docs-site-config.d.cts +162 -0
- package/dist/lib/cjs/docs-site/index.cjs +116 -0
- package/dist/lib/cjs/docs-site/index.d.cts +26 -0
- package/dist/lib/cjs/docs-site/link-check.cjs +197 -0
- package/dist/lib/cjs/docs-site/link-check.d.cts +163 -0
- package/dist/lib/cjs/docs-site/og-image-page.cjs +45 -0
- package/dist/lib/cjs/docs-site/og-image-page.d.cts +15 -0
- package/dist/lib/cjs/docs-site/og-image.cjs +326 -0
- package/dist/lib/cjs/docs-site/og-image.d.cts +70 -0
- package/dist/lib/cjs/docs-site/og-images.cjs +170 -0
- package/dist/lib/cjs/docs-site/og-images.d.cts +41 -0
- package/dist/lib/cjs/docs-site/route-data.cjs +47 -0
- package/dist/lib/cjs/docs-site/route-data.d.cts +14 -0
- package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +97 -0
- package/dist/lib/cjs/docs-site/satteri-github-alerts.d.cts +31 -0
- package/dist/lib/cjs/docs-site/satteri-relative-links.cjs +87 -0
- package/dist/lib/cjs/docs-site/satteri-relative-links.d.cts +29 -0
- package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +51 -0
- package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +38 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library-build.cjs +1 -1
- package/dist/lib/cjs/library-build.d.cts +2 -2
- package/dist/lib/cjs/linters/eslint-config.cjs +17 -17
- package/dist/lib/cjs/linters/eslint-config.d.cts +1 -7
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +2 -2
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +5 -8
- package/dist/lib/cjs/package-manager.cjs +2 -2
- package/dist/lib/esm/build.d.mts +1 -1
- package/dist/lib/esm/build.mjs +1 -1
- package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
- package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
- package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
- package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
- package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
- package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
- package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
- package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
- package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
- package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
- package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
- package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
- package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
- package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
- package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
- package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
- package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
- package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
- package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
- package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
- package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
- package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
- package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
- package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
- package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
- package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
- package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
- package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
- package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
- package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
- package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
- package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
- package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
- package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
- package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
- package/dist/lib/esm/docs-site/index.d.mts +26 -0
- package/dist/lib/esm/docs-site/index.mjs +58 -0
- package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
- package/dist/lib/esm/docs-site/link-check.mjs +166 -0
- package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
- package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
- package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
- package/dist/lib/esm/docs-site/og-image.mjs +292 -0
- package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
- package/dist/lib/esm/docs-site/og-images.mjs +156 -0
- package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
- package/dist/lib/esm/docs-site/route-data.mjs +23 -0
- package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
- package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
- package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
- package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
- package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
- package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library-build.d.mts +2 -2
- package/dist/lib/esm/library-build.mjs +1 -1
- package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
- package/dist/lib/esm/linters/eslint-config.mjs +17 -17
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
- package/dist/lib/esm/package-manager.mjs +2 -2
- package/docs-site/api-doc-constants/package.json +6 -0
- package/docs-site/api-doc-jsdoc/package.json +6 -0
- package/docs-site/api-doc-link-rendering/package.json +6 -0
- package/docs-site/api-doc-package-sites/package.json +6 -0
- package/docs-site/api-doc-page-generation/package.json +6 -0
- package/docs-site/api-doc-route-segments/package.json +6 -0
- package/docs-site/api-doc-settings/package.json +6 -0
- package/docs-site/api-doc-source-processing/package.json +6 -0
- package/docs-site/api-doc-text-utils/package.json +6 -0
- package/docs-site/api-doc-type-merging/package.json +6 -0
- package/docs-site/api-doc-types/package.json +6 -0
- package/docs-site/api-docs/package.json +6 -0
- package/docs-site/astro-config/package.json +6 -0
- package/docs-site/docs-links/package.json +6 -0
- package/docs-site/docs-site-assets/package.json +6 -0
- package/docs-site/docs-site-commands/package.json +6 -0
- package/docs-site/docs-site-config/package.json +6 -0
- package/docs-site/index/package.json +6 -0
- package/docs-site/link-check/package.json +6 -0
- package/docs-site/og-image/package.json +6 -0
- package/docs-site/og-image-page/package.json +6 -0
- package/docs-site/og-images/package.json +6 -0
- package/docs-site/package.json +6 -0
- package/docs-site/route-data/package.json +6 -0
- package/docs-site/satteri-github-alerts/package.json +6 -0
- package/docs-site/satteri-relative-links/package.json +6 -0
- package/docs-site/unrendered-alerts/package.json +6 -0
- package/package.json +74 -4
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* MDX page + sidebar emission: renders module index pages, per-type overview pages, per-member pages,
|
|
6
|
+
* backlinks, and the Starlight sidebar JSON.
|
|
7
|
+
*/
|
|
8
|
+
import type { MemberInfo, PageContent, PageFrontMatter, SidebarEntry, SidebarTreeNode, TypeInfo } from './api-doc-types.cjs';
|
|
9
|
+
/**
|
|
10
|
+
* Append backlinks to overview pages and write all files. Keyed by qualified `${namespace}#${name}`.
|
|
11
|
+
*
|
|
12
|
+
* @param pageContents - Every overview page's content and path, keyed by qualified id.
|
|
13
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function appendBacklinksAndWrite(pageContents: Map<string, PageContent>, allTypes: Map<string, TypeInfo>): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Build backlinks by scanning generated page content for internal API links. Keyed by qualified id.
|
|
18
|
+
*
|
|
19
|
+
* @param pageContents - Every overview page's content and path, keyed by qualified id.
|
|
20
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
21
|
+
* @returns Each referenced type's qualified id mapped to the ids of the pages linking to it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildBacklinksFromContent(pageContents: Map<string, PageContent>, allTypes: Map<string, TypeInfo>): Map<string, string[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Builds the namespace tree the sidebar is generated from.
|
|
26
|
+
*
|
|
27
|
+
* @param types - The documented types, keyed by qualified id.
|
|
28
|
+
* @returns The root of the tree.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildSidebarTree(types: Map<string, TypeInfo>): SidebarTreeNode;
|
|
31
|
+
/**
|
|
32
|
+
* The raw code signature shown on a type-overview page's OG card, for the kinds that render a single
|
|
33
|
+
* signature line (function / type alias / variable). Classes, interfaces and enums render member
|
|
34
|
+
* tables instead, so they get no signature block.
|
|
35
|
+
*
|
|
36
|
+
* @param name - The type's name.
|
|
37
|
+
* @param info - The documented type.
|
|
38
|
+
* @returns The signature, or `undefined` for a kind that renders member tables instead.
|
|
39
|
+
*/
|
|
40
|
+
export declare function computeOverviewSignature(name: string, info: TypeInfo): string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Writes one page per own property and per own method overload key of a class or interface.
|
|
43
|
+
*
|
|
44
|
+
* @param name - The type's name.
|
|
45
|
+
* @param info - The documented type.
|
|
46
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function generateMemberPages(name: string, info: TypeInfo, allTypes: Map<string, TypeInfo>): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Writes each module's index page and the root API index.
|
|
51
|
+
*
|
|
52
|
+
* @param types - The documented types, keyed by qualified id.
|
|
53
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
54
|
+
* @param moduleOverviews - Each namespace's `@file` overview.
|
|
55
|
+
*/
|
|
56
|
+
export declare function generateNamespaceIndexPages(types: Map<string, TypeInfo>, allTypes: Map<string, TypeInfo>, moduleOverviews: Map<string, string>): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Renders a type's overview page.
|
|
59
|
+
*
|
|
60
|
+
* @param name - The type's name.
|
|
61
|
+
* @param info - The documented type.
|
|
62
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
63
|
+
* @returns The page's content, before backlinks, and the path it is written to.
|
|
64
|
+
*/
|
|
65
|
+
export declare function generateOverviewPage(name: string, info: TypeInfo, allTypes: Map<string, TypeInfo>): Promise<PageContent>;
|
|
66
|
+
/**
|
|
67
|
+
* Writes the Starlight sidebar of the API reference.
|
|
68
|
+
*
|
|
69
|
+
* @param types - The documented types, keyed by qualified id.
|
|
70
|
+
*/
|
|
71
|
+
export declare function generateSidebarJson(types: Map<string, TypeInfo>): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Renders a class's constructor block.
|
|
74
|
+
*
|
|
75
|
+
* @param lines - The page lines to append to.
|
|
76
|
+
* @param name - The type's name.
|
|
77
|
+
* @param info - The documented type.
|
|
78
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
79
|
+
*/
|
|
80
|
+
export declare function renderConstructorMdx(lines: string[], name: string, info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
81
|
+
/**
|
|
82
|
+
* Renders an enum's members.
|
|
83
|
+
*
|
|
84
|
+
* @param lines - The page lines to append to.
|
|
85
|
+
* @param info - The documented type.
|
|
86
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
87
|
+
*/
|
|
88
|
+
export declare function renderEnumPage(lines: string[], info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Render the Starlight frontmatter block (through the closing `---` and its blank line) shared by every
|
|
91
|
+
* generated page kind: module index, type overview, property, and method.
|
|
92
|
+
*
|
|
93
|
+
* Every page kind goes through here so no field can be emitted on some kinds and silently dropped on
|
|
94
|
+
* others. `description` in particular is not just SEO metadata — it is the line the OG card renders under
|
|
95
|
+
* the title, so a page kind that skipped it produced a title-only card next to fully populated ones.
|
|
96
|
+
*
|
|
97
|
+
* @param frontMatter - The page's frontmatter fields.
|
|
98
|
+
* @returns The frontmatter lines, through the closing `---` and its blank line.
|
|
99
|
+
*/
|
|
100
|
+
export declare function renderFrontMatter(frontMatter: PageFrontMatter): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Renders a function's signature, parameters, return value and examples.
|
|
103
|
+
*
|
|
104
|
+
* @param lines - The page lines to append to.
|
|
105
|
+
* @param info - The documented type.
|
|
106
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
107
|
+
*/
|
|
108
|
+
export declare function renderFunctionPage(lines: string[], info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
109
|
+
/**
|
|
110
|
+
* Renders one method overload.
|
|
111
|
+
*
|
|
112
|
+
* @param lines - The page lines to append to.
|
|
113
|
+
* @param overload - The overload.
|
|
114
|
+
* @param typeName - The name of the type the method belongs to.
|
|
115
|
+
* @param namespace - The namespace of the type the method belongs to.
|
|
116
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
117
|
+
*/
|
|
118
|
+
export declare function renderMethodOverloadMdx(lines: string[], overload: MemberInfo, typeName: string, namespace: string, allTypes: Map<string, TypeInfo>): void;
|
|
119
|
+
/**
|
|
120
|
+
* Renders a type's method table.
|
|
121
|
+
*
|
|
122
|
+
* @param lines - The page lines to append to.
|
|
123
|
+
* @param info - The documented type.
|
|
124
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
125
|
+
*/
|
|
126
|
+
export declare function renderMethodTableMdx(lines: string[], info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
127
|
+
/**
|
|
128
|
+
* Renders a type's property table.
|
|
129
|
+
*
|
|
130
|
+
* @param lines - The page lines to append to.
|
|
131
|
+
* @param info - The documented type.
|
|
132
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
133
|
+
*/
|
|
134
|
+
export declare function renderPropertyTableMdx(lines: string[], info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
135
|
+
/**
|
|
136
|
+
* Renders a type alias's signature.
|
|
137
|
+
*
|
|
138
|
+
* @param lines - The page lines to append to.
|
|
139
|
+
* @param info - The documented type.
|
|
140
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
141
|
+
*/
|
|
142
|
+
export declare function renderTypeAliasPage(lines: string[], info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
143
|
+
/**
|
|
144
|
+
* Renders a variable's declaration and type.
|
|
145
|
+
*
|
|
146
|
+
* @param lines - The page lines to append to.
|
|
147
|
+
* @param name - The type's name.
|
|
148
|
+
* @param info - The documented type.
|
|
149
|
+
* @param allTypes - Every documented type, keyed by `${namespace}#${name}`.
|
|
150
|
+
*/
|
|
151
|
+
export declare function renderVariablePage(lines: string[], name: string, info: TypeInfo, allTypes: Map<string, TypeInfo>): void;
|
|
152
|
+
/**
|
|
153
|
+
* Converts a namespace tree node into a sidebar group.
|
|
154
|
+
*
|
|
155
|
+
* @param node - The node.
|
|
156
|
+
* @param label - The group's label.
|
|
157
|
+
* @returns The sidebar group.
|
|
158
|
+
*/
|
|
159
|
+
export declare function sidebarTreeToEntries(node: SidebarTreeNode, label: string): SidebarEntry;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var api_doc_route_segments_exports = {};
|
|
25
|
+
__export(api_doc_route_segments_exports, {
|
|
26
|
+
toRouteSegment: () => toRouteSegment,
|
|
27
|
+
toRouteSegmentPreserveCase: () => toRouteSegmentPreserveCase
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(api_doc_route_segments_exports);
|
|
30
|
+
function toRouteSegment(segment) {
|
|
31
|
+
return segment.toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
function toRouteSegmentPreserveCase(segment) {
|
|
34
|
+
const cleaned = segment.replaceAll(/[^a-zA-Z0-9]+/g, "-").replaceAll(/^-|-$/g, "");
|
|
35
|
+
return cleaned || "unnamed";
|
|
36
|
+
}
|
|
37
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
38
|
+
0 && (module.exports = {
|
|
39
|
+
toRouteSegment,
|
|
40
|
+
toRouteSegmentPreserveCase
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHNsdWcgcnVsZXMgZm9yIGEgdHlwZSdzIHBhZ2U6IHRoZSBsb3dlcmNhc2VkIHNlZ21lbnQgaXRzIGZpbGUgaXMgd3JpdHRlbiB1bmRlciwgYW5kIHRoZSBjYXNlLXByZXNlcnZlZCBvbmUgaXRzXG4gKiBVUkwgdXNlcy4gRXZlcnkgc2l0ZSBpcyBnZW5lcmF0ZWQgd2l0aCB0aGVzZSBydWxlcywgc28gYSBsaW5rIGludG8gYW5vdGhlciBwYWNrYWdlJ3Mgc2l0ZSBpcyBidWlsdCB3aXRoIHRoZW0gdG9vLlxuICovXG5cbi8qKlxuICogTG93ZXJjYXNlIGEgcGF0aCBzZWdtZW50IGZvciB1c2UgaW4gYW4gT04tRElTSyBmaWxlL2RpciBuYW1lLiBUaGUgcm91dGVzIHRoZW1zZWx2ZXMgYXJlIGNhc2UtcHJlc2VydmVkIHZpYSBhblxuICogZXhwbGljaXQgYHNsdWc6YCBmcm9udG1hdHRlciAoc2VlIHtAbGluayB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZX0pLCBidXQgdGhlIGZpbGVzIHN0YXkgbG93ZXJjYXNlIChhbmQgbnVtZXJpY2FsbHlcbiAqIGRpc2FtYmlndWF0ZWQpIHNvIHR3byB0eXBlIG5hbWVzIGRpZmZlcmluZyBvbmx5IGJ5IGNhc2UgY2Fubm90IGNvbGxpZGUgb24gV2luZG93cycgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBzZWdtZW50IC0gVGhlIHNlZ21lbnQuXG4gKiBAcmV0dXJucyBUaGUgbG93ZXJjYXNlZCBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Sb3V0ZVNlZ21lbnQoc2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNlZ21lbnQudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBTbHVnaWZ5IGEgcGF0aCBzZWdtZW50ICh0eXBlIG5hbWUpIGZvciBhIFVSTC9yb3V0ZSB3aGlsZSBQUkVTRVJWSU5HIGNhc2U6IGNvbGxhcHNlIHJ1bnMgb2Ygbm9uLWFscGhhbnVtZXJpY1xuICogY2hhcmFjdGVycyB0byBgLWAgYW5kIHRyaW0uIFVzZWQgZm9yIHRoZSBjYXNlLXByZXNlcnZlZCBgc2x1ZzpgIGZyb250bWF0dGVyIGFuZCB0aGUgaW50ZXJuYWwgbGlua3MgdGhhdCBwb2ludCBhdCBpdCxcbiAqIHNvIFVSTHMgcmVhZCBhcyBwcmV0dHkgUGFzY2FsQ2FzZSAoZS5nLiBgL2FwaS8uLi4vVHlwZU5hbWUvYCkuXG4gKlxuICogQHBhcmFtIHNlZ21lbnQgLSBUaGUgc2VnbWVudC5cbiAqIEByZXR1cm5zIFRoZSBzbHVnLCBvciBgdW5uYW1lZGAgd2hlbiBub3RoaW5nIGFscGhhbnVtZXJpYyBpcyBsZWZ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Uoc2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IHNlZ21lbnQucmVwbGFjZUFsbCgvW15hLXpBLVowLTldKy9nLCAnLScpLnJlcGxhY2VBbGwoL14tfC0kL2csICcnKTtcbiAgcmV0dXJuIGNsZWFuZWQgfHwgJ3VubmFtZWQnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlTyxTQUFTLGVBQWUsU0FBeUI7QUFDdEQsU0FBTyxRQUFRLFlBQVk7QUFDN0I7QUFVTyxTQUFTLDJCQUEyQixTQUF5QjtBQUNsRSxRQUFNLFVBQVUsUUFBUSxXQUFXLGtCQUFrQixHQUFHLEVBQUUsV0FBVyxVQUFVLEVBQUU7QUFDakYsU0FBTyxXQUFXO0FBQ3BCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The slug rules for a type's page: the lowercased segment its file is written under, and the case-preserved one its
|
|
6
|
+
* URL uses. Every site is generated with these rules, so a link into another package's site is built with them too.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Lowercase a path segment for use in an ON-DISK file/dir name. The routes themselves are case-preserved via an
|
|
10
|
+
* explicit `slug:` frontmatter (see {@link toRouteSegmentPreserveCase}), but the files stay lowercase (and numerically
|
|
11
|
+
* disambiguated) so two type names differing only by case cannot collide on Windows' case-insensitive filesystem.
|
|
12
|
+
*
|
|
13
|
+
* @param segment - The segment.
|
|
14
|
+
* @returns The lowercased segment.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toRouteSegment(segment: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Slugify a path segment (type name) for a URL/route while PRESERVING case: collapse runs of non-alphanumeric
|
|
19
|
+
* characters to `-` and trim. Used for the case-preserved `slug:` frontmatter and the internal links that point at it,
|
|
20
|
+
* so URLs read as pretty PascalCase (e.g. `/api/.../TypeName/`).
|
|
21
|
+
*
|
|
22
|
+
* @param segment - The segment.
|
|
23
|
+
* @returns The slug, or `unnamed` when nothing alphanumeric is left.
|
|
24
|
+
*/
|
|
25
|
+
export declare function toRouteSegmentPreserveCase(segment: string): string;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var api_doc_settings_exports = {};
|
|
25
|
+
__export(api_doc_settings_exports, {
|
|
26
|
+
configureApiDocs: () => configureApiDocs,
|
|
27
|
+
getApiDocSettings: () => getApiDocSettings
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(api_doc_settings_exports);
|
|
30
|
+
const moduleState = {
|
|
31
|
+
settings: void 0
|
|
32
|
+
};
|
|
33
|
+
function configureApiDocs(settings) {
|
|
34
|
+
moduleState.settings = settings;
|
|
35
|
+
}
|
|
36
|
+
function getApiDocSettings() {
|
|
37
|
+
if (moduleState.settings === void 0) {
|
|
38
|
+
throw new Error("The API documentation generator is not configured: call configureApiDocs() first.");
|
|
39
|
+
}
|
|
40
|
+
return moduleState.settings;
|
|
41
|
+
}
|
|
42
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
43
|
+
0 && (module.exports = {
|
|
44
|
+
configureApiDocs,
|
|
45
|
+
getApiDocSettings
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLXNldHRpbmdzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBlci1zaXRlIHNldHRpbmdzIG9mIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdoZXJlIGl0IHdyaXRlcywgd2hpY2ggcGFja2FnZSBpdCBkb2N1bWVudHMsIHRoZSBiYXNlXG4gKiBwYXRoIGl0cyBsaW5rcyBjYXJyeSwgYW5kIHRoZSBleHRlcm5hbCBsaW5rcyBhIHNpdGUgYWRkcyB0byB0aGUgZ2VuZXJpYyBvbmVzLlxuICovXG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgcmVhZHMgd2hpbGUgaXQgcmVuZGVycyBwYWdlcyBhbmQgbGlua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRG9jU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHNpdGUncyBiYXNlIHBhdGgsIHdpdGggYSBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBvbmUsIGUuZy4gYC90eXBlc2NyaXB0LWxpYmAuIEV2ZXJ5IGluLWNvbnRlbnQgbGlua1xuICAgKiB0aGUgZ2VuZXJhdG9yIGVtaXRzIHN0YXJ0cyB3aXRoIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBuYW1lcyBtYXBwZWQgdG8gdGhlIFVSTCB0aGVpciByZWZlcmVuY2VzIGxpbmsgdG8sIGZvciB0eXBlcyBuZWl0aGVyIHRoaXMgcGFja2FnZSBub3IgYSB7QGxpbmsgcGFja2FnZVNpdGVzfVxuICAgKiBwYWNrYWdlIGRlY2xhcmVzLCBlLmcuIGFuIGVjb3N5c3RlbSdzIG93biBBUEkgcmVmZXJlbmNlLiBDb25zdWx0ZWQgYmVmb3JlIHRoZSBnZW5lcmljIFR5cGVTY3JpcHQsIEphdmFTY3JpcHQgYW5kXG4gICAqIFdlYiBBUEkgbGlua3MsIHNvIGFuIGVudHJ5IGhlcmUgd2lucyBvdmVyIHRoZW0uXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rczogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHRoZSBnZW5lcmF0ZWQgQVBJIHBhZ2VzIGFyZSB3cml0dGVuIHRvLCBub3JtYWxseSBgPGRvY3M+L3NyYy9jb250ZW50L2RvY3MvYXBpYC5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlJ3MgbmFtZSwgZS5nLiBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliYC4gSW1wb3J0IHN0YXRlbWVudHMgYXJlIGJ1aWx0IGZyb20gaXQuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIG5hbWVzIG1hcHBlZCB0byB0aGUgcm9vdCBVUkwgb2YgdGhlaXIgZG9jdW1lbnRhdGlvbiBzaXRlLCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guIEEgdHlwZSB3aG9zZVxuICAgKiBkZWNsYXJhdGlvbiByZXNvbHZlcyBpbnRvIG9uZSBvZiB0aGVzZSBwYWNrYWdlcyBsaW5rcyB0byBpdHMgcGFnZSBvbiB0aGF0IHNpdGUuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlU2l0ZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIEpTT04gZmlsZSB0aGUgZ2VuZXJhdGVkIFN0YXJsaWdodCBzaWRlYmFyIGlzIHdyaXR0ZW4gdG8uXG4gICAqL1xuICByZWFkb25seSBzaWRlYmFyRmlsZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICBzZXR0aW5nczogQXBpRG9jU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgc2V0dGluZ3M6IHVuZGVmaW5lZFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzZXR0aW5ncyBldmVyeSBsYXRlciBwYWdlIGFuZCBsaW5rIHJlYWRzLlxuICpcbiAqIEBwYXJhbSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZUFwaURvY3Moc2V0dGluZ3M6IEFwaURvY1NldHRpbmdzKTogdm9pZCB7XG4gIG1vZHVsZVN0YXRlLnNldHRpbmdzID0gc2V0dGluZ3M7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc2V0dGluZ3Mgc2V0IGJ5IHtAbGluayBjb25maWd1cmVBcGlEb2NzfS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2V0dGluZ3MuXG4gKiBAdGhyb3dzIElmIHtAbGluayBjb25maWd1cmVBcGlEb2NzfSBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBpRG9jU2V0dGluZ3MoKTogQXBpRG9jU2V0dGluZ3Mge1xuICBpZiAobW9kdWxlU3RhdGUuc2V0dGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFQSSBkb2N1bWVudGF0aW9uIGdlbmVyYXRvciBpcyBub3QgY29uZmlndXJlZDogY2FsbCBjb25maWd1cmVBcGlEb2NzKCkgZmlyc3QuJyk7XG4gIH1cblxuICByZXR1cm4gbW9kdWxlU3RhdGUuc2V0dGluZ3M7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtEQSxNQUFNLGNBQTJCO0FBQUEsRUFDL0IsVUFBVTtBQUNaO0FBT08sU0FBUyxpQkFBaUIsVUFBZ0M7QUFDL0QsY0FBWSxXQUFXO0FBQ3pCO0FBUU8sU0FBUyxvQkFBb0M7QUFDbEQsTUFBSSxZQUFZLGFBQWEsUUFBVztBQUN0QyxVQUFNLElBQUksTUFBTSxtRkFBbUY7QUFBQSxFQUNyRztBQUVBLFNBQU8sWUFBWTtBQUNyQjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The per-site settings of the API documentation generator: where it writes, which package it documents, the base
|
|
6
|
+
* path its links carry, and the external links a site adds to the generic ones.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The settings the API documentation generator reads while it renders pages and links.
|
|
10
|
+
*/
|
|
11
|
+
export interface ApiDocSettings {
|
|
12
|
+
/**
|
|
13
|
+
* The site's base path, with a leading slash and no trailing one, e.g. `/typescript-lib`. Every in-content link
|
|
14
|
+
* the generator emits starts with it.
|
|
15
|
+
*/
|
|
16
|
+
readonly basePath: string;
|
|
17
|
+
/**
|
|
18
|
+
* Type names mapped to the URL their references link to, for types neither this package nor a {@link packageSites}
|
|
19
|
+
* package declares, e.g. an ecosystem's own API reference. Consulted before the generic TypeScript, JavaScript and
|
|
20
|
+
* Web API links, so an entry here wins over them.
|
|
21
|
+
*/
|
|
22
|
+
readonly externalTypeLinks: ReadonlyMap<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* The folder the generated API pages are written to, normally `<docs>/src/content/docs/api`.
|
|
25
|
+
*/
|
|
26
|
+
readonly outputDirectory: string;
|
|
27
|
+
/**
|
|
28
|
+
* The documented package's name, e.g. `@mnaoumov/typescript-lib`. Import statements are built from it.
|
|
29
|
+
*/
|
|
30
|
+
readonly packageName: string;
|
|
31
|
+
/**
|
|
32
|
+
* Package names mapped to the root URL of their documentation site, with a trailing slash. A type whose
|
|
33
|
+
* declaration resolves into one of these packages links to its page on that site.
|
|
34
|
+
*/
|
|
35
|
+
readonly packageSites: ReadonlyMap<string, string>;
|
|
36
|
+
/**
|
|
37
|
+
* The JSON file the generated Starlight sidebar is written to.
|
|
38
|
+
*/
|
|
39
|
+
readonly sidebarFile: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sets the settings every later page and link reads.
|
|
43
|
+
*
|
|
44
|
+
* @param settings - The settings.
|
|
45
|
+
*/
|
|
46
|
+
export declare function configureApiDocs(settings: ApiDocSettings): void;
|
|
47
|
+
/**
|
|
48
|
+
* Gets the settings set by {@link configureApiDocs}.
|
|
49
|
+
*
|
|
50
|
+
* @returns The settings.
|
|
51
|
+
* @throws If {@link configureApiDocs} has not been called.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getApiDocSettings(): ApiDocSettings;
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
"use strict";
|
|
40
|
+
var __defProp = Object.defineProperty;
|
|
41
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
42
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
43
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
44
|
+
var __export = (target, all) => {
|
|
45
|
+
for (var name in all)
|
|
46
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
47
|
+
};
|
|
48
|
+
var __copyProps = (to, from, except, desc) => {
|
|
49
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
50
|
+
for (let key of __getOwnPropNames(from))
|
|
51
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
52
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
53
|
+
}
|
|
54
|
+
return to;
|
|
55
|
+
};
|
|
56
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
57
|
+
var api_doc_source_processing_exports = {};
|
|
58
|
+
__export(api_doc_source_processing_exports, {
|
|
59
|
+
collectFunctions: () => collectFunctions,
|
|
60
|
+
collectPackageDeclarations: () => collectPackageDeclarations,
|
|
61
|
+
collectVariables: () => collectVariables,
|
|
62
|
+
computeCacheHash: () => computeCacheHash,
|
|
63
|
+
computeNamespace: () => computeNamespace,
|
|
64
|
+
findEntryFiles: () => findEntryFiles,
|
|
65
|
+
processSourceFile: () => processSourceFile,
|
|
66
|
+
registerGenericTypeParams: () => registerGenericTypeParams
|
|
67
|
+
});
|
|
68
|
+
module.exports = __toCommonJS(api_doc_source_processing_exports);
|
|
69
|
+
var import_node_crypto = require('node:crypto');
|
|
70
|
+
var import_node_fs = require('node:fs');
|
|
71
|
+
var import_node_path = require('node:path');
|
|
72
|
+
var import_ts_morph = require('ts-morph');
|
|
73
|
+
var import_api_doc_constants = require('./api-doc-constants.cjs');
|
|
74
|
+
var import_api_doc_jsdoc = require('./api-doc-jsdoc.cjs');
|
|
75
|
+
var import_api_doc_package_sites = require('./api-doc-package-sites.cjs');
|
|
76
|
+
var import_api_doc_settings = require('./api-doc-settings.cjs');
|
|
77
|
+
var import_api_doc_text_utils = require('./api-doc-text-utils.cjs');
|
|
78
|
+
const EXCLUDED_DIR_SEGMENTS = /* @__PURE__ */ new Set(["@types", "styles", "test-helpers"]);
|
|
79
|
+
function collectFunctions(src, types, namespace) {
|
|
80
|
+
for (const $function of src.getFunctions()) {
|
|
81
|
+
if (!$function.isExported()) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const name = $function.getName();
|
|
85
|
+
if (!name) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const key = qualifiedKey(namespace, name);
|
|
89
|
+
if (types.has(key)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const parameterDescriptions = (0, import_api_doc_jsdoc.getParameterDescriptions)($function);
|
|
93
|
+
const params = $function.getParameters().map((p) => ({
|
|
94
|
+
description: parameterDescriptions.get(p.getName()) ?? "",
|
|
95
|
+
name: p.getName(),
|
|
96
|
+
type: (0, import_api_doc_text_utils.simplifyType)(p.getType().getText())
|
|
97
|
+
}));
|
|
98
|
+
const parameterString = params.map((p) => `${p.name}: ${p.type}`).join(", ");
|
|
99
|
+
const returnType = (0, import_api_doc_text_utils.simplifyType)($function.getReturnType().getText());
|
|
100
|
+
const signature = `${name}(${parameterString})`;
|
|
101
|
+
types.set(key, {
|
|
102
|
+
baseTypes: [],
|
|
103
|
+
description: (0, import_api_doc_jsdoc.getDescription)($function),
|
|
104
|
+
enumMembers: [],
|
|
105
|
+
examples: (0, import_api_doc_jsdoc.getExamples)($function),
|
|
106
|
+
implementsTypes: [],
|
|
107
|
+
kind: "function",
|
|
108
|
+
methods: [{
|
|
109
|
+
description: (0, import_api_doc_jsdoc.getDescription)($function),
|
|
110
|
+
examples: (0, import_api_doc_jsdoc.getExamples)($function),
|
|
111
|
+
inheritedFrom: "",
|
|
112
|
+
isStatic: false,
|
|
113
|
+
name,
|
|
114
|
+
overloadKey: name,
|
|
115
|
+
parameters: params,
|
|
116
|
+
remarks: (0, import_api_doc_jsdoc.getRemarks)($function),
|
|
117
|
+
returnDescription: (0, import_api_doc_jsdoc.getReturnDescription)($function),
|
|
118
|
+
returnType,
|
|
119
|
+
signature,
|
|
120
|
+
since: (0, import_api_doc_jsdoc.getSince)($function),
|
|
121
|
+
type: ""
|
|
122
|
+
}],
|
|
123
|
+
name,
|
|
124
|
+
namespace,
|
|
125
|
+
properties: [],
|
|
126
|
+
remarks: (0, import_api_doc_jsdoc.getRemarks)($function),
|
|
127
|
+
typeParameters: $function.getTypeParameters().map((tp) => tp.getText())
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function collectPackageDeclarations(src) {
|
|
132
|
+
for (const importDeclaration of src.getImportDeclarations()) {
|
|
133
|
+
for (const namedImport of importDeclaration.getNamedImports()) {
|
|
134
|
+
const localNameNode = namedImport.getAliasNode() ?? namedImport.getNameNode();
|
|
135
|
+
const declarations = localNameNode.getSymbolOrThrow().getAliasedSymbolOrThrow().getDeclarations();
|
|
136
|
+
for (const declaration of declarations) {
|
|
137
|
+
if (isTypeDeclaration(declaration)) {
|
|
138
|
+
(0, import_api_doc_package_sites.registerPackageDeclaration)(namedImport.getName(), declaration.getSourceFile().getFilePath());
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function collectVariables(src, types, namespace) {
|
|
145
|
+
for (const variableStatement of src.getVariableStatements()) {
|
|
146
|
+
if (!variableStatement.isExported()) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const declarationKind = variableStatement.getDeclarationKind();
|
|
150
|
+
for (const declaration of variableStatement.getDeclarations()) {
|
|
151
|
+
const name = declaration.getName();
|
|
152
|
+
const key = qualifiedKey(namespace, name);
|
|
153
|
+
if (types.has(key)) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
types.set(key, {
|
|
157
|
+
baseTypes: [],
|
|
158
|
+
description: (0, import_api_doc_jsdoc.getDescription)(variableStatement),
|
|
159
|
+
enumMembers: [],
|
|
160
|
+
examples: (0, import_api_doc_jsdoc.getExamples)(variableStatement),
|
|
161
|
+
implementsTypes: [],
|
|
162
|
+
kind: "variable",
|
|
163
|
+
methods: [],
|
|
164
|
+
name,
|
|
165
|
+
namespace,
|
|
166
|
+
properties: [],
|
|
167
|
+
remarks: (0, import_api_doc_jsdoc.getRemarks)(variableStatement),
|
|
168
|
+
typeParameters: [],
|
|
169
|
+
variableKeyword: declarationKind,
|
|
170
|
+
variableType: (0, import_api_doc_text_utils.simplifyType)(declaration.getType().getText())
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function computeCacheHash(entryFiles, generatorDirectory) {
|
|
176
|
+
const hash = (0, import_node_crypto.createHash)("sha256");
|
|
177
|
+
const generatorFiles = (0, import_node_fs.readdirSync)(generatorDirectory).filter((name) => !name.endsWith(".test.ts")).sort();
|
|
178
|
+
for (const generatorFile of generatorFiles) {
|
|
179
|
+
hash.update(generatorFile);
|
|
180
|
+
hash.update((0, import_node_fs.readFileSync)((0, import_node_path.join)(generatorDirectory, generatorFile), "utf-8"));
|
|
181
|
+
}
|
|
182
|
+
const settings = (0, import_api_doc_settings.getApiDocSettings)();
|
|
183
|
+
hash.update(JSON.stringify({
|
|
184
|
+
...settings,
|
|
185
|
+
externalTypeLinks: [...settings.externalTypeLinks],
|
|
186
|
+
packageSites: [...settings.packageSites]
|
|
187
|
+
}));
|
|
188
|
+
for (const filePath of [...entryFiles].sort()) {
|
|
189
|
+
hash.update(filePath);
|
|
190
|
+
hash.update((0, import_node_fs.readFileSync)(filePath, "utf-8"));
|
|
191
|
+
}
|
|
192
|
+
return hash.digest("hex");
|
|
193
|
+
}
|
|
194
|
+
function computeNamespace(srcDirectory, filePath) {
|
|
195
|
+
return (0, import_node_path.relative)(srcDirectory, filePath).replaceAll("\\", "/").replace(/\.ts$/, "");
|
|
196
|
+
}
|
|
197
|
+
function findEntryFiles(directory) {
|
|
198
|
+
const results = [];
|
|
199
|
+
for (const entry of (0, import_node_fs.readdirSync)(directory, { withFileTypes: true })) {
|
|
200
|
+
const fullPath = (0, import_node_path.join)(directory, entry.name);
|
|
201
|
+
if (entry.isDirectory()) {
|
|
202
|
+
if (EXCLUDED_DIR_SEGMENTS.has(entry.name)) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
results.push(...findEntryFiles(fullPath));
|
|
206
|
+
} else if (isEntryFile(entry.name)) {
|
|
207
|
+
results.push(fullPath);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return results;
|
|
211
|
+
}
|
|
212
|
+
function processSourceFile(src, types, namespace) {
|
|
213
|
+
for (const alias of src.getTypeAliases()) {
|
|
214
|
+
if (!alias.isExported()) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const key = qualifiedKey(namespace, alias.getName());
|
|
218
|
+
if (!types.has(key)) {
|
|
219
|
+
types.set(key, (0, import_api_doc_jsdoc.extractTypeAliasInfo)(alias, namespace));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const enumDeclaration of src.getEnums()) {
|
|
223
|
+
if (!enumDeclaration.isExported()) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const key = qualifiedKey(namespace, enumDeclaration.getName());
|
|
227
|
+
if (!types.has(key)) {
|
|
228
|
+
types.set(key, (0, import_api_doc_jsdoc.extractEnumInfo)(enumDeclaration, namespace));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
for (const iface of src.getInterfaces()) {
|
|
232
|
+
if (!iface.isExported()) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const key = qualifiedKey(namespace, iface.getName());
|
|
236
|
+
if (!types.has(key)) {
|
|
237
|
+
types.set(key, (0, import_api_doc_jsdoc.extractInterfaceInfo)(iface, namespace));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
for (const cls of src.getClasses()) {
|
|
241
|
+
if (!cls.isExported()) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const name = cls.getName();
|
|
245
|
+
if (!name) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const key = qualifiedKey(namespace, name);
|
|
249
|
+
if (!types.has(key)) {
|
|
250
|
+
types.set(key, (0, import_api_doc_jsdoc.extractClassInfo)(cls, namespace));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function registerGenericTypeParams(types) {
|
|
255
|
+
const knownNames = /* @__PURE__ */ new Set();
|
|
256
|
+
for (const [, info] of types) {
|
|
257
|
+
knownNames.add(info.name);
|
|
258
|
+
}
|
|
259
|
+
for (const [, info] of types) {
|
|
260
|
+
for (const tp of info.typeParameters) {
|
|
261
|
+
const bareParameter = tp.replace(/\s+extends\s+.*$/, "");
|
|
262
|
+
if (!knownNames.has(bareParameter)) {
|
|
263
|
+
import_api_doc_constants.GENERIC_TYPE_PARAMS.add(bareParameter);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function isEntryFile(name) {
|
|
269
|
+
return !(!name.endsWith(".ts") || name.endsWith(".d.ts") || ["__merged.ts", "index.ts", "setup.ts"].includes(name) || name.endsWith("-setup.ts") || name.endsWith(".test.ts"));
|
|
270
|
+
}
|
|
271
|
+
function isTypeDeclaration(declaration) {
|
|
272
|
+
return import_ts_morph.Node.isClassDeclaration(declaration) || import_ts_morph.Node.isInterfaceDeclaration(declaration) || import_ts_morph.Node.isTypeAliasDeclaration(declaration) || import_ts_morph.Node.isEnumDeclaration(declaration);
|
|
273
|
+
}
|
|
274
|
+
function qualifiedKey(namespace, name) {
|
|
275
|
+
return `${namespace}#${name}`;
|
|
276
|
+
}
|
|
277
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
278
|
+
0 && (module.exports = {
|
|
279
|
+
collectFunctions,
|
|
280
|
+
collectPackageDeclarations,
|
|
281
|
+
collectVariables,
|
|
282
|
+
computeCacheHash,
|
|
283
|
+
computeNamespace,
|
|
284
|
+
findEntryFiles,
|
|
285
|
+
processSourceFile,
|
|
286
|
+
registerGenericTypeParams
|
|
287
|
+
});
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU291cmNlIGRpc2NvdmVyeSArIGV4dHJhY3Rpb246IHdhbGtzIGBzcmNgLCBmaWx0ZXJzIHRvIGRvY3VtZW50YWJsZSBlbnRyeSBmaWxlcywgYW5kIHR1cm5zIGVhY2hcbiAqIGZpbGUncyBleHBvcnRlZCBkZWNsYXJhdGlvbnMgaW50byBgVHlwZUluZm9gIGVudHJpZXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge1xuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgam9pbixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICd0cy1tb3JwaCc7XG5cbmltcG9ydCB0eXBlIHsgVHlwZUluZm8gfSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBHRU5FUklDX1RZUEVfUEFSQU1TIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0Q2xhc3NJbmZvLFxuICBleHRyYWN0RW51bUluZm8sXG4gIGV4dHJhY3RJbnRlcmZhY2VJbmZvLFxuICBleHRyYWN0VHlwZUFsaWFzSW5mbyxcbiAgZ2V0RGVzY3JpcHRpb24sXG4gIGdldEV4YW1wbGVzLFxuICBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMsXG4gIGdldFJlbWFya3MsXG4gIGdldFJldHVybkRlc2NyaXB0aW9uLFxuICBnZXRTaW5jZVxufSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQYWNrYWdlRGVjbGFyYXRpb24gfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQgeyBnZXRBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgeyBzaW1wbGlmeVR5cGUgfSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuRGlyZWN0b3J5IG5hbWVzIHdob3NlIGVudGlyZSBzdWJ0cmVlIGlzIGV4Y2x1ZGVkIGZyb20gZG9jdW1lbnRhdGlvbi5cbiAqL1xuY29uc3QgRVhDTFVERURfRElSX1NFR01FTlRTID0gbmV3IFNldChbJ0B0eXBlcycsICdzdHlsZXMnLCAndGVzdC1oZWxwZXJzJ10pO1xuXG4vKipcbiAqIENvbGxlY3QgdG9wLWxldmVsIGV4cG9ydGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RGdW5jdGlvbnMoc3JjOiBTb3VyY2VGaWxlLCB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lc3BhY2U6IHN0cmluZyk6IHZvaWQge1xuICBmb3IgKGNvbnN0ICRmdW5jdGlvbiBvZiBzcmMuZ2V0RnVuY3Rpb25zKCkpIHtcbiAgICBpZiAoISRmdW5jdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gJGZ1bmN0aW9uLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAodHlwZXMuaGFzKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMgPSBnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMoJGZ1bmN0aW9uKTtcbiAgICBjb25zdCBwYXJhbXMgPSAkZnVuY3Rpb24uZ2V0UGFyYW1ldGVycygpLm1hcCgocCkgPT4gKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJEZXNjcmlwdGlvbnMuZ2V0KHAuZ2V0TmFtZSgpKSA/PyAnJyxcbiAgICAgIG5hbWU6IHAuZ2V0TmFtZSgpLFxuICAgICAgdHlwZTogc2ltcGxpZnlUeXBlKHAuZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICB9KSk7XG4gICAgY29uc3QgcGFyYW1ldGVyU3RyaW5nID0gcGFyYW1zLm1hcCgocCkgPT4gYCR7cC5uYW1lfTogJHtwLnR5cGV9YCkuam9pbignLCAnKTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gc2ltcGxpZnlUeXBlKCRmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0VGV4dCgpKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBgJHtuYW1lfSgke3BhcmFtZXRlclN0cmluZ30pYDtcbiAgICB0eXBlcy5zZXQoa2V5LCB7XG4gICAgICBiYXNlVHlwZXM6IFtdLFxuICAgICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICBlbnVtTWVtYmVyczogW10sXG4gICAgICBleGFtcGxlczogZ2V0RXhhbXBsZXMoJGZ1bmN0aW9uKSxcbiAgICAgIGltcGxlbWVudHNUeXBlczogW10sXG4gICAgICBraW5kOiAnZnVuY3Rpb24nLFxuICAgICAgbWV0aG9kczogW3tcbiAgICAgICAgZGVzY3JpcHRpb246IGdldERlc2NyaXB0aW9uKCRmdW5jdGlvbiksXG4gICAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcygkZnVuY3Rpb24pLFxuICAgICAgICBpbmhlcml0ZWRGcm9tOiAnJyxcbiAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBvdmVybG9hZEtleTogbmFtZSxcbiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1zLFxuICAgICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKCRmdW5jdGlvbiksXG4gICAgICAgIHJldHVybkRlc2NyaXB0aW9uOiBnZXRSZXR1cm5EZXNjcmlwdGlvbigkZnVuY3Rpb24pLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgIHNpbmNlOiBnZXRTaW5jZSgkZnVuY3Rpb24pLFxuICAgICAgICB0eXBlOiAnJ1xuICAgICAgfV0sXG4gICAgICBuYW1lLFxuICAgICAgbmFtZXNwYWNlLFxuICAgICAgcHJvcGVydGllczogW10sXG4gICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKCRmdW5jdGlvbiksXG4gICAgICB0eXBlUGFyYW1ldGVyczogJGZ1bmN0aW9uLmdldFR5cGVQYXJhbWV0ZXJzKCkubWFwKCh0cCkgPT4gdHAuZ2V0VGV4dCgpKVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVjb3JkcyB3aGVyZSBldmVyeSBzeW1ib2wgYSBzb3VyY2UgZmlsZSBpbXBvcnRzIGlzIGRlY2xhcmVkLCBzbyBhIHR5cGUgYW5vdGhlciBkb2N1bWVudGVkIHBhY2thZ2UgZGVjbGFyZXNcbiAqIGxpbmtzIHRvIHRoYXQgcGFja2FnZSdzIHNpdGUuXG4gKlxuICogQHBhcmFtIHNyYyAtIFRoZSBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYzogU291cmNlRmlsZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGltcG9ydERlY2xhcmF0aW9uIG9mIHNyYy5nZXRJbXBvcnREZWNsYXJhdGlvbnMoKSkge1xuICAgIGZvciAoY29uc3QgbmFtZWRJbXBvcnQgb2YgaW1wb3J0RGVjbGFyYXRpb24uZ2V0TmFtZWRJbXBvcnRzKCkpIHtcbiAgICAgIC8vIEFuIHVucmVzb2x2ZWQgaW1wb3J0IGFsaWFzZXMgdGhlIGNoZWNrZXIncyB1bmtub3duIHN5bWJvbCwgd2hpY2ggaGFzIG5vIGRlY2xhcmF0aW9ucy5cbiAgICAgIC8vIEEgcmVuYW1lZCBpbXBvcnQgY2FycmllcyBpdHMgc3ltYm9sIG9uIHRoZSBsb2NhbCBuYW1lLlxuICAgICAgY29uc3QgbG9jYWxOYW1lTm9kZSA9IG5hbWVkSW1wb3J0LmdldEFsaWFzTm9kZSgpID8/IG5hbWVkSW1wb3J0LmdldE5hbWVOb2RlKCk7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBsb2NhbE5hbWVOb2RlLmdldFN5bWJvbE9yVGhyb3coKS5nZXRBbGlhc2VkU3ltYm9sT3JUaHJvdygpLmdldERlY2xhcmF0aW9ucygpO1xuICAgICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgLy8gT25seSBhIHR5cGUgaXMgbGlua2VkIGZyb20gdHlwZSB0ZXh0OyBhIGZ1bmN0aW9uJ3MgbmFtZSBhbHNvIG1hdGNoZXMgd29yZHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZXMgdG8gaXQuXG4gICAgICAgIGlmIChpc1R5cGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpIHtcbiAgICAgICAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihuYW1lZEltcG9ydC5nZXROYW1lKCksIGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKS5nZXRGaWxlUGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgdG9wLWxldmVsIGV4cG9ydGVkIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyAoZS5nLiBgZXhwb3J0IGNvbnN0IEVNUFRZID0gJydgKS5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RWYXJpYWJsZXMoc3JjOiBTb3VyY2VGaWxlLCB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lc3BhY2U6IHN0cmluZyk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHZhcmlhYmxlU3RhdGVtZW50IG9mIHNyYy5nZXRWYXJpYWJsZVN0YXRlbWVudHMoKSkge1xuICAgIGlmICghdmFyaWFibGVTdGF0ZW1lbnQuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyYXRpb25LaW5kID0gdmFyaWFibGVTdGF0ZW1lbnQuZ2V0RGVjbGFyYXRpb25LaW5kKCk7XG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZVN0YXRlbWVudC5nZXREZWNsYXJhdGlvbnMoKSkge1xuICAgICAgY29uc3QgbmFtZSA9IGRlY2xhcmF0aW9uLmdldE5hbWUoKTtcbiAgICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIG5hbWUpO1xuICAgICAgaWYgKHR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHlwZXMuc2V0KGtleSwge1xuICAgICAgICBiYXNlVHlwZXM6IFtdLFxuICAgICAgICBkZXNjcmlwdGlvbjogZ2V0RGVzY3JpcHRpb24odmFyaWFibGVTdGF0ZW1lbnQpLFxuICAgICAgICBlbnVtTWVtYmVyczogW10sXG4gICAgICAgIGV4YW1wbGVzOiBnZXRFeGFtcGxlcyh2YXJpYWJsZVN0YXRlbWVudCksXG4gICAgICAgIGltcGxlbWVudHNUeXBlczogW10sXG4gICAgICAgIGtpbmQ6ICd2YXJpYWJsZScsXG4gICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICByZW1hcmtzOiBnZXRSZW1hcmtzKHZhcmlhYmxlU3RhdGVtZW50KSxcbiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IFtdLFxuICAgICAgICB2YXJpYWJsZUtleXdvcmQ6IGRlY2xhcmF0aW9uS2luZCxcbiAgICAgICAgdmFyaWFibGVUeXBlOiBzaW1wbGlmeVR5cGUoZGVjbGFyYXRpb24uZ2V0VHlwZSgpLmdldFRleHQoKSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbXB1dGUgYSBoYXNoIG9mIGV2ZXJ5IGlucHV0IHRoYXQgZGVjaWRlcyB0aGUgZ2VuZXJhdGVkIHBhZ2VzOiB0aGUgZ2VuZXJhdG9yJ3Mgb3duIG1vZHVsZXMsIHRoZSBzZXR0aW5ncyBhbmRcbiAqIHRoZSBlbnRyeSBzb3VyY2UgZmlsZXMuIEFuIHVuY2hhbmdlZCBoYXNoIGxldHMgYSBydW4gc2tpcCB0aGUgZ2VuZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW50cnlGaWxlcyAtIFRoZSBlbnRyeSBzb3VyY2UgZmlsZXMuXG4gKiBAcGFyYW0gZ2VuZXJhdG9yRGlyZWN0b3J5IC0gVGhlIGZvbGRlciBob2xkaW5nIHRoZSBnZW5lcmF0b3IncyBtb2R1bGVzLlxuICogQHJldHVybnMgVGhlIGhhc2gsIGFzIGhleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWNoZUhhc2goZW50cnlGaWxlczogc3RyaW5nW10sIGdlbmVyYXRvckRpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuXG4gIC8vIFRoZSBnZW5lcmF0b3IgaXRzZWxmXG4gIGNvbnN0IGdlbmVyYXRvckZpbGVzID0gcmVhZGRpclN5bmMoZ2VuZXJhdG9yRGlyZWN0b3J5KS5maWx0ZXIoKG5hbWUpID0+ICFuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpKS5zb3J0KCk7XG4gIGZvciAoY29uc3QgZ2VuZXJhdG9yRmlsZSBvZiBnZW5lcmF0b3JGaWxlcykge1xuICAgIGhhc2gudXBkYXRlKGdlbmVyYXRvckZpbGUpO1xuICAgIGhhc2gudXBkYXRlKHJlYWRGaWxlU3luYyhqb2luKGdlbmVyYXRvckRpcmVjdG9yeSwgZ2VuZXJhdG9yRmlsZSksICd1dGYtOCcpKTtcbiAgfVxuXG4gIC8vIFRoZSBzZXR0aW5ncywgd2hpY2ggZXZlcnkgbGluayBhbmQgcGF0aCBkZXBlbmRzIG9uXG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgaGFzaC51cGRhdGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLnNldHRpbmdzLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzOiBbLi4uc2V0dGluZ3MuZXh0ZXJuYWxUeXBlTGlua3NdLFxuICAgIHBhY2thZ2VTaXRlczogWy4uLnNldHRpbmdzLnBhY2thZ2VTaXRlc11cbiAgfSkpO1xuXG4gIC8vIEhhc2ggYWxsIGVudHJ5IHNvdXJjZSBmaWxlc1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIFsuLi5lbnRyeUZpbGVzXS5zb3J0KCkpIHtcbiAgICBoYXNoLnVwZGF0ZShmaWxlUGF0aCk7XG4gICAgaGFzaC51cGRhdGUocmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKSk7XG4gIH1cblxuICByZXR1cm4gaGFzaC5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIG5hbWVzcGFjZSAoUE9TSVggcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgbm8gZXh0ZW5zaW9uKSBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqXG4gKiBAcGFyYW0gc3JjRGlyZWN0b3J5IC0gVGhlIHNvdXJjZSBmb2xkZXIgdGhlIG5hbWVzcGFjZSBpcyByZWxhdGl2ZSB0by5cbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBmaWxlJ3MgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTmFtZXNwYWNlKHNyY0RpcmVjdG9yeTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbGF0aXZlKHNyY0RpcmVjdG9yeSwgZmlsZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpLnJlcGxhY2UoL1xcLnRzJC8sICcnKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBmaW5kIGFsbCBkb2N1bWVudGFibGUgYCoudHNgIGVudHJ5IGZpbGVzIHVuZGVyIGBzcmNgLlxuICpcbiAqIEV4Y2x1ZGVzOiBgKi50ZXN0LnRzYCAoaW5jbC4gYCouYnJvd3Nlci50ZXN0LnRzYCAvIGAqLmludGVncmF0aW9uLnRlc3QudHNgKSwgYCouZC50c2AsXG4gKiBgaW5kZXgudHNgLCBgX19tZXJnZWQudHNgLCBgc2V0dXAudHNgLCBgKi1zZXR1cC50c2AsIGFuZCBhbnkgc3VidHJlZSB1bmRlciBhIGBAdHlwZXNgLFxuICogYHN0eWxlc2AsIG9yIGB0ZXN0LWhlbHBlcnNgIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gZGlyZWN0b3J5IC0gVGhlIGZvbGRlciB0byBzZWFyY2guXG4gKiBAcmV0dXJucyBUaGUgZW50cnkgZmlsZXMnIHBhdGhzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVudHJ5RmlsZXMoZGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZGRpclN5bmMoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgaWYgKEVYQ0xVREVEX0RJUl9TRUdNRU5UUy5oYXMoZW50cnkubmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHRzLnB1c2goLi4uZmluZEVudHJ5RmlsZXMoZnVsbFBhdGgpKTtcbiAgICB9IGVsc2UgaWYgKGlzRW50cnlGaWxlKGVudHJ5Lm5hbWUpKSB7XG4gICAgICByZXN1bHRzLnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBhIHNvdXJjZSBmaWxlJ3MgZXhwb3J0ZWQgdHlwZSBhbGlhc2VzLCBlbnVtcywgaW50ZXJmYWNlcyBhbmQgY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gc3JjIC0gVGhlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTb3VyY2VGaWxlKHNyYzogU291cmNlRmlsZSwgdHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhbGlhcyBvZiBzcmMuZ2V0VHlwZUFsaWFzZXMoKSkge1xuICAgIGlmICghYWxpYXMuaXNFeHBvcnRlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcXVhbGlmaWVkS2V5KG5hbWVzcGFjZSwgYWxpYXMuZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0VHlwZUFsaWFzSW5mbyhhbGlhcywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtRGVjbGFyYXRpb24gb2Ygc3JjLmdldEVudW1zKCkpIHtcbiAgICBpZiAoIWVudW1EZWNsYXJhdGlvbi5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBlbnVtRGVjbGFyYXRpb24uZ2V0TmFtZSgpKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0RW51bUluZm8oZW51bURlY2xhcmF0aW9uLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGlmYWNlIG9mIHNyYy5nZXRJbnRlcmZhY2VzKCkpIHtcbiAgICBpZiAoIWlmYWNlLmlzRXhwb3J0ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHF1YWxpZmllZEtleShuYW1lc3BhY2UsIGlmYWNlLmdldE5hbWUoKSk7XG4gICAgaWYgKCF0eXBlcy5oYXMoa2V5KSkge1xuICAgICAgdHlwZXMuc2V0KGtleSwgZXh0cmFjdEludGVyZmFjZUluZm8oaWZhY2UsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2xzIG9mIHNyYy5nZXRDbGFzc2VzKCkpIHtcbiAgICBpZiAoIWNscy5pc0V4cG9ydGVkKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gY2xzLmdldE5hbWUoKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBxdWFsaWZpZWRLZXkobmFtZXNwYWNlLCBuYW1lKTtcbiAgICBpZiAoIXR5cGVzLmhhcyhrZXkpKSB7XG4gICAgICB0eXBlcy5zZXQoa2V5LCBleHRyYWN0Q2xhc3NJbmZvKGNscywgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIHR5cGUgcGFyYW1ldGVyIG5hbWVzIHNvIHJlbmRlclR5cGVXaXRoTGlua3Mgd29uJ3QgaHlwZXJsaW5rIHRoZW0uXG4gKiBTa2lwIG5hbWVzIHRoYXQgYXJlIGFsc28ga25vd24gdHlwZXMg4oCUIHRob3NlIHNob3VsZCBzdGlsbCBiZSBsaW5rYWJsZS5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJHZW5lcmljVHlwZVBhcmFtcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IGtub3duTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGtub3duTmFtZXMuYWRkKGluZm8ubmFtZSk7XG4gIH1cbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGZvciAoY29uc3QgdHAgb2YgaW5mby50eXBlUGFyYW1ldGVycykge1xuICAgICAgY29uc3QgYmFyZVBhcmFtZXRlciA9IHRwLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICAgIGlmICgha25vd25OYW1lcy5oYXMoYmFyZVBhcmFtZXRlcikpIHtcbiAgICAgICAgR0VORVJJQ19UWVBFX1BBUkFNUy5hZGQoYmFyZVBhcmFtZXRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRW50cnlGaWxlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBUaGUgYC50ZXN0LnRzYCBjbGF1c2UgY292ZXJzICoudGVzdC50cywgKi5icm93c2VyLnRlc3QudHMsICouaW50ZWdyYXRpb24udGVzdC50c1xuICByZXR1cm4gISghbmFtZS5lbmRzV2l0aCgnLnRzJykgfHwgbmFtZS5lbmRzV2l0aCgnLmQudHMnKSB8fCBbJ19fbWVyZ2VkLnRzJywgJ2luZGV4LnRzJywgJ3NldHVwLnRzJ10uaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJykgfHwgbmFtZS5lbmRzV2l0aCgnLnRlc3QudHMnKSk7XG59XG5cbmZ1bmN0aW9uIGlzVHlwZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uOiBOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBOb2RlLmlzQ2xhc3NEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHwgTm9kZS5pc0ludGVyZmFjZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSB8fCBOb2RlLmlzVHlwZUFsaWFzRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHx8IE5vZGUuaXNFbnVtRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pO1xufVxuXG5mdW5jdGlvbiBxdWFsaWZpZWRLZXkobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHlCQUEyQjtBQUMzQixxQkFHTztBQUNQLHVCQUdPO0FBQ1Asc0JBQXFCO0FBSXJCLCtCQUFvQztBQUNwQywyQkFXTztBQUNQLG1DQUEyQztBQUMzQyw4QkFBa0M7QUFDbEMsZ0NBQTZCO0FBSzdCLE1BQU0sd0JBQXdCLG9CQUFJLElBQUksQ0FBQyxVQUFVLFVBQVUsY0FBYyxDQUFDO0FBU25FLFNBQVMsaUJBQWlCLEtBQWlCLE9BQThCLFdBQXlCO0FBQ3ZHLGFBQVcsYUFBYSxJQUFJLGFBQWEsR0FBRztBQUMxQyxRQUFJLENBQUMsVUFBVSxXQUFXLEdBQUc7QUFDM0I7QUFBQSxJQUNGO0FBQ0EsVUFBTSxPQUFPLFVBQVUsUUFBUTtBQUMvQixRQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsSUFDRjtBQUNBLFVBQU0sTUFBTSxhQUFhLFdBQVcsSUFBSTtBQUN4QyxRQUFJLE1BQU0sSUFBSSxHQUFHLEdBQUc7QUFDbEI7QUFBQSxJQUNGO0FBQ0EsVUFBTSw0QkFBd0IsK0NBQXlCLFNBQVM7QUFDaEUsVUFBTSxTQUFTLFVBQVUsY0FBYyxFQUFFLElBQUksQ0FB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
|