@mnaoumov/typescript-dev-toolkit 3.8.0 → 3.9.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.
@@ -7,6 +7,23 @@
7
7
  */
8
8
  import type { SourceFile } from 'ts-morph' with { 'resolution-mode': 'import' };
9
9
  import type { TypeInfo } from './api-doc-types.cjs';
10
+ /**
11
+ * A package's public API barrel, read by {@link readPublicApiBarrel}.
12
+ */
13
+ export interface PublicApiBarrel {
14
+ /**
15
+ * The modules the barrel re-exports from, in barrel order: the entry files of the API reference.
16
+ */
17
+ readonly files: readonly string[];
18
+ /**
19
+ * The qualified ids (`<namespace>#<name>`) of the exports the barrel forwards by name.
20
+ */
21
+ readonly publicKeys: ReadonlySet<string>;
22
+ /**
23
+ * The namespaces of the modules the barrel re-exports whole (`export * from`).
24
+ */
25
+ readonly wholeNamespaces: ReadonlySet<string>;
26
+ }
10
27
  /**
11
28
  * Collect top-level exported functions.
12
29
  *
@@ -59,6 +76,14 @@ export declare function computeNamespace(srcDirectory: string, filePath: string)
59
76
  * @returns The entry files' paths.
60
77
  */
61
78
  export declare function findEntryFiles(directory: string, excludedDirectories?: readonly string[]): string[];
79
+ /**
80
+ * Drops every documented type the public API barrel does not re-export. Run it after `resolveInheritedMembers`, so
81
+ * a public class still inherits the members of an internal base class.
82
+ *
83
+ * @param types - The documented types, keyed by qualified id.
84
+ * @param barrel - The barrel, read by {@link readPublicApiBarrel}.
85
+ */
86
+ export declare function keepPublicApi(types: Map<string, TypeInfo>, barrel: PublicApiBarrel): void;
62
87
  /**
63
88
  * Collects a source file's exported type aliases, enums, interfaces and classes.
64
89
  *
@@ -67,6 +92,19 @@ export declare function findEntryFiles(directory: string, excludedDirectories?:
67
92
  * @param namespace - The type's namespace.
68
93
  */
69
94
  export declare function processSourceFile(src: SourceFile, types: Map<string, TypeInfo>, namespace: string): void;
95
+ /**
96
+ * Reads a package's public API barrel: the modules it re-exports from and the names it forwards.
97
+ *
98
+ * It is parsed on its own rather than through the ts-morph project, because the cache check needs the entry files
99
+ * before that project exists, and a cache hit must not pay for loading it.
100
+ *
101
+ * @param entryFile - The barrel, e.g. `<root>/src/index.ts`.
102
+ * @param sourceDirectory - The folder namespaces are relative to.
103
+ * @returns The barrel.
104
+ * @throws If the barrel re-exports a module that does not exist or belongs to another package, renames an export,
105
+ * or re-exports a module as a namespace: none of these can be documented under the name a consumer imports.
106
+ */
107
+ export declare function readPublicApiBarrel(entryFile: string, sourceDirectory: string): PublicApiBarrel;
70
108
  /**
71
109
  * Register all type parameter names so renderTypeWithLinks won't hyperlink them.
72
110
  * Skip names that are also known types — those should still be linkable. The site's `genericTypeParameters`
@@ -153,7 +153,8 @@ function getImportStatement(info) {
153
153
  const isTypeOnly = ["enum", "interface", "type"].includes(info.kind);
154
154
  const importKeyword = isTypeOnly ? "import type" : "import";
155
155
  const settings = (0, import_api_doc_settings.getApiDocSettings)();
156
- const defaultImportStatement = `${importKeyword} { ${info.name} } from '${settings.packageName}/${info.namespace}';`;
156
+ const moduleSpecifier = settings.publicApiEntry === void 0 ? `${settings.packageName}/${info.namespace}` : settings.packageName;
157
+ const defaultImportStatement = `${importKeyword} { ${info.name} } from '${moduleSpecifier}';`;
157
158
  return settings.importStatement === void 0 ? defaultImportStatement : settings.importStatement({ defaultImportStatement, isTypeOnly, kind: info.kind, name: info.name, namespace: info.namespace });
158
159
  }
159
160
  function getNamespaceDirectory(namespace) {
@@ -294,4 +295,4 @@ function escapeMdxProseChars(chunk) {
294
295
  stripMarkdown,
295
296
  truncateSignature
296
297
  });
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLiBBIHNpdGUncyBgaW1wb3J0U3RhdGVtZW50YCBzZXR0aW5nIHJlcGxhY2VzIHRoYXQgc3RhdGVtZW50LlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzaXRlJ3MgYGltcG9ydFN0YXRlbWVudGAgc2hvd3Mgbm9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltcG9ydFN0YXRlbWVudChpbmZvOiBUeXBlSW5mbyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGlzVHlwZU9ubHkgPSBbJ2VudW0nLCAnaW50ZXJmYWNlJywgJ3R5cGUnXS5pbmNsdWRlcyhpbmZvLmtpbmQpO1xuICBjb25zdCBpbXBvcnRLZXl3b3JkID0gaXNUeXBlT25seSA/ICdpbXBvcnQgdHlwZScgOiAnaW1wb3J0JztcbiAgY29uc3Qgc2V0dGluZ3MgPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBjb25zdCBkZWZhdWx0SW1wb3J0U3RhdGVtZW50ID0gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke3NldHRpbmdzLnBhY2thZ2VOYW1lfS8ke2luZm8ubmFtZXNwYWNlfSc7YDtcbiAgcmV0dXJuIHNldHRpbmdzLmltcG9ydFN0YXRlbWVudCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdEltcG9ydFN0YXRlbWVudCA6IHNldHRpbmdzLmltcG9ydFN0YXRlbWVudCh7IGRlZmF1bHRJbXBvcnRTdGF0ZW1lbnQsIGlzVHlwZU9ubHksIGtpbmQ6IGluZm8ua2luZCwgbmFtZTogaW5mby5uYW1lLCBuYW1lc3BhY2U6IGluZm8ubmFtZXNwYWNlIH0pO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gYXZvaWRJbmRleFNsdWcoc2x1Zzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQSBtZW1iZXIgbGl0ZXJhbGx5IG5hbWVkIGBpbmRleGAgd291bGQgd3JpdGUgYGluZGV4Lm1keGAsIGNvbGxpZGluZyB3aXRoIHRoZSB0eXBlLW92ZXJ2aWV3XG4gIC8vIGBpbmRleC5tZHhgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAob25lIHNpbGVudGx5IG92ZXJ3cml0ZXMgdGhlIG90aGVyLCA0MDQtaW5nIHRoZSBsb3NlcikuXG4gIHJldHVybiBzbHVnID09PSAnaW5kZXgnID8gJ2luZGV4LW1lbWJlcicgOiBzbHVnO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21NZW1iZXJSb3V0ZVNlZ21lbnQobmFtZU9yT3ZlcmxvYWRLZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLm1lbWJlclJvdXRlU2VnbWVudD8uKG5hbWVPck92ZXJsb2FkS2V5KTtcbn1cblxuLyoqXG4gKiBLZWVwcyBhIG5hbWUncyB0cmFpbGluZyB1bmRlcnNjb3JlcyBvbiBpdHMgc2x1Zywgc28gYGNyZWF0ZV9fYCBhbmQgYGNyZWF0ZWAgZ2V0IGEgcGFnZSBlYWNoIGluc3RlYWQgb2Ygb25lXG4gKiBzaWxlbnRseSBvdmVyd3JpdGluZyB0aGUgb3RoZXIuIEEgc2x1ZyB3aXRoIG5vdGhpbmcgZWxzZSBpbiBpdCBrZWVwcyBub25lOiBhIGZpbGUgbmFtZWQgYF8qLm1keGAgaXMgc2tpcHBlZCBieVxuICogQXN0cm8ncyBjb250ZW50IGxvYWRlci5cbiAqXG4gKiBAcGFyYW0gc2x1ZyAtIFRoZSBzbHVnLCB3aXRob3V0IHRoZSB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgaXQgd2FzIGJ1aWx0IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgc2x1ZyB3aXRoIHRoZSBuYW1lJ3MgdHJhaWxpbmcgdW5kZXJzY29yZXMuXG4gKi9cbmZ1bmN0aW9uIGtlZXBUcmFpbGluZ1VuZGVyc2NvcmVzKHNsdWc6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWcgPyBgJHtzbHVnfSR7bmFtZS5zbGljZShuYW1lLnJlcGxhY2UoL18rJC8sICcnKS5sZW5ndGgpfWAgOiBzbHVnO1xufVxuXG5mdW5jdGlvbiBzbHVnaWZ5TWVtYmVyTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB1bnF1b3RlZCA9IG5hbWUucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJyk7XG4gIGNvbnN0IGNsZWFuZWQgPSB1bnF1b3RlZFxuICAgIC5yZXBsYWNlQWxsKC9bXmEtekEtWjAtOV0vZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC8tKy9nLCAnLScpXG4gICAgLnJlcGxhY2VBbGwoL14tfC0kL2csICcnKTtcbiAgcmV0dXJuIGF2b2lkSW5kZXhTbHVnKGdldEN1c3RvbU1lbWJlclJvdXRlU2VnbWVudChuYW1lKSA/PyAoa2VlcFRyYWlsaW5nVW5kZXJzY29yZXMoY2xlYW5lZCwgdW5xdW90ZWQpIHx8ICd1bm5hbWVkJykpO1xufVxuXG5mdW5jdGlvbiBzbHVnaWZ5T3ZlcmxvYWRLZXkob3ZlcmxvYWRLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNsdWcgPSBvdmVybG9hZEtleVxuICAgIC5yZXBsYWNlQWxsKC9bXCInKCldL2csICcgJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTlcXHNdL2csICcnKVxuICAgIC50cmltKClcbiAgICAucmVwbGFjZUFsbCgvXFxzKy9nLCAnLScpO1xuICAvLyBBIG1ldGhvZCBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgIG92ZXIgdGhlIHR5cGUtb3ZlcnZpZXcgcGFnZSwgZXhhY3RseSBhcyBhIHByb3BlcnR5IHdvdWxkLlxuICByZXR1cm4gYXZvaWRJbmRleFNsdWcoZ2V0Q3VzdG9tTWVtYmVyUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KSA/PyBrZWVwVHJhaWxpbmdVbmRlcnNjb3JlcyhzbHVnLCBvdmVybG9hZEtleSkpO1xufVxuXG5jb25zdCBPR19ERVNDUklQVElPTl9NQVhfTEVOR1RIID0gMTYwO1xuXG4vKipcbiAqIFN0cmlwIG1hcmtkb3duIGZvcm1hdHRpbmcgdG8gcGxhaW4gdGV4dCBmb3IgdXNlIGluIG1ldGEgZGVzY3JpcHRpb25zXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSBwbGFpbiB0ZXh0LCBhdCBtb3N0IDE2MCBjaGFyYWN0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBNYXJrZG93bih0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBBIGJhcmUgYHtAbGluayBUYXJnZXR9YCByZWFkcyBhcyBpdHMgdGFyZ2V0LCBhcyBgcmVzb2x2ZUxpbmtzYCByZW5kZXJzIGl0OyBkcm9wcGluZyBpdCBsZWF2ZXMgYSBob2xlIGluIHRoZSBzZW50ZW5jZS5cbiAgY29uc3QgcGxhaW4gPSByZXBsYWNlUmVnRXhwTWF0Y2hlcyhcbiAgICB0ZXh0LFxuICAgIC9cXHtAbGlua1xccysoPzx0YXJnZXQ+W158fV0rPykoPzpcXHMqXFx8XFxzKig/PGRpc3BsYXk+W159XSs/KSk/XFxzKlxcfS9nLFxuICAgIChtYXRjaCkgPT4gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAnZGlzcGxheScpID8/IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0YXJnZXQnKVxuICApXG4gICAgLnJlcGxhY2VBbGwoL1xcWyg/PHRleHQ+W15cXF1dKylcXF1cXChbXildK1xcKS9nLCAnJDx0ZXh0PicpXG4gICAgLnJlcGxhY2VBbGwoL1tgKl9+XS9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpXG4gICAgLnRyaW0oKTtcblxuICBpZiAocGxhaW4ubGVuZ3RoIDw9IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gcGxhaW47XG4gIH1cblxuICAvLyBDdXQgYmFjayB0byBhIHdvcmQgYm91bmRhcnk6IGEgcmF3IHNsaWNlIGVuZHMgZGVzY3JpcHRpb25zIG1pZC13b3JkIChg4oCmIHRoZSBzdHJpbmcgbW9kdWxlIGlzIG9iYCkuXG4gIC8vIFRoYXQgZnJhZ21lbnQgaXMgd2hhdCByZWFkZXJzIHNlZSBvbiB0aGUgT0cgY2FyZCBhbmQgaW4gc2VhcmNoIHJlc3VsdHMuXG4gIGNvbnN0IGNsaXBwZWQgPSBwbGFpbi5zbGljZSgwLCBPR19ERVNDUklQVElPTl9NQVhfTEVOR1RIIC0gMSk7XG4gIGNvbnN0IGxhc3RTcGFjZUluZGV4ID0gY2xpcHBlZC5sYXN0SW5kZXhPZignICcpO1xuICBjb25zdCB0cnVuY2F0ZWQgPSBsYXN0U3BhY2VJbmRleCA+IDAgPyBjbGlwcGVkLnNsaWNlKDAsIGxhc3RTcGFjZUluZGV4KSA6IGNsaXBwZWQ7XG4gIHJldHVybiBgJHt0cnVuY2F0ZWQucmVwbGFjZSgvWyw7Oi5cXHNdKyQvLCAnJyl94oCmYDtcbn1cblxuZnVuY3Rpb24gZXNjYXBlTWR4UHJvc2VDaGFycyhjaHVuazogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNodW5rLnJlcGxhY2VBbGwoL1s8e31dL2csIChjaGFyKSA9PiBgXFxcXCR7Y2hhcn1gKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEscUJBR087QUFDUCxzQkFBc0I7QUFDdEIsdUJBQXdCO0FBUXhCLCtCQUE4QjtBQUM5QixtQ0FBMkM7QUFDM0Msb0NBQStCO0FBQy9CLDhCQUFrQztBQWEzQixTQUFTLG1CQUFtQixRQUE0QjtBQUM3RCxNQUFJLHVDQUFjLElBQUksT0FBTyxJQUFJLEtBQUssT0FBTyxXQUFXLFNBQVMsR0FBRztBQUNsRSxVQUFNLGlCQUFpQixPQUFPLFdBQVcsQ0FBQztBQUMxQyxRQUFJLGdCQUFnQixLQUFLLFdBQVcsR0FBRyxLQUFLLGdCQUFnQixLQUFLLFdBQVcsR0FBSSxHQUFH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
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC4gQSBwYWNrYWdlIHB1Ymxpc2hpbmcgaXRzIEFQSSBmcm9tIG9uZSBiYXJyZWxcbiAqIChgcHVibGljQXBpRW50cnlgKSBpcyBpbXBvcnRlZCBmcm9tIGl0cyByb290IGluc3RlYWQuXG4gKlxuICogSW50ZXJmYWNlcyAvIHR5cGUgYWxpYXNlcyAvIGVudW1zIGFyZSBpbXBvcnRlZCB3aXRoIGBpbXBvcnQgdHlwZWA7IGNsYXNzZXMgLyBmdW5jdGlvbnMgL1xuICogdmFyaWFibGVzIHdpdGggYSB2YWx1ZSBgaW1wb3J0YC4gQSBzaXRlJ3MgYGltcG9ydFN0YXRlbWVudGAgc2V0dGluZyByZXBsYWNlcyB0aGF0IHN0YXRlbWVudC5cbiAqXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgaW1wb3J0IHN0YXRlbWVudCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgc2l0ZSdzIGBpbXBvcnRTdGF0ZW1lbnRgIHNob3dzIG5vbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRTdGF0ZW1lbnQoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBpc1R5cGVPbmx5ID0gWydlbnVtJywgJ2ludGVyZmFjZScsICd0eXBlJ10uaW5jbHVkZXMoaW5mby5raW5kKTtcbiAgY29uc3QgaW1wb3J0S2V5d29yZCA9IGlzVHlwZU9ubHkgPyAnaW1wb3J0IHR5cGUnIDogJ2ltcG9ydCc7XG4gIGNvbnN0IHNldHRpbmdzID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gc2V0dGluZ3MucHVibGljQXBpRW50cnkgPT09IHVuZGVmaW5lZCA/IGAke3NldHRpbmdzLnBhY2thZ2VOYW1lfS8ke2luZm8ubmFtZXNwYWNlfWAgOiBzZXR0aW5ncy5wYWNrYWdlTmFtZTtcbiAgY29uc3QgZGVmYXVsdEltcG9ydFN0YXRlbWVudCA9IGAke2ltcG9ydEtleXdvcmR9IHsgJHtpbmZvLm5hbWV9IH0gZnJvbSAnJHttb2R1bGVTcGVjaWZpZXJ9JztgO1xuICByZXR1cm4gc2V0dGluZ3MuaW1wb3J0U3RhdGVtZW50ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SW1wb3J0U3RhdGVtZW50IDogc2V0dGluZ3MuaW1wb3J0U3RhdGVtZW50KHsgZGVmYXVsdEltcG9ydFN0YXRlbWVudCwgaXNUeXBlT25seSwga2luZDogaW5mby5raW5kLCBuYW1lOiBpbmZvLm5hbWUsIG5hbWVzcGFjZTogaW5mby5uYW1lc3BhY2UgfSk7XG59XG5cbi8qKlxuICogVGhlIGZvbGRlciBhIG5hbWVzcGFjZSdzIHBhZ2VzIGFyZSB3cml0dGVuIHRvLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIFNhbml0aXplIGEgbWVtYmVyIG5hbWUgZm9yIHVzZSBpbiBhIGNhc2UtUFJFU0VSVkVEIFVSTC9yb3V0ZSBzZWdtZW50IChlLmcuIGBzaG93Tm90aWNlYCkuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbWVtYmVyJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBjYXNlLXByZXNlcnZlZCBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyUm91dGVTZWdtZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgYXMgYW4gb24tZGlzayBGSUxFTkFNRSAobG93ZXJjYXNlZCwgY29sbGlzaW9uLXNhZmUpLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgbG93ZXJjYXNlZCBmaWxlIG5hbWUgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclNsdWcobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvUm91dGVTZWdtZW50KHNsdWdpZnlNZW1iZXJOYW1lKG5hbWUpKTtcbn1cblxuLyoqXG4gKiBTbHVnaWZ5IGFuIG92ZXJsb2FkIGtleSBmb3IgYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudDogb24oXCJjaGFuZ2VkXCIpIC0+IG9uLWNoYW5nZWQuXG4gKlxuICogQHBhcmFtIG92ZXJsb2FkS2V5IC0gVGhlIG92ZXJsb2FkIGtleSwgZS5nLiBgb24oJ2NoYW5nZWQnKWAuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KTtcbn1cblxuLyoqXG4gKiBTbHVnaWZ5IGFuIG92ZXJsb2FkIGtleSBmb3IgYW4gb24tZGlzayBGSUxFTkFNRTogb24oXCJjaGFuZ2VkXCIpIC0+IG9uLWNoYW5nZWQgKGxvd2VyY2FzZWQpLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFNsdWcob3ZlcmxvYWRLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5T3ZlcmxvYWRLZXkob3ZlcmxvYWRLZXkpKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGV2ZXJ5IG1hdGNoIG9mIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIHdoYXQgYSByZXBsYWNlciBidWlsZHMgZnJvbSB0aGUgbWF0Y2guIFRoZSB0eXBlZFxuICogY291bnRlcnBhcnQgb2YgYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAgd2l0aCBhIGNhbGxiYWNrLCB3aG9zZSBhcmd1bWVudHMgYXJlIHR5cGVkIG9ubHkgcG9zaXRpb25hbGx5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcGFyYW0gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjsgaXQgbXVzdCBjYXJyeSB0aGUgYGdgIGZsYWcuXG4gKiBAcGFyYW0gcmVwbGFjZXIgLSBCdWlsZHMgdGhlIHJlcGxhY2VtZW50IG9mIG9uZSBtYXRjaC5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGggZXZlcnkgbWF0Y2ggcmVwbGFjZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUmVnRXhwTWF0Y2hlcyh0ZXh0OiBzdHJpbmcsIHJlZ0V4cDogUmVnRXhwLCByZXBsYWNlcjogKG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5KSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwocmVnRXhwKSkge1xuICAgIHJlc3VsdCArPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpICsgcmVwbGFjZXIobWF0Y2gpO1xuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQgKyB0ZXh0LnNsaWNlKGxhc3RJbmRleCk7XG59XG5cbi8qKlxuICogU3BsaXQgbWFya2Rvd24gdGV4dCBpbnRvIGFuIG9yZGVyZWQgbGlzdCBvZiBwcm9zZSBhbmQgZmVuY2VkLWNvZGUgc2VnbWVudHMuXG4gKiBBIGZlbmNlZC1jb2RlIHNlZ21lbnQgaXMgZGVsaW1pdGVkIGJ5IGEgbGluZSBvZiAzKyBiYWNrdGlja3Mgb3IgdGlsZGVzOyBpdHMgY29udGVudCBpcyBjYXB0dXJlZFxuICogcmF3IChuZXZlciBlc2NhcGVkKSBzbyBpdCBjYW4gYmUgcmUtZW1pdHRlZCBhcyBhIGxpdGVyYWwgTURYIGNvZGUgZmVuY2UuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50cywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWdtZW50TWFya2Rvd24odGV4dDogc3RyaW5nKTogTWFya2Rvd25TZWdtZW50W10ge1xuICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBzZWdtZW50czogTWFya2Rvd25TZWdtZW50W10gPSBbXTtcbiAgbGV0IHByb3NlQnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY29kZUxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgb3BlbkZlbmNlOiBudWxsIHwgT3BlbkZlbmNlID0gbnVsbDtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKG9wZW5GZW5jZSkge1xuICAgICAgaWYgKG9wZW5GZW5jZS5jbG9zZVJlLnRlc3QobGluZSkpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaCh7IGxhbmc6IG9wZW5GZW5jZS5sYW5nLCB0ZXh0OiBjb2RlTGluZXMuam9pbignXFxuJyksIHR5cGU6ICdjb2RlJyB9KTtcbiAgICAgICAgb3BlbkZlbmNlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGVMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgb3Blbk1hdGNoID0gL15cXHMqKD88ZmVuY2U+KD88ZmVuY2VDaGFyPltgfl0pXFxrPGZlbmNlQ2hhcj57Mix9KSg/PGxhbmc+LiopJC8uZXhlYyhsaW5lKTtcbiAgICBpZiAob3Blbk1hdGNoKSB7XG4gICAgICBjb25zdCBmZW5jZUNoYXJzID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChvcGVuTWF0Y2gsICdmZW5jZScpO1xuICAgICAgY29uc3QgZmVuY2VDaGFyID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChvcGVuTWF0Y2gsICdmZW5jZUNoYXInKTtcbiAgICAgIGZsdXNoUHJvc2UoKTtcbiAgICAgIGNvZGVMaW5lcyA9IFtdO1xuICAgICAgb3BlbkZlbmNlID0ge1xuICAgICAgICBjbG9zZVJlOiBuZXcgUmVnRXhwKGBeXFxcXHMqXFxcXCR7ZmVuY2VDaGFyfXske1N0cmluZyhmZW5jZUNoYXJzLmxlbmd0aCl9LH1cXFxccyokYCksXG4gICAgICAgIGxhbmc6IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnbGFuZycpLnRyaW0oKVxuICAgICAgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwcm9zZUJ1ZmZlci5wdXNoKGxpbmUpO1xuICB9XG4gIC8vIEFuIHVuY2xvc2VkIGZlbmNlIHJ1bnMgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dC5cbiAgaWYgKG9wZW5GZW5jZSkge1xuICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gIH1cbiAgZmx1c2hQcm9zZSgpO1xuICByZXR1cm4gc2VnbWVudHM7XG5cbiAgZnVuY3Rpb24gZmx1c2hQcm9zZSgpOiB2b2lkIHtcbiAgICBpZiAocHJvc2VCdWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VnbWVudHMucHVzaCh7IHRleHQ6IHByb3NlQnVmZmVyLmpvaW4oJ1xcbicpLCB0eXBlOiAncHJvc2UnIH0pO1xuICAgIHByb3NlQnVmZmVyID0gW107XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpcCB0aGUgYGltcG9ydChcIuKAplwiKWAgcXVhbGlmaWVycyB0cy1tb3JwaCBwcmludHMgYmVmb3JlIGEgdHlwZSB0aGF0IGlzIG5vdCBpbiBzY29wZSwgcmVjb3JkaW5nIGVhY2ggb25lJ3NcbiAqIGRlY2xhcmF0aW9uIGZpbGUgZmlyc3QsIHNpbmNlIGl0IGlzIHRoZSBvbmUgcGxhY2UgYSBwcmludGVkIHR5cGUgbmFtZXMgd2hlcmUgaXQgd2FzIGRlY2xhcmVkLlxuICpcbiAqIEBwYXJhbSB0eXBlVGV4dCAtIFRoZSBwcmludGVkIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSB3aXRob3V0IGl0cyBpbXBvcnQgcXVhbGlmaWVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5VHlwZSh0eXBlVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0eXBlVGV4dC5tYXRjaEFsbChJTVBPUlRfVFlQRV9SRUdfRVhQKSkge1xuICAgIHJlZ2lzdGVyUGFja2FnZURlY2xhcmF0aW9uKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdOYW1lJyksIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdQYXRoJykpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVUZXh0LnJlcGxhY2VBbGwoSU1QT1JUX1FVQUxJRklFUl9SRUdfRVhQLCAnJyk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgY29kZSBzaWduYXR1cmUgZm9yIHRoZSBgc2lnbmF0dXJlOmAgZnJvbnRtYXR0ZXIgLyBPRyBjYXJkOiBjb2xsYXBzZSB3aGl0ZXNwYWNlIHRvXG4gKiBzaW5nbGUgc3BhY2VzIGFuZCB0cnVuY2F0ZSB0byBhIGNhcmQtZnJpZW5kbHkgbGVuZ3RoIHdpdGggYW4gZWxsaXBzaXMuXG4gKlxuICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBzaWduYXR1cmUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZVNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IHNpZ25hdHVyZS5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpO1xuICByZXR1cm4gY29sbGFwc2VkLmxlbmd0aCA8PSBTSUdOQVRVUkVfTUFYX0xFTkdUSCA/IGNvbGxhcHNlZCA6IGAke2NvbGxhcHNlZC5zbGljZSgwLCBTSUdOQVRVUkVfTUFYX0xFTkdUSCAtIDEpLnRyaW1FbmQoKX3igKZgO1xufVxuXG5mdW5jdGlvbiBhdm9pZEluZGV4U2x1ZyhzbHVnOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBBIG1lbWJlciBsaXRlcmFsbHkgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCwgY29sbGlkaW5nIHdpdGggdGhlIHR5cGUtb3ZlcnZpZXdcbiAgLy8gYGluZGV4Lm1keGAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IChvbmUgc2lsZW50bHkgb3ZlcndyaXRlcyB0aGUgb3RoZXIsIDQwNC1pbmcgdGhlIGxvc2VyKS5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmZ1bmN0aW9uIGdldEN1c3RvbU1lbWJlclJvdXRlU2VnbWVudChuYW1lT3JPdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldEFwaURvY1NldHRpbmdzKCkubWVtYmVyUm91dGVTZWdtZW50Py4obmFtZU9yT3ZlcmxvYWRLZXkpO1xufVxuXG4vKipcbiAqIEtlZXBzIGEgbmFtZSdzIHRyYWlsaW5nIHVuZGVyc2NvcmVzIG9uIGl0cyBzbHVnLCBzbyBgY3JlYXRlX19gIGFuZCBgY3JlYXRlYCBnZXQgYSBwYWdlIGVhY2ggaW5zdGVhZCBvZiBvbmVcbiAqIHNpbGVudGx5IG92ZXJ3cml0aW5nIHRoZSBvdGhlci4gQSBzbHVnIHdpdGggbm90aGluZyBlbHNlIGluIGl0IGtlZXBzIG5vbmU6IGEgZmlsZSBuYW1lZCBgXyoubWR4YCBpcyBza2lwcGVkIGJ5XG4gKiBBc3RybydzIGNvbnRlbnQgbG9hZGVyLlxuICpcbiAqIEBwYXJhbSBzbHVnIC0gVGhlIHNsdWcsIHdpdGhvdXQgdGhlIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBpdCB3YXMgYnVpbHQgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBzbHVnIHdpdGggdGhlIG5hbWUncyB0cmFpbGluZyB1bmRlcnNjb3Jlcy5cbiAqL1xuZnVuY3Rpb24ga2VlcFRyYWlsaW5nVW5kZXJzY29yZXMoc2x1Zzogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1ZyA/IGAke3NsdWd9JHtuYW1lLnNsaWNlKG5hbWUucmVwbGFjZSgvXyskLywgJycpLmxlbmd0aCl9YCA6IHNsdWc7XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnlNZW1iZXJOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVucXVvdGVkID0gbmFtZS5yZXBsYWNlQWxsKC9eW1wiJ118W1wiJ10kL2csICcnKTtcbiAgY29uc3QgY2xlYW5lZCA9IHVucXVvdGVkXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XS9nLCAnLScpXG4gICAgLnJlcGxhY2VBbGwoLy0rL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvXi18LSQvZywgJycpO1xuICByZXR1cm4gYXZvaWRJbmRleFNsdWcoZ2V0Q3VzdG9tTWVtYmVyUm91dGVTZWdtZW50KG5hbWUpID8/IChrZWVwVHJhaWxpbmdVbmRlcnNjb3JlcyhjbGVhbmVkLCB1bnF1b3RlZCkgfHwgJ3VubmFtZWQnKSk7XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2x1ZyA9IG92ZXJsb2FkS2V5XG4gICAgLnJlcGxhY2VBbGwoL1tcIicoKV0vZywgJyAnKVxuICAgIC5yZXBsYWNlQWxsKC9bXmEtekEtWjAtOVxcc10vZywgJycpXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICctJyk7XG4gIC8vIEEgbWV0aG9kIG5hbWVkIGBpbmRleGAgd291bGQgd3JpdGUgYGluZGV4Lm1keGAgb3ZlciB0aGUgdHlwZS1vdmVydmlldyBwYWdlLCBleGFjdGx5IGFzIGEgcHJvcGVydHkgd291bGQuXG4gIHJldHVybiBhdm9pZEluZGV4U2x1ZyhnZXRDdXN0b21NZW1iZXJSb3V0ZVNlZ21lbnQob3ZlcmxvYWRLZXkpID8/IGtlZXBUcmFpbGluZ1VuZGVyc2NvcmVzKHNsdWcsIG92ZXJsb2FkS2V5KSk7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgYmFyZSBge0BsaW5rIFRhcmdldH1gIHJlYWRzIGFzIGl0cyB0YXJnZXQsIGFzIGByZXNvbHZlTGlua3NgIHJlbmRlcnMgaXQ7IGRyb3BwaW5nIGl0IGxlYXZlcyBhIGhvbGUgaW4gdGhlIHNlbnRlbmNlLlxuICBjb25zdCBwbGFpbiA9IHJlcGxhY2VSZWdFeHBNYXRjaGVzKFxuICAgIHRleHQsXG4gICAgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXHMqXFx9L2csXG4gICAgKG1hdGNoKSA9PiBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdkaXNwbGF5JykgPz8gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpXG4gIClcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFHTztBQUNQLHNCQUFzQjtBQUN0Qix1QkFBd0I7QUFReEIsK0JBQThCO0FB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
@@ -90,7 +90,8 @@ export declare function getDisplayName(name: string, info: TypeInfo): string;
90
90
  * Emit the import statement for a documented export.
91
91
  *
92
92
  * The subpath equals the type's namespace (its source path relative to `src`), so `src/string.ts` of
93
- * `@mnaoumov/typescript-lib` is `@mnaoumov/typescript-lib/string`.
93
+ * `@mnaoumov/typescript-lib` is `@mnaoumov/typescript-lib/string`. A package publishing its API from one barrel
94
+ * (`publicApiEntry`) is imported from its root instead.
94
95
  *
95
96
  * Interfaces / type aliases / enums are imported with `import type`; classes / functions /
96
97
  * variables with a value `import`. A site's `importStatement` setting replaces that statement.
@@ -86,10 +86,13 @@ async function generateApiDocs(options) {
86
86
  const { rootDirectory, settings, sourceDirectory } = options;
87
87
  (0, import_api_doc_settings.configureApiDocs)(settings);
88
88
  (0, import_api_doc_link_rendering.loadExternalTypeMaps)(rootDirectory);
89
- const entryFiles = (0, import_api_doc_source_processing.findEntryFiles)(sourceDirectory, settings.excludedDirectories);
89
+ const { publicApiEntry } = settings;
90
+ const barrel = publicApiEntry === void 0 ? void 0 : (0, import_api_doc_source_processing.readPublicApiBarrel)(publicApiEntry, sourceDirectory);
91
+ const entryFiles = barrel === void 0 ? (0, import_api_doc_source_processing.findEntryFiles)(sourceDirectory, settings.excludedDirectories) : [...barrel.files];
90
92
  console.warn(`Found ${String(entryFiles.length)} entry source files`);
91
93
  const cacheFile = (0, import_node_path.join)(settings.outputDirectory, CACHE_FILE_NAME);
92
- const currentHash = (0, import_api_doc_source_processing.computeCacheHash)(entryFiles, (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__import_meta_url)));
94
+ const hashedFiles = publicApiEntry === void 0 ? entryFiles : [...entryFiles, publicApiEntry];
95
+ const currentHash = (0, import_api_doc_source_processing.computeCacheHash)(hashedFiles, (0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__import_meta_url)));
93
96
  if ((0, import_node_fs.existsSync)(cacheFile) && (0, import_node_fs.existsSync)(settings.sidebarFile) && (0, import_node_fs.readFileSync)(cacheFile, "utf-8").trim() === currentHash) {
94
97
  console.warn("Source files and generator unchanged \u2014 skipping generation.");
95
98
  return;
@@ -114,6 +117,9 @@ async function generateApiDocs(options) {
114
117
  (0, import_api_doc_source_processing.collectVariables)(src, types, namespace);
115
118
  }
116
119
  (0, import_api_doc_type_merging.resolveInheritedMembers)(types);
120
+ if (barrel !== void 0) {
121
+ (0, import_api_doc_source_processing.keepPublicApi)(types, barrel);
122
+ }
117
123
  for (const info of types.values()) {
118
124
  info.properties.sort((a, b) => a.name.localeCompare(b.name));
119
125
  info.methods.sort((a, b) => a.name.localeCompare(b.name));
@@ -140,4 +146,4 @@ async function generateApiDocs(options) {
140
146
  0 && (module.exports = {
141
147
  generateApiDocs
142
148
  });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKGZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKSB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGguXG4gKi9cblxuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJtLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICBub3JtYWxpemVcbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAndHMtbW9ycGgnO1xuXG5pbXBvcnQgdHlwZSB7IEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFnZUNvbnRlbnQsXG4gIFR5cGVJbmZvXG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7IGV4dHJhY3RGaWxlT3ZlcnZpZXcgfSBmcm9tICcuL2FwaS1kb2MtanNkb2MudHMnO1xuaW1wb3J0IHtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMsXG4gIHJlZ2lzdGVyTWVtYmVyUGFnZXMsXG4gIHJlZ2lzdGVyUm91dGVTZWdtZW50c1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgY2xlYXJQYWNrYWdlRGVjbGFyYXRpb25zIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuaW1wb3J0IHtcbiAgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUsXG4gIGdlbmVyYXRlTWVtYmVyUGFnZXMsXG4gIGdlbmVyYXRlTmFtZXNwYWNlSW5kZXhQYWdlcyxcbiAgZ2VuZXJhdGVPdmVydmlld1BhZ2UsXG4gIGdlbmVyYXRlU2lkZWJhckpzb25cbn0gZnJvbSAnLi9hcGktZG9jLXBhZ2UtZ2VuZXJhdGlvbi50cyc7XG5pbXBvcnQgeyBjb25maWd1cmVBcGlEb2NzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGdW5jdGlvbnMsXG4gIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zLFxuICBjb2xsZWN0VmFyaWFibGVzLFxuICBjb21wdXRlQ2FjaGVIYXNoLFxuICBjb21wdXRlTmFtZXNwYWNlLFxuICBmaW5kRW50cnlGaWxlcyxcbiAgcHJvY2Vzc1NvdXJjZUZpbGUsXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXNcbn0gZnJvbSAnLi9hcGktZG9jLXNvdXJjZS1wcm9jZXNzaW5nLnRzJztcbmltcG9ydCB7IHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzIH0gZnJvbSAnLi9hcGktZG9jLXR5cGUtbWVyZ2luZy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlQXBpRG9jc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVBcGlEb2NzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IHJvb3Q6IHRoZSBmb2xkZXIgaG9sZGluZyBgdHNjb25maWcuanNvbmAgYW5kIGBub2RlX21vZHVsZXNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3MgZXZlcnkgcGFnZSBhbmQgbGluayBpcyByZW5kZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IEFwaURvY1NldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgYXJlIGRvY3VtZW50ZWQsIG5vcm1hbGx5IGA8cm9vdD4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG5jb25zdCBDQUNIRV9GSUxFX05BTUUgPSAnLmNhY2hlLWhhc2gnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQVBJIHJlZmVyZW5jZSBwYWdlcyBhbmQgdGhlIHNpZGViYXIuXG4gKlxuICogU2tpcHMgdGhlIHdvcmsgd2hlbiBuZWl0aGVyIHRoZSBzb3VyY2VzLCB0aGUgc2V0dGluZ3Mgbm9yIHRoZSBnZW5lcmF0b3IgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBydW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQXBpRG9jcyhvcHRpb25zOiBHZW5lcmF0ZUFwaURvY3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyByb290RGlyZWN0b3J5LCBzZXR0aW5ncywgc291cmNlRGlyZWN0b3J5IH0gPSBvcHRpb25zO1xuICBjb25maWd1cmVBcGlEb2NzKHNldHRpbmdzKTtcbiAgbG9hZEV4dGVybmFsVHlwZU1hcHMocm9vdERpcmVjdG9yeSk7XG5cbiAgY29uc3QgZW50cnlGaWxlcyA9IGZpbmRFbnRyeUZpbGVzKHNvdXJjZURpcmVjdG9yeSwgc2V0dGluZ3MuZXhjbHVkZWREaXJlY3Rvcmllcyk7XG4gIGNvbnNvbGUud2FybihgRm91bmQgJHtTdHJpbmcoZW50cnlGaWxlcy5sZW5ndGgpfSBlbnRyeSBzb3VyY2UgZmlsZXNgKTtcblxuICBjb25zdCBjYWNoZUZpbGUgPSBqb2luKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgQ0FDSEVfRklMRV9OQU1FKTtcbiAgY29uc3QgY3VycmVudEhhc2ggPSBjb21wdXRlQ2FjaGVIYXNoKGVudHJ5RmlsZXMsIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSk7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlRmlsZSkgJiYgZXhpc3RzU3luYyhzZXR0aW5ncy5zaWRlYmFyRmlsZSkgJiYgcmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykudHJpbSgpID09PSBjdXJyZW50SGFzaCkge1xuICAgIGNvbnNvbGUud2FybignU291cmNlIGZpbGVzIGFuZCBnZW5lcmF0b3IgdW5jaGFuZ2VkIOKAlCBza2lwcGluZyBnZW5lcmF0aW9uLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIExvYWQgdmlhIHRoZSByZXBvJ3MgdHNjb25maWcgc28gaW5mZXJyZWQgdHlwZXMgcmVzb2x2ZS5cbiAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KHtcbiAgICBza2lwQWRkaW5nRmlsZXNGcm9tVHNDb25maWc6IHRydWUsXG4gICAgdHNDb25maWdGaWxlUGF0aDogam9pbihyb290RGlyZWN0b3J5LCAndHNjb25maWcuanNvbicpXG4gIH0pO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKGVudHJ5RmlsZXMpO1xuXG4gIGNvbnN0IHR5cGVzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvPigpO1xuICBjb25zdCBtb2R1bGVPdmVydmlld3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjbGVhclBhY2thZ2VEZWNsYXJhdGlvbnMoKTtcblxuICBmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2VGaWxlcykge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbXB1dGVOYW1lc3BhY2Uoc291cmNlRGlyZWN0b3J5LCBub3JtYWxpemUoc3JjLmdldEZpbGVQYXRoKCkpKTtcbiAgICBjb25zdCBvdmVydmlldyA9IGV4dHJhY3RGaWxlT3ZlcnZpZXcoc3JjKTtcbiAgICBpZiAob3ZlcnZpZXcpIHtcbiAgICAgIG1vZHVsZU92ZXJ2aWV3cy5zZXQobmFtZXNwYWNlLCBvdmVydmlldyk7XG4gICAgfVxuICAgIGNvbGxlY3RQYWNrYWdlRGVjbGFyYXRpb25zKHNyYyk7XG4gICAgcHJvY2Vzc1NvdXJjZUZpbGUoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0RnVuY3Rpb25zKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gICAgY29sbGVjdFZhcmlhYmxlcyhzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgcmVzb2x2ZUluaGVyaXRlZE1lbWJlcnModHlwZXMpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGluZm8ucHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICBpbmZvLm1ldGhvZHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zKHR5cGVzKTtcbiAgcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzKTtcbiAgcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlcyk7XG5cbiAgYXdhaXQgcm0oc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IG1rZGlyKHNldHRpbmdzLm91dHB1dERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKHR5cGVzLCB0eXBlcywgbW9kdWxlT3ZlcnZpZXdzKTtcblxuICAvLyBQYXNzIDE6IGdlbmVyYXRlIGFsbCBwYWdlcyB3aXRob3V0IGJhY2tsaW5rcywgY29sbGVjdCBjb250ZW50IChrZXllZCBieSBxdWFsaWZpZWQgaWQpXG4gIGNvbnN0IHBhZ2VDb250ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlQ29udGVudD4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBpbmZvXSBvZiB0eXBlcykge1xuICAgIHBhZ2VDb250ZW50cy5zZXQoa2V5LCBhd2FpdCBnZW5lcmF0ZU92ZXJ2aWV3UGFnZShpbmZvLm5hbWUsIGluZm8sIHR5cGVzKSk7XG4gICAgaWYgKGluZm8ua2luZCA9PT0gJ2NsYXNzJyB8fCBpbmZvLmtpbmQgPT09ICdpbnRlcmZhY2UnKSB7XG4gICAgICBhd2FpdCBnZW5lcmF0ZU1lbWJlclBhZ2VzKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhc3MgMjogc2NhbiBjb250ZW50IGZvciBsaW5rcywgYXBwZW5kIGJhY2tsaW5rcywgd3JpdGUgZmlsZXNcbiAgYXdhaXQgYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUocGFnZUNvbnRlbnRzLCB0eXBlcyk7XG5cbiAgYXdhaXQgZ2VuZXJhdGVTaWRlYmFySnNvbih0eXBlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShjYWNoZUZpbGUsIGN1cnJlbnRIYXNoLCAndXRmLTgnKTtcblxuICBjb25zb2xlLndhcm4oYEdlbmVyYXRlZCBkb2NzIGZvciAke1N0cmluZyh0eXBlcy5zaXplKX0gdHlwZXMgYWNyb3NzICR7U3RyaW5nKG1vZHVsZU92ZXJ2aWV3cy5zaXplKX0gZG9jdW1lbnRlZCBtb2R1bGVzYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxxQkFHTztBQUNQLHNCQUlPO0FBQ1AsdUJBSU87QUFDUCxzQkFBOEI7QUFDOUIsc0JBQXdCO0FBUXhCLDJCQUFvQztBQUNwQyxvQ0FJTztBQUNQLG1DQUF5QztBQUN6QyxxQ0FNTztBQUNQLDhCQUFpQztBQUNqQyx1Q0FTTztBQUNQLGtDQUF3QztBQXBFeEMsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxTQUFTLHNCQUFzQjtBQUN2RixNQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLFVBQU0sZUFBZTtBQUNyQixVQUFNLE1BQU0sYUFBYSxVQUFVO0FBQ25DLFFBQUksT0FBTyxJQUFJLGtCQUFrQixZQUFZO0FBQzNDLGFBQU8sSUFBSSxjQUFjLFVBQVUsRUFBRTtBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUdBLFNBQU8sV0FBVyxVQUFVLFFBQVE7QUFDdEMsR0FBRztBQStFSCxNQUFNLGtCQUFrQjtBQVN4QixlQUFzQixnQkFBZ0IsU0FBK0M7QUFDbkYsUUFBTSxFQUFFLGVBQWUsVUFBVSxnQkFBZ0IsSUFBSTtBQUNyRCxn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
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKGZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKSB7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBsb2NhbFJlcXVpcmUgPSByZXF1aXJlO1xuICAgIGNvbnN0IHVybCA9IGxvY2FsUmVxdWlyZSgnbm9kZTp1cmwnKTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59KSgpO1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3I6IHdhbGtzIGEgcGFja2FnZSdzIGBzcmNgLCBleHRyYWN0cyBldmVyeSBkb2N1bWVudGFibGUgZXhwb3J0ZWQgZGVjbGFyYXRpb24gdmlhXG4gKiB0cy1tb3JwaCwgYW5kIHdyaXRlcyBTdGFybGlnaHQtY29tcGF0aWJsZSBNRFggcGFnZXMgcGx1cyBhIHNpZGViYXIgSlNPTi4gVGhlIG91dHB1dCB0cmVlIG1pcnJvcnMgdGhlIHBhY2thZ2Unc1xuICogbW9kdWxlIHN0cnVjdHVyZTogYSB0eXBlJ3MgbmFtZXNwYWNlIGlzIGl0cyBzb3VyY2UgcGF0aCByZWxhdGl2ZSB0byBgc3JjYCwgd2hpY2ggaXMgYWxzbyBpdHMgaW1wb3J0IHN1YnBhdGgsIHVubGVzc1xuICogdGhlIHBhY2thZ2UgcHVibGlzaGVzIGl0cyBBUEkgZnJvbSBvbmUgYmFycmVsIChgcHVibGljQXBpRW50cnlgKSwgd2hvc2UgcmUtZXhwb3J0cyBhcmUgdGhlbiBhbGwgdGhhdCBpcyBkb2N1bWVudGVkLlxuICovXG5cbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJ3RzLW1vcnBoJztcblxuaW1wb3J0IHR5cGUgeyBBcGlEb2NTZXR0aW5ncyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhZ2VDb250ZW50LFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBleHRyYWN0RmlsZU92ZXJ2aWV3IH0gZnJvbSAnLi9hcGktZG9jLWpzZG9jLnRzJztcbmltcG9ydCB7XG4gIGxvYWRFeHRlcm5hbFR5cGVNYXBzLFxuICByZWdpc3Rlck1lbWJlclBhZ2VzLFxuICByZWdpc3RlclJvdXRlU2VnbWVudHNcbn0gZnJvbSAnLi9hcGktZG9jLWxpbmstcmVuZGVyaW5nLnRzJztcbmltcG9ydCB7IGNsZWFyUGFja2FnZURlY2xhcmF0aW9ucyB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7XG4gIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlLFxuICBnZW5lcmF0ZU1lbWJlclBhZ2VzLFxuICBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXMsXG4gIGdlbmVyYXRlT3ZlcnZpZXdQYWdlLFxuICBnZW5lcmF0ZVNpZGViYXJKc29uXG59IGZyb20gJy4vYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMnO1xuaW1wb3J0IHsgY29uZmlndXJlQXBpRG9jcyB9IGZyb20gJy4vYXBpLWRvYy1zZXR0aW5ncy50cyc7XG5pbXBvcnQge1xuICBjb2xsZWN0RnVuY3Rpb25zLFxuICBjb2xsZWN0UGFja2FnZURlY2xhcmF0aW9ucyxcbiAgY29sbGVjdFZhcmlhYmxlcyxcbiAgY29tcHV0ZUNhY2hlSGFzaCxcbiAgY29tcHV0ZU5hbWVzcGFjZSxcbiAgZmluZEVudHJ5RmlsZXMsXG4gIGtlZXBQdWJsaWNBcGksXG4gIHByb2Nlc3NTb3VyY2VGaWxlLFxuICByZWFkUHVibGljQXBpQmFycmVsLFxuICByZWdpc3RlckdlbmVyaWNUeXBlUGFyYW1zXG59IGZyb20gJy4vYXBpLWRvYy1zb3VyY2UtcHJvY2Vzc2luZy50cyc7XG5pbXBvcnQgeyByZXNvbHZlSW5oZXJpdGVkTWVtYmVycyB9IGZyb20gJy4vYXBpLWRvYy10eXBlLW1lcmdpbmcudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUFwaURvY3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQXBpRG9jc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290OiB0aGUgZm9sZGVyIGhvbGRpbmcgYHRzY29uZmlnLmpzb25gIGFuZCBgbm9kZV9tb2R1bGVzYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGV2ZXJ5IHBhZ2UgYW5kIGxpbmsgaXMgcmVuZGVyZWQgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzOiBBcGlEb2NTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBtb2R1bGVzIGFyZSBkb2N1bWVudGVkLCBub3JtYWxseSBgPHJvb3Q+L3NyY2AuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfRklMRV9OQU1FID0gJy5jYWNoZS1oYXNoJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIEFQSSByZWZlcmVuY2UgcGFnZXMgYW5kIHRoZSBzaWRlYmFyLlxuICpcbiAqIFNraXBzIHRoZSB3b3JrIHdoZW4gbmVpdGhlciB0aGUgc291cmNlcywgdGhlIHNldHRpbmdzIG5vciB0aGUgZ2VuZXJhdG9yIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcnVuLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFwaURvY3Mob3B0aW9uczogR2VuZXJhdGVBcGlEb2NzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcm9vdERpcmVjdG9yeSwgc2V0dGluZ3MsIHNvdXJjZURpcmVjdG9yeSB9ID0gb3B0aW9ucztcbiAgY29uZmlndXJlQXBpRG9jcyhzZXR0aW5ncyk7XG4gIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3RvcnkpO1xuXG4gIGNvbnN0IHsgcHVibGljQXBpRW50cnkgfSA9IHNldHRpbmdzO1xuICBjb25zdCBiYXJyZWwgPSBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVhZFB1YmxpY0FwaUJhcnJlbChwdWJsaWNBcGlFbnRyeSwgc291cmNlRGlyZWN0b3J5KTtcbiAgY29uc3QgZW50cnlGaWxlcyA9IGJhcnJlbCA9PT0gdW5kZWZpbmVkID8gZmluZEVudHJ5RmlsZXMoc291cmNlRGlyZWN0b3J5LCBzZXR0aW5ncy5leGNsdWRlZERpcmVjdG9yaWVzKSA6IFsuLi5iYXJyZWwuZmlsZXNdO1xuICBjb25zb2xlLndhcm4oYEZvdW5kICR7U3RyaW5nKGVudHJ5RmlsZXMubGVuZ3RoKX0gZW50cnkgc291cmNlIGZpbGVzYCk7XG5cbiAgY29uc3QgY2FjaGVGaWxlID0gam9pbihzZXR0aW5ncy5vdXRwdXREaXJlY3RvcnksIENBQ0hFX0ZJTEVfTkFNRSk7XG4gIC8vIFRoZSBiYXJyZWwgZGVjaWRlcyB3aGljaCBuYW1lcyBhcmUgZG9jdW1lbnRlZCwgc28gYSByZS1leHBvcnQgYWRkZWQgdGhlcmUgY2hhbmdlcyB0aGUgb3V0cHV0IGJ5IGl0c2VsZi5cbiAgY29uc3QgaGFzaGVkRmlsZXMgPSBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gZW50cnlGaWxlcyA6IFsuLi5lbnRyeUZpbGVzLCBwdWJsaWNBcGlFbnRyeV07XG4gIGNvbnN0IGN1cnJlbnRIYXNoID0gY29tcHV0ZUNhY2hlSGFzaChoYXNoZWRGaWxlcywgZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpKTtcbiAgaWYgKGV4aXN0c1N5bmMoY2FjaGVGaWxlKSAmJiBleGlzdHNTeW5jKHNldHRpbmdzLnNpZGViYXJGaWxlKSAmJiByZWFkRmlsZVN5bmMoY2FjaGVGaWxlLCAndXRmLTgnKS50cmltKCkgPT09IGN1cnJlbnRIYXNoKSB7XG4gICAgY29uc29sZS53YXJuKCdTb3VyY2UgZmlsZXMgYW5kIGdlbmVyYXRvciB1bmNoYW5nZWQg4oCUIHNraXBwaW5nIGdlbmVyYXRpb24uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTG9hZCB2aWEgdGhlIHJlcG8ncyB0c2NvbmZpZyBzbyBpbmZlcnJlZCB0eXBlcyByZXNvbHZlLlxuICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3Qoe1xuICAgIHNraXBBZGRpbmdGaWxlc0Zyb21Uc0NvbmZpZzogdHJ1ZSxcbiAgICB0c0NvbmZpZ0ZpbGVQYXRoOiBqb2luKHJvb3REaXJlY3RvcnksICd0c2NvbmZpZy5qc29uJylcbiAgfSk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID0gcHJvamVjdC5hZGRTb3VyY2VGaWxlc0F0UGF0aHMoZW50cnlGaWxlcyk7XG5cbiAgY29uc3QgdHlwZXMgPSBuZXcgTWFwPHN0cmluZywgVHlwZUluZm8+KCk7XG4gIGNvbnN0IG1vZHVsZU92ZXJ2aWV3cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNsZWFyUGFja2FnZURlY2xhcmF0aW9ucygpO1xuXG4gIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gY29tcHV0ZU5hbWVzcGFjZShzb3VyY2VEaXJlY3RvcnksIG5vcm1hbGl6ZShzcmMuZ2V0RmlsZVBhdGgoKSkpO1xuICAgIGNvbnN0IG92ZXJ2aWV3ID0gZXh0cmFjdEZpbGVPdmVydmlldyhzcmMpO1xuICAgIGlmIChvdmVydmlldykge1xuICAgICAgbW9kdWxlT3ZlcnZpZXdzLnNldChuYW1lc3BhY2UsIG92ZXJ2aWV3KTtcbiAgICB9XG4gICAgY29sbGVjdFBhY2thZ2VEZWNsYXJhdGlvbnMoc3JjKTtcbiAgICBwcm9jZXNzU291cmNlRmlsZShzcmMsIHR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIGNvbGxlY3RGdW5jdGlvbnMoc3JjLCB0eXBlcywgbmFtZXNwYWNlKTtcbiAgICBjb2xsZWN0VmFyaWFibGVzKHNyYywgdHlwZXMsIG5hbWVzcGFjZSk7XG4gIH1cblxuICByZXNvbHZlSW5oZXJpdGVkTWVtYmVycyh0eXBlcyk7XG4gIC8vIE9ubHkgYWZ0ZXIgdGhlIGluaGVyaXRhbmNlIGlzIHJlc29sdmVkLCBzbyBhIHB1YmxpYyBjbGFzcyBrZWVwcyB0aGUgbWVtYmVycyBvZiBhbiBpbnRlcm5hbCBiYXNlIGNsYXNzLlxuICBpZiAoYmFycmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICBrZWVwUHVibGljQXBpKHR5cGVzLCBiYXJyZWwpO1xuICB9XG5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgaW5mby5wcm9wZXJ0aWVzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgIGluZm8ubWV0aG9kcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyR2VuZXJpY1R5cGVQYXJhbXModHlwZXMpO1xuICByZWdpc3RlclJvdXRlU2VnbWVudHModHlwZXMpO1xuICByZWdpc3Rlck1lbWJlclBhZ2VzKHR5cGVzKTtcblxuICBhd2FpdCBybShzZXR0aW5ncy5vdXRwdXREaXJlY3RvcnksIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoc2V0dGluZ3Mub3V0cHV0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXModHlwZXMsIHR5cGVzLCBtb2R1bGVPdmVydmlld3MpO1xuXG4gIC8vIFBhc3MgMTogZ2VuZXJhdGUgYWxsIHBhZ2VzIHdpdGhvdXQgYmFja2xpbmtzLCBjb2xsZWN0IGNvbnRlbnQgKGtleWVkIGJ5IHF1YWxpZmllZCBpZClcbiAgY29uc3QgcGFnZUNvbnRlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PigpO1xuICBmb3IgKGNvbnN0IFtrZXksIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgcGFnZUNvbnRlbnRzLnNldChrZXksIGF3YWl0IGdlbmVyYXRlT3ZlcnZpZXdQYWdlKGluZm8ubmFtZSwgaW5mbywgdHlwZXMpKTtcbiAgICBpZiAoaW5mby5raW5kID09PSAnY2xhc3MnIHx8IGluZm8ua2luZCA9PT0gJ2ludGVyZmFjZScpIHtcbiAgICAgIGF3YWl0IGdlbmVyYXRlTWVtYmVyUGFnZXMoaW5mby5uYW1lLCBpbmZvLCB0eXBlcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFzcyAyOiBzY2FuIGNvbnRlbnQgZm9yIGxpbmtzLCBhcHBlbmQgYmFja2xpbmtzLCB3cml0ZSBmaWxlc1xuICBhd2FpdCBhcHBlbmRCYWNrbGlua3NBbmRXcml0ZShwYWdlQ29udGVudHMsIHR5cGVzKTtcblxuICBhd2FpdCBnZW5lcmF0ZVNpZGViYXJKc29uKHR5cGVzKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGNhY2hlRmlsZSwgY3VycmVudEhhc2gsICd1dGYtOCcpO1xuXG4gIGNvbnNvbGUud2FybihgR2VuZXJhdGVkIGRvY3MgZm9yICR7U3RyaW5nKHR5cGVzLnNpemUpfSB0eXBlcyBhY3Jvc3MgJHtTdHJpbmcobW9kdWxlT3ZlcnZpZXdzLnNpemUpfSBkb2N1bWVudGVkIG1vZHVsZXNgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUJBLHFCQUdPO0FBQ1Asc0JBSU87QUFDUCx1QkFJTztBQUNQLHNCQUE4QjtBQUM5QixzQkFBd0I7QUFReEIsMkJBQW9DO0FBQ3BDLG9DQUlPO0FBQ1AsbUNBQXlDO0FBQ3pDLHFDQU1PO0FBQ1AsOEJBQWlDO0FBQ2pDLHVDQVdPO0FBQ1Asa0NBQXdDO0FBdkV4QyxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLFNBQVMsc0JBQXNCO0FBQ3ZGLE1BQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsVUFBTSxlQUFlO0FBQ3JCLFVBQU0sTUFBTSxhQUFhLFVBQVU7QUFDbkMsUUFBSSxPQUFPLElBQUksa0JBQWtCLFlBQVk7QUFDM0MsYUFBTyxJQUFJLGNBQWMsVUFBVSxFQUFFO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBR0EsU0FBTyxXQUFXLFVBQVUsUUFBUTtBQUN0QyxHQUFHO0FBa0ZILE1BQU0sa0JBQWtCO0FBU3hCLGVBQXNCLGdCQUFnQixTQUErQztBQUNuRixRQUFNLEVBQUUsZUFBZSxVQUFVLGdCQUFnQixJQUFJO0FBQ3JELGdEQUFpQixRQUFRO0FBQ3pCLDBEQUFxQixhQUFhO0FBRWxDLFFBQU0sRUFBRSxlQUFlLElBQUk7QUFDM0IsUUFBTSxTQUFTLG1CQUFtQixTQUFZLGFBQVksc0RBQW9CLGdCQUFnQixlQUFlO0FBQzdHLFFBQU0sYUFBYSxXQUFXLGFBQVksaURBQWUsaUJB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
@@ -4,7 +4,8 @@
4
4
  *
5
5
  * The API documentation generator: walks a package's `src`, extracts every documentable exported declaration via
6
6
  * ts-morph, and writes Starlight-compatible MDX pages plus a sidebar JSON. The output tree mirrors the package's
7
- * module structure: a type's namespace is its source path relative to `src`, which is also its import subpath.
7
+ * module structure: a type's namespace is its source path relative to `src`, which is also its import subpath, unless
8
+ * the package publishes its API from one barrel (`publicApiEntry`), whose re-exports are then all that is documented.
8
9
  */
9
10
  import type { ApiDocSettings } from './api-doc-settings.cjs';
10
11
  /**
@@ -33,6 +33,8 @@ var import_unrendered_alerts = require('./unrendered-alerts.cjs');
33
33
  const EXTERNAL_LINK_TIMEOUT_IN_MILLISECONDS = 1e4;
34
34
  const EXTERNAL_LINK_CONCURRENCY = 20;
35
35
  const HTML_FILE_EXTENSION = ".html";
36
+ const NPM_PACKAGE_URL_PREFIX = "https://www.npmjs.com/package/";
37
+ const NPM_REGISTRY_URL_PREFIX = "https://registry.npmjs.org/";
36
38
  const FALLBACK_PAGE_RELATIVE_PATH = "404.html";
37
39
  async function assertDocsLinksResolve(options) {
38
40
  const outputDirectory = (0, import_node_path.resolve)(options.outputDirectory).replaceAll("\\", "/");
@@ -84,7 +86,7 @@ async function fetchUrlStatus(url) {
84
86
  controller.abort();
85
87
  }, EXTERNAL_LINK_TIMEOUT_IN_MILLISECONDS);
86
88
  try {
87
- const response = await fetch(url, { signal: controller.signal });
89
+ const response = await fetch(toCheckableUrl(url), { signal: controller.signal });
88
90
  await response.body?.cancel();
89
91
  return {
90
92
  retryAfterInMilliseconds: (0, import_link_check.parseRetryAfterInMilliseconds)(response.headers.get("retry-after"), Date.now()),
@@ -119,8 +121,11 @@ async function readPages(outputRootPath, allFiles) {
119
121
  }
120
122
  return pages;
121
123
  }
124
+ function toCheckableUrl(url) {
125
+ return url.startsWith(NPM_PACKAGE_URL_PREFIX) ? NPM_REGISTRY_URL_PREFIX + url.slice(NPM_PACKAGE_URL_PREFIX.length) : url;
126
+ }
122
127
  // Annotate the CommonJS export names for ESM import in node:
123
128
  0 && (module.exports = {
124
129
  assertDocsLinksResolve
125
130
  });
126
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9kb2NzLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGVzIHRoZSBsaW5rcyBlbWl0dGVkIGJ5IGEgYnVpbHQgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICpcbiAqIEludGVybmFsIGxpbmtzIGFyZSByZXNvbHZlZCBvZmZsaW5lIGFnYWluc3QgdGhlIGJ1aWxkIG91dHB1dDsgZXh0ZXJuYWwgbGlua3MgYXJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLFxuICogZGVkdXBsaWNhdGVkIHNvIGVhY2ggdW5pcXVlIFVSTCBpcyBmZXRjaGVkIGF0IG1vc3Qgb25jZS4gU2VlIHtAbGluayAuL2xpbmstY2hlY2sudHN9IGZvciB0aGUgZGVjaXNpb24gbG9naWMuXG4gKlxuICogSXQgYWxzbyBmYWlscyBvbiBhIEdpdEh1YiBhbGVydCB0aGF0IHJlYWNoZWQgYSBwYWdlIGFzIGEgcGxhaW4gYmxvY2txdW90ZSAoc2VlIHtAbGluayAuL3VucmVuZGVyZWQtYWxlcnRzLnRzfSksXG4gKiBzaW5jZSBub3RoaW5nIGVsc2Ugbm90aWNlcyB3aGVuIHRoZSBjb252ZXJzaW9uIHN0b3BzLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRG9jdW1lbnRhdGlvblBhZ2UsXG4gIEV4dGVybmFsTGlua1Byb2JlUmVzdWx0LFxuICBMaW5rQ2hlY2tGaWxlU3lzdGVtXG59IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzLFxuICBjb2xsZWN0QnJva2VuTGlua3MsXG4gIGNvbGxlY3RFeHRlcm5hbFRhcmdldHMsXG4gIGV4dHJhY3RJZHMsXG4gIGZvcm1hdEJyb2tlbkxpbmtzLFxuICBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTLFxuICBwYXJzZVJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyxcbiAgcmVzb2x2ZVdpdGhpblJvb3Rcbn0gZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzLFxuICBmb3JtYXRVbnJlbmRlcmVkQWxlcnRzXG59IGZyb20gJy4vdW5yZW5kZXJlZC1hbGVydHMudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhc3NlcnREb2NzTGlua3NSZXNvbHZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBub3JtYWxseSBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20sIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgZS5nLiBgaHR0cHM6Ly9tbmFvdW1vdi5kZXYvdHlwZXNjcmlwdC1saWIvYC5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVCYXNlVXJsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZID0gMjA7XG5jb25zdCBIVE1MX0ZJTEVfRVhURU5TSU9OID0gJy5odG1sJztcblxuLy8gVGhlIGhvc3Qgc2VydmVzIHRoaXMgcGFnZSBhcyB0aGUgZmFsbGJhY2sgZm9yIGFueSBtaXNzaW5nIHBhdGggKHdpdGggYSA0MDQgc3RhdHVzKSwgc28gaXQgaXMgbm90IGFcbi8vIHJlYWwgbmF2aWdhYmxlIHJvdXRlOiBTdGFybGlnaHQgZ2l2ZXMgaXQgYSBzZWxmLWByZWw9XCJjYW5vbmljYWxcImAgb2YgYC80MDQvYCB0aGF0IGluaGVyZW50bHkgY2Fubm90XG4vLyByZXNvbHZlLCBhbmQgaXRzIGJvZHkgbGlua3MgKG5hdiwgbG9nbykgYXJlIGlkZW50aWNhbCB0byBldmVyeSByZWFsIHBhZ2Ugd2UgYWxyZWFkeSB2YWxpZGF0ZS5cbmNvbnN0IEZBTExCQUNLX1BBR0VfUkVMQVRJVkVfUEFUSCA9ICc0MDQuaHRtbCc7XG5cbmludGVyZmFjZSBDcmVhdGVGaWxlU3lzdGVtUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWxsRmlsZXM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBvdXRwdXREaXJlY3Rvcnk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFnZXM6IERvY3VtZW50YXRpb25QYWdlW107XG59XG5cbi8qKlxuICogQ2hlY2tzIGV2ZXJ5IGxpbmsgb2YgdGhlIGJ1aWx0IHNpdGUsIGFuZCB0aGF0IGV2ZXJ5IEdpdEh1YiBhbGVydCByZW5kZXJlZCBhcyBhbiBhc2lkZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zLlxuICogQHRocm93cyBJZiBhbiBhbGVydCByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUsIG9yIGEgbGluayBkb2VzIG5vdCByZXNvbHZlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0RG9jc0xpbmtzUmVzb2x2ZShvcHRpb25zOiBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG91dHB1dERpcmVjdG9yeSA9IHJlc29sdmUob3B0aW9ucy5vdXRwdXREaXJlY3RvcnkpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBjb25zdCBhbGxGaWxlcyA9IGF3YWl0IGdldEFsbEZpbGVzKG91dHB1dERpcmVjdG9yeSk7XG4gIGNvbnN0IHBhZ2VzID0gYXdhaXQgcmVhZFBhZ2VzKG91dHB1dERpcmVjdG9yeSwgYWxsRmlsZXMpO1xuXG4gIC8vIE9mZmxpbmUgYW5kIGluc3RhbnQsIHNvIGl0IHJ1bnMgYmVmb3JlIHRoZSBuZXR3b3JrIGhhbGYgYW5kIGZhaWxzIGZpcnN0LlxuICBjb25zdCB1bnJlbmRlcmVkQWxlcnRzID0gY29sbGVjdFVucmVuZGVyZWRBbGVydHMocGFnZXMpO1xuICBpZiAodW5yZW5kZXJlZEFsZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldGVjdGVkICR7U3RyaW5nKHVucmVuZGVyZWRBbGVydHMubGVuZ3RoKX0gR2l0SHViIGFsZXJ0KHMpIHJlbmRlcmVkIGFzIGEgcGxhaW4gYmxvY2txdW90ZSBpbnN0ZWFkIG9mIGFuIGFzaWRlOlxcbiR7Zm9ybWF0VW5yZW5kZXJlZEFsZXJ0cyh1bnJlbmRlcmVkQWxlcnRzKX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGludGVybmFsQnJva2VuTGlua3MgPSBjb2xsZWN0QnJva2VuTGlua3MocGFnZXMsIGNyZWF0ZUZpbGVTeXN0ZW0oeyBhbGxGaWxlcywgb3V0cHV0RGlyZWN0b3J5LCBwYWdlcyB9KSwgb3B0aW9ucy5zaXRlQmFzZVVybCk7XG5cbiAgY29uc3QgZXh0ZXJuYWxUYXJnZXRzID0gY29sbGVjdEV4dGVybmFsVGFyZ2V0cyhwYWdlcywgb3B0aW9ucy5zaXRlQmFzZVVybCk7XG4gIGNvbnN0IGV4dGVybmFsQnJva2VuTGlua3MgPSBhd2FpdCBjb2xsZWN0QnJva2VuRXh0ZXJuYWxMaW5rcyhleHRlcm5hbFRhcmdldHMsIGZldGNoVXJsU3RhdHVzLCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZKTtcblxuICBjb25zdCBicm9rZW5MaW5rcyA9IFsuLi5pbnRlcm5hbEJyb2tlbkxpbmtzLCAuLi5leHRlcm5hbEJyb2tlbkxpbmtzXTtcbiAgaWYgKGJyb2tlbkxpbmtzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERldGVjdGVkICR7U3RyaW5nKGJyb2tlbkxpbmtzLmxlbmd0aCl9IGJyb2tlbiBkb2N1bWVudGF0aW9uIGxpbmsocyk6XFxuJHtmb3JtYXRCcm9rZW5MaW5rcyhicm9rZW5MaW5rcyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5c3RlbShwYXJhbXM6IENyZWF0ZUZpbGVTeXN0ZW1QYXJhbXMpOiBMaW5rQ2hlY2tGaWxlU3lzdGVtIHtcbiAgY29uc3QgeyBhbGxGaWxlcywgb3V0cHV0RGlyZWN0b3J5LCBwYWdlcyB9ID0gcGFyYW1zO1xuICBjb25zdCBodG1sQnlSZWxhdGl2ZVBhdGggPSBuZXcgTWFwKHBhZ2VzLm1hcCgocGFnZSkgPT4gW3BhZ2UucmVsYXRpdmVQYXRoLCBwYWdlLmh0bWxdKSk7XG4gIGNvbnN0IGlkc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gIHJldHVybiB7XG4gICAgcmVhZElkczogKHBhZ2VLZXkpOiBTZXQ8c3RyaW5nPiA9PiB7XG4gICAgICBsZXQgaWRzID0gaWRzQ2FjaGUuZ2V0KHBhZ2VLZXkpO1xuICAgICAgaWYgKGlkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBodG1sQnlSZWxhdGl2ZVBhdGguZ2V0KHBhZ2VLZXkpO1xuICAgICAgICBpZHMgPSBodG1sID09PSB1bmRlZmluZWQgPyBuZXcgU2V0PHN0cmluZz4oKSA6IGV4dHJhY3RJZHMoaHRtbCk7XG4gICAgICAgIGlkc0NhY2hlLnNldChwYWdlS2V5LCBpZHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0sXG4gICAgcmVzb2x2ZUV4aXN0aW5nUGFnZTogKG91dHB1dFJlbGF0aXZlUGF0aCk6IG51bGwgfCBzdHJpbmcgPT4ge1xuICAgICAgaWYgKHJlc29sdmVXaXRoaW5Sb290KG91dHB1dERpcmVjdG9yeSwgb3V0cHV0UmVsYXRpdmVQYXRoKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJpbW1lZCA9IG91dHB1dFJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC8kL3UsICcnKTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSB0cmltbWVkID09PSAnJyA/IFsnaW5kZXguaHRtbCddIDogW3RyaW1tZWQsIGAke3RyaW1tZWR9L2luZGV4Lmh0bWxgXTtcbiAgICAgIHJldHVybiBjYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYWxsRmlsZXMuaGFzKGNhbmRpZGF0ZSkpID8/IG51bGw7XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFVybFN0YXR1cyh1cmw6IHN0cmluZyk6IFByb21pc2U8RXh0ZXJuYWxMaW5rUHJvYmVSZXN1bHQ+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dElkID0gZ2xvYmFsVGhpcy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcbiAgICAvLyBDYW5jZWwgdGhlIHVucmVhZCBib2R5IHNvIHVuZGljaSByZWxlYXNlcyB0aGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseS5cbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIHBlci1ob3N0IGNvbm5lY3Rpb24gcG9vbCBzdGFsbHMgYW5kIHNhbWUtaG9zdCByZXF1ZXN0c1xuICAgIC8vIHNlcmlhbGl6ZSwgdHVybmluZyBhIH4zcyBydW4gaW50byBtaW51dGVzLlxuICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgIHJldHVybiB7XG4gICAgICByZXRyeUFmdGVySW5NaWxsaXNlY29uZHM6IHBhcnNlUmV0cnlBZnRlckluTWlsbGlzZWNvbmRzKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpLCBEYXRlLm5vdygpKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTIH07XG4gIH0gZmluYWxseSB7XG4gICAgZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxGaWxlcyhvdXRwdXRSb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihvdXRwdXRSb290UGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHJlc29sdmUoZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gICAgZmlsZXMuYWRkKGFic29sdXRlUGF0aC5zbGljZShgJHtvdXRwdXRSb290UGF0aH0vYC5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFBhZ2VzKG91dHB1dFJvb3RQYXRoOiBzdHJpbmcsIGFsbEZpbGVzOiBTZXQ8c3RyaW5nPik6IFByb21pc2U8RG9jdW1lbnRhdGlvblBhZ2VbXT4ge1xuICBjb25zdCBwYWdlczogRG9jdW1lbnRhdGlvblBhZ2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJlbGF0aXZlUGF0aCBvZiBhbGxGaWxlcykge1xuICAgIGlmICghcmVsYXRpdmVQYXRoLmVuZHNXaXRoKEhUTUxfRklMRV9FWFRFTlNJT04pIHx8IHJlbGF0aXZlUGF0aCA9PT0gRkFMTEJBQ0tfUEFHRV9SRUxBVElWRV9QQVRIKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gYXdhaXQgcmVhZEZpbGUocmVzb2x2ZShvdXRwdXRSb290UGF0aCwgcmVsYXRpdmVQYXRoKSwgJ3V0Zi04Jyk7XG4gICAgcGFnZXMucHVzaCh7IGh0bWwsIHJlbGF0aXZlUGF0aCB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWdlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHNCQUdPO0FBQ1AsdUJBQXdCO0FBUXhCLHdCQVNPO0FBQ1AsK0JBR087QUFpQlAsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSw0QkFBNEI7QUFDbEMsTUFBTSxzQkFBc0I7QUFLNUIsTUFBTSw4QkFBOEI7QUFjcEMsZUFBc0IsdUJBQXVCLFNBQXNEO0FBQ2pHLFFBQU0sc0JBQWtCLDBCQUFRLFFBQVEsZUFBZSxFQUFFLFdBQVcsTUFBTSxHQUFHO0FBQzdFLFFBQU0sV0FBVyxNQUFNLFlBQVksZUFBZTtBQUNsRCxRQUFNLFFBQVEsTUFBTSxVQUFVLGlCQUFpQixRQUFRO0FBR3ZELFFBQU0sdUJBQW1CLGtEQUF3QixLQUFLO0FBQ3RELE1BQUksaUJBQWlCLFNBQVMsR0FBRztBQUMvQixVQUFNLElBQUk7QUFBQSxNQUNSLFlBQVksT0FBTyxpQkFBaUIsTUFBTSxDQUFDO0FBQUEsTUFBeUUsaURBQXVCLGdCQUFnQixDQUFDO0FBQUEsSUFDOUo7QUFBQSxFQUNGO0FBRUEsUUFBTSwwQkFBc0Isc0NBQW1CLE9BQU8saUJBQWlCLEVBQUUsVUFBVSxpQkFBaUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxXQUFXO0FBRWpJLFFBQU0sc0JBQWtCLDBDQUF1QixPQUFPLFFBQVEsV0FBVztBQUN6RSxRQUFNLHNCQUFzQixVQUFNLDhDQUEyQixpQkFBaUIsZ0JBQWdCLHlCQUF5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
131
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9kb2NzLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVmFsaWRhdGVzIHRoZSBsaW5rcyBlbWl0dGVkIGJ5IGEgYnVpbHQgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICpcbiAqIEludGVybmFsIGxpbmtzIGFyZSByZXNvbHZlZCBvZmZsaW5lIGFnYWluc3QgdGhlIGJ1aWxkIG91dHB1dDsgZXh0ZXJuYWwgbGlua3MgYXJlIHZhbGlkYXRlZCBvdmVyIHRoZSBuZXR3b3JrLFxuICogZGVkdXBsaWNhdGVkIHNvIGVhY2ggdW5pcXVlIFVSTCBpcyBmZXRjaGVkIGF0IG1vc3Qgb25jZS4gU2VlIHtAbGluayAuL2xpbmstY2hlY2sudHN9IGZvciB0aGUgZGVjaXNpb24gbG9naWMuXG4gKlxuICogSXQgYWxzbyBmYWlscyBvbiBhIEdpdEh1YiBhbGVydCB0aGF0IHJlYWNoZWQgYSBwYWdlIGFzIGEgcGxhaW4gYmxvY2txdW90ZSAoc2VlIHtAbGluayAuL3VucmVuZGVyZWQtYWxlcnRzLnRzfSksXG4gKiBzaW5jZSBub3RoaW5nIGVsc2Ugbm90aWNlcyB3aGVuIHRoZSBjb252ZXJzaW9uIHN0b3BzLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXIsXG4gIHJlYWRGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRG9jdW1lbnRhdGlvblBhZ2UsXG4gIEV4dGVybmFsTGlua1Byb2JlUmVzdWx0LFxuICBMaW5rQ2hlY2tGaWxlU3lzdGVtXG59IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RCcm9rZW5FeHRlcm5hbExpbmtzLFxuICBjb2xsZWN0QnJva2VuTGlua3MsXG4gIGNvbGxlY3RFeHRlcm5hbFRhcmdldHMsXG4gIGV4dHJhY3RJZHMsXG4gIGZvcm1hdEJyb2tlbkxpbmtzLFxuICBORVRXT1JLX0ZBSUxVUkVfU1RBVFVTLFxuICBwYXJzZVJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kcyxcbiAgcmVzb2x2ZVdpdGhpblJvb3Rcbn0gZnJvbSAnLi9saW5rLWNoZWNrLnRzJztcbmltcG9ydCB7XG4gIGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzLFxuICBmb3JtYXRVbnJlbmRlcmVkQWxlcnRzXG59IGZyb20gJy4vdW5yZW5kZXJlZC1hbGVydHMudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhc3NlcnREb2NzTGlua3NSZXNvbHZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnREb2NzTGlua3NSZXNvbHZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBub3JtYWxseSBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20sIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgZS5nLiBgaHR0cHM6Ly9tbmFvdW1vdi5kZXYvdHlwZXNjcmlwdC1saWIvYC5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVCYXNlVXJsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVYVEVSTkFMX0xJTktfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5jb25zdCBFWFRFUk5BTF9MSU5LX0NPTkNVUlJFTkNZID0gMjA7XG5jb25zdCBIVE1MX0ZJTEVfRVhURU5TSU9OID0gJy5odG1sJztcbmNvbnN0IE5QTV9QQUNLQUdFX1VSTF9QUkVGSVggPSAnaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvJztcbmNvbnN0IE5QTV9SRUdJU1RSWV9VUkxfUFJFRklYID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyc7XG5cbi8vIFRoZSBob3N0IHNlcnZlcyB0aGlzIHBhZ2UgYXMgdGhlIGZhbGxiYWNrIGZvciBhbnkgbWlzc2luZyBwYXRoICh3aXRoIGEgNDA0IHN0YXR1cyksIHNvIGl0IGlzIG5vdCBhXG4vLyByZWFsIG5hdmlnYWJsZSByb3V0ZTogU3RhcmxpZ2h0IGdpdmVzIGl0IGEgc2VsZi1gcmVsPVwiY2Fub25pY2FsXCJgIG9mIGAvNDA0L2AgdGhhdCBpbmhlcmVudGx5IGNhbm5vdFxuLy8gcmVzb2x2ZSwgYW5kIGl0cyBib2R5IGxpbmtzIChuYXYsIGxvZ28pIGFyZSBpZGVudGljYWwgdG8gZXZlcnkgcmVhbCBwYWdlIHdlIGFscmVhZHkgdmFsaWRhdGUuXG5jb25zdCBGQUxMQkFDS19QQUdFX1JFTEFUSVZFX1BBVEggPSAnNDA0Lmh0bWwnO1xuXG5pbnRlcmZhY2UgQ3JlYXRlRmlsZVN5c3RlbVBhcmFtcyB7XG4gIHJlYWRvbmx5IGFsbEZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgb3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdO1xufVxuXG4vKipcbiAqIENoZWNrcyBldmVyeSBsaW5rIG9mIHRoZSBidWlsdCBzaXRlLCBhbmQgdGhhdCBldmVyeSBHaXRIdWIgYWxlcnQgcmVuZGVyZWQgYXMgYW4gYXNpZGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqIEB0aHJvd3MgSWYgYW4gYWxlcnQgcmVuZGVyZWQgYXMgYSBwbGFpbiBibG9ja3F1b3RlLCBvciBhIGxpbmsgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydERvY3NMaW5rc1Jlc29sdmUob3B0aW9uczogQXNzZXJ0RG9jc0xpbmtzUmVzb2x2ZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSByZXNvbHZlKG9wdGlvbnMub3V0cHV0RGlyZWN0b3J5KS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCBnZXRBbGxGaWxlcyhvdXRwdXREaXJlY3RvcnkpO1xuICBjb25zdCBwYWdlcyA9IGF3YWl0IHJlYWRQYWdlcyhvdXRwdXREaXJlY3RvcnksIGFsbEZpbGVzKTtcblxuICAvLyBPZmZsaW5lIGFuZCBpbnN0YW50LCBzbyBpdCBydW5zIGJlZm9yZSB0aGUgbmV0d29yayBoYWxmIGFuZCBmYWlscyBmaXJzdC5cbiAgY29uc3QgdW5yZW5kZXJlZEFsZXJ0cyA9IGNvbGxlY3RVbnJlbmRlcmVkQWxlcnRzKHBhZ2VzKTtcbiAgaWYgKHVucmVuZGVyZWRBbGVydHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXRlY3RlZCAke1N0cmluZyh1bnJlbmRlcmVkQWxlcnRzLmxlbmd0aCl9IEdpdEh1YiBhbGVydChzKSByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUgaW5zdGVhZCBvZiBhbiBhc2lkZTpcXG4ke2Zvcm1hdFVucmVuZGVyZWRBbGVydHModW5yZW5kZXJlZEFsZXJ0cyl9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbnRlcm5hbEJyb2tlbkxpbmtzID0gY29sbGVjdEJyb2tlbkxpbmtzKHBhZ2VzLCBjcmVhdGVGaWxlU3lzdGVtKHsgYWxsRmlsZXMsIG91dHB1dERpcmVjdG9yeSwgcGFnZXMgfSksIG9wdGlvbnMuc2l0ZUJhc2VVcmwpO1xuXG4gIGNvbnN0IGV4dGVybmFsVGFyZ2V0cyA9IGNvbGxlY3RFeHRlcm5hbFRhcmdldHMocGFnZXMsIG9wdGlvbnMuc2l0ZUJhc2VVcmwpO1xuICBjb25zdCBleHRlcm5hbEJyb2tlbkxpbmtzID0gYXdhaXQgY29sbGVjdEJyb2tlbkV4dGVybmFsTGlua3MoZXh0ZXJuYWxUYXJnZXRzLCBmZXRjaFVybFN0YXR1cywgRVhURVJOQUxfTElOS19DT05DVVJSRU5DWSk7XG5cbiAgY29uc3QgYnJva2VuTGlua3MgPSBbLi4uaW50ZXJuYWxCcm9rZW5MaW5rcywgLi4uZXh0ZXJuYWxCcm9rZW5MaW5rc107XG4gIGlmIChicm9rZW5MaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXRlY3RlZCAke1N0cmluZyhicm9rZW5MaW5rcy5sZW5ndGgpfSBicm9rZW4gZG9jdW1lbnRhdGlvbiBsaW5rKHMpOlxcbiR7Zm9ybWF0QnJva2VuTGlua3MoYnJva2VuTGlua3MpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeXN0ZW0ocGFyYW1zOiBDcmVhdGVGaWxlU3lzdGVtUGFyYW1zKTogTGlua0NoZWNrRmlsZVN5c3RlbSB7XG4gIGNvbnN0IHsgYWxsRmlsZXMsIG91dHB1dERpcmVjdG9yeSwgcGFnZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgaHRtbEJ5UmVsYXRpdmVQYXRoID0gbmV3IE1hcChwYWdlcy5tYXAoKHBhZ2UpID0+IFtwYWdlLnJlbGF0aXZlUGF0aCwgcGFnZS5odG1sXSkpO1xuICBjb25zdCBpZHNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZXR1cm4ge1xuICAgIHJlYWRJZHM6IChwYWdlS2V5KTogU2V0PHN0cmluZz4gPT4ge1xuICAgICAgbGV0IGlkcyA9IGlkc0NhY2hlLmdldChwYWdlS2V5KTtcbiAgICAgIGlmIChpZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBodG1sID0gaHRtbEJ5UmVsYXRpdmVQYXRoLmdldChwYWdlS2V5KTtcbiAgICAgICAgaWRzID0gaHRtbCA9PT0gdW5kZWZpbmVkID8gbmV3IFNldDxzdHJpbmc+KCkgOiBleHRyYWN0SWRzKGh0bWwpO1xuICAgICAgICBpZHNDYWNoZS5zZXQocGFnZUtleSwgaWRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9LFxuICAgIHJlc29sdmVFeGlzdGluZ1BhZ2U6IChvdXRwdXRSZWxhdGl2ZVBhdGgpOiBudWxsIHwgc3RyaW5nID0+IHtcbiAgICAgIGlmIChyZXNvbHZlV2l0aGluUm9vdChvdXRwdXREaXJlY3RvcnksIG91dHB1dFJlbGF0aXZlUGF0aCkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBvdXRwdXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXFwvJC91LCAnJyk7XG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gdHJpbW1lZCA9PT0gJycgPyBbJ2luZGV4Lmh0bWwnXSA6IFt0cmltbWVkLCBgJHt0cmltbWVkfS9pbmRleC5odG1sYF07XG4gICAgICByZXR1cm4gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+IGFsbEZpbGVzLmhhcyhjYW5kaWRhdGUpKSA/PyBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hVcmxTdGF0dXModXJsOiBzdHJpbmcpOiBQcm9taXNlPEV4dGVybmFsTGlua1Byb2JlUmVzdWx0PiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXRJZCA9IGdsb2JhbFRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBFWFRFUk5BTF9MSU5LX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godG9DaGVja2FibGVVcmwodXJsKSwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuICAgIC8vIENhbmNlbCB0aGUgdW5yZWFkIGJvZHkgc28gdW5kaWNpIHJlbGVhc2VzIHRoZSBjb25uZWN0aW9uIGltbWVkaWF0ZWx5LlxuICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgcGVyLWhvc3QgY29ubmVjdGlvbiBwb29sIHN0YWxscyBhbmQgc2FtZS1ob3N0IHJlcXVlc3RzXG4gICAgLy8gc2VyaWFsaXplLCB0dXJuaW5nIGEgfjNzIHJ1biBpbnRvIG1pbnV0ZXMuXG4gICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJldHJ5QWZ0ZXJJbk1pbGxpc2Vjb25kczogcGFyc2VSZXRyeUFmdGVySW5NaWxsaXNlY29uZHMocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJyksIERhdGUubm93KCkpLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBzdGF0dXM6IE5FVFdPUktfRkFJTFVSRV9TVEFUVVMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBnbG9iYWxUaGlzLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbEZpbGVzKG91dHB1dFJvb3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKG91dHB1dFJvb3RQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcmVzb2x2ZShlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgICBmaWxlcy5hZGQoYWJzb2x1dGVQYXRoLnNsaWNlKGAke291dHB1dFJvb3RQYXRofS9gLmxlbmd0aCkpO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFnZXMob3V0cHV0Um9vdFBhdGg6IHN0cmluZywgYWxsRmlsZXM6IFNldDxzdHJpbmc+KTogUHJvbWlzZTxEb2N1bWVudGF0aW9uUGFnZVtdPiB7XG4gIGNvbnN0IHBhZ2VzOiBEb2N1bWVudGF0aW9uUGFnZVtdID0gW107XG4gIGZvciAoY29uc3QgcmVsYXRpdmVQYXRoIG9mIGFsbEZpbGVzKSB7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGguZW5kc1dpdGgoSFRNTF9GSUxFX0VYVEVOU0lPTikgfHwgcmVsYXRpdmVQYXRoID09PSBGQUxMQkFDS19QQUdFX1JFTEFUSVZFX1BBVEgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZWFkRmlsZShyZXNvbHZlKG91dHB1dFJvb3RQYXRoLCByZWxhdGl2ZVBhdGgpLCAndXRmLTgnKTtcbiAgICBwYWdlcy5wdXNoKHsgaHRtbCwgcmVsYXRpdmVQYXRoIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhZ2VzO1xufVxuXG4vLyBUaGUgbnBtanMgc2l0ZSBhbnN3ZXJzIGFuIHVuYXR0ZW5kZWQgYGZldGNoYCBvZiBhIHBhY2thZ2UgcGFnZSB3aXRoIDQwMywgc28gdGhlIHBhY2thZ2UgaXMgcHJvYmVkIG9uIHRoZSByZWdpc3RyeVxuLy8gaW5zdGVhZCwgdGhlIHJld3JpdGUgdGhlIG1hcmtkb3duIGxpbmsgY2hlY2sgZ2l2ZXMgbGlua2luYXRvci5cbmZ1bmN0aW9uIHRvQ2hlY2thYmxlVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKE5QTV9QQUNLQUdFX1VSTF9QUkVGSVgpID8gTlBNX1JFR0lTVFJZX1VSTF9QUkVGSVggKyB1cmwuc2xpY2UoTlBNX1BBQ0tBR0VfVVJMX1BSRUZJWC5sZW5ndGgpIDogdXJsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsc0JBR087QUFDUCx1QkFBd0I7QUFReEIsd0JBU087QUFDUCwrQkFHTztBQWlCUCxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDRCQUE0QjtBQUNs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
@@ -73,6 +73,7 @@ function resolveDocsSiteConfig(config) {
73
73
  memberRouteSegment,
74
74
  owner = "mnaoumov",
75
75
  packageSites = import_api_doc_package_sites.DEFAULT_PACKAGE_SITES,
76
+ publicApiEntry,
76
77
  repo,
77
78
  repoHomepage = "off",
78
79
  rootDirectory = process.cwd(),
@@ -101,6 +102,7 @@ function resolveDocsSiteConfig(config) {
101
102
  outputDirectory: (0, import_node_path.join)(contentDocsDirectory, "api"),
102
103
  packageName: packageJson.name,
103
104
  packageSites,
105
+ publicApiEntry: publicApiEntry === void 0 ? void 0 : (0, import_node_path.join)(rootDirectory, publicApiEntry),
104
106
  sidebarFile: (0, import_node_path.join)(docsSourceDirectory, "generated-sidebar.json")
105
107
  },
106
108
  basePath,
@@ -130,4 +132,4 @@ function resolveDocsSiteConfig(config) {
130
132
  0 && (module.exports = {
131
133
  resolveDocsSiteConfig
132
134
  });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zaXRlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG9uZSBkZXNjcmlwdGlvbiBvZiBhIGRvY3VtZW50YXRpb24gc2l0ZSB0aGF0IGl0cyBBc3RybyBjb25maWcgYW5kIGl0cyBidWlsZCBjb21tYW5kcyBzaGFyZTogd2hpY2ggcmVwb3NpdG9yeVxuICogaXQgZG9jdW1lbnRzLCB3aGVyZSBpdHMgc291cmNlcyBhbmQgcGFnZXMgbGl2ZSwgYW5kIHdoaWNoIG90aGVyIHNpdGVzIGl0IGxpbmtzIHRvLlxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQXBpRG9jU2V0dGluZ3MsXG4gIEltcG9ydFN0YXRlbWVudFByb3ZpZGVyLFxuICBNZW1iZXJSb3V0ZVNlZ21lbnRQcm92aWRlclxufSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHR5cGUgeyBSZXBvSG9tZXBhZ2VNb2RlIH0gZnJvbSAnLi9yZXBvLWhvbWVwYWdlLnRzJztcblxuaW1wb3J0IHsgREVGQVVMVF9QQUNLQUdFX1NJVEVTIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGRvY3VtZW50YXRpb24gc2l0ZS4gRXZlcnkgcGF0aCBpcyByZWxhdGl2ZSB0byB7QGxpbmsgRG9jc1NpdGVDb25maWcucm9vdERpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBzaXRlOiBpdHMgYHNyY2AgKHBhZ2VzLCBgY29udGVudC5jb25maWcudHNgKSwgYHB1YmxpY2AgYW5kIGJ1aWxkIG91dHB1dCBgZGlzdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkb2NzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRm9sZGVyIG5hbWVzIHVuZGVyIHtAbGluayBzb3VyY2VEaXJlY3Rvcnl9IHdob3NlIHN1YnRyZWUgdGhlIEFQSSByZWZlcmVuY2Ugc2tpcHMsIGluIGFkZGl0aW9uIHRvIGBAdHlwZXNgLFxuICAgKiBgc3R5bGVzYCBhbmQgYHRlc3QtaGVscGVyc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZERpcmVjdG9yaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZXMgbWFwcGVkIHRvIHRoZSBVUkwgdGhlaXIgcmVmZXJlbmNlcyBsaW5rIHRvLCBmb3IgdHlwZXMgbm8gZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLiBUaGUgbGF5ZXJcbiAgICogZG9jdW1lbnRpbmcgYW4gZWNvc3lzdGVtJ3MgcGFja2FnZXMgZmlsbHMgaXQgd2l0aCB0aGF0IGVjb3N5c3RlbSdzIHJlZmVyZW5jZXMuXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rcz86IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIEFQSSByZWZlcmVuY2UgbmV2ZXIgbGlua3MgYXMgdHlwZXMsIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBnZW5lcmljIHBhcmFtZXRlciBuYW1lcyBhbmQgZXZlcnlcbiAgICogdHlwZSBwYXJhbWV0ZXIgYSBkb2N1bWVudGVkIHR5cGUgZGVjbGFyZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBnZW5lcmljVHlwZVBhcmFtZXRlcnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB1bmRlciBgPGRvY3M+L3NyYy9jb250ZW50L2RvY3NgIHRoZSBndWlkZXMgc2lkZWJhciBncm91cCBpcyBnZW5lcmF0ZWQgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2d1aWRlcydcbiAgICovXG4gIHJlYWRvbmx5IGd1aWRlc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGRzIGVhY2ggZXhwb3J0J3MgaW1wb3J0IHN0YXRlbWVudCwgZm9yIGEgcGFja2FnZSB3aG9zZSBleHBvcnRzIGFyZSBub3QgaW1wb3J0ZWQgZnJvbVxuICAgKiBgPHBhY2thZ2U+Lzxtb2R1bGUgcGF0aD5gLCBlLmcuIG9uZSBwdWJsaXNoaW5nIGJhcnJlbCBlbnRyeSBwb2ludHMuIFJldHVybmluZyBgdW5kZWZpbmVkYCBzaG93cyBubyBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBzdGF0ZW1lbnQgaW1wb3J0aW5nIHRoZSBleHBvcnQgZnJvbSBgPHBhY2thZ2U+Lzxtb2R1bGUgcGF0aD5gXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRTdGF0ZW1lbnQ/OiBJbXBvcnRTdGF0ZW1lbnRQcm92aWRlcjtcblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBjYXNlLXByZXNlcnZlZCByb3V0ZSBzZWdtZW50IG9mIGEgbWVtYmVyJ3MgcGFnZSBmcm9tIGEgcHJvcGVydHkncyBuYW1lIG9yIGEgbWV0aG9kJ3Mgb3ZlcmxvYWQga2V5LFxuICAgKiBvdmVycmlkaW5nIHRoZSBnZW5lcmF0b3IncyBvd24gc2x1ZyB3aGVyZSBpdCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbmFtZSBhcyBhIFVSTCBzZWdtZW50LCBpdHMgdHJhaWxpbmcgdW5kZXJzY29yZXMga2VwdFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyUm91dGVTZWdtZW50PzogTWVtYmVyUm91dGVTZWdtZW50UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYWNjb3VudCB0aGUgcmVwb3NpdG9yeSBiZWxvbmdzIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbW5hb3Vtb3YnXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFja2FnZSBuYW1lcyBtYXBwZWQgdG8gdGhlIHJvb3QgVVJMIG9mIHRoZWlyIGRvY3VtZW50YXRpb24gc2l0ZSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLiBBIHR5cGUgZGVjbGFyZWQgaW4gb25lXG4gICAqIG9mIHRoZW0gbGlua3MgdG8gaXRzIHBhZ2UgdGhlcmUuIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UgaXRzZWxmIGlzIG5ldmVyIGxpbmtlZCB0aGlzIHdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9QQUNLQUdFX1NJVEVTXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlU2l0ZXM/OiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5J3MgbmFtZS4gVGhlIHNpdGUgaXMgc2VydmVkIHVuZGVyIGl0OiBgPHNpdGVPcmlnaW4+LzxyZXBvPi9gLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IGBidWlsZERvY3NTaXRlYCBkb2VzLCBhZnRlciB0aGUgYnVpbGQsIGFib3V0IHRoZSByZXBvc2l0b3J5J3MgR2l0SHViIGhvbWVwYWdlOiBjb21wYXJlIGl0IHdpdGggdGhlIHNpdGUnc1xuICAgKiBVUkwgYW5kIHJlcG9ydCBhIG1pc21hdGNoIChgY2hlY2tgKSwgb3IgYWxzbyBzZXQgaXQgKGBzZXRgKS4gSXQgcmVhZHMgYW5kIHdyaXRlcyB0aHJvdWdoIHRoZSBgZ2hgIENMSSwgYW5kXG4gICAqIG9ubHkgZXZlciB3YXJucy4gQSB3b3JrZmxvdydzIGBHSVRIVUJfVE9LRU5gIGNhbiByZWFkIHRoZSBob21lcGFnZSBidXQgbm90IHNldCBpdCwgc28gaW4gQ0kgYHNldGAgcmVwb3J0cyB0b28uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdvZmYnXG4gICAqL1xuICByZWFkb25seSByZXBvSG9tZXBhZ2U/OiBSZXBvSG9tZXBhZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290LCBob2xkaW5nIGBwYWNrYWdlLmpzb25gLCBgdHNjb25maWcuanNvbmAgYW5kIGBub2RlX21vZHVsZXNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBwcm9jZXNzLmN3ZCgpXG4gICAqL1xuICByZWFkb25seSByb290RGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luIGV2ZXJ5IHNpdGUgb2YgdGhlIGFjY291bnQgaXMgc2VydmVkIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdodHRwczovL21uYW91bW92LmRldidcbiAgICovXG4gIHJlYWRvbmx5IHNpdGVPcmlnaW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hvc2UgbW9kdWxlcyB0aGUgQVBJIHJlZmVyZW5jZSBkb2N1bWVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdzcmMnXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlJ3MgdGl0bGUsIHNob3duIGluIGl0cyBoZWFkZXIuXG4gICAqL1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIHtAbGluayBEb2NzU2l0ZUNvbmZpZ30gd2l0aCBldmVyeSBkZWZhdWx0IGFwcGxpZWQsIGV2ZXJ5IHBhdGggYWJzb2x1dGUsIGFuZCB0aGUgdmFsdWVzIGRlcml2ZWQgZnJvbSB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIEFQSSBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcidzIHNldHRpbmdzIGZvciB0aGUgc2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaURvY1NldHRpbmdzOiBBcGlEb2NTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIGJhc2UgcGF0aCwgZS5nLiBgL3R5cGVzY3JpcHQtbGliYC5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGF0aW9uIGNvbnRlbnQgcm9vdCwgYDxkb2NzPi9zcmMvY29udGVudC9kb2NzYC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnREb2NzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZm9sZGVyLCBgPGRvY3M+L2Rpc3RgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBkb2NzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXRlJ3Mgc291cmNlIGZvbGRlciwgYDxkb2NzPi9zcmNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc1NvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIGEgcGFnZSdzIGVkaXQgbGluayBzdGFydHMgd2l0aDogdGhlIHJlcG9zaXRvcnkncyBgZWRpdC9tYWluL2AgdHJlZS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRMaW5rQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIFNWRyBsb2dvLCBgPGRvY3M+L3B1YmxpYy9mYXZpY29uLnN2Z2AuXG4gICAqL1xuICByZWFkb25seSBmYXZpY29uUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSdzIEdpdEh1YiBVUkwuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5ndWlkZXNEaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgZ3VpZGVzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdGhlIE9wZW4gR3JhcGggY2FyZHMgYXJlIHdyaXR0ZW4gdG8sIGA8ZG9jcz4vcHVibGljL29nYC5cbiAgICovXG4gIHJlYWRvbmx5IG9nT3V0cHV0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcub3duZXJ9LlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50ZWQgcGFja2FnZSdzIG5hbWUsIHJlYWQgZnJvbSB0aGUgcm9vdCBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyB2ZXJzaW9uLCByZWFkIGZyb20gdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHN0YXRpYyBmb2xkZXIsIGA8ZG9jcz4vcHVibGljYC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnJlcG99LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnJlcG9Ib21lcGFnZX0uXG4gICAqL1xuICByZWFkb25seSByZXBvSG9tZXBhZ2U6IFJlcG9Ib21lcGFnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcucm9vdERpcmVjdG9yeX0uXG4gICAqL1xuICByZWFkb25seSByb290RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBVUkwgdGhlIHNpdGUgaXMgc2VydmVkIGZyb20sIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgICovXG4gIHJlYWRvbmx5IHNpdGVCYXNlVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcuc2l0ZU9yaWdpbn0uXG4gICAqL1xuICByZWFkb25seSBzaXRlT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcuc291cmNlRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnRpdGxlfS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQYWNrYWdlSnNvbkZpZWxkcyB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZGVmYXVsdHMgdG8gYSBzaXRlJ3Mgb3B0aW9ucyBhbmQgZGVyaXZlcyBldmVyeSBwYXRoIGFuZCBVUkwgZnJvbSB0aGVtLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBUaGUgc2l0ZSdzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgY29uZmlndXJhdGlvbi5cbiAqIEB0aHJvd3MgSWYgdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAgaGFzIG5vIGBuYW1lYCBvciBgdmVyc2lvbmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRG9jc1NpdGVDb25maWcoY29uZmlnOiBEb2NzU2l0ZUNvbmZpZyk6IFJlc29sdmVkRG9jc1NpdGVDb25maWcge1xuICBjb25zdCB7XG4gICAgZG9jc0RpcmVjdG9yeSA9ICdkb2NzJyxcbiAgICBleGNsdWRlZERpcmVjdG9yaWVzID0gW10sXG4gICAgZXh0ZXJuYWxUeXBlTGlua3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpLFxuICAgIGdlbmVyaWNUeXBlUGFyYW1ldGVycyA9IFtdLFxuICAgIGd1aWRlc0RpcmVjdG9yeSA9ICdndWlkZXMnLFxuICAgIGltcG9ydFN0YXRlbWVudCxcbiAgICBtZW1iZXJSb3V0ZVNlZ21lbnQsXG4gICAgb3duZXIgPSAnbW5hb3Vtb3YnLFxuICAgIHBhY2thZ2VTaXRlcyA9IERFRkFVTFRfUEFDS0FHRV9TSVRFUyxcbiAgICByZXBvLFxuICAgIHJlcG9Ib21lcGFnZSA9ICdvZmYnLFxuICAgIHJvb3REaXJlY3RvcnkgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIHNpdGVPcmlnaW4gPSAnaHR0cHM6Ly9tbmFvdW1vdi5kZXYnLFxuICAgIHNvdXJjZURpcmVjdG9yeSA9ICdzcmMnLFxuICAgIHRpdGxlXG4gIH0gPSBjb25maWc7XG5cbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKHJvb3REaXJlY3RvcnksICdwYWNrYWdlLmpzb24nKSwgJ3V0Zi04JykpIGFzIFBhY2thZ2VKc29uRmllbGRzO1xuICBpZiAocGFja2FnZUpzb24ubmFtZSA9PT0gdW5kZWZpbmVkIHx8IHBhY2thZ2VKc29uLnZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtqb2luKHJvb3REaXJlY3RvcnksICdwYWNrYWdlLmpzb24nKX0gaGFzIG5vIG5hbWUgb3Igbm8gdmVyc2lvbi5gKTtcbiAgfVxuXG4gIGNvbnN0IGFic29sdXRlRG9jc0RpcmVjdG9yeSA9IGpvaW4ocm9vdERpcmVjdG9yeSwgZG9jc0RpcmVjdG9yeSk7XG4gIGNvbnN0IGRvY3NTb3VyY2VEaXJlY3RvcnkgPSBqb2luKGFic29sdXRlRG9jc0RpcmVjdG9yeSwgJ3NyYycpO1xuICBjb25zdCBjb250ZW50RG9jc0RpcmVjdG9yeSA9IGpvaW4oZG9jc1NvdXJjZURpcmVjdG9yeSwgJ2NvbnRlbnQnLCAnZG9jcycpO1xuICBjb25zdCBwdWJsaWNEaXJlY3RvcnkgPSBqb2luKGFic29sdXRlRG9jc0RpcmVjdG9yeSwgJ3B1YmxpYycpO1xuICBjb25zdCBnaXRodWJVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7b3duZXJ9LyR7cmVwb31gO1xuXG4gIGNvbnN0IGJhc2VQYXRoID0gYC8ke3JlcG99YDtcbiAgcmV0dXJuIHtcbiAgICBhcGlEb2NTZXR0aW5nczoge1xuICAgICAgYmFzZVBhdGgsXG4gICAgICBleGNsdWRlZERpcmVjdG9yaWVzLFxuICAgICAgZXh0ZXJuYWxUeXBlTGlua3MsXG4gICAgICBnZW5lcmljVHlwZVBhcmFtZXRlcnMsXG4gICAgICBpbXBvcnRTdGF0ZW1lbnQsXG4gICAgICBtZW1iZXJSb3V0ZVNlZ21lbnQsXG4gICAgICBvdXRwdXREaXJlY3Rvcnk6IGpvaW4oY29udGVudERvY3NEaXJlY3RvcnksICdhcGknKSxcbiAgICAgIHBhY2thZ2VOYW1lOiBwYWNrYWdlSnNvbi5uYW1lLFxuICAgICAgcGFja2FnZVNpdGVzLFxuICAgICAgc2lkZWJhckZpbGU6IGpvaW4oZG9jc1NvdXJjZURpcmVjdG9yeSwgJ2dlbmVyYXRlZC1zaWRlYmFyLmpzb24nKVxuICAgIH0sXG4gICAgYmFzZVBhdGgsXG4gICAgY29udGVudERvY3NEaXJlY3RvcnksXG4gICAgZGlzdERpcmVjdG9yeTogam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdkaXN0JyksXG4gICAgZG9jc0RpcmVjdG9yeTogYWJzb2x1dGVEb2NzRGlyZWN0b3J5LFxuICAgIGRvY3NTb3VyY2VEaXJlY3RvcnksXG4gICAgZWRpdExpbmtCYXNlVXJsOiBgJHtnaXRodWJVcmx9L2VkaXQvbWFpbi9gLFxuICAgIGZhdmljb25QYXRoOiBqb2luKHB1YmxpY0RpcmVjdG9yeSwgJ2Zhdmljb24uc3ZnJyksXG4gICAgZ2l0aHViVXJsLFxuICAgIGd1aWRlc0RpcmVjdG9yeSxcbiAgICBvZ091dHB1dERpcmVjdG9yeTogam9pbihwdWJsaWNEaXJlY3RvcnksICdvZycpLFxuICAgIG93bmVyLFxuICAgIHBhY2thZ2VOYW1lOiBwYWNrYWdlSnNvbi5uYW1lLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBwYWNrYWdlSnNvbi52ZXJzaW9uLFxuICAgIHB1YmxpY0RpcmVjdG9yeSxcbiAgICByZXBvLFxuICAgIHJlcG9Ib21lcGFnZSxcbiAgICByb290RGlyZWN0b3J5LFxuICAgIHNpdGVCYXNlVXJsOiBgJHtzaXRlT3JpZ2lufS8ke3JlcG99L2AsXG4gICAgc2l0ZU9yaWdpbixcbiAgICBzb3VyY2VEaXJlY3Rvcnk6IGpvaW4ocm9vdERpcmVjdG9yeSwgc291cmNlRGlyZWN0b3J5KSxcbiAgICB0aXRsZVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxxQkFBNkI7QUFDN0IsdUJBQXFCO0FBU3JCLG1DQUFzQztBQWlQL0IsU0FBUyxzQkFBc0IsUUFBZ0Q7QUFDcEYsUUFBTTtBQUFBLElBQ0osZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCLENBQUM7QUFBQSxJQUN2QixvQkFBb0Isb0JBQUksSUFBb0I7QUFBQSxJQUM1Qyx3QkFBd0IsQ0FBQztBQUFBLElBQ3pCLGtCQUFrQjtBQUFBLElBQ2xCO0FBQUEsSUFDQTtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2Y7QUFBQSxJQUNBLGVBQWU7QUFBQSxJQUNmLGdCQUFnQixRQUFRLElBQUk7QUFBQSxJQUM1QixhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sY0FBYyxLQUFLLFVBQU0saUNBQWEsdUJBQUssZUFBZSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3pGLE1BQUksWUFBWSxTQUFTLFVBQWEsWUFBWSxZQUFZLFFBQVc7QUFDdkUsVUFBTSxJQUFJLE1BQU0sT0FBRyx1QkFBSyxlQUFlLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxFQUNyRjtBQUVBLFFBQU0sNEJBQXdCLHVCQUFLLGVBQWUsYUFBYTtBQUMvRCxRQUFNLDBCQUFzQix1QkFBSyx1QkFBdUIsS0FBSztBQUM3RCxRQUFNLDJCQUF1Qix1QkFBSyxxQkFBcUIsV0FBVyxNQUFNO0FBQ3hFLFFBQU0sc0JBQWtCLHVCQUFLLHVCQUF1QixRQUFRO0FBQzVELFFBQU0sWUFBWSxzQkFBc0IsS0FBSyxJQUFJLElBQUk7QUFFckQsUUFBTSxXQUFXLElBQUksSUFBSTtBQUN6QixTQUFPO0FBQUEsSUFDTCxnQkFBZ0I7QUFBQSxNQUNkO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLHFCQUFpQix1QkFBSyxzQkFBc0IsS0FBSztBQUFBLE1BQ2pELGFBQWEsWUFBWTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxpQkFBYSx1QkFBSyxxQkFBcUIsd0JBQXdCO0FBQUEsSUFDakU7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsbUJBQWUsdUJBQUssdUJBQXVCLE1BQU07QUFBQSxJQUNqRCxlQUFlO0FBQUEsSUFDZjtBQUFBLElBQ0EsaUJBQWlCLEdBQUcsU0FBUztBQUFBLElBQzdCLGlCQUFhLHVCQUFLLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFBQSxJQUNBO0FBQUEsSUFDQSx1QkFBbUIsdUJBQUssaUJBQWlCLElBQUk7QUFBQSxJQUM3QztBQUFBLElBQ0EsYUFBYSxZQUFZO0FBQUEsSUFDekIsZ0JBQWdCLFlBQVk7QUFBQSxJQUM1QjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBYSxHQUFHLFVBQVUsSUFBSSxJQUFJO0FBQUEsSUFDbEM7QUFBQSxJQUNBLHFCQUFpQix1QkFBSyxlQUFlLGVBQWU7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvZG9jcy1zaXRlLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIG9uZSBkZXNjcmlwdGlvbiBvZiBhIGRvY3VtZW50YXRpb24gc2l0ZSB0aGF0IGl0cyBBc3RybyBjb25maWcgYW5kIGl0cyBidWlsZCBjb21tYW5kcyBzaGFyZTogd2hpY2ggcmVwb3NpdG9yeVxuICogaXQgZG9jdW1lbnRzLCB3aGVyZSBpdHMgc291cmNlcyBhbmQgcGFnZXMgbGl2ZSwgYW5kIHdoaWNoIG90aGVyIHNpdGVzIGl0IGxpbmtzIHRvLlxuICovXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQXBpRG9jU2V0dGluZ3MsXG4gIEltcG9ydFN0YXRlbWVudFByb3ZpZGVyLFxuICBNZW1iZXJSb3V0ZVNlZ21lbnRQcm92aWRlclxufSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHR5cGUgeyBSZXBvSG9tZXBhZ2VNb2RlIH0gZnJvbSAnLi9yZXBvLWhvbWVwYWdlLnRzJztcblxuaW1wb3J0IHsgREVGQVVMVF9QQUNLQUdFX1NJVEVTIH0gZnJvbSAnLi9hcGktZG9jLXBhY2thZ2Utc2l0ZXMudHMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGRvY3VtZW50YXRpb24gc2l0ZS4gRXZlcnkgcGF0aCBpcyByZWxhdGl2ZSB0byB7QGxpbmsgRG9jc1NpdGVDb25maWcucm9vdERpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1NpdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBzaXRlOiBpdHMgYHNyY2AgKHBhZ2VzLCBgY29udGVudC5jb25maWcudHNgKSwgYHB1YmxpY2AgYW5kIGJ1aWxkIG91dHB1dCBgZGlzdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkb2NzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRm9sZGVyIG5hbWVzIHVuZGVyIHtAbGluayBzb3VyY2VEaXJlY3Rvcnl9IHdob3NlIHN1YnRyZWUgdGhlIEFQSSByZWZlcmVuY2Ugc2tpcHMsIGluIGFkZGl0aW9uIHRvIGBAdHlwZXNgLFxuICAgKiBgc3R5bGVzYCBhbmQgYHRlc3QtaGVscGVyc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlZERpcmVjdG9yaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFR5cGUgbmFtZXMgbWFwcGVkIHRvIHRoZSBVUkwgdGhlaXIgcmVmZXJlbmNlcyBsaW5rIHRvLCBmb3IgdHlwZXMgbm8gZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLiBUaGUgbGF5ZXJcbiAgICogZG9jdW1lbnRpbmcgYW4gZWNvc3lzdGVtJ3MgcGFja2FnZXMgZmlsbHMgaXQgd2l0aCB0aGF0IGVjb3N5c3RlbSdzIHJlZmVyZW5jZXMuXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbFR5cGVMaW5rcz86IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIEFQSSByZWZlcmVuY2UgbmV2ZXIgbGlua3MgYXMgdHlwZXMsIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbiBnZW5lcmljIHBhcmFtZXRlciBuYW1lcyBhbmQgZXZlcnlcbiAgICogdHlwZSBwYXJhbWV0ZXIgYSBkb2N1bWVudGVkIHR5cGUgZGVjbGFyZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBnZW5lcmljVHlwZVBhcmFtZXRlcnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB1bmRlciBgPGRvY3M+L3NyYy9jb250ZW50L2RvY3NgIHRoZSBndWlkZXMgc2lkZWJhciBncm91cCBpcyBnZW5lcmF0ZWQgZnJvbS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2d1aWRlcydcbiAgICovXG4gIHJlYWRvbmx5IGd1aWRlc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGRzIGVhY2ggZXhwb3J0J3MgaW1wb3J0IHN0YXRlbWVudCwgZm9yIGEgcGFja2FnZSB3aG9zZSBleHBvcnRzIGFyZSBub3QgaW1wb3J0ZWQgZnJvbVxuICAgKiBgPHBhY2thZ2U+Lzxtb2R1bGUgcGF0aD5gLCBlLmcuIG9uZSBwdWJsaXNoaW5nIGJhcnJlbCBlbnRyeSBwb2ludHMuIFJldHVybmluZyBgdW5kZWZpbmVkYCBzaG93cyBubyBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBzdGF0ZW1lbnQgaW1wb3J0aW5nIHRoZSBleHBvcnQgZnJvbSBgPHBhY2thZ2U+Lzxtb2R1bGUgcGF0aD5gXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRTdGF0ZW1lbnQ/OiBJbXBvcnRTdGF0ZW1lbnRQcm92aWRlcjtcblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBjYXNlLXByZXNlcnZlZCByb3V0ZSBzZWdtZW50IG9mIGEgbWVtYmVyJ3MgcGFnZSBmcm9tIGEgcHJvcGVydHkncyBuYW1lIG9yIGEgbWV0aG9kJ3Mgb3ZlcmxvYWQga2V5LFxuICAgKiBvdmVycmlkaW5nIHRoZSBnZW5lcmF0b3IncyBvd24gc2x1ZyB3aGVyZSBpdCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbmFtZSBhcyBhIFVSTCBzZWdtZW50LCBpdHMgdHJhaWxpbmcgdW5kZXJzY29yZXMga2VwdFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyUm91dGVTZWdtZW50PzogTWVtYmVyUm91dGVTZWdtZW50UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYWNjb3VudCB0aGUgcmVwb3NpdG9yeSBiZWxvbmdzIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbW5hb3Vtb3YnXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGFja2FnZSBuYW1lcyBtYXBwZWQgdG8gdGhlIHJvb3QgVVJMIG9mIHRoZWlyIGRvY3VtZW50YXRpb24gc2l0ZSwgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLiBBIHR5cGUgZGVjbGFyZWQgaW4gb25lXG4gICAqIG9mIHRoZW0gbGlua3MgdG8gaXRzIHBhZ2UgdGhlcmUuIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UgaXRzZWxmIGlzIG5ldmVyIGxpbmtlZCB0aGlzIHdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9QQUNLQUdFX1NJVEVTXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlU2l0ZXM/OiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlJ3Mgb25lIHB1YmxpYyBlbnRyeSBwb2ludCwgZS5nLiBgc3JjL2luZGV4LnRzYCwgZm9yIGEgcGFja2FnZSB0aGF0IHB1Ymxpc2hlcyBpdHMgQVBJIGZyb20gYSBiYXJyZWxcbiAgICogcmF0aGVyIHRoYW4gb25lIGltcG9ydCBzdWJwYXRoIHBlciBtb2R1bGUuIFNldCwgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRzIG9ubHkgdGhlIGV4cG9ydHMgdGhhdCBiYXJyZWxcbiAgICogcmUtZXhwb3J0cyAoYGV4cG9ydCAuLi4gZnJvbWApLCB7QGxpbmsgZXhjbHVkZWREaXJlY3Rvcmllc30gZG9lcyBub3QgYXBwbHksIGFuZCBldmVyeSBpbXBvcnQgc3RhdGVtZW50IGltcG9ydHNcbiAgICogZnJvbSB0aGUgcGFja2FnZSByb290LlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQ6IGV2ZXJ5IG1vZHVsZSB1bmRlciB7QGxpbmsgc291cmNlRGlyZWN0b3J5fSBpcyBkb2N1bWVudGVkIGFzIGl0cyBvd24gaW1wb3J0IHN1YnBhdGhcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FwaUVudHJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSdzIG5hbWUuIFRoZSBzaXRlIGlzIHNlcnZlZCB1bmRlciBpdDogYDxzaXRlT3JpZ2luPi88cmVwbz4vYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCBgYnVpbGREb2NzU2l0ZWAgZG9lcywgYWZ0ZXIgdGhlIGJ1aWxkLCBhYm91dCB0aGUgcmVwb3NpdG9yeSdzIEdpdEh1YiBob21lcGFnZTogY29tcGFyZSBpdCB3aXRoIHRoZSBzaXRlJ3NcbiAgICogVVJMIGFuZCByZXBvcnQgYSBtaXNtYXRjaCAoYGNoZWNrYCksIG9yIGFsc28gc2V0IGl0IChgc2V0YCkuIEl0IHJlYWRzIGFuZCB3cml0ZXMgdGhyb3VnaCB0aGUgYGdoYCBDTEksIGFuZFxuICAgKiBvbmx5IGV2ZXIgd2FybnMuIEEgd29ya2Zsb3cncyBgR0lUSFVCX1RPS0VOYCBjYW4gcmVhZCB0aGUgaG9tZXBhZ2UgYnV0IG5vdCBzZXQgaXQsIHNvIGluIENJIGBzZXRgIHJlcG9ydHMgdG9vLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnb2ZmJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwb0hvbWVwYWdlPzogUmVwb0hvbWVwYWdlTW9kZTtcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgcm9vdCwgaG9sZGluZyBgcGFja2FnZS5qc29uYCwgYHRzY29uZmlnLmpzb25gIGFuZCBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgcHJvY2Vzcy5jd2QoKVxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiBldmVyeSBzaXRlIG9mIHRoZSBhY2NvdW50IGlzIHNlcnZlZCBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaHR0cHM6Ly9tbmFvdW1vdi5kZXYnXG4gICAqL1xuICByZWFkb25seSBzaXRlT3JpZ2luPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIG1vZHVsZXMgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnc3JjJ1xuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHRpdGxlLCBzaG93biBpbiBpdHMgaGVhZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiB7QGxpbmsgRG9jc1NpdGVDb25maWd9IHdpdGggZXZlcnkgZGVmYXVsdCBhcHBsaWVkLCBldmVyeSBwYXRoIGFic29sdXRlLCBhbmQgdGhlIHZhbHVlcyBkZXJpdmVkIGZyb20gdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZERvY3NTaXRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IncyBzZXR0aW5ncyBmb3IgdGhlIHNpdGUuXG4gICAqL1xuICByZWFkb25seSBhcGlEb2NTZXR0aW5nczogQXBpRG9jU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIHBhdGgsIGUuZy4gYC90eXBlc2NyaXB0LWxpYmAuXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRhdGlvbiBjb250ZW50IHJvb3QsIGA8ZG9jcz4vc3JjL2NvbnRlbnQvZG9jc2AuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50RG9jc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgb3V0cHV0IGZvbGRlciwgYDxkb2NzPi9kaXN0YC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3REaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l0ZSdzIHNvdXJjZSBmb2xkZXIsIGA8ZG9jcz4vc3JjYC5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3NTb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBhIHBhZ2UncyBlZGl0IGxpbmsgc3RhcnRzIHdpdGg6IHRoZSByZXBvc2l0b3J5J3MgYGVkaXQvbWFpbi9gIHRyZWUuXG4gICAqL1xuICByZWFkb25seSBlZGl0TGlua0Jhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBTVkcgbG9nbywgYDxkb2NzPi9wdWJsaWMvZmF2aWNvbi5zdmdgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmF2aWNvblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkncyBHaXRIdWIgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgRG9jc1NpdGVDb25maWcuZ3VpZGVzRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGd1aWRlc0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHRoZSBPcGVuIEdyYXBoIGNhcmRzIGFyZSB3cml0dGVuIHRvLCBgPGRvY3M+L3B1YmxpYy9vZ2AuXG4gICAqL1xuICByZWFkb25seSBvZ091dHB1dERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLm93bmVyfS5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudGVkIHBhY2thZ2UncyBuYW1lLCByZWFkIGZyb20gdGhlIHJvb3QgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9jdW1lbnRlZCBwYWNrYWdlJ3MgdmVyc2lvbiwgcmVhZCBmcm9tIHRoZSByb290IGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpdGUncyBzdGF0aWMgZm9sZGVyLCBgPGRvY3M+L3B1YmxpY2AuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvfS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy5yZXBvSG9tZXBhZ2V9LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb0hvbWVwYWdlOiBSZXBvSG9tZXBhZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnJvb3REaXJlY3Rvcnl9LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgVVJMIHRoZSBzaXRlIGlzIHNlcnZlZCBmcm9tLCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXG4gICAqL1xuICByZWFkb25seSBzaXRlQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnNpdGVPcmlnaW59LlxuICAgKi9cbiAgcmVhZG9ubHkgc2l0ZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWUge0BsaW5rIERvY3NTaXRlQ29uZmlnLnNvdXJjZURpcmVjdG9yeX0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogU2VlIHtAbGluayBEb2NzU2l0ZUNvbmZpZy50aXRsZX0uXG4gICAqL1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFja2FnZUpzb25GaWVsZHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGRlZmF1bHRzIHRvIGEgc2l0ZSdzIG9wdGlvbnMgYW5kIGRlcml2ZXMgZXZlcnkgcGF0aCBhbmQgVVJMIGZyb20gdGhlbS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIHNpdGUncyBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gKiBAdGhyb3dzIElmIHRoZSByb290IGBwYWNrYWdlLmpzb25gIGhhcyBubyBgbmFtZWAgb3IgYHZlcnNpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURvY3NTaXRlQ29uZmlnKGNvbmZpZzogRG9jc1NpdGVDb25maWcpOiBSZXNvbHZlZERvY3NTaXRlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGRvY3NEaXJlY3RvcnkgPSAnZG9jcycsXG4gICAgZXhjbHVkZWREaXJlY3RvcmllcyA9IFtdLFxuICAgIGV4dGVybmFsVHlwZUxpbmtzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICBnZW5lcmljVHlwZVBhcmFtZXRlcnMgPSBbXSxcbiAgICBndWlkZXNEaXJlY3RvcnkgPSAnZ3VpZGVzJyxcbiAgICBpbXBvcnRTdGF0ZW1lbnQsXG4gICAgbWVtYmVyUm91dGVTZWdtZW50LFxuICAgIG93bmVyID0gJ21uYW91bW92JyxcbiAgICBwYWNrYWdlU2l0ZXMgPSBERUZBVUxUX1BBQ0tBR0VfU0lURVMsXG4gICAgcHVibGljQXBpRW50cnksXG4gICAgcmVwbyxcbiAgICByZXBvSG9tZXBhZ2UgPSAnb2ZmJyxcbiAgICByb290RGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzaXRlT3JpZ2luID0gJ2h0dHBzOi8vbW5hb3Vtb3YuZGV2JyxcbiAgICBzb3VyY2VEaXJlY3RvcnkgPSAnc3JjJyxcbiAgICB0aXRsZVxuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpKSBhcyBQYWNrYWdlSnNvbkZpZWxkcztcbiAgaWYgKHBhY2thZ2VKc29uLm5hbWUgPT09IHVuZGVmaW5lZCB8fCBwYWNrYWdlSnNvbi52ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7am9pbihyb290RGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyl9IGhhcyBubyBuYW1lIG9yIG5vIHZlcnNpb24uYCk7XG4gIH1cblxuICBjb25zdCBhYnNvbHV0ZURvY3NEaXJlY3RvcnkgPSBqb2luKHJvb3REaXJlY3RvcnksIGRvY3NEaXJlY3RvcnkpO1xuICBjb25zdCBkb2NzU291cmNlRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdzcmMnKTtcbiAgY29uc3QgY29udGVudERvY3NEaXJlY3RvcnkgPSBqb2luKGRvY3NTb3VyY2VEaXJlY3RvcnksICdjb250ZW50JywgJ2RvY3MnKTtcbiAgY29uc3QgcHVibGljRGlyZWN0b3J5ID0gam9pbihhYnNvbHV0ZURvY3NEaXJlY3RvcnksICdwdWJsaWMnKTtcbiAgY29uc3QgZ2l0aHViVXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke293bmVyfS8ke3JlcG99YDtcblxuICBjb25zdCBiYXNlUGF0aCA9IGAvJHtyZXBvfWA7XG4gIHJldHVybiB7XG4gICAgYXBpRG9jU2V0dGluZ3M6IHtcbiAgICAgIGJhc2VQYXRoLFxuICAgICAgZXhjbHVkZWREaXJlY3RvcmllcyxcbiAgICAgIGV4dGVybmFsVHlwZUxpbmtzLFxuICAgICAgZ2VuZXJpY1R5cGVQYXJhbWV0ZXJzLFxuICAgICAgaW1wb3J0U3RhdGVtZW50LFxuICAgICAgbWVtYmVyUm91dGVTZWdtZW50LFxuICAgICAgb3V0cHV0RGlyZWN0b3J5OiBqb2luKGNvbnRlbnREb2NzRGlyZWN0b3J5LCAnYXBpJyksXG4gICAgICBwYWNrYWdlTmFtZTogcGFja2FnZUpzb24ubmFtZSxcbiAgICAgIHBhY2thZ2VTaXRlcyxcbiAgICAgIHB1YmxpY0FwaUVudHJ5OiBwdWJsaWNBcGlFbnRyeSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogam9pbihyb290RGlyZWN0b3J5LCBwdWJsaWNBcGlFbnRyeSksXG4gICAgICBzaWRlYmFyRmlsZTogam9pbihkb2NzU291cmNlRGlyZWN0b3J5LCAnZ2VuZXJhdGVkLXNpZGViYXIuanNvbicpXG4gICAgfSxcbiAgICBiYXNlUGF0aCxcbiAgICBjb250ZW50RG9jc0RpcmVjdG9yeSxcbiAgICBkaXN0RGlyZWN0b3J5OiBqb2luKGFic29sdXRlRG9jc0RpcmVjdG9yeSwgJ2Rpc3QnKSxcbiAgICBkb2NzRGlyZWN0b3J5OiBhYnNvbHV0ZURvY3NEaXJlY3RvcnksXG4gICAgZG9jc1NvdXJjZURpcmVjdG9yeSxcbiAgICBlZGl0TGlua0Jhc2VVcmw6IGAke2dpdGh1YlVybH0vZWRpdC9tYWluL2AsXG4gICAgZmF2aWNvblBhdGg6IGpvaW4ocHVibGljRGlyZWN0b3J5LCAnZmF2aWNvbi5zdmcnKSxcbiAgICBnaXRodWJVcmwsXG4gICAgZ3VpZGVzRGlyZWN0b3J5LFxuICAgIG9nT3V0cHV0RGlyZWN0b3J5OiBqb2luKHB1YmxpY0RpcmVjdG9yeSwgJ29nJyksXG4gICAgb3duZXIsXG4gICAgcGFja2FnZU5hbWU6IHBhY2thZ2VKc29uLm5hbWUsXG4gICAgcGFja2FnZVZlcnNpb246IHBhY2thZ2VKc29uLnZlcnNpb24sXG4gICAgcHVibGljRGlyZWN0b3J5LFxuICAgIHJlcG8sXG4gICAgcmVwb0hvbWVwYWdlLFxuICAgIHJvb3REaXJlY3RvcnksXG4gICAgc2l0ZUJhc2VVcmw6IGAke3NpdGVPcmlnaW59LyR7cmVwb30vYCxcbiAgICBzaXRlT3JpZ2luLFxuICAgIHNvdXJjZURpcmVjdG9yeTogam9pbihyb290RGlyZWN0b3J5LCBzb3VyY2VEaXJlY3RvcnkpLFxuICAgIHRpdGxlXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLHFCQUE2QjtBQUM3Qix1QkFBcUI7QUFTckIsbUNBQXNDO0FBMlAvQixTQUFTLHNCQUFzQixRQUFnRDtBQUNwRixRQUFNO0FBQUEsSUFDSixnQkFBZ0I7QUFBQSxJQUNoQixzQkFBc0IsQ0FBQztBQUFBLElBQ3ZCLG9CQUFvQixvQkFBSSxJQUFvQjtBQUFBLElBQzVDLHdCQUF3QixDQUFDO0FBQUEsSUFDekIsa0JBQWtCO0FBQUEsSUFDbEI7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUixlQUFlO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWU7QUFBQSxJQUNmLGdCQUFnQixRQUFRLElBQUk7QUFBQSxJQUM1QixhQUFhO0FBQUEsSUFDYixrQkFBa0I7QUFBQSxJQUNsQjtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sY0FBYyxLQUFLLFVBQU0saUNBQWEsdUJBQUssZUFBZSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3pGLE1BQUksWUFBWSxTQUFTLFVBQWEsWUFBWSxZQUFZLFFBQVc7QUFDdkUsVUFBTSxJQUFJLE1BQU0sT0FBRyx1QkFBSyxlQUFlLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxFQUNyRjtBQUVBLFFBQU0sNEJBQXdCLHVCQUFLLGVBQWUsYUFBYTtBQUMvRCxRQUFNLDBCQUFzQix1QkFBSyx1QkFBdUIsS0FBSztBQUM3RCxRQUFNLDJCQUF1Qix1QkFBSyxxQkFBcUIsV0FBVyxNQUFNO0FBQ3hFLFFBQU0sc0JBQWtCLHVCQUFLLHVCQUF1QixRQUFRO0FBQzVELFFBQU0sWUFBWSxzQkFBc0IsS0FBSyxJQUFJLElBQUk7QUFFckQsUUFBTSxXQUFXLElBQUksSUFBSTtBQUN6QixTQUFPO0FBQUEsSUFDTCxnQkFBZ0I7QUFBQSxNQUNkO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLHFCQUFpQix1QkFBSyxzQkFBc0IsS0FBSztBQUFBLE1BQ2pELGFBQWEsWUFBWTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxnQkFBZ0IsbUJBQW1CLFNBQVksYUFBWSx1QkFBSyxlQUFlLGNBQWM7QUFBQSxNQUM3RixpQkFBYSx1QkFBSyxxQkFBcUIsd0JBQXdCO0FBQUEsSUFDakU7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsbUJBQWUsdUJBQUssdUJBQXVCLE1BQU07QUFBQSxJQUNqRCxlQUFlO0FBQUEsSUFDZjtBQUFBLElBQ0EsaUJBQWlCLEdBQUcsU0FBUztBQUFBLElBQzdCLGlCQUFhLHVCQUFLLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFBQSxJQUNBO0FBQUEsSUFDQSx1QkFBbUIsdUJBQUssaUJBQWlCLElBQUk7QUFBQSxJQUM3QztBQUFBLElBQ0EsYUFBYSxZQUFZO0FBQUEsSUFDekIsZ0JBQWdCLFlBQVk7QUFBQSxJQUM1QjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBYSxHQUFHLFVBQVUsSUFBSSxJQUFJO0FBQUEsSUFDbEM7QUFBQSxJQUNBLHFCQUFpQix1QkFBSyxlQUFlLGVBQWU7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119
@@ -69,6 +69,15 @@ export interface DocsSiteConfig {
69
69
  * @default DEFAULT_PACKAGE_SITES
70
70
  */
71
71
  readonly packageSites?: ReadonlyMap<string, string>;
72
+ /**
73
+ * The package's one public entry point, e.g. `src/index.ts`, for a package that publishes its API from a barrel
74
+ * rather than one import subpath per module. Set, the API reference documents only the exports that barrel
75
+ * re-exports (`export ... from`), {@link excludedDirectories} does not apply, and every import statement imports
76
+ * from the package root.
77
+ *
78
+ * @default undefined: every module under {@link sourceDirectory} is documented as its own import subpath
79
+ */
80
+ readonly publicApiEntry?: string;
72
81
  /**
73
82
  * The repository's name. The site is served under it: `<siteOrigin>/<repo>/`.
74
83
  */