@nlabs/lex 1.46.2 → 1.47.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/__mocks__/LexConfig.js +20 -0
- package/__mocks__/boxen.js +7 -0
- package/__mocks__/build.js +16 -0
- package/__mocks__/chalk.js +23 -0
- package/__mocks__/compile.js +8 -0
- package/__mocks__/execa.js +21 -0
- package/__mocks__/ora.js +17 -0
- package/__mocks__/versions.js +12 -0
- package/dist/LexConfig.js +72 -14
- package/dist/commands/ai/ai.js +303 -0
- package/dist/commands/ai/index.js +7 -0
- package/dist/commands/build/build.js +350 -0
- package/dist/commands/clean/clean.js +31 -0
- package/dist/commands/compile/compile.js +195 -0
- package/dist/commands/config/config.js +43 -0
- package/dist/commands/copy/copy.js +38 -0
- package/dist/commands/create/create.js +124 -0
- package/dist/commands/dev/dev.js +70 -0
- package/dist/commands/init/init.js +93 -0
- package/dist/commands/link/link.js +15 -0
- package/dist/commands/lint/lint.js +656 -0
- package/dist/commands/migrate/migrate.js +37 -0
- package/dist/commands/publish/publish.js +104 -0
- package/dist/commands/test/test.js +327 -0
- package/dist/commands/update/update.js +62 -0
- package/dist/commands/upgrade/upgrade.js +47 -0
- package/dist/commands/versions/versions.js +41 -0
- package/dist/create/changelog.js +3 -3
- package/dist/index.js +35 -0
- package/dist/jest.config.lex.d.ts +2 -0
- package/dist/lex.js +25 -22
- package/dist/types.js +1 -0
- package/dist/utils/aiService.js +290 -0
- package/dist/utils/app.js +3 -3
- package/dist/utils/file.js +1 -1
- package/dist/utils/log.js +2 -1
- package/dist/utils/reactShim.js +3 -3
- package/dist/webpack.config.d.ts +2 -0
- package/eslint.config.js +10 -0
- package/index.cjs +20 -0
- package/jest.config.cjs +31 -27
- package/jest.config.lex.js +90 -38
- package/jest.setup.js +5 -0
- package/lex.config.js +50 -0
- package/package.json +69 -52
- package/{.postcssrc.js → postcss.config.js} +21 -9
- package/tsconfig.json +2 -1
- package/webpack.config.js +27 -11
- package/dist/commands/build.js +0 -265
- package/dist/commands/bulid.test.js +0 -317
- package/dist/commands/clean.js +0 -31
- package/dist/commands/clean.test.js +0 -63
- package/dist/commands/compile.js +0 -195
- package/dist/commands/compile.test.js +0 -93
- package/dist/commands/config.js +0 -43
- package/dist/commands/copy.js +0 -38
- package/dist/commands/create.js +0 -120
- package/dist/commands/dev.js +0 -70
- package/dist/commands/init.js +0 -93
- package/dist/commands/link.js +0 -15
- package/dist/commands/lint.js +0 -179
- package/dist/commands/migrate.js +0 -37
- package/dist/commands/publish.js +0 -104
- package/dist/commands/test.js +0 -190
- package/dist/commands/update.js +0 -64
- package/dist/commands/upgrade.js +0 -47
- package/dist/commands/versions.js +0 -41
- package/dist/commands/versions.test.js +0 -49
- package/dist/lint.js +0 -11
- package/jest.setup.ts +0 -3
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
+
import { resolve as pathResolve } from "path";
|
|
3
|
+
import readline from "readline";
|
|
4
|
+
import { createSpinner } from "./app.js";
|
|
5
|
+
import { log } from "./log.js";
|
|
6
|
+
import { LexConfig } from "../LexConfig.js";
|
|
7
|
+
const callCursorAI = async (prompt, options) => {
|
|
8
|
+
try {
|
|
9
|
+
log("Using Cursor IDE for AI fixes...", "info");
|
|
10
|
+
log("AI fix requested via Cursor IDE", "info");
|
|
11
|
+
const taskMatch = prompt.match(/^(Generate code according to the following request|Explain the following code|Generate comprehensive unit tests|Analyze the following code|Provide guidance on the following development question):/);
|
|
12
|
+
const task = taskMatch ? taskMatch[1] : "";
|
|
13
|
+
const isGenerateTask = task.startsWith("Generate code");
|
|
14
|
+
const questionMatch = prompt.match(/(?:Generate code according to the following request|Explain the following code|Generate comprehensive unit tests|Analyze the following code|Provide guidance on the following development question):\s*([\s\S]+?)(?:===CONTEXT===|$)/);
|
|
15
|
+
const question = questionMatch ? questionMatch[1].trim() : prompt;
|
|
16
|
+
if (question.toLowerCase().includes("how many files") && prompt.includes("Project structure:")) {
|
|
17
|
+
const projectStructure = prompt.split("Project structure:")[1] || "";
|
|
18
|
+
const files = projectStructure.trim().split("\n");
|
|
19
|
+
return `Based on the project structure provided, there are ${files.length} files in the project.`;
|
|
20
|
+
}
|
|
21
|
+
if (isGenerateTask) {
|
|
22
|
+
return `
|
|
23
|
+
# Code Generation Request: "${question}"
|
|
24
|
+
|
|
25
|
+
To generate code using Cursor's AI capabilities:
|
|
26
|
+
|
|
27
|
+
1. **Open your project in Cursor IDE** (https://cursor.sh)
|
|
28
|
+
2. Press **Cmd+L** (or Ctrl+L on Windows/Linux) to open the AI chat
|
|
29
|
+
3. Type your request: "${question}"
|
|
30
|
+
4. Cursor will generate the code directly in your editor
|
|
31
|
+
|
|
32
|
+
The current CLI integration doesn't have direct access to Cursor's code generation capabilities.
|
|
33
|
+
|
|
34
|
+
**Alternative options:**
|
|
35
|
+
|
|
36
|
+
1. **Use OpenAI or Anthropic directly:**
|
|
37
|
+
Configure in lex.config.js:
|
|
38
|
+
\`\`\`js
|
|
39
|
+
export default {
|
|
40
|
+
ai: {
|
|
41
|
+
provider: 'openai',
|
|
42
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
43
|
+
model: 'gpt-4o'
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
2. **Use Cursor's command line tool:**
|
|
49
|
+
Install: \`npm install -g @cursor/cli\`
|
|
50
|
+
Run: \`cursor ai "${question}"\`
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
return `
|
|
54
|
+
To use Cursor's AI capabilities for "${question}", you need to:
|
|
55
|
+
|
|
56
|
+
1. Open your project in Cursor IDE (https://cursor.sh)
|
|
57
|
+
2. Use Cursor's built-in AI features by pressing Cmd+K or Cmd+L
|
|
58
|
+
3. Or run the 'cursor' command directly from your terminal
|
|
59
|
+
|
|
60
|
+
The current integration is limited and doesn't directly access Cursor's AI capabilities.
|
|
61
|
+
|
|
62
|
+
For the best experience with AI code generation:
|
|
63
|
+
- Use Cursor IDE directly
|
|
64
|
+
- Or configure OpenAI or Anthropic as your provider in lex.config.js:
|
|
65
|
+
|
|
66
|
+
\`\`\`js
|
|
67
|
+
// lex.config.js
|
|
68
|
+
export default {
|
|
69
|
+
ai: {
|
|
70
|
+
provider: 'openai', // or 'anthropic'
|
|
71
|
+
apiKey: process.env.OPENAI_API_KEY, // or ANTHROPIC_API_KEY
|
|
72
|
+
model: 'gpt-4o' // or 'claude-3-opus'
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
\`\`\`
|
|
76
|
+
|
|
77
|
+
Then set your API key as an environment variable:
|
|
78
|
+
\`\`\`
|
|
79
|
+
export OPENAI_API_KEY=your_key_here
|
|
80
|
+
\`\`\`
|
|
81
|
+
`;
|
|
82
|
+
} catch (error) {
|
|
83
|
+
throw new Error(`Cursor AI error: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const callOpenAIAI = async (prompt, options) => {
|
|
87
|
+
try {
|
|
88
|
+
const apiKey = options.apiKey || process.env.OPENAI_API_KEY;
|
|
89
|
+
if (!apiKey) {
|
|
90
|
+
throw new Error("OpenAI API key is required. Set it in lex.config.js or as OPENAI_API_KEY environment variable.");
|
|
91
|
+
}
|
|
92
|
+
const response = await fetch("https://api.openai.com/v1/chat/completions", {
|
|
93
|
+
body: JSON.stringify({
|
|
94
|
+
max_tokens: options.maxTokens || 4e3,
|
|
95
|
+
messages: [
|
|
96
|
+
{ content: "You are a helpful assistant that fixes ESLint errors in code.", role: "system" },
|
|
97
|
+
{ content: prompt, role: "user" }
|
|
98
|
+
],
|
|
99
|
+
model: options.model || "gpt-4o",
|
|
100
|
+
temperature: options.temperature || 0.1
|
|
101
|
+
}),
|
|
102
|
+
headers: {
|
|
103
|
+
Authorization: `Bearer ${apiKey}`,
|
|
104
|
+
"Content-Type": "application/json"
|
|
105
|
+
},
|
|
106
|
+
method: "POST"
|
|
107
|
+
});
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
const error = await response.json();
|
|
110
|
+
throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);
|
|
111
|
+
}
|
|
112
|
+
const data = await response.json();
|
|
113
|
+
return data.choices[0].message.content;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
throw new Error(`OpenAI AI error: ${error.message}`);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const callAnthropicAI = async (prompt, options) => {
|
|
119
|
+
try {
|
|
120
|
+
const apiKey = options.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
121
|
+
if (!apiKey) {
|
|
122
|
+
throw new Error("Anthropic API key is required. Set it in lex.config.js or as ANTHROPIC_API_KEY environment variable.");
|
|
123
|
+
}
|
|
124
|
+
const response = await fetch("https://api.anthropic.com/v1/messages", {
|
|
125
|
+
body: JSON.stringify({
|
|
126
|
+
max_tokens: options.maxTokens || 4e3,
|
|
127
|
+
messages: [
|
|
128
|
+
{ content: prompt, role: "user" }
|
|
129
|
+
],
|
|
130
|
+
model: options.model || "claude-3-sonnet-20240229",
|
|
131
|
+
temperature: options.temperature || 0.1
|
|
132
|
+
}),
|
|
133
|
+
headers: {
|
|
134
|
+
"Content-Type": "application/json",
|
|
135
|
+
"anthropic-version": "2023-06-01",
|
|
136
|
+
"x-api-key": apiKey
|
|
137
|
+
},
|
|
138
|
+
method: "POST"
|
|
139
|
+
});
|
|
140
|
+
if (!response.ok) {
|
|
141
|
+
const error = await response.json();
|
|
142
|
+
throw new Error(`Anthropic API error: ${error.error?.message || response.statusText}`);
|
|
143
|
+
}
|
|
144
|
+
const data = await response.json();
|
|
145
|
+
return data.content[0].text;
|
|
146
|
+
} catch (error) {
|
|
147
|
+
throw new Error(`Anthropic AI error: ${error.message}`);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const callCopilotAI = async (prompt, options) => {
|
|
151
|
+
try {
|
|
152
|
+
log("GitHub Copilot AI fixes not directly supported. Using manual fix mode.", "info");
|
|
153
|
+
return prompt;
|
|
154
|
+
} catch (error) {
|
|
155
|
+
throw new Error(`GitHub Copilot AI error: ${error.message}`);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const promptForAIProvider = async (quiet = false) => {
|
|
159
|
+
const rl = readline.createInterface({
|
|
160
|
+
input: process.stdin,
|
|
161
|
+
output: process.stdout
|
|
162
|
+
});
|
|
163
|
+
return new Promise((resolve) => {
|
|
164
|
+
log("\nNo AI provider configured. Please choose an AI provider:", "info");
|
|
165
|
+
log("1. Cursor IDE", "info");
|
|
166
|
+
log("2. OpenAI", "info");
|
|
167
|
+
log("3. Anthropic", "info");
|
|
168
|
+
log("4. GitHub Copilot", "info");
|
|
169
|
+
log("5. None (Skip AI features)", "info");
|
|
170
|
+
rl.question("Enter your choice (1-5): ", (answer) => {
|
|
171
|
+
rl.close();
|
|
172
|
+
switch (answer) {
|
|
173
|
+
case "1":
|
|
174
|
+
resolve("cursor");
|
|
175
|
+
break;
|
|
176
|
+
case "2":
|
|
177
|
+
resolve("openai");
|
|
178
|
+
break;
|
|
179
|
+
case "3":
|
|
180
|
+
resolve("anthropic");
|
|
181
|
+
break;
|
|
182
|
+
case "4":
|
|
183
|
+
resolve("copilot");
|
|
184
|
+
break;
|
|
185
|
+
default:
|
|
186
|
+
resolve("none");
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
const promptForAPIKey = async (provider, quiet = false) => {
|
|
192
|
+
const rl = readline.createInterface({
|
|
193
|
+
input: process.stdin,
|
|
194
|
+
output: process.stdout
|
|
195
|
+
});
|
|
196
|
+
return new Promise((resolve) => {
|
|
197
|
+
rl.question(`Please enter your ${provider} API key: `, (answer) => {
|
|
198
|
+
rl.close();
|
|
199
|
+
resolve(answer);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
const getAIService = (provider, options) => {
|
|
204
|
+
switch (provider) {
|
|
205
|
+
case "cursor":
|
|
206
|
+
return callCursorAI;
|
|
207
|
+
case "openai":
|
|
208
|
+
return callOpenAIAI;
|
|
209
|
+
case "anthropic":
|
|
210
|
+
return callAnthropicAI;
|
|
211
|
+
case "copilot":
|
|
212
|
+
return callCopilotAI;
|
|
213
|
+
default:
|
|
214
|
+
return async () => "No AI provider configured";
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const callAIService = async (prompt, quiet = false) => {
|
|
218
|
+
const spinner = createSpinner(quiet);
|
|
219
|
+
spinner.start("Calling AI service to fix code issues...");
|
|
220
|
+
try {
|
|
221
|
+
const aiConfig = LexConfig.config.ai || { provider: "none" };
|
|
222
|
+
const isInCursorIDE = process.env.CURSOR_IDE === "true";
|
|
223
|
+
if (isInCursorIDE && (aiConfig.provider === "none" || !aiConfig.provider)) {
|
|
224
|
+
log("Detected Cursor IDE environment, using Cursor as AI provider", "info", quiet);
|
|
225
|
+
aiConfig.provider = "cursor";
|
|
226
|
+
}
|
|
227
|
+
if (aiConfig.provider === "none") {
|
|
228
|
+
const provider = await promptForAIProvider(quiet);
|
|
229
|
+
if (provider === "none") {
|
|
230
|
+
spinner.fail("AI features skipped");
|
|
231
|
+
return "";
|
|
232
|
+
}
|
|
233
|
+
aiConfig.provider = provider;
|
|
234
|
+
if (provider !== "cursor" && provider !== "copilot" && !process.env[`${provider.toUpperCase()}_API_KEY`]) {
|
|
235
|
+
aiConfig.apiKey = await promptForAPIKey(provider, quiet);
|
|
236
|
+
}
|
|
237
|
+
LexConfig.config.ai = aiConfig;
|
|
238
|
+
const configPath = pathResolve(process.cwd(), "lex.config.js");
|
|
239
|
+
if (existsSync(configPath)) {
|
|
240
|
+
try {
|
|
241
|
+
const configContent = readFileSync(configPath, "utf8");
|
|
242
|
+
const updatedConfig = configContent.replace(
|
|
243
|
+
/ai:.*?[,}]/s,
|
|
244
|
+
`ai: { provider: '${aiConfig.provider}' },`
|
|
245
|
+
);
|
|
246
|
+
writeFileSync(configPath, updatedConfig);
|
|
247
|
+
} catch (_error) {
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
let result = "";
|
|
252
|
+
switch (aiConfig.provider) {
|
|
253
|
+
case "cursor":
|
|
254
|
+
result = await callCursorAI(prompt, aiConfig);
|
|
255
|
+
log("Cursor IDE AI integration active", "info", quiet);
|
|
256
|
+
break;
|
|
257
|
+
case "openai":
|
|
258
|
+
result = await callOpenAIAI(prompt, aiConfig);
|
|
259
|
+
break;
|
|
260
|
+
case "anthropic":
|
|
261
|
+
result = await callAnthropicAI(prompt, aiConfig);
|
|
262
|
+
break;
|
|
263
|
+
case "copilot":
|
|
264
|
+
result = await callCopilotAI(prompt, aiConfig);
|
|
265
|
+
break;
|
|
266
|
+
default:
|
|
267
|
+
spinner.fail("No AI provider configured");
|
|
268
|
+
return "";
|
|
269
|
+
}
|
|
270
|
+
spinner.succeed("AI code fixes generated successfully");
|
|
271
|
+
return result;
|
|
272
|
+
} catch (error) {
|
|
273
|
+
spinner.fail(`AI service error: ${error.message}`);
|
|
274
|
+
if (!quiet) {
|
|
275
|
+
log(error, "error");
|
|
276
|
+
}
|
|
277
|
+
return "";
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
export {
|
|
281
|
+
callAIService,
|
|
282
|
+
callAnthropicAI,
|
|
283
|
+
callCopilotAI,
|
|
284
|
+
callCursorAI,
|
|
285
|
+
callOpenAIAI,
|
|
286
|
+
getAIService,
|
|
287
|
+
promptForAIProvider,
|
|
288
|
+
promptForAPIKey
|
|
289
|
+
};
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FpU2VydmljZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcblxuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi9sb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWcsIEFJQ29uZmlnfSBmcm9tICcuLi9MZXhDb25maWcuanMnO1xuXG4vLyBDdXJzb3IgSURFIGludGVncmF0aW9uXG5leHBvcnQgY29uc3QgY2FsbEN1cnNvckFJID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHRyeSB7XG4gICAgLy8gV2hlbiBydW5uaW5nIHdpdGhpbiBDdXJzb3IgSURFLCB3ZSBjYW4gd3JpdGUgdGhlIHByb21wdCB0byBhIHRlbXBvcmFyeSBmaWxlXG4gICAgLy8gdGhhdCBDdXJzb3IgY2FuIHVzZSB0byBwcm92aWRlIEFJIGFzc2lzdGFuY2VcbiAgICBsb2coJ1VzaW5nIEN1cnNvciBJREUgZm9yIEFJIGZpeGVzLi4uJywgJ2luZm8nKTtcblxuICAgIC8vIEZvciBub3csIGp1c3QgbG9nIHRoZSBwcm9tcHQgYW5kIHJldHVybiBhIHBsYWNlaG9sZGVyXG4gICAgLy8gSW4gYSByZWFsIGltcGxlbWVudGF0aW9uLCBDdXJzb3Igd291bGQgaGFuZGxlIHRoaXMgYXV0b21hdGljYWxseVxuICAgIGxvZygnQUkgZml4IHJlcXVlc3RlZCB2aWEgQ3Vyc29yIElERScsICdpbmZvJyk7XG5cbiAgICBjb25zdCB0YXNrTWF0Y2ggPSBwcm9tcHQubWF0Y2goL14oR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0fEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlfEdlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0c3xBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZXxQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb24pOi8pO1xuICAgIGNvbnN0IHRhc2sgPSB0YXNrTWF0Y2ggPyB0YXNrTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBpc0dlbmVyYXRlVGFzayA9IHRhc2suc3RhcnRzV2l0aCgnR2VuZXJhdGUgY29kZScpO1xuICAgIFxuICAgIGNvbnN0IHF1ZXN0aW9uTWF0Y2ggPSBwcm9tcHQubWF0Y2goLyg/OkdlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdHxFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZXxHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHN8QW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGV8UHJvdmlkZSBndWlkYW5jZSBvbiB0aGUgZm9sbG93aW5nIGRldmVsb3BtZW50IHF1ZXN0aW9uKTpcXHMqKFtcXHNcXFNdKz8pKD86PT09Q09OVEVYVD09PXwkKS8pO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25NYXRjaCA/IHF1ZXN0aW9uTWF0Y2hbMV0udHJpbSgpIDogcHJvbXB0O1xuICAgIFxuICAgIGlmIChxdWVzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdob3cgbWFueSBmaWxlcycpICYmIHByb21wdC5pbmNsdWRlcygnUHJvamVjdCBzdHJ1Y3R1cmU6JykpIHtcbiAgICAgIGNvbnN0IHByb2plY3RTdHJ1Y3R1cmUgPSBwcm9tcHQuc3BsaXQoJ1Byb2plY3Qgc3RydWN0dXJlOicpWzFdIHx8ICcnO1xuICAgICAgY29uc3QgZmlsZXMgPSBwcm9qZWN0U3RydWN0dXJlLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgICByZXR1cm4gYEJhc2VkIG9uIHRoZSBwcm9qZWN0IHN0cnVjdHVyZSBwcm92aWRlZCwgdGhlcmUgYXJlICR7ZmlsZXMubGVuZ3RofSBmaWxlcyBpbiB0aGUgcHJvamVjdC5gO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXNHZW5lcmF0ZVRhc2spIHtcbiAgICAgIHJldHVybiBgXG4jIENvZGUgR2VuZXJhdGlvbiBSZXF1ZXN0OiBcIiR7cXVlc3Rpb259XCJcblxuVG8gZ2VuZXJhdGUgY29kZSB1c2luZyBDdXJzb3IncyBBSSBjYXBhYmlsaXRpZXM6XG5cbjEuICoqT3BlbiB5b3VyIHByb2plY3QgaW4gQ3Vyc29yIElERSoqIChodHRwczovL2N1cnNvci5zaClcbjIuIFByZXNzICoqQ21kK0wqKiAob3IgQ3RybCtMIG9uIFdpbmRvd3MvTGludXgpIHRvIG9wZW4gdGhlIEFJIGNoYXRcbjMuIFR5cGUgeW91ciByZXF1ZXN0OiBcIiR7cXVlc3Rpb259XCJcbjQuIEN1cnNvciB3aWxsIGdlbmVyYXRlIHRoZSBjb2RlIGRpcmVjdGx5IGluIHlvdXIgZWRpdG9yXG5cblRoZSBjdXJyZW50IENMSSBpbnRlZ3JhdGlvbiBkb2Vzbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBDdXJzb3IncyBjb2RlIGdlbmVyYXRpb24gY2FwYWJpbGl0aWVzLlxuXG4qKkFsdGVybmF0aXZlIG9wdGlvbnM6KipcblxuMS4gKipVc2UgT3BlbkFJIG9yIEFudGhyb3BpYyBkaXJlY3RseToqKlxuICAgQ29uZmlndXJlIGluIGxleC5jb25maWcuanM6XG4gICBcXGBcXGBcXGBqc1xuICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICBhaToge1xuICAgICAgIHByb3ZpZGVyOiAnb3BlbmFpJyxcbiAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLFxuICAgICAgIG1vZGVsOiAnZ3B0LTRvJ1xuICAgICB9XG4gICB9XG4gICBcXGBcXGBcXGBcblxuMi4gKipVc2UgQ3Vyc29yJ3MgY29tbWFuZCBsaW5lIHRvb2w6KipcbiAgIEluc3RhbGw6IFxcYG5wbSBpbnN0YWxsIC1nIEBjdXJzb3IvY2xpXFxgXG4gICBSdW46IFxcYGN1cnNvciBhaSBcIiR7cXVlc3Rpb259XCJcXGBcbmA7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBgXG5UbyB1c2UgQ3Vyc29yJ3MgQUkgY2FwYWJpbGl0aWVzIGZvciBcIiR7cXVlc3Rpb259XCIsIHlvdSBuZWVkIHRvOlxuXG4xLiBPcGVuIHlvdXIgcHJvamVjdCBpbiBDdXJzb3IgSURFIChodHRwczovL2N1cnNvci5zaClcbjIuIFVzZSBDdXJzb3IncyBidWlsdC1pbiBBSSBmZWF0dXJlcyBieSBwcmVzc2luZyBDbWQrSyBvciBDbWQrTFxuMy4gT3IgcnVuIHRoZSAnY3Vyc29yJyBjb21tYW5kIGRpcmVjdGx5IGZyb20geW91ciB0ZXJtaW5hbFxuXG5UaGUgY3VycmVudCBpbnRlZ3JhdGlvbiBpcyBsaW1pdGVkIGFuZCBkb2Vzbid0IGRpcmVjdGx5IGFjY2VzcyBDdXJzb3IncyBBSSBjYXBhYmlsaXRpZXMuXG5cbkZvciB0aGUgYmVzdCBleHBlcmllbmNlIHdpdGggQUkgY29kZSBnZW5lcmF0aW9uOlxuLSBVc2UgQ3Vyc29yIElERSBkaXJlY3RseVxuLSBPciBjb25maWd1cmUgT3BlbkFJIG9yIEFudGhyb3BpYyBhcyB5b3VyIHByb3ZpZGVyIGluIGxleC5jb25maWcuanM6XG5cblxcYFxcYFxcYGpzXG4vLyBsZXguY29uZmlnLmpzXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFpOiB7XG4gICAgcHJvdmlkZXI6ICdvcGVuYWknLCAvLyBvciAnYW50aHJvcGljJ1xuICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksIC8vIG9yIEFOVEhST1BJQ19BUElfS0VZXG4gICAgbW9kZWw6ICdncHQtNG8nIC8vIG9yICdjbGF1ZGUtMy1vcHVzJ1xuICB9XG59XG5cXGBcXGBcXGBcblxuVGhlbiBzZXQgeW91ciBBUEkga2V5IGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlOlxuXFxgXFxgXFxgXG5leHBvcnQgT1BFTkFJX0FQSV9LRVk9eW91cl9rZXlfaGVyZVxuXFxgXFxgXFxgXG5gO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDdXJzb3IgQUkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhbGxPcGVuQUlBSSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZO1xuICAgIGlmKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlbkFJIEFQSSBrZXkgaXMgcmVxdWlyZWQuIFNldCBpdCBpbiBsZXguY29uZmlnLmpzIG9yIGFzIE9QRU5BSV9BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvY2hhdC9jb21wbGV0aW9ucycsIHtcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbWF4X3Rva2Vuczogb3B0aW9ucy5tYXhUb2tlbnMgfHwgNDAwMCxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7Y29udGVudDogJ1lvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudCB0aGF0IGZpeGVzIEVTTGludCBlcnJvcnMgaW4gY29kZS4nLCByb2xlOiAnc3lzdGVtJ30sXG4gICAgICAgICAge2NvbnRlbnQ6IHByb21wdCwgcm9sZTogJ3VzZXInfVxuICAgICAgICBdLFxuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCB8fCAnZ3B0LTRvJyxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUgfHwgMC4xXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KTtcblxuICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZW5BSSBBUEkgZXJyb3I6ICR7ZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhLmNob2ljZXNbMF0ubWVzc2FnZS5jb250ZW50O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPcGVuQUkgQUkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhbGxBbnRocm9waWNBSSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIGlmKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW50aHJvcGljIEFQSSBrZXkgaXMgcmVxdWlyZWQuIFNldCBpdCBpbiBsZXguY29uZmlnLmpzIG9yIGFzIEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLmFudGhyb3BpYy5jb20vdjEvbWVzc2FnZXMnLCB7XG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG1heF90b2tlbnM6IG9wdGlvbnMubWF4VG9rZW5zIHx8IDQwMDAsXG4gICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAge2NvbnRlbnQ6IHByb21wdCwgcm9sZTogJ3VzZXInfVxuICAgICAgICBdLFxuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCB8fCAnY2xhdWRlLTMtc29ubmV0LTIwMjQwMjI5JyxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUgfHwgMC4xXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ2FudGhyb3BpYy12ZXJzaW9uJzogJzIwMjMtMDYtMDEnLFxuICAgICAgICAneC1hcGkta2V5JzogYXBpS2V5XG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KTtcblxuICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFudGhyb3BpYyBBUEkgZXJyb3I6ICR7ZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhLmNvbnRlbnRbMF0udGV4dDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQW50aHJvcGljIEFJIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjYWxsQ29waWxvdEFJID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHRyeSB7XG4gICAgbG9nKCdHaXRIdWIgQ29waWxvdCBBSSBmaXhlcyBub3QgZGlyZWN0bHkgc3VwcG9ydGVkLiBVc2luZyBtYW51YWwgZml4IG1vZGUuJywgJ2luZm8nKTtcbiAgICByZXR1cm4gcHJvbXB0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHaXRIdWIgQ29waWxvdCBBSSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJvbXB0Rm9yQUlQcm92aWRlciA9IGFzeW5jIChxdWlldCA9IGZhbHNlKTogUHJvbWlzZTwnY3Vyc29yJyB8ICdjb3BpbG90JyB8ICdvcGVuYWknIHwgJ2FudGhyb3BpYycgfCAnbm9uZSc+ID0+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbG9nKCdcXG5ObyBBSSBwcm92aWRlciBjb25maWd1cmVkLiBQbGVhc2UgY2hvb3NlIGFuIEFJIHByb3ZpZGVyOicsICdpbmZvJyk7XG4gICAgbG9nKCcxLiBDdXJzb3IgSURFJywgJ2luZm8nKTtcbiAgICBsb2coJzIuIE9wZW5BSScsICdpbmZvJyk7XG4gICAgbG9nKCczLiBBbnRocm9waWMnLCAnaW5mbycpO1xuICAgIGxvZygnNC4gR2l0SHViIENvcGlsb3QnLCAnaW5mbycpO1xuICAgIGxvZygnNS4gTm9uZSAoU2tpcCBBSSBmZWF0dXJlcyknLCAnaW5mbycpO1xuXG4gICAgcmwucXVlc3Rpb24oJ0VudGVyIHlvdXIgY2hvaWNlICgxLTUpOiAnLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuXG4gICAgICBzd2l0Y2goYW5zd2VyKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgIHJlc29sdmUoJ2N1cnNvcicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcyJzpcbiAgICAgICAgICByZXNvbHZlKCdvcGVuYWknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnMyc6XG4gICAgICAgICAgcmVzb2x2ZSgnYW50aHJvcGljJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzQnOlxuICAgICAgICAgIHJlc29sdmUoJ2NvcGlsb3QnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXNvbHZlKCdub25lJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb21wdEZvckFQSUtleSA9IGFzeW5jIChwcm92aWRlcjogc3RyaW5nLCBxdWlldCA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24oYFBsZWFzZSBlbnRlciB5b3VyICR7cHJvdmlkZXJ9IEFQSSBrZXk6IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlcik7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFJU2VydmljZSA9IChwcm92aWRlcjogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpID0+IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHN3aXRjaChwcm92aWRlcikge1xuICAgIGNhc2UgJ2N1cnNvcic6XG4gICAgICByZXR1cm4gY2FsbEN1cnNvckFJO1xuICAgIGNhc2UgJ29wZW5haSc6XG4gICAgICByZXR1cm4gY2FsbE9wZW5BSUFJO1xuICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICByZXR1cm4gY2FsbEFudGhyb3BpY0FJO1xuICAgIGNhc2UgJ2NvcGlsb3QnOlxuICAgICAgcmV0dXJuIGNhbGxDb3BpbG90QUk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhc3luYyAoKSA9PiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjYWxsQUlTZXJ2aWNlID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBxdWlldCA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdDYWxsaW5nIEFJIHNlcnZpY2UgdG8gZml4IGNvZGUgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhaUNvbmZpZyA9IExleENvbmZpZy5jb25maWcuYWkgfHwge3Byb3ZpZGVyOiAnbm9uZSd9O1xuXG4gICAgY29uc3QgaXNJbkN1cnNvcklERSA9IHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJztcbiAgICBpZihpc0luQ3Vyc29ySURFICYmIChhaUNvbmZpZy5wcm92aWRlciA9PT0gJ25vbmUnIHx8ICFhaUNvbmZpZy5wcm92aWRlcikpIHtcbiAgICAgIGxvZygnRGV0ZWN0ZWQgQ3Vyc29yIElERSBlbnZpcm9ubWVudCwgdXNpbmcgQ3Vyc29yIGFzIEFJIHByb3ZpZGVyJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBhaUNvbmZpZy5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgIH1cblxuICAgIGlmKGFpQ29uZmlnLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvbXB0Rm9yQUlQcm92aWRlcihxdWlldCk7XG5cbiAgICAgIGlmKHByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdBSSBmZWF0dXJlcyBza2lwcGVkJyk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgYWlDb25maWcucHJvdmlkZXIgPSBwcm92aWRlcjtcblxuICAgICAgaWYocHJvdmlkZXIgIT09ICdjdXJzb3InICYmIHByb3ZpZGVyICE9PSAnY29waWxvdCcgJiZcbiAgICAgICAgICFwcm9jZXNzLmVudltgJHtwcm92aWRlci50b1VwcGVyQ2FzZSgpfV9BUElfS0VZYF0pIHtcbiAgICAgICAgYWlDb25maWcuYXBpS2V5ID0gYXdhaXQgcHJvbXB0Rm9yQVBJS2V5KHByb3ZpZGVyLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSBhaUNvbmZpZztcblxuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdsZXguY29uZmlnLmpzJyk7XG4gICAgICBpZihleGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSBjb25maWdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgICAvYWk6Lio/Wyx9XS9zLFxuICAgICAgICAgICAgYGFpOiB7IHByb3ZpZGVyOiAnJHthaUNvbmZpZy5wcm92aWRlcn0nIH0sYFxuICAgICAgICAgICk7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCB1cGRhdGVkQ29uZmlnKTtcbiAgICAgICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIHN3aXRjaChhaUNvbmZpZy5wcm92aWRlcikge1xuICAgICAgY2FzZSAnY3Vyc29yJzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbEN1cnNvckFJKHByb21wdCwgYWlDb25maWcpO1xuICAgICAgICBsb2coJ0N1cnNvciBJREUgQUkgaW50ZWdyYXRpb24gYWN0aXZlJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbE9wZW5BSUFJKHByb21wdCwgYWlDb25maWcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNhbGxBbnRocm9waWNBSShwcm9tcHQsIGFpQ29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbENvcGlsb3RBSShwcm9tcHQsIGFpQ29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzcGlubmVyLmZhaWwoJ05vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQnKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgY29kZSBmaXhlcyBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQUkgc2VydmljZSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGVycm9yLCAnZXJyb3InKTtcbiAgICB9XG4g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
|
package/dist/utils/app.js
CHANGED
|
@@ -77,7 +77,7 @@ const copyFiles = async (files, typeName, spinner, config) => {
|
|
|
77
77
|
} catch (error) {
|
|
78
78
|
spinner.fail(`Copying of ${typeName} files failed.`);
|
|
79
79
|
log(`Error: ${error.message}`, "error");
|
|
80
|
-
|
|
80
|
+
log(error, "error");
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
83
|
const copyFileSync = (source, target) => {
|
|
@@ -119,7 +119,7 @@ const getFilesByExt = (ext, config) => {
|
|
|
119
119
|
const removeConflictModules = (moduleList) => {
|
|
120
120
|
const updatedList = { ...moduleList };
|
|
121
121
|
Object.keys(updatedList).forEach((moduleName) => {
|
|
122
|
-
const regex = new RegExp("^(?!@types/)
|
|
122
|
+
const regex = new RegExp("^(?!@types/).*?(jest|webpack).*$", "gi");
|
|
123
123
|
if (regex.test(moduleName)) {
|
|
124
124
|
delete updatedList[moduleName];
|
|
125
125
|
}
|
|
@@ -214,4 +214,4 @@ export {
|
|
|
214
214
|
setPackageJson,
|
|
215
215
|
updateTemplateName
|
|
216
216
|
};
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eS5qcyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge2Jhc2VuYW1lIGFzIHBhdGhCYXNlbmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7cmltcmFmU3luY30gZnJvbSAncmltcmFmJztcblxuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge0xleENvbmZpZ1R5cGV9IGZyb20gJy4uL0xleENvbmZpZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZpbGVuYW1lc1Jlc3VsdCB7XG4gIG5hbWVDYXBzOiBzdHJpbmc7XG4gIHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlbmFtZXMgPSAocHJvcHM6IEdldEZpbGVuYW1lc1Byb3BzKTogRmlsZW5hbWVzUmVzdWx0IHwgdm9pZCA9PiB7XG4gIGNvbnN0IHtjYWxsYmFjaywgY2xpTmFtZSwgbmFtZSwgcXVpZXQsIHR5cGUsIHVzZVR5cGVzY3JpcHR9ID0gcHJvcHM7XG5cbiAgLy8gU2V0IGZpbGVuYW1lXG4gIGxldCBuYW1lQ2Fwczogc3RyaW5nO1xuICBjb25zdCBpdGVtVHlwZXM6IHN0cmluZ1tdID0gWydzdG9yZXMnLCAndmlld3MnXTtcblxuICBpZighbmFtZSkge1xuICAgIGlmKGl0ZW1UeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke3R5cGV9IG5hbWUgaXMgcmVxdWlyZWQuIFBsZWFzZSB1c2UgJ2xleCAtaCcgZm9yIG9wdGlvbnMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrPy4oMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5hbWVDYXBzID0gYCR7bmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWA7XG4gIH1cblxuICAvLyBEaXNwbGF5IG1lc3NhZ2VcbiAgbG9nKGAke2NsaU5hbWV9IGFkZGluZyAke25hbWV9ICR7dHlwZX0uLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICAvLyBUZW1wbGF0ZSBkaXJlY3RvcnlcbiAgbGV0IHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICBsZXQgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy90eXBlc2NyaXB0JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcudHMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLnRzeCc7XG4gIH0gZWxzZSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy9mbG93JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcuanMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLmpzJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZUNhcHMsXG4gICAgdGVtcGxhdGVFeHQsXG4gICAgdGVtcGxhdGVQYXRoLFxuICAgIHRlbXBsYXRlUmVhY3RcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Bpbm5lciB7XG4gIGZhaWw6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuICBzdGFydDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN1Y2NlZWQ6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU3Bpbm5lciA9IChxdWlldCA9IGZhbHNlKTogU3Bpbm5lciA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZhaWw6ICgpID0+IHt9LFxuICAgICAgc3RhcnQ6ICgpID0+IHt9LFxuICAgICAgc3VjY2VlZDogKCkgPT4ge31cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG9yYSh7Y29sb3I6ICd5ZWxsb3cnfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVzID0gYXN5bmMgKGZpbGVzOiBzdHJpbmdbXSwgdHlwZU5hbWU6IHN0cmluZywgc3Bpbm5lciwgY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiB7XG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICBjb25zdCBpdGVtcyA9IGZpbGVzLm1hcCgoZmlsZU5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBmcm9tOiBmaWxlTmFtZSxcbiAgICB0bzogcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGgsIHBhdGhSZWxhdGl2ZShzb3VyY2VGdWxsUGF0aCwgZmlsZU5hbWUpKVxuICB9KSk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KGBDb3B5aW5nICR7dHlwZU5hbWV9IGZpbGVzLi4uYCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaXRlbXMubWFwKCh7ZnJvbSwgdG99KSA9PiBuZXcgUHJvbWlzZShcbiAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbWtkaXJTeW5jKHBhdGhSZXNvbHZlKHRvLCAnLi4nKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gY29weUZpbGUoZnJvbSwgdG8sIChjb3B5RXJyb3IpID0+IHtcbiAgICAgICAgICBpZihjb3B5RXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKSkpO1xuICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGNvcGllZCAke2ZpbGVzLmxlbmd0aH0gJHt0eXBlTmFtZX0gZmlsZXMhYCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoYENvcHlpbmcgb2YgJHt0eXBlTmFtZX0gZmlsZXMgZmFpbGVkLmApO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKSA9PiB7XG4gIGxldCB0YXJnZXRGaWxlOiBzdHJpbmcgPSB0YXJnZXQ7XG5cbiAgLy8gSWYgdGFyZ2V0IGlzIGEgZGlyZWN0b3J5IGEgbmV3IGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIHdpbGwgYmUgY3JlYXRlZFxuICBpZihleGlzdHNTeW5jKHRhcmdldCkpIHtcbiAgICBpZihsc3RhdFN5bmModGFyZ2V0KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0YXJnZXRGaWxlID0gcGF0aEpvaW4odGFyZ2V0LCBwYXRoQmFzZW5hbWUoc291cmNlKSk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVGaWxlU3luYyh0YXJnZXRGaWxlLCByZWFkRmlsZVN5bmMoc291cmNlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBDaGVjayBpZiBmb2xkZXIgbmVlZHMgdG8gYmUgY3JlYXRlZCBvciBpbnRlZ3JhdGVkXG4gIGNvbnN0IHRhcmdldEZvbGRlcjogc3RyaW5nID0gcGF0aEpvaW4odGFyZ2V0LCBwYXRoQmFzZW5hbWUoc291cmNlKSk7XG5cbiAgaWYoIWV4aXN0c1N5bmModGFyZ2V0Rm9sZGVyKSkge1xuICAgIG1rZGlyU3luYyh0YXJnZXRGb2xkZXIpO1xuICB9XG5cbiAgLy8gQ29weVxuICBpZihsc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZXMgPSByZWFkZGlyU3luYyhzb3VyY2UpO1xuICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgY3VyU291cmNlOiBzdHJpbmcgPSBwYXRoSm9pbihzb3VyY2UsIGZpbGUpO1xuXG4gICAgICBpZihsc3RhdFN5bmMoY3VyU291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlGaWxlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlSnNvbiA9IChwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBjb25zdCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBwYWNrYWdlUGF0aCB8fCBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuXG4gIC8vIENvbmZpZ3VyZSBwYWNrYWdlLmpzb25cbiAgY29uc3QgcGFja2FnZURhdGE6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhmb3JtYXRQYXRoKS50b1N0cmluZygpO1xuICByZXR1cm4gSlNPTi5wYXJzZShwYWNrYWdlRGF0YSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXNCeUV4dCA9IChleHQ6IHN0cmluZywgY29uZmlnOiBMZXhDb25maWdUeXBlKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCB7c291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICByZXR1cm4gZ2xvYlN5bmMoYCR7c291cmNlRnVsbFBhdGh9LyoqLyoqJHtleHR9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQ29uZmxpY3RNb2R1bGVzID0gKG1vZHVsZUxpc3Q6IG9iamVjdCkgPT4ge1xuICBjb25zdCB1cGRhdGVkTGlzdDogb2JqZWN0ID0gey4uLm1vZHVsZUxpc3R9O1xuXG4gIE9iamVjdC5rZXlzKHVwZGF0ZWRMaXN0KS5mb3JFYWNoKChtb2R1bGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cCgnXig/IUB0eXBlc1xcLykuKihqZXN0fHdlYnBhY2spLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG4gIHRyeSB7XG4gICAgcmltcmFmU3luYyhmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNb2R1bGVzID0gKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFJlbW92ZSBub2RlX21vZHVsZXNcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ub2RlX21vZHVsZXMnLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSB5YXJuIGxvY2tcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi95YXJuLmxvY2snLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSBucG0gbG9ja1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3BhY2thZ2UtbG9jay5qc29uJywgdHJ1ZSk7XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRQYWNrYWdlSnNvbiA9IChqc29uLCBwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBpZighanNvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG5cbiAgLy8gVXBkYXRlIHBhY2thZ2UuanNvblxuICB3cml0ZUZpbGVTeW5jKGZvcm1hdFBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkTW9kdWxlVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbGlua2VkTW9kdWxlcyA9IChzdGFydFBhdGg/OiBzdHJpbmcpOiBMaW5rZWRNb2R1bGVUeXBlW10gPT4ge1xuICBjb25zdCB3b3JraW5nUGF0aDogc3RyaW5nID0gc3RhcnRQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGxldCBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcblxuICAvLyBpZiB3ZSBoYXZlIGEgc2NvcGUgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBtb2R1bGVzIGluc2lkZSB0aGUgZm9sZGVyIGlzIGxpbmtlZFxuICBpZih3b3JraW5nUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcHJlZml4ID0gYEAke3dvcmtpbmdQYXRoLnNwbGl0KCdAJykucG9wKCl9YDtcbiAgICBtb2R1bGVQYXRoID0gd29ya2luZ1BhdGg7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlUGF0aCA9IHBhdGhKb2luKHdvcmtpbmdQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gIH1cblxuICBjb25zdCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke21vZHVsZVBhdGh9LypgKTtcbiAgcmV0dXJuIGZvdW5kUGF0aHMucmVkdWNlKChsaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10sIGZvdW5kUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKGZvdW5kUGF0aCk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29uc3QgZGVlcExpc3Q6IExpbmtlZE1vZHVsZVR5cGVbXSA9IGxpbmtlZE1vZHVsZXMoZm91bmRQYXRoKTtcbiAgICAgICAgbGlzdC5wdXNoKC4uLmRlZXBMaXN0KTtcbiAgICAgIH0gZWxzZSBpZihzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzOiBzdHJpbmdbXSA9IChbcHJlZml4LCBwYXRoQmFzZW5hbWUoZm91bmRQYXRoKV0pLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiAhaXNFbXB0eShpdGVtKSk7XG4gICAgICAgIGxpc3QucHVzaCh7bmFtZTogYCR7bW9kdWxlTmFtZXMuam9pbignLycpfWAsIHBhdGg6IGZvdW5kUGF0aH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9IGNhdGNoKGZzRXJyb3IpIHtcbiAgICAgIHRocm93IGZzRXJyb3I7XG4gICAgfVxuICB9LCBbXSk7XG59O1xuXG4vLyBDaGVjayBmb3IgbGlua2VkIG1vZHVsZXNcbmV4cG9ydCBjb25zdCBjaGVja0xpbmtlZE1vZHVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IGxpbmtlZCA9IGxpbmtlZE1vZHVsZXMoKTtcblxuICBpZihsaW5rZWQubGVuZ3RoKSB7XG4gICAgY29uc3QgbXNnTW9kdWxlOiBzdHJpbmcgPSBsaW5rZWQubGVuZ3RoID4gMSA/ICdNb2R1bGVzJyA6ICdNb2R1bGUnO1xuICAgIGNvbnN0IGxpbmtlZE1zZzogc3RyaW5nID0gbGlua2VkLnJlZHVjZShcbiAgICAgIChtc2c6IHN0cmluZywgbGlua2VkTW9kdWxlOiBMaW5rZWRNb2R1bGVUeXBlKSA9PlxuICAgICAgICBgJHttc2d9XFxuICogJHtsaW5rZWRNb2R1bGUubmFtZX1gLFxuICAgICAgYExpbmtlZCAke21zZ01vZHVsZX06YFxuICAgICk7XG4gICAgbG9nKGJveGVuKGxpbmtlZE1zZywge2RpbUJvcmRlcjogdHJ1ZSwgcGFkZGluZzogMX0pLCAnd2FybicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGVtcGxhdGVOYW1lID0gKGZpbGVQYXRoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZywgcmVwbGFjZUNhcHM6IHN0cmluZykgPT4ge1xuICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9zYW1wbGUvZywgcmVwbGFjZSk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1NhbXBsZS9nLCByZXBsYWNlQ2Fwcyk7XG4gIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsICd1dGY4Jyk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBTyxXQUFXO0FBQ2xCLFNBQVEsVUFBVSxZQUFZLFdBQVcsV0FBVyxhQUFhLGNBQWMscUJBQW9CO0FBQ25HLFNBQVEsZ0JBQWU7QUFDdkIsT0FBTyxhQUFhO0FBQ3BCLE9BQU8sU0FBUztBQUNoQixTQUFRLFlBQVksY0FBYyxRQUFRLFVBQVUsWUFBWSxjQUFjLFdBQVcsbUJBQWtCO0FBQzNHLFNBQVEsa0JBQWlCO0FBRXpCLFNBQVEsV0FBVTtBQUlYLE1BQU0sTUFBYyxRQUFRLElBQUk7QUFrQmhDLE1BQU0sZUFBZSxDQUFDLFVBQXFEO0FBQ2hGLFFBQU0sRUFBQyxVQUFVLFNBQVMsTUFBTSxPQUFPLE1BQU0sY0FBYSxJQUFJO0FBRzlELE1BQUk7QUFDSixRQUFNLFlBQXNCLENBQUMsVUFBVSxPQUFPO0FBRTlDLE1BQUcsQ0FBQyxNQUFNO0FBQ1IsUUFBRyxVQUFVLFNBQVMsSUFBSSxHQUFHO0FBQzNCLFVBQUk7QUFBQSxFQUFLLE9BQU8sV0FBVyxJQUFJLHVEQUF1RCxTQUFTLEtBQUs7QUFDcEcsYUFBTyxXQUFXLENBQUM7QUFBQSxJQUNyQjtBQUFBLEVBQ0YsT0FBTztBQUNMLGVBQVcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUM7QUFBQSxFQUM3RDtBQUdBLE1BQUksR0FBRyxPQUFPLFdBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUs7QUFHekQsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJO0FBRUosTUFBRyxlQUFlO0FBQ2hCLG1CQUFlO0FBQ2Ysa0JBQWM7QUFDZCxvQkFBZ0I7QUFBQSxFQUNsQixPQUFPO0FBQ0wsbUJBQWU7QUFDZixrQkFBYztBQUNkLG9CQUFnQjtBQUFBLEVBQ2xCO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFRTyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsVUFBbUI7QUFDdkQsTUFBRyxPQUFPO0FBQ1IsV0FBTztBQUFBLE1BQ0wsTUFBTSxNQUFNO0FBQUEsTUFBQztBQUFBLE1BQ2IsT0FBTyxNQUFNO0FBQUEsTUFBQztBQUFBLE1BQ2QsU0FBUyxNQUFNO0FBQUEsTUFBQztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUVBLFNBQU8sSUFBSSxFQUFDLE9BQU8sU0FBUSxDQUFDO0FBQzlCO0FBRU8sTUFBTSxZQUFZLE9BQU8sT0FBaUIsVUFBa0IsU0FBUyxXQUEwQjtBQUNwRyxRQUFNLEVBQUMsZ0JBQWdCLGVBQWMsSUFBSTtBQUN6QyxRQUFNLFFBQVEsTUFBTSxJQUFJLENBQUMsY0FBc0I7QUFBQSxJQUM3QyxNQUFNO0FBQUEsSUFDTixJQUFJLFlBQVksZ0JBQWdCLGFBQWEsZ0JBQWdCLFFBQVEsQ0FBQztBQUFBLEVBQ3hFLEVBQUU7QUFFRixNQUFJO0FBQ0YsWUFBUSxNQUFNLFdBQVcsUUFBUSxXQUFXO0FBQzVDLFVBQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUMsTUFBTSxHQUFFLE1BQU0sSUFBSTtBQUFBLE1BQzlDLENBQUMsU0FBUyxXQUFXO0FBQ25CLGtCQUFVLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBQyxXQUFXLEtBQUksQ0FBQztBQUNsRCxlQUFPLFNBQVMsTUFBTSxJQUFJLENBQUMsY0FBYztBQUN2QyxjQUFHLFdBQVc7QUFDWixtQkFBTztBQUFBLFVBQ1QsT0FBTztBQUNMLG9CQUFRLElBQUk7QUFBQSxVQUNkO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBQ0YsWUFBUSxRQUFRLHVCQUF1QixNQUFNLE1BQU0sSUFBSSxRQUFRLFNBQVM7QUFBQSxFQUMxRSxTQUFRLE9BQU87QUFFYixZQUFRLEtBQUssY0FBYyxRQUFRLGdCQUFnQjtBQUNuRCxRQUFJLFVBQVUsTUFBTSxPQUFPLElBQUksT0FBTztBQUN0QyxZQUFRLElBQUksS0FBSztBQUFBLEVBQ25CO0FBQ0Y7QUFFTyxNQUFNLGVBQWUsQ0FBQyxRQUFnQixXQUFtQjtBQUM5RCxNQUFJLGFBQXFCO0FBR3pCLE1BQUcsV0FBVyxNQUFNLEdBQUc7QUFDckIsUUFBRyxVQUFVLE1BQU0sRUFBRSxZQUFZLEdBQUc7QUFDbEMsbUJBQWEsU0FBUyxRQUFRLGFBQWEsTUFBTSxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsZ0JBQWMsWUFBWSxhQUFhLE1BQU0sQ0FBQztBQUNoRDtBQUVPLE1BQU0sMEJBQTBCLENBQUMsUUFBZ0IsV0FBeUI7QUFDL0UsTUFBSSxRQUFrQixDQUFDO0FBR3ZCLFFBQU0sZUFBdUIsU0FBUyxRQUFRLGFBQWEsTUFBTSxDQUFDO0FBRWxFLE1BQUcsQ0FBQyxXQUFXLFlBQVksR0FBRztBQUM1QixjQUFVLFlBQVk7QUFBQSxFQUN4QjtBQUdBLE1BQUcsVUFBVSxNQUFNLEVBQUUsWUFBWSxHQUFHO0FBQ2xDLFlBQVEsWUFBWSxNQUFNO0FBQzFCLFVBQU0sUUFBUSxDQUFDLFNBQWlCO0FBQzlCLFlBQU0sWUFBb0IsU0FBUyxRQUFRLElBQUk7QUFFL0MsVUFBRyxVQUFVLFNBQVMsRUFBRSxZQUFZLEdBQUc7QUFDckMsZ0NBQXdCLFdBQVcsWUFBWTtBQUFBLE1BQ2pELE9BQU87QUFDTCxxQkFBYSxXQUFXLFlBQVk7QUFBQSxNQUN0QztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQUVPLE1BQU0saUJBQWlCLENBQUMsZ0JBQXlCO0FBQ3RELFFBQU0sYUFBcUIsZUFBZSxHQUFHLFFBQVEsSUFBSSxDQUFDO0FBRzFELFFBQU0sY0FBc0IsYUFBYSxVQUFVLEVBQUUsU0FBUztBQUM5RCxTQUFPLEtBQUssTUFBTSxXQUFXO0FBQy9CO0FBRU8sTUFBTSxnQkFBZ0IsQ0FBQyxLQUFhLFdBQW9DO0FBQzdFLFFBQU0sRUFBQyxlQUFjLElBQUk7QUFDekIsU0FBTyxTQUFTLEdBQUcsY0FBYyxTQUFTLEdBQUcsRUFBRTtBQUNqRDtBQUVPLE1BQU0sd0JBQXdCLENBQUMsZUFBdUI7QUFDM0QsUUFBTSxjQUFzQixFQUFDLEdBQUcsV0FBVTtBQUUxQyxTQUFPLEtBQUssV0FBVyxFQUFFLFFBQVEsQ0FBQyxlQUF1QjtBQUN2RCxVQUFNLFFBQWdCLElBQUksT0FBTyxtQ0FBb0MsSUFBSTtBQUN6RSxRQUFHLE1BQU0sS0FBSyxVQUFVLEdBQUc7QUFDekIsYUFBTyxZQUFZLFVBQVU7QUFBQSxJQUMvQjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU87QUFDVDtBQUVPLE1BQU0sY0FBYyxDQUFDLFVBQWtCLGFBQXNCLFVBQVUsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzdHLFFBQU0sV0FBbUIsYUFBYSxZQUFZLEtBQUssUUFBUSxJQUFJO0FBQ25FLE1BQUk7QUFDRixlQUFXLFFBQVE7QUFDbkIsV0FBTyxRQUFRLElBQUk7QUFBQSxFQUNyQixTQUFRLE9BQU87QUFDYixXQUFPLE9BQU8sS0FBSztBQUFBLEVBQ3JCO0FBQ0YsQ0FBQztBQUVNLE1BQU0sZ0JBQWdCLE1BQU0sSUFBSSxRQUFRLE9BQU8sU0FBUyxXQUFXO0FBQ3hFLE1BQUk7QUFFRixVQUFNLFlBQVksa0JBQWtCLElBQUk7QUFHeEMsVUFBTSxZQUFZLGVBQWUsSUFBSTtBQUdyQyxVQUFNLFlBQVksdUJBQXVCLElBQUk7QUFFN0MsWUFBUSxJQUFJO0FBQUEsRUFDZCxTQUFRLE9BQU87QUFDYixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQ0YsQ0FBQztBQUVNLE1BQU0saUJBQWlCLENBQUMsTUFBTSxnQkFBeUI7QUFDNUQsTUFBRyxDQUFDLE1BQU07QUFDUjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGFBQXFCLGVBQWUsR0FBRyxRQUFRLElBQUksQ0FBQztBQUcxRCxnQkFBYyxZQUFZLEtBQUssVUFBVSxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBQ3pEO0FBT08sTUFBTSxnQkFBZ0IsQ0FBQyxjQUEyQztBQUN2RSxRQUFNLGNBQXNCLGFBQWEsUUFBUSxJQUFJO0FBQ3JELE1BQUk7QUFDSixNQUFJO0FBR0osTUFBRyxZQUFZLFNBQVMsR0FBRyxHQUFHO0FBQzVCLGFBQVMsSUFBSSxZQUFZLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQztBQUN6QyxpQkFBYTtBQUFBLEVBQ2YsT0FBTztBQUNMLGlCQUFhLFNBQVMsYUFBYSxjQUFjO0FBQUEsRUFDbkQ7QUFFQSxRQUFNLGFBQXVCLFNBQVMsR0FBRyxVQUFVLElBQUk7QUFDdkQsU0FBTyxXQUFXLE9BQU8sQ0FBQyxNQUEwQixjQUFzQjtBQUN4RSxRQUFJO0FBQ0YsWUFBTSxRQUFRLFVBQVUsU0FBUztBQUVqQyxVQUFHLE1BQU0sWUFBWSxHQUFHO0FBQ3RCLGNBQU0sV0FBK0IsY0FBYyxTQUFTO0FBQzVELGFBQUssS0FBSyxHQUFHLFFBQVE7QUFBQSxNQUN2QixXQUFVLE1BQU0sZUFBZSxHQUFHO0FBQ2hDLGNBQU0sY0FBeUIsQ0FBQyxRQUFRLGFBQWEsU0FBUyxDQUFDLEVBQUcsT0FBTyxDQUFDLFNBQWlCLENBQUMsUUFBUSxJQUFJLENBQUM7QUFDekcsYUFBSyxLQUFLLEVBQUMsTUFBTSxHQUFHLFlBQVksS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLFVBQVMsQ0FBQztBQUFBLE1BQy9EO0FBRUEsYUFBTztBQUFBLElBQ1QsU0FBUSxTQUFTO0FBQ2YsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGLEdBQUcsQ0FBQyxDQUFDO0FBQ1A7QUFHTyxNQUFNLHFCQUFxQixNQUFNO0FBQ3RDLFFBQU0sU0FBUyxjQUFjO0FBRTdCLE1BQUcsT0FBTyxRQUFRO0FBQ2hCLFVBQU0sWUFBb0IsT0FBTyxTQUFTLElBQUksWUFBWTtBQUMxRCxVQUFNLFlBQW9CLE9BQU87QUFBQSxNQUMvQixDQUFDLEtBQWEsaUJBQ1osR0FBRyxHQUFHO0FBQUEsS0FBUSxhQUFhLElBQUk7QUFBQSxNQUNqQyxVQUFVLFNBQVM7QUFBQSxJQUNyQjtBQUNBLFFBQUksTUFBTSxXQUFXLEVBQUMsV0FBVyxNQUFNLFNBQVMsRUFBQyxDQUFDLEdBQUcsTUFBTTtBQUFBLEVBQzdEO0FBQ0Y7QUFFTyxNQUFNLHFCQUFxQixDQUFDLFVBQWtCLFNBQWlCLGdCQUF3QjtBQUM1RixNQUFJLE9BQWUsYUFBYSxVQUFVLE1BQU07QUFDaEQsU0FBTyxLQUFLLFFBQVEsV0FBVyxPQUFPO0FBQ3RDLFNBQU8sS0FBSyxRQUFRLFdBQVcsV0FBVztBQUMxQyxnQkFBYyxVQUFVLE1BQU0sTUFBTTtBQUN0QzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eS5qcyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge2Jhc2VuYW1lIGFzIHBhdGhCYXNlbmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7cmltcmFmU3luY30gZnJvbSAncmltcmFmJztcblxuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge0xleENvbmZpZ1R5cGV9IGZyb20gJy4uL0xleENvbmZpZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZpbGVuYW1lc1Jlc3VsdCB7XG4gIG5hbWVDYXBzOiBzdHJpbmc7XG4gIHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlbmFtZXMgPSAocHJvcHM6IEdldEZpbGVuYW1lc1Byb3BzKTogRmlsZW5hbWVzUmVzdWx0IHwgdm9pZCA9PiB7XG4gIGNvbnN0IHtjYWxsYmFjaywgY2xpTmFtZSwgbmFtZSwgcXVpZXQsIHR5cGUsIHVzZVR5cGVzY3JpcHR9ID0gcHJvcHM7XG5cbiAgLy8gU2V0IGZpbGVuYW1lXG4gIGxldCBuYW1lQ2Fwczogc3RyaW5nO1xuICBjb25zdCBpdGVtVHlwZXM6IHN0cmluZ1tdID0gWydzdG9yZXMnLCAndmlld3MnXTtcblxuICBpZighbmFtZSkge1xuICAgIGlmKGl0ZW1UeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke3R5cGV9IG5hbWUgaXMgcmVxdWlyZWQuIFBsZWFzZSB1c2UgJ2xleCAtaCcgZm9yIG9wdGlvbnMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrPy4oMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5hbWVDYXBzID0gYCR7bmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWA7XG4gIH1cblxuICAvLyBEaXNwbGF5IG1lc3NhZ2VcbiAgbG9nKGAke2NsaU5hbWV9IGFkZGluZyAke25hbWV9ICR7dHlwZX0uLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICAvLyBUZW1wbGF0ZSBkaXJlY3RvcnlcbiAgbGV0IHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICBsZXQgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy90eXBlc2NyaXB0JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcudHMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLnRzeCc7XG4gIH0gZWxzZSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy9mbG93JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcuanMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLmpzJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZUNhcHMsXG4gICAgdGVtcGxhdGVFeHQsXG4gICAgdGVtcGxhdGVQYXRoLFxuICAgIHRlbXBsYXRlUmVhY3RcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Bpbm5lciB7XG4gIGZhaWw6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuICBzdGFydDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN1Y2NlZWQ6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU3Bpbm5lciA9IChxdWlldCA9IGZhbHNlKTogU3Bpbm5lciA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZhaWw6ICgpID0+IHt9LFxuICAgICAgc3RhcnQ6ICgpID0+IHt9LFxuICAgICAgc3VjY2VlZDogKCkgPT4ge31cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG9yYSh7Y29sb3I6ICd5ZWxsb3cnfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVzID0gYXN5bmMgKGZpbGVzOiBzdHJpbmdbXSwgdHlwZU5hbWU6IHN0cmluZywgc3Bpbm5lciwgY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiB7XG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICBjb25zdCBpdGVtcyA9IGZpbGVzLm1hcCgoZmlsZU5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBmcm9tOiBmaWxlTmFtZSxcbiAgICB0bzogcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGgsIHBhdGhSZWxhdGl2ZShzb3VyY2VGdWxsUGF0aCwgZmlsZU5hbWUpKVxuICB9KSk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KGBDb3B5aW5nICR7dHlwZU5hbWV9IGZpbGVzLi4uYCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaXRlbXMubWFwKCh7ZnJvbSwgdG99KSA9PiBuZXcgUHJvbWlzZShcbiAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbWtkaXJTeW5jKHBhdGhSZXNvbHZlKHRvLCAnLi4nKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gY29weUZpbGUoZnJvbSwgdG8sIChjb3B5RXJyb3IpID0+IHtcbiAgICAgICAgICBpZihjb3B5RXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKSkpO1xuICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGNvcGllZCAke2ZpbGVzLmxlbmd0aH0gJHt0eXBlTmFtZX0gZmlsZXMhYCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoYENvcHlpbmcgb2YgJHt0eXBlTmFtZX0gZmlsZXMgZmFpbGVkLmApO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICBsb2coZXJyb3IsICdlcnJvcicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZykgPT4ge1xuICBsZXQgdGFyZ2V0RmlsZTogc3RyaW5nID0gdGFyZ2V0O1xuXG4gIC8vIElmIHRhcmdldCBpcyBhIGRpcmVjdG9yeSBhIG5ldyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSB3aWxsIGJlIGNyZWF0ZWRcbiAgaWYoZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgaWYobHN0YXRTeW5jKHRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGFyZ2V0RmlsZSA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZVN5bmModGFyZ2V0RmlsZSwgcmVhZEZpbGVTeW5jKHNvdXJjZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gQ2hlY2sgaWYgZm9sZGVyIG5lZWRzIHRvIGJlIGNyZWF0ZWQgb3IgaW50ZWdyYXRlZFxuICBjb25zdCB0YXJnZXRGb2xkZXI6IHN0cmluZyA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHRhcmdldEZvbGRlcikpIHtcbiAgICBta2RpclN5bmModGFyZ2V0Rm9sZGVyKTtcbiAgfVxuXG4gIC8vIENvcHlcbiAgaWYobHN0YXRTeW5jKHNvdXJjZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVzID0gcmVhZGRpclN5bmMoc291cmNlKTtcbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGN1clNvdXJjZTogc3RyaW5nID0gcGF0aEpvaW4oc291cmNlLCBmaWxlKTtcblxuICAgICAgaWYobHN0YXRTeW5jKGN1clNvdXJjZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5RmlsZVN5bmMoY3VyU291cmNlLCB0YXJnZXRGb2xkZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGFja2FnZUpzb24gPSAocGFja2FnZVBhdGg/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZm9ybWF0UGF0aDogc3RyaW5nID0gcGFja2FnZVBhdGggfHwgYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYDtcblxuICAvLyBDb25maWd1cmUgcGFja2FnZS5qc29uXG4gIGNvbnN0IHBhY2thZ2VEYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZm9ybWF0UGF0aCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UocGFja2FnZURhdGEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlFeHQgPSAoZXh0OiBzdHJpbmcsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgcmV0dXJuIGdsb2JTeW5jKGAke3NvdXJjZUZ1bGxQYXRofS8qKi8qKiR7ZXh0fWApO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvbmZsaWN0TW9kdWxlcyA9IChtb2R1bGVMaXN0OiBvYmplY3QpID0+IHtcbiAgY29uc3QgdXBkYXRlZExpc3Q6IG9iamVjdCA9IHsuLi5tb2R1bGVMaXN0fTtcblxuICBPYmplY3Qua2V5cyh1cGRhdGVkTGlzdCkuZm9yRWFjaCgobW9kdWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oPyFAdHlwZXMvKS4qPyhqZXN0fHdlYnBhY2spLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG4gIHRyeSB7XG4gICAgcmltcmFmU3luYyhmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNb2R1bGVzID0gKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFJlbW92ZSBub2RlX21vZHVsZXNcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ub2RlX21vZHVsZXMnLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSB5YXJuIGxvY2tcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi95YXJuLmxvY2snLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSBucG0gbG9ja1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3BhY2thZ2UtbG9jay5qc29uJywgdHJ1ZSk7XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRQYWNrYWdlSnNvbiA9IChqc29uLCBwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBpZighanNvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG5cbiAgLy8gVXBkYXRlIHBhY2thZ2UuanNvblxuICB3cml0ZUZpbGVTeW5jKGZvcm1hdFBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkTW9kdWxlVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbGlua2VkTW9kdWxlcyA9IChzdGFydFBhdGg/OiBzdHJpbmcpOiBMaW5rZWRNb2R1bGVUeXBlW10gPT4ge1xuICBjb25zdCB3b3JraW5nUGF0aDogc3RyaW5nID0gc3RhcnRQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGxldCBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcblxuICAvLyBpZiB3ZSBoYXZlIGEgc2NvcGUgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBtb2R1bGVzIGluc2lkZSB0aGUgZm9sZGVyIGlzIGxpbmtlZFxuICBpZih3b3JraW5nUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcHJlZml4ID0gYEAke3dvcmtpbmdQYXRoLnNwbGl0KCdAJykucG9wKCl9YDtcbiAgICBtb2R1bGVQYXRoID0gd29ya2luZ1BhdGg7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlUGF0aCA9IHBhdGhKb2luKHdvcmtpbmdQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gIH1cblxuICBjb25zdCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke21vZHVsZVBhdGh9LypgKTtcbiAgcmV0dXJuIGZvdW5kUGF0aHMucmVkdWNlKChsaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10sIGZvdW5kUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKGZvdW5kUGF0aCk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29uc3QgZGVlcExpc3Q6IExpbmtlZE1vZHVsZVR5cGVbXSA9IGxpbmtlZE1vZHVsZXMoZm91bmRQYXRoKTtcbiAgICAgICAgbGlzdC5wdXNoKC4uLmRlZXBMaXN0KTtcbiAgICAgIH0gZWxzZSBpZihzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzOiBzdHJpbmdbXSA9IChbcHJlZml4LCBwYXRoQmFzZW5hbWUoZm91bmRQYXRoKV0pLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiAhaXNFbXB0eShpdGVtKSk7XG4gICAgICAgIGxpc3QucHVzaCh7bmFtZTogYCR7bW9kdWxlTmFtZXMuam9pbignLycpfWAsIHBhdGg6IGZvdW5kUGF0aH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9IGNhdGNoKGZzRXJyb3IpIHtcbiAgICAgIHRocm93IGZzRXJyb3I7XG4gICAgfVxuICB9LCBbXSk7XG59O1xuXG4vLyBDaGVjayBmb3IgbGlua2VkIG1vZHVsZXNcbmV4cG9ydCBjb25zdCBjaGVja0xpbmtlZE1vZHVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IGxpbmtlZCA9IGxpbmtlZE1vZHVsZXMoKTtcblxuICBpZihsaW5rZWQubGVuZ3RoKSB7XG4gICAgY29uc3QgbXNnTW9kdWxlOiBzdHJpbmcgPSBsaW5rZWQubGVuZ3RoID4gMSA/ICdNb2R1bGVzJyA6ICdNb2R1bGUnO1xuICAgIGNvbnN0IGxpbmtlZE1zZzogc3RyaW5nID0gbGlua2VkLnJlZHVjZShcbiAgICAgIChtc2c6IHN0cmluZywgbGlua2VkTW9kdWxlOiBMaW5rZWRNb2R1bGVUeXBlKSA9PlxuICAgICAgICBgJHttc2d9XFxuICogJHtsaW5rZWRNb2R1bGUubmFtZX1gLFxuICAgICAgYExpbmtlZCAke21zZ01vZHVsZX06YFxuICAgICk7XG4gICAgbG9nKGJveGVuKGxpbmtlZE1zZywge2RpbUJvcmRlcjogdHJ1ZSwgcGFkZGluZzogMX0pLCAnd2FybicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGVtcGxhdGVOYW1lID0gKGZpbGVQYXRoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZywgcmVwbGFjZUNhcHM6IHN0cmluZykgPT4ge1xuICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9zYW1wbGUvZywgcmVwbGFjZSk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1NhbXBsZS9nLCByZXBsYWNlQ2Fwcyk7XG4gIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsICd1dGY4Jyk7XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQU8sV0FBVztBQUNsQixTQUFRLFVBQVUsWUFBWSxXQUFXLFdBQVcsYUFBYSxjQUFjLHFCQUFvQjtBQUNuRyxTQUFRLGdCQUFlO0FBQ3ZCLE9BQU8sYUFBYTtBQUNwQixPQUFPLFNBQVM7QUFDaEIsU0FBUSxZQUFZLGNBQWMsUUFBUSxVQUFVLFlBQVksY0FBYyxXQUFXLG1CQUFrQjtBQUMzRyxTQUFRLGtCQUFpQjtBQUV6QixTQUFRLFdBQVU7QUFJWCxNQUFNLE1BQWMsUUFBUSxJQUFJO0FBa0JoQyxNQUFNLGVBQWUsQ0FBQyxVQUFxRDtBQUNoRixRQUFNLEVBQUMsVUFBVSxTQUFTLE1BQU0sT0FBTyxNQUFNLGNBQWEsSUFBSTtBQUc5RCxNQUFJO0FBQ0osUUFBTSxZQUFzQixDQUFDLFVBQVUsT0FBTztBQUU5QyxNQUFHLENBQUMsTUFBTTtBQUNSLFFBQUcsVUFBVSxTQUFTLElBQUksR0FBRztBQUMzQixVQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsSUFBSSx1REFBdUQsU0FBUyxLQUFLO0FBQ3BHLGFBQU8sV0FBVyxDQUFDO0FBQUEsSUFDckI7QUFBQSxFQUNGLE9BQU87QUFDTCxlQUFXLEdBQUcsS0FBSyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLE9BQU8s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
|
package/dist/utils/file.js
CHANGED
|
@@ -35,4 +35,4 @@ export {
|
|
|
35
35
|
relativeFilePath,
|
|
36
36
|
relativeNodePath
|
|
37
37
|
};
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2ZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbi8vIEdldCBmaWxlIHBhdGhzIHJlbGF0aXZlIHRvIExleFxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2ZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbi8vIEdldCBmaWxlIHBhdGhzIHJlbGF0aXZlIHRvIExleFxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xuICAgIGNvbnN0IHByZXZpb3VzUGF0aDogc3RyaW5nID0gQXJyYXkoYmFja1VwKS5maWxsKG51bGwpLm1hcCgoKSA9PiAnLi4vJykuam9pbignJyk7XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKGZpbGVQYXRoLCBwcmV2aW91c1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRGaWxlVXAuc3luYyhmaWxlbmFtZSwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWxhdGl2ZU5vZGVQYXRoID0gKGZpbGVuYW1lOiBzdHJpbmcsIGRpclBhdGg6IHN0cmluZyA9ICcuLycsIGJhY2tVcDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG5lc3REZXB0aDogbnVtYmVyID0gMTA7XG5cbiAgaWYoYmFja1VwKSB7XG4gICAgY29uc3QgZmlsZVBhdGg6IHN0cmluZyA9IGZpbmRGaWxlVXAuc3luYyhgbm9kZV9tb2R1bGVzLyR7ZmlsZW5hbWV9YCwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbiAgICBjb25zdCBwcmV2aW91c1BhdGg6IHN0cmluZyA9IEFycmF5KG5lc3REZXB0aCkuZmlsbChudWxsKS5tYXAoKCkgPT4gJy4uLycpLmpvaW4oJycpO1xuICAgIHJldHVybiBwYXRoUmVzb2x2ZShmaWxlUGF0aCwgcHJldmlvdXNQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBmaW5kRmlsZVVwLnN5bmMoYG5vZGVfbW9kdWxlcy8ke2ZpbGVuYW1lfWAsIGRpclBhdGgsIG5lc3REZXB0aCk7XG59O1xuXG4vLyBHZXQgZmlsZSBwYXRocyByZWxhdGl2ZSB0byBMZXhcbmV4cG9ydCBjb25zdCBnZXROb2RlUGF0aCA9IChtb2R1bGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkaXJOYW1lID0gbmV3IFVSTCgnLicsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWU7XG4gIGNvbnN0IG1vZHVsZVBhdGg6IHN0cmluZyA9IGBub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWA7XG4gIGNvbnN0IHJlcG9QYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgZGlyTmFtZSk7XG5cbiAgaWYocmVwb1BhdGggJiYgZXhpc3RzU3luYyhyZXBvUGF0aCkpIHtcbiAgICByZXR1cm4gcmVwb1BhdGg7XG4gIH1cblxuICBjb25zdCBsb2NhbFBhdGg6IHN0cmluZyA9IGZpbmRGaWxlVXAuc3luYyhtb2R1bGVQYXRoLCAnLi8nLCAxMCkgfHwgYC4vJHttb2R1bGVQYXRofWA7XG4gIHJldHVybiBsb2NhbFBhdGg7XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQU8sZ0JBQWdCO0FBQ3ZCLFNBQVEsa0JBQWlCO0FBQ3pCLFNBQVEsV0FBVyxtQkFBa0I7QUFDckMsU0FBUSxXQUFVO0FBR1gsTUFBTSxtQkFBbUIsQ0FBQyxVQUFrQixVQUFrQixNQUFNLFNBQWlCLE1BQWM7QUFDeEcsUUFBTSxZQUFvQjtBQUUxQixNQUFHLFFBQVE7QUFDVCxVQUFNLFdBQW1CLFdBQVcsS0FBSyxVQUFVLFNBQVMsU0FBUztBQUNyRSxVQUFNLGVBQXVCLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzlFLFdBQU8sWUFBWSxVQUFVLFlBQVk7QUFBQSxFQUMzQztBQUVBLFNBQU8sV0FBVyxLQUFLLFVBQVUsU0FBUyxTQUFTO0FBQ3JEO0FBRU8sTUFBTSxtQkFBbUIsQ0FBQyxVQUFrQixVQUFrQixNQUFNLFNBQWlCLE1BQWM7QUFDeEcsUUFBTSxZQUFvQjtBQUUxQixNQUFHLFFBQVE7QUFDVCxVQUFNLFdBQW1CLFdBQVcsS0FBSyxnQkFBZ0IsUUFBUSxJQUFJLFNBQVMsU0FBUztBQUN2RixVQUFNLGVBQXVCLE1BQU0sU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ2pGLFdBQU8sWUFBWSxVQUFVLFlBQVk7QUFBQSxFQUMzQztBQUVBLFNBQU8sV0FBVyxLQUFLLGdCQUFnQixRQUFRLElBQUksU0FBUyxTQUFTO0FBQ3ZFO0FBR08sTUFBTSxjQUFjLENBQUMsZUFBK0I7QUFDekQsUUFBTSxVQUFVLElBQUksSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFO0FBQzlDLFFBQU0sYUFBcUIsZ0JBQWdCLFVBQVU7QUFDckQsUUFBTSxXQUFtQixXQUFXLEtBQUssWUFBWSxPQUFPO0FBRTVELE1BQUcsWUFBWSxXQUFXLFFBQVEsR0FBRztBQUNuQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sWUFBb0IsV0FBVyxLQUFLLFlBQVksTUFBTSxFQUFFLEtBQUssS0FBSyxVQUFVO0FBQ2xGLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/utils/log.js
CHANGED
|
@@ -13,6 +13,7 @@ const log = (message, type = "info", quiet = false) => {
|
|
|
13
13
|
color = chalk.greenBright;
|
|
14
14
|
break;
|
|
15
15
|
case "warn":
|
|
16
|
+
case "warning":
|
|
16
17
|
color = chalk.yellow;
|
|
17
18
|
break;
|
|
18
19
|
default:
|
|
@@ -25,4 +26,4 @@ const log = (message, type = "info", quiet = false) => {
|
|
|
25
26
|
export {
|
|
26
27
|
log
|
|
27
28
|
};
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2xvZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmV4cG9ydCBjb25zdCBsb2cgPSAobWVzc2FnZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnaW5mbycsIHF1aWV0ID0gZmFsc2UpID0+
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2xvZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmV4cG9ydCBjb25zdCBsb2cgPSAobWVzc2FnZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnaW5mbycsIHF1aWV0ID0gZmFsc2UpID0+IHtcbiAgaWYoIXF1aWV0KSB7XG4gICAgbGV0IGNvbG9yO1xuXG4gICAgc3dpdGNoKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgY29sb3IgPSBjaGFsay5yZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm90ZSc6XG4gICAgICAgIGNvbG9yID0gY2hhbGsuZ3JleTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgY29sb3IgPSBjaGFsay5ncmVlbkJyaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBjb2xvciA9IGNoYWxrLnllbGxvdztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb2xvciA9IGNoYWxrLmN5YW47XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coY29sb3IobWVzc2FnZSkpO1xuICB9XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQU8sV0FBVztBQUVYLE1BQU0sTUFBTSxDQUFDLFNBQWlCLE9BQWUsUUFBUSxRQUFRLFVBQVU7QUFDNUUsTUFBRyxDQUFDLE9BQU87QUFDVCxRQUFJO0FBRUosWUFBTyxNQUFNO0FBQUEsTUFDWCxLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRixLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRixLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRjtBQUNFLGdCQUFRLE1BQU07QUFDZDtBQUFBLElBQ0o7QUFHQSxZQUFRLElBQUksTUFBTSxPQUFPLENBQUM7QUFBQSxFQUM1QjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/utils/reactShim.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as react from "react";
|
|
2
2
|
export {
|
|
3
|
-
|
|
3
|
+
react
|
|
4
4
|
};
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3JlYWN0U2hpbS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQge3JlYWN0fTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxZQUFZLFdBQVc7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/eslint.config.js
ADDED
package/index.cjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommonJS entry point for @nlabs/lex
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// This file provides CommonJS compatibility for projects using require()
|
|
6
|
+
module.exports = {
|
|
7
|
+
// Export Config as both a type and a namespace with create method for backward compatibility
|
|
8
|
+
Config: {
|
|
9
|
+
create: (config) => config
|
|
10
|
+
},
|
|
11
|
+
// Export LexConfig class
|
|
12
|
+
LexConfig: require('./dist/LexConfig.js').LexConfig,
|
|
13
|
+
// Export utility functions
|
|
14
|
+
utils: {
|
|
15
|
+
aiService: require('./dist/utils/aiService.js'),
|
|
16
|
+
app: require('./dist/utils/app.js'),
|
|
17
|
+
file: require('./dist/utils/file.js'),
|
|
18
|
+
log: require('./dist/utils/log.js')
|
|
19
|
+
}
|
|
20
|
+
};
|
package/jest.config.cjs
CHANGED
|
@@ -2,38 +2,42 @@
|
|
|
2
2
|
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
4
|
*/
|
|
5
|
-
const
|
|
6
|
-
const base = require("../../jest.config.base");
|
|
7
|
-
const pack = require("./package.json");
|
|
5
|
+
const pack = require('./package.json');
|
|
8
6
|
|
|
9
7
|
module.exports = {
|
|
10
|
-
...base,
|
|
11
|
-
collectCoverage: true,
|
|
12
|
-
coveragePathIgnorePatterns: [
|
|
13
|
-
"/node_modules/",
|
|
14
|
-
"(tests/.*.mock).(jsx?|tsx?)$",
|
|
15
|
-
],
|
|
16
|
-
coverageReporters: ["html", "text"],
|
|
17
|
-
coverageThreshold: {
|
|
18
|
-
global: {
|
|
19
|
-
branches: 80,
|
|
20
|
-
functions: 90,
|
|
21
|
-
lines: 80,
|
|
22
|
-
statements: 80,
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
8
|
displayName: pack.name,
|
|
26
|
-
|
|
27
|
-
|
|
9
|
+
testEnvironment: 'node',
|
|
10
|
+
extensionsToTreatAsEsm: ['.ts'],
|
|
11
|
+
moduleFileExtensions: ['js', 'ts', 'tsx', 'json'],
|
|
28
12
|
moduleNameMapper: {
|
|
29
|
-
|
|
13
|
+
'^(\\.{1,2}/.*)\\.js$': '$1',
|
|
14
|
+
// Mock problematic ES modules
|
|
15
|
+
'^execa$': '<rootDir>/__mocks__/execa.js',
|
|
16
|
+
'^boxen$': '<rootDir>/__mocks__/boxen.js',
|
|
17
|
+
'^chalk$': '<rootDir>/__mocks__/chalk.js',
|
|
18
|
+
'^ora$': '<rootDir>/__mocks__/ora.js',
|
|
19
|
+
// Mock modules that use import.meta.url - use more specific patterns
|
|
20
|
+
'.*LexConfig.*': '<rootDir>/__mocks__/LexConfig.js',
|
|
21
|
+
'.*build\\.js$': '<rootDir>/__mocks__/build.js',
|
|
22
|
+
'.*versions\\.js$': '<rootDir>/__mocks__/versions.js',
|
|
23
|
+
'.*compile\\.js$': '<rootDir>/__mocks__/compile.js'
|
|
30
24
|
},
|
|
31
|
-
rootDir:
|
|
32
|
-
|
|
33
|
-
testMatch: ["<rootDir>/**/*.test.ts*"],
|
|
25
|
+
rootDir: './',
|
|
26
|
+
testMatch: ['<rootDir>/**/*.test.ts*'],
|
|
34
27
|
transform: {
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
'^.+\\.ts$|^.+\\.tsx$': ['ts-jest', {
|
|
29
|
+
useESM: true,
|
|
30
|
+
tsconfig: {
|
|
31
|
+
module: 'ESNext',
|
|
32
|
+
target: 'ESNext',
|
|
33
|
+
allowJs: true
|
|
34
|
+
}
|
|
35
|
+
}],
|
|
36
|
+
'\\.(gql|graphql)$': 'jest-transform-graphql'
|
|
37
37
|
},
|
|
38
|
-
|
|
38
|
+
// Disable coverage temporarily to avoid import.meta issues
|
|
39
|
+
collectCoverage: false,
|
|
40
|
+
// Transform all node_modules to handle ES modules
|
|
41
|
+
transformIgnorePatterns: [],
|
|
42
|
+
setupFilesAfterEnv: ['../../jest.setup.js']
|
|
39
43
|
};
|