expand-my-type 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,8 +18,7 @@ expanded form as a string. That can be useful for code-generation, testing, and
18
18
  debugging complex type errors.
19
19
 
20
20
  Under the hood, it uses the [TypeScript Compiler API][ts-compiler-api] to expand
21
- the type expression and optionally formats the output using
22
- [Prettier][prettier].
21
+ the type expression and optionally formats the output using Biome.
23
22
 
24
23
  ## CLI
25
24
 
@@ -137,6 +136,30 @@ the following ways:
137
136
  /* { a: string; b: number } */
138
137
  ```
139
138
 
139
+ Advanced users can pass Biome configuration directly:
140
+
141
+ ```typescript
142
+ import { expandMyType } from "expand-my-type";
143
+
144
+ const expandedType = await expandMyType({
145
+ typeExpression: "SomeType",
146
+ sourceFileName: "./example.ts",
147
+ prettify: {
148
+ biomeOptions: {
149
+ formatter: {
150
+ indentStyle: "space",
151
+ lineWidth: 120,
152
+ },
153
+ javascript: {
154
+ formatter: {
155
+ semicolons: "always",
156
+ },
157
+ },
158
+ },
159
+ },
160
+ });
161
+ ```
162
+
140
163
  For local development in this repository, use Bun:
141
164
 
142
165
  ```sh
@@ -178,5 +201,4 @@ This approach comes with some limitations. Most notably, expanding a type that
178
201
  leads to an infinite recursion might throw an error (when prettify option is
179
202
  enabled), return a truncated output, or return any.
180
203
 
181
- [prettier]: https://prettier.io
182
204
  [ts-compiler-api]: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API
@@ -1,6 +1,6 @@
1
1
  import ts from "typescript";
2
2
  type ExtractFunctions<T, K extends keyof T = keyof T> = {
3
- [P in K]: T[P] extends (...args: any[]) => any ? T[P] : never;
3
+ [P in K]: Extract<T[P], (...args: never[]) => unknown>;
4
4
  };
5
5
  export type CompilerHostFunctionOverrides = Partial<ExtractFunctions<ts.CompilerHost>>;
6
6
  /**
package/dist/cli.js CHANGED
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ // src/index.ts
4
+ import path from "node:path";
5
+ import ts2 from "typescript";
6
+
3
7
  // src/augmenter-compiler-host.ts
4
8
  import ts from "typescript";
5
9
  var createAugmenterCompilerHost = (sourceFileName, codeToAdd, compilerOptions, compilerHostFunctionOverrides) => {
@@ -27,8 +31,23 @@ ${contents}`;
27
31
  };
28
32
 
29
33
  // src/code-generator.ts
30
- import { format } from "prettier";
34
+ import { Biome } from "@biomejs/js-api/nodejs";
31
35
  var identifierPrefix = "__EXPAND_MY_TYPE__";
36
+ var virtualFormatFileName = "expand-my-type.ts";
37
+ var biome = new Biome;
38
+ var { projectKey } = biome.openProject();
39
+ var defaultBiomeConfiguration = {
40
+ formatter: {
41
+ enabled: true,
42
+ indentStyle: "space"
43
+ },
44
+ javascript: {
45
+ formatter: {
46
+ quoteStyle: "double",
47
+ semicolons: "asNeeded"
48
+ }
49
+ }
50
+ };
32
51
  var createExpandCodeBlock = (typeExpression) => {
33
52
  return `type ${identifierPrefix}Result = ${identifierPrefix}Expand<${identifierPrefix}Expression>;
34
53
  type ${identifierPrefix}Expression = ${typeExpression};
@@ -45,18 +64,40 @@ var createExpandCodeBlock = (typeExpression) => {
45
64
  type ${identifierPrefix}AppendUnderscore<T extends string> = \`\${T}_\` extends string ? \`\${T}_\` : never;
46
65
  type ${identifierPrefix}RemoveUnderscore<T extends string> = T extends \`\${infer U}_\` ? U : never;`;
47
66
  };
48
- var formatTypeExpression = async (code, prettierOptions) => {
49
- return (await format(`type ${identifierPrefix} = ${code}`, prettierOptions ?? {
50
- parser: "typescript",
51
- semi: false
52
- })).trim().substring(`type ${identifierPrefix} = `.length);
67
+ var formatTypeExpression = async (code, biomeConfiguration) => {
68
+ const input = `type ${identifierPrefix} = ${code}`;
69
+ const javascriptFormatter = {
70
+ ...defaultBiomeConfiguration.javascript?.formatter,
71
+ ...biomeConfiguration?.javascript?.formatter
72
+ };
73
+ biome.applyConfiguration(projectKey, {
74
+ ...defaultBiomeConfiguration,
75
+ ...biomeConfiguration,
76
+ formatter: {
77
+ ...defaultBiomeConfiguration.formatter,
78
+ ...biomeConfiguration?.formatter
79
+ },
80
+ javascript: {
81
+ ...defaultBiomeConfiguration.javascript,
82
+ ...biomeConfiguration?.javascript,
83
+ formatter: javascriptFormatter
84
+ }
85
+ });
86
+ const result = biome.formatContent(projectKey, input, {
87
+ filePath: virtualFormatFileName
88
+ });
89
+ if (result.diagnostics.length > 0) {
90
+ throw new Error(biome.printDiagnostics(result.diagnostics, {
91
+ filePath: virtualFormatFileName,
92
+ fileSource: input
93
+ }));
94
+ }
95
+ return result.content.trim().substring(`type ${identifierPrefix} = `.length);
53
96
  };
54
97
 
55
98
  // src/index.ts
56
- import path from "node:path";
57
- import ts2 from "typescript";
58
99
  var findResultIdentifierNode = (node) => {
59
- if (node.getChildCount() == 0) {
100
+ if (node.getChildCount() === 0) {
60
101
  if (!ts2.isIdentifier(node)) {
61
102
  return;
62
103
  }
@@ -109,10 +150,10 @@ async function expandMyType(options) {
109
150
  }
110
151
  const typeChecker = program.getTypeChecker();
111
152
  const expandedTypeString = typeChecker.typeToString(typeChecker.getTypeAtLocation(resultIdentifierNode), undefined, ts2.TypeFormatFlags.NodeBuilderFlagsMask);
112
- if (options.prettify && options.prettify.enabled === false) {
153
+ if (options.prettify?.enabled === false) {
113
154
  return expandedTypeString;
114
155
  }
115
- return formatTypeExpression(expandedTypeString, options.prettify?.options);
156
+ return formatTypeExpression(expandedTypeString, options.prettify?.biomeOptions);
116
157
  }
117
158
 
118
159
  // src/cli.ts
@@ -186,16 +227,17 @@ var usagePrompt = [
186
227
  " -c, --tsconfig <file>\t\tUse the specified tsconfig.json file"
187
228
  ].join(`
188
229
  `);
189
- if (positionals.length !== 2) {
190
- console.error(usagePrompt);
191
- process.exit(1);
192
- }
193
230
  if (values.help) {
194
231
  console.error(usagePrompt);
195
232
  process.exit(0);
196
233
  }
234
+ if (positionals.length !== 2) {
235
+ console.error(usagePrompt);
236
+ process.exit(1);
237
+ }
197
238
  var [sourceFileName, typeExpression] = positionals;
198
- var { prettify, tsconfig: tsConfigFileName } = values;
239
+ var prettify = values.prettify ?? true;
240
+ var tsConfigFileName = values.tsconfig;
199
241
  var tsParsedCommandLine;
200
242
  if (tsConfigFileName) {
201
243
  const configFile = ts3.readConfigFile(tsConfigFileName, ts3.sys.readFile);
@@ -212,5 +254,5 @@ var result = await expandMyType({
212
254
  });
213
255
  console.log(result);
214
256
 
215
- //# debugId=CDA842588C4AEC4564756E2164756E21
216
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2F1Z21lbnRlci1jb21waWxlci1ob3N0LnRzIiwgIi4uL3NyYy9jb2RlLWdlbmVyYXRvci50cyIsICIuLi9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxudHlwZSBFeHRyYWN0RnVuY3Rpb25zPFQsIEsgZXh0ZW5kcyBrZXlvZiBUID0ga2V5b2YgVD4gPSB7XG4gIFtQIGluIEtdOiBUW1BdIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgPyBUW1BdIDogbmV2ZXI7XG59O1xuZXhwb3J0IHR5cGUgQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgPSBQYXJ0aWFsPFxuICBFeHRyYWN0RnVuY3Rpb25zPHRzLkNvbXBpbGVySG9zdD5cbj47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgYXVnbWVudHMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSBmb3IgZXhwYW5kaW5nIGEgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VGaWxlTmFtZSBOYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBhdWdtZW50LlxuICogQHBhcmFtIGNvZGVUb0FkZCBUeXBlIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gY29tcGlsZXJPcHRpb25zIFR5cGVTY3JpcHQgY29tcGlsZXIgb3B0aW9ucy5cbiAqIEBwYXJhbSBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyBBIHJlY29yZCBvZiBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgaW4gdGhlIGNvbXBpbGVyIGhvc3QuIFVzZWZ1bCBmb3IgbW9ja2luZy5cbiAqIEByZXR1cm5zIEEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCByZXR1cm5zIGFuIGF1Z21lbnRlZCBzb3VyY2UgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQXVnbWVudGVyQ29tcGlsZXJIb3N0ID0gKFxuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nLFxuICBjb2RlVG9BZGQ6IHN0cmluZyxcbiAgY29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zLFxuICBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcz86IENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuKSA9PiB7XG4gIGNvbnN0IGN1c3RvbUNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMgPz8ge30sIHRydWUpO1xuICBjb25zdCBvdmVycmlkZXMgPSBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyA/PyB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvdmVycmlkZXMpIGFzIEFycmF5PFxuICAgIGtleW9mIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzXG4gID4pIHtcbiAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlc1trZXldO1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAoY3VzdG9tQ29tcGlsZXJIb3N0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPVxuICAgICAgICBvdmVycmlkZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbFJlYWRGaWxlID0gY3VzdG9tQ29tcGlsZXJIb3N0LnJlYWRGaWxlO1xuXG4gIGN1c3RvbUNvbXBpbGVySG9zdC5yZWFkRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gb3JpZ2luYWxSZWFkRmlsZShmaWxlTmFtZSk7XG5cbiAgICBpZiAoY29udGVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH1cblxuICAgIGlmIChmaWxlTmFtZSAhPT0gc291cmNlRmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiBjb250ZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y29kZVRvQWRkfVxcbiR7Y29udGVudHN9YDtcbiAgfTtcblxuICByZXR1cm4gY3VzdG9tQ29tcGlsZXJIb3N0O1xufTtcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBPcHRpb25zIGFzIFByZXR0aWVyT3B0aW9ucyB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInByZXR0aWVyXCI7XG5cbmNvbnN0IGlkZW50aWZpZXJQcmVmaXggPSBcIl9fRVhQQU5EX01ZX1RZUEVfX1wiO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRXhwYW5kQ29kZUJsb2NrID0gKHR5cGVFeHByZXNzaW9uOiBzdHJpbmcpID0+IHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvbWFpbi90ZXN0cy9jYXNlcy9jb21waWxlci9jb21wdXRlZFR5cGVzS2V5b2ZOb0luZGV4U2lnbmF0dXJlVHlwZS50c1xuICByZXR1cm4gYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fVJlc3VsdCA9ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8JHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24+O1xuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24gPSAke3R5cGVFeHByZXNzaW9ufTtcblxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUPiA9IFxuICAgICAgICBUIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyAoLi4uYXJnczogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxBPikgPT4gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxSPlxuICAgICAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPiA/IFByb21pc2U8JHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFR5cGVBcmd1bWVudDxVPj5cbiAgICAgIDogeyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyA/ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRTdHJpbmc8VFtLXT4gOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFRbS10+OyB9ICYge307XG5cbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRUeXBlQXJndW1lbnQ8VD4gPSBbVCAmIHt9XSBleHRlbmRzIFtuZXZlcl0gPyBUIDogVCAmIHt9IGV4dGVuZHMgdm9pZCA/IFQgOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFQgJiB7fT47XG5cbiAgICAvLyBGb3JjZXMgYSB1bmlvbiBvZiBzdHJpbmcgbGl0ZXJhbCB0eXBlcyB0byBiZSBleHBhbmRlZFxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFN0cmluZzxUIGV4dGVuZHMgc3RyaW5nPiA9ICR7aWRlbnRpZmllclByZWZpeH1SZW1vdmVVbmRlcnNjb3JlPCR7aWRlbnRpZmllclByZWZpeH1BcHBlbmRVbmRlcnNjb3JlPFQ+PjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1BcHBlbmRVbmRlcnNjb3JlPFQgZXh0ZW5kcyBzdHJpbmc+ID0gXFxgXFwke1R9X1xcYCBleHRlbmRzIHN0cmluZyA/IFxcYFxcJHtUfV9cXGAgOiBuZXZlcjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1SZW1vdmVVbmRlcnNjb3JlPFQgZXh0ZW5kcyBzdHJpbmc+ID0gVCBleHRlbmRzIFxcYFxcJHtpbmZlciBVfV9cXGAgPyBVIDogbmV2ZXI7YDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUeXBlRXhwcmVzc2lvbiA9IGFzeW5jIChcbiAgY29kZTogc3RyaW5nLFxuICBwcmV0dGllck9wdGlvbnM/OiBQcmV0dGllck9wdGlvbnMsXG4pID0+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBmb3JtYXQoXG4gICAgICBgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9ID0gJHtjb2RlfWAsXG4gICAgICBwcmV0dGllck9wdGlvbnMgPz8ge1xuICAgICAgICBwYXJzZXI6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICBzZW1pOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKVxuICApXG4gICAgLnRyaW0oKVxuICAgIC5zdWJzdHJpbmcoYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fSA9IGAubGVuZ3RoKTtcbn07XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUF1Z21lbnRlckNvbXBpbGVySG9zdCB9IGZyb20gXCIuL2F1Z21lbnRlci1jb21waWxlci1ob3N0LmpzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzIH0gZnJvbSBcIi4vYXVnbWVudGVyLWNvbXBpbGVyLWhvc3QuanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUV4cGFuZENvZGVCbG9jayxcbiAgZm9ybWF0VHlwZUV4cHJlc3Npb24sXG59IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yLmpzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbnMgYXMgUHJldHRpZXJPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBGaW5kcyB0aGUgcmVzdWx0IHR5cGUgaWRlbnRpZmllciBub2RlLlxuICpcbiAqIEBwYXJhbSBub2RlIE5vZGUgaW4gd2hpY2ggdHlwZSB0eXBlIHNob3VsZCBiZSBzZWFyY2hlZC5cbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgdHlwZSBpZGVudGlmaWVyIG5vZGUuXG4gKi9cbmNvbnN0IGZpbmRSZXN1bHRJZGVudGlmaWVyTm9kZSA9IChub2RlOiB0cy5Ob2RlKTogdHMuTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChub2RlLmdldENoaWxkQ291bnQoKSA9PSAwKSB7XG4gICAgaWYgKCF0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gU2luY2Ugd2UgcHV0IHRoZSBfXzxJREVOVElGSUVSPl9fIHR5cGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBmaWxlLCB3ZSBjYW4gcmV0dXJuIHRoZSBmaXJzdCBpZGVudGlmaWVyIHdlIGZpbmQuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGZpbmRSZXN1bHRJZGVudGlmaWVyTm9kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBleHByZXNzaW9uIHRvIGV4cGFuZC5cbiAgICogQGV4YW1wbGUgXCJSZXR1cm5UeXBlPHR5cGVvZiBteUZ1bmN0aW9uPlwiXG4gICAqL1xuICB0eXBlRXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gICAqL1xuICB0c0NvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogUHJldHRpZXIgb3B0aW9ucy5cbiAgICovXG4gIHByZXR0aWZ5Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldHRpZnkgdGhlIG91dHB1dC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUHJldHRpZXIgb3B0aW9ucy4gRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgcGFyc2VyIHRvIFwidHlwZXNjcmlwdFwiLlxuICAgICAqIEBkZWZhdWx0IHsgcGFyc2VyOiBcInR5cGVzY3JpcHRcIiwgc2VtaTogZmFsc2UgfVxuICAgICAqL1xuICAgIG9wdGlvbnM/OiBQcmV0dGllck9wdGlvbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcmVjb3JkIG9mIGZ1bmN0aW9ucyB0byBvdmVycmlkZSBpbiB0aGUgY29tcGlsZXIgaG9zdC4gVXNlZnVsIGZvciBtb2NraW5nXG4gICAqL1xuICBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcz86IENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnMgPSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgJiB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBldmFsdWF0ZSB0aGUgdHlwZSBleHByZXNzaW9uIGluLlxuICAgKi9cbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlRnJvbVNvdXJjZVRleHRPcHRpb25zID0gRXhwYW5kVHlwZU9wdGlvbnNCYXNlICYge1xuICAvKipcbiAgICogVHlwZVNjcmlwdCBzb3VyY2UgdGV4dCB0byBldmFsdWF0ZSB0aGUgdHlwZSBleHByZXNzaW9uIGluLlxuICAgKi9cbiAgc291cmNlVGV4dDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZE15VHlwZU9wdGlvbnMgPVxuICB8IEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnNcbiAgfCBFeHBhbmRUeXBlRnJvbVNvdXJjZVRleHRPcHRpb25zO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKFxuICBvcHRpb25zOiBFeHBhbmRUeXBlRnJvbVNvdXJjZVRleHRPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShcbiAgb3B0aW9uczogRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPjtcblxuLyoqXG4gKiBFeHBhbmRzIGEgVHlwZVNjcmlwdCB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBleHBhbmRlZCB0eXBlIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUob3B0aW9uczogRXhwYW5kTXlUeXBlT3B0aW9ucykge1xuICBpZiAob3B0aW9ucy50eXBlRXhwcmVzc2lvbi50cmltKCkgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gXCJuZXZlclwiO1xuICB9XG5cbiAgaWYgKFwic291cmNlVGV4dFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkdW1teUZpbGVOYW1lID0gXCJleHBhbmQtbXktdHlwZS1kdW1teS50c1wiO1xuXG4gICAgcmV0dXJuIGV4cGFuZE15VHlwZSh7XG4gICAgICBzb3VyY2VGaWxlTmFtZTogZHVtbXlGaWxlTmFtZSxcbiAgICAgIHR5cGVFeHByZXNzaW9uOiBvcHRpb25zLnR5cGVFeHByZXNzaW9uLFxuICAgICAgY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM6IHtcbiAgICAgICAgcmVhZEZpbGUoZmlsZU5hbWU6IHN0cmluZykge1xuICAgICAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKSA9PT0gZHVtbXlGaWxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc291cmNlVGV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdHMuc3lzLnJlYWRGaWxlKGZpbGVOYW1lKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0c0NvbXBpbGVyT3B0aW9uczogb3B0aW9ucy50c0NvbXBpbGVyT3B0aW9ucyxcbiAgICAgIHByZXR0aWZ5OiBvcHRpb25zLnByZXR0aWZ5LFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRTb3VyY2VGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnNvdXJjZUZpbGVOYW1lKTtcblxuICBjb25zdCB0c0NvbXBpbGVyT3B0aW9ucyA9IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMgPz8ge1xuICAgIG5vRW1pdDogdHJ1ZSxcblxuICAgIHN0cmljdE51bGxDaGVja3M6IHRydWUsXG4gICAgYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0czogdHJ1ZSxcbiAgICBhbGxvd0FyYml0cmFyeUV4dGVuc2lvbnM6IHRydWUsXG4gICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgYWxsb3dKczogdHJ1ZSxcbiAgfTtcblxuICBpZiAoIXRzQ29tcGlsZXJPcHRpb25zLnN0cmljdE51bGxDaGVja3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdHJpY3ROdWxsQ2hlY2tzIG11c3QgYmUgZW5hYmxlZCFcIik7XG4gIH1cblxuICBjb25zdCBjb21waWxlckhvc3QgPSBjcmVhdGVBdWdtZW50ZXJDb21waWxlckhvc3QoXG4gICAgcmVzb2x2ZWRTb3VyY2VGaWxlTmFtZSxcbiAgICBjcmVhdGVFeHBhbmRDb2RlQmxvY2sob3B0aW9ucy50eXBlRXhwcmVzc2lvbiksXG4gICAgdHNDb21waWxlck9wdGlvbnMsXG4gICAgb3B0aW9ucy5jb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyxcbiAgKTtcblxuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShcbiAgICBbcmVzb2x2ZWRTb3VyY2VGaWxlTmFtZV0sXG4gICAgdHNDb21waWxlck9wdGlvbnMsXG4gICAgY29tcGlsZXJIb3N0LFxuICApO1xuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRTb3VyY2VGaWxlTmFtZSk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBmaWxlIG5vdCBmb3VuZCFcIik7XG4gIH1cblxuICBjb25zdCByZXN1bHRJZGVudGlmaWVyTm9kZSA9IGZpbmRSZXN1bHRJZGVudGlmaWVyTm9kZShzb3VyY2VGaWxlKTtcbiAgaWYgKCFyZXN1bHRJZGVudGlmaWVyTm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG5vZGUgZm91bmQhXCIpO1xuICB9XG5cbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IGV4cGFuZGVkVHlwZVN0cmluZyA9IHR5cGVDaGVja2VyLnR5cGVUb1N0cmluZyhcbiAgICB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihyZXN1bHRJZGVudGlmaWVyTm9kZSksXG4gICAgdW5kZWZpbmVkLFxuICAgIHRzLlR5cGVGb3JtYXRGbGFncy5Ob2RlQnVpbGRlckZsYWdzTWFzayxcbiAgKTtcblxuICBpZiAob3B0aW9ucy5wcmV0dGlmeSAmJiBvcHRpb25zLnByZXR0aWZ5LmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGV4cGFuZGVkVHlwZVN0cmluZztcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRUeXBlRXhwcmVzc2lvbihleHBhbmRlZFR5cGVTdHJpbmcsIG9wdGlvbnMucHJldHRpZnk/Lm9wdGlvbnMpO1xufVxuIiwKICAgICIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQgeyBleHBhbmRNeVR5cGUgfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgcGFyc2VBcmdzLCB0eXBlIFBhcnNlQXJnc0NvbmZpZyB9IGZyb20gXCJub2RlOnV0aWxcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG50eXBlIFZhbHVlcyA9IHtcbiAgaGVscD86IGJvb2xlYW47XG4gIHByZXR0aWZ5OiBib29sZWFuO1xuICB0c2NvbmZpZz86IHN0cmluZztcbn07XG5cbmNvbnN0IHRyeVBhcnNlID0gPFxuICBWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHN0cmluZyB8IGJvb2xlYW4gfCBBcnJheTxzdHJpbmcgfCBib29sZWFuPiB8IHVuZGVmaW5lZFxuICA+LFxuICBPcHRpb25zIGV4dGVuZHMgUGFyc2VBcmdzQ29uZmlnW1wib3B0aW9uc1wiXSA9IFBhcnNlQXJnc0NvbmZpZ1tcIm9wdGlvbnNcIl0sXG4+KFxuICBvcHRpb25zOiBPcHRpb25zLFxuKTogeyBlcnJvcj86IEVycm9yOyB2YWx1ZXM6IFZhbHVlczsgcG9zaXRpb25hbHM6IHN0cmluZ1tdIH0gPT4ge1xuICBsZXQgcmVzdWx0OiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZUFyZ3M+O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IHBhcnNlQXJncyh7XG4gICAgICBvcHRpb25zLFxuICAgICAgdG9rZW5zOiB0cnVlLFxuICAgICAgYWxsb3dQb3NpdGlvbmFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSxcbiAgICAgIHZhbHVlczoge30gYXMgVmFsdWVzLFxuICAgICAgcG9zaXRpb25hbHM6IFtdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7IHRva2VucywgdmFsdWVzLCBwb3NpdGlvbmFscyB9ID0gcmVzdWx0O1xuXG4gIC8vIFJlcHJvY2VzcyB0aGUgb3B0aW9uIHRva2VucyBhbmQgb3ZlcndyaXRlIHRoZSByZXR1cm5lZCB2YWx1ZXMuXG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zID8/IFtdKSB7XG4gICAgaWYgKHRva2VuLmtpbmQgPT09IFwib3B0aW9uLXRlcm1pbmF0b3JcIiB8fCB0b2tlbi5raW5kID09PSBcInBvc2l0aW9uYWxcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLm5hbWUuc3RhcnRzV2l0aChcIm5vLVwiKSkge1xuICAgICAgLy8gU3RvcmUgZm9vOmZhbHNlIGZvciAtLW5vLWZvb1xuICAgICAgY29uc3QgcG9zaXRpdmVOYW1lID0gdG9rZW4ubmFtZS5zbGljZShcIm5vLVwiLmxlbmd0aCk7XG4gICAgICB2YWx1ZXNbcG9zaXRpdmVOYW1lXSA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHZhbHVlc1t0b2tlbi5uYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzYXZlIHZhbHVlIHNvIGxhc3Qgb25lIHdpbnMgaWYgYm90aCAtLWZvbyBhbmQgLS1uby1mb28uXG4gICAgICB2YWx1ZXNbdG9rZW4ubmFtZV0gPSB0b2tlbi52YWx1ZSA/PyB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZXM6IHZhbHVlcyBhcyBWYWx1ZXMsXG4gICAgcG9zaXRpb25hbHMsXG4gIH07XG59O1xuXG5jb25zdCB7IGVycm9yLCB2YWx1ZXMsIHBvc2l0aW9uYWxzIH0gPSB0cnlQYXJzZTxWYWx1ZXM+KHtcbiAgaGVscDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcImhcIixcbiAgfSxcbiAgcHJldHRpZnk6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJwXCIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgXCJuby1wcmV0dGlmeVwiOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiUFwiLFxuICB9LFxuICB0c2NvbmZpZzoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwiY1wiLFxuICB9LFxufSk7XG5cbmlmIChlcnJvcikge1xuICBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IHVzYWdlUHJvbXB0ID0gW1xuICBcIlVzYWdlOlwiLFxuICBcIiAgZXhwYW5kLW15LXR5cGUgW29wdGlvbnNdIDxzb3VyY2UtZmlsZT4gPGV4cHJlc3Npb24+XCIsXG4gIFwiXCIsXG4gIFwiT3B0aW9uczpcIixcbiAgXCIgIC1oLCAtLWhlbHBcXHRcXHRcXHRTaG93IHRoaXMgaGVscCBtZXNzYWdlXCIsXG4gIFwiICAtcCwgLS1wcmV0dGlmeVxcdFxcdFByZXR0aWZ5IHRoZSBvdXRwdXQgKGRlZmF1bHQpXCIsXG4gIFwiICAtUCwgLS1uby1wcmV0dGlmeVxcdFxcdERvIG5vdCBwcmV0dGlmeSB0aGUgb3V0cHV0XCIsXG4gIFwiICAtYywgLS10c2NvbmZpZyA8ZmlsZT5cXHRcXHRVc2UgdGhlIHNwZWNpZmllZCB0c2NvbmZpZy5qc29uIGZpbGVcIixcbl0uam9pbihcIlxcblwiKTtcblxuaWYgKHBvc2l0aW9uYWxzLmxlbmd0aCAhPT0gMikge1xuICBjb25zb2xlLmVycm9yKHVzYWdlUHJvbXB0KTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG5pZiAodmFsdWVzLmhlbHApIHtcbiAgY29uc29sZS5lcnJvcih1c2FnZVByb21wdCk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cblxuY29uc3QgW3NvdXJjZUZpbGVOYW1lLCB0eXBlRXhwcmVzc2lvbl0gPSBwb3NpdGlvbmFscztcbmNvbnN0IHsgcHJldHRpZnksIHRzY29uZmlnOiB0c0NvbmZpZ0ZpbGVOYW1lIH0gPSB2YWx1ZXM7XG5cbmxldCB0c1BhcnNlZENvbW1hbmRMaW5lOiB0cy5QYXJzZWRDb21tYW5kTGluZSB8IHVuZGVmaW5lZDtcblxuaWYgKHRzQ29uZmlnRmlsZU5hbWUpIHtcbiAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKHRzQ29uZmlnRmlsZU5hbWUsIHRzLnN5cy5yZWFkRmlsZSk7XG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KFxuICAgIGNvbmZpZ0ZpbGUuY29uZmlnLFxuICAgIHRzLnN5cyxcbiAgICBcIi4vXCIsXG4gICk7XG5cbiAgdHNQYXJzZWRDb21tYW5kTGluZSA9IGNvbXBpbGVyT3B0aW9ucztcbn1cblxuY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhwYW5kTXlUeXBlKHtcbiAgc291cmNlRmlsZU5hbWUsXG4gIHR5cGVFeHByZXNzaW9uLFxuICBwcmV0dGlmeToge1xuICAgIGVuYWJsZWQ6IHByZXR0aWZ5LFxuICB9LFxuICB0c0NvbXBpbGVyT3B0aW9uczogdHNQYXJzZWRDb21tYW5kTGluZT8ub3B0aW9ucyxcbn0pO1xuXG5jb25zb2xlLmxvZyhyZXN1bHQpO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7O0FBQUE7QUFrQk8sSUFBTSw4QkFBOEIsQ0FDekMsZ0JBQ0EsV0FDQSxpQkFDQSxrQ0FDRztBQUFBLEVBQ0gsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsbUJBQW1CLENBQUMsR0FBRyxJQUFJO0FBQUEsRUFDNUUsTUFBTSxZQUFZLGlDQUFpQyxDQUFDO0FBQUEsRUFFcEQsV0FBVyxPQUFPLE9BQU8sS0FBSyxTQUFTLEdBRXBDO0FBQUEsSUFDRCxNQUFNLFdBQVcsVUFBVTtBQUFBLElBRTNCLElBQUksVUFBVTtBQUFBLE1BQ1gsbUJBQTBELE9BQ3pEO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLE1BQU0sbUJBQW1CLG1CQUFtQjtBQUFBLEVBRTVDLG1CQUFtQixXQUFXLENBQUMsYUFBYTtBQUFBLElBQzFDLE1BQU0sV0FBVyxpQkFBaUIsUUFBUTtBQUFBLElBRTFDLElBQUksYUFBYSxXQUFXO0FBQUEsTUFDMUIsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLElBQUksYUFBYSxnQkFBZ0I7QUFBQSxNQUMvQixPQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsT0FBTyxHQUFHO0FBQUEsRUFBYztBQUFBO0FBQUEsRUFHMUIsT0FBTztBQUFBOzs7QUNyRFQ7QUFFQSxJQUFNLG1CQUFtQjtBQUVsQixJQUFNLHdCQUF3QixDQUFDLG1CQUEyQjtBQUFBLEVBRS9ELE9BQU8sUUFBUSw0QkFBNEIsMEJBQTBCO0FBQUEsV0FDNUQsZ0NBQWdDO0FBQUE7QUFBQSxXQUVoQztBQUFBLDhEQUNtRCxpQ0FBaUM7QUFBQSwrQ0FDaEQ7QUFBQSxrREFDRyx3Q0FBd0M7QUFBQTtBQUFBLFdBRS9FLG9HQUFvRztBQUFBO0FBQUE7QUFBQSxXQUdwRyxvREFBb0Qsb0NBQW9DO0FBQUEsV0FDeEY7QUFBQSxXQUNBO0FBQUE7QUFHSixJQUFNLHVCQUF1QixPQUNsQyxNQUNB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aEI7QUFFQSxJQUFNLGNBQWM7QUFBQSxFQUNsQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixFQUFFLEtBQUs7QUFBQSxDQUFJO0FBRVgsSUFBSSxZQUFZLFdBQVcsR0FBRztBQUFBLEVBQzVCLFFBQVEsTUFBTSxXQUFXO0FBQUEsRUFDekIsUUFBUSxLQUFLLENBQUM7QUFDaEI7QUFFQSxJQUFJLE9BQU8sTUFBTTtBQUFBLEVBQ2YsUUFBUSxNQUFNLFdBQVc7QUFBQSxFQUN6QixRQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLEtBQU8sZ0JBQWdCLGtCQUFrQjtBQUN6QyxNQUFRLFVBQVUsVUFBVSxxQkFBcUI7QUFFakQsSUFBSTtBQUVKLElBQUksa0JBQWtCO0FBQUEsRUFDcEIsTUFBTSxhQUFhLElBQUcsZUFBZSxrQkFBa0IsSUFBRyxJQUFJLFFBQVE7QUFBQSxFQUN0RSxNQUFNLGtCQUFrQixJQUFHLDJCQUN6QixXQUFXLFFBQ1gsSUFBRyxLQUNILElBQ0Y7QUFBQSxFQUVBLHNCQUFzQjtBQUN4QjtBQUVBLElBQU0sU0FBUyxNQUFNLGFBQWE7QUFBQSxFQUNoQztBQUFBLEVBQ0E7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNSLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxtQkFBbUIscUJBQXFCO0FBQzFDLENBQUM7QUFFRCxRQUFRLElBQUksTUFBTTsiLAogICJkZWJ1Z0lkIjogIkNEQTg0MjU4OEM0QUVDNDU2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
257
+ //# debugId=D978D5D6AFCBBE8D64756E2164756E21
258
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9hdWdtZW50ZXItY29tcGlsZXItaG9zdC50cyIsICIuLi9zcmMvY29kZS1nZW5lcmF0b3IudHMiLCAiLi4vc3JjL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb24gYXMgQmlvbWVDb25maWd1cmF0aW9uIH0gZnJvbSBcIkBiaW9tZWpzL3dhc20tbm9kZWpzXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMsXG4gIGNyZWF0ZUF1Z21lbnRlckNvbXBpbGVySG9zdCxcbn0gZnJvbSBcIi4vYXVnbWVudGVyLWNvbXBpbGVyLWhvc3QuanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUV4cGFuZENvZGVCbG9jayxcbiAgZm9ybWF0VHlwZUV4cHJlc3Npb24sXG59IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yLmpzXCI7XG5cbi8qKlxuICogRmluZHMgdGhlIHJlc3VsdCB0eXBlIGlkZW50aWZpZXIgbm9kZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHR5cGUgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IHR5cGUgaWRlbnRpZmllciBub2RlLlxuICovXG5jb25zdCBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHRzLk5vZGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAobm9kZS5nZXRDaGlsZENvdW50KCkgPT09IDApIHtcbiAgICBpZiAoIXRzLmlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSB3ZSBwdXQgdGhlIF9fPElERU5USUZJRVI+X18gdHlwZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuICAgIC8vIGZpbGUsIHdlIGNhbiByZXR1cm4gdGhlIGZpcnN0IGlkZW50aWZpZXIgd2UgZmluZC5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgZmluZFJlc3VsdElkZW50aWZpZXJOb2RlKTtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVPcHRpb25zQmFzZSA9IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIGV4cHJlc3Npb24gdG8gZXhwYW5kLlxuICAgKiBAZXhhbXBsZSBcIlJldHVyblR5cGU8dHlwZW9mIG15RnVuY3Rpb24+XCJcbiAgICovXG4gIHR5cGVFeHByZXNzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgY29tcGlsZXIgb3B0aW9ucy5cbiAgICovXG4gIHRzQ29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQcmV0dGlmeSBvcHRpb25zLlxuICAgKi9cbiAgcHJldHRpZnk/OiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV0dGlmeSB0aGUgb3V0cHV0LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBCaW9tZSBmb3JtYXR0aW5nIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgYmlvbWVPcHRpb25zPzogQmlvbWVDb25maWd1cmF0aW9uO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIHJlY29yZCBvZiBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgaW4gdGhlIGNvbXBpbGVyIGhvc3QuIFVzZWZ1bCBmb3IgbW9ja2luZ1xuICAgKi9cbiAgY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM/OiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zID0gRXhwYW5kVHlwZU9wdGlvbnNCYXNlICYge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgc291cmNlIHRleHQgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRNeVR5cGVPcHRpb25zID1cbiAgfCBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zXG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShcbiAgb3B0aW9uczogRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5cbi8qKlxuICogRXhwYW5kcyBhIFR5cGVTY3JpcHQgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhwYW5kZWQgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKG9wdGlvbnM6IEV4cGFuZE15VHlwZU9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZUV4cHJlc3Npb24udHJpbSgpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwibmV2ZXJcIjtcbiAgfVxuXG4gIGlmIChcInNvdXJjZVRleHRcIiBpbiBvcHRpb25zKSB7XG4gICAgY29uc3QgZHVtbXlGaWxlTmFtZSA9IFwiZXhwYW5kLW15LXR5cGUtZHVtbXkudHNcIjtcblxuICAgIHJldHVybiBleHBhbmRNeVR5cGUoe1xuICAgICAgc291cmNlRmlsZU5hbWU6IGR1bW15RmlsZU5hbWUsXG4gICAgICB0eXBlRXhwcmVzc2lvbjogb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICAgIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlYWRGaWxlKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgICBpZiAocGF0aC5iYXNlbmFtZShmaWxlTmFtZSkgPT09IGR1bW15RmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNvdXJjZVRleHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRzLnN5cy5yZWFkRmlsZShmaWxlTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHNDb21waWxlck9wdGlvbnM6IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMsXG4gICAgICBwcmV0dGlmeTogb3B0aW9ucy5wcmV0dGlmeSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkU291cmNlRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5zb3VyY2VGaWxlTmFtZSk7XG5cbiAgY29uc3QgdHNDb21waWxlck9wdGlvbnMgPSBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zID8/IHtcbiAgICBub0VtaXQ6IHRydWUsXG5cbiAgICBzdHJpY3ROdWxsQ2hlY2tzOiB0cnVlLFxuICAgIGFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHM6IHRydWUsXG4gICAgYWxsb3dBcmJpdHJhcnlFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SnM6IHRydWUsXG4gIH07XG5cbiAgaWYgKCF0c0NvbXBpbGVyT3B0aW9ucy5zdHJpY3ROdWxsQ2hlY2tzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3RyaWN0TnVsbENoZWNrcyBtdXN0IGJlIGVuYWJsZWQhXCIpO1xuICB9XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gY3JlYXRlQXVnbWVudGVyQ29tcGlsZXJIb3N0KFxuICAgIHJlc29sdmVkU291cmNlRmlsZU5hbWUsXG4gICAgY3JlYXRlRXhwYW5kQ29kZUJsb2NrKG9wdGlvbnMudHlwZUV4cHJlc3Npb24pLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIG9wdGlvbnMuY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMsXG4gICk7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oXG4gICAgW3Jlc29sdmVkU291cmNlRmlsZU5hbWVdLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIGNvbXBpbGVySG9zdCxcbiAgKTtcblxuICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJlc29sdmVkU291cmNlRmlsZU5hbWUpO1xuICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb3VyY2UgZmlsZSBub3QgZm91bmQhXCIpO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0SWRlbnRpZmllck5vZGUgPSBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUoc291cmNlRmlsZSk7XG4gIGlmICghcmVzdWx0SWRlbnRpZmllck5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBleHBhbmRlZFR5cGVTdHJpbmcgPSB0eXBlQ2hlY2tlci50eXBlVG9TdHJpbmcoXG4gICAgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24ocmVzdWx0SWRlbnRpZmllck5vZGUpLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0cy5UeXBlRm9ybWF0RmxhZ3MuTm9kZUJ1aWxkZXJGbGFnc01hc2ssXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMucHJldHRpZnk/LmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGV4cGFuZGVkVHlwZVN0cmluZztcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRUeXBlRXhwcmVzc2lvbihcbiAgICBleHBhbmRlZFR5cGVTdHJpbmcsXG4gICAgb3B0aW9ucy5wcmV0dGlmeT8uYmlvbWVPcHRpb25zLFxuICApO1xufVxuIiwKICAgICJpbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxudHlwZSBFeHRyYWN0RnVuY3Rpb25zPFQsIEsgZXh0ZW5kcyBrZXlvZiBUID0ga2V5b2YgVD4gPSB7XG4gIFtQIGluIEtdOiBFeHRyYWN0PFRbUF0sICguLi5hcmdzOiBuZXZlcltdKSA9PiB1bmtub3duPjtcbn07XG5leHBvcnQgdHlwZSBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyA9IFBhcnRpYWw8XG4gIEV4dHJhY3RGdW5jdGlvbnM8dHMuQ29tcGlsZXJIb3N0PlxuPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCBhdWdtZW50cyB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlIGZvciBleHBhbmRpbmcgYSB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZUZpbGVOYW1lIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGF1Z21lbnQuXG4gKiBAcGFyYW0gY29kZVRvQWRkIFR5cGUgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjb21waWxlck9wdGlvbnMgVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb25zLlxuICogQHBhcmFtIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzIEEgcmVjb3JkIG9mIGZ1bmN0aW9ucyB0byBvdmVycmlkZSBpbiB0aGUgY29tcGlsZXIgaG9zdC4gVXNlZnVsIGZvciBtb2NraW5nLlxuICogQHJldHVybnMgQSBjdXN0b20gY29tcGlsZXIgaG9zdCB0aGF0IHJldHVybnMgYW4gYXVnbWVudGVkIHNvdXJjZSBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSB0eXBlIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVBdWdtZW50ZXJDb21waWxlckhvc3QgPSAoXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmcsXG4gIGNvZGVUb0FkZDogc3RyaW5nLFxuICBjb21waWxlck9wdGlvbnM/OiB0cy5Db21waWxlck9wdGlvbnMsXG4gIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzPzogQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMsXG4pID0+IHtcbiAgY29uc3QgY3VzdG9tQ29tcGlsZXJIb3N0ID0gdHMuY3JlYXRlQ29tcGlsZXJIb3N0KGNvbXBpbGVyT3B0aW9ucyA/PyB7fSwgdHJ1ZSk7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzID8/IHt9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG92ZXJyaWRlcykgYXMgQXJyYXk8XG4gICAga2V5b2YgQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXNcbiAgPikge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzW2tleV07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgIChjdXN0b21Db21waWxlckhvc3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9XG4gICAgICAgIG92ZXJyaWRlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsUmVhZEZpbGUgPSBjdXN0b21Db21waWxlckhvc3QucmVhZEZpbGU7XG5cbiAgY3VzdG9tQ29tcGlsZXJIb3N0LnJlYWRGaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSBvcmlnaW5hbFJlYWRGaWxlKGZpbGVOYW1lKTtcblxuICAgIGlmIChjb250ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVOYW1lICE9PSBzb3VyY2VGaWxlTmFtZSkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtjb2RlVG9BZGR9XFxuJHtjb250ZW50c31gO1xuICB9O1xuXG4gIHJldHVybiBjdXN0b21Db21waWxlckhvc3Q7XG59O1xuIiwKICAgICJpbXBvcnQgeyBCaW9tZSB9IGZyb20gXCJAYmlvbWVqcy9qcy1hcGkvbm9kZWpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb24gYXMgQmlvbWVDb25maWd1cmF0aW9uIH0gZnJvbSBcIkBiaW9tZWpzL3dhc20tbm9kZWpzXCI7XG5cbmNvbnN0IGlkZW50aWZpZXJQcmVmaXggPSBcIl9fRVhQQU5EX01ZX1RZUEVfX1wiO1xuY29uc3QgdmlydHVhbEZvcm1hdEZpbGVOYW1lID0gXCJleHBhbmQtbXktdHlwZS50c1wiO1xuY29uc3QgYmlvbWUgPSBuZXcgQmlvbWUoKTtcbmNvbnN0IHsgcHJvamVjdEtleSB9ID0gYmlvbWUub3BlblByb2plY3QoKTtcblxuY29uc3QgZGVmYXVsdEJpb21lQ29uZmlndXJhdGlvbjogQmlvbWVDb25maWd1cmF0aW9uID0ge1xuICBmb3JtYXR0ZXI6IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGluZGVudFN0eWxlOiBcInNwYWNlXCIsXG4gIH0sXG4gIGphdmFzY3JpcHQ6IHtcbiAgICBmb3JtYXR0ZXI6IHtcbiAgICAgIHF1b3RlU3R5bGU6IFwiZG91YmxlXCIsXG4gICAgICBzZW1pY29sb25zOiBcImFzTmVlZGVkXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFeHBhbmRDb2RlQmxvY2sgPSAodHlwZUV4cHJlc3Npb246IHN0cmluZykgPT4ge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvYmxvYi9tYWluL3Rlc3RzL2Nhc2VzL2NvbXBpbGVyL2NvbXB1dGVkVHlwZXNLZXlvZk5vSW5kZXhTaWduYXR1cmVUeXBlLnRzXG4gIHJldHVybiBgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9UmVzdWx0ID0gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDwke2lkZW50aWZpZXJQcmVmaXh9RXhwcmVzc2lvbj47XG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwcmVzc2lvbiA9ICR7dHlwZUV4cHJlc3Npb259O1xuXG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFQ+ID0gXG4gICAgICAgIFQgZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgQSkgPT4gaW5mZXIgUiA/ICguLi5hcmdzOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPEE+KSA9PiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFI+XG4gICAgICA6IFQgZXh0ZW5kcyBQcm9taXNlPGluZmVyIFU+ID8gUHJvbWlzZTwke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kVHlwZUFyZ3VtZW50PFU+PlxuICAgICAgOiB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFN0cmluZzxUW0tdPiA6ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8VFtLXT47IH0gJiB7fTtcblxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFR5cGVBcmd1bWVudDxUPiA9IFtUICYge31dIGV4dGVuZHMgW25ldmVyXSA/IFQgOiBUICYge30gZXh0ZW5kcyB2b2lkID8gVCA6ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8VCAmIHt9PjtcblxuICAgIC8vIEZvcmNlcyBhIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFsIHR5cGVzIHRvIGJlIGV4cGFuZGVkXG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kU3RyaW5nPFQgZXh0ZW5kcyBzdHJpbmc+ID0gJHtpZGVudGlmaWVyUHJlZml4fVJlbW92ZVVuZGVyc2NvcmU8JHtpZGVudGlmaWVyUHJlZml4fUFwcGVuZFVuZGVyc2NvcmU8VD4+O1xuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUFwcGVuZFVuZGVyc2NvcmU8VCBleHRlbmRzIHN0cmluZz4gPSBcXGBcXCR7VH1fXFxgIGV4dGVuZHMgc3RyaW5nID8gXFxgXFwke1R9X1xcYCA6IG5ldmVyO1xuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fVJlbW92ZVVuZGVyc2NvcmU8VCBleHRlbmRzIHN0cmluZz4gPSBUIGV4dGVuZHMgXFxgXFwke2luZmVyIFV9X1xcYCA/IFUgOiBuZXZlcjtgO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFR5cGVFeHByZXNzaW9uID0gYXN5bmMgKFxuICBjb2RlOiBzdHJpbmcsXG4gIGJpb21lQ29uZmlndXJhdGlvbj86IEJpb21lQ29uZmlndXJhdGlvbixcbikgPT4ge1xuICBjb25zdCBpbnB1dCA9IGB0eXBlICR7aWRlbnRpZmllclByZWZpeH0gPSAke2NvZGV9YDtcbiAgY29uc3QgamF2YXNjcmlwdEZvcm1hdHRlciA9IHtcbiAgICAuLi5kZWZhdWx0QmlvbWVDb25maWd1cmF0aW9uLmphdmFzY3JpcHQ/LmZvcm1hdHRlcixcbiAgICAuLi5iaW9tZUNvbmZpZ3VyYXRpb24/LmphdmFzY3JpcHQ/LmZvcm1hdHRlcixcbiAgfTtcblxuICBiaW9tZS5hcHBseUNvbmZpZ3VyYXRpb24ocHJvamVjdEtleSwge1xuICAgIC4uLmRlZmF1bHRCaW9tZUNvbmZpZ3VyYXRpb24sXG4gICAgLi4uYmlvbWVDb25maWd1cmF0aW9uLFxuICAgIGZvcm1hdHRlcjoge1xuICAgICAgLi4uZGVmYXVsdEJpb21lQ29uZmlndXJhdGlvbi5mb3JtYXR0ZXIsXG4gICAgICAuLi5iaW9tZUNvbmZpZ3VyYXRpb24/LmZvcm1hdHRlcixcbiAgICB9LFxuICAgIGphdmFzY3JpcHQ6IHtcbiAgICAgIC4uLmRlZmF1bHRCaW9tZUNvbmZpZ3VyYXRpb24uamF2YXNjcmlwdCxcbiAgICAgIC4uLmJpb21lQ29uZmlndXJhdGlvbj8uamF2YXNjcmlwdCxcbiAgICAgIGZvcm1hdHRlcjogamF2YXNjcmlwdEZvcm1hdHRlcixcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCByZXN1bHQgPSBiaW9tZS5mb3JtYXRDb250ZW50KHByb2plY3RLZXksIGlucHV0LCB7XG4gICAgZmlsZVBhdGg6IHZpcnR1YWxGb3JtYXRGaWxlTmFtZSxcbiAgfSk7XG5cbiAgaWYgKHJlc3VsdC5kaWFnbm9zdGljcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYmlvbWUucHJpbnREaWFnbm9zdGljcyhyZXN1bHQuZGlhZ25vc3RpY3MsIHtcbiAgICAgICAgZmlsZVBhdGg6IHZpcnR1YWxGb3JtYXRGaWxlTmFtZSxcbiAgICAgICAgZmlsZVNvdXJjZTogaW5wdXQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5jb250ZW50LnRyaW0oKS5zdWJzdHJpbmcoYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fSA9IGAubGVuZ3RoKTtcbn07XG4iLAogICAgIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHR5cGUgUGFyc2VBcmdzQ29uZmlnLCBwYXJzZUFyZ3MgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IGV4cGFuZE15VHlwZSB9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbnR5cGUgVmFsdWVzID0ge1xuICBoZWxwPzogYm9vbGVhbjtcbiAgcHJldHRpZnk/OiBib29sZWFuO1xuICBcIm5vLXByZXR0aWZ5XCI/OiBib29sZWFuO1xuICB0c2NvbmZpZz86IHN0cmluZztcbn07XG5cbmNvbnN0IHRyeVBhcnNlID0gPFxuICBWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHN0cmluZyB8IGJvb2xlYW4gfCBBcnJheTxzdHJpbmcgfCBib29sZWFuPiB8IHVuZGVmaW5lZFxuICA+LFxuICBPcHRpb25zIGV4dGVuZHMgUGFyc2VBcmdzQ29uZmlnW1wib3B0aW9uc1wiXSA9IFBhcnNlQXJnc0NvbmZpZ1tcIm9wdGlvbnNcIl0sXG4+KFxuICBvcHRpb25zOiBPcHRpb25zLFxuKTogeyBlcnJvcj86IEVycm9yOyB2YWx1ZXM6IFZhbHVlczsgcG9zaXRpb25hbHM6IHN0cmluZ1tdIH0gPT4ge1xuICBsZXQgcmVzdWx0OiBSZXR1cm5UeXBlPHR5cGVvZiBwYXJzZUFyZ3M+O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IHBhcnNlQXJncyh7XG4gICAgICBvcHRpb25zLFxuICAgICAgdG9rZW5zOiB0cnVlLFxuICAgICAgYWxsb3dQb3NpdGlvbmFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSxcbiAgICAgIHZhbHVlczoge30gYXMgVmFsdWVzLFxuICAgICAgcG9zaXRpb25hbHM6IFtdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7IHRva2VucywgdmFsdWVzLCBwb3NpdGlvbmFscyB9ID0gcmVzdWx0O1xuXG4gIC8vIFJlcHJvY2VzcyB0aGUgb3B0aW9uIHRva2VucyBhbmQgb3ZlcndyaXRlIHRoZSByZXR1cm5lZCB2YWx1ZXMuXG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zID8/IFtdKSB7XG4gICAgaWYgKHRva2VuLmtpbmQgPT09IFwib3B0aW9uLXRlcm1pbmF0b3JcIiB8fCB0b2tlbi5raW5kID09PSBcInBvc2l0aW9uYWxcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLm5hbWUuc3RhcnRzV2l0aChcIm5vLVwiKSkge1xuICAgICAgLy8gU3RvcmUgZm9vOmZhbHNlIGZvciAtLW5vLWZvb1xuICAgICAgY29uc3QgcG9zaXRpdmVOYW1lID0gdG9rZW4ubmFtZS5zbGljZShcIm5vLVwiLmxlbmd0aCk7XG4gICAgICB2YWx1ZXNbcG9zaXRpdmVOYW1lXSA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHZhbHVlc1t0b2tlbi5uYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzYXZlIHZhbHVlIHNvIGxhc3Qgb25lIHdpbnMgaWYgYm90aCAtLWZvbyBhbmQgLS1uby1mb28uXG4gICAgICB2YWx1ZXNbdG9rZW4ubmFtZV0gPSB0b2tlbi52YWx1ZSA/PyB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZXM6IHZhbHVlcyBhcyBWYWx1ZXMsXG4gICAgcG9zaXRpb25hbHMsXG4gIH07XG59O1xuXG5jb25zdCB7IGVycm9yLCB2YWx1ZXMsIHBvc2l0aW9uYWxzIH0gPSB0cnlQYXJzZTxWYWx1ZXM+KHtcbiAgaGVscDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcImhcIixcbiAgfSxcbiAgcHJldHRpZnk6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJwXCIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgXCJuby1wcmV0dGlmeVwiOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiUFwiLFxuICB9LFxuICB0c2NvbmZpZzoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwiY1wiLFxuICB9LFxufSk7XG5cbmlmIChlcnJvcikge1xuICBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IHVzYWdlUHJvbXB0ID0gW1xuICBcIlVzYWdlOlwiLFxuICBcIiAgZXhwYW5kLW15LXR5cGUgW29wdGlvbnNdIDxzb3VyY2UtZmlsZT4gPGV4cHJlc3Npb24+XCIsXG4gIFwiXCIsXG4gIFwiT3B0aW9uczpcIixcbiAgXCIgIC1oLCAtLWhlbHBcXHRcXHRcXHRTaG93IHRoaXMgaGVscCBtZXNzYWdlXCIsXG4gIFwiICAtcCwgLS1wcmV0dGlmeVxcdFxcdFByZXR0aWZ5IHRoZSBvdXRwdXQgKGRlZmF1bHQpXCIsXG4gIFwiICAtUCwgLS1uby1wcmV0dGlmeVxcdFxcdERvIG5vdCBwcmV0dGlmeSB0aGUgb3V0cHV0XCIsXG4gIFwiICAtYywgLS10c2NvbmZpZyA8ZmlsZT5cXHRcXHRVc2UgdGhlIHNwZWNpZmllZCB0c2NvbmZpZy5qc29uIGZpbGVcIixcbl0uam9pbihcIlxcblwiKTtcblxuaWYgKHZhbHVlcy5oZWxwKSB7XG4gIGNvbnNvbGUuZXJyb3IodXNhZ2VQcm9tcHQpO1xuICBwcm9jZXNzLmV4aXQoMCk7XG59XG5cbmlmIChwb3NpdGlvbmFscy5sZW5ndGggIT09IDIpIHtcbiAgY29uc29sZS5lcnJvcih1c2FnZVByb21wdCk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cblxuY29uc3QgW3NvdXJjZUZpbGVOYW1lLCB0eXBlRXhwcmVzc2lvbl0gPSBwb3NpdGlvbmFscztcbmNvbnN0IHByZXR0aWZ5ID0gdmFsdWVzLnByZXR0aWZ5ID8/IHRydWU7XG5jb25zdCB0c0NvbmZpZ0ZpbGVOYW1lID0gdmFsdWVzLnRzY29uZmlnO1xuXG5sZXQgdHNQYXJzZWRDb21tYW5kTGluZTogdHMuUGFyc2VkQ29tbWFuZExpbmUgfCB1bmRlZmluZWQ7XG5cbmlmICh0c0NvbmZpZ0ZpbGVOYW1lKSB7XG4gIGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c0NvbmZpZ0ZpbGVOYW1lLCB0cy5zeXMucmVhZEZpbGUpO1xuICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICBjb25maWdGaWxlLmNvbmZpZyxcbiAgICB0cy5zeXMsXG4gICAgXCIuL1wiLFxuICApO1xuXG4gIHRzUGFyc2VkQ29tbWFuZExpbmUgPSBjb21waWxlck9wdGlvbnM7XG59XG5cbmNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4cGFuZE15VHlwZSh7XG4gIHNvdXJjZUZpbGVOYW1lLFxuICB0eXBlRXhwcmVzc2lvbixcbiAgcHJldHRpZnk6IHtcbiAgICBlbmFibGVkOiBwcmV0dGlmeSxcbiAgfSxcbiAgdHNDb21waWxlck9wdGlvbnM6IHRzUGFyc2VkQ29tbWFuZExpbmU/Lm9wdGlvbnMsXG59KTtcblxuY29uc29sZS5sb2cocmVzdWx0KTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7OztBQUFBO0FBRUE7OztBQ0ZBO0FBa0JPLElBQU0sOEJBQThCLENBQ3pDLGdCQUNBLFdBQ0EsaUJBQ0Esa0NBQ0c7QUFBQSxFQUNILE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLG1CQUFtQixDQUFDLEdBQUcsSUFBSTtBQUFBLEVBQzVFLE1BQU0sWUFBWSxpQ0FBaUMsQ0FBQztBQUFBLEVBRXBELFdBQVcsT0FBTyxPQUFPLEtBQUssU0FBUyxHQUVwQztBQUFBLElBQ0QsTUFBTSxXQUFXLFVBQVU7QUFBQSxJQUUzQixJQUFJLFVBQVU7QUFBQSxNQUNYLG1CQUEwRCxPQUN6RDtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFNLG1CQUFtQixtQkFBbUI7QUFBQSxFQUU1QyxtQkFBbUIsV0FBVyxDQUFDLGFBQWE7QUFBQSxJQUMxQyxNQUFNLFdBQVcsaUJBQWlCLFFBQVE7QUFBQSxJQUUxQyxJQUFJLGFBQWEsV0FBVztBQUFBLE1BQzFCLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxJQUFJLGFBQWEsZ0JBQWdCO0FBQUEsTUFDL0IsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLE9BQU8sR0FBRztBQUFBLEVBQWM7QUFBQTtBQUFBLEVBRzFCLE9BQU87QUFBQTs7O0FDdERUO0FBR0EsSUFBTSxtQkFBbUI7QUFDekIsSUFBTSx3QkFBd0I7QUFDOUIsSUFBTSxRQUFRLElBQUk7QUFDbEIsTUFB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QTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLEVBQUUsS0FBSztBQUFBLENBQUk7QUFFWCxJQUFJLE9BQU8sTUFBTTtBQUFBLEVBQ2YsUUFBUSxNQUFNLFdBQVc7QUFBQSxFQUN6QixRQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLElBQUksWUFBWSxXQUFXLEdBQUc7QUFBQSxFQUM1QixRQUFRLE1BQU0sV0FBVztBQUFBLEVBQ3pCLFFBQVEsS0FBSyxDQUFDO0FBQ2hCO0FBRUEsS0FBTyxnQkFBZ0Isa0JBQWtCO0FBQ3pDLElBQU0sV0FBVyxPQUFPLFlBQVk7QUFDcEMsSUFBTSxtQkFBbUIsT0FBTztBQUVoQyxJQUFJO0FBRUosSUFBSSxrQkFBa0I7QUFBQSxFQUNwQixNQUFNLGFBQWEsSUFBRyxlQUFlLGtCQUFrQixJQUFHLElBQUksUUFBUTtBQUFBLEVBQ3RFLE1BQU0sa0JBQWtCLElBQUcsMkJBQ3pCLFdBQVcsUUFDWCxJQUFHLEtBQ0gsSUFDRjtBQUFBLEVBRUEsc0JBQXNCO0FBQ3hCO0FBRUEsSUFBTSxTQUFTLE1BQU0sYUFBYTtBQUFBLEVBQ2hDO0FBQUEsRUFDQTtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1IsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLG1CQUFtQixxQkFBcUI7QUFDMUMsQ0FBQztBQUVELFFBQVEsSUFBSSxNQUFNOyIsCiAgImRlYnVnSWQiOiAiRDk3OEQ1RDZBRkNCQkU4RDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
@@ -1,3 +1,3 @@
1
- import type { Options as PrettierOptions } from "prettier";
1
+ import type { Configuration as BiomeConfiguration } from "@biomejs/wasm-nodejs";
2
2
  export declare const createExpandCodeBlock: (typeExpression: string) => string;
3
- export declare const formatTypeExpression: (code: string, prettierOptions?: PrettierOptions) => Promise<string>;
3
+ export declare const formatTypeExpression: (code: string, biomeConfiguration?: BiomeConfiguration) => Promise<string>;
package/dist/index.cjs CHANGED
@@ -66,6 +66,8 @@ __export(exports_src, {
66
66
  expandMyType: () => expandMyType
67
67
  });
68
68
  module.exports = __toCommonJS(exports_src);
69
+ var import_node_path = __toESM(require("node:path"));
70
+ var import_typescript2 = __toESM(require("typescript"));
69
71
 
70
72
  // src/augmenter-compiler-host.ts
71
73
  var import_typescript = __toESM(require("typescript"));
@@ -94,8 +96,23 @@ ${contents}`;
94
96
  };
95
97
 
96
98
  // src/code-generator.ts
97
- var import_prettier = require("prettier");
99
+ var import_nodejs = require("@biomejs/js-api/nodejs");
98
100
  var identifierPrefix = "__EXPAND_MY_TYPE__";
101
+ var virtualFormatFileName = "expand-my-type.ts";
102
+ var biome = new import_nodejs.Biome;
103
+ var { projectKey } = biome.openProject();
104
+ var defaultBiomeConfiguration = {
105
+ formatter: {
106
+ enabled: true,
107
+ indentStyle: "space"
108
+ },
109
+ javascript: {
110
+ formatter: {
111
+ quoteStyle: "double",
112
+ semicolons: "asNeeded"
113
+ }
114
+ }
115
+ };
99
116
  var createExpandCodeBlock = (typeExpression) => {
100
117
  return `type ${identifierPrefix}Result = ${identifierPrefix}Expand<${identifierPrefix}Expression>;
101
118
  type ${identifierPrefix}Expression = ${typeExpression};
@@ -112,18 +129,40 @@ var createExpandCodeBlock = (typeExpression) => {
112
129
  type ${identifierPrefix}AppendUnderscore<T extends string> = \`\${T}_\` extends string ? \`\${T}_\` : never;
113
130
  type ${identifierPrefix}RemoveUnderscore<T extends string> = T extends \`\${infer U}_\` ? U : never;`;
114
131
  };
115
- var formatTypeExpression = async (code, prettierOptions) => {
116
- return (await import_prettier.format(`type ${identifierPrefix} = ${code}`, prettierOptions ?? {
117
- parser: "typescript",
118
- semi: false
119
- })).trim().substring(`type ${identifierPrefix} = `.length);
132
+ var formatTypeExpression = async (code, biomeConfiguration) => {
133
+ const input = `type ${identifierPrefix} = ${code}`;
134
+ const javascriptFormatter = {
135
+ ...defaultBiomeConfiguration.javascript?.formatter,
136
+ ...biomeConfiguration?.javascript?.formatter
137
+ };
138
+ biome.applyConfiguration(projectKey, {
139
+ ...defaultBiomeConfiguration,
140
+ ...biomeConfiguration,
141
+ formatter: {
142
+ ...defaultBiomeConfiguration.formatter,
143
+ ...biomeConfiguration?.formatter
144
+ },
145
+ javascript: {
146
+ ...defaultBiomeConfiguration.javascript,
147
+ ...biomeConfiguration?.javascript,
148
+ formatter: javascriptFormatter
149
+ }
150
+ });
151
+ const result = biome.formatContent(projectKey, input, {
152
+ filePath: virtualFormatFileName
153
+ });
154
+ if (result.diagnostics.length > 0) {
155
+ throw new Error(biome.printDiagnostics(result.diagnostics, {
156
+ filePath: virtualFormatFileName,
157
+ fileSource: input
158
+ }));
159
+ }
160
+ return result.content.trim().substring(`type ${identifierPrefix} = `.length);
120
161
  };
121
162
 
122
163
  // src/index.ts
123
- var import_node_path = __toESM(require("node:path"));
124
- var import_typescript2 = __toESM(require("typescript"));
125
164
  var findResultIdentifierNode = (node) => {
126
- if (node.getChildCount() == 0) {
165
+ if (node.getChildCount() === 0) {
127
166
  if (!import_typescript2.default.isIdentifier(node)) {
128
167
  return;
129
168
  }
@@ -176,11 +215,11 @@ async function expandMyType(options) {
176
215
  }
177
216
  const typeChecker = program.getTypeChecker();
178
217
  const expandedTypeString = typeChecker.typeToString(typeChecker.getTypeAtLocation(resultIdentifierNode), undefined, import_typescript2.default.TypeFormatFlags.NodeBuilderFlagsMask);
179
- if (options.prettify && options.prettify.enabled === false) {
218
+ if (options.prettify?.enabled === false) {
180
219
  return expandedTypeString;
181
220
  }
182
- return formatTypeExpression(expandedTypeString, options.prettify?.options);
221
+ return formatTypeExpression(expandedTypeString, options.prettify?.biomeOptions);
183
222
  }
184
223
 
185
- //# debugId=FD61D95A1BB3AC7F64756E2164756E21
186
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2F1Z21lbnRlci1jb21waWxlci1ob3N0LnRzIiwgInNyYy9jb2RlLWdlbmVyYXRvci50cyIsICJzcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbnR5cGUgRXh0cmFjdEZ1bmN0aW9uczxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID0ge1xuICBbUCBpbiBLXTogVFtQXSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gVFtQXSA6IG5ldmVyO1xufTtcbmV4cG9ydCB0eXBlIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzID0gUGFydGlhbDxcbiAgRXh0cmFjdEZ1bmN0aW9uczx0cy5Db21waWxlckhvc3Q+XG4+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gY29tcGlsZXIgaG9zdCB0aGF0IGF1Z21lbnRzIHRoZSBzcGVjaWZpZWQgc291cmNlIGZpbGUgZm9yIGV4cGFuZGluZyBhIHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gc291cmNlRmlsZU5hbWUgTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gYXVnbWVudC5cbiAqIEBwYXJhbSBjb2RlVG9BZGQgVHlwZSBleHByZXNzaW9uLlxuICogQHBhcmFtIGNvbXBpbGVyT3B0aW9ucyBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gKiBAcGFyYW0gY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgQSByZWNvcmQgb2YgZnVuY3Rpb25zIHRvIG92ZXJyaWRlIGluIHRoZSBjb21waWxlciBob3N0LiBVc2VmdWwgZm9yIG1vY2tpbmcuXG4gKiBAcmV0dXJucyBBIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgcmV0dXJucyBhbiBhdWdtZW50ZWQgc291cmNlIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBleHBhbmQgdGhlIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUF1Z21lbnRlckNvbXBpbGVySG9zdCA9IChcbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZyxcbiAgY29kZVRvQWRkOiBzdHJpbmcsXG4gIGNvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM/OiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyxcbikgPT4ge1xuICBjb25zdCBjdXN0b21Db21waWxlckhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3QoY29tcGlsZXJPcHRpb25zID8/IHt9LCB0cnVlKTtcbiAgY29uc3Qgb3ZlcnJpZGVzID0gY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgPz8ge307XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob3ZlcnJpZGVzKSBhcyBBcnJheTxcbiAgICBrZXlvZiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlc1xuICA+KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXNba2V5XTtcblxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgKGN1c3RvbUNvbXBpbGVySG9zdCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID1cbiAgICAgICAgb3ZlcnJpZGU7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxSZWFkRmlsZSA9IGN1c3RvbUNvbXBpbGVySG9zdC5yZWFkRmlsZTtcblxuICBjdXN0b21Db21waWxlckhvc3QucmVhZEZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IG9yaWdpbmFsUmVhZEZpbGUoZmlsZU5hbWUpO1xuXG4gICAgaWYgKGNvbnRlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb250ZW50cztcbiAgICB9XG5cbiAgICBpZiAoZmlsZU5hbWUgIT09IHNvdXJjZUZpbGVOYW1lKSB7XG4gICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2NvZGVUb0FkZH1cXG4ke2NvbnRlbnRzfWA7XG4gIH07XG5cbiAgcmV0dXJuIGN1c3RvbUNvbXBpbGVySG9zdDtcbn07XG4iLAogICAgImltcG9ydCB0eXBlIHsgT3B0aW9ucyBhcyBQcmV0dGllck9wdGlvbnMgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJwcmV0dGllclwiO1xuXG5jb25zdCBpZGVudGlmaWVyUHJlZml4ID0gXCJfX0VYUEFORF9NWV9UWVBFX19cIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGFuZENvZGVCbG9jayA9ICh0eXBlRXhwcmVzc2lvbjogc3RyaW5nKSA9PiB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9ibG9iL21haW4vdGVzdHMvY2FzZXMvY29tcGlsZXIvY29tcHV0ZWRUeXBlc0tleW9mTm9JbmRleFNpZ25hdHVyZVR5cGUudHNcbiAgcmV0dXJuIGB0eXBlICR7aWRlbnRpZmllclByZWZpeH1SZXN1bHQgPSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPCR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uPjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uID0gJHt0eXBlRXhwcmVzc2lvbn07XG5cbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8VD4gPSBcbiAgICAgICAgVCBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSID8gKC4uLmFyZ3M6ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8QT4pID0+ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8Uj5cbiAgICAgIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT4gPyBQcm9taXNlPCR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRUeXBlQXJndW1lbnQ8VT4+XG4gICAgICA6IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBzdHJpbmcgPyAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kU3RyaW5nPFRbS10+IDogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUW0tdPjsgfSAmIHt9O1xuXG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kVHlwZUFyZ3VtZW50PFQ+ID0gW1QgJiB7fV0gZXh0ZW5kcyBbbmV2ZXJdID8gVCA6IFQgJiB7fSBleHRlbmRzIHZvaWQgPyBUIDogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUICYge30+O1xuXG4gICAgLy8gRm9yY2VzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWwgdHlwZXMgdG8gYmUgZXhwYW5kZWRcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRTdHJpbmc8VCBleHRlbmRzIHN0cmluZz4gPSAke2lkZW50aWZpZXJQcmVmaXh9UmVtb3ZlVW5kZXJzY29yZTwke2lkZW50aWZpZXJQcmVmaXh9QXBwZW5kVW5kZXJzY29yZTxUPj47XG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9QXBwZW5kVW5kZXJzY29yZTxUIGV4dGVuZHMgc3RyaW5nPiA9IFxcYFxcJHtUfV9cXGAgZXh0ZW5kcyBzdHJpbmcgPyBcXGBcXCR7VH1fXFxgIDogbmV2ZXI7XG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9UmVtb3ZlVW5kZXJzY29yZTxUIGV4dGVuZHMgc3RyaW5nPiA9IFQgZXh0ZW5kcyBcXGBcXCR7aW5mZXIgVX1fXFxgID8gVSA6IG5ldmVyO2A7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VHlwZUV4cHJlc3Npb24gPSBhc3luYyAoXG4gIGNvZGU6IHN0cmluZyxcbiAgcHJldHRpZXJPcHRpb25zPzogUHJldHRpZXJPcHRpb25zLFxuKSA9PiB7XG4gIHJldHVybiAoXG4gICAgYXdhaXQgZm9ybWF0KFxuICAgICAgYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fSA9ICR7Y29kZX1gLFxuICAgICAgcHJldHRpZXJPcHRpb25zID8/IHtcbiAgICAgICAgcGFyc2VyOiBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgc2VtaTogZmFsc2UsXG4gICAgICB9LFxuICAgIClcbiAgKVxuICAgIC50cmltKClcbiAgICAuc3Vic3RyaW5nKGB0eXBlICR7aWRlbnRpZmllclByZWZpeH0gPSBgLmxlbmd0aCk7XG59O1xuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVBdWdtZW50ZXJDb21waWxlckhvc3QgfSBmcm9tIFwiLi9hdWdtZW50ZXItY29tcGlsZXItaG9zdC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyB9IGZyb20gXCIuL2F1Z21lbnRlci1jb21waWxlci1ob3N0LmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVFeHBhbmRDb2RlQmxvY2ssXG4gIGZvcm1hdFR5cGVFeHByZXNzaW9uLFxufSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvci5qc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBPcHRpb25zIGFzIFByZXR0aWVyT3B0aW9ucyB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbi8qKlxuICogRmluZHMgdGhlIHJlc3VsdCB0eXBlIGlkZW50aWZpZXIgbm9kZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHR5cGUgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IHR5cGUgaWRlbnRpZmllciBub2RlLlxuICovXG5jb25zdCBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHRzLk5vZGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAobm9kZS5nZXRDaGlsZENvdW50KCkgPT0gMCkge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIHB1dCB0aGUgX188SURFTlRJRklFUj5fXyB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4gICAgLy8gZmlsZSwgd2UgY2FuIHJldHVybiB0aGUgZmlyc3QgaWRlbnRpZmllciB3ZSBmaW5kLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUpO1xufTtcblxuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZU9wdGlvbnNCYXNlID0ge1xuICAvKipcbiAgICogVGhlIHR5cGUgZXhwcmVzc2lvbiB0byBleHBhbmQuXG4gICAqIEBleGFtcGxlIFwiUmV0dXJuVHlwZTx0eXBlb2YgbXlGdW5jdGlvbj5cIlxuICAgKi9cbiAgdHlwZUV4cHJlc3Npb246IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb25zLlxuICAgKi9cbiAgdHNDb21waWxlck9wdGlvbnM/OiB0cy5Db21waWxlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFByZXR0aWVyIG9wdGlvbnMuXG4gICAqL1xuICBwcmV0dGlmeT86IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHByZXR0aWZ5IHRoZSBvdXRwdXQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFByZXR0aWVyIG9wdGlvbnMuIERvbid0IGZvcmdldCB0byBzZXQgdGhlIHBhcnNlciB0byBcInR5cGVzY3JpcHRcIi5cbiAgICAgKiBAZGVmYXVsdCB7IHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIsIHNlbWk6IGZhbHNlIH1cbiAgICAgKi9cbiAgICBvcHRpb25zPzogUHJldHRpZXJPcHRpb25zO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIHJlY29yZCBvZiBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgaW4gdGhlIGNvbXBpbGVyIGhvc3QuIFVzZWZ1bCBmb3IgbW9ja2luZ1xuICAgKi9cbiAgY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM/OiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zID0gRXhwYW5kVHlwZU9wdGlvbnNCYXNlICYge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgc291cmNlIHRleHQgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRNeVR5cGVPcHRpb25zID1cbiAgfCBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zXG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShcbiAgb3B0aW9uczogRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5cbi8qKlxuICogRXhwYW5kcyBhIFR5cGVTY3JpcHQgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhwYW5kZWQgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKG9wdGlvbnM6IEV4cGFuZE15VHlwZU9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZUV4cHJlc3Npb24udHJpbSgpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwibmV2ZXJcIjtcbiAgfVxuXG4gIGlmIChcInNvdXJjZVRleHRcIiBpbiBvcHRpb25zKSB7XG4gICAgY29uc3QgZHVtbXlGaWxlTmFtZSA9IFwiZXhwYW5kLW15LXR5cGUtZHVtbXkudHNcIjtcblxuICAgIHJldHVybiBleHBhbmRNeVR5cGUoe1xuICAgICAgc291cmNlRmlsZU5hbWU6IGR1bW15RmlsZU5hbWUsXG4gICAgICB0eXBlRXhwcmVzc2lvbjogb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICAgIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlYWRGaWxlKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgICBpZiAocGF0aC5iYXNlbmFtZShmaWxlTmFtZSkgPT09IGR1bW15RmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNvdXJjZVRleHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRzLnN5cy5yZWFkRmlsZShmaWxlTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHNDb21waWxlck9wdGlvbnM6IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMsXG4gICAgICBwcmV0dGlmeTogb3B0aW9ucy5wcmV0dGlmeSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkU291cmNlRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5zb3VyY2VGaWxlTmFtZSk7XG5cbiAgY29uc3QgdHNDb21waWxlck9wdGlvbnMgPSBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zID8/IHtcbiAgICBub0VtaXQ6IHRydWUsXG5cbiAgICBzdHJpY3ROdWxsQ2hlY2tzOiB0cnVlLFxuICAgIGFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHM6IHRydWUsXG4gICAgYWxsb3dBcmJpdHJhcnlFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SnM6IHRydWUsXG4gIH07XG5cbiAgaWYgKCF0c0NvbXBpbGVyT3B0aW9ucy5zdHJpY3ROdWxsQ2hlY2tzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3RyaWN0TnVsbENoZWNrcyBtdXN0IGJlIGVuYWJsZWQhXCIpO1xuICB9XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gY3JlYXRlQXVnbWVudGVyQ29tcGlsZXJIb3N0KFxuICAgIHJlc29sdmVkU291cmNlRmlsZU5hbWUsXG4gICAgY3JlYXRlRXhwYW5kQ29kZUJsb2NrKG9wdGlvbnMudHlwZUV4cHJlc3Npb24pLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIG9wdGlvbnMuY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMsXG4gICk7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oXG4gICAgW3Jlc29sdmVkU291cmNlRmlsZU5hbWVdLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIGNvbXBpbGVySG9zdCxcbiAgKTtcblxuICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJlc29sdmVkU291cmNlRmlsZU5hbWUpO1xuICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb3VyY2UgZmlsZSBub3QgZm91bmQhXCIpO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0SWRlbnRpZmllck5vZGUgPSBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUoc291cmNlRmlsZSk7XG4gIGlmICghcmVzdWx0SWRlbnRpZmllck5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBleHBhbmRlZFR5cGVTdHJpbmcgPSB0eXBlQ2hlY2tlci50eXBlVG9TdHJpbmcoXG4gICAgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24ocmVzdWx0SWRlbnRpZmllck5vZGUpLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0cy5UeXBlRm9ybWF0RmxhZ3MuTm9kZUJ1aWxkZXJGbGFnc01hc2ssXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMucHJldHRpZnkgJiYgb3B0aW9ucy5wcmV0dGlmeS5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBleHBhbmRlZFR5cGVTdHJpbmc7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0VHlwZUV4cHJlc3Npb24oZXhwYW5kZWRUeXBlU3RyaW5nLCBvcHRpb25zLnByZXR0aWZ5Py5vcHRpb25zKTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBZSxJQUFmO0FBa0JPLElBQU0sOEJBQThCLENBQ3pDLGdCQUNBLFdBQ0EsaUJBQ0Esa0NBQ0c7QUFBQSxFQUNILE1BQU0scUJBQXFCLDBCQUFHLG1CQUFtQixtQkFBbUIsQ0FBQyxHQUFHLElBQUk7QUFBQSxFQUM1RSxNQUFNLFlBQVksaUNBQWlDLENBQUM7QUFBQSxFQUVwRCxXQUFXLE9BQU8sT0FBTyxLQUFLLFNBQVMsR0FFcEM7QUFBQSxJQUNELE1BQU0sV0FBVyxVQUFVO0FBQUEsSUFFM0IsSUFBSSxVQUFVO0FBQUEsTUFDWCxtQkFBMEQsT0FDekQ7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBTSxtQkFBbUIsbUJBQW1CO0FBQUEsRUFFNUMsbUJBQW1CLFdBQVcsQ0FBQyxhQUFhO0FBQUEsSUFDMUMsTUFBTSxXQUFXLGlCQUFpQixRQUFRO0FBQUEsSUFFMUMsSUFBSSxhQUFhLFdBQVc7QUFBQSxNQUMxQixPQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsSUFBSSxhQUFhLGdCQUFnQjtBQUFBLE1BQy9CLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxPQUFPLEdBQUc7QUFBQSxFQUFjO0FBQUE7QUFBQSxFQUcxQixPQUFPO0FBQUE7OztBQ3JEYyxJQUF2QjtBQUVBLElBQU0sbUJBQW1CO0FBRWxCLElBQU0sd0JBQXdCLENBQUMsbUJBQTJCO0FBQUEsRUFFL0QsT0FBTyxRQUFRLDRCQUE0QiwwQkFBMEI7QUFBQSxXQUM1RCxnQ0FBZ0M7QUFBQTtBQUFBLFdBRWhDO0FBQUEsOERBQ21ELGlDQUFpQztBQUFBLCtDQUNoRDtBQUFBLGtEQUNHLHdDQUF3QztBQUFBO0FBQUEsV0FFL0Usb0dBQW9HO0FBQUE7QUFBQTtBQUFBLFdBR3BHLG9EQUFvRCxvQ0FBb0M7QUFBQSxXQUN4RjtBQUFBLFdBQ0E7QUFBQTtBQUdKLElBQU0sdUJBQXVCLE9BQ2xDLE1BQ0Esb0JBQ0c7QUFBQSxFQUNILFFBQ0UsTUFBTSx1QkFDSixRQUFRLHNCQUFzQixRQUM5QixtQkFBbUI7QUFBQSxJQUNqQixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUixDQUNGLEdBRUMsS0FBSyxFQUNMLFVBQVUsUUFBUSxzQkFBc0IsTUFBTTtBQUFBOzs7QUMvQmxDLElBQWpCO0FBRWUsSUFBZjtBQVFBLElBQU0sMkJBQTJCLENBQUMsU0FBdUM7QUFBQSxFQUN2RSxJQUFJLEtBQUssY0FBYyxLQUFLLEdBQUc7QUFBQSxJQUM3QixJQUFJLENBQUMsMkJBQUcsYUFBYSxJQUFJLEdBQUc7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFBQSxJQUlBLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxPQUFPLDJCQUFHLGFBQWEsTUFBTSx3QkFBd0I7QUFBQTtBQWlFdkQsZUFBc0IsWUFBWSxDQUFDLFNBQThCO0FBQUEsRUFDL0QsSUFBSSxRQUFRLGVBQWUsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUN4QyxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsSUFBSSxnQkFBZ0IsU0FBUztBQUFBLElBQzNCLE1BQU0sZ0JBQWdCO0FBQUEsSUFFdEIsT0FBTyxhQUFhO0FBQUEsTUFDbEIsZ0JBQWdCO0FBQUEsTUFDaEIsZ0JBQWdCLFFBQVE7QUFBQSxNQUN4QiwrQkFBK0I7QUFBQSxRQUM3QixRQUFRLENBQUMsVUFBa0I7QUFBQSxVQUN6QixJQUFJLHlCQUFLLFNBQVMsUUFBUSxNQUFNLGVBQWU7QUFBQSxZQUM3QyxPQUFPLFFBQVE7QUFBQSxVQUNqQjtBQUFBLFVBRUEsT0FBTywyQkFBRyxJQUFJLFNBQVMsUUFBUTtBQUFBO0FBQUEsTUFFbkM7QUFBQSxNQUNBLG1CQUFtQixRQUFRO0FBQUEsTUFDM0IsVUFBVSxRQUFRO0FBQUEsSUFDcEIsQ0FBQztBQUFBLEVBQ0g7QUFBQSxFQUVBLE1BQU0seUJBQXlCLHlCQUFLLFFBQVEsUUFBUSxjQUFjO0FBQUEsRUFFbEUsTUFBTSxvQkFBb0IsUUFBUSxxQkFBcUI7QUFBQSxJQUNyRCxRQUFRO0FBQUEsSUFFUixrQkFBa0I7QUFBQSxJQUNsQiw4QkFBOEI7QUFBQSxJQUM5QiwwQkFBMEI7QUFBQSxJQUMxQiw0QkFBNEI7QUFBQSxJQUM1QixTQUFTO0FBQUEsRUFDWDtBQUFBLEVBRUEsSUFBSSxDQUFDLGtCQUFrQixrQkFBa0I7QUFBQSxJQUN2QyxNQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFBQSxFQUNyRDtBQUFBLEVBRUEsTUFBTSxlQUFlLDRCQUNuQix3QkFDQSxzQkFBc0IsUUFBUSxjQUFjLEdBQzVDLG1CQUNBLFFBQVEsNkJBQ1Y7QUFBQSxFQUVBLE1BQU0sVUFBVSwyQkFBRyxjQUNqQixDQUFDLHNCQUFzQixHQUN2QixtQkFDQSxZQUNGO0FBQUEsRUFFQSxNQUFNLGFBQWEsUUFBUSxjQUFjLHNCQUFzQjtBQUFBLEVBQy9ELElBQUksQ0FBQyxZQUFZO0FBQUEsSUFDZixNQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxFQUMxQztBQUFBLEVBRUEsTUFBTSx1QkFBdUIseUJBQXlCLFVBQVU7QUFBQSxFQUNoRSxJQUFJLENBQUMsc0JBQXNCO0FBQUEsSUFDekIsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDbEM7QUFBQSxFQUVBLE1BQU0sY0FBYyxRQUFRLGVBQWU7QUFBQSxFQUMzQyxNQUFNLHFCQUFxQixZQUFZLGFBQ3JDLFlBQVksa0JBQWtCLG9CQUFvQixHQUNsRCxXQUNBLDJCQUFHLGdCQUFnQixvQkFDckI7QUFBQSxFQUVBLElBQUksUUFBUSxZQUFZLFFBQVEsU0FBUyxZQUFZLE9BQU87QUFBQSxJQUMxRCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsT0FBTyxxQkFBcUIsb0JBQW9CLFFBQVEsVUFBVSxPQUFPO0FBQUE7IiwKICAiZGVidWdJZCI6ICJGRDYxRDk1QTFCQjNBQzdGNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
224
+ //# debugId=914AF96172681B5164756E2164756E21
225
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9hdWdtZW50ZXItY29tcGlsZXItaG9zdC50cyIsICJzcmMvY29kZS1nZW5lcmF0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIGFzIEJpb21lQ29uZmlndXJhdGlvbiB9IGZyb20gXCJAYmlvbWVqcy93YXNtLW5vZGVqc1wiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICB0eXBlIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuICBjcmVhdGVBdWdtZW50ZXJDb21waWxlckhvc3QsXG59IGZyb20gXCIuL2F1Z21lbnRlci1jb21waWxlci1ob3N0LmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVFeHBhbmRDb2RlQmxvY2ssXG4gIGZvcm1hdFR5cGVFeHByZXNzaW9uLFxufSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvci5qc1wiO1xuXG4vKipcbiAqIEZpbmRzIHRoZSByZXN1bHQgdHlwZSBpZGVudGlmaWVyIG5vZGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3aGljaCB0eXBlIHR5cGUgc2hvdWxkIGJlIHNlYXJjaGVkLlxuICogQHJldHVybnMgVGhlIHJlc3VsdCB0eXBlIGlkZW50aWZpZXIgbm9kZS5cbiAqL1xuY29uc3QgZmluZFJlc3VsdElkZW50aWZpZXJOb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7XG4gICAgaWYgKCF0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gU2luY2Ugd2UgcHV0IHRoZSBfXzxJREVOVElGSUVSPl9fIHR5cGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBmaWxlLCB3ZSBjYW4gcmV0dXJuIHRoZSBmaXJzdCBpZGVudGlmaWVyIHdlIGZpbmQuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGZpbmRSZXN1bHRJZGVudGlmaWVyTm9kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBleHByZXNzaW9uIHRvIGV4cGFuZC5cbiAgICogQGV4YW1wbGUgXCJSZXR1cm5UeXBlPHR5cGVvZiBteUZ1bmN0aW9uPlwiXG4gICAqL1xuICB0eXBlRXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gICAqL1xuICB0c0NvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogUHJldHRpZnkgb3B0aW9ucy5cbiAgICovXG4gIHByZXR0aWZ5Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldHRpZnkgdGhlIG91dHB1dC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQmlvbWUgZm9ybWF0dGluZyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIGJpb21lT3B0aW9ucz86IEJpb21lQ29uZmlndXJhdGlvbjtcbiAgfTtcblxuICAvKipcbiAgICogQSByZWNvcmQgb2YgZnVuY3Rpb25zIHRvIG92ZXJyaWRlIGluIHRoZSBjb21waWxlciBob3N0LiBVc2VmdWwgZm9yIG1vY2tpbmdcbiAgICovXG4gIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzPzogQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMgPSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgJiB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHNvdXJjZSB0ZXh0IHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kTXlUeXBlT3B0aW9ucyA9XG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9uc1xuICB8IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKFxuICBvcHRpb25zOiBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIEV4cGFuZHMgYSBUeXBlU2NyaXB0IHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGV4cGFuZGVkIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShvcHRpb25zOiBFeHBhbmRNeVR5cGVPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGVFeHByZXNzaW9uLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBcIm5ldmVyXCI7XG4gIH1cblxuICBpZiAoXCJzb3VyY2VUZXh0XCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IGR1bW15RmlsZU5hbWUgPSBcImV4cGFuZC1teS10eXBlLWR1bW15LnRzXCI7XG5cbiAgICByZXR1cm4gZXhwYW5kTXlUeXBlKHtcbiAgICAgIHNvdXJjZUZpbGVOYW1lOiBkdW1teUZpbGVOYW1lLFxuICAgICAgdHlwZUV4cHJlc3Npb246IG9wdGlvbnMudHlwZUV4cHJlc3Npb24sXG4gICAgICBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlczoge1xuICAgICAgICByZWFkRmlsZShmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgICAgaWYgKHBhdGguYmFzZW5hbWUoZmlsZU5hbWUpID09PSBkdW1teUZpbGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zb3VyY2VUZXh0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0cy5zeXMucmVhZEZpbGUoZmlsZU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRzQ29tcGlsZXJPcHRpb25zOiBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zLFxuICAgICAgcHJldHRpZnk6IG9wdGlvbnMucHJldHRpZnksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMuc291cmNlRmlsZU5hbWUpO1xuXG4gIGNvbnN0IHRzQ29tcGlsZXJPcHRpb25zID0gb3B0aW9ucy50c0NvbXBpbGVyT3B0aW9ucyA/PyB7XG4gICAgbm9FbWl0OiB0cnVlLFxuXG4gICAgc3RyaWN0TnVsbENoZWNrczogdHJ1ZSxcbiAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLFxuICAgIGFsbG93QXJiaXRyYXJ5RXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICB9O1xuXG4gIGlmICghdHNDb21waWxlck9wdGlvbnMuc3RyaWN0TnVsbENoZWNrcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN0cmljdE51bGxDaGVja3MgbXVzdCBiZSBlbmFibGVkIVwiKTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBpbGVySG9zdCA9IGNyZWF0ZUF1Z21lbnRlckNvbXBpbGVySG9zdChcbiAgICByZXNvbHZlZFNvdXJjZUZpbGVOYW1lLFxuICAgIGNyZWF0ZUV4cGFuZENvZGVCbG9jayhvcHRpb25zLnR5cGVFeHByZXNzaW9uKSxcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBvcHRpb25zLmNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuICApO1xuXG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKFxuICAgIFtyZXNvbHZlZFNvdXJjZUZpbGVOYW1lXSxcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBjb21waWxlckhvc3QsXG4gICk7XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShyZXNvbHZlZFNvdXJjZUZpbGVOYW1lKTtcbiAgaWYgKCFzb3VyY2VGaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIGZpbGUgbm90IGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdElkZW50aWZpZXJOb2RlID0gZmluZFJlc3VsdElkZW50aWZpZXJOb2RlKHNvdXJjZUZpbGUpO1xuICBpZiAoIXJlc3VsdElkZW50aWZpZXJOb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBmb3VuZCFcIik7XG4gIH1cblxuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgZXhwYW5kZWRUeXBlU3RyaW5nID0gdHlwZUNoZWNrZXIudHlwZVRvU3RyaW5nKFxuICAgIHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHJlc3VsdElkZW50aWZpZXJOb2RlKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdHMuVHlwZUZvcm1hdEZsYWdzLk5vZGVCdWlsZGVyRmxhZ3NNYXNrLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnByZXR0aWZ5Py5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBleHBhbmRlZFR5cGVTdHJpbmc7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0VHlwZUV4cHJlc3Npb24oXG4gICAgZXhwYW5kZWRUeXBlU3RyaW5nLFxuICAgIG9wdGlvbnMucHJldHRpZnk/LmJpb21lT3B0aW9ucyxcbiAgKTtcbn1cbiIsCiAgICAiaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbnR5cGUgRXh0cmFjdEZ1bmN0aW9uczxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID0ge1xuICBbUCBpbiBLXTogRXh0cmFjdDxUW1BdLCAoLi4uYXJnczogbmV2ZXJbXSkgPT4gdW5rbm93bj47XG59O1xuZXhwb3J0IHR5cGUgQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgPSBQYXJ0aWFsPFxuICBFeHRyYWN0RnVuY3Rpb25zPHRzLkNvbXBpbGVySG9zdD5cbj47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgYXVnbWVudHMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSBmb3IgZXhwYW5kaW5nIGEgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VGaWxlTmFtZSBOYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBhdWdtZW50LlxuICogQHBhcmFtIGNvZGVUb0FkZCBUeXBlIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gY29tcGlsZXJPcHRpb25zIFR5cGVTY3JpcHQgY29tcGlsZXIgb3B0aW9ucy5cbiAqIEBwYXJhbSBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyBBIHJlY29yZCBvZiBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgaW4gdGhlIGNvbXBpbGVyIGhvc3QuIFVzZWZ1bCBmb3IgbW9ja2luZy5cbiAqIEByZXR1cm5zIEEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCByZXR1cm5zIGFuIGF1Z21lbnRlZCBzb3VyY2UgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQXVnbWVudGVyQ29tcGlsZXJIb3N0ID0gKFxuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nLFxuICBjb2RlVG9BZGQ6IHN0cmluZyxcbiAgY29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zLFxuICBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcz86IENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuKSA9PiB7XG4gIGNvbnN0IGN1c3RvbUNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMgPz8ge30sIHRydWUpO1xuICBjb25zdCBvdmVycmlkZXMgPSBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyA/PyB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvdmVycmlkZXMpIGFzIEFycmF5PFxuICAgIGtleW9mIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzXG4gID4pIHtcbiAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlc1trZXldO1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAoY3VzdG9tQ29tcGlsZXJIb3N0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPVxuICAgICAgICBvdmVycmlkZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbFJlYWRGaWxlID0gY3VzdG9tQ29tcGlsZXJIb3N0LnJlYWRGaWxlO1xuXG4gIGN1c3RvbUNvbXBpbGVySG9zdC5yZWFkRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gb3JpZ2luYWxSZWFkRmlsZShmaWxlTmFtZSk7XG5cbiAgICBpZiAoY29udGVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH1cblxuICAgIGlmIChmaWxlTmFtZSAhPT0gc291cmNlRmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiBjb250ZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y29kZVRvQWRkfVxcbiR7Y29udGVudHN9YDtcbiAgfTtcblxuICByZXR1cm4gY3VzdG9tQ29tcGlsZXJIb3N0O1xufTtcbiIsCiAgICAiaW1wb3J0IHsgQmlvbWUgfSBmcm9tIFwiQGJpb21lanMvanMtYXBpL25vZGVqc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIGFzIEJpb21lQ29uZmlndXJhdGlvbiB9IGZyb20gXCJAYmlvbWVqcy93YXNtLW5vZGVqc1wiO1xuXG5jb25zdCBpZGVudGlmaWVyUHJlZml4ID0gXCJfX0VYUEFORF9NWV9UWVBFX19cIjtcbmNvbnN0IHZpcnR1YWxGb3JtYXRGaWxlTmFtZSA9IFwiZXhwYW5kLW15LXR5cGUudHNcIjtcbmNvbnN0IGJpb21lID0gbmV3IEJpb21lKCk7XG5jb25zdCB7IHByb2plY3RLZXkgfSA9IGJpb21lLm9wZW5Qcm9qZWN0KCk7XG5cbmNvbnN0IGRlZmF1bHRCaW9tZUNvbmZpZ3VyYXRpb246IEJpb21lQ29uZmlndXJhdGlvbiA9IHtcbiAgZm9ybWF0dGVyOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBpbmRlbnRTdHlsZTogXCJzcGFjZVwiLFxuICB9LFxuICBqYXZhc2NyaXB0OiB7XG4gICAgZm9ybWF0dGVyOiB7XG4gICAgICBxdW90ZVN0eWxlOiBcImRvdWJsZVwiLFxuICAgICAgc2VtaWNvbG9uczogXCJhc05lZWRlZFwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRXhwYW5kQ29kZUJsb2NrID0gKHR5cGVFeHByZXNzaW9uOiBzdHJpbmcpID0+IHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvbWFpbi90ZXN0cy9jYXNlcy9jb21waWxlci9jb21wdXRlZFR5cGVzS2V5b2ZOb0luZGV4U2lnbmF0dXJlVHlwZS50c1xuICByZXR1cm4gYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fVJlc3VsdCA9ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8JHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24+O1xuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24gPSAke3R5cGVFeHByZXNzaW9ufTtcblxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUPiA9IFxuICAgICAgICBUIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyAoLi4uYXJnczogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxBPikgPT4gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxSPlxuICAgICAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPiA/IFByb21pc2U8JHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFR5cGVBcmd1bWVudDxVPj5cbiAgICAgIDogeyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyA/ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRTdHJpbmc8VFtLXT4gOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFRbS10+OyB9ICYge307XG5cbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRUeXBlQXJndW1lbnQ8VD4gPSBbVCAmIHt9XSBleHRlbmRzIFtuZXZlcl0gPyBUIDogVCAmIHt9IGV4dGVuZHMgdm9pZCA/IFQgOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFQgJiB7fT47XG5cbiAgICAvLyBGb3JjZXMgYSB1bmlvbiBvZiBzdHJpbmcgbGl0ZXJhbCB0eXBlcyB0byBiZSBleHBhbmRlZFxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFN0cmluZzxUIGV4dGVuZHMgc3RyaW5nPiA9ICR7aWRlbnRpZmllclByZWZpeH1SZW1vdmVVbmRlcnNjb3JlPCR7aWRlbnRpZmllclByZWZpeH1BcHBlbmRVbmRlcnNjb3JlPFQ+PjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1BcHBlbmRVbmRlcnNjb3JlPFQgZXh0ZW5kcyBzdHJpbmc+ID0gXFxgXFwke1R9X1xcYCBleHRlbmRzIHN0cmluZyA/IFxcYFxcJHtUfV9cXGAgOiBuZXZlcjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1SZW1vdmVVbmRlcnNjb3JlPFQgZXh0ZW5kcyBzdHJpbmc+ID0gVCBleHRlbmRzIFxcYFxcJHtpbmZlciBVfV9cXGAgPyBVIDogbmV2ZXI7YDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUeXBlRXhwcmVzc2lvbiA9IGFzeW5jIChcbiAgY29kZTogc3RyaW5nLFxuICBiaW9tZUNvbmZpZ3VyYXRpb24/OiBCaW9tZUNvbmZpZ3VyYXRpb24sXG4pID0+IHtcbiAgY29uc3QgaW5wdXQgPSBgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9ID0gJHtjb2RlfWA7XG4gIGNvbnN0IGphdmFzY3JpcHRGb3JtYXR0ZXIgPSB7XG4gICAgLi4uZGVmYXVsdEJpb21lQ29uZmlndXJhdGlvbi5qYXZhc2NyaXB0Py5mb3JtYXR0ZXIsXG4gICAgLi4uYmlvbWVDb25maWd1cmF0aW9uPy5qYXZhc2NyaXB0Py5mb3JtYXR0ZXIsXG4gIH07XG5cbiAgYmlvbWUuYXBwbHlDb25maWd1cmF0aW9uKHByb2plY3RLZXksIHtcbiAgICAuLi5kZWZhdWx0QmlvbWVDb25maWd1cmF0aW9uLFxuICAgIC4uLmJpb21lQ29uZmlndXJhdGlvbixcbiAgICBmb3JtYXR0ZXI6IHtcbiAgICAgIC4uLmRlZmF1bHRCaW9tZUNvbmZpZ3VyYXRpb24uZm9ybWF0dGVyLFxuICAgICAgLi4uYmlvbWVDb25maWd1cmF0aW9uPy5mb3JtYXR0ZXIsXG4gICAgfSxcbiAgICBqYXZhc2NyaXB0OiB7XG4gICAgICAuLi5kZWZhdWx0QmlvbWVDb25maWd1cmF0aW9uLmphdmFzY3JpcHQsXG4gICAgICAuLi5iaW9tZUNvbmZpZ3VyYXRpb24/LmphdmFzY3JpcHQsXG4gICAgICBmb3JtYXR0ZXI6IGphdmFzY3JpcHRGb3JtYXR0ZXIsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYmlvbWUuZm9ybWF0Q29udGVudChwcm9qZWN0S2V5LCBpbnB1dCwge1xuICAgIGZpbGVQYXRoOiB2aXJ0dWFsRm9ybWF0RmlsZU5hbWUsXG4gIH0pO1xuXG4gIGlmIChyZXN1bHQuZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGJpb21lLnByaW50RGlhZ25vc3RpY3MocmVzdWx0LmRpYWdub3N0aWNzLCB7XG4gICAgICAgIGZpbGVQYXRoOiB2aXJ0dWFsRm9ybWF0RmlsZU5hbWUsXG4gICAgICAgIGZpbGVTb3VyY2U6IGlucHV0LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuY29udGVudC50cmltKCkuc3Vic3RyaW5nKGB0eXBlICR7aWRlbnRpZmllclByZWZpeH0gPSBgLmxlbmd0aCk7XG59O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUIsSUFBakI7QUFFZSxJQUFmOzs7QUNGZSxJQUFmO0FBa0JPLElBQU0sOEJBQThCLENBQ3pDLGdCQUNBLFdBQ0EsaUJBQ0Esa0NBQ0c7QUFBQSxFQUNILE1BQU0scUJBQXFCLDBCQUFHLG1CQUFtQixtQkFBbUIsQ0FBQyxHQUFHLElBQUk7QUFBQSxFQUM1RSxNQUFNLFlBQVksaUNBQWlDLENBQUM7QUFBQSxFQUVwRCxXQUFXLE9BQU8sT0FBTyxLQUFLLFNBQVMsR0FFcEM7QUFBQSxJQUNELE1BQU0sV0FBVyxVQUFVO0FBQUEsSUFFM0IsSUFBSSxVQUFVO0FB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LGdCQUFnQixRQUFRO0FBQUEsTUFDeEIsK0JBQStCO0FBQUEsUUFDN0IsUUFBUSxDQUFDLFVBQWtCO0FBQUEsVUFDekIsSUFBSSx5QkFBSyxTQUFTLFFBQVEsTUFBTSxlQUFlO0FBQUEsWUFDN0MsT0FBTyxRQUFRO0FBQUEsVUFDakI7QUFBQSxVQUVBLE9BQU8sMkJBQUcsSUFBSSxTQUFTLFFBQVE7QUFBQTtBQUFBLE1BRW5DO0FBQUEsTUFDQSxtQkFBbUIsUUFBUTtBQUFBLE1BQzNCLFVBQVUsUUFBUTtBQUFBLElBQ3BCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxNQUFNLHlCQUF5Qix5QkFBSyxRQUFRLFFBQVEsY0FBYztBQUFBLEVBRWxFLE1BQU0sb0JBQW9CLFFBQVEscUJBQXFCO0FBQUEsSUFDckQsUUFBUTtBQUFBLElBRVIsa0JBQWtCO0FBQUEsSUFDbEIsOEJBQThCO0FBQUEsSUFDOUIsMEJBQTBCO0FBQUEsSUFDMUIsNEJBQTRCO0FBQUEsSUFDNUIsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUVBLElBQUksQ0FBQyxrQkFBa0Isa0JBQWtCO0FBQUEsSUFDdkMsTUFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsRUFDckQ7QUFBQSxFQUVBLE1BQU0sZUFBZSw0QkFDbkIsd0JBQ0Esc0JBQXNCLFFBQVEsY0FBYyxHQUM1QyxtQkFDQSxRQUFRLDZCQUNWO0FBQUEsRUFFQSxNQUFNLFVBQVUsMkJBQUcsY0FDakIsQ0FBQyxzQkFBc0IsR0FDdkIsbUJBQ0EsWUFDRjtBQUFBLEVBRUEsTUFBTSxhQUFhLFFBQVEsY0FBYyxzQkFBc0I7QUFBQSxFQUMvRCxJQUFJLENBQUMsWUFBWTtBQUFBLElBQ2YsTUFBTSxJQUFJLE1BQU0sd0JBQXdCO0FBQUEsRUFDMUM7QUFBQSxFQUVBLE1BQU0sdUJBQXVCLHlCQUF5QixVQUFVO0FBQUEsRUFDaEUsSUFBSSxDQUFDLHNCQUFzQjtBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxNQUFNLGNBQWMsUUFBUSxlQUFlO0FBQUEsRUFDM0MsTUFBTSxxQkFBcUIsWUFBWSxhQUNyQyxZQUFZLGtCQUFrQixvQkFBb0IsR0FDbEQsV0FDQSwyQkFBRyxnQkFBZ0Isb0JBQ3JCO0FBQUEsRUFFQSxJQUFJLFFBQVEsVUFBVSxZQUFZLE9BQU87QUFBQSxJQUN2QyxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsT0FBTyxxQkFDTCxvQkFDQSxRQUFRLFVBQVUsWUFDcEI7QUFBQTsiLAogICJkZWJ1Z0lkIjogIjkxNEFGOTYxNzI2ODFCNTE2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { type CompilerHostFunctionOverrides } from "./augmenter-compiler-host.js";
2
- import type { Options as PrettierOptions } from "prettier";
1
+ import type { Configuration as BiomeConfiguration } from "@biomejs/wasm-nodejs";
3
2
  import ts from "typescript";
3
+ import { type CompilerHostFunctionOverrides } from "./augmenter-compiler-host.js";
4
4
  export type ExpandTypeOptionsBase = {
5
5
  /**
6
6
  * The type expression to expand.
@@ -12,7 +12,7 @@ export type ExpandTypeOptionsBase = {
12
12
  */
13
13
  tsCompilerOptions?: ts.CompilerOptions;
14
14
  /**
15
- * Prettier options.
15
+ * Prettify options.
16
16
  */
17
17
  prettify?: {
18
18
  /**
@@ -21,10 +21,9 @@ export type ExpandTypeOptionsBase = {
21
21
  */
22
22
  enabled?: boolean;
23
23
  /**
24
- * Prettier options. Don't forget to set the parser to "typescript".
25
- * @default { parser: "typescript", semi: false }
24
+ * Biome formatting configuration.
26
25
  */
27
- options?: PrettierOptions;
26
+ biomeOptions?: BiomeConfiguration;
28
27
  };
29
28
  /**
30
29
  * A record of functions to override in the compiler host. Useful for mocking
package/dist/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ // src/index.ts
2
+ import path from "node:path";
3
+ import ts2 from "typescript";
4
+
1
5
  // src/augmenter-compiler-host.ts
2
6
  import ts from "typescript";
3
7
  var createAugmenterCompilerHost = (sourceFileName, codeToAdd, compilerOptions, compilerHostFunctionOverrides) => {
@@ -25,8 +29,23 @@ ${contents}`;
25
29
  };
26
30
 
27
31
  // src/code-generator.ts
28
- import { format } from "prettier";
32
+ import { Biome } from "@biomejs/js-api/nodejs";
29
33
  var identifierPrefix = "__EXPAND_MY_TYPE__";
34
+ var virtualFormatFileName = "expand-my-type.ts";
35
+ var biome = new Biome;
36
+ var { projectKey } = biome.openProject();
37
+ var defaultBiomeConfiguration = {
38
+ formatter: {
39
+ enabled: true,
40
+ indentStyle: "space"
41
+ },
42
+ javascript: {
43
+ formatter: {
44
+ quoteStyle: "double",
45
+ semicolons: "asNeeded"
46
+ }
47
+ }
48
+ };
30
49
  var createExpandCodeBlock = (typeExpression) => {
31
50
  return `type ${identifierPrefix}Result = ${identifierPrefix}Expand<${identifierPrefix}Expression>;
32
51
  type ${identifierPrefix}Expression = ${typeExpression};
@@ -43,18 +62,40 @@ var createExpandCodeBlock = (typeExpression) => {
43
62
  type ${identifierPrefix}AppendUnderscore<T extends string> = \`\${T}_\` extends string ? \`\${T}_\` : never;
44
63
  type ${identifierPrefix}RemoveUnderscore<T extends string> = T extends \`\${infer U}_\` ? U : never;`;
45
64
  };
46
- var formatTypeExpression = async (code, prettierOptions) => {
47
- return (await format(`type ${identifierPrefix} = ${code}`, prettierOptions ?? {
48
- parser: "typescript",
49
- semi: false
50
- })).trim().substring(`type ${identifierPrefix} = `.length);
65
+ var formatTypeExpression = async (code, biomeConfiguration) => {
66
+ const input = `type ${identifierPrefix} = ${code}`;
67
+ const javascriptFormatter = {
68
+ ...defaultBiomeConfiguration.javascript?.formatter,
69
+ ...biomeConfiguration?.javascript?.formatter
70
+ };
71
+ biome.applyConfiguration(projectKey, {
72
+ ...defaultBiomeConfiguration,
73
+ ...biomeConfiguration,
74
+ formatter: {
75
+ ...defaultBiomeConfiguration.formatter,
76
+ ...biomeConfiguration?.formatter
77
+ },
78
+ javascript: {
79
+ ...defaultBiomeConfiguration.javascript,
80
+ ...biomeConfiguration?.javascript,
81
+ formatter: javascriptFormatter
82
+ }
83
+ });
84
+ const result = biome.formatContent(projectKey, input, {
85
+ filePath: virtualFormatFileName
86
+ });
87
+ if (result.diagnostics.length > 0) {
88
+ throw new Error(biome.printDiagnostics(result.diagnostics, {
89
+ filePath: virtualFormatFileName,
90
+ fileSource: input
91
+ }));
92
+ }
93
+ return result.content.trim().substring(`type ${identifierPrefix} = `.length);
51
94
  };
52
95
 
53
96
  // src/index.ts
54
- import path from "node:path";
55
- import ts2 from "typescript";
56
97
  var findResultIdentifierNode = (node) => {
57
- if (node.getChildCount() == 0) {
98
+ if (node.getChildCount() === 0) {
58
99
  if (!ts2.isIdentifier(node)) {
59
100
  return;
60
101
  }
@@ -107,14 +148,14 @@ async function expandMyType(options) {
107
148
  }
108
149
  const typeChecker = program.getTypeChecker();
109
150
  const expandedTypeString = typeChecker.typeToString(typeChecker.getTypeAtLocation(resultIdentifierNode), undefined, ts2.TypeFormatFlags.NodeBuilderFlagsMask);
110
- if (options.prettify && options.prettify.enabled === false) {
151
+ if (options.prettify?.enabled === false) {
111
152
  return expandedTypeString;
112
153
  }
113
- return formatTypeExpression(expandedTypeString, options.prettify?.options);
154
+ return formatTypeExpression(expandedTypeString, options.prettify?.biomeOptions);
114
155
  }
115
156
  export {
116
157
  expandMyType
117
158
  };
118
159
 
119
- //# debugId=FA40E2FF4FF7499A64756E2164756E21
120
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2F1Z21lbnRlci1jb21waWxlci1ob3N0LnRzIiwgIi4uL3NyYy9jb2RlLWdlbmVyYXRvci50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbnR5cGUgRXh0cmFjdEZ1bmN0aW9uczxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID0ge1xuICBbUCBpbiBLXTogVFtQXSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gVFtQXSA6IG5ldmVyO1xufTtcbmV4cG9ydCB0eXBlIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzID0gUGFydGlhbDxcbiAgRXh0cmFjdEZ1bmN0aW9uczx0cy5Db21waWxlckhvc3Q+XG4+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gY29tcGlsZXIgaG9zdCB0aGF0IGF1Z21lbnRzIHRoZSBzcGVjaWZpZWQgc291cmNlIGZpbGUgZm9yIGV4cGFuZGluZyBhIHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gc291cmNlRmlsZU5hbWUgTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gYXVnbWVudC5cbiAqIEBwYXJhbSBjb2RlVG9BZGQgVHlwZSBleHByZXNzaW9uLlxuICogQHBhcmFtIGNvbXBpbGVyT3B0aW9ucyBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gKiBAcGFyYW0gY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgQSByZWNvcmQgb2YgZnVuY3Rpb25zIHRvIG92ZXJyaWRlIGluIHRoZSBjb21waWxlciBob3N0LiBVc2VmdWwgZm9yIG1vY2tpbmcuXG4gKiBAcmV0dXJucyBBIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgcmV0dXJucyBhbiBhdWdtZW50ZWQgc291cmNlIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBleHBhbmQgdGhlIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUF1Z21lbnRlckNvbXBpbGVySG9zdCA9IChcbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZyxcbiAgY29kZVRvQWRkOiBzdHJpbmcsXG4gIGNvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM/OiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyxcbikgPT4ge1xuICBjb25zdCBjdXN0b21Db21waWxlckhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3QoY29tcGlsZXJPcHRpb25zID8/IHt9LCB0cnVlKTtcbiAgY29uc3Qgb3ZlcnJpZGVzID0gY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgPz8ge307XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob3ZlcnJpZGVzKSBhcyBBcnJheTxcbiAgICBrZXlvZiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlc1xuICA+KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBvdmVycmlkZXNba2V5XTtcblxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgKGN1c3RvbUNvbXBpbGVySG9zdCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID1cbiAgICAgICAgb3ZlcnJpZGU7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxSZWFkRmlsZSA9IGN1c3RvbUNvbXBpbGVySG9zdC5yZWFkRmlsZTtcblxuICBjdXN0b21Db21waWxlckhvc3QucmVhZEZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IG9yaWdpbmFsUmVhZEZpbGUoZmlsZU5hbWUpO1xuXG4gICAgaWYgKGNvbnRlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb250ZW50cztcbiAgICB9XG5cbiAgICBpZiAoZmlsZU5hbWUgIT09IHNvdXJjZUZpbGVOYW1lKSB7XG4gICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2NvZGVUb0FkZH1cXG4ke2NvbnRlbnRzfWA7XG4gIH07XG5cbiAgcmV0dXJuIGN1c3RvbUNvbXBpbGVySG9zdDtcbn07XG4iLAogICAgImltcG9ydCB0eXBlIHsgT3B0aW9ucyBhcyBQcmV0dGllck9wdGlvbnMgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJwcmV0dGllclwiO1xuXG5jb25zdCBpZGVudGlmaWVyUHJlZml4ID0gXCJfX0VYUEFORF9NWV9UWVBFX19cIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGFuZENvZGVCbG9jayA9ICh0eXBlRXhwcmVzc2lvbjogc3RyaW5nKSA9PiB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9ibG9iL21haW4vdGVzdHMvY2FzZXMvY29tcGlsZXIvY29tcHV0ZWRUeXBlc0tleW9mTm9JbmRleFNpZ25hdHVyZVR5cGUudHNcbiAgcmV0dXJuIGB0eXBlICR7aWRlbnRpZmllclByZWZpeH1SZXN1bHQgPSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPCR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uPjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uID0gJHt0eXBlRXhwcmVzc2lvbn07XG5cbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8VD4gPSBcbiAgICAgICAgVCBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSID8gKC4uLmFyZ3M6ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8QT4pID0+ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8Uj5cbiAgICAgIDogVCBleHRlbmRzIFByb21pc2U8aW5mZXIgVT4gPyBQcm9taXNlPCR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRUeXBlQXJndW1lbnQ8VT4+XG4gICAgICA6IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBzdHJpbmcgPyAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kU3RyaW5nPFRbS10+IDogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUW0tdPjsgfSAmIHt9O1xuXG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kVHlwZUFyZ3VtZW50PFQ+ID0gW1QgJiB7fV0gZXh0ZW5kcyBbbmV2ZXJdID8gVCA6IFQgJiB7fSBleHRlbmRzIHZvaWQgPyBUIDogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUICYge30+O1xuXG4gICAgLy8gRm9yY2VzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWwgdHlwZXMgdG8gYmUgZXhwYW5kZWRcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRTdHJpbmc8VCBleHRlbmRzIHN0cmluZz4gPSAke2lkZW50aWZpZXJQcmVmaXh9UmVtb3ZlVW5kZXJzY29yZTwke2lkZW50aWZpZXJQcmVmaXh9QXBwZW5kVW5kZXJzY29yZTxUPj47XG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9QXBwZW5kVW5kZXJzY29yZTxUIGV4dGVuZHMgc3RyaW5nPiA9IFxcYFxcJHtUfV9cXGAgZXh0ZW5kcyBzdHJpbmcgPyBcXGBcXCR7VH1fXFxgIDogbmV2ZXI7XG4gICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9UmVtb3ZlVW5kZXJzY29yZTxUIGV4dGVuZHMgc3RyaW5nPiA9IFQgZXh0ZW5kcyBcXGBcXCR7aW5mZXIgVX1fXFxgID8gVSA6IG5ldmVyO2A7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VHlwZUV4cHJlc3Npb24gPSBhc3luYyAoXG4gIGNvZGU6IHN0cmluZyxcbiAgcHJldHRpZXJPcHRpb25zPzogUHJldHRpZXJPcHRpb25zLFxuKSA9PiB7XG4gIHJldHVybiAoXG4gICAgYXdhaXQgZm9ybWF0KFxuICAgICAgYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fSA9ICR7Y29kZX1gLFxuICAgICAgcHJldHRpZXJPcHRpb25zID8/IHtcbiAgICAgICAgcGFyc2VyOiBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgc2VtaTogZmFsc2UsXG4gICAgICB9LFxuICAgIClcbiAgKVxuICAgIC50cmltKClcbiAgICAuc3Vic3RyaW5nKGB0eXBlICR7aWRlbnRpZmllclByZWZpeH0gPSBgLmxlbmd0aCk7XG59O1xuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVBdWdtZW50ZXJDb21waWxlckhvc3QgfSBmcm9tIFwiLi9hdWdtZW50ZXItY29tcGlsZXItaG9zdC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyB9IGZyb20gXCIuL2F1Z21lbnRlci1jb21waWxlci1ob3N0LmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVFeHBhbmRDb2RlQmxvY2ssXG4gIGZvcm1hdFR5cGVFeHByZXNzaW9uLFxufSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvci5qc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBPcHRpb25zIGFzIFByZXR0aWVyT3B0aW9ucyB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbi8qKlxuICogRmluZHMgdGhlIHJlc3VsdCB0eXBlIGlkZW50aWZpZXIgbm9kZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHR5cGUgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IHR5cGUgaWRlbnRpZmllciBub2RlLlxuICovXG5jb25zdCBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHRzLk5vZGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAobm9kZS5nZXRDaGlsZENvdW50KCkgPT0gMCkge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIHB1dCB0aGUgX188SURFTlRJRklFUj5fXyB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4gICAgLy8gZmlsZSwgd2UgY2FuIHJldHVybiB0aGUgZmlyc3QgaWRlbnRpZmllciB3ZSBmaW5kLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUpO1xufTtcblxuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZU9wdGlvbnNCYXNlID0ge1xuICAvKipcbiAgICogVGhlIHR5cGUgZXhwcmVzc2lvbiB0byBleHBhbmQuXG4gICAqIEBleGFtcGxlIFwiUmV0dXJuVHlwZTx0eXBlb2YgbXlGdW5jdGlvbj5cIlxuICAgKi9cbiAgdHlwZUV4cHJlc3Npb246IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb25zLlxuICAgKi9cbiAgdHNDb21waWxlck9wdGlvbnM/OiB0cy5Db21waWxlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFByZXR0aWVyIG9wdGlvbnMuXG4gICAqL1xuICBwcmV0dGlmeT86IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHByZXR0aWZ5IHRoZSBvdXRwdXQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFByZXR0aWVyIG9wdGlvbnMuIERvbid0IGZvcmdldCB0byBzZXQgdGhlIHBhcnNlciB0byBcInR5cGVzY3JpcHRcIi5cbiAgICAgKiBAZGVmYXVsdCB7IHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIsIHNlbWk6IGZhbHNlIH1cbiAgICAgKi9cbiAgICBvcHRpb25zPzogUHJldHRpZXJPcHRpb25zO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIHJlY29yZCBvZiBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgaW4gdGhlIGNvbXBpbGVyIGhvc3QuIFVzZWZ1bCBmb3IgbW9ja2luZ1xuICAgKi9cbiAgY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM/OiBDb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zID0gRXhwYW5kVHlwZU9wdGlvbnNCYXNlICYge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgc291cmNlIHRleHQgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRNeVR5cGVPcHRpb25zID1cbiAgfCBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zXG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShcbiAgb3B0aW9uczogRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5cbi8qKlxuICogRXhwYW5kcyBhIFR5cGVTY3JpcHQgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhwYW5kZWQgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKG9wdGlvbnM6IEV4cGFuZE15VHlwZU9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZUV4cHJlc3Npb24udHJpbSgpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwibmV2ZXJcIjtcbiAgfVxuXG4gIGlmIChcInNvdXJjZVRleHRcIiBpbiBvcHRpb25zKSB7XG4gICAgY29uc3QgZHVtbXlGaWxlTmFtZSA9IFwiZXhwYW5kLW15LXR5cGUtZHVtbXkudHNcIjtcblxuICAgIHJldHVybiBleHBhbmRNeVR5cGUoe1xuICAgICAgc291cmNlRmlsZU5hbWU6IGR1bW15RmlsZU5hbWUsXG4gICAgICB0eXBlRXhwcmVzc2lvbjogb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICAgIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlYWRGaWxlKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgICBpZiAocGF0aC5iYXNlbmFtZShmaWxlTmFtZSkgPT09IGR1bW15RmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNvdXJjZVRleHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRzLnN5cy5yZWFkRmlsZShmaWxlTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHNDb21waWxlck9wdGlvbnM6IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMsXG4gICAgICBwcmV0dGlmeTogb3B0aW9ucy5wcmV0dGlmeSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkU291cmNlRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5zb3VyY2VGaWxlTmFtZSk7XG5cbiAgY29uc3QgdHNDb21waWxlck9wdGlvbnMgPSBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zID8/IHtcbiAgICBub0VtaXQ6IHRydWUsXG5cbiAgICBzdHJpY3ROdWxsQ2hlY2tzOiB0cnVlLFxuICAgIGFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHM6IHRydWUsXG4gICAgYWxsb3dBcmJpdHJhcnlFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SnM6IHRydWUsXG4gIH07XG5cbiAgaWYgKCF0c0NvbXBpbGVyT3B0aW9ucy5zdHJpY3ROdWxsQ2hlY2tzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3RyaWN0TnVsbENoZWNrcyBtdXN0IGJlIGVuYWJsZWQhXCIpO1xuICB9XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gY3JlYXRlQXVnbWVudGVyQ29tcGlsZXJIb3N0KFxuICAgIHJlc29sdmVkU291cmNlRmlsZU5hbWUsXG4gICAgY3JlYXRlRXhwYW5kQ29kZUJsb2NrKG9wdGlvbnMudHlwZUV4cHJlc3Npb24pLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIG9wdGlvbnMuY29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMsXG4gICk7XG5cbiAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oXG4gICAgW3Jlc29sdmVkU291cmNlRmlsZU5hbWVdLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIGNvbXBpbGVySG9zdCxcbiAgKTtcblxuICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJlc29sdmVkU291cmNlRmlsZU5hbWUpO1xuICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb3VyY2UgZmlsZSBub3QgZm91bmQhXCIpO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0SWRlbnRpZmllck5vZGUgPSBmaW5kUmVzdWx0SWRlbnRpZmllck5vZGUoc291cmNlRmlsZSk7XG4gIGlmICghcmVzdWx0SWRlbnRpZmllck5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBleHBhbmRlZFR5cGVTdHJpbmcgPSB0eXBlQ2hlY2tlci50eXBlVG9TdHJpbmcoXG4gICAgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24ocmVzdWx0SWRlbnRpZmllck5vZGUpLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0cy5UeXBlRm9ybWF0RmxhZ3MuTm9kZUJ1aWxkZXJGbGFnc01hc2ssXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMucHJldHRpZnkgJiYgb3B0aW9ucy5wcmV0dGlmeS5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBleHBhbmRlZFR5cGVTdHJpbmc7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0VHlwZUV4cHJlc3Npb24oZXhwYW5kZWRUeXBlU3RyaW5nLCBvcHRpb25zLnByZXR0aWZ5Py5vcHRpb25zKTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFBQTtBQWtCTyxJQUFNLDhCQUE4QixDQUN6QyxnQkFDQSxXQUNBLGlCQUNBLGtDQUNHO0FBQUEsRUFDSCxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixtQkFBbUIsQ0FBQyxHQUFHLElBQUk7QUFBQSxFQUM1RSxNQUFNLFlBQVksaUNBQWlDLENBQUM7QUFBQSxFQUVwRCxXQUFXLE9BQU8sT0FBTyxLQUFLLFNBQVMsR0FFcEM7QUFBQSxJQUNELE1BQU0sV0FBVyxVQUFVO0FBQUEsSUFFM0IsSUFBSSxVQUFVO0FBQUEsTUFDWCxtQkFBMEQsT0FDekQ7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBTSxtQkFBbUIsbUJBQW1CO0FBQUEsRUFFNUMsbUJBQW1CLFdBQVcsQ0FBQyxhQUFhO0FBQUEsSUFDMUMsTUFBTSxXQUFXLGlCQUFpQixRQUFRO0FBQUEsSUFFMUMsSUFBSSxhQUFhLFdBQVc7QUFBQSxNQUMxQixPQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsSUFBSSxhQUFhLGdCQUFnQjtBQUFBLE1BQy9CLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxPQUFPLEdBQUc7QUFBQSxFQUFjO0FBQUE7QUFBQSxFQUcxQixPQUFPO0FBQUE7OztBQ3JEVDtBQUVBLElBQU0sbUJBQW1CO0FBRWxCLElBQU0sd0JBQXdCLENBQUMsbUJBQTJCO0FBQUEsRUFFL0QsT0FBTyxRQUFRLDRCQUE0QiwwQkFBMEI7QUFBQSxXQUM1RCxnQ0FBZ0M7QUFBQTtBQUFBLFdBRWhDO0FBQUEsOERBQ21ELGlDQUFpQztBQUFBLCtDQUNoRDtBQUFBLGtEQUNHLHdDQUF3QztBQUFBO0FBQUEsV0FFL0Usb0dBQW9HO0FBQUE7QUFBQTtBQUFBLFdBR3BHLG9EQUFvRCxvQ0FBb0M7QUFBQSxXQUN4RjtBQUFBLFdBQ0E7QUFBQTtBQUdKLElBQU0sdUJBQXVCLE9BQ2xDLE1BQ0Esb0JBQ0c7QUFBQSxFQUNILFFBQ0UsTUFBTSxPQUNKLFFBQVEsc0JBQXNCLFFBQzlCLG1CQUFtQjtBQUFBLElBQ2pCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNSLENBQ0YsR0FFQyxLQUFLLEVBQ0wsVUFBVSxRQUFRLHNCQUFzQixNQUFNO0FBQUE7OztBQy9CbkQ7QUFFQTtBQVFBLElBQU0sMkJBQTJCLENBQUMsU0FBdUM7QUFBQSxFQUN2RSxJQUFJLEtBQUssY0FBYyxLQUFLLEdBQUc7QUFBQSxJQUM3QixJQUFJLENBQUMsSUFBRyxhQUFhLElBQUksR0FBRztBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUFBLElBSUEsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLE9BQU8sSUFBRyxhQUFhLE1BQU0sd0JBQXdCO0FBQUE7QUFpRXZELGVBQXNCLFlBQVksQ0FBQyxTQUE4QjtBQUFBLEVBQy9ELElBQUksUUFBUSxlQUFlLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDeEMsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLElBQUksZ0JBQWdCLFNBQVM7QUFBQSxJQUMzQixNQUFNLGdCQUFnQjtBQUFBLElBRXRCLE9BQU8sYUFBYTtBQUFBLE1BQ2xCLGdCQUFnQjtBQUFBLE1BQ2hCLGdCQUFnQixRQUFRO0FBQUEsTUFDeEIsK0JBQStCO0FBQUEsUUFDN0IsUUFBUSxDQUFDLFVBQWtCO0FBQUEsVUFDekIsSUFBSSxLQUFLLFNBQVMsUUFBUSxNQUFNLGVBQWU7QUFBQSxZQUM3QyxPQUFPLFFBQVE7QUFBQSxVQUNqQjtBQUFBLFVBRUEsT0FBTyxJQUFHLElBQUksU0FBUyxRQUFRO0FBQUE7QUFBQSxNQUVuQztBQUFBLE1BQ0EsbUJBQW1CLFFBQVE7QUFBQSxNQUMzQixVQUFVLFFBQVE7QUFBQSxJQUNwQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsTUFBTSx5QkFBeUIsS0FBSyxRQUFRLFFBQVEsY0FBYztBQUFBLEVBRWxFLE1BQU0sb0JBQW9CLFFBQVEscUJBQXFCO0FBQUEsSUFDckQsUUFBUTtBQUFBLElBRVIsa0JBQWtCO0FBQUEsSUFDbEIsOEJBQThCO0FBQUEsSUFDOUIsMEJBQTBCO0FBQUEsSUFDMUIsNEJBQTRCO0FBQUEsSUFDNUIsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUVBLElBQUksQ0FBQyxrQkFBa0Isa0JBQWtCO0FBQUEsSUFDdkMsTUFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsRUFDckQ7QUFBQSxFQUVBLE1BQU0sZUFBZSw0QkFDbkIsd0JBQ0Esc0JBQXNCLFFBQVEsY0FBYyxHQUM1QyxtQkFDQSxRQUFRLDZCQUNWO0FBQUEsRUFFQSxNQUFNLFVBQVUsSUFBRyxjQUNqQixDQUFDLHNCQUFzQixHQUN2QixtQkFDQSxZQUNGO0FBQUEsRUFFQSxNQUFNLGFBQWEsUUFBUSxjQUFjLHNCQUFzQjtBQUFBLEVBQy9ELElBQUksQ0FBQyxZQUFZO0FBQUEsSUFDZixNQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxFQUMxQztBQUFBLEVBRUEsTUFBTSx1QkFBdUIseUJBQXlCLFVBQVU7QUFBQSxFQUNoRSxJQUFJLENBQUMsc0JBQXNCO0FBQUEsSUFDekIsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDbEM7QUFBQSxFQUVBLE1BQU0sY0FBYyxRQUFRLGVBQWU7QUFBQSxFQUMzQyxNQUFNLHFCQUFxQixZQUFZLGFBQ3JDLFlBQVksa0JBQWtCLG9CQUFvQixHQUNsRCxXQUNBLElBQUcsZ0JBQWdCLG9CQUNyQjtBQUFBLEVBRUEsSUFBSSxRQUFRLFlBQVksUUFBUSxTQUFTLFlBQVksT0FBTztBQUFBLElBQzFELE9BQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxPQUFPLHFCQUFxQixvQkFBb0IsUUFBUSxVQUFVLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIkZBNDBFMkZGNEZGNzQ5OUE2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
160
+ //# debugId=A899C07794769D2464756E2164756E21
161
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9hdWdtZW50ZXItY29tcGlsZXItaG9zdC50cyIsICIuLi9zcmMvY29kZS1nZW5lcmF0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIGFzIEJpb21lQ29uZmlndXJhdGlvbiB9IGZyb20gXCJAYmlvbWVqcy93YXNtLW5vZGVqc1wiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICB0eXBlIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuICBjcmVhdGVBdWdtZW50ZXJDb21waWxlckhvc3QsXG59IGZyb20gXCIuL2F1Z21lbnRlci1jb21waWxlci1ob3N0LmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVFeHBhbmRDb2RlQmxvY2ssXG4gIGZvcm1hdFR5cGVFeHByZXNzaW9uLFxufSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvci5qc1wiO1xuXG4vKipcbiAqIEZpbmRzIHRoZSByZXN1bHQgdHlwZSBpZGVudGlmaWVyIG5vZGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3aGljaCB0eXBlIHR5cGUgc2hvdWxkIGJlIHNlYXJjaGVkLlxuICogQHJldHVybnMgVGhlIHJlc3VsdCB0eXBlIGlkZW50aWZpZXIgbm9kZS5cbiAqL1xuY29uc3QgZmluZFJlc3VsdElkZW50aWZpZXJOb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7XG4gICAgaWYgKCF0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gU2luY2Ugd2UgcHV0IHRoZSBfXzxJREVOVElGSUVSPl9fIHR5cGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBmaWxlLCB3ZSBjYW4gcmV0dXJuIHRoZSBmaXJzdCBpZGVudGlmaWVyIHdlIGZpbmQuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGZpbmRSZXN1bHRJZGVudGlmaWVyTm9kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBleHByZXNzaW9uIHRvIGV4cGFuZC5cbiAgICogQGV4YW1wbGUgXCJSZXR1cm5UeXBlPHR5cGVvZiBteUZ1bmN0aW9uPlwiXG4gICAqL1xuICB0eXBlRXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gICAqL1xuICB0c0NvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogUHJldHRpZnkgb3B0aW9ucy5cbiAgICovXG4gIHByZXR0aWZ5Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldHRpZnkgdGhlIG91dHB1dC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQmlvbWUgZm9ybWF0dGluZyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIGJpb21lT3B0aW9ucz86IEJpb21lQ29uZmlndXJhdGlvbjtcbiAgfTtcblxuICAvKipcbiAgICogQSByZWNvcmQgb2YgZnVuY3Rpb25zIHRvIG92ZXJyaWRlIGluIHRoZSBjb21waWxlciBob3N0LiBVc2VmdWwgZm9yIG1vY2tpbmdcbiAgICovXG4gIGNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzPzogQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXM7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMgPSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgJiB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHNvdXJjZSB0ZXh0IHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kTXlUeXBlT3B0aW9ucyA9XG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9uc1xuICB8IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKFxuICBvcHRpb25zOiBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIEV4cGFuZHMgYSBUeXBlU2NyaXB0IHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGV4cGFuZGVkIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShvcHRpb25zOiBFeHBhbmRNeVR5cGVPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGVFeHByZXNzaW9uLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBcIm5ldmVyXCI7XG4gIH1cblxuICBpZiAoXCJzb3VyY2VUZXh0XCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IGR1bW15RmlsZU5hbWUgPSBcImV4cGFuZC1teS10eXBlLWR1bW15LnRzXCI7XG5cbiAgICByZXR1cm4gZXhwYW5kTXlUeXBlKHtcbiAgICAgIHNvdXJjZUZpbGVOYW1lOiBkdW1teUZpbGVOYW1lLFxuICAgICAgdHlwZUV4cHJlc3Npb246IG9wdGlvbnMudHlwZUV4cHJlc3Npb24sXG4gICAgICBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlczoge1xuICAgICAgICByZWFkRmlsZShmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgICAgaWYgKHBhdGguYmFzZW5hbWUoZmlsZU5hbWUpID09PSBkdW1teUZpbGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zb3VyY2VUZXh0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0cy5zeXMucmVhZEZpbGUoZmlsZU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRzQ29tcGlsZXJPcHRpb25zOiBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zLFxuICAgICAgcHJldHRpZnk6IG9wdGlvbnMucHJldHRpZnksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMuc291cmNlRmlsZU5hbWUpO1xuXG4gIGNvbnN0IHRzQ29tcGlsZXJPcHRpb25zID0gb3B0aW9ucy50c0NvbXBpbGVyT3B0aW9ucyA/PyB7XG4gICAgbm9FbWl0OiB0cnVlLFxuXG4gICAgc3RyaWN0TnVsbENoZWNrczogdHJ1ZSxcbiAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLFxuICAgIGFsbG93QXJiaXRyYXJ5RXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICB9O1xuXG4gIGlmICghdHNDb21waWxlck9wdGlvbnMuc3RyaWN0TnVsbENoZWNrcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN0cmljdE51bGxDaGVja3MgbXVzdCBiZSBlbmFibGVkIVwiKTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBpbGVySG9zdCA9IGNyZWF0ZUF1Z21lbnRlckNvbXBpbGVySG9zdChcbiAgICByZXNvbHZlZFNvdXJjZUZpbGVOYW1lLFxuICAgIGNyZWF0ZUV4cGFuZENvZGVCbG9jayhvcHRpb25zLnR5cGVFeHByZXNzaW9uKSxcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBvcHRpb25zLmNvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuICApO1xuXG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKFxuICAgIFtyZXNvbHZlZFNvdXJjZUZpbGVOYW1lXSxcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBjb21waWxlckhvc3QsXG4gICk7XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShyZXNvbHZlZFNvdXJjZUZpbGVOYW1lKTtcbiAgaWYgKCFzb3VyY2VGaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIGZpbGUgbm90IGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdElkZW50aWZpZXJOb2RlID0gZmluZFJlc3VsdElkZW50aWZpZXJOb2RlKHNvdXJjZUZpbGUpO1xuICBpZiAoIXJlc3VsdElkZW50aWZpZXJOb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbm9kZSBmb3VuZCFcIik7XG4gIH1cblxuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgZXhwYW5kZWRUeXBlU3RyaW5nID0gdHlwZUNoZWNrZXIudHlwZVRvU3RyaW5nKFxuICAgIHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHJlc3VsdElkZW50aWZpZXJOb2RlKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdHMuVHlwZUZvcm1hdEZsYWdzLk5vZGVCdWlsZGVyRmxhZ3NNYXNrLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnByZXR0aWZ5Py5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBleHBhbmRlZFR5cGVTdHJpbmc7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0VHlwZUV4cHJlc3Npb24oXG4gICAgZXhwYW5kZWRUeXBlU3RyaW5nLFxuICAgIG9wdGlvbnMucHJldHRpZnk/LmJpb21lT3B0aW9ucyxcbiAgKTtcbn1cbiIsCiAgICAiaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbnR5cGUgRXh0cmFjdEZ1bmN0aW9uczxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID0ge1xuICBbUCBpbiBLXTogRXh0cmFjdDxUW1BdLCAoLi4uYXJnczogbmV2ZXJbXSkgPT4gdW5rbm93bj47XG59O1xuZXhwb3J0IHR5cGUgQ29tcGlsZXJIb3N0RnVuY3Rpb25PdmVycmlkZXMgPSBQYXJ0aWFsPFxuICBFeHRyYWN0RnVuY3Rpb25zPHRzLkNvbXBpbGVySG9zdD5cbj47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgYXVnbWVudHMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSBmb3IgZXhwYW5kaW5nIGEgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VGaWxlTmFtZSBOYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBhdWdtZW50LlxuICogQHBhcmFtIGNvZGVUb0FkZCBUeXBlIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gY29tcGlsZXJPcHRpb25zIFR5cGVTY3JpcHQgY29tcGlsZXIgb3B0aW9ucy5cbiAqIEBwYXJhbSBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyBBIHJlY29yZCBvZiBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgaW4gdGhlIGNvbXBpbGVyIGhvc3QuIFVzZWZ1bCBmb3IgbW9ja2luZy5cbiAqIEByZXR1cm5zIEEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCByZXR1cm5zIGFuIGF1Z21lbnRlZCBzb3VyY2UgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQXVnbWVudGVyQ29tcGlsZXJIb3N0ID0gKFxuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nLFxuICBjb2RlVG9BZGQ6IHN0cmluZyxcbiAgY29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zLFxuICBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcz86IENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzLFxuKSA9PiB7XG4gIGNvbnN0IGN1c3RvbUNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMgPz8ge30sIHRydWUpO1xuICBjb25zdCBvdmVycmlkZXMgPSBjb21waWxlckhvc3RGdW5jdGlvbk92ZXJyaWRlcyA/PyB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvdmVycmlkZXMpIGFzIEFycmF5PFxuICAgIGtleW9mIENvbXBpbGVySG9zdEZ1bmN0aW9uT3ZlcnJpZGVzXG4gID4pIHtcbiAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlc1trZXldO1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAoY3VzdG9tQ29tcGlsZXJIb3N0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPVxuICAgICAgICBvdmVycmlkZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbFJlYWRGaWxlID0gY3VzdG9tQ29tcGlsZXJIb3N0LnJlYWRGaWxlO1xuXG4gIGN1c3RvbUNvbXBpbGVySG9zdC5yZWFkRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gb3JpZ2luYWxSZWFkRmlsZShmaWxlTmFtZSk7XG5cbiAgICBpZiAoY29udGVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH1cblxuICAgIGlmIChmaWxlTmFtZSAhPT0gc291cmNlRmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiBjb250ZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y29kZVRvQWRkfVxcbiR7Y29udGVudHN9YDtcbiAgfTtcblxuICByZXR1cm4gY3VzdG9tQ29tcGlsZXJIb3N0O1xufTtcbiIsCiAgICAiaW1wb3J0IHsgQmlvbWUgfSBmcm9tIFwiQGJpb21lanMvanMtYXBpL25vZGVqc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIGFzIEJpb21lQ29uZmlndXJhdGlvbiB9IGZyb20gXCJAYmlvbWVqcy93YXNtLW5vZGVqc1wiO1xuXG5jb25zdCBpZGVudGlmaWVyUHJlZml4ID0gXCJfX0VYUEFORF9NWV9UWVBFX19cIjtcbmNvbnN0IHZpcnR1YWxGb3JtYXRGaWxlTmFtZSA9IFwiZXhwYW5kLW15LXR5cGUudHNcIjtcbmNvbnN0IGJpb21lID0gbmV3IEJpb21lKCk7XG5jb25zdCB7IHByb2plY3RLZXkgfSA9IGJpb21lLm9wZW5Qcm9qZWN0KCk7XG5cbmNvbnN0IGRlZmF1bHRCaW9tZUNvbmZpZ3VyYXRpb246IEJpb21lQ29uZmlndXJhdGlvbiA9IHtcbiAgZm9ybWF0dGVyOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBpbmRlbnRTdHlsZTogXCJzcGFjZVwiLFxuICB9LFxuICBqYXZhc2NyaXB0OiB7XG4gICAgZm9ybWF0dGVyOiB7XG4gICAgICBxdW90ZVN0eWxlOiBcImRvdWJsZVwiLFxuICAgICAgc2VtaWNvbG9uczogXCJhc05lZWRlZFwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRXhwYW5kQ29kZUJsb2NrID0gKHR5cGVFeHByZXNzaW9uOiBzdHJpbmcpID0+IHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvbWFpbi90ZXN0cy9jYXNlcy9jb21waWxlci9jb21wdXRlZFR5cGVzS2V5b2ZOb0luZGV4U2lnbmF0dXJlVHlwZS50c1xuICByZXR1cm4gYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fVJlc3VsdCA9ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8JHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24+O1xuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24gPSAke3R5cGVFeHByZXNzaW9ufTtcblxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUPiA9IFxuICAgICAgICBUIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyAoLi4uYXJnczogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxBPikgPT4gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxSPlxuICAgICAgOiBUIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBVPiA/IFByb21pc2U8JHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFR5cGVBcmd1bWVudDxVPj5cbiAgICAgIDogeyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyA/ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRTdHJpbmc8VFtLXT4gOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFRbS10+OyB9ICYge307XG5cbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmRUeXBlQXJndW1lbnQ8VD4gPSBbVCAmIHt9XSBleHRlbmRzIFtuZXZlcl0gPyBUIDogVCAmIHt9IGV4dGVuZHMgdm9pZCA/IFQgOiAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFQgJiB7fT47XG5cbiAgICAvLyBGb3JjZXMgYSB1bmlvbiBvZiBzdHJpbmcgbGl0ZXJhbCB0eXBlcyB0byBiZSBleHBhbmRlZFxuICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZFN0cmluZzxUIGV4dGVuZHMgc3RyaW5nPiA9ICR7aWRlbnRpZmllclByZWZpeH1SZW1vdmVVbmRlcnNjb3JlPCR7aWRlbnRpZmllclByZWZpeH1BcHBlbmRVbmRlcnNjb3JlPFQ+PjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1BcHBlbmRVbmRlcnNjb3JlPFQgZXh0ZW5kcyBzdHJpbmc+ID0gXFxgXFwke1R9X1xcYCBleHRlbmRzIHN0cmluZyA/IFxcYFxcJHtUfV9cXGAgOiBuZXZlcjtcbiAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1SZW1vdmVVbmRlcnNjb3JlPFQgZXh0ZW5kcyBzdHJpbmc+ID0gVCBleHRlbmRzIFxcYFxcJHtpbmZlciBVfV9cXGAgPyBVIDogbmV2ZXI7YDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUeXBlRXhwcmVzc2lvbiA9IGFzeW5jIChcbiAgY29kZTogc3RyaW5nLFxuICBiaW9tZUNvbmZpZ3VyYXRpb24/OiBCaW9tZUNvbmZpZ3VyYXRpb24sXG4pID0+IHtcbiAgY29uc3QgaW5wdXQgPSBgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9ID0gJHtjb2RlfWA7XG4gIGNvbnN0IGphdmFzY3JpcHRGb3JtYXR0ZXIgPSB7XG4gICAgLi4uZGVmYXVsdEJpb21lQ29uZmlndXJhdGlvbi5qYXZhc2NyaXB0Py5mb3JtYXR0ZXIsXG4gICAgLi4uYmlvbWVDb25maWd1cmF0aW9uPy5qYXZhc2NyaXB0Py5mb3JtYXR0ZXIsXG4gIH07XG5cbiAgYmlvbWUuYXBwbHlDb25maWd1cmF0aW9uKHByb2plY3RLZXksIHtcbiAgICAuLi5kZWZhdWx0QmlvbWVDb25maWd1cmF0aW9uLFxuICAgIC4uLmJpb21lQ29uZmlndXJhdGlvbixcbiAgICBmb3JtYXR0ZXI6IHtcbiAgICAgIC4uLmRlZmF1bHRCaW9tZUNvbmZpZ3VyYXRpb24uZm9ybWF0dGVyLFxuICAgICAgLi4uYmlvbWVDb25maWd1cmF0aW9uPy5mb3JtYXR0ZXIsXG4gICAgfSxcbiAgICBqYXZhc2NyaXB0OiB7XG4gICAgICAuLi5kZWZhdWx0QmlvbWVDb25maWd1cmF0aW9uLmphdmFzY3JpcHQsXG4gICAgICAuLi5iaW9tZUNvbmZpZ3VyYXRpb24/LmphdmFzY3JpcHQsXG4gICAgICBmb3JtYXR0ZXI6IGphdmFzY3JpcHRGb3JtYXR0ZXIsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYmlvbWUuZm9ybWF0Q29udGVudChwcm9qZWN0S2V5LCBpbnB1dCwge1xuICAgIGZpbGVQYXRoOiB2aXJ0dWFsRm9ybWF0RmlsZU5hbWUsXG4gIH0pO1xuXG4gIGlmIChyZXN1bHQuZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGJpb21lLnByaW50RGlhZ25vc3RpY3MocmVzdWx0LmRpYWdub3N0aWNzLCB7XG4gICAgICAgIGZpbGVQYXRoOiB2aXJ0dWFsRm9ybWF0RmlsZU5hbWUsXG4gICAgICAgIGZpbGVTb3VyY2U6IGlucHV0LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuY29udGVudC50cmltKCkuc3Vic3RyaW5nKGB0eXBlICR7aWRlbnRpZmllclByZWZpeH0gPSBgLmxlbmd0aCk7XG59O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUFBO0FBRUE7OztBQ0ZBO0FBa0JPLElBQU0sOEJBQThCLENBQ3pDLGdCQUNBLFdBQ0EsaUJBQ0Esa0NBQ0c7QUFBQSxFQUNILE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLG1CQUFtQixDQUFDLEdBQUcsSUFBSTtBQUFBLEVBQzVFLE1BQU0sWUFBWSxpQ0FBaUMsQ0FBQztBQUFBLEVBRXBELFdBQVcsT0FBTyxPQUFPLEtBQUssU0FBUyxHQUVwQztBQUFBLElBQ0QsTUFBTSxXQUFXLFVBQVU7QUFBQSxJQUUzQixJQUFJLFVBQVU7QUFBQSxNQUNYLG1CQUEwRCxPQUN6RDtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFNLG1CQUFtQixtQkFBbUI7QUFBQSxF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UUFBUSxNQUFNLGVBQWU7QUFBQSxZQUM3QyxPQUFPLFFBQVE7QUFBQSxVQUNqQjtBQUFBLFVBRUEsT0FBTyxJQUFHLElBQUksU0FBUyxRQUFRO0FBQUE7QUFBQSxNQUVuQztBQUFBLE1BQ0EsbUJBQW1CLFFBQVE7QUFBQSxNQUMzQixVQUFVLFFBQVE7QUFBQSxJQUNwQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsTUFBTSx5QkFBeUIsS0FBSyxRQUFRLFFBQVEsY0FBYztBQUFBLEVBRWxFLE1BQU0sb0JBQW9CLFFBQVEscUJBQXFCO0FBQUEsSUFDckQsUUFBUTtBQUFBLElBRVIsa0JBQWtCO0FBQUEsSUFDbEIsOEJBQThCO0FBQUEsSUFDOUIsMEJBQTBCO0FBQUEsSUFDMUIsNEJBQTRCO0FBQUEsSUFDNUIsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUVBLElBQUksQ0FBQyxrQkFBa0Isa0JBQWtCO0FBQUEsSUFDdkMsTUFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsRUFDckQ7QUFBQSxFQUVBLE1BQU0sZUFBZSw0QkFDbkIsd0JBQ0Esc0JBQXNCLFFBQVEsY0FBYyxHQUM1QyxtQkFDQSxRQUFRLDZCQUNWO0FBQUEsRUFFQSxNQUFNLFVBQVUsSUFBRyxjQUNqQixDQUFDLHNCQUFzQixHQUN2QixtQkFDQSxZQUNGO0FBQUEsRUFFQSxNQUFNLGFBQWEsUUFBUSxjQUFjLHNCQUFzQjtBQUFBLEVBQy9ELElBQUksQ0FBQyxZQUFZO0FBQUEsSUFDZixNQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxFQUMxQztBQUFBLEVBRUEsTUFBTSx1QkFBdUIseUJBQXlCLFVBQVU7QUFBQSxFQUNoRSxJQUFJLENBQUMsc0JBQXNCO0FBQUEsSUFDekIsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDbEM7QUFBQSxFQUVBLE1BQU0sY0FBYyxRQUFRLGVBQWU7QUFBQSxFQUMzQyxNQUFNLHFCQUFxQixZQUFZLGFBQ3JDLFlBQVksa0JBQWtCLG9CQUFvQixHQUNsRCxXQUNBLElBQUcsZ0JBQWdCLG9CQUNyQjtBQUFBLEVBRUEsSUFBSSxRQUFRLFVBQVUsWUFBWSxPQUFPO0FBQUEsSUFDdkMsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLE9BQU8scUJBQ0wsb0JBQ0EsUUFBUSxVQUFVLFlBQ3BCO0FBQUE7IiwKICAiZGVidWdJZCI6ICJBODk5QzA3Nzk0NzY5RDI0NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expand-my-type",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Expand TypeScript type expressions programmatically",
5
5
  "keywords": [
6
6
  "expand",
@@ -38,21 +38,22 @@
38
38
  "build:cjs": "bun build ./src/index.ts --target node --format cjs --packages external --outfile ./dist/index.cjs --sourcemap=inline",
39
39
  "build:esm": "bun build ./src/index.ts ./src/cli.ts --target node --format esm --packages external --outdir ./dist --root ./src --sourcemap=inline",
40
40
  "build:types": "tsc -p tsconfig.build.json",
41
- "check": "bun run typecheck && bun test ./src/index.test.ts",
41
+ "check": "bun run lint && bun run typecheck && bun run test",
42
+ "fix": "biome check --write .",
42
43
  "clean": "rm -rf dist",
43
44
  "deps:update": "bun update --latest",
44
- "format": "prettier --write .",
45
+ "format": "bun run fix",
46
+ "lint": "bunx @biomejs/biome check .",
45
47
  "test": "bun test ./src/index.test.ts",
46
48
  "typecheck": "tsc --noEmit"
47
49
  },
48
50
  "dependencies": {
49
- "prettier": "^3.8.1",
51
+ "@biomejs/js-api": "^4.0.0",
52
+ "@biomejs/wasm-nodejs": "^2.4.11",
50
53
  "typescript": "^6.0.2"
51
54
  },
52
55
  "devDependencies": {
53
- "@trivago/prettier-plugin-sort-imports": "^6.0.2",
54
- "@types/node": "^22.19.11",
55
- "prettier-plugin-packagejson": "^2.5.22"
56
- },
57
- "packageManager": "bun@1.3.11"
56
+ "@biomejs/biome": "2.4.11",
57
+ "@types/node": "^25.5.2"
58
+ }
58
59
  }