expand-my-type 0.1.0 → 0.3.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
@@ -23,23 +23,76 @@ type ExpandedType = Compute<SomeType>;
23
23
 
24
24
  This is mostly done to improve the readability of type hints shown in editors/IDEs.
25
25
 
26
- **Expand My Type** provides a programmatic way to do the same. It gets the
27
- source code as input, along with a type expression and returns the expanded
28
- form as a string. That can be useful for code-generation, testing, and debugging
29
- complex type errors.
26
+ **Expand My Type** provides a programmatic way to do the same
27
+ (see [limitations](#limitations)). It gets the source code as input, along with
28
+ a type expression and returns the expanded form as a string. That can be useful
29
+ for code-generation, testing, and debugging complex type errors.
30
30
 
31
31
  Under the hood, it uses the [TypeScript Compiler API][ts-compiler-api] to expand
32
32
  the type expression and optionally formats the output using
33
33
  [Prettier][prettier].
34
34
 
35
- # Usage
35
+ # CLI
36
+
37
+ ### Installation
38
+
39
+ To install the CLI globally, run:
40
+
41
+ ```sh
42
+ npm install -g expand-my-type
43
+ ```
44
+
45
+ Alternatively, the CLI can be run using `npx`:
46
+
47
+ ```sh
48
+ npx expand-my-type
49
+ ```
50
+
51
+ ### CLI Usage
52
+
53
+ ```
54
+ Usage:
55
+ expand-my-type [options] <source-file> <expression>
56
+
57
+ Options:
58
+ -h, --help Show this help message
59
+ -p, --prettify Prettify the output (default)
60
+ -P, --no-prettify Do not prettify the output
61
+ -c, --tsconfig <file> Use the specified tsconfig.json file
62
+ ```
63
+
64
+ Given a file named `example.ts` with the following contents:
65
+
66
+ ```typescript
67
+ interface SomeInterface {
68
+ a: number;
69
+ b?: string;
70
+ c: number | undefined;
71
+ }
72
+
73
+ type SomeType = {
74
+ d: number;
75
+ e: SomeInterface;
76
+ f: () => void;
77
+ };
78
+ ```
79
+
80
+ Running the following command expands the type expression `SomeType["e"]`:
81
+
82
+ ```sh
83
+ expand-my-type example.ts 'SomeType["e"]'
84
+ # Output:
85
+ # { a: number; b?: string; c: number }
86
+ ```
87
+
88
+ # API
36
89
 
37
90
  This package exports a function named `expandMyType` that can be used in one of
38
91
  the following ways:
39
92
 
40
93
  1. Expand the type expression in a source file:
41
94
 
42
- Given a file named `example.ts` with the following content:
95
+ Given a file named `example.ts` with the following contents:
43
96
 
44
97
  ```typescript
45
98
  interface SomeInterface {
@@ -69,7 +122,7 @@ the following ways:
69
122
  /* {
70
123
  d: number
71
124
  e: { a: number; b?: string; c: number }
72
- f: {}
125
+ f: () => void
73
126
  } */
74
127
  ```
75
128
 
@@ -95,6 +148,39 @@ the following ways:
95
148
  /* { a: string; b: number } */
96
149
  ```
97
150
 
151
+ # Limitations
152
+
153
+ Expand My Type uses the following utility type to expand the type expression:
154
+
155
+ ```typescript
156
+ type Expand<T> = T extends (...args: infer A) => infer R
157
+ ? (...args: Expand<A>) => Expand<R>
158
+ : { [K in keyof T]: Expand<T[K]> } & {};
159
+ ```
160
+
161
+ As a result, the output it generates is what the TypeScript compiler would
162
+ infer from wrapping the type expression with the `Expand` utility type. That
163
+ comes with some limitations. If you know a better approach to expand types, feel
164
+ free to open an issue or a pull request.
165
+
166
+ ## Type References to Union String Literal Types
167
+
168
+ Type references to union string literal types are not expanded. For example,
169
+ expanding T in the following code:
170
+
171
+ ```typescript
172
+ type T = { s: S };
173
+ type S = "a" | "b";
174
+ ```
175
+
176
+ results in `{ s: S }` instead of `{ s: "a" | "b" }`.
177
+
178
+ ## Recursive Type References
179
+
180
+ Expanding recursive type references can lead to infinite loops. When an infinite
181
+ loop happens, the generated output gets truncated. Prettifying the truncated
182
+ output will throw an error.
183
+
98
184
  [compute-type]: https://github.com/microsoft/TypeScript/blob/main/tests/cases/compiler/computedTypesKeyofNoIndexSignatureType.ts
99
185
  [prettier]: https://prettier.io
100
186
  [ts-compiler-api]: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API
package/dist/cli.js ADDED
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/create-expander-compiler-host.ts
4
+ import ts from "typescript";
5
+ var identifierPrefix = "__TYPE_EXPANDER__";
6
+ var createExpanderCompilerHost = (sourceFileName2, typeExpression2, compilerOptions, getSourceFileFunction) => {
7
+ const customCompilerHost = ts.createCompilerHost(compilerOptions ?? {});
8
+ const originalGetSourceFile = customCompilerHost.getSourceFile;
9
+ customCompilerHost.getSourceFile = (fileName, ...args) => {
10
+ if (fileName === sourceFileName2) {
11
+ const sourceFile = (getSourceFileFunction ?? originalGetSourceFile)(
12
+ fileName,
13
+ ...args
14
+ );
15
+ if (sourceFile === void 0) {
16
+ return void 0;
17
+ }
18
+ const sourceText = `type ${identifierPrefix}Result = ${identifierPrefix}Expand<${identifierPrefix}Expression>;
19
+ type ${identifierPrefix}Expression = ${typeExpression2};
20
+
21
+ type ${identifierPrefix}Expand<T> = T extends (...args: infer A) => infer R
22
+ ? (...args: ${identifierPrefix}Expand<A>) => ${identifierPrefix}Expand<R>
23
+ : { [K in keyof T]: ${identifierPrefix}Expand<T[K]>; } & {};
24
+
25
+ ${sourceFile.getFullText()}`;
26
+ return ts.createSourceFile(
27
+ fileName,
28
+ sourceText,
29
+ sourceFile.languageVersion,
30
+ true
31
+ );
32
+ }
33
+ return originalGetSourceFile(fileName, ...args);
34
+ };
35
+ return customCompilerHost;
36
+ };
37
+
38
+ // src/index.ts
39
+ import { format } from "prettier";
40
+ import ts2 from "typescript";
41
+ var findTypeExpanderResultNode = (node) => {
42
+ if (node.getChildCount() == 0) {
43
+ if (!ts2.isIdentifier(node)) {
44
+ return void 0;
45
+ }
46
+ return node;
47
+ }
48
+ return ts2.forEachChild(node, findTypeExpanderResultNode);
49
+ };
50
+ async function expandMyType(options) {
51
+ if (options.typeExpression.trim() === "") {
52
+ return "never";
53
+ }
54
+ if ("sourceText" in options) {
55
+ const sourceFile2 = ts2.createSourceFile(
56
+ "test.ts",
57
+ options.sourceText,
58
+ ts2.ScriptTarget.Latest,
59
+ true
60
+ );
61
+ return expandMyType({
62
+ sourceFileName: "test.ts",
63
+ typeExpression: options.typeExpression,
64
+ getSourceFileFunction: () => sourceFile2,
65
+ tsCompilerOptions: options.tsCompilerOptions
66
+ });
67
+ }
68
+ const tsCompilerOptions = options.tsCompilerOptions ?? {
69
+ noEmit: true,
70
+ allowSyntheticDefaultImports: true,
71
+ allowArbitraryExtensions: true,
72
+ allowImportingTsExtensions: true,
73
+ allowJs: true
74
+ };
75
+ const compilerHost = createExpanderCompilerHost(
76
+ options.sourceFileName,
77
+ options.typeExpression,
78
+ tsCompilerOptions,
79
+ options.getSourceFileFunction
80
+ );
81
+ const program = ts2.createProgram(
82
+ [options.sourceFileName],
83
+ tsCompilerOptions,
84
+ compilerHost
85
+ );
86
+ const sourceFile = program.getSourceFile(options.sourceFileName);
87
+ if (!sourceFile) {
88
+ throw new Error("Source file not found!");
89
+ }
90
+ const firstIdentifier = findTypeExpanderResultNode(sourceFile);
91
+ if (!firstIdentifier) {
92
+ throw new Error("No node found!");
93
+ }
94
+ const typeChecker = program.getTypeChecker();
95
+ const expandedType = typeChecker.typeToString(
96
+ typeChecker.getTypeAtLocation(firstIdentifier),
97
+ void 0,
98
+ ts2.TypeFormatFlags.NodeBuilderFlagsMask
99
+ );
100
+ if (options.prettify && options.prettify.enabled === false) {
101
+ return expandedType;
102
+ }
103
+ const dummyTypeName = "__TYPE_EXPANDER_RESULT__";
104
+ return (await format(
105
+ `type ${dummyTypeName} = ${expandedType}`,
106
+ options.prettify?.options ?? {
107
+ parser: "typescript",
108
+ semi: false
109
+ }
110
+ )).trim().substring(`type ${dummyTypeName} = `.length);
111
+ }
112
+
113
+ // src/cli.ts
114
+ import path from "node:path";
115
+ import { parseArgs } from "node:util";
116
+ import ts3 from "typescript";
117
+ var tryParse = (options) => {
118
+ let result2;
119
+ try {
120
+ result2 = parseArgs({
121
+ options,
122
+ tokens: true,
123
+ allowPositionals: true
124
+ });
125
+ } catch (error2) {
126
+ return {
127
+ error: error2,
128
+ values: {},
129
+ positionals: []
130
+ };
131
+ }
132
+ const { tokens, values: values2, positionals: positionals2 } = result2;
133
+ for (const token of tokens ?? []) {
134
+ if (token.kind === "option-terminator" || token.kind === "positional") {
135
+ continue;
136
+ }
137
+ if (token.name.startsWith("no-")) {
138
+ const positiveName = token.name.slice("no-".length);
139
+ values2[positiveName] = false;
140
+ delete values2[token.name];
141
+ } else {
142
+ values2[token.name] = token.value ?? true;
143
+ }
144
+ }
145
+ return {
146
+ error: void 0,
147
+ values: values2,
148
+ positionals: positionals2
149
+ };
150
+ };
151
+ var { error, values, positionals } = tryParse({
152
+ help: {
153
+ type: "boolean",
154
+ short: "h"
155
+ },
156
+ prettify: {
157
+ type: "boolean",
158
+ short: "p",
159
+ default: true
160
+ },
161
+ "no-prettify": {
162
+ type: "boolean",
163
+ short: "P"
164
+ },
165
+ tsconfig: {
166
+ type: "string",
167
+ short: "c"
168
+ }
169
+ });
170
+ if (error) {
171
+ console.error(error.message);
172
+ process.exit(1);
173
+ }
174
+ var usagePrompt = [
175
+ "Usage:",
176
+ " expand-my-type [options] <source-file> <expression>",
177
+ "",
178
+ "Options:",
179
+ " -h, --help Show this help message",
180
+ " -p, --prettify Prettify the output (default)",
181
+ " -P, --no-prettify Do not prettify the output",
182
+ " -c, --tsconfig <file> Use the specified tsconfig.json file"
183
+ ].join("\n");
184
+ if (positionals.length !== 2) {
185
+ console.error(usagePrompt);
186
+ process.exit(1);
187
+ }
188
+ if (values.help) {
189
+ console.error(usagePrompt);
190
+ process.exit(0);
191
+ }
192
+ var [sourceFileName, typeExpression] = positionals;
193
+ var { prettify, tsconfig: tsConfigFileName } = values;
194
+ var tsParsedCommandLine;
195
+ if (tsConfigFileName) {
196
+ const configFile = ts3.readConfigFile(tsConfigFileName, ts3.sys.readFile);
197
+ const compilerOptions = ts3.parseJsonConfigFileContent(
198
+ configFile.config,
199
+ ts3.sys,
200
+ "./"
201
+ );
202
+ tsParsedCommandLine = compilerOptions;
203
+ }
204
+ var result = await expandMyType({
205
+ sourceFileName: path.resolve(sourceFileName),
206
+ typeExpression,
207
+ prettify: {
208
+ enabled: prettify
209
+ },
210
+ tsCompilerOptions: tsParsedCommandLine?.options
211
+ });
212
+ console.log(result);
213
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NyZWF0ZS1leHBhbmRlci1jb21waWxlci1ob3N0LnRzIiwgIi4uL3NyYy9pbmRleC50cyIsICIuLi9zcmMvY2xpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuY29uc3QgaWRlbnRpZmllclByZWZpeCA9IFwiX19UWVBFX0VYUEFOREVSX19cIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCBhdWdtZW50cyB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlIGZvciBleHBhbmRpbmcgYSB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZUZpbGVOYW1lIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGF1Z21lbnQuXG4gKiBAcGFyYW0gdHlwZUV4cHJlc3Npb24gVHlwZSBleHByZXNzaW9uLlxuICogQHBhcmFtIGNvbXBpbGVyT3B0aW9ucyBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gKiBAcGFyYW0gZ2V0U291cmNlRmlsZUZ1bmN0aW9uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHRzLkNvbXBpbGVySG9zdFtcImdldFNvdXJjZUZpbGVcIl1gIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSBjdXN0b20gY29tcGlsZXIgaG9zdCB0aGF0IHJldHVybnMgYW4gYXVnbWVudGVkIHNvdXJjZSBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSB0eXBlIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFeHBhbmRlckNvbXBpbGVySG9zdCA9IChcbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZyxcbiAgdHlwZUV4cHJlc3Npb246IHN0cmluZyxcbiAgY29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zLFxuICBnZXRTb3VyY2VGaWxlRnVuY3Rpb24/OiB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1c3RvbUNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMgPz8ge30pO1xuICBjb25zdCBvcmlnaW5hbEdldFNvdXJjZUZpbGUgPSBjdXN0b21Db21waWxlckhvc3QuZ2V0U291cmNlRmlsZTtcblxuICBjdXN0b21Db21waWxlckhvc3QuZ2V0U291cmNlRmlsZSA9IChmaWxlTmFtZSwgLi4uYXJncykgPT4ge1xuICAgIGlmIChmaWxlTmFtZSA9PT0gc291cmNlRmlsZU5hbWUpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSAoZ2V0U291cmNlRmlsZUZ1bmN0aW9uID8/IG9yaWdpbmFsR2V0U291cmNlRmlsZSkoXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAuLi5hcmdzLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNvdXJjZUZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvYmxvYi9tYWluL3Rlc3RzL2Nhc2VzL2NvbXBpbGVyL2NvbXB1dGVkVHlwZXNLZXlvZk5vSW5kZXhTaWduYXR1cmVUeXBlLnRzXG4gICAgICBjb25zdCBzb3VyY2VUZXh0ID0gYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fVJlc3VsdCA9ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8JHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24+O1xuICAgICAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uID0gJHt0eXBlRXhwcmVzc2lvbn07XG5cbiAgICAgICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFQ+ID0gVCBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSXG4gICAgICAgICAgPyAoLi4uYXJnczogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxBPikgPT4gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxSPlxuICAgICAgICAgIDogeyBbSyBpbiBrZXlvZiBUXTogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUW0tdPjsgfSAmIHt9O1xuICAgICAgICAgIFxuICAgICAgICAke3NvdXJjZUZpbGUuZ2V0RnVsbFRleHQoKX1gO1xuXG4gICAgICByZXR1cm4gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgIHNvdXJjZVRleHQsXG4gICAgICAgIHNvdXJjZUZpbGUubGFuZ3VhZ2VWZXJzaW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxHZXRTb3VyY2VGaWxlKGZpbGVOYW1lLCAuLi5hcmdzKTtcbiAgfTtcblxuICByZXR1cm4gY3VzdG9tQ29tcGlsZXJIb3N0O1xufTtcbiIsICJpbXBvcnQgeyBjcmVhdGVFeHBhbmRlckNvbXBpbGVySG9zdCB9IGZyb20gXCIuL2NyZWF0ZS1leHBhbmRlci1jb21waWxlci1ob3N0LnRzXCI7XG5pbXBvcnQgeyBmb3JtYXQsIHR5cGUgT3B0aW9ucyBhcyBQcmV0dGllck9wdGlvbnMgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHRoZSBUWVBFX0VYUEFOREVSX1JFU1VMVCB0eXBlIHNob3VsZCBiZSBzZWFyY2hlZC5cbiAqIEByZXR1cm5zIFRoZSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZS5cbiAqL1xuY29uc3QgZmluZFR5cGVFeHBhbmRlclJlc3VsdE5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHRzLk5vZGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAobm9kZS5nZXRDaGlsZENvdW50KCkgPT0gMCkge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIHB1dCB0aGUgX19UWVBFX0VYUEFOREVSX1JFU1VMVF9fIHR5cGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBmaWxlLCB3ZSBjYW4gcmV0dXJuIHRoZSBmaXJzdCBpZGVudGlmaWVyIHdlIGZpbmQuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlKTtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVPcHRpb25zQmFzZSA9IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIGV4cHJlc3Npb24gdG8gZXhwYW5kLlxuICAgKiBAZXhhbXBsZSBcIlJldHVyblR5cGU8dHlwZW9mIG15RnVuY3Rpb24+XCJcbiAgICovXG4gIHR5cGVFeHByZXNzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgY29tcGlsZXIgb3B0aW9ucy5cbiAgICovXG4gIHRzQ29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQcmV0dGllciBvcHRpb25zLlxuICAgKi9cbiAgcHJldHRpZnk/OiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV0dGlmeSB0aGUgb3V0cHV0LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQcmV0dGllciBvcHRpb25zLiBEb24ndCBmb3JnZXQgdG8gc2V0IHRoZSBwYXJzZXIgdG8gXCJ0eXBlc2NyaXB0XCIuXG4gICAgICogQGRlZmF1bHQgeyBwYXJzZXI6IFwidHlwZXNjcmlwdFwiLCBzZW1pOiBmYWxzZSB9XG4gICAgICovXG4gICAgb3B0aW9ucz86IFByZXR0aWVyT3B0aW9ucztcbiAgfTtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zID0gRXhwYW5kVHlwZU9wdGlvbnNCYXNlICYge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNvdXJjZSBmaWxlLiBXaGVuIG5vdCBzcGVjaWZpZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGVmYXVsdCBUeXBlU2NyaXB0IGNvbXBpbGVyIGhvc3QgaXMgdXNlZC5cbiAgICovXG4gIGdldFNvdXJjZUZpbGVGdW5jdGlvbj86IHRzLkNvbXBpbGVySG9zdFtcImdldFNvdXJjZUZpbGVcIl07XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgc291cmNlIHRleHQgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRNeVR5cGVPcHRpb25zID1cbiAgfCBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zXG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShcbiAgb3B0aW9uczogRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5cbi8qKlxuICogRXhwYW5kcyBhIFR5cGVTY3JpcHQgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhwYW5kZWQgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKG9wdGlvbnM6IEV4cGFuZE15VHlwZU9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZUV4cHJlc3Npb24udHJpbSgpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwibmV2ZXJcIjtcbiAgfVxuXG4gIGlmIChcInNvdXJjZVRleHRcIiBpbiBvcHRpb25zKSB7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgICBcInRlc3QudHNcIixcbiAgICAgIG9wdGlvbnMuc291cmNlVGV4dCxcbiAgICAgIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwYW5kTXlUeXBlKHtcbiAgICAgIHNvdXJjZUZpbGVOYW1lOiBcInRlc3QudHNcIixcbiAgICAgIHR5cGVFeHByZXNzaW9uOiBvcHRpb25zLnR5cGVFeHByZXNzaW9uLFxuICAgICAgZ2V0U291cmNlRmlsZUZ1bmN0aW9uOiAoKSA9PiBzb3VyY2VGaWxlLFxuICAgICAgdHNDb21waWxlck9wdGlvbnM6IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB0c0NvbXBpbGVyT3B0aW9ucyA9IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMgPz8ge1xuICAgIG5vRW1pdDogdHJ1ZSxcblxuICAgIGFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHM6IHRydWUsXG4gICAgYWxsb3dBcmJpdHJhcnlFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SnM6IHRydWUsXG4gIH07XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QoXG4gICAgb3B0aW9ucy5zb3VyY2VGaWxlTmFtZSxcbiAgICBvcHRpb25zLnR5cGVFeHByZXNzaW9uLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIG9wdGlvbnMuZ2V0U291cmNlRmlsZUZ1bmN0aW9uLFxuICApO1xuXG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKFxuICAgIFtvcHRpb25zLnNvdXJjZUZpbGVOYW1lXSxcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBjb21waWxlckhvc3QsXG4gICk7XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShvcHRpb25zLnNvdXJjZUZpbGVOYW1lKTtcbiAgaWYgKCFzb3VyY2VGaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIGZpbGUgbm90IGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0SWRlbnRpZmllciA9IGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlKHNvdXJjZUZpbGUpO1xuICBpZiAoIWZpcnN0SWRlbnRpZmllcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG5vZGUgZm91bmQhXCIpO1xuICB9XG5cbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IGV4cGFuZGVkVHlwZSA9IHR5cGVDaGVja2VyLnR5cGVUb1N0cmluZyhcbiAgICB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihmaXJzdElkZW50aWZpZXIpLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0cy5UeXBlRm9ybWF0RmxhZ3MuTm9kZUJ1aWxkZXJGbGFnc01hc2ssXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMucHJldHRpZnkgJiYgb3B0aW9ucy5wcmV0dGlmeS5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBleHBhbmRlZFR5cGU7XG4gIH1cblxuICBjb25zdCBkdW1teVR5cGVOYW1lID0gXCJfX1RZUEVfRVhQQU5ERVJfUkVTVUxUX19cIjtcblxuICByZXR1cm4gKFxuICAgIGF3YWl0IGZvcm1hdChcbiAgICAgIGB0eXBlICR7ZHVtbXlUeXBlTmFtZX0gPSAke2V4cGFuZGVkVHlwZX1gLFxuICAgICAgb3B0aW9ucy5wcmV0dGlmeT8ub3B0aW9ucyA/PyB7XG4gICAgICAgIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIHNlbWk6IGZhbHNlLFxuICAgICAgfSxcbiAgICApXG4gIClcbiAgICAudHJpbSgpXG4gICAgLnN1YnN0cmluZyhgdHlwZSAke2R1bW15VHlwZU5hbWV9ID0gYC5sZW5ndGgpO1xufVxuIiwgIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IGV4cGFuZE15VHlwZSB9IGZyb20gXCIuL2luZGV4LnRzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXJzZUFyZ3MsIHR5cGUgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcIm5vZGU6dXRpbFwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbnR5cGUgVmFsdWVzID0ge1xuICBoZWxwPzogYm9vbGVhbjtcbiAgcHJldHRpZnk6IGJvb2xlYW47XG4gIHRzY29uZmlnPzogc3RyaW5nO1xufTtcblxuY29uc3QgdHJ5UGFyc2UgPSA8XG4gIFZhbHVlcyBleHRlbmRzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgc3RyaW5nIHwgYm9vbGVhbiB8IEFycmF5PHN0cmluZyB8IGJvb2xlYW4+IHwgdW5kZWZpbmVkXG4gID4sXG4gIE9wdGlvbnMgZXh0ZW5kcyBQYXJzZUFyZ3NDb25maWdbXCJvcHRpb25zXCJdID0gUGFyc2VBcmdzQ29uZmlnW1wib3B0aW9uc1wiXSxcbj4oXG4gIG9wdGlvbnM6IE9wdGlvbnMsXG4pOiB7IGVycm9yPzogRXJyb3I7IHZhbHVlczogVmFsdWVzOyBwb3NpdGlvbmFsczogc3RyaW5nW10gfSA9PiB7XG4gIGxldCByZXN1bHQ6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlQXJncz47XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gcGFyc2VBcmdzKHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0b2tlbnM6IHRydWUsXG4gICAgICBhbGxvd1Bvc2l0aW9uYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcixcbiAgICAgIHZhbHVlczoge30gYXMgVmFsdWVzLFxuICAgICAgcG9zaXRpb25hbHM6IFtdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7IHRva2VucywgdmFsdWVzLCBwb3NpdGlvbmFscyB9ID0gcmVzdWx0O1xuXG4gIC8vIFJlcHJvY2VzcyB0aGUgb3B0aW9uIHRva2VucyBhbmQgb3ZlcndyaXRlIHRoZSByZXR1cm5lZCB2YWx1ZXMuXG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zID8/IFtdKSB7XG4gICAgaWYgKHRva2VuLmtpbmQgPT09IFwib3B0aW9uLXRlcm1pbmF0b3JcIiB8fCB0b2tlbi5raW5kID09PSBcInBvc2l0aW9uYWxcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLm5hbWUuc3RhcnRzV2l0aChcIm5vLVwiKSkge1xuICAgICAgLy8gU3RvcmUgZm9vOmZhbHNlIGZvciAtLW5vLWZvb1xuICAgICAgY29uc3QgcG9zaXRpdmVOYW1lID0gdG9rZW4ubmFtZS5zbGljZShcIm5vLVwiLmxlbmd0aCk7XG4gICAgICB2YWx1ZXNbcG9zaXRpdmVOYW1lXSA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHZhbHVlc1t0b2tlbi5uYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzYXZlIHZhbHVlIHNvIGxhc3Qgb25lIHdpbnMgaWYgYm90aCAtLWZvbyBhbmQgLS1uby1mb28uXG4gICAgICB2YWx1ZXNbdG9rZW4ubmFtZV0gPSB0b2tlbi52YWx1ZSA/PyB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZXM6IHZhbHVlcyBhcyBWYWx1ZXMsXG4gICAgcG9zaXRpb25hbHMsXG4gIH07XG59O1xuXG5jb25zdCB7IGVycm9yLCB2YWx1ZXMsIHBvc2l0aW9uYWxzIH0gPSB0cnlQYXJzZTxWYWx1ZXM+KHtcbiAgaGVscDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcImhcIixcbiAgfSxcbiAgcHJldHRpZnk6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJwXCIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgXCJuby1wcmV0dGlmeVwiOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiUFwiLFxuICB9LFxuICB0c2NvbmZpZzoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwiY1wiLFxuICB9LFxufSk7XG5cbmlmIChlcnJvcikge1xuICBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IHVzYWdlUHJvbXB0ID0gW1xuICBcIlVzYWdlOlwiLFxuICBcIiAgZXhwYW5kLW15LXR5cGUgW29wdGlvbnNdIDxzb3VyY2UtZmlsZT4gPGV4cHJlc3Npb24+XCIsXG4gIFwiXCIsXG4gIFwiT3B0aW9uczpcIixcbiAgXCIgIC1oLCAtLWhlbHBcXHRcXHRcXHRTaG93IHRoaXMgaGVscCBtZXNzYWdlXCIsXG4gIFwiICAtcCwgLS1wcmV0dGlmeVxcdFxcdFByZXR0aWZ5IHRoZSBvdXRwdXQgKGRlZmF1bHQpXCIsXG4gIFwiICAtUCwgLS1uby1wcmV0dGlmeVxcdFxcdERvIG5vdCBwcmV0dGlmeSB0aGUgb3V0cHV0XCIsXG4gIFwiICAtYywgLS10c2NvbmZpZyA8ZmlsZT5cXHRcXHRVc2UgdGhlIHNwZWNpZmllZCB0c2NvbmZpZy5qc29uIGZpbGVcIixcbl0uam9pbihcIlxcblwiKTtcblxuaWYgKHBvc2l0aW9uYWxzLmxlbmd0aCAhPT0gMikge1xuICBjb25zb2xlLmVycm9yKHVzYWdlUHJvbXB0KTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG5pZiAodmFsdWVzLmhlbHApIHtcbiAgY29uc29sZS5lcnJvcih1c2FnZVByb21wdCk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cblxuY29uc3QgW3NvdXJjZUZpbGVOYW1lLCB0eXBlRXhwcmVzc2lvbl0gPSBwb3NpdGlvbmFscztcbmNvbnN0IHsgcHJldHRpZnksIHRzY29uZmlnOiB0c0NvbmZpZ0ZpbGVOYW1lIH0gPSB2YWx1ZXM7XG5cbmxldCB0c1BhcnNlZENvbW1hbmRMaW5lOiB0cy5QYXJzZWRDb21tYW5kTGluZSB8IHVuZGVmaW5lZDtcblxuaWYgKHRzQ29uZmlnRmlsZU5hbWUpIHtcbiAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKHRzQ29uZmlnRmlsZU5hbWUsIHRzLnN5cy5yZWFkRmlsZSk7XG4gIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KFxuICAgIGNvbmZpZ0ZpbGUuY29uZmlnLFxuICAgIHRzLnN5cyxcbiAgICBcIi4vXCIsXG4gICk7XG5cbiAgdHNQYXJzZWRDb21tYW5kTGluZSA9IGNvbXBpbGVyT3B0aW9ucztcbn1cblxuY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhwYW5kTXlUeXBlKHtcbiAgc291cmNlRmlsZU5hbWU6IHBhdGgucmVzb2x2ZShzb3VyY2VGaWxlTmFtZSksXG4gIHR5cGVFeHByZXNzaW9uLFxuICBwcmV0dGlmeToge1xuICAgIGVuYWJsZWQ6IHByZXR0aWZ5LFxuICB9LFxuICB0c0NvbXBpbGVyT3B0aW9uczogdHNQYXJzZWRDb21tYW5kTGluZT8ub3B0aW9u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LFNBQU87QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLFFBQVFBO0FBQUEsSUFDUixhQUFBQztBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU0sRUFBRSxPQUFPLFFBQVEsWUFBWSxJQUFJLFNBQWlCO0FBQUEsRUFDdEQsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxlQUFlO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLEVBQ1Q7QUFDRixDQUFDO0FBRUQsSUFBSSxPQUFPO0FBQ1QsVUFBUSxNQUFNLE1BQU0sT0FBTztBQUMzQixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLElBQU0sY0FBYztBQUFBLEVBQ2xCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLEVBQUUsS0FBSyxJQUFJO0FBRVgsSUFBSSxZQUFZLFdBQVcsR0FBRztBQUM1QixVQUFRLE1BQU0sV0FBVztBQUN6QixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLElBQUksT0FBTyxNQUFNO0FBQ2YsVUFBUSxNQUFNLFdBQVc7QUFDekIsVUFBUSxLQUFLLENBQUM7QUFDaEI7QUFFQSxJQUFNLENBQUMsZ0JBQWdCLGNBQWMsSUFBSTtBQUN6QyxJQUFNLEVBQUUsVUFBVSxVQUFVLGlCQUFpQixJQUFJO0FBRWpELElBQUk7QUFFSixJQUFJLGtCQUFrQjtBQUNwQixRQUFNLGFBQWFKLElBQUcsZUFBZSxrQkFBa0JBLElBQUcsSUFBSSxRQUFRO0FBQ3RFLFFBQU0sa0JBQWtCQSxJQUFHO0FBQUEsSUFDekIsV0FBVztBQUFBLElBQ1hBLElBQUc7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUVBLHdCQUFzQjtBQUN4QjtBQUVBLElBQU0sU0FBUyxNQUFNLGFBQWE7QUFBQSxFQUNoQyxnQkFBZ0IsS0FBSyxRQUFRLGNBQWM7QUFBQSxFQUMzQztBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1IsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLG1CQUFtQixxQkFBcUI7QUFDMUMsQ0FBQztBQUVELFFBQVEsSUFBSSxNQUFNOyIsCiAgIm5hbWVzIjogWyJzb3VyY2VGaWxlTmFtZSIsICJ0eXBlRXhwcmVzc2lvbiIsICJ0cyIsICJzb3VyY2VGaWxlIiwgInRzIiwgInJlc3VsdCIsICJlcnJvciIsICJ2YWx1ZXMiLCAicG9zaXRpb25hbHMiXQp9Cg==
package/dist/index.cjs CHANGED
@@ -35,6 +35,7 @@ module.exports = __toCommonJS(src_exports);
35
35
 
36
36
  // src/create-expander-compiler-host.ts
37
37
  var import_typescript = __toESM(require("typescript"), 1);
38
+ var identifierPrefix = "__TYPE_EXPANDER__";
38
39
  var createExpanderCompilerHost = (sourceFileName, typeExpression, compilerOptions, getSourceFileFunction) => {
39
40
  const customCompilerHost = import_typescript.default.createCompilerHost(compilerOptions ?? {});
40
41
  const originalGetSourceFile = customCompilerHost.getSourceFile;
@@ -47,16 +48,14 @@ var createExpanderCompilerHost = (sourceFileName, typeExpression, compilerOption
47
48
  if (sourceFile === void 0) {
48
49
  return void 0;
49
50
  }
50
- const sourceText = [
51
- ...[
52
- "type __TYPE_EXPANDER_RESULT__ = __TYPE_EXPANDER_EXPAND__<__TYPE_EXPANDER_EXPRESSION__>;",
53
- `type __TYPE_EXPANDER_EXPRESSION__ = ${typeExpression};`,
54
- "type __TYPE_EXPANDER_EXPAND__<T> = {",
55
- " [K in keyof T]: __TYPE_EXPANDER_EXPAND__<T[K]>;",
56
- "} & {};"
57
- ],
58
- sourceFile.getFullText()
59
- ].join("\n");
51
+ const sourceText = `type ${identifierPrefix}Result = ${identifierPrefix}Expand<${identifierPrefix}Expression>;
52
+ type ${identifierPrefix}Expression = ${typeExpression};
53
+
54
+ type ${identifierPrefix}Expand<T> = T extends (...args: infer A) => infer R
55
+ ? (...args: ${identifierPrefix}Expand<A>) => ${identifierPrefix}Expand<R>
56
+ : { [K in keyof T]: ${identifierPrefix}Expand<T[K]>; } & {};
57
+
58
+ ${sourceFile.getFullText()}`;
60
59
  return import_typescript.default.createSourceFile(
61
60
  fileName,
62
61
  sourceText,
@@ -147,4 +146,4 @@ async function expandMyType(options) {
147
146
  0 && (module.exports = {
148
147
  expandMyType
149
148
  });
150
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jcmVhdGUtZXhwYW5kZXItY29tcGlsZXItaG9zdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QgfSBmcm9tIFwiLi9jcmVhdGUtZXhwYW5kZXItY29tcGlsZXItaG9zdC50c1wiO1xuaW1wb3J0IHsgZm9ybWF0LCB0eXBlIE9wdGlvbnMgYXMgUHJldHRpZXJPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBGaW5kcyB0aGUgbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIFRZUEVfRVhQQU5ERVJfUkVTVUxUIHR5cGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3aGljaCB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXG4gKiBAcmV0dXJucyBUaGUgbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIFRZUEVfRVhQQU5ERVJfUkVTVUxUIHR5cGUuXG4gKi9cbmNvbnN0IGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDApIHtcbiAgICBpZiAoIXRzLmlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSB3ZSBwdXQgdGhlIF9fVFlQRV9FWFBBTkRFUl9SRVNVTFRfXyB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4gICAgLy8gZmlsZSwgd2UgY2FuIHJldHVybiB0aGUgZmlyc3QgaWRlbnRpZmllciB3ZSBmaW5kLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCBmaW5kVHlwZUV4cGFuZGVyUmVzdWx0Tm9kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBleHByZXNzaW9uIHRvIGV4cGFuZC5cbiAgICogQGV4YW1wbGUgXCJSZXR1cm5UeXBlPHR5cGVvZiBteUZ1bmN0aW9uPlwiXG4gICAqL1xuICB0eXBlRXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gICAqL1xuICB0c0NvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogUHJldHRpZXIgb3B0aW9ucy5cbiAgICovXG4gIHByZXR0aWZ5Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldHRpZnkgdGhlIG91dHB1dC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUHJldHRpZXIgb3B0aW9ucy4gRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgcGFyc2VyIHRvIFwidHlwZXNjcmlwdFwiLlxuICAgICAqIEBkZWZhdWx0IHsgcGFyc2VyOiBcInR5cGVzY3JpcHRcIiwgc2VtaTogZmFsc2UgfVxuICAgICAqL1xuICAgIG9wdGlvbnM/OiBQcmV0dGllck9wdGlvbnM7XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzb3VyY2UgZmlsZS4gV2hlbiBub3Qgc3BlY2lmaWVkLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlZmF1bHQgVHlwZVNjcmlwdCBjb21waWxlciBob3N0IGlzIHVzZWQuXG4gICAqL1xuICBnZXRTb3VyY2VGaWxlRnVuY3Rpb24/OiB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMgPSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgJiB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHNvdXJjZSB0ZXh0IHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kTXlUeXBlT3B0aW9ucyA9XG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9uc1xuICB8IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKFxuICBvcHRpb25zOiBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIEV4cGFuZHMgYSBUeXBlU2NyaXB0IHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGV4cGFuZGVkIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShvcHRpb25zOiBFeHBhbmRNeVR5cGVPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGVFeHByZXNzaW9uLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBcIm5ldmVyXCI7XG4gIH1cblxuICBpZiAoXCJzb3VyY2VUZXh0XCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgICAgXCJ0ZXN0LnRzXCIsXG4gICAgICBvcHRpb25zLnNvdXJjZVRleHQsXG4gICAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cGFuZE15VHlwZSh7XG4gICAgICBzb3VyY2VGaWxlTmFtZTogXCJ0ZXN0LnRzXCIsXG4gICAgICB0eXBlRXhwcmVzc2lvbjogb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICAgIGdldFNvdXJjZUZpbGVGdW5jdGlvbjogKCkgPT4gc291cmNlRmlsZSxcbiAgICAgIHRzQ29tcGlsZXJPcHRpb25zOiBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgdHNDb21waWxlck9wdGlvbnMgPSBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zID8/IHtcbiAgICBub0VtaXQ6IHRydWUsXG5cbiAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLFxuICAgIGFsbG93QXJiaXRyYXJ5RXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICB9O1xuXG4gIGNvbnN0IGNvbXBpbGVySG9zdCA9IGNyZWF0ZUV4cGFuZGVyQ29tcGlsZXJIb3N0KFxuICAgIG9wdGlvbnMuc291cmNlRmlsZU5hbWUsXG4gICAgb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBvcHRpb25zLmdldFNvdXJjZUZpbGVGdW5jdGlvbixcbiAgKTtcblxuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShcbiAgICBbb3B0aW9ucy5zb3VyY2VGaWxlTmFtZV0sXG4gICAgdHNDb21waWxlck9wdGlvbnMsXG4gICAgY29tcGlsZXJIb3N0LFxuICApO1xuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGUob3B0aW9ucy5zb3VyY2VGaWxlTmFtZSk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBmaWxlIG5vdCBmb3VuZCFcIik7XG4gIH1cblxuICBjb25zdCBmaXJzdElkZW50aWZpZXIgPSBmaW5kVHlwZUV4cGFuZGVyUmVzdWx0Tm9kZShzb3VyY2VGaWxlKTtcbiAgaWYgKCFmaXJzdElkZW50aWZpZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBleHBhbmRlZFR5cGUgPSB0eXBlQ2hlY2tlci50eXBlVG9TdHJpbmcoXG4gICAgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oZmlyc3RJZGVudGlmaWVyKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdHMuVHlwZUZvcm1hdEZsYWdzLk5vZGVCdWlsZGVyRmxhZ3NNYXNrLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnByZXR0aWZ5ICYmIG9wdGlvbnMucHJldHRpZnkuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZXhwYW5kZWRUeXBlO1xuICB9XG5cbiAgY29uc3QgZHVtbXlUeXBlTmFtZSA9IFwiX19UWVBFX0VYUEFOREVSX1JFU1VMVF9fXCI7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBmb3JtYXQoXG4gICAgICBgdHlwZSAke2R1bW15VHlwZU5hbWV9ID0gJHtleHBhbmRlZFR5cGV9YCxcbiAgICAgIG9wdGlvbnMucHJldHRpZnk/Lm9wdGlvbnMgPz8ge1xuICAgICAgICBwYXJzZXI6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICBzZW1pOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKVxuICApXG4gICAgLnRyaW0oKVxuICAgIC5zdWJzdHJpbmcoYHR5cGUgJHtkdW1teVR5cGVOYW1lfSA9IGAubGVuZ3RoKTtcbn1cbiIsICJpbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCBhdWdtZW50cyB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlIGZvciBleHBhbmRpbmcgYSB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZUZpbGVOYW1lIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGF1Z21lbnQuXG4gKiBAcGFyYW0gdHlwZUV4cHJlc3Npb24gVHlwZSBleHByZXNzaW9uLlxuICogQHBhcmFtIGNvbXBpbGVyT3B0aW9ucyBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gKiBAcGFyYW0gZ2V0U291cmNlRmlsZUZ1bmN0aW9uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHRzLkNvbXBpbGVySG9zdFtcImdldFNvdXJjZUZpbGVcIl1gIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSBjdXN0b20gY29tcGlsZXIgaG9zdCB0aGF0IHJldHVybnMgYW4gYXVnbWVudGVkIHNvdXJjZSBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSB0eXBlIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFeHBhbmRlckNvbXBpbGVySG9zdCA9IChcbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZyxcbiAgdHlwZUV4cHJlc3Npb246IHN0cmluZyxcbiAgY29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zLFxuICBnZXRTb3VyY2VGaWxlRnVuY3Rpb24/OiB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1c3RvbUNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMgPz8ge30pO1xuICBjb25zdCBvcmlnaW5hbEdldFNvdXJjZUZpbGUgPSBjdXN0b21Db21waWxlckhvc3QuZ2V0U291cmNlRmlsZTtcblxuICBjdXN0b21Db21waWxlckhvc3QuZ2V0U291cmNlRmlsZSA9IChmaWxlTmFtZSwgLi4uYXJncykgPT4ge1xuICAgIGlmIChmaWxlTmFtZSA9PT0gc291cmNlRmlsZU5hbWUpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSAoZ2V0U291cmNlRmlsZUZ1bmN0aW9uID8/IG9yaWdpbmFsR2V0U291cmNlRmlsZSkoXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAuLi5hcmdzLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNvdXJjZUZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VUZXh0ID0gW1xuICAgICAgICAuLi5bXG4gICAgICAgICAgXCJ0eXBlIF9fVFlQRV9FWFBBTkRFUl9SRVNVTFRfXyA9IF9fVFlQRV9FWFBBTkRFUl9FWFBBTkRfXzxfX1RZUEVfRVhQQU5ERVJfRVhQUkVTU0lPTl9fPjtcIixcbiAgICAgICAgICBgdHlwZSBfX1RZUEVfRVhQQU5ERVJfRVhQUkVTU0lPTl9fID0gJHt0eXBlRXhwcmVzc2lvbn07YCxcbiAgICAgICAgICBcInR5cGUgX19UWVBFX0VYUEFOREVSX0VYUEFORF9fPFQ+ID0ge1wiLFxuICAgICAgICAgIFwiICBbSyBpbiBrZXlvZiBUXTogX19UWVBFX0VYUEFOREVSX0VYUEFORF9fPFRbS10+O1wiLFxuICAgICAgICAgIFwifSAmIHt9O1wiLFxuICAgICAgICBdLFxuICAgICAgICBzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCksXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgIHJldHVybiB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgc291cmNlVGV4dCxcbiAgICAgICAgc291cmNlRmlsZS5sYW5ndWFnZVZlcnNpb24sXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbEdldFNvdXJjZUZpbGUoZmlsZU5hbWUsIC4uLmFyZ3MpO1xuICB9O1xuXG4gIHJldHVybiBjdXN0b21Db21waWxlckhvc3Q7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSx3QkFBZTtBQVdSLElBQU0sNkJBQTZCLENBQ3hDLGdCQUNBLGdCQUNBLGlCQUNBLDBCQUNHO0FBQ0gsUUFBTSxxQkFBcUIsa0JBQUFBLFFBQUcsbUJBQW1CLG1CQUFtQixDQUFDLENBQUM7QUFDdEUsUUFBTSx3QkFBd0IsbUJBQW1CO0FBRWpELHFCQUFtQixnQkFBZ0IsQ0FBQyxhQUFhLFNBQVM7QUFDeEQsUUFBSSxhQUFhLGdCQUFnQjtBQUMvQixZQUFNLGNBQWMseUJBQXlCO0FBQUEsUUFDM0M7QUFBQSxRQUNBLEdBQUc7QUFBQSxNQUNMO0FBRUEsVUFBSSxlQUFlLFFBQVc7QUFDNUIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLGFBQWE7QUFBQSxRQUNqQixHQUFHO0FBQUEsVUFDRDtBQUFBLFVBQ0EsdUNBQXVDLGNBQWM7QUFBQSxVQUNyRDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsV0FBVyxZQUFZO0FBQUEsTUFDekIsRUFBRSxLQUFLLElBQUk7QUFFWCxhQUFPLGtCQUFBQSxRQUFHO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPLHNCQUFzQixVQUFVLEdBQUcsSUFBSTtBQUFBLEVBQ2hEO0FBRUEsU0FBTztBQUNUOzs7QURyREEsc0JBQXdEO0FBQ3hELElBQUFDLHFCQUFlO0FBUWYsSUFBTSw2QkFBNkIsQ0FBQyxTQUF1QztBQUN6RSxNQUFJLEtBQUssY0FBYyxLQUFLLEdBQUc7QUFDN0IsUUFBSSxDQUFDLG1CQUFBQyxRQUFHLGFBQWEsSUFBSSxHQUFHO0FBQzFCLGFBQU87QUFBQSxJQUNUO0FBSUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLG1CQUFBQSxRQUFHLGFBQWEsTUFBTSwwQkFBMEI7QUFDekQ7QUErREEsZUFBc0IsYUFBYSxTQUE4QjtBQUMvRCxNQUFJLFFBQVEsZUFBZSxLQUFLLE1BQU0sSUFBSTtBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksZ0JBQWdCLFNBQVM7QUFDM0IsVUFBTUMsY0FBYSxtQkFBQUQsUUFBRztBQUFBLE1BQ3BCO0FBQUEsTUFDQSxRQUFRO0FBQUEsTUFDUixtQkFBQUEsUUFBRyxhQUFhO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUEsV0FBTyxhQUFhO0FBQUEsTUFDbEIsZ0JBQWdCO0FBQUEsTUFDaEIsZ0JBQWdCLFFBQVE7QUFBQSxNQUN4Qix1QkFBdUIsTUFBTUM7QUFBQSxNQUM3QixtQkFBbUIsUUFBUTtBQUFBLElBQzdCLENBQUM7QUFBQSxFQUNIO0FBRUEsUUFBTSxvQkFBb0IsUUFBUSxxQkFBcUI7QUFBQSxJQUNyRCxRQUFRO0FBQUEsSUFFUiw4QkFBOEI7QUFBQSxJQUM5QiwwQkFBMEI7QUFBQSxJQUMxQiw0QkFBNEI7QUFBQSxJQUM1QixTQUFTO0FBQUEsRUFDWDtBQUVBLFFBQU0sZUFBZTtBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSO0FBQUEsSUFDQSxRQUFRO0FBQUEsRUFDVjtBQUVBLFFBQU0sVUFBVSxtQkFBQUQsUUFBRztBQUFBLElBQ2pCLENBQUMsUUFBUSxjQUFjO0FBQUEsSUFDdkI7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUVBLFFBQU0sYUFBYSxRQUFRLGNBQWMsUUFBUSxjQUFjO0FBQy9ELE1BQUksQ0FBQyxZQUFZO0FBQ2YsVUFBTSxJQUFJLE1BQU0sd0JBQXdCO0FBQUEsRUFDMUM7QUFFQSxRQUFNLGtCQUFrQiwyQkFBMkIsVUFBVTtBQUM3RCxNQUFJLENBQUMsaUJBQWlCO0FBQ3BCLFVBQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQ2xDO0FBRUEsUUFBTSxjQUFjLFFBQVEsZUFBZTtBQUMzQyxRQUFNLGVBQWUsWUFBWTtBQUFBLElBQy9CLFlBQVksa0JBQWtCLGVBQWU7QUFBQSxJQUM3QztBQUFBLElBQ0EsbUJBQUFBLFFBQUcsZ0JBQWdCO0FBQUEsRUFDckI7QUFFQSxNQUFJLFFBQVEsWUFBWSxRQUFRLFNBQVMsWUFBWSxPQUFPO0FBQzFELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxnQkFBZ0I7QUFFdEIsVUFDRSxVQUFNO0FBQUEsSUFDSixRQUFRLGFBQWEsTUFBTSxZQUFZO0FBQUEsSUFDdkMsUUFBUSxVQUFVLFdBQVc7QUFBQSxNQUMzQixRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0YsR0FFQyxLQUFLLEVBQ0wsVUFBVSxRQUFRLGFBQWEsTUFBTSxNQUFNO0FBQ2hEOyIsCiAgIm5hbWVzIjogWyJ0cyIsICJpbXBvcnRfdHlwZXNjcmlwdCIsICJ0cyIsICJzb3VyY2VGaWxlIl0KfQo=
149
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jcmVhdGUtZXhwYW5kZXItY29tcGlsZXItaG9zdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QgfSBmcm9tIFwiLi9jcmVhdGUtZXhwYW5kZXItY29tcGlsZXItaG9zdC50c1wiO1xuaW1wb3J0IHsgZm9ybWF0LCB0eXBlIE9wdGlvbnMgYXMgUHJldHRpZXJPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBGaW5kcyB0aGUgbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIFRZUEVfRVhQQU5ERVJfUkVTVUxUIHR5cGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3aGljaCB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXG4gKiBAcmV0dXJucyBUaGUgbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIFRZUEVfRVhQQU5ERVJfUkVTVUxUIHR5cGUuXG4gKi9cbmNvbnN0IGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDApIHtcbiAgICBpZiAoIXRzLmlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSB3ZSBwdXQgdGhlIF9fVFlQRV9FWFBBTkRFUl9SRVNVTFRfXyB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4gICAgLy8gZmlsZSwgd2UgY2FuIHJldHVybiB0aGUgZmlyc3QgaWRlbnRpZmllciB3ZSBmaW5kLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCBmaW5kVHlwZUV4cGFuZGVyUmVzdWx0Tm9kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBleHByZXNzaW9uIHRvIGV4cGFuZC5cbiAgICogQGV4YW1wbGUgXCJSZXR1cm5UeXBlPHR5cGVvZiBteUZ1bmN0aW9uPlwiXG4gICAqL1xuICB0eXBlRXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gICAqL1xuICB0c0NvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogUHJldHRpZXIgb3B0aW9ucy5cbiAgICovXG4gIHByZXR0aWZ5Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldHRpZnkgdGhlIG91dHB1dC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUHJldHRpZXIgb3B0aW9ucy4gRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgcGFyc2VyIHRvIFwidHlwZXNjcmlwdFwiLlxuICAgICAqIEBkZWZhdWx0IHsgcGFyc2VyOiBcInR5cGVzY3JpcHRcIiwgc2VtaTogZmFsc2UgfVxuICAgICAqL1xuICAgIG9wdGlvbnM/OiBQcmV0dGllck9wdGlvbnM7XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzb3VyY2UgZmlsZS4gV2hlbiBub3Qgc3BlY2lmaWVkLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlZmF1bHQgVHlwZVNjcmlwdCBjb21waWxlciBob3N0IGlzIHVzZWQuXG4gICAqL1xuICBnZXRTb3VyY2VGaWxlRnVuY3Rpb24/OiB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMgPSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgJiB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHNvdXJjZSB0ZXh0IHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kTXlUeXBlT3B0aW9ucyA9XG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9uc1xuICB8IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKFxuICBvcHRpb25zOiBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIEV4cGFuZHMgYSBUeXBlU2NyaXB0IHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGV4cGFuZGVkIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShvcHRpb25zOiBFeHBhbmRNeVR5cGVPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGVFeHByZXNzaW9uLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBcIm5ldmVyXCI7XG4gIH1cblxuICBpZiAoXCJzb3VyY2VUZXh0XCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgICAgXCJ0ZXN0LnRzXCIsXG4gICAgICBvcHRpb25zLnNvdXJjZVRleHQsXG4gICAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cGFuZE15VHlwZSh7XG4gICAgICBzb3VyY2VGaWxlTmFtZTogXCJ0ZXN0LnRzXCIsXG4gICAgICB0eXBlRXhwcmVzc2lvbjogb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICAgIGdldFNvdXJjZUZpbGVGdW5jdGlvbjogKCkgPT4gc291cmNlRmlsZSxcbiAgICAgIHRzQ29tcGlsZXJPcHRpb25zOiBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgdHNDb21waWxlck9wdGlvbnMgPSBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zID8/IHtcbiAgICBub0VtaXQ6IHRydWUsXG5cbiAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLFxuICAgIGFsbG93QXJiaXRyYXJ5RXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICB9O1xuXG4gIGNvbnN0IGNvbXBpbGVySG9zdCA9IGNyZWF0ZUV4cGFuZGVyQ29tcGlsZXJIb3N0KFxuICAgIG9wdGlvbnMuc291cmNlRmlsZU5hbWUsXG4gICAgb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBvcHRpb25zLmdldFNvdXJjZUZpbGVGdW5jdGlvbixcbiAgKTtcblxuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShcbiAgICBbb3B0aW9ucy5zb3VyY2VGaWxlTmFtZV0sXG4gICAgdHNDb21waWxlck9wdGlvbnMsXG4gICAgY29tcGlsZXJIb3N0LFxuICApO1xuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGUob3B0aW9ucy5zb3VyY2VGaWxlTmFtZSk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBmaWxlIG5vdCBmb3VuZCFcIik7XG4gIH1cblxuICBjb25zdCBmaXJzdElkZW50aWZpZXIgPSBmaW5kVHlwZUV4cGFuZGVyUmVzdWx0Tm9kZShzb3VyY2VGaWxlKTtcbiAgaWYgKCFmaXJzdElkZW50aWZpZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBleHBhbmRlZFR5cGUgPSB0eXBlQ2hlY2tlci50eXBlVG9TdHJpbmcoXG4gICAgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oZmlyc3RJZGVudGlmaWVyKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdHMuVHlwZUZvcm1hdEZsYWdzLk5vZGVCdWlsZGVyRmxhZ3NNYXNrLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnByZXR0aWZ5ICYmIG9wdGlvbnMucHJldHRpZnkuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZXhwYW5kZWRUeXBlO1xuICB9XG5cbiAgY29uc3QgZHVtbXlUeXBlTmFtZSA9IFwiX19UWVBFX0VYUEFOREVSX1JFU1VMVF9fXCI7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBmb3JtYXQoXG4gICAgICBgdHlwZSAke2R1bW15VHlwZU5hbWV9ID0gJHtleHBhbmRlZFR5cGV9YCxcbiAgICAgIG9wdGlvbnMucHJldHRpZnk/Lm9wdGlvbnMgPz8ge1xuICAgICAgICBwYXJzZXI6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICBzZW1pOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKVxuICApXG4gICAgLnRyaW0oKVxuICAgIC5zdWJzdHJpbmcoYHR5cGUgJHtkdW1teVR5cGVOYW1lfSA9IGAubGVuZ3RoKTtcbn1cbiIsICJpbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuY29uc3QgaWRlbnRpZmllclByZWZpeCA9IFwiX19UWVBFX0VYUEFOREVSX19cIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCBhdWdtZW50cyB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlIGZvciBleHBhbmRpbmcgYSB0eXBlIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZUZpbGVOYW1lIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGF1Z21lbnQuXG4gKiBAcGFyYW0gdHlwZUV4cHJlc3Npb24gVHlwZSBleHByZXNzaW9uLlxuICogQHBhcmFtIGNvbXBpbGVyT3B0aW9ucyBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gKiBAcGFyYW0gZ2V0U291cmNlRmlsZUZ1bmN0aW9uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHRzLkNvbXBpbGVySG9zdFtcImdldFNvdXJjZUZpbGVcIl1gIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSBjdXN0b20gY29tcGlsZXIgaG9zdCB0aGF0IHJldHVybnMgYW4gYXVnbWVudGVkIHNvdXJjZSBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSB0eXBlIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFeHBhbmRlckNvbXBpbGVySG9zdCA9IChcbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZyxcbiAgdHlwZUV4cHJlc3Npb246IHN0cmluZyxcbiAgY29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zLFxuICBnZXRTb3VyY2VGaWxlRnVuY3Rpb24/OiB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1c3RvbUNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMgPz8ge30pO1xuICBjb25zdCBvcmlnaW5hbEdldFNvdXJjZUZpbGUgPSBjdXN0b21Db21waWxlckhvc3QuZ2V0U291cmNlRmlsZTtcblxuICBjdXN0b21Db21waWxlckhvc3QuZ2V0U291cmNlRmlsZSA9IChmaWxlTmFtZSwgLi4uYXJncykgPT4ge1xuICAgIGlmIChmaWxlTmFtZSA9PT0gc291cmNlRmlsZU5hbWUpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSAoZ2V0U291cmNlRmlsZUZ1bmN0aW9uID8/IG9yaWdpbmFsR2V0U291cmNlRmlsZSkoXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAuLi5hcmdzLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNvdXJjZUZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvYmxvYi9tYWluL3Rlc3RzL2Nhc2VzL2NvbXBpbGVyL2NvbXB1dGVkVHlwZXNLZXlvZk5vSW5kZXhTaWduYXR1cmVUeXBlLnRzXG4gICAgICBjb25zdCBzb3VyY2VUZXh0ID0gYHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fVJlc3VsdCA9ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8JHtpZGVudGlmaWVyUHJlZml4fUV4cHJlc3Npb24+O1xuICAgICAgICB0eXBlICR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uID0gJHt0eXBlRXhwcmVzc2lvbn07XG5cbiAgICAgICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPFQ+ID0gVCBleHRlbmRzICguLi5hcmdzOiBpbmZlciBBKSA9PiBpbmZlciBSXG4gICAgICAgICAgPyAoLi4uYXJnczogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxBPikgPT4gJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxSPlxuICAgICAgICAgIDogeyBbSyBpbiBrZXlvZiBUXTogJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUW0tdPjsgfSAmIHt9O1xuICAgICAgICAgIFxuICAgICAgICAke3NvdXJjZUZpbGUuZ2V0RnVsbFRleHQoKX1gO1xuXG4gICAgICByZXR1cm4gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgIHNvdXJjZVRleHQsXG4gICAgICAgIHNvdXJjZUZpbGUubGFuZ3VhZ2VWZXJzaW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxHZXRTb3VyY2VGaWxlKGZpbGVOYW1lLCAuLi5hcmdzKTtcbiAgfTtcblxuICByZXR1cm4gY3VzdG9tQ29tcGlsZXJIb3N0O1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsd0JBQWU7QUFFZixJQUFNLG1CQUFtQjtBQVdsQixJQUFNLDZCQUE2QixDQUN4QyxnQkFDQSxnQkFDQSxpQkFDQSwwQkFDRztBQUNILFFBQU0scUJBQXFCLGtCQUFBQSxRQUFHLG1CQUFtQixtQkFBbUIsQ0FBQyxDQUFDO0FBQ3RFLFFBQU0sd0JBQXdCLG1CQUFtQjtBQUVqRCxxQkFBbUIsZ0JBQWdCLENBQUMsYUFBYSxTQUFTO0FBQ3hELFFBQUksYUFBYSxnQkFBZ0I7QUFDL0IsWUFBTSxjQUFjLHlCQUF5QjtBQUFBLFFBQzNDO0FBQUEsUUFDQSxHQUFHO0FBQUEsTUFDTDtBQUVBLFVBQUksZUFBZSxRQUFXO0FBQzVCLGVBQU87QUFBQSxNQUNUO0FBR0EsWUFBTSxhQUFhLFFBQVEsZ0JBQWdCLFlBQVksZ0JBQWdCLFVBQVUsZ0JBQWdCO0FBQUEsZUFDeEYsZ0JBQWdCLGdCQUFnQixjQUFjO0FBQUE7QUFBQSxlQUU5QyxnQkFBZ0I7QUFBQSx3QkFDUCxnQkFBZ0IsaUJBQWlCLGdCQUFnQjtBQUFBLGdDQUN6QyxnQkFBZ0I7QUFBQTtBQUFBLFVBRXRDLFdBQVcsWUFBWSxDQUFDO0FBRTVCLGFBQU8sa0JBQUFBLFFBQUc7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFdBQU8sc0JBQXNCLFVBQVUsR0FBRyxJQUFJO0FBQUEsRUFDaEQ7QUFFQSxTQUFPO0FBQ1Q7OztBRHREQSxzQkFBd0Q7QUFDeEQsSUFBQUMscUJBQWU7QUFRZixJQUFNLDZCQUE2QixDQUFDLFNBQXVDO0FBQ3pFLE1BQUksS0FBSyxjQUFjLEtBQUssR0FBRztBQUM3QixRQUFJLENBQUMsbUJBQUFDLFFBQUcsYUFBYSxJQUFJLEdBQUc7QUFDMUIsYUFBTztBQUFBLElBQ1Q7QUFJQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sbUJBQUFBLFFBQUcsYUFBYSxNQUFNLDBCQUEwQjtBQUN6RDtBQStEQSxlQUFzQixhQUFhLFNBQThCO0FBQy9ELE1BQUksUUFBUSxlQUFlLEtBQUssTUFBTSxJQUFJO0FBQ3hDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxnQkFBZ0IsU0FBUztBQUMzQixVQUFNQyxjQUFhLG1CQUFBRCxRQUFHO0FBQUEsTUFDcEI7QUFBQSxNQUNBLFFBQVE7QUFBQSxNQUNSLG1CQUFBQSxRQUFHLGFBQWE7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFFQSxXQUFPLGFBQWE7QUFBQSxNQUNsQixnQkFBZ0I7QUFBQSxNQUNoQixnQkFBZ0IsUUFBUTtBQUFBLE1BQ3hCLHVCQUF1QixNQUFNQztBQUFBLE1BQzdCLG1CQUFtQixRQUFRO0FBQUEsSUFDN0IsQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLG9CQUFvQixRQUFRLHFCQUFxQjtBQUFBLElBQ3JELFFBQVE7QUFBQSxJQUVSLDhCQUE4QjtBQUFBLElBQzlCLDBCQUEwQjtBQUFBLElBQzFCLDRCQUE0QjtBQUFBLElBQzVCLFNBQVM7QUFBQSxFQUNYO0FBRUEsUUFBTSxlQUFlO0FBQUEsSUFDbkIsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1I7QUFBQSxJQUNBLFFBQVE7QUFBQSxFQUNWO0FBRUEsUUFBTSxVQUFVLG1CQUFBRCxRQUFHO0FBQUEsSUFDakIsQ0FBQyxRQUFRLGNBQWM7QUFBQSxJQUN2QjtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBRUEsUUFBTSxhQUFhLFFBQVEsY0FBYyxRQUFRLGNBQWM7QUFDL0QsTUFBSSxDQUFDLFlBQVk7QUFDZixVQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxFQUMxQztBQUVBLFFBQU0sa0JBQWtCLDJCQUEyQixVQUFVO0FBQzdELE1BQUksQ0FBQyxpQkFBaUI7QUFDcEIsVUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDbEM7QUFFQSxRQUFNLGNBQWMsUUFBUSxlQUFlO0FBQzNDLFFBQU0sZUFBZSxZQUFZO0FBQUEsSUFDL0IsWUFBWSxrQkFBa0IsZUFBZTtBQUFBLElBQzdDO0FBQUEsSUFDQSxtQkFBQUEsUUFBRyxnQkFBZ0I7QUFBQSxFQUNyQjtBQUVBLE1BQUksUUFBUSxZQUFZLFFBQVEsU0FBUyxZQUFZLE9BQU87QUFDMUQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGdCQUFnQjtBQUV0QixVQUNFLFVBQU07QUFBQSxJQUNKLFFBQVEsYUFBYSxNQUFNLFlBQVk7QUFBQSxJQUN2QyxRQUFRLFVBQVUsV0FBVztBQUFBLE1BQzNCLFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRixHQUVDLEtBQUssRUFDTCxVQUFVLFFBQVEsYUFBYSxNQUFNLE1BQU07QUFDaEQ7IiwKICAibmFtZXMiOiBbInRzIiwgImltcG9ydF90eXBlc2NyaXB0IiwgInRzIiwgInNvdXJjZUZpbGUiXQp9Cg==
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/create-expander-compiler-host.ts
2
2
  import ts from "typescript";
3
+ var identifierPrefix = "__TYPE_EXPANDER__";
3
4
  var createExpanderCompilerHost = (sourceFileName, typeExpression, compilerOptions, getSourceFileFunction) => {
4
5
  const customCompilerHost = ts.createCompilerHost(compilerOptions ?? {});
5
6
  const originalGetSourceFile = customCompilerHost.getSourceFile;
@@ -12,16 +13,14 @@ var createExpanderCompilerHost = (sourceFileName, typeExpression, compilerOption
12
13
  if (sourceFile === void 0) {
13
14
  return void 0;
14
15
  }
15
- const sourceText = [
16
- ...[
17
- "type __TYPE_EXPANDER_RESULT__ = __TYPE_EXPANDER_EXPAND__<__TYPE_EXPANDER_EXPRESSION__>;",
18
- `type __TYPE_EXPANDER_EXPRESSION__ = ${typeExpression};`,
19
- "type __TYPE_EXPANDER_EXPAND__<T> = {",
20
- " [K in keyof T]: __TYPE_EXPANDER_EXPAND__<T[K]>;",
21
- "} & {};"
22
- ],
23
- sourceFile.getFullText()
24
- ].join("\n");
16
+ const sourceText = `type ${identifierPrefix}Result = ${identifierPrefix}Expand<${identifierPrefix}Expression>;
17
+ type ${identifierPrefix}Expression = ${typeExpression};
18
+
19
+ type ${identifierPrefix}Expand<T> = T extends (...args: infer A) => infer R
20
+ ? (...args: ${identifierPrefix}Expand<A>) => ${identifierPrefix}Expand<R>
21
+ : { [K in keyof T]: ${identifierPrefix}Expand<T[K]>; } & {};
22
+
23
+ ${sourceFile.getFullText()}`;
25
24
  return ts.createSourceFile(
26
25
  fileName,
27
26
  sourceText,
@@ -111,4 +110,4 @@ async function expandMyType(options) {
111
110
  export {
112
111
  expandMyType
113
112
  };
114
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NyZWF0ZS1leHBhbmRlci1jb21waWxlci1ob3N0LnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgYXVnbWVudHMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSBmb3IgZXhwYW5kaW5nIGEgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VGaWxlTmFtZSBOYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBhdWdtZW50LlxuICogQHBhcmFtIHR5cGVFeHByZXNzaW9uIFR5cGUgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjb21waWxlck9wdGlvbnMgVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb25zLlxuICogQHBhcmFtIGdldFNvdXJjZUZpbGVGdW5jdGlvbiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdYCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCByZXR1cm5zIGFuIGF1Z21lbnRlZCBzb3VyY2UgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QgPSAoXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmcsXG4gIHR5cGVFeHByZXNzaW9uOiBzdHJpbmcsXG4gIGNvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgZ2V0U291cmNlRmlsZUZ1bmN0aW9uPzogdHMuQ29tcGlsZXJIb3N0W1wiZ2V0U291cmNlRmlsZVwiXSxcbikgPT4ge1xuICBjb25zdCBjdXN0b21Db21waWxlckhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3QoY29tcGlsZXJPcHRpb25zID8/IHt9KTtcbiAgY29uc3Qgb3JpZ2luYWxHZXRTb3VyY2VGaWxlID0gY3VzdG9tQ29tcGlsZXJIb3N0LmdldFNvdXJjZUZpbGU7XG5cbiAgY3VzdG9tQ29tcGlsZXJIb3N0LmdldFNvdXJjZUZpbGUgPSAoZmlsZU5hbWUsIC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoZmlsZU5hbWUgPT09IHNvdXJjZUZpbGVOYW1lKSB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gKGdldFNvdXJjZUZpbGVGdW5jdGlvbiA/PyBvcmlnaW5hbEdldFNvdXJjZUZpbGUpKFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzb3VyY2VGaWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlVGV4dCA9IFtcbiAgICAgICAgLi4uW1xuICAgICAgICAgIFwidHlwZSBfX1RZUEVfRVhQQU5ERVJfUkVTVUxUX18gPSBfX1RZUEVfRVhQQU5ERVJfRVhQQU5EX188X19UWVBFX0VYUEFOREVSX0VYUFJFU1NJT05fXz47XCIsXG4gICAgICAgICAgYHR5cGUgX19UWVBFX0VYUEFOREVSX0VYUFJFU1NJT05fXyA9ICR7dHlwZUV4cHJlc3Npb259O2AsXG4gICAgICAgICAgXCJ0eXBlIF9fVFlQRV9FWFBBTkRFUl9FWFBBTkRfXzxUPiA9IHtcIixcbiAgICAgICAgICBcIiAgW0sgaW4ga2V5b2YgVF06IF9fVFlQRV9FWFBBTkRFUl9FWFBBTkRfXzxUW0tdPjtcIixcbiAgICAgICAgICBcIn0gJiB7fTtcIixcbiAgICAgICAgXSxcbiAgICAgICAgc291cmNlRmlsZS5nZXRGdWxsVGV4dCgpLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICByZXR1cm4gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgIHNvdXJjZVRleHQsXG4gICAgICAgIHNvdXJjZUZpbGUubGFuZ3VhZ2VWZXJzaW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxHZXRTb3VyY2VGaWxlKGZpbGVOYW1lLCAuLi5hcmdzKTtcbiAgfTtcblxuICByZXR1cm4gY3VzdG9tQ29tcGlsZXJIb3N0O1xufTtcbiIsICJpbXBvcnQgeyBjcmVhdGVFeHBhbmRlckNvbXBpbGVySG9zdCB9IGZyb20gXCIuL2NyZWF0ZS1leHBhbmRlci1jb21waWxlci1ob3N0LnRzXCI7XG5pbXBvcnQgeyBmb3JtYXQsIHR5cGUgT3B0aW9ucyBhcyBQcmV0dGllck9wdGlvbnMgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHRoZSBUWVBFX0VYUEFOREVSX1JFU1VMVCB0eXBlIHNob3VsZCBiZSBzZWFyY2hlZC5cbiAqIEByZXR1cm5zIFRoZSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZS5cbiAqL1xuY29uc3QgZmluZFR5cGVFeHBhbmRlclJlc3VsdE5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHRzLk5vZGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAobm9kZS5nZXRDaGlsZENvdW50KCkgPT0gMCkge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIHB1dCB0aGUgX19UWVBFX0VYUEFOREVSX1JFU1VMVF9fIHR5cGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgICAvLyBmaWxlLCB3ZSBjYW4gcmV0dXJuIHRoZSBmaXJzdCBpZGVudGlmaWVyIHdlIGZpbmQuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gdHMuZm9yRWFjaENoaWxkKG5vZGUsIGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlKTtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVPcHRpb25zQmFzZSA9IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIGV4cHJlc3Npb24gdG8gZXhwYW5kLlxuICAgKiBAZXhhbXBsZSBcIlJldHVyblR5cGU8dHlwZW9mIG15RnVuY3Rpb24+XCJcbiAgICovXG4gIHR5cGVFeHByZXNzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgY29tcGlsZXIgb3B0aW9ucy5cbiAgICovXG4gIHRzQ29tcGlsZXJPcHRpb25zPzogdHMuQ29tcGlsZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQcmV0dGllciBvcHRpb25zLlxuICAgKi9cbiAgcHJldHRpZnk/OiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV0dGlmeSB0aGUgb3V0cHV0LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQcmV0dGllciBvcHRpb25zLiBEb24ndCBmb3JnZXQgdG8gc2V0IHRoZSBwYXJzZXIgdG8gXCJ0eXBlc2NyaXB0XCIuXG4gICAgICogQGRlZmF1bHQgeyBwYXJzZXI6IFwidHlwZXNjcmlwdFwiLCBzZW1pOiBmYWxzZSB9XG4gICAgICovXG4gICAgb3B0aW9ucz86IFByZXR0aWVyT3B0aW9ucztcbiAgfTtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zID0gRXhwYW5kVHlwZU9wdGlvbnNCYXNlICYge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHNvdXJjZSBmaWxlLiBXaGVuIG5vdCBzcGVjaWZpZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGVmYXVsdCBUeXBlU2NyaXB0IGNvbXBpbGVyIGhvc3QgaXMgdXNlZC5cbiAgICovXG4gIGdldFNvdXJjZUZpbGVGdW5jdGlvbj86IHRzLkNvbXBpbGVySG9zdFtcImdldFNvdXJjZUZpbGVcIl07XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgc291cmNlIHRleHQgdG8gZXZhbHVhdGUgdGhlIHR5cGUgZXhwcmVzc2lvbiBpbi5cbiAgICovXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRNeVR5cGVPcHRpb25zID1cbiAgfCBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zXG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShcbiAgb3B0aW9uczogRXhwYW5kVHlwZUZyb21Tb3VyY2VUZXh0T3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlRmlsZU9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5cbi8qKlxuICogRXhwYW5kcyBhIFR5cGVTY3JpcHQgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhwYW5kZWQgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKG9wdGlvbnM6IEV4cGFuZE15VHlwZU9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZUV4cHJlc3Npb24udHJpbSgpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwibmV2ZXJcIjtcbiAgfVxuXG4gIGlmIChcInNvdXJjZVRleHRcIiBpbiBvcHRpb25zKSB7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgICBcInRlc3QudHNcIixcbiAgICAgIG9wdGlvbnMuc291cmNlVGV4dCxcbiAgICAgIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwYW5kTXlUeXBlKHtcbiAgICAgIHNvdXJjZUZpbGVOYW1lOiBcInRlc3QudHNcIixcbiAgICAgIHR5cGVFeHByZXNzaW9uOiBvcHRpb25zLnR5cGVFeHByZXNzaW9uLFxuICAgICAgZ2V0U291cmNlRmlsZUZ1bmN0aW9uOiAoKSA9PiBzb3VyY2VGaWxlLFxuICAgICAgdHNDb21waWxlck9wdGlvbnM6IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB0c0NvbXBpbGVyT3B0aW9ucyA9IG9wdGlvbnMudHNDb21waWxlck9wdGlvbnMgPz8ge1xuICAgIG5vRW1pdDogdHJ1ZSxcblxuICAgIGFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHM6IHRydWUsXG4gICAgYWxsb3dBcmJpdHJhcnlFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgIGFsbG93SnM6IHRydWUsXG4gIH07XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QoXG4gICAgb3B0aW9ucy5zb3VyY2VGaWxlTmFtZSxcbiAgICBvcHRpb25zLnR5cGVFeHByZXNzaW9uLFxuICAgIHRzQ29tcGlsZXJPcHRpb25zLFxuICAgIG9wdGlvbnMuZ2V0U291cmNlRmlsZUZ1bmN0aW9uLFxuICApO1xuXG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKFxuICAgIFtvcHRpb25zLnNvdXJjZUZpbGVOYW1lXSxcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBjb21waWxlckhvc3QsXG4gICk7XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShvcHRpb25zLnNvdXJjZUZpbGVOYW1lKTtcbiAgaWYgKCFzb3VyY2VGaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIGZpbGUgbm90IGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0SWRlbnRpZmllciA9IGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlKHNvdXJjZUZpbGUpO1xuICBpZiAoIWZpcnN0SWRlbnRpZmllcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG5vZGUgZm91bmQhXCIpO1xuICB9XG5cbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IGV4cGFuZGVkVHlwZSA9IHR5cGVDaGVja2VyLnR5cGVUb1N0cmluZyhcbiAgICB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihmaXJzdElkZW50aWZpZXIpLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0cy5UeXBlRm9ybWF0RmxhZ3MuTm9kZUJ1aWxkZXJGbGFnc01hc2ssXG4gICk7XG5cbiAgaWYgKG9wdGlvbnMucHJldHRpZnkgJiYgb3B0aW9ucy5wcmV0dGlmeS5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBleHBhbmRlZFR5cGU7XG4gIH1cblxuICBjb25zdCBkdW1teVR5cGVOYW1lID0gXCJfX1RZUEVfRVhQQU5ERVJfUkVTVUxUX19cIjtcblxuICByZXR1cm4gKFxuICAgIGF3YWl0IGZvcm1hdChcbiAgICAgIGB0eXBlICR7ZHVtbXlUeXBlTmFtZX0gPSAke2V4cGFuZGVkVHlwZX1gLFxuICAgICAgb3B0aW9ucy5wcmV0dGlmeT8ub3B0aW9ucyA/PyB7XG4gICAgICAgIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIHNlbWk6IGZhbHNlLFxuICAgICAgfSxcbiAgICApXG4gIClcbiAgICAudHJpbSgpXG4gICAgLnN1YnN0cmluZyhgdHlwZSAke2R1bW15VHlwZU5hbWV9ID0gYC5sZW5ndGgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sUUFBUTtBQVdSLElBQU0sNkJBQTZCLENBQ3hDLGdCQUNBLGdCQUNBLGlCQUNBLDBCQUNHO0FBQ0gsUUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsbUJBQW1CLENBQUMsQ0FBQztBQUN0RSxRQUFNLHdCQUF3QixtQkFBbUI7QUFFakQscUJBQW1CLGdCQUFnQixDQUFDLGFBQWEsU0FBUztBQUN4RCxRQUFJLGFBQWEsZ0JBQWdCO0FBQy9CLFlBQU0sY0FBYyx5QkFBeUI7QUFBQSxRQUMzQztBQUFBLFFBQ0EsR0FBRztBQUFBLE1BQ0w7QUFFQSxVQUFJLGVBQWUsUUFBVztBQUM1QixlQUFPO0FBQUEsTUFDVDtBQUVBLFlBQU0sYUFBYTtBQUFBLFFBQ2pCLEdBQUc7QUFBQSxVQUNEO0FBQUEsVUFDQSx1Q0FBdUMsY0FBYztBQUFBLFVBQ3JEO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsUUFDQSxXQUFXLFlBQVk7QUFBQSxNQUN6QixFQUFFLEtBQUssSUFBSTtBQUVYLGFBQU8sR0FBRztBQUFBLFFBQ1I7QUFBQSxRQUNBO0FBQUEsUUFDQSxXQUFXO0FBQUEsUUFDWDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBTyxzQkFBc0IsVUFBVSxHQUFHLElBQUk7QUFBQSxFQUNoRDtBQUVBLFNBQU87QUFDVDs7O0FDckRBLFNBQVMsY0FBK0M7QUFDeEQsT0FBT0EsU0FBUTtBQVFmLElBQU0sNkJBQTZCLENBQUMsU0FBdUM7QUFDekUsTUFBSSxLQUFLLGNBQWMsS0FBSyxHQUFHO0FBQzdCLFFBQUksQ0FBQ0EsSUFBRyxhQUFhLElBQUksR0FBRztBQUMxQixhQUFPO0FBQUEsSUFDVDtBQUlBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBT0EsSUFBRyxhQUFhLE1BQU0sMEJBQTBCO0FBQ3pEO0FBK0RBLGVBQXNCLGFBQWEsU0FBOEI7QUFDL0QsTUFBSSxRQUFRLGVBQWUsS0FBSyxNQUFNLElBQUk7QUFDeEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLGdCQUFnQixTQUFTO0FBQzNCLFVBQU1DLGNBQWFELElBQUc7QUFBQSxNQUNwQjtBQUFBLE1BQ0EsUUFBUTtBQUFBLE1BQ1JBLElBQUcsYUFBYTtBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUVBLFdBQU8sYUFBYTtBQUFBLE1BQ2xCLGdCQUFnQjtBQUFBLE1BQ2hCLGdCQUFnQixRQUFRO0FBQUEsTUFDeEIsdUJBQXVCLE1BQU1DO0FBQUEsTUFDN0IsbUJBQW1CLFFBQVE7QUFBQSxJQUM3QixDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sb0JBQW9CLFFBQVEscUJBQXFCO0FBQUEsSUFDckQsUUFBUTtBQUFBLElBRVIsOEJBQThCO0FBQUEsSUFDOUIsMEJBQTBCO0FBQUEsSUFDMUIsNEJBQTRCO0FBQUEsSUFDNUIsU0FBUztBQUFBLEVBQ1g7QUFFQSxRQUFNLGVBQWU7QUFBQSxJQUNuQixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUjtBQUFBLElBQ0EsUUFBUTtBQUFBLEVBQ1Y7QUFFQSxRQUFNLFVBQVVELElBQUc7QUFBQSxJQUNqQixDQUFDLFFBQVEsY0FBYztBQUFBLElBQ3ZCO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGFBQWEsUUFBUSxjQUFjLFFBQVEsY0FBYztBQUMvRCxNQUFJLENBQUMsWUFBWTtBQUNmLFVBQU0sSUFBSSxNQUFNLHdCQUF3QjtBQUFBLEVBQzFDO0FBRUEsUUFBTSxrQkFBa0IsMkJBQTJCLFVBQVU7QUFDN0QsTUFBSSxDQUFDLGlCQUFpQjtBQUNwQixVQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUNsQztBQUVBLFFBQU0sY0FBYyxRQUFRLGVBQWU7QUFDM0MsUUFBTSxlQUFlLFlBQVk7QUFBQSxJQUMvQixZQUFZLGtCQUFrQixlQUFlO0FBQUEsSUFDN0M7QUFBQSxJQUNBQSxJQUFHLGdCQUFnQjtBQUFBLEVBQ3JCO0FBRUEsTUFBSSxRQUFRLFlBQVksUUFBUSxTQUFTLFlBQVksT0FBTztBQUMxRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZ0JBQWdCO0FBRXRCLFVBQ0UsTUFBTTtBQUFBLElBQ0osUUFBUSxhQUFhLE1BQU0sWUFBWTtBQUFBLElBQ3ZDLFFBQVEsVUFBVSxXQUFXO0FBQUEsTUFDM0IsUUFBUTtBQUFBLE1BQ1IsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGLEdBRUMsS0FBSyxFQUNMLFVBQVUsUUFBUSxhQUFhLE1BQU0sTUFBTTtBQUNoRDsiLAogICJuYW1lcyI6IFsidHMiLCAic291cmNlRmlsZSJdCn0K
113
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NyZWF0ZS1leHBhbmRlci1jb21waWxlci1ob3N0LnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmNvbnN0IGlkZW50aWZpZXJQcmVmaXggPSBcIl9fVFlQRV9FWFBBTkRFUl9fXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgYXVnbWVudHMgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSBmb3IgZXhwYW5kaW5nIGEgdHlwZSBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VGaWxlTmFtZSBOYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBhdWdtZW50LlxuICogQHBhcmFtIHR5cGVFeHByZXNzaW9uIFR5cGUgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjb21waWxlck9wdGlvbnMgVHlwZVNjcmlwdCBjb21waWxlciBvcHRpb25zLlxuICogQHBhcmFtIGdldFNvdXJjZUZpbGVGdW5jdGlvbiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdYCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCByZXR1cm5zIGFuIGF1Z21lbnRlZCBzb3VyY2UgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgdHlwZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QgPSAoXG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmcsXG4gIHR5cGVFeHByZXNzaW9uOiBzdHJpbmcsXG4gIGNvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgZ2V0U291cmNlRmlsZUZ1bmN0aW9uPzogdHMuQ29tcGlsZXJIb3N0W1wiZ2V0U291cmNlRmlsZVwiXSxcbikgPT4ge1xuICBjb25zdCBjdXN0b21Db21waWxlckhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3QoY29tcGlsZXJPcHRpb25zID8/IHt9KTtcbiAgY29uc3Qgb3JpZ2luYWxHZXRTb3VyY2VGaWxlID0gY3VzdG9tQ29tcGlsZXJIb3N0LmdldFNvdXJjZUZpbGU7XG5cbiAgY3VzdG9tQ29tcGlsZXJIb3N0LmdldFNvdXJjZUZpbGUgPSAoZmlsZU5hbWUsIC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoZmlsZU5hbWUgPT09IHNvdXJjZUZpbGVOYW1lKSB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gKGdldFNvdXJjZUZpbGVGdW5jdGlvbiA/PyBvcmlnaW5hbEdldFNvdXJjZUZpbGUpKFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzb3VyY2VGaWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvbWFpbi90ZXN0cy9jYXNlcy9jb21waWxlci9jb21wdXRlZFR5cGVzS2V5b2ZOb0luZGV4U2lnbmF0dXJlVHlwZS50c1xuICAgICAgY29uc3Qgc291cmNlVGV4dCA9IGB0eXBlICR7aWRlbnRpZmllclByZWZpeH1SZXN1bHQgPSAke2lkZW50aWZpZXJQcmVmaXh9RXhwYW5kPCR7aWRlbnRpZmllclByZWZpeH1FeHByZXNzaW9uPjtcbiAgICAgICAgdHlwZSAke2lkZW50aWZpZXJQcmVmaXh9RXhwcmVzc2lvbiA9ICR7dHlwZUV4cHJlc3Npb259O1xuXG4gICAgICAgIHR5cGUgJHtpZGVudGlmaWVyUHJlZml4fUV4cGFuZDxUPiA9IFQgZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgQSkgPT4gaW5mZXIgUlxuICAgICAgICAgID8gKC4uLmFyZ3M6ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8QT4pID0+ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8Uj5cbiAgICAgICAgICA6IHsgW0sgaW4ga2V5b2YgVF06ICR7aWRlbnRpZmllclByZWZpeH1FeHBhbmQ8VFtLXT47IH0gJiB7fTtcbiAgICAgICAgICBcbiAgICAgICAgJHtzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCl9YDtcblxuICAgICAgcmV0dXJuIHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgICBzb3VyY2VUZXh0LFxuICAgICAgICBzb3VyY2VGaWxlLmxhbmd1YWdlVmVyc2lvbixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsR2V0U291cmNlRmlsZShmaWxlTmFtZSwgLi4uYXJncyk7XG4gIH07XG5cbiAgcmV0dXJuIGN1c3RvbUNvbXBpbGVySG9zdDtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXhwYW5kZXJDb21waWxlckhvc3QgfSBmcm9tIFwiLi9jcmVhdGUtZXhwYW5kZXItY29tcGlsZXItaG9zdC50c1wiO1xuaW1wb3J0IHsgZm9ybWF0LCB0eXBlIE9wdGlvbnMgYXMgUHJldHRpZXJPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuLyoqXG4gKiBGaW5kcyB0aGUgbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIFRZUEVfRVhQQU5ERVJfUkVTVUxUIHR5cGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSBpbiB3aGljaCB0aGUgVFlQRV9FWFBBTkRFUl9SRVNVTFQgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXG4gKiBAcmV0dXJucyBUaGUgbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIFRZUEVfRVhQQU5ERVJfUkVTVUxUIHR5cGUuXG4gKi9cbmNvbnN0IGZpbmRUeXBlRXhwYW5kZXJSZXN1bHROb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDApIHtcbiAgICBpZiAoIXRzLmlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSB3ZSBwdXQgdGhlIF9fVFlQRV9FWFBBTkRFUl9SRVNVTFRfXyB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4gICAgLy8gZmlsZSwgd2UgY2FuIHJldHVybiB0aGUgZmlyc3QgaWRlbnRpZmllciB3ZSBmaW5kLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCBmaW5kVHlwZUV4cGFuZGVyUmVzdWx0Tm9kZSk7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBleHByZXNzaW9uIHRvIGV4cGFuZC5cbiAgICogQGV4YW1wbGUgXCJSZXR1cm5UeXBlPHR5cGVvZiBteUZ1bmN0aW9uPlwiXG4gICAqL1xuICB0eXBlRXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMuXG4gICAqL1xuICB0c0NvbXBpbGVyT3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogUHJldHRpZXIgb3B0aW9ucy5cbiAgICovXG4gIHByZXR0aWZ5Pzoge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldHRpZnkgdGhlIG91dHB1dC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogUHJldHRpZXIgb3B0aW9ucy4gRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgcGFyc2VyIHRvIFwidHlwZXNjcmlwdFwiLlxuICAgICAqIEBkZWZhdWx0IHsgcGFyc2VyOiBcInR5cGVzY3JpcHRcIiwgc2VtaTogZmFsc2UgfVxuICAgICAqL1xuICAgIG9wdGlvbnM/OiBQcmV0dGllck9wdGlvbnM7XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9ucyA9IEV4cGFuZFR5cGVPcHRpb25zQmFzZSAmIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VGaWxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzb3VyY2UgZmlsZS4gV2hlbiBub3Qgc3BlY2lmaWVkLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlZmF1bHQgVHlwZVNjcmlwdCBjb21waWxlciBob3N0IGlzIHVzZWQuXG4gICAqL1xuICBnZXRTb3VyY2VGaWxlRnVuY3Rpb24/OiB0cy5Db21waWxlckhvc3RbXCJnZXRTb3VyY2VGaWxlXCJdO1xufTtcbmV4cG9ydCB0eXBlIEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMgPSBFeHBhbmRUeXBlT3B0aW9uc0Jhc2UgJiB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHNvdXJjZSB0ZXh0IHRvIGV2YWx1YXRlIHRoZSB0eXBlIGV4cHJlc3Npb24gaW4uXG4gICAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXhwYW5kTXlUeXBlT3B0aW9ucyA9XG4gIHwgRXhwYW5kVHlwZUZyb21Tb3VyY2VGaWxlT3B0aW9uc1xuICB8IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBhbmRNeVR5cGUoXG4gIG9wdGlvbnM6IEV4cGFuZFR5cGVGcm9tU291cmNlVGV4dE9wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwYW5kTXlUeXBlKFxuICBvcHRpb25zOiBFeHBhbmRUeXBlRnJvbVNvdXJjZUZpbGVPcHRpb25zLFxuKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIEV4cGFuZHMgYSBUeXBlU2NyaXB0IHR5cGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGV4cGFuZGVkIHR5cGUgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE15VHlwZShvcHRpb25zOiBFeHBhbmRNeVR5cGVPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGVFeHByZXNzaW9uLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBcIm5ldmVyXCI7XG4gIH1cblxuICBpZiAoXCJzb3VyY2VUZXh0XCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgICAgXCJ0ZXN0LnRzXCIsXG4gICAgICBvcHRpb25zLnNvdXJjZVRleHQsXG4gICAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cGFuZE15VHlwZSh7XG4gICAgICBzb3VyY2VGaWxlTmFtZTogXCJ0ZXN0LnRzXCIsXG4gICAgICB0eXBlRXhwcmVzc2lvbjogb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICAgIGdldFNvdXJjZUZpbGVGdW5jdGlvbjogKCkgPT4gc291cmNlRmlsZSxcbiAgICAgIHRzQ29tcGlsZXJPcHRpb25zOiBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgdHNDb21waWxlck9wdGlvbnMgPSBvcHRpb25zLnRzQ29tcGlsZXJPcHRpb25zID8/IHtcbiAgICBub0VtaXQ6IHRydWUsXG5cbiAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLFxuICAgIGFsbG93QXJiaXRyYXJ5RXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICB9O1xuXG4gIGNvbnN0IGNvbXBpbGVySG9zdCA9IGNyZWF0ZUV4cGFuZGVyQ29tcGlsZXJIb3N0KFxuICAgIG9wdGlvbnMuc291cmNlRmlsZU5hbWUsXG4gICAgb3B0aW9ucy50eXBlRXhwcmVzc2lvbixcbiAgICB0c0NvbXBpbGVyT3B0aW9ucyxcbiAgICBvcHRpb25zLmdldFNvdXJjZUZpbGVGdW5jdGlvbixcbiAgKTtcblxuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShcbiAgICBbb3B0aW9ucy5zb3VyY2VGaWxlTmFtZV0sXG4gICAgdHNDb21waWxlck9wdGlvbnMsXG4gICAgY29tcGlsZXJIb3N0LFxuICApO1xuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGUob3B0aW9ucy5zb3VyY2VGaWxlTmFtZSk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBmaWxlIG5vdCBmb3VuZCFcIik7XG4gIH1cblxuICBjb25zdCBmaXJzdElkZW50aWZpZXIgPSBmaW5kVHlwZUV4cGFuZGVyUmVzdWx0Tm9kZShzb3VyY2VGaWxlKTtcbiAgaWYgKCFmaXJzdElkZW50aWZpZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlIGZvdW5kIVwiKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBleHBhbmRlZFR5cGUgPSB0eXBlQ2hlY2tlci50eXBlVG9TdHJpbmcoXG4gICAgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oZmlyc3RJZGVudGlmaWVyKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdHMuVHlwZUZvcm1hdEZsYWdzLk5vZGVCdWlsZGVyRmxhZ3NNYXNrLFxuICApO1xuXG4gIGlmIChvcHRpb25zLnByZXR0aWZ5ICYmIG9wdGlvbnMucHJldHRpZnkuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZXhwYW5kZWRUeXBlO1xuICB9XG5cbiAgY29uc3QgZHVtbXlUeXBlTmFtZSA9IFwiX19UWVBFX0VYUEFOREVSX1JFU1VMVF9fXCI7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBmb3JtYXQoXG4gICAgICBgdHlwZSAke2R1bW15VHlwZU5hbWV9ID0gJHtleHBhbmRlZFR5cGV9YCxcbiAgICAgIG9wdGlvbnMucHJldHRpZnk/Lm9wdGlvbnMgPz8ge1xuICAgICAgICBwYXJzZXI6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICBzZW1pOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKVxuICApXG4gICAgLnRyaW0oKVxuICAgIC5zdWJzdHJpbmcoYHR5cGUgJHtkdW1teVR5cGVOYW1lfSA9IGAubGVuZ3RoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxPQUFPLFFBQVE7QUFFZixJQUFNLG1CQUFtQjtBQVdsQixJQUFNLDZCQUE2QixDQUN4QyxnQkFDQSxnQkFDQSxpQkFDQSwwQkFDRztBQUNILFFBQU0scUJBQXFCLEdBQUcsbUJBQW1CLG1CQUFtQixDQUFDLENBQUM7QUFDdEUsUUFBTSx3QkFBd0IsbUJBQW1CO0FBRWpELHFCQUFtQixnQkFBZ0IsQ0FBQyxhQUFhLFNBQVM7QUFDeEQsUUFBSSxhQUFhLGdCQUFnQjtBQUMvQixZQUFNLGNBQWMseUJBQXlCO0FBQUEsUUFDM0M7QUFBQSxRQUNBLEdBQUc7QUFBQSxNQUNMO0FBRUEsVUFBSSxlQUFlLFFBQVc7QUFDNUIsZUFBTztBQUFBLE1BQ1Q7QUFHQSxZQUFNLGFBQWEsUUFBUSxnQkFBZ0IsWUFBWSxnQkFBZ0IsVUFBVSxnQkFBZ0I7QUFBQSxlQUN4RixnQkFBZ0IsZ0JBQWdCLGNBQWM7QUFBQTtBQUFBLGVBRTlDLGdCQUFnQjtBQUFBLHdCQUNQLGdCQUFnQixpQkFBaUIsZ0JBQWdCO0FBQUEsZ0NBQ3pDLGdCQUFnQjtBQUFBO0FBQUEsVUFFdEMsV0FBVyxZQUFZLENB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expand-my-type",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Expand TypeScript type expressions programmatically",
5
5
  "keywords": [
6
6
  "expand",
@@ -32,15 +32,21 @@
32
32
  },
33
33
  "main": "dist/index.cjs",
34
34
  "types": "dist/index.d.ts",
35
+ "bin": {
36
+ "expand-my-type": "./dist/cli.js"
37
+ },
35
38
  "files": [
36
39
  "dist/index.cjs",
37
40
  "dist/index.d.cts",
38
41
  "dist/index.d.ts",
39
- "dist/index.js"
42
+ "dist/index.js",
43
+ "dist/cli.js"
40
44
  ],
41
45
  "scripts": {
46
+ "bundle-cli": "tsup ./src/cli.ts --format esm --sourcemap inline --silent",
47
+ "bundle-lib": "tsup ./src/index.ts --format cjs,esm --dts --clean --sourcemap inline --silent",
42
48
  "format": "prettier --write .",
43
- "prepare": "tsup ./src/index.ts --format esm,cjs --dts --clean --sourcemap inline --silent",
49
+ "prepare": "npm run bundle-lib && npm run bundle-cli",
44
50
  "pretest": "tsc",
45
51
  "test": "tsx --test --test-reporter spec ./src/index.test.ts"
46
52
  },