@nlabs/lex 1.47.0 → 1.47.2
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/dist/LexConfig.d.ts +79 -0
- package/dist/LexConfig.js +13 -3
- package/dist/commands/ai/ai.d.ts +17 -0
- package/dist/commands/ai/ai.js +10 -10
- package/dist/commands/ai/index.d.ts +8 -0
- package/dist/commands/ai/index.js +1 -1
- package/dist/commands/build/build.cli.test.d.ts +5 -0
- package/dist/commands/build/build.d.ts +18 -0
- package/dist/commands/build/build.integration.test.d.ts +1 -0
- package/dist/commands/build/build.js +58 -8
- package/dist/commands/build/build.options.test.d.ts +5 -0
- package/dist/commands/clean/clean.cli.test.d.ts +1 -0
- package/dist/commands/clean/clean.d.ts +7 -0
- package/dist/commands/clean/clean.integration.test.d.ts +1 -0
- package/dist/commands/clean/clean.options.test.d.ts +1 -0
- package/dist/commands/compile/compile.cli.test.d.ts +1 -0
- package/dist/commands/compile/compile.d.ts +2 -0
- package/dist/commands/compile/compile.integration.test.d.ts +1 -0
- package/dist/commands/compile/compile.js +50 -6
- package/dist/commands/compile/compile.options.test.d.ts +1 -0
- package/dist/commands/config/config.cli.test.d.ts +1 -0
- package/dist/commands/config/config.d.ts +7 -0
- package/dist/commands/config/config.integration.test.d.ts +1 -0
- package/dist/commands/config/config.options.test.d.ts +1 -0
- package/dist/commands/copy/copy.cli.test.d.ts +1 -0
- package/dist/commands/copy/copy.d.ts +6 -0
- package/dist/commands/copy/copy.integration.test.d.ts +1 -0
- package/dist/commands/copy/copy.options.test.d.ts +1 -0
- package/dist/commands/create/create.cli.test.d.ts +1 -0
- package/dist/commands/create/create.d.ts +8 -0
- package/dist/commands/create/create.integration.test.d.ts +1 -0
- package/dist/commands/create/create.options.test.d.ts +1 -0
- package/dist/commands/dev/dev.cli.test.d.ts +1 -0
- package/dist/commands/dev/dev.d.ts +11 -0
- package/dist/commands/dev/dev.integration.test.d.ts +1 -0
- package/dist/commands/dev/dev.options.test.d.ts +1 -0
- package/dist/commands/init/init.cli.test.d.ts +1 -0
- package/dist/commands/init/init.d.ts +9 -0
- package/dist/commands/init/init.integration.test.d.ts +1 -0
- package/dist/commands/init/init.options.test.d.ts +1 -0
- package/dist/commands/link/link.cli.test.d.ts +1 -0
- package/dist/commands/link/link.d.ts +6 -0
- package/dist/commands/link/link.integration.test.d.ts +1 -0
- package/dist/commands/link/link.options.test.d.ts +1 -0
- package/dist/commands/lint/autofix.d.ts +2 -0
- package/dist/commands/lint/lint.cli.test.d.ts +1 -0
- package/dist/commands/lint/lint.d.ts +39 -0
- package/dist/commands/lint/lint.integration.test.d.ts +1 -0
- package/dist/commands/lint/lint.js +198 -34
- package/dist/commands/lint/lint.options.test.d.ts +1 -0
- package/dist/commands/migrate/migrate.cli.test.d.ts +1 -0
- package/dist/commands/migrate/migrate.d.ts +7 -0
- package/dist/commands/migrate/migrate.integration.test.d.ts +1 -0
- package/dist/commands/migrate/migrate.options.test.d.ts +1 -0
- package/dist/commands/publish/publish.cli.test.d.ts +1 -0
- package/dist/commands/publish/publish.d.ts +12 -0
- package/dist/commands/publish/publish.integration.test.d.ts +1 -0
- package/dist/commands/publish/publish.options.test.d.ts +1 -0
- package/dist/commands/test/test.cli.test.d.ts +1 -0
- package/dist/commands/test/test.d.ts +50 -0
- package/dist/commands/test/test.integration.test.d.ts +1 -0
- package/dist/commands/test/test.js +5 -5
- package/dist/commands/test/test.options.test.d.ts +1 -0
- package/dist/commands/test/test.test.d.ts +1 -0
- package/dist/commands/update/update.cli.test.d.ts +1 -0
- package/dist/commands/update/update.d.ts +9 -0
- package/dist/commands/update/update.integration.test.d.ts +1 -0
- package/dist/commands/update/update.js +92 -23
- package/dist/commands/update/update.options.test.d.ts +1 -0
- package/dist/commands/upgrade/upgrade.cli.test.d.ts +1 -0
- package/dist/commands/upgrade/upgrade.d.ts +7 -0
- package/dist/commands/upgrade/upgrade.integration.test.d.ts +1 -0
- package/dist/commands/upgrade/upgrade.options.test.d.ts +1 -0
- package/dist/commands/versions/versions.cli.test.d.ts +1 -0
- package/dist/commands/versions/versions.d.ts +13 -0
- package/dist/commands/versions/versions.integration.test.d.ts +1 -0
- package/dist/commands/versions/versions.options.test.d.ts +1 -0
- package/dist/create/changelog.d.ts +6 -0
- package/dist/index.d.ts +31 -0
- package/dist/lex.d.ts +2 -0
- package/dist/types.d.ts +5 -0
- package/dist/utils/aiService.d.ts +9 -0
- package/dist/utils/aiService.js +17 -8
- package/dist/utils/app.d.ts +41 -0
- package/dist/utils/app.js +51 -1
- package/dist/utils/file.d.ts +3 -0
- package/dist/utils/file.js +18 -3
- package/dist/utils/log.d.ts +1 -0
- package/dist/utils/reactShim.d.ts +2 -0
- package/eslint.config.js +1 -6
- package/jest.config.lex.js +22 -26
- package/package.json +22 -19
- package/resolver.cjs +125 -14
- /package/{dist/jest.config.lex.d.ts → jest.config.lex.d.ts} +0 -0
- /package/{dist/webpack.config.d.ts → webpack.config.d.ts} +0 -0
package/dist/utils/aiService.js
CHANGED
|
@@ -34,7 +34,7 @@ The current CLI integration doesn't have direct access to Cursor's code generati
|
|
|
34
34
|
**Alternative options:**
|
|
35
35
|
|
|
36
36
|
1. **Use OpenAI or Anthropic directly:**
|
|
37
|
-
Configure in lex.config
|
|
37
|
+
Configure in your lex.config file:
|
|
38
38
|
\`\`\`js
|
|
39
39
|
export default {
|
|
40
40
|
ai: {
|
|
@@ -61,10 +61,10 @@ The current integration is limited and doesn't directly access Cursor's AI capab
|
|
|
61
61
|
|
|
62
62
|
For the best experience with AI code generation:
|
|
63
63
|
- Use Cursor IDE directly
|
|
64
|
-
- Or configure OpenAI or Anthropic as your provider in lex.config
|
|
64
|
+
- Or configure OpenAI or Anthropic as your provider in your lex.config file:
|
|
65
65
|
|
|
66
66
|
\`\`\`js
|
|
67
|
-
// lex.config.js
|
|
67
|
+
// lex.config.js (or lex.config.mjs, lex.config.cjs, etc.)
|
|
68
68
|
export default {
|
|
69
69
|
ai: {
|
|
70
70
|
provider: 'openai', // or 'anthropic'
|
|
@@ -87,7 +87,7 @@ const callOpenAIAI = async (prompt, options) => {
|
|
|
87
87
|
try {
|
|
88
88
|
const apiKey = options.apiKey || process.env.OPENAI_API_KEY;
|
|
89
89
|
if (!apiKey) {
|
|
90
|
-
throw new Error("OpenAI API key is required. Set it in lex.config
|
|
90
|
+
throw new Error("OpenAI API key is required. Set it in your lex.config file or as OPENAI_API_KEY environment variable.");
|
|
91
91
|
}
|
|
92
92
|
const response = await fetch("https://api.openai.com/v1/chat/completions", {
|
|
93
93
|
body: JSON.stringify({
|
|
@@ -119,7 +119,7 @@ const callAnthropicAI = async (prompt, options) => {
|
|
|
119
119
|
try {
|
|
120
120
|
const apiKey = options.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
121
121
|
if (!apiKey) {
|
|
122
|
-
throw new Error("Anthropic API key is required. Set it in lex.config
|
|
122
|
+
throw new Error("Anthropic API key is required. Set it in your lex.config file or as ANTHROPIC_API_KEY environment variable.");
|
|
123
123
|
}
|
|
124
124
|
const response = await fetch("https://api.anthropic.com/v1/messages", {
|
|
125
125
|
body: JSON.stringify({
|
|
@@ -235,8 +235,17 @@ const callAIService = async (prompt, quiet = false) => {
|
|
|
235
235
|
aiConfig.apiKey = await promptForAPIKey(provider, quiet);
|
|
236
236
|
}
|
|
237
237
|
LexConfig.config.ai = aiConfig;
|
|
238
|
-
const
|
|
239
|
-
|
|
238
|
+
const configFormats = ["js", "mjs", "cjs", "ts", "json"];
|
|
239
|
+
const configBaseName = "lex.config";
|
|
240
|
+
let configPath = "";
|
|
241
|
+
for (const format of configFormats) {
|
|
242
|
+
const potentialPath = pathResolve(process.cwd(), `./${configBaseName}.${format}`);
|
|
243
|
+
if (existsSync(potentialPath)) {
|
|
244
|
+
configPath = potentialPath;
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (configPath) {
|
|
240
249
|
try {
|
|
241
250
|
const configContent = readFileSync(configPath, "utf8");
|
|
242
251
|
const updatedConfig = configContent.replace(
|
|
@@ -287,4 +296,4 @@ export {
|
|
|
287
296
|
promptForAIProvider,
|
|
288
297
|
promptForAPIKey
|
|
289
298
|
};
|
|
290
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FpU2VydmljZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcblxuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi9sb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWcsIEFJQ29uZmlnfSBmcm9tICcuLi9MZXhDb25maWcuanMnO1xuXG4vLyBDdXJzb3IgSURFIGludGVncmF0aW9uXG5leHBvcnQgY29uc3QgY2FsbEN1cnNvckFJID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHRyeSB7XG4gICAgLy8gV2hlbiBydW5uaW5nIHdpdGhpbiBDdXJzb3IgSURFLCB3ZSBjYW4gd3JpdGUgdGhlIHByb21wdCB0byBhIHRlbXBvcmFyeSBmaWxlXG4gICAgLy8gdGhhdCBDdXJzb3IgY2FuIHVzZSB0byBwcm92aWRlIEFJIGFzc2lzdGFuY2VcbiAgICBsb2coJ1VzaW5nIEN1cnNvciBJREUgZm9yIEFJIGZpeGVzLi4uJywgJ2luZm8nKTtcblxuICAgIC8vIEZvciBub3csIGp1c3QgbG9nIHRoZSBwcm9tcHQgYW5kIHJldHVybiBhIHBsYWNlaG9sZGVyXG4gICAgLy8gSW4gYSByZWFsIGltcGxlbWVudGF0aW9uLCBDdXJzb3Igd291bGQgaGFuZGxlIHRoaXMgYXV0b21hdGljYWxseVxuICAgIGxvZygnQUkgZml4IHJlcXVlc3RlZCB2aWEgQ3Vyc29yIElERScsICdpbmZvJyk7XG5cbiAgICBjb25zdCB0YXNrTWF0Y2ggPSBwcm9tcHQubWF0Y2goL14oR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0fEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlfEdlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0c3xBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZXxQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb24pOi8pO1xuICAgIGNvbnN0IHRhc2sgPSB0YXNrTWF0Y2ggPyB0YXNrTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBpc0dlbmVyYXRlVGFzayA9IHRhc2suc3RhcnRzV2l0aCgnR2VuZXJhdGUgY29kZScpO1xuICAgIFxuICAgIGNvbnN0IHF1ZXN0aW9uTWF0Y2ggPSBwcm9tcHQubWF0Y2goLyg/OkdlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdHxFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZXxHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHN8QW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGV8UHJvdmlkZSBndWlkYW5jZSBvbiB0aGUgZm9sbG93aW5nIGRldmVsb3BtZW50IHF1ZXN0aW9uKTpcXHMqKFtcXHNcXFNdKz8pKD86PT09Q09OVEVYVD09PXwkKS8pO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25NYXRjaCA/IHF1ZXN0aW9uTWF0Y2hbMV0udHJpbSgpIDogcHJvbXB0O1xuICAgIFxuICAgIGlmIChxdWVzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdob3cgbWFueSBmaWxlcycpICYmIHByb21wdC5pbmNsdWRlcygnUHJvamVjdCBzdHJ1Y3R1cmU6JykpIHtcbiAgICAgIGNvbnN0IHByb2plY3RTdHJ1Y3R1cmUgPSBwcm9tcHQuc3BsaXQoJ1Byb2plY3Qgc3RydWN0dXJlOicpWzFdIHx8ICcnO1xuICAgICAgY29uc3QgZmlsZXMgPSBwcm9qZWN0U3RydWN0dXJlLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgICByZXR1cm4gYEJhc2VkIG9uIHRoZSBwcm9qZWN0IHN0cnVjdHVyZSBwcm92aWRlZCwgdGhlcmUgYXJlICR7ZmlsZXMubGVuZ3RofSBmaWxlcyBpbiB0aGUgcHJvamVjdC5gO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXNHZW5lcmF0ZVRhc2spIHtcbiAgICAgIHJldHVybiBgXG4jIENvZGUgR2VuZXJhdGlvbiBSZXF1ZXN0OiBcIiR7cXVlc3Rpb259XCJcblxuVG8gZ2VuZXJhdGUgY29kZSB1c2luZyBDdXJzb3IncyBBSSBjYXBhYmlsaXRpZXM6XG5cbjEuICoqT3BlbiB5b3VyIHByb2plY3QgaW4gQ3Vyc29yIElERSoqIChodHRwczovL2N1cnNvci5zaClcbjIuIFByZXNzICoqQ21kK0wqKiAob3IgQ3RybCtMIG9uIFdpbmRvd3MvTGludXgpIHRvIG9wZW4gdGhlIEFJIGNoYXRcbjMuIFR5cGUgeW91ciByZXF1ZXN0OiBcIiR7cXVlc3Rpb259XCJcbjQuIEN1cnNvciB3aWxsIGdlbmVyYXRlIHRoZSBjb2RlIGRpcmVjdGx5IGluIHlvdXIgZWRpdG9yXG5cblRoZSBjdXJyZW50IENMSSBpbnRlZ3JhdGlvbiBkb2Vzbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBDdXJzb3IncyBjb2RlIGdlbmVyYXRpb24gY2FwYWJpbGl0aWVzLlxuXG4qKkFsdGVybmF0aXZlIG9wdGlvbnM6KipcblxuMS4gKipVc2UgT3BlbkFJIG9yIEFudGhyb3BpYyBkaXJlY3RseToqKlxuICAgQ29uZmlndXJlIGluIGxleC5jb25maWcuanM6XG4gICBcXGBcXGBcXGBqc1xuICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICBhaToge1xuICAgICAgIHByb3ZpZGVyOiAnb3BlbmFpJyxcbiAgICAgICBhcGlLZXk6IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZLFxuICAgICAgIG1vZGVsOiAnZ3B0LTRvJ1xuICAgICB9XG4gICB9XG4gICBcXGBcXGBcXGBcblxuMi4gKipVc2UgQ3Vyc29yJ3MgY29tbWFuZCBsaW5lIHRvb2w6KipcbiAgIEluc3RhbGw6IFxcYG5wbSBpbnN0YWxsIC1nIEBjdXJzb3IvY2xpXFxgXG4gICBSdW46IFxcYGN1cnNvciBhaSBcIiR7cXVlc3Rpb259XCJcXGBcbmA7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBgXG5UbyB1c2UgQ3Vyc29yJ3MgQUkgY2FwYWJpbGl0aWVzIGZvciBcIiR7cXVlc3Rpb259XCIsIHlvdSBuZWVkIHRvOlxuXG4xLiBPcGVuIHlvdXIgcHJvamVjdCBpbiBDdXJzb3IgSURFIChodHRwczovL2N1cnNvci5zaClcbjIuIFVzZSBDdXJzb3IncyBidWlsdC1pbiBBSSBmZWF0dXJlcyBieSBwcmVzc2luZyBDbWQrSyBvciBDbWQrTFxuMy4gT3IgcnVuIHRoZSAnY3Vyc29yJyBjb21tYW5kIGRpcmVjdGx5IGZyb20geW91ciB0ZXJtaW5hbFxuXG5UaGUgY3VycmVudCBpbnRlZ3JhdGlvbiBpcyBsaW1pdGVkIGFuZCBkb2Vzbid0IGRpcmVjdGx5IGFjY2VzcyBDdXJzb3IncyBBSSBjYXBhYmlsaXRpZXMuXG5cbkZvciB0aGUgYmVzdCBleHBlcmllbmNlIHdpdGggQUkgY29kZSBnZW5lcmF0aW9uOlxuLSBVc2UgQ3Vyc29yIElERSBkaXJlY3RseVxuLSBPciBjb25maWd1cmUgT3BlbkFJIG9yIEFudGhyb3BpYyBhcyB5b3VyIHByb3ZpZGVyIGluIGxleC5jb25maWcuanM6XG5cblxcYFxcYFxcYGpzXG4vLyBsZXguY29uZmlnLmpzXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFpOiB7XG4gICAgcHJvdmlkZXI6ICdvcGVuYWknLCAvLyBvciAnYW50aHJvcGljJ1xuICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksIC8vIG9yIEFOVEhST1BJQ19BUElfS0VZXG4gICAgbW9kZWw6ICdncHQtNG8nIC8vIG9yICdjbGF1ZGUtMy1vcHVzJ1xuICB9XG59XG5cXGBcXGBcXGBcblxuVGhlbiBzZXQgeW91ciBBUEkga2V5IGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlOlxuXFxgXFxgXFxgXG5leHBvcnQgT1BFTkFJX0FQSV9LRVk9eW91cl9rZXlfaGVyZVxuXFxgXFxgXFxgXG5gO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDdXJzb3IgQUkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhbGxPcGVuQUlBSSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52Lk9QRU5BSV9BUElfS0VZO1xuICAgIGlmKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlbkFJIEFQSSBrZXkgaXMgcmVxdWlyZWQuIFNldCBpdCBpbiBsZXguY29uZmlnLmpzIG9yIGFzIE9QRU5BSV9BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvY2hhdC9jb21wbGV0aW9ucycsIHtcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbWF4X3Rva2Vuczogb3B0aW9ucy5tYXhUb2tlbnMgfHwgNDAwMCxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7Y29udGVudDogJ1lvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudCB0aGF0IGZpeGVzIEVTTGludCBlcnJvcnMgaW4gY29kZS4nLCByb2xlOiAnc3lzdGVtJ30sXG4gICAgICAgICAge2NvbnRlbnQ6IHByb21wdCwgcm9sZTogJ3VzZXInfVxuICAgICAgICBdLFxuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCB8fCAnZ3B0LTRvJyxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUgfHwgMC4xXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KTtcblxuICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZW5BSSBBUEkgZXJyb3I6ICR7ZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhLmNob2ljZXNbMF0ubWVzc2FnZS5jb250ZW50O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPcGVuQUkgQUkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhbGxBbnRocm9waWNBSSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIGlmKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW50aHJvcGljIEFQSSBrZXkgaXMgcmVxdWlyZWQuIFNldCBpdCBpbiBsZXguY29uZmlnLmpzIG9yIGFzIEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLmFudGhyb3BpYy5jb20vdjEvbWVzc2FnZXMnLCB7XG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG1heF90b2tlbnM6IG9wdGlvbnMubWF4VG9rZW5zIHx8IDQwMDAsXG4gICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAge2NvbnRlbnQ6IHByb21wdCwgcm9sZTogJ3VzZXInfVxuICAgICAgICBdLFxuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCB8fCAnY2xhdWRlLTMtc29ubmV0LTIwMjQwMjI5JyxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUgfHwgMC4xXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ2FudGhyb3BpYy12ZXJzaW9uJzogJzIwMjMtMDYtMDEnLFxuICAgICAgICAneC1hcGkta2V5JzogYXBpS2V5XG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KTtcblxuICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFudGhyb3BpYyBBUEkgZXJyb3I6ICR7ZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhLmNvbnRlbnRbMF0udGV4dDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQW50aHJvcGljIEFJIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjYWxsQ29waWxvdEFJID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHRyeSB7XG4gICAgbG9nKCdHaXRIdWIgQ29waWxvdCBBSSBmaXhlcyBub3QgZGlyZWN0bHkgc3VwcG9ydGVkLiBVc2luZyBtYW51YWwgZml4IG1vZGUuJywgJ2luZm8nKTtcbiAgICByZXR1cm4gcHJvbXB0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHaXRIdWIgQ29waWxvdCBBSSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJvbXB0Rm9yQUlQcm92aWRlciA9IGFzeW5jIChxdWlldCA9IGZhbHNlKTogUHJvbWlzZTwnY3Vyc29yJyB8ICdjb3BpbG90JyB8ICdvcGVuYWknIHwgJ2FudGhyb3BpYycgfCAnbm9uZSc+ID0+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbG9nKCdcXG5ObyBBSSBwcm92aWRlciBjb25maWd1cmVkLiBQbGVhc2UgY2hvb3NlIGFuIEFJIHByb3ZpZGVyOicsICdpbmZvJyk7XG4gICAgbG9nKCcxLiBDdXJzb3IgSURFJywgJ2luZm8nKTtcbiAgICBsb2coJzIuIE9wZW5BSScsICdpbmZvJyk7XG4gICAgbG9nKCczLiBBbnRocm9waWMnLCAnaW5mbycpO1xuICAgIGxvZygnNC4gR2l0SHViIENvcGlsb3QnLCAnaW5mbycpO1xuICAgIGxvZygnNS4gTm9uZSAoU2tpcCBBSSBmZWF0dXJlcyknLCAnaW5mbycpO1xuXG4gICAgcmwucXVlc3Rpb24oJ0VudGVyIHlvdXIgY2hvaWNlICgxLTUpOiAnLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuXG4gICAgICBzd2l0Y2goYW5zd2VyKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgIHJlc29sdmUoJ2N1cnNvcicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcyJzpcbiAgICAgICAgICByZXNvbHZlKCdvcGVuYWknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnMyc6XG4gICAgICAgICAgcmVzb2x2ZSgnYW50aHJvcGljJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzQnOlxuICAgICAgICAgIHJlc29sdmUoJ2NvcGlsb3QnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXNvbHZlKCdub25lJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb21wdEZvckFQSUtleSA9IGFzeW5jIChwcm92aWRlcjogc3RyaW5nLCBxdWlldCA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24oYFBsZWFzZSBlbnRlciB5b3VyICR7cHJvdmlkZXJ9IEFQSSBrZXk6IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlcik7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFJU2VydmljZSA9IChwcm92aWRlcjogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpID0+IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHN3aXRjaChwcm92aWRlcikge1xuICAgIGNhc2UgJ2N1cnNvcic6XG4gICAgICByZXR1cm4gY2FsbEN1cnNvckFJO1xuICAgIGNhc2UgJ29wZW5haSc6XG4gICAgICByZXR1cm4gY2FsbE9wZW5BSUFJO1xuICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICByZXR1cm4gY2FsbEFudGhyb3BpY0FJO1xuICAgIGNhc2UgJ2NvcGlsb3QnOlxuICAgICAgcmV0dXJuIGNhbGxDb3BpbG90QUk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhc3luYyAoKSA9PiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjYWxsQUlTZXJ2aWNlID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBxdWlldCA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdDYWxsaW5nIEFJIHNlcnZpY2UgdG8gZml4IGNvZGUgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhaUNvbmZpZyA9IExleENvbmZpZy5jb25maWcuYWkgfHwge3Byb3ZpZGVyOiAnbm9uZSd9O1xuXG4gICAgY29uc3QgaXNJbkN1cnNvcklERSA9IHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJztcbiAgICBpZihpc0luQ3Vyc29ySURFICYmIChhaUNvbmZpZy5wcm92aWRlciA9PT0gJ25vbmUnIHx8ICFhaUNvbmZpZy5wcm92aWRlcikpIHtcbiAgICAgIGxvZygnRGV0ZWN0ZWQgQ3Vyc29yIElERSBlbnZpcm9ubWVudCwgdXNpbmcgQ3Vyc29yIGFzIEFJIHByb3ZpZGVyJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBhaUNvbmZpZy5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgIH1cblxuICAgIGlmKGFpQ29uZmlnLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvbXB0Rm9yQUlQcm92aWRlcihxdWlldCk7XG5cbiAgICAgIGlmKHByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdBSSBmZWF0dXJlcyBza2lwcGVkJyk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgYWlDb25maWcucHJvdmlkZXIgPSBwcm92aWRlcjtcblxuICAgICAgaWYocHJvdmlkZXIgIT09ICdjdXJzb3InICYmIHByb3ZpZGVyICE9PSAnY29waWxvdCcgJiZcbiAgICAgICAgICFwcm9jZXNzLmVudltgJHtwcm92aWRlci50b1VwcGVyQ2FzZSgpfV9BUElfS0VZYF0pIHtcbiAgICAgICAgYWlDb25maWcuYXBpS2V5ID0gYXdhaXQgcHJvbXB0Rm9yQVBJS2V5KHByb3ZpZGVyLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSBhaUNvbmZpZztcblxuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdsZXguY29uZmlnLmpzJyk7XG4gICAgICBpZihleGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSBjb25maWdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgICAvYWk6Lio/Wyx9XS9zLFxuICAgICAgICAgICAgYGFpOiB7IHByb3ZpZGVyOiAnJHthaUNvbmZpZy5wcm92aWRlcn0nIH0sYFxuICAgICAgICAgICk7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCB1cGRhdGVkQ29uZmlnKTtcbiAgICAgICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIHN3aXRjaChhaUNvbmZpZy5wcm92aWRlcikge1xuICAgICAgY2FzZSAnY3Vyc29yJzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbEN1cnNvckFJKHByb21wdCwgYWlDb25maWcpO1xuICAgICAgICBsb2coJ0N1cnNvciBJREUgQUkgaW50ZWdyYXRpb24gYWN0aXZlJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbE9wZW5BSUFJKHByb21wdCwgYWlDb25maWcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNhbGxBbnRocm9waWNBSShwcm9tcHQsIGFpQ29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbENvcGlsb3RBSShwcm9tcHQsIGFpQ29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzcGlubmVyLmZhaWwoJ05vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQnKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgY29kZSBmaXhlcyBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQUkgc2VydmljZSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGVycm9yLCAnZXJyb3InKTtcbiAgICB9XG4g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
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FpU2VydmljZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcblxuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi9sb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWcsIEFJQ29uZmlnfSBmcm9tICcuLi9MZXhDb25maWcuanMnO1xuXG4vLyBDdXJzb3IgSURFIGludGVncmF0aW9uXG5leHBvcnQgY29uc3QgY2FsbEN1cnNvckFJID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHRyeSB7XG4gICAgLy8gV2hlbiBydW5uaW5nIHdpdGhpbiBDdXJzb3IgSURFLCB3ZSBjYW4gd3JpdGUgdGhlIHByb21wdCB0byBhIHRlbXBvcmFyeSBmaWxlXG4gICAgLy8gdGhhdCBDdXJzb3IgY2FuIHVzZSB0byBwcm92aWRlIEFJIGFzc2lzdGFuY2VcbiAgICBsb2coJ1VzaW5nIEN1cnNvciBJREUgZm9yIEFJIGZpeGVzLi4uJywgJ2luZm8nKTtcblxuICAgIC8vIEZvciBub3csIGp1c3QgbG9nIHRoZSBwcm9tcHQgYW5kIHJldHVybiBhIHBsYWNlaG9sZGVyXG4gICAgLy8gSW4gYSByZWFsIGltcGxlbWVudGF0aW9uLCBDdXJzb3Igd291bGQgaGFuZGxlIHRoaXMgYXV0b21hdGljYWxseVxuICAgIGxvZygnQUkgZml4IHJlcXVlc3RlZCB2aWEgQ3Vyc29yIElERScsICdpbmZvJyk7XG5cbiAgICBjb25zdCB0YXNrTWF0Y2ggPSBwcm9tcHQubWF0Y2goL14oR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0fEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlfEdlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0c3xBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZXxQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb24pOi8pO1xuICAgIGNvbnN0IHRhc2sgPSB0YXNrTWF0Y2ggPyB0YXNrTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBpc0dlbmVyYXRlVGFzayA9IHRhc2suc3RhcnRzV2l0aCgnR2VuZXJhdGUgY29kZScpO1xuXG4gICAgY29uc3QgcXVlc3Rpb25NYXRjaCA9IHByb21wdC5tYXRjaCgvKD86R2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0fEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlfEdlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0c3xBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZXxQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb24pOlxccyooW1xcc1xcU10rPykoPzo9PT1DT05URVhUPT09fCQpLyk7XG4gICAgY29uc3QgcXVlc3Rpb24gPSBxdWVzdGlvbk1hdGNoID8gcXVlc3Rpb25NYXRjaFsxXS50cmltKCkgOiBwcm9tcHQ7XG5cbiAgICBpZihxdWVzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdob3cgbWFueSBmaWxlcycpICYmIHByb21wdC5pbmNsdWRlcygnUHJvamVjdCBzdHJ1Y3R1cmU6JykpIHtcbiAgICAgIGNvbnN0IHByb2plY3RTdHJ1Y3R1cmUgPSBwcm9tcHQuc3BsaXQoJ1Byb2plY3Qgc3RydWN0dXJlOicpWzFdIHx8ICcnO1xuICAgICAgY29uc3QgZmlsZXMgPSBwcm9qZWN0U3RydWN0dXJlLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgICByZXR1cm4gYEJhc2VkIG9uIHRoZSBwcm9qZWN0IHN0cnVjdHVyZSBwcm92aWRlZCwgdGhlcmUgYXJlICR7ZmlsZXMubGVuZ3RofSBmaWxlcyBpbiB0aGUgcHJvamVjdC5gO1xuICAgIH1cblxuICAgIGlmKGlzR2VuZXJhdGVUYXNrKSB7XG4gICAgICByZXR1cm4gYFxuIyBDb2RlIEdlbmVyYXRpb24gUmVxdWVzdDogXCIke3F1ZXN0aW9ufVwiXG5cblRvIGdlbmVyYXRlIGNvZGUgdXNpbmcgQ3Vyc29yJ3MgQUkgY2FwYWJpbGl0aWVzOlxuXG4xLiAqKk9wZW4geW91ciBwcm9qZWN0IGluIEN1cnNvciBJREUqKiAoaHR0cHM6Ly9jdXJzb3Iuc2gpXG4yLiBQcmVzcyAqKkNtZCtMKiogKG9yIEN0cmwrTCBvbiBXaW5kb3dzL0xpbnV4KSB0byBvcGVuIHRoZSBBSSBjaGF0XG4zLiBUeXBlIHlvdXIgcmVxdWVzdDogXCIke3F1ZXN0aW9ufVwiXG40LiBDdXJzb3Igd2lsbCBnZW5lcmF0ZSB0aGUgY29kZSBkaXJlY3RseSBpbiB5b3VyIGVkaXRvclxuXG5UaGUgY3VycmVudCBDTEkgaW50ZWdyYXRpb24gZG9lc24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gQ3Vyc29yJ3MgY29kZSBnZW5lcmF0aW9uIGNhcGFiaWxpdGllcy5cblxuKipBbHRlcm5hdGl2ZSBvcHRpb25zOioqXG5cbjEuICoqVXNlIE9wZW5BSSBvciBBbnRocm9waWMgZGlyZWN0bHk6KipcbiAgIENvbmZpZ3VyZSBpbiB5b3VyIGxleC5jb25maWcgZmlsZTpcbiAgIFxcYFxcYFxcYGpzXG4gICBleHBvcnQgZGVmYXVsdCB7XG4gICAgIGFpOiB7XG4gICAgICAgcHJvdmlkZXI6ICdvcGVuYWknLFxuICAgICAgIGFwaUtleTogcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVksXG4gICAgICAgbW9kZWw6ICdncHQtNG8nXG4gICAgIH1cbiAgIH1cbiAgIFxcYFxcYFxcYFxuXG4yLiAqKlVzZSBDdXJzb3IncyBjb21tYW5kIGxpbmUgdG9vbDoqKlxuICAgSW5zdGFsbDogXFxgbnBtIGluc3RhbGwgLWcgQGN1cnNvci9jbGlcXGBcbiAgIFJ1bjogXFxgY3Vyc29yIGFpIFwiJHtxdWVzdGlvbn1cIlxcYFxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYFxuVG8gdXNlIEN1cnNvcidzIEFJIGNhcGFiaWxpdGllcyBmb3IgXCIke3F1ZXN0aW9ufVwiLCB5b3UgbmVlZCB0bzpcblxuMS4gT3BlbiB5b3VyIHByb2plY3QgaW4gQ3Vyc29yIElERSAoaHR0cHM6Ly9jdXJzb3Iuc2gpXG4yLiBVc2UgQ3Vyc29yJ3MgYnVpbHQtaW4gQUkgZmVhdHVyZXMgYnkgcHJlc3NpbmcgQ21kK0sgb3IgQ21kK0xcbjMuIE9yIHJ1biB0aGUgJ2N1cnNvcicgY29tbWFuZCBkaXJlY3RseSBmcm9tIHlvdXIgdGVybWluYWxcblxuVGhlIGN1cnJlbnQgaW50ZWdyYXRpb24gaXMgbGltaXRlZCBhbmQgZG9lc24ndCBkaXJlY3RseSBhY2Nlc3MgQ3Vyc29yJ3MgQUkgY2FwYWJpbGl0aWVzLlxuXG5Gb3IgdGhlIGJlc3QgZXhwZXJpZW5jZSB3aXRoIEFJIGNvZGUgZ2VuZXJhdGlvbjpcbi0gVXNlIEN1cnNvciBJREUgZGlyZWN0bHlcbi0gT3IgY29uZmlndXJlIE9wZW5BSSBvciBBbnRocm9waWMgYXMgeW91ciBwcm92aWRlciBpbiB5b3VyIGxleC5jb25maWcgZmlsZTpcblxuXFxgXFxgXFxganNcbi8vIGxleC5jb25maWcuanMgKG9yIGxleC5jb25maWcubWpzLCBsZXguY29uZmlnLmNqcywgZXRjLilcbmV4cG9ydCBkZWZhdWx0IHtcbiAgYWk6IHtcbiAgICBwcm92aWRlcjogJ29wZW5haScsIC8vIG9yICdhbnRocm9waWMnXG4gICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSwgLy8gb3IgQU5USFJPUElDX0FQSV9LRVlcbiAgICBtb2RlbDogJ2dwdC00bycgLy8gb3IgJ2NsYXVkZS0zLW9wdXMnXG4gIH1cbn1cblxcYFxcYFxcYFxuXG5UaGVuIHNldCB5b3VyIEFQSSBrZXkgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU6XG5cXGBcXGBcXGBcbmV4cG9ydCBPUEVOQUlfQVBJX0tFWT15b3VyX2tleV9oZXJlXG5cXGBcXGBcXGBcbmA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnNvciBBSSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2FsbE9wZW5BSUFJID0gYXN5bmMgKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBBSUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXBpS2V5ID0gb3B0aW9ucy5hcGlLZXkgfHwgcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgaWYoIWFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcGVuQUkgQVBJIGtleSBpcyByZXF1aXJlZC4gU2V0IGl0IGluIHlvdXIgbGV4LmNvbmZpZyBmaWxlIG9yIGFzIE9QRU5BSV9BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvY2hhdC9jb21wbGV0aW9ucycsIHtcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbWF4X3Rva2Vuczogb3B0aW9ucy5tYXhUb2tlbnMgfHwgNDAwMCxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7Y29udGVudDogJ1lvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudCB0aGF0IGZpeGVzIEVTTGludCBlcnJvcnMgaW4gY29kZS4nLCByb2xlOiAnc3lzdGVtJ30sXG4gICAgICAgICAge2NvbnRlbnQ6IHByb21wdCwgcm9sZTogJ3VzZXInfVxuICAgICAgICBdLFxuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCB8fCAnZ3B0LTRvJyxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUgfHwgMC4xXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KTtcblxuICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZW5BSSBBUEkgZXJyb3I6ICR7ZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhLmNob2ljZXNbMF0ubWVzc2FnZS5jb250ZW50O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPcGVuQUkgQUkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhbGxBbnRocm9waWNBSSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIGlmKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW50aHJvcGljIEFQSSBrZXkgaXMgcmVxdWlyZWQuIFNldCBpdCBpbiB5b3VyIGxleC5jb25maWcgZmlsZSBvciBhcyBBTlRIUk9QSUNfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzJywge1xuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBtYXhfdG9rZW5zOiBvcHRpb25zLm1heFRva2VucyB8fCA0MDAwLFxuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIHtjb250ZW50OiBwcm9tcHQsIHJvbGU6ICd1c2VyJ31cbiAgICAgICAgXSxcbiAgICAgICAgbW9kZWw6IG9wdGlvbnMubW9kZWwgfHwgJ2NsYXVkZS0zLXNvbm5ldC0yMDI0MDIyOScsXG4gICAgICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLnRlbXBlcmF0dXJlIHx8IDAuMVxuICAgICAgfSksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdhbnRocm9waWMtdmVyc2lvbic6ICcyMDIzLTA2LTAxJyxcbiAgICAgICAgJ3gtYXBpLWtleSc6IGFwaUtleVxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgfSk7XG5cbiAgICBpZighcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbnRocm9waWMgQVBJIGVycm9yOiAke2Vycm9yLmVycm9yPy5tZXNzYWdlIHx8IHJlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gZGF0YS5jb250ZW50WzBdLnRleHQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFudGhyb3BpYyBBSSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2FsbENvcGlsb3RBSSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICB0cnkge1xuICAgIGxvZygnR2l0SHViIENvcGlsb3QgQUkgZml4ZXMgbm90IGRpcmVjdGx5IHN1cHBvcnRlZC4gVXNpbmcgbWFudWFsIGZpeCBtb2RlLicsICdpbmZvJyk7XG4gICAgcmV0dXJuIHByb21wdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgR2l0SHViIENvcGlsb3QgQUkgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHByb21wdEZvckFJUHJvdmlkZXIgPSBhc3luYyAocXVpZXQgPSBmYWxzZSk6IFByb21pc2U8J2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnPiA9PiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGxvZygnXFxuTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZC4gUGxlYXNlIGNob29zZSBhbiBBSSBwcm92aWRlcjonLCAnaW5mbycpO1xuICAgIGxvZygnMS4gQ3Vyc29yIElERScsICdpbmZvJyk7XG4gICAgbG9nKCcyLiBPcGVuQUknLCAnaW5mbycpO1xuICAgIGxvZygnMy4gQW50aHJvcGljJywgJ2luZm8nKTtcbiAgICBsb2coJzQuIEdpdEh1YiBDb3BpbG90JywgJ2luZm8nKTtcbiAgICBsb2coJzUuIE5vbmUgKFNraXAgQUkgZmVhdHVyZXMpJywgJ2luZm8nKTtcblxuICAgIHJsLnF1ZXN0aW9uKCdFbnRlciB5b3VyIGNob2ljZSAoMS01KTogJywgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcblxuICAgICAgc3dpdGNoKGFuc3dlcikge1xuICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICByZXNvbHZlKCdjdXJzb3InKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgcmVzb2x2ZSgnb3BlbmFpJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzMnOlxuICAgICAgICAgIHJlc29sdmUoJ2FudGhyb3BpYycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc0JzpcbiAgICAgICAgICByZXNvbHZlKCdjb3BpbG90Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzb2x2ZSgnbm9uZScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9tcHRGb3JBUElLZXkgPSBhc3luYyAocHJvdmlkZXI6IHN0cmluZywgcXVpZXQgPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJsLnF1ZXN0aW9uKGBQbGVhc2UgZW50ZXIgeW91ciAke3Byb3ZpZGVyfSBBUEkga2V5OiBgLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgcmVzb2x2ZShhbnN3ZXIpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBSVNlcnZpY2UgPSAocHJvdmlkZXI6IHN0cmluZywgb3B0aW9uczogQUlDb25maWcpOiAocHJvbXB0OiBzdHJpbmcsIG9wdGlvbnM6IEFJQ29uZmlnKSA9PiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBzd2l0Y2gocHJvdmlkZXIpIHtcbiAgICBjYXNlICdjdXJzb3InOlxuICAgICAgcmV0dXJuIGNhbGxDdXJzb3JBSTtcbiAgICBjYXNlICdvcGVuYWknOlxuICAgICAgcmV0dXJuIGNhbGxPcGVuQUlBSTtcbiAgICBjYXNlICdhbnRocm9waWMnOlxuICAgICAgcmV0dXJuIGNhbGxBbnRocm9waWNBSTtcbiAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgIHJldHVybiBjYWxsQ29waWxvdEFJO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYXN5bmMgKCkgPT4gJ05vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2FsbEFJU2VydmljZSA9IGFzeW5jIChwcm9tcHQ6IHN0cmluZywgcXVpZXQgPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcbiAgc3Bpbm5lci5zdGFydCgnQ2FsbGluZyBBSSBzZXJ2aWNlIHRvIGZpeCBjb2RlIGlzc3Vlcy4uLicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYWlDb25maWcgPSBMZXhDb25maWcuY29uZmlnLmFpIHx8IHtwcm92aWRlcjogJ25vbmUnfTtcblxuICAgIGNvbnN0IGlzSW5DdXJzb3JJREUgPSBwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZSc7XG4gICAgaWYoaXNJbkN1cnNvcklERSAmJiAoYWlDb25maWcucHJvdmlkZXIgPT09ICdub25lJyB8fCAhYWlDb25maWcucHJvdmlkZXIpKSB7XG4gICAgICBsb2coJ0RldGVjdGVkIEN1cnNvciBJREUgZW52aXJvbm1lbnQsIHVzaW5nIEN1cnNvciBhcyBBSSBwcm92aWRlcicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgYWlDb25maWcucHJvdmlkZXIgPSAnY3Vyc29yJztcbiAgICB9XG5cbiAgICBpZihhaUNvbmZpZy5wcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb21wdEZvckFJUHJvdmlkZXIocXVpZXQpO1xuXG4gICAgICBpZihwcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHNwaW5uZXIuZmFpbCgnQUkgZmVhdHVyZXMgc2tpcHBlZCcpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIGFpQ29uZmlnLnByb3ZpZGVyID0gcHJvdmlkZXI7XG5cbiAgICAgIGlmKHByb3ZpZGVyICE9PSAnY3Vyc29yJyAmJiBwcm92aWRlciAhPT0gJ2NvcGlsb3QnICYmXG4gICAgICAgICAhcHJvY2Vzcy5lbnZbYCR7cHJvdmlkZXIudG9VcHBlckNhc2UoKX1fQVBJX0tFWWBdKSB7XG4gICAgICAgIGFpQ29uZmlnLmFwaUtleSA9IGF3YWl0IHByb21wdEZvckFQSUtleShwcm92aWRlciwgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBMZXhDb25maWcuY29uZmlnLmFpID0gYWlDb25maWc7XG5cbiAgICAgIC8vIFNlYXJjaCBmb3IgY29uZmlnIGZpbGVzIGluIG11bHRpcGxlIGZvcm1hdHMgbGlrZSBMZXhDb25maWcucGFyc2VDb25maWcgZG9lc1xuICAgICAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gICAgICBjb25zdCBjb25maWdCYXNlTmFtZSA9ICdsZXguY29uZmlnJztcbiAgICAgIGxldCBjb25maWdQYXRoID0gJyc7XG5cbiAgICAgIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgICBjb25zdCBwb3RlbnRpYWxQYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCk7XG4gICAgICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgICAgICBjb25maWdQYXRoID0gcG90ZW50aWFsUGF0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb25maWdQYXRoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSBjb25maWdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgICAvYWk6Lio/Wyx9XS9zLFxuICAgICAgICAgICAgYGFpOiB7IHByb3ZpZGVyOiAnJHthaUNvbmZpZy5wcm92aWRlcn0nIH0sYFxuICAgICAgICAgICk7XG4gICAgICAgICAgd3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCB1cGRhdGVkQ29uZmlnKTtcbiAgICAgICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIHN3aXRjaChhaUNvbmZpZy5wcm92aWRlcikge1xuICAgICAgY2FzZSAnY3Vyc29yJzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbEN1cnNvckFJKHByb21wdCwgYWlDb25maWcpO1xuICAgICAgICBsb2coJ0N1cnNvciBJREUgQUkgaW50ZWdyYXRpb24gYWN0aXZlJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbE9wZW5BSUFJKHByb21wdCwgYWlDb25maWcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FudGhyb3BpYyc6XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNhbGxBbnRocm9waWNBSShwcm9tcHQsIGFpQ29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2FsbENvcGlsb3RBSShwcm9tcHQsIGFpQ29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzcGlubmVyLmZhaWwoJ05vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQnKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgY29kZSBmaXhlcyBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQUkgc2VydmljZSBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGVycm9yLCAnZXJyb3InKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsWUFBWSxjQUFjLHFCQUFvQjtBQUN0RCxTQUFRLFdBQVcsbUJBQWtCO0FBQ3JDLE9BQU8sY0FBYztBQUVyQixTQUFRLHFCQUFvQjtBQUM1QixTQUFRLFdBQVU7QUFDbEIsU0FBUSxpQkFBMEI7QUFHM0IsTUFBTSxlQUFlLE9BQU8sUUFBZ0IsWUFBdUM7QUFDeEYsTUFBSTtBQUdGLFFBQUksb0NBQW9DLE1BQU07QUFJOUMsUUFBSSxtQ0FBbUMsTUFBTTtBQUU3QyxVQUFNLFlBQVksT0FBTyxNQUFNLHFNQUFxTTtBQUNwTyxVQUFNLE9BQU8sWUFBWSxVQUFVLENBQUMsSUFBSTtBQUN4QyxVQUFNLGlCQUFpQixLQUFLLFdBQVcsZUFBZTtBQUV0RCxVQUFNLGdCQUFnQixPQUFPLE1BQU0sc09BQXNPO0FBQ3pRLFVBQU0sV0FBVyxnQkFBZ0IsY0FBYyxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBRTNELFFBQUcsU0FBUyxZ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
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { LexConfigType } from '../LexConfig.js';
|
|
2
|
+
export declare const cwd: string;
|
|
3
|
+
export interface GetFilenamesProps {
|
|
4
|
+
readonly callback?: (status: number) => void;
|
|
5
|
+
readonly cliName?: string;
|
|
6
|
+
readonly name?: string;
|
|
7
|
+
readonly quiet?: boolean;
|
|
8
|
+
readonly type?: string;
|
|
9
|
+
readonly useTypescript?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface FilenamesResult {
|
|
12
|
+
nameCaps: string;
|
|
13
|
+
templateExt: string;
|
|
14
|
+
templatePath: string;
|
|
15
|
+
templateReact: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const getFilenames: (props: GetFilenamesProps) => FilenamesResult | void;
|
|
18
|
+
export interface Spinner {
|
|
19
|
+
fail: (text?: string) => void;
|
|
20
|
+
start: (text?: string) => void;
|
|
21
|
+
succeed: (text?: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare const createSpinner: (quiet?: boolean) => Spinner;
|
|
24
|
+
export declare const copyFiles: (files: string[], typeName: string, spinner: any, config: LexConfigType) => Promise<void>;
|
|
25
|
+
export declare const copyConfiguredFiles: (spinner: any, config: LexConfigType, quiet: boolean) => Promise<void>;
|
|
26
|
+
export declare const copyFileSync: (source: string, target: string) => void;
|
|
27
|
+
export declare const copyFolderRecursiveSync: (source: string, target: string) => void;
|
|
28
|
+
export declare const getPackageJson: (packagePath?: string) => any;
|
|
29
|
+
export declare const getFilesByExt: (ext: string, config: LexConfigType) => string[];
|
|
30
|
+
export declare const removeConflictModules: (moduleList: object) => object;
|
|
31
|
+
export declare const removeFiles: (fileName: string, isRelative?: boolean) => Promise<unknown>;
|
|
32
|
+
export declare const removeModules: () => Promise<unknown>;
|
|
33
|
+
export declare const setPackageJson: (json: any, packagePath?: string) => void;
|
|
34
|
+
export interface LinkedModuleType {
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly path: string;
|
|
37
|
+
}
|
|
38
|
+
export declare const linkedModules: (startPath?: string) => LinkedModuleType[];
|
|
39
|
+
export declare const checkLinkedModules: () => void;
|
|
40
|
+
export declare const updateTemplateName: (filePath: string, replace: string, replaceCaps: string) => void;
|
|
41
|
+
export {};
|
package/dist/utils/app.js
CHANGED
|
@@ -80,6 +80,55 @@ const copyFiles = async (files, typeName, spinner, config) => {
|
|
|
80
80
|
log(error, "error");
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
|
+
const copyConfiguredFiles = async (spinner, config, quiet) => {
|
|
84
|
+
const { copyFiles: copyFilesConfig, outputFullPath, sourceFullPath, sourcePath } = config;
|
|
85
|
+
if (!copyFilesConfig || copyFilesConfig.length === 0) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
spinner.start("Copying configured files...");
|
|
90
|
+
let totalCopied = 0;
|
|
91
|
+
const baseDir = sourceFullPath || (sourcePath ? pathResolve(cwd, sourcePath) : cwd);
|
|
92
|
+
for (const pattern of copyFilesConfig) {
|
|
93
|
+
const resolvedPattern = pathResolve(baseDir, pattern);
|
|
94
|
+
const matchingFiles = globSync(resolvedPattern, {
|
|
95
|
+
nodir: true,
|
|
96
|
+
absolute: true
|
|
97
|
+
});
|
|
98
|
+
if (matchingFiles.length === 0) {
|
|
99
|
+
if (!quiet) {
|
|
100
|
+
log(`Warning: No files found matching pattern: ${pattern}`, "warn", quiet);
|
|
101
|
+
}
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
for (const sourceFile of matchingFiles) {
|
|
105
|
+
const relativePath = pathRelative(baseDir, sourceFile);
|
|
106
|
+
const destPath = pathResolve(outputFullPath, relativePath);
|
|
107
|
+
const destDir = pathResolve(destPath, "..");
|
|
108
|
+
mkdirSync(destDir, { recursive: true });
|
|
109
|
+
await new Promise((resolve, reject) => {
|
|
110
|
+
copyFile(sourceFile, destPath, (copyError) => {
|
|
111
|
+
if (copyError) {
|
|
112
|
+
reject(copyError);
|
|
113
|
+
} else {
|
|
114
|
+
resolve(true);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
totalCopied++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (totalCopied > 0) {
|
|
122
|
+
spinner.succeed(`Successfully copied ${totalCopied} configured files!`);
|
|
123
|
+
} else {
|
|
124
|
+
spinner.succeed("No configured files to copy");
|
|
125
|
+
}
|
|
126
|
+
} catch (error) {
|
|
127
|
+
spinner.fail("Failed to copy configured files");
|
|
128
|
+
log(`Error copying configured files: ${error.message}`, "error", quiet);
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
83
132
|
const copyFileSync = (source, target) => {
|
|
84
133
|
let targetFile = target;
|
|
85
134
|
if (existsSync(target)) {
|
|
@@ -199,6 +248,7 @@ const updateTemplateName = (filePath, replace, replaceCaps) => {
|
|
|
199
248
|
};
|
|
200
249
|
export {
|
|
201
250
|
checkLinkedModules,
|
|
251
|
+
copyConfiguredFiles,
|
|
202
252
|
copyFileSync,
|
|
203
253
|
copyFiles,
|
|
204
254
|
copyFolderRecursiveSync,
|
|
@@ -214,4 +264,4 @@ export {
|
|
|
214
264
|
setPackageJson,
|
|
215
265
|
updateTemplateName
|
|
216
266
|
};
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eS5qcyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge2Jhc2VuYW1lIGFzIHBhdGhCYXNlbmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7cmltcmFmU3luY30gZnJvbSAncmltcmFmJztcblxuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge0xleENvbmZpZ1R5cGV9IGZyb20gJy4uL0xleENvbmZpZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZpbGVuYW1lc1Jlc3VsdCB7XG4gIG5hbWVDYXBzOiBzdHJpbmc7XG4gIHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlbmFtZXMgPSAocHJvcHM6IEdldEZpbGVuYW1lc1Byb3BzKTogRmlsZW5hbWVzUmVzdWx0IHwgdm9pZCA9PiB7XG4gIGNvbnN0IHtjYWxsYmFjaywgY2xpTmFtZSwgbmFtZSwgcXVpZXQsIHR5cGUsIHVzZVR5cGVzY3JpcHR9ID0gcHJvcHM7XG5cbiAgLy8gU2V0IGZpbGVuYW1lXG4gIGxldCBuYW1lQ2Fwczogc3RyaW5nO1xuICBjb25zdCBpdGVtVHlwZXM6IHN0cmluZ1tdID0gWydzdG9yZXMnLCAndmlld3MnXTtcblxuICBpZighbmFtZSkge1xuICAgIGlmKGl0ZW1UeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke3R5cGV9IG5hbWUgaXMgcmVxdWlyZWQuIFBsZWFzZSB1c2UgJ2xleCAtaCcgZm9yIG9wdGlvbnMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrPy4oMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5hbWVDYXBzID0gYCR7bmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWA7XG4gIH1cblxuICAvLyBEaXNwbGF5IG1lc3NhZ2VcbiAgbG9nKGAke2NsaU5hbWV9IGFkZGluZyAke25hbWV9ICR7dHlwZX0uLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICAvLyBUZW1wbGF0ZSBkaXJlY3RvcnlcbiAgbGV0IHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICBsZXQgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy90eXBlc2NyaXB0JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcudHMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLnRzeCc7XG4gIH0gZWxzZSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy9mbG93JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcuanMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLmpzJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZUNhcHMsXG4gICAgdGVtcGxhdGVFeHQsXG4gICAgdGVtcGxhdGVQYXRoLFxuICAgIHRlbXBsYXRlUmVhY3RcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Bpbm5lciB7XG4gIGZhaWw6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuICBzdGFydDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN1Y2NlZWQ6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU3Bpbm5lciA9IChxdWlldCA9IGZhbHNlKTogU3Bpbm5lciA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZhaWw6ICgpID0+IHt9LFxuICAgICAgc3RhcnQ6ICgpID0+IHt9LFxuICAgICAgc3VjY2VlZDogKCkgPT4ge31cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG9yYSh7Y29sb3I6ICd5ZWxsb3cnfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVzID0gYXN5bmMgKGZpbGVzOiBzdHJpbmdbXSwgdHlwZU5hbWU6IHN0cmluZywgc3Bpbm5lciwgY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiB7XG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICBjb25zdCBpdGVtcyA9IGZpbGVzLm1hcCgoZmlsZU5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBmcm9tOiBmaWxlTmFtZSxcbiAgICB0bzogcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGgsIHBhdGhSZWxhdGl2ZShzb3VyY2VGdWxsUGF0aCwgZmlsZU5hbWUpKVxuICB9KSk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KGBDb3B5aW5nICR7dHlwZU5hbWV9IGZpbGVzLi4uYCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaXRlbXMubWFwKCh7ZnJvbSwgdG99KSA9PiBuZXcgUHJvbWlzZShcbiAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbWtkaXJTeW5jKHBhdGhSZXNvbHZlKHRvLCAnLi4nKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gY29weUZpbGUoZnJvbSwgdG8sIChjb3B5RXJyb3IpID0+IHtcbiAgICAgICAgICBpZihjb3B5RXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKSkpO1xuICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGNvcGllZCAke2ZpbGVzLmxlbmd0aH0gJHt0eXBlTmFtZX0gZmlsZXMhYCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoYENvcHlpbmcgb2YgJHt0eXBlTmFtZX0gZmlsZXMgZmFpbGVkLmApO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICBsb2coZXJyb3IsICdlcnJvcicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZykgPT4ge1xuICBsZXQgdGFyZ2V0RmlsZTogc3RyaW5nID0gdGFyZ2V0O1xuXG4gIC8vIElmIHRhcmdldCBpcyBhIGRpcmVjdG9yeSBhIG5ldyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSB3aWxsIGJlIGNyZWF0ZWRcbiAgaWYoZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgaWYobHN0YXRTeW5jKHRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGFyZ2V0RmlsZSA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZVN5bmModGFyZ2V0RmlsZSwgcmVhZEZpbGVTeW5jKHNvdXJjZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gQ2hlY2sgaWYgZm9sZGVyIG5lZWRzIHRvIGJlIGNyZWF0ZWQgb3IgaW50ZWdyYXRlZFxuICBjb25zdCB0YXJnZXRGb2xkZXI6IHN0cmluZyA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHRhcmdldEZvbGRlcikpIHtcbiAgICBta2RpclN5bmModGFyZ2V0Rm9sZGVyKTtcbiAgfVxuXG4gIC8vIENvcHlcbiAgaWYobHN0YXRTeW5jKHNvdXJjZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVzID0gcmVhZGRpclN5bmMoc291cmNlKTtcbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGN1clNvdXJjZTogc3RyaW5nID0gcGF0aEpvaW4oc291cmNlLCBmaWxlKTtcblxuICAgICAgaWYobHN0YXRTeW5jKGN1clNvdXJjZSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5RmlsZVN5bmMoY3VyU291cmNlLCB0YXJnZXRGb2xkZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGFja2FnZUpzb24gPSAocGFja2FnZVBhdGg/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZm9ybWF0UGF0aDogc3RyaW5nID0gcGFja2FnZVBhdGggfHwgYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYDtcblxuICAvLyBDb25maWd1cmUgcGFja2FnZS5qc29uXG4gIGNvbnN0IHBhY2thZ2VEYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZm9ybWF0UGF0aCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UocGFja2FnZURhdGEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlFeHQgPSAoZXh0OiBzdHJpbmcsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgcmV0dXJuIGdsb2JTeW5jKGAke3NvdXJjZUZ1bGxQYXRofS8qKi8qKiR7ZXh0fWApO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvbmZsaWN0TW9kdWxlcyA9IChtb2R1bGVMaXN0OiBvYmplY3QpID0+IHtcbiAgY29uc3QgdXBkYXRlZExpc3Q6IG9iamVjdCA9IHsuLi5tb2R1bGVMaXN0fTtcblxuICBPYmplY3Qua2V5cyh1cGRhdGVkTGlzdCkuZm9yRWFjaCgobW9kdWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oPyFAdHlwZXMvKS4qPyhqZXN0fHdlYnBhY2spLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG4gIHRyeSB7XG4gICAgcmltcmFmU3luYyhmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNb2R1bGVzID0gKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFJlbW92ZSBub2RlX21vZHVsZXNcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ub2RlX21vZHVsZXMnLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSB5YXJuIGxvY2tcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi95YXJuLmxvY2snLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSBucG0gbG9ja1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3BhY2thZ2UtbG9jay5qc29uJywgdHJ1ZSk7XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRQYWNrYWdlSnNvbiA9IChqc29uLCBwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBpZighanNvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG5cbiAgLy8gVXBkYXRlIHBhY2thZ2UuanNvblxuICB3cml0ZUZpbGVTeW5jKGZvcm1hdFBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkTW9kdWxlVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbGlua2VkTW9kdWxlcyA9IChzdGFydFBhdGg/OiBzdHJpbmcpOiBMaW5rZWRNb2R1bGVUeXBlW10gPT4ge1xuICBjb25zdCB3b3JraW5nUGF0aDogc3RyaW5nID0gc3RhcnRQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gIGxldCBtb2R1bGVQYXRoOiBzdHJpbmc7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcblxuICAvLyBpZiB3ZSBoYXZlIGEgc2NvcGUgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBtb2R1bGVzIGluc2lkZSB0aGUgZm9sZGVyIGlzIGxpbmtlZFxuICBpZih3b3JraW5nUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcHJlZml4ID0gYEAke3dvcmtpbmdQYXRoLnNwbGl0KCdAJykucG9wKCl9YDtcbiAgICBtb2R1bGVQYXRoID0gd29ya2luZ1BhdGg7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlUGF0aCA9IHBhdGhKb2luKHdvcmtpbmdQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gIH1cblxuICBjb25zdCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke21vZHVsZVBhdGh9LypgKTtcbiAgcmV0dXJuIGZvdW5kUGF0aHMucmVkdWNlKChsaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10sIGZvdW5kUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKGZvdW5kUGF0aCk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY29uc3QgZGVlcExpc3Q6IExpbmtlZE1vZHVsZVR5cGVbXSA9IGxpbmtlZE1vZHVsZXMoZm91bmRQYXRoKTtcbiAgICAgICAgbGlzdC5wdXNoKC4uLmRlZXBMaXN0KTtcbiAgICAgIH0gZWxzZSBpZihzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzOiBzdHJpbmdbXSA9IChbcHJlZml4LCBwYXRoQmFzZW5hbWUoZm91bmRQYXRoKV0pLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiAhaXNFbXB0eShpdGVtKSk7XG4gICAgICAgIGxpc3QucHVzaCh7bmFtZTogYCR7bW9kdWxlTmFtZXMuam9pbignLycpfWAsIHBhdGg6IGZvdW5kUGF0aH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9IGNhdGNoKGZzRXJyb3IpIHtcbiAgICAgIHRocm93IGZzRXJyb3I7XG4gICAgfVxuICB9LCBbXSk7XG59O1xuXG4vLyBDaGVjayBmb3IgbGlua2VkIG1vZHVsZXNcbmV4cG9ydCBjb25zdCBjaGVja0xpbmtlZE1vZHVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IGxpbmtlZCA9IGxpbmtlZE1vZHVsZXMoKTtcblxuICBpZihsaW5rZWQubGVuZ3RoKSB7XG4gICAgY29uc3QgbXNnTW9kdWxlOiBzdHJpbmcgPSBsaW5rZWQubGVuZ3RoID4gMSA/ICdNb2R1bGVzJyA6ICdNb2R1bGUnO1xuICAgIGNvbnN0IGxpbmtlZE1zZzogc3RyaW5nID0gbGlua2VkLnJlZHVjZShcbiAgICAgIChtc2c6IHN0cmluZywgbGlua2VkTW9kdWxlOiBMaW5rZWRNb2R1bGVUeXBlKSA9PlxuICAgICAgICBgJHttc2d9XFxuICogJHtsaW5rZWRNb2R1bGUubmFtZX1gLFxuICAgICAgYExpbmtlZCAke21zZ01vZHVsZX06YFxuICAgICk7XG4gICAgbG9nKGJveGVuKGxpbmtlZE1zZywge2RpbUJvcmRlcjogdHJ1ZSwgcGFkZGluZzogMX0pLCAnd2FybicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGVtcGxhdGVOYW1lID0gKGZpbGVQYXRoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZywgcmVwbGFjZUNhcHM6IHN0cmluZykgPT4ge1xuICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9zYW1wbGUvZywgcmVwbGFjZSk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1NhbXBsZS9nLCByZXBsYWNlQ2Fwcyk7XG4gIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGRhdGEsICd1dGY4Jyk7XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQU8sV0FBVztBQUNsQixTQUFRLFVBQVUsWUFBWSxXQUFXLFdBQVcsYUFBYSxjQUFjLHFCQUFvQjtBQUNuRyxTQUFRLGdCQUFlO0FBQ3ZCLE9BQU8sYUFBYTtBQUNwQixPQUFPLFNBQVM7QUFDaEIsU0FBUSxZQUFZLGNBQWMsUUFBUSxVQUFVLFlBQVksY0FBYyxXQUFXLG1CQUFrQjtBQUMzRyxTQUFRLGtCQUFpQjtBQUV6QixTQUFRLFdBQVU7QUFJWCxNQUFNLE1BQWMsUUFBUSxJQUFJO0FBa0JoQyxNQUFNLGVBQWUsQ0FBQyxVQUFxRDtBQUNoRixRQUFNLEVBQUMsVUFBVSxTQUFTLE1BQU0sT0FBTyxNQUFNLGNBQWEsSUFBSTtBQUc5RCxNQUFJO0FBQ0osUUFBTSxZQUFzQixDQUFDLFVBQVUsT0FBTztBQUU5QyxNQUFHLENBQUMsTUFBTTtBQUNSLFFBQUcsVUFBVSxTQUFTLElBQUksR0FBRztBQUMzQixVQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsSUFBSSx1REFBdUQsU0FBUyxLQUFLO0FBQ3BHLGFBQU8sV0FBVyxDQUFDO0FBQUEsSUFDckI7QUFBQSxFQUNGLE9BQU87QUFDTCxlQUFXLEdBQUcsS0FBSyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDN0Q7QUFHQSxNQUFJLEdBQUcsT0FBTyxXQUFXLElBQUksSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBR3pELE1BQUk7QUFDSixNQUFJO0FBQ0osTUFBSTtBQUVKLE1BQUcsZUFBZTtBQUNoQixtQkFBZTtBQUNmLGtCQUFjO0FBQ2Qsb0JBQWdCO0FBQUEsRUFDbEIsT0FBTztBQUNMLG1CQUFlO0FBQ2Ysa0JBQWM7QUFDZCxvQkFBZ0I7QUFBQSxFQUNsQjtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBUU8sTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLFVBQW1CO0FBQ3ZELE1BQUcsT0FBTztBQUNSLFdBQU87QUFBQSxNQUNMLE1BQU0sTUFBTTtBQUFBLE1BQUM7QUFBQSxNQUNiLE9BQU8sTUFBTTtBQUFBLE1BQUM7QUFBQSxNQUNkLFNBQVMsTUFBTTtBQUFBLE1BQUM7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLElBQUksRUFBQyxPQUFPLFNBQVEsQ0FBQztBQUM5QjtBQUVPLE1BQU0sWUFBWSxPQUFPLE9BQWlCLFVBQWtCLFNBQVMsV0FBMEI7QUFDcEcsUUFBTSxFQUFDLGdCQUFnQixlQUFjLElBQUk7QUFDekMsUUFBTSxRQUFRLE1BQU0sSUFBSSxDQUFDLGNBQXNCO0FBQUEsSUFDN0MsTUFBTTtBQUFBLElBQ04sSUFBSSxZQUFZLGdCQUFnQixhQUFhLGdCQUFnQixRQUFRLENBQUM7QUFBQSxFQUN4RSxFQUFFO0FBRUYsTUFBSTtBQUNGLFlBQVEsTUFBTSxXQUFXLFFBQVEsV0FBVztBQUM1QyxVQUFNLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFDLE1BQU0sR0FBRSxNQUFNLElBQUk7QUFBQSxNQUM5QyxDQUFDLFNBQVMsV0FBVztBQUNuQixrQkFBVSxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUMsV0FBVyxLQUFJLENBQUM7QUFDbEQsZUFBTyxTQUFTLE1BQU0sSUFBSSxDQUFDLGNBQWM7QUFDdkMsY0FBRyxXQUFXO0FBQ1osbUJBQU87QUFBQSxVQUNULE9BQU87QUFDTCxvQkFBUSxJQUFJO0FBQUEsVUFDZDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUNGLFlBQVEsUUFBUSx1QkFBdUIsTUFBTSxNQUFNLElBQUksUUFBUSxTQUFTO0FBQUEsRUFDMUUsU0FBUSxPQUFPO0FBRWIsWUFBUSxLQUFLLGNBQWMsUUFBUSxnQkFBZ0I7QUFDbkQsUUFBSSxVQUFVLE1BQU0sT0FBTyxJQUFJLE9BQU87QUFDdEMsUUFBSSxPQUFPLE9BQU87QUFBQSxFQUNwQjtBQUNGO0FBRU8sTUFBTSxlQUFlLENBQUMsUUFBZ0IsV0FBbUI7QUFDOUQsTUFBSSxhQUFxQjtBQUd6QixNQUFHLFdBQVcsTUFBTSxHQUFHO0FBQ3JCLFFBQUcsVUFBVSxNQUFNLEVBQUUsWUFBWSxHQUFHO0FBQ2xDLG1CQUFhLFNBQVMsUUFBUSxhQUFhLE1BQU0sQ0FBQztBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUVBLGdCQUFjLFlBQVksYUFBYSxNQUFNLENBQUM7QUFDaEQ7QUFFTyxNQUFNLDBCQUEwQixDQUFDLFFBQWdCLFdBQXlCO0FBQy9FLE1BQUksUUFBa0IsQ0FBQztBQUd2QixRQUFNLGVBQXVCLFNBQVMsUUFBUSxhQUFhLE1BQU0sQ0FBQztBQUVsRSxNQUFHLENBQUMsV0FBVyxZQUFZLEdBQUc7QUFDNUIsY0FBVSxZQUFZO0FBQUEsRUFDeEI7QUFHQSxNQUFHLFVBQVUsTUFBTSxFQUFFLFlBQVksR0FBRztBQUNsQyxZQUFRLFlBQVksTUFBTTtBQUMxQixVQUFNLFFBQVEsQ0FBQyxTQUFpQjtBQUM5QixZQUFNLFlBQW9CLFNBQVMsUUFBUSxJQUFJO0FBRS9DLFVBQUcsVUFBVSxTQUFTLEVBQUUsWUFBWSxHQUFHO0FBQ3JDLGdDQUF3QixXQUFXLFlBQVk7QUFBQSxNQUNqRCxPQUFPO0FBQ0wscUJBQWEsV0FBVyxZQUFZO0FBQUEsTUFDdEM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFFTyxNQUFNLGlCQUFpQixDQUFDLGdCQUF5QjtBQUN0RCxRQUFNLGFBQXFCLGVBQWUsR0FBRyxRQUFRLElBQUksQ0FBQztBQUcxRCxRQUFNLGNBQXNCLGFBQWEsVUFBVSxFQUFFLFNBQVM7QUFDOUQsU0FBTyxLQUFLLE1BQU0sV0FBVztBQUMvQjtBQUVPLE1BQU0sZ0JBQWdCLENBQUMsS0FBYSxXQUFvQztBQUM3RSxRQUFNLEVBQUMsZUFBYyxJQUFJO0FBQ3pCLFNBQU8sU0FBUyxHQUFHLGNBQWMsU0FBUyxHQUFHLEVBQUU7QUFDakQ7QUFFTyxNQUFNLHdCQUF3QixDQUFDLGVBQXVCO0FBQzNELFFBQU0sY0FBc0IsRUFBQyxHQUFHLFdBQVU7QUFFMUMsU0FBTyxLQUFLLFdBQVcsRUFBRSxRQUFRLENBQUMsZUFBdUI7QUFDdkQsVUFBTSxRQUFnQixJQUFJLE9BQU8sb0NBQW9DLElBQUk7QUFDekUsUUFBRyxNQUFNLEtBQUssVUFBVSxHQUFHO0FBQ3pCLGFBQU8sWUFBWSxVQUFVO0FBQUEsSUFDL0I7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPO0FBQ1Q7QUFFTyxNQUFNLGNBQWMsQ0FBQyxVQUFrQixhQUFzQixVQUFVLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUM3RyxRQUFNLFdBQW1CLGFBQWEsWUFBWSxLQUFLLFFBQVEsSUFBSTtBQUNuRSxNQUFJO0FBQ0YsZUFBVyxRQUFRO0FBQ25CLFdBQU8sUUFBUSxJQUFJO0FBQUEsRUFDckIsU0FBUSxPQUFPO0FBQ2IsV0FBTyxPQUFPLEtBQUs7QUFBQSxFQUNyQjtBQUNGLENBQUM7QUFFTSxNQUFNLGdCQUFnQixNQUFNLElBQUksUUFBUSxPQUFPLFNBQVMsV0FBVztBQUN4RSxNQUFJO0FBRUYsVUFBTSxZQUFZLGtCQUFrQixJQUFJO0FBR3hDLFVBQU0sWUFBWSxlQUFlLElBQUk7QUFHckMsVUFBTSxZQUFZLHVCQUF1QixJQUFJO0FBRTdDLFlBQVEsSUFBSTtBQUFBLEVBQ2QsU0FBUSxPQUFPO0FBQ2IsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUNGLENBQUM7QUFFTSxNQUFNLGlCQUFpQixDQUFDLE1BQU0sZ0JBQXlCO0FBQzVELE1BQUcsQ0FBQyxNQUFNO0FBQ1I7QUFBQSxFQUNGO0FBRUEsUUFBTSxhQUFxQixlQUFlLEdBQUcsUUFBUSxJQUFJLENBQUM7QUFHMUQsZ0JBQWMsWUFBWSxLQUFLLFVBQVUsTUFBTSxNQUFNLENBQUMsQ0FBQztBQUN6RDtBQU9PLE1BQU0sZ0JBQWdCLENBQUMsY0FBMkM7QUFDdkUsUUFBTSxjQUFzQixhQUFhLFFBQVEsSUFBSTtBQUNyRCxNQUFJO0FBQ0osTUFBSTtBQUdKLE1BQUcsWUFBWSxTQUFTLEdBQUcsR0FBRztBQUM1QixhQUFTLElBQUksWUFBWSxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDekMsaUJBQWE7QUFBQSxFQUNmLE9BQU87QUFDTCxpQkFBYSxTQUFTLGFBQWEsY0FBYztBQUFBLEVBQ25EO0FBRUEsUUFBTSxhQUF1QixTQUFTLEdBQUcsVUFBVSxJQUFJO0FBQ3ZELFNBQU8sV0FBVyxPQUFPLENBQUMsTUFBMEIsY0FBc0I7QUFDeEUsUUFBSTtBQUNGLFlBQU0sUUFBUSxVQUFVLFNBQVM7QUFFakMsVUFBRyxNQUFNLFlBQVksR0FBRztBQUN0QixjQUFNLFdBQStCLGNBQWMsU0FBUztBQUM1RCxhQUFLLEtBQUssR0FBRyxRQUFRO0FBQUEsTUFDdkIsV0FBVSxNQUFNLGVBQWUsR0FBRztBQUNoQyxjQUFNLGNBQXlCLENBQUMsUUFBUSxhQUFhLFNBQVMsQ0FBQyxFQUFHLE9BQU8sQ0FBQyxTQUFpQixDQUFDLFFBQVEsSUFBSSxDQUFDO0FBQ3pHLGFBQUssS0FBSyxFQUFDLE1BQU0sR0FBRyxZQUFZLEtBQUssR0FBRyxDQUFDLElBQUksTUFBTSxVQUFTLENBQUM7QUFBQSxNQUMvRDtBQUVBLGFBQU87QUFBQSxJQUNULFNBQVEsU0FBUztBQUNmLFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRixHQUFHLENBQUMsQ0FBQztBQUNQO0FBR08sTUFBTSxxQkFBcUIsTUFBTTtBQUN0QyxRQUFNLFNBQVMsY0FBYztBQUU3QixNQUFHLE9BQU8sUUFBUTtBQUNoQixVQUFNLFlBQW9CLE9BQU8sU0FBUyxJQUFJLFlBQVk7QUFDMUQsVUFBTSxZQUFvQixPQUFPO0FBQUEsTUFDL0IsQ0FBQyxLQUFhLGlCQUNaLEdBQUcsR0FBRztBQUFBLEtBQVEsYUFBYSxJQUFJO0FBQUEsTUFDakMsVUFBVSxTQUFTO0FBQUEsSUFDckI7QUFDQSxRQUFJLE1BQU0sV0FBVyxFQUFDLFdBQVcsTUFBTSxTQUFTLEVBQUMsQ0FBQyxHQUFHLE1BQU07QUFBQSxFQUM3RDtBQUNGO0FBRU8sTUFBTSxxQkFBcUIsQ0FBQyxVQUFrQixTQUFpQixnQkFBd0I7QUFDNUYsTUFBSSxPQUFlLGFBQWEsVUFBVSxNQUFNO0FBQ2hELFNBQU8sS0FBSyxRQUFRLFdBQVcsT0FBTztBQUN0QyxTQUFPLEtBQUssUUFBUSxXQUFXLFdBQVc7QUFDMUMsZ0JBQWMsVUFBVSxNQUFNLE1BQU07QUFDdEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQge2NvcHlGaWxlLCBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eS5qcyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge2Jhc2VuYW1lIGFzIHBhdGhCYXNlbmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7cmltcmFmU3luY30gZnJvbSAncmltcmFmJztcblxuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge0xleENvbmZpZ1R5cGV9IGZyb20gJy4uL0xleENvbmZpZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RmlsZW5hbWVzUHJvcHMge1xuICByZWFkb25seSBjYWxsYmFjaz86IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZpbGVuYW1lc1Jlc3VsdCB7XG4gIG5hbWVDYXBzOiBzdHJpbmc7XG4gIHRlbXBsYXRlRXh0OiBzdHJpbmc7XG4gIHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlYWN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlbmFtZXMgPSAocHJvcHM6IEdldEZpbGVuYW1lc1Byb3BzKTogRmlsZW5hbWVzUmVzdWx0IHwgdm9pZCA9PiB7XG4gIGNvbnN0IHtjYWxsYmFjaywgY2xpTmFtZSwgbmFtZSwgcXVpZXQsIHR5cGUsIHVzZVR5cGVzY3JpcHR9ID0gcHJvcHM7XG5cbiAgbGV0IG5hbWVDYXBzOiBzdHJpbmc7XG4gIGNvbnN0IGl0ZW1UeXBlczogc3RyaW5nW10gPSBbJ3N0b3JlcycsICd2aWV3cyddO1xuXG4gIGlmKCFuYW1lKSB7XG4gICAgaWYoaXRlbVR5cGVzLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7dHlwZX0gbmFtZSBpcyByZXF1aXJlZC4gUGxlYXNlIHVzZSAnbGV4IC1oJyBmb3Igb3B0aW9ucy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2s/LigxKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmFtZUNhcHMgPSBgJHtuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7bmFtZS5zdWJzdHIoMSl9YDtcbiAgfVxuXG4gIGxvZyhgJHtjbGlOYW1lfSBhZGRpbmcgJHtuYW1lfSAke3R5cGV9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgbGV0IHRlbXBsYXRlUGF0aDogc3RyaW5nO1xuICBsZXQgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgbGV0IHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy90eXBlc2NyaXB0JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcudHMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLnRzeCc7XG4gIH0gZWxzZSB7XG4gICAgdGVtcGxhdGVQYXRoID0gJy4uLy4uL3RlbXBsYXRlcy9mbG93JztcbiAgICB0ZW1wbGF0ZUV4dCA9ICcuanMnO1xuICAgIHRlbXBsYXRlUmVhY3QgPSAnLmpzJztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZUNhcHMsXG4gICAgdGVtcGxhdGVFeHQsXG4gICAgdGVtcGxhdGVQYXRoLFxuICAgIHRlbXBsYXRlUmVhY3RcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Bpbm5lciB7XG4gIGZhaWw6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuICBzdGFydDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN1Y2NlZWQ6ICh0ZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU3Bpbm5lciA9IChxdWlldCA9IGZhbHNlKTogU3Bpbm5lciA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZhaWw6ICgpID0+IHt9LFxuICAgICAgc3RhcnQ6ICgpID0+IHt9LFxuICAgICAgc3VjY2VlZDogKCkgPT4ge31cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG9yYSh7Y29sb3I6ICd5ZWxsb3cnfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weUZpbGVzID0gYXN5bmMgKGZpbGVzOiBzdHJpbmdbXSwgdHlwZU5hbWU6IHN0cmluZywgc3Bpbm5lciwgY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiB7XG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGh9ID0gY29uZmlnO1xuICBjb25zdCBpdGVtcyA9IGZpbGVzLm1hcCgoZmlsZU5hbWU6IHN0cmluZykgPT4gKHtcbiAgICBmcm9tOiBmaWxlTmFtZSxcbiAgICB0bzogcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGgsIHBhdGhSZWxhdGl2ZShzb3VyY2VGdWxsUGF0aCwgZmlsZU5hbWUpKVxuICB9KSk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KGBDb3B5aW5nICR7dHlwZU5hbWV9IGZpbGVzLi4uYCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaXRlbXMubWFwKCh7ZnJvbSwgdG99KSA9PiBuZXcgUHJvbWlzZShcbiAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbWtkaXJTeW5jKHBhdGhSZXNvbHZlKHRvLCAnLi4nKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gY29weUZpbGUoZnJvbSwgdG8sIChjb3B5RXJyb3IpID0+IHtcbiAgICAgICAgICBpZihjb3B5RXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKSkpO1xuICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGNvcGllZCAke2ZpbGVzLmxlbmd0aH0gJHt0eXBlTmFtZX0gZmlsZXMhYCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoYENvcHlpbmcgb2YgJHt0eXBlTmFtZX0gZmlsZXMgZmFpbGVkLmApO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICBsb2coZXJyb3IsICdlcnJvcicpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29weUNvbmZpZ3VyZWRGaWxlcyA9IGFzeW5jIChzcGlubmVyLCBjb25maWc6IExleENvbmZpZ1R5cGUsIHF1aWV0OiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IHtjb3B5RmlsZXM6IGNvcHlGaWxlc0NvbmZpZywgb3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRoLCBzb3VyY2VQYXRofSA9IGNvbmZpZztcbiAgaWYgKCFjb3B5RmlsZXNDb25maWcgfHwgY29weUZpbGVzQ29uZmlnLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQ29weWluZyBjb25maWd1cmVkIGZpbGVzLi4uJyk7XG4gICAgbGV0IHRvdGFsQ29waWVkID0gMDtcblxuICAgIGNvbnN0IGJhc2VEaXIgPSBzb3VyY2VGdWxsUGF0aCB8fCAoc291cmNlUGF0aCA/IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCkgOiBjd2QpO1xuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGNvcHlGaWxlc0NvbmZpZykge1xuICAgICAgY29uc3QgcmVzb2x2ZWRQYXR0ZXJuID0gcGF0aFJlc29sdmUoYmFzZURpciwgcGF0dGVybik7XG4gICAgICBjb25zdCBtYXRjaGluZ0ZpbGVzID0gZ2xvYlN5bmMocmVzb2x2ZWRQYXR0ZXJuLCB7XG4gICAgICAgIG5vZGlyOiB0cnVlLFxuICAgICAgICBhYnNvbHV0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAobWF0Y2hpbmdGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKCFxdWlldCkge1xuICAgICAgICAgIGxvZyhgV2FybmluZzogTm8gZmlsZXMgZm91bmQgbWF0Y2hpbmcgcGF0dGVybjogJHtwYXR0ZXJufWAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgbWF0Y2hpbmdGaWxlcykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHNvdXJjZSBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aFJlbGF0aXZlKGJhc2VEaXIsIHNvdXJjZUZpbGUpO1xuICAgICAgICAvLyBEZXRlcm1pbmUgZGVzdGluYXRpb24gcGF0aCBpbiBvdXRwdXQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIC8vIENyZWF0ZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aFJlc29sdmUoZGVzdFBhdGgsICcuLicpO1xuICAgICAgICBta2RpclN5bmMoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb3B5RmlsZShzb3VyY2VGaWxlLCBkZXN0UGF0aCwgKGNvcHlFcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoY29weUVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0b3RhbENvcGllZCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodG90YWxDb3BpZWQgPiAwKSB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBjb3BpZWQgJHt0b3RhbENvcGllZH0gY29uZmlndXJlZCBmaWxlcyFgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBjb25maWd1cmVkIGZpbGVzIHRvIGNvcHknKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzJyk7XG4gICAgbG9nKGBFcnJvciBjb3B5aW5nIGNvbmZpZ3VyZWQgZmlsZXM6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKSA9PiB7XG4gIGxldCB0YXJnZXRGaWxlOiBzdHJpbmcgPSB0YXJnZXQ7XG5cbiAgaWYoZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgaWYobHN0YXRTeW5jKHRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGFyZ2V0RmlsZSA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZVN5bmModGFyZ2V0RmlsZSwgcmVhZEZpbGVTeW5jKHNvdXJjZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgdGFyZ2V0Rm9sZGVyOiBzdHJpbmcgPSBwYXRoSm9pbih0YXJnZXQsIHBhdGhCYXNlbmFtZShzb3VyY2UpKTtcblxuICBpZighZXhpc3RzU3luYyh0YXJnZXRGb2xkZXIpKSB7XG4gICAgbWtkaXJTeW5jKHRhcmdldEZvbGRlcik7XG4gIH1cblxuICBpZihsc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZXMgPSByZWFkZGlyU3luYyhzb3VyY2UpO1xuICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgY3VyU291cmNlOiBzdHJpbmcgPSBwYXRoSm9pbihzb3VyY2UsIGZpbGUpO1xuXG4gICAgICBpZihsc3RhdFN5bmMoY3VyU291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlGaWxlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlSnNvbiA9IChwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBjb25zdCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBwYWNrYWdlUGF0aCB8fCBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuXG4gIGNvbnN0IHBhY2thZ2VEYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZm9ybWF0UGF0aCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UocGFja2FnZURhdGEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlFeHQgPSAoZXh0OiBzdHJpbmcsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgcmV0dXJuIGdsb2JTeW5jKGAke3NvdXJjZUZ1bGxQYXRofS8qKi8qKiR7ZXh0fWApO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvbmZsaWN0TW9kdWxlcyA9IChtb2R1bGVMaXN0OiBvYmplY3QpID0+IHtcbiAgY29uc3QgdXBkYXRlZExpc3Q6IG9iamVjdCA9IHsuLi5tb2R1bGVMaXN0fTtcblxuICBPYmplY3Qua2V5cyh1cGRhdGVkTGlzdCkuZm9yRWFjaCgobW9kdWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oPyFAdHlwZXMvKS4qPyhqZXN0fHdlYnBhY2spLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG4gIHRyeSB7XG4gICAgcmltcmFmU3luYyhmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNb2R1bGVzID0gKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFJlbW92ZSBub2RlX21vZHVsZXNcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ub2RlX21vZHVsZXMnLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSB5YXJuIGxvY2tcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi95YXJuLmxvY2snLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSBucG0gbG9ja1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3BhY2thZ2UtbG9jay5qc29uJywgdHJ1ZSk7XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRQYWNrYWdlSnNvbiA9IChqc29uLCBwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBpZighanNvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG5cbiAgd3JpdGVGaWxlU3luYyhmb3JtYXRQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZE1vZHVsZVR5cGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmtlZE1vZHVsZXMgPSAoc3RhcnRQYXRoPzogc3RyaW5nKTogTGlua2VkTW9kdWxlVHlwZVtdID0+IHtcbiAgY29uc3Qgd29ya2luZ1BhdGg6IHN0cmluZyA9IHN0YXJ0UGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICBsZXQgbW9kdWxlUGF0aDogc3RyaW5nO1xuICBsZXQgcHJlZml4OiBzdHJpbmc7XG5cbiAgaWYod29ya2luZ1BhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgIHByZWZpeCA9IGBAJHt3b3JraW5nUGF0aC5zcGxpdCgnQCcpLnBvcCgpfWA7XG4gICAgbW9kdWxlUGF0aCA9IHdvcmtpbmdQYXRoO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZVBhdGggPSBwYXRoSm9pbih3b3JraW5nUGF0aCwgJ25vZGVfbW9kdWxlcycpO1xuICB9XG5cbiAgY29uc3QgZm91bmRQYXRoczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHttb2R1bGVQYXRofS8qYCk7XG4gIHJldHVybiBmb3VuZFBhdGhzLnJlZHVjZSgobGlzdDogTGlua2VkTW9kdWxlVHlwZVtdLCBmb3VuZFBhdGg6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGxzdGF0U3luYyhmb3VuZFBhdGgpO1xuXG4gICAgICBpZihzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvbnN0IGRlZXBMaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10gPSBsaW5rZWRNb2R1bGVzKGZvdW5kUGF0aCk7XG4gICAgICAgIGxpc3QucHVzaCguLi5kZWVwTGlzdCk7XG4gICAgICB9IGVsc2UgaWYoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICBjb25zdCBtb2R1bGVOYW1lczogc3RyaW5nW10gPSAoW3ByZWZpeCwgcGF0aEJhc2VuYW1lKGZvdW5kUGF0aCldKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gIWlzRW1wdHkoaXRlbSkpO1xuICAgICAgICBsaXN0LnB1c2goe25hbWU6IGAke21vZHVsZU5hbWVzLmpvaW4oJy8nKX1gLCBwYXRoOiBmb3VuZFBhdGh9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfSBjYXRjaChmc0Vycm9yKSB7XG4gICAgICB0aHJvdyBmc0Vycm9yO1xuICAgIH1cbiAgfSwgW10pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrTGlua2VkTW9kdWxlcyA9ICgpID0+IHtcbiAgY29uc3QgbGlua2VkID0gbGlua2VkTW9kdWxlcygpO1xuXG4gIGlmKGxpbmtlZC5sZW5ndGgpIHtcbiAgICBjb25zdCBtc2dNb2R1bGU6IHN0cmluZyA9IGxpbmtlZC5sZW5ndGggPiAxID8gJ01vZHVsZXMnIDogJ01vZHVsZSc7XG4gICAgY29uc3QgbGlua2VkTXNnOiBzdHJpbmcgPSBsaW5rZWQucmVkdWNlKFxuICAgICAgKG1zZzogc3RyaW5nLCBsaW5rZWRNb2R1bGU6IExpbmtlZE1vZHVsZVR5cGUpID0+XG4gICAgICAgIGAke21zZ31cXG4gKiAke2xpbmtlZE1vZHVsZS5uYW1lfWAsXG4gICAgICBgTGlua2VkICR7bXNnTW9kdWxlfTpgXG4gICAgKTtcbiAgICBsb2coYm94ZW4obGlua2VkTXNnLCB7ZGltQm9yZGVyOiB0cnVlLCBwYWRkaW5nOiAxfSksICd3YXJuJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUZW1wbGF0ZU5hbWUgPSAoZmlsZVBhdGg6IHN0cmluZywgcmVwbGFjZTogc3RyaW5nLCByZXBsYWNlQ2Fwczogc3RyaW5nKSA9PiB7XG4gIGxldCBkYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL3NhbXBsZS9nLCByZXBsYWNlKTtcbiAgZGF0YSA9IGRhdGEucmVwbGFjZSgvU2FtcGxlL2csIHJlcGxhY2VDYXBzKTtcbiAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZGF0YSwgJ3V0ZjgnKTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBTyxXQUFXO0FBQ2xCLFNBQVEsVUFBVSxZQUFZLFdBQVcsV0FBVyxhQUFhLGNBQWMscUJBQW9CO0FBQ25HLFNBQVEsZ0JBQWU7QUFDdkIsT0FBTyxhQUFhO0FBQ3BCLE9BQU8sU0FBUztBQUNoQixTQUFRLFlBQVksY0FBYyxRQUFRLFVBQVUsWUFBWSxjQUFjLFdBQVcsbUJBQWtCO0FBQzNHLFNBQVEsa0JBQWlCO0FBRXpCLFNBQVEsV0FBVTtBQUlYLE1BQU0sTUFBYyxRQUFRLElBQUk7QUFrQmhDLE1BQU0sZUFBZSxDQUFDLFVBQXFEO0FBQ2hGLFFBQU0sRUFBQyxVQUFVLFNBQVMsTUFBTSxPQUFPLE1BQU0sY0FBYSxJQUFJO0FBRTlELE1BQUk7QUFDSixRQUFNLFlBQXNCLENBQUMsVUFBVSxPQUFPO0FBRTlDLE1BQUcsQ0FBQyxNQUFNO0FBQ1IsUUFBRyxVQUFVLFNBQVMsSUFBSSxHQUFHO0FBQzNCLFVBQUk7QUFBQSxFQUFLLE9BQU8sV0FBVyxJQUFJLHVEQUF1RCxTQUFTLEtBQUs7QUFDcEcsYUFBTyxXQUFXLENBQUM7QUFBQSxJQUNyQjtBQUFBLEVBQ0YsT0FBTztBQUNMLGVBQVcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUM7QUFBQSxFQUM3RDtBQUVBLE1BQUksR0FBRyxPQUFPLFdBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUs7QUFFekQsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJO0FBRUosTUFBRyxlQUFlO0FBQ2hCLG1CQUFlO0FBQ2Ysa0JBQWM7QUFDZCxvQkFBZ0I7QUFBQSxFQUNsQixPQUFPO0FBQ0wsbUJBQWU7QUFDZixrQkFBYztBQUNk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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const relativeFilePath: (filename: string, dirPath?: string, backUp?: number) => string;
|
|
2
|
+
export declare const relativeNodePath: (filename: string, dirPath?: string, backUp?: number) => string;
|
|
3
|
+
export declare const getNodePath: (moduleName: string) => string;
|
package/dist/utils/file.js
CHANGED
|
@@ -13,16 +13,31 @@ const relativeFilePath = (filename, dirPath = "./", backUp = 0) => {
|
|
|
13
13
|
};
|
|
14
14
|
const relativeNodePath = (filename, dirPath = "./", backUp = 0) => {
|
|
15
15
|
const nestDepth = 10;
|
|
16
|
+
const modulePath = `node_modules/${filename}`;
|
|
17
|
+
if (dirPath !== "./") {
|
|
18
|
+
const lexModulePath = pathResolve(dirPath, modulePath);
|
|
19
|
+
if (existsSync(lexModulePath)) {
|
|
20
|
+
return lexModulePath;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const projectPath = pathResolve(process.cwd(), modulePath);
|
|
24
|
+
if (existsSync(projectPath)) {
|
|
25
|
+
return projectPath;
|
|
26
|
+
}
|
|
16
27
|
if (backUp) {
|
|
17
|
-
const filePath = findFileUp.sync(
|
|
28
|
+
const filePath = findFileUp.sync(modulePath, dirPath, nestDepth);
|
|
18
29
|
const previousPath = Array(nestDepth).fill(null).map(() => "../").join("");
|
|
19
30
|
return pathResolve(filePath, previousPath);
|
|
20
31
|
}
|
|
21
|
-
return findFileUp.sync(
|
|
32
|
+
return findFileUp.sync(modulePath, dirPath, nestDepth) || `/node_modules/${filename}`;
|
|
22
33
|
};
|
|
23
34
|
const getNodePath = (moduleName) => {
|
|
24
35
|
const dirName = new URL(".", import.meta.url).pathname;
|
|
25
36
|
const modulePath = `node_modules/${moduleName}`;
|
|
37
|
+
const projectPath = pathResolve(process.cwd(), modulePath);
|
|
38
|
+
if (existsSync(projectPath)) {
|
|
39
|
+
return projectPath;
|
|
40
|
+
}
|
|
26
41
|
const repoPath = findFileUp.sync(modulePath, dirName);
|
|
27
42
|
if (repoPath && existsSync(repoPath)) {
|
|
28
43
|
return repoPath;
|
|
@@ -35,4 +50,4 @@ export {
|
|
|
35
50
|
relativeFilePath,
|
|
36
51
|
relativeNodePath
|
|
37
52
|
};
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2ZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbi8vIEdldCBmaWxlIHBhdGhzIHJlbGF0aXZlIHRvIExleFxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2ZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbi8vIEdldCBmaWxlIHBhdGhzIHJlbGF0aXZlIHRvIExleFxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xuICAgIGNvbnN0IHByZXZpb3VzUGF0aDogc3RyaW5nID0gQXJyYXkoYmFja1VwKS5maWxsKG51bGwpLm1hcCgoKSA9PiAnLi4vJykuam9pbignJyk7XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKGZpbGVQYXRoLCBwcmV2aW91c1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRGaWxlVXAuc3luYyhmaWxlbmFtZSwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWxhdGl2ZU5vZGVQYXRoID0gKGZpbGVuYW1lOiBzdHJpbmcsIGRpclBhdGg6IHN0cmluZyA9ICcuLycsIGJhY2tVcDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG5lc3REZXB0aDogbnVtYmVyID0gMTA7XG4gIGNvbnN0IG1vZHVsZVBhdGggPSBgbm9kZV9tb2R1bGVzLyR7ZmlsZW5hbWV9YDtcblxuICAvLyBGaXJzdCwgY2hlY2sgdGhlIExleCBwYWNrYWdlJ3Mgbm9kZV9tb2R1bGVzIGRpcmVjdG9yeVxuICBpZihkaXJQYXRoICE9PSAnLi8nKSB7XG4gICAgY29uc3QgbGV4TW9kdWxlUGF0aCA9IHBhdGhSZXNvbHZlKGRpclBhdGgsIG1vZHVsZVBhdGgpO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4TW9kdWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiBsZXhNb2R1bGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlY29uZCwgY2hlY2sgdGhlIHVzZXIncyBwcm9qZWN0IG5vZGVfbW9kdWxlcyBkaXJlY3RvcnlcbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICAvLyBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBhcyBmYWxsYmFja1xuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShuZXN0RGVwdGgpLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCkgfHwgYC9ub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xufTtcblxuLy8gR2V0IGZpbGUgcGF0aHMgcmVsYXRpdmUgdG8gTGV4XG5leHBvcnQgY29uc3QgZ2V0Tm9kZVBhdGggPSAobW9kdWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGlyTmFtZSA9IG5ldyBVUkwoJy4nLCBpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lO1xuICBjb25zdCBtb2R1bGVQYXRoOiBzdHJpbmcgPSBgbm9kZV9tb2R1bGVzLyR7bW9kdWxlTmFtZX1gO1xuXG4gIC8vIFRyeSBwcm9qZWN0IHJvb3QgZmlyc3RcbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICAvLyBUaGVuIHRyeSBtb2R1bGUgbG9jYWwgdG8gTGV4XG4gIGNvbnN0IHJlcG9QYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgZGlyTmFtZSk7XG4gIGlmKHJlcG9QYXRoICYmIGV4aXN0c1N5bmMocmVwb1BhdGgpKSB7XG4gICAgcmV0dXJuIHJlcG9QYXRoO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gZ2VuZXJhbCBzZWFyY2hcbiAgY29uc3QgbG9jYWxQYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgJy4vJywgMTApIHx8IGAuLyR7bW9kdWxlUGF0aH1gO1xuICByZXR1cm4gbG9jYWxQYXRoO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFPLGdCQUFnQjtBQUN2QixTQUFRLGtCQUFpQjtBQUN6QixTQUFRLFdBQVcsbUJBQWtCO0FBQ3JDLFNBQVEsV0FBVTtBQUdYLE1BQU0sbUJBQW1CLENBQUMsVUFBa0IsVUFBa0IsTUFBTSxTQUFpQixNQUFjO0FBQ3hHLFFBQU0sWUFBb0I7QUFFMUIsTUFBRyxRQUFRO0FBQ1QsVUFBTSxXQUFtQixXQUFXLEtBQUssVUFBVSxTQUFTLFNBQVM7QUFDckUsVUFBTSxlQUF1QixNQUFNLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFBRTtBQUM5RSxXQUFPLFlBQVksVUFBVSxZQUFZO0FBQUEsRUFDM0M7QUFFQSxTQUFPLFdBQVcsS0FBSyxVQUFVLFNBQVMsU0FBUztBQUNyRDtBQUVPLE1BQU0sbUJBQW1CLENBQUMsVUFBa0IsVUFBa0IsTUFBTSxTQUFpQixNQUFjO0FBQ3hHLFFBQU0sWUFBb0I7QUFDMUIsUUFBTSxhQUFhLGdCQUFnQixRQUFRO0FBRzNDLE1BQUcsWUFBWSxNQUFNO0FBQ25CLFVBQU0sZ0JBQWdCLFlBQVksU0FBUyxVQUFVO0FBQ3JELFFBQUcsV0FBVyxhQUFhLEdBQUc7QUFDNUIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBR0EsUUFBTSxjQUFjLFlBQVksUUFBUSxJQUFJLEdBQUcsVUFBVTtBQUN6RCxNQUFHLFdBQVcsV0FBVyxHQUFHO0FBQzFCLFdBQU87QUFBQSxFQUNUO0FBR0EsTUFBRyxRQUFRO0FBQ1QsVUFBTSxXQUFtQixXQUFXLEtBQUssWUFBWSxTQUFTLFNBQVM7QUFDdkUsVUFBTSxlQUF1QixNQUFNLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFBRTtBQUNqRixXQUFPLFlBQVksVUFBVSxZQUFZO0FBQUEsRUFDM0M7QUFFQSxTQUFPLFdBQVcsS0FBSyxZQUFZLFNBQVMsU0FBUyxLQUFLLGlCQUFpQixRQUFRO0FBQ3JGO0FBR08sTUFBTSxjQUFjLENBQUMsZUFBK0I7QUFDekQsUUFBTSxVQUFVLElBQUksSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFO0FBQzlDLFFBQU0sYUFBcUIsZ0JBQWdCLFVBQVU7QUFHckQsUUFBTSxjQUFjLFlBQVksUUFBUSxJQUFJLEdBQUcsVUFBVTtBQUN6RCxNQUFHLFdBQVcsV0FBVyxHQUFHO0FBQzFCLFdBQU87QUFBQSxFQUNUO0FBR0EsUUFBTSxXQUFtQixXQUFXLEtBQUssWUFBWSxPQUFPO0FBQzVELE1BQUcsWUFBWSxXQUFXLFFBQVEsR0FBRztBQUNuQyxXQUFPO0FBQUEsRUFDVDtBQUdBLFFBQU0sWUFBb0IsV0FBVyxLQUFLLFlBQVksTUFBTSxFQUFFLEtBQUssS0FBSyxVQUFVO0FBQ2xGLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const log: (message: string, type?: string, quiet?: boolean) => void;
|
package/eslint.config.js
CHANGED
package/jest.config.lex.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import {existsSync} from 'fs';
|
|
2
|
+
import {resolve as pathResolve} from 'path';
|
|
3
|
+
import {URL} from 'url';
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {getNodePath} from './dist/utils/file.js';
|
|
6
6
|
|
|
7
7
|
const rootDir = process.cwd();
|
|
8
8
|
const { jest, sourceFullPath, targetEnvironment, useTypescript } = JSON.parse(
|
|
@@ -11,18 +11,12 @@ const { jest, sourceFullPath, targetEnvironment, useTypescript } = JSON.parse(
|
|
|
11
11
|
|
|
12
12
|
const dirName = new URL('.', import.meta.url).pathname;
|
|
13
13
|
const nodePath = pathResolve(dirName, './node_modules');
|
|
14
|
-
|
|
15
|
-
// Check if setup files exist
|
|
16
14
|
const lexSetupFile = pathResolve(dirName, './jest.setup.js');
|
|
17
15
|
const projectSetupFile = pathResolve(rootDir, './jest.setup.js');
|
|
18
16
|
const setupFilesAfterEnv = [];
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
if(existsSync(lexSetupFile)) {
|
|
22
|
-
setupFilesAfterEnv.push(lexSetupFile);
|
|
23
|
-
}
|
|
18
|
+
setupFilesAfterEnv.push(lexSetupFile);
|
|
24
19
|
|
|
25
|
-
// Add project's setup file if it exists
|
|
26
20
|
if(existsSync(projectSetupFile)) {
|
|
27
21
|
setupFilesAfterEnv.push(projectSetupFile);
|
|
28
22
|
}
|
|
@@ -37,17 +31,16 @@ if(targetEnvironment === 'web') {
|
|
|
37
31
|
};
|
|
38
32
|
}
|
|
39
33
|
|
|
40
|
-
let moduleFileExtensions = ['js', 'json'];
|
|
41
|
-
let testRegex = '(/__tests__/.*|\\.(test|spec))\\.(js)?$';
|
|
34
|
+
let moduleFileExtensions = ['js', 'json', 'cjs', 'mjs'];
|
|
35
|
+
let testRegex = '(/__tests__/.*|\\.(test|spec|integration))\\.(js)?$';
|
|
42
36
|
let transformIgnorePatterns = [];
|
|
43
37
|
|
|
44
38
|
if(useTypescript) {
|
|
45
|
-
moduleFileExtensions = ['js', 'ts', 'tsx', 'json'];
|
|
46
|
-
testRegex = '(/__tests__/.*|\\.(test|spec))\\.(ts|tsx)?$';
|
|
39
|
+
moduleFileExtensions = ['js', 'ts', 'tsx', 'json', 'cjs', 'mjs'];
|
|
40
|
+
testRegex = '(/__tests__/.*|\\.(test|spec|integration))\\.(ts|tsx)?$';
|
|
47
41
|
transformIgnorePatterns = [];
|
|
48
42
|
}
|
|
49
43
|
|
|
50
|
-
// Create a base config
|
|
51
44
|
const baseConfig = {
|
|
52
45
|
collectCoverage: true,
|
|
53
46
|
coverageDirectory: '<rootDir>/coverage',
|
|
@@ -69,37 +62,42 @@ const baseConfig = {
|
|
|
69
62
|
'\\.(css|jpg|png|svg|txt)$': pathResolve(dirName, './emptyModule')
|
|
70
63
|
},
|
|
71
64
|
modulePaths: [rootDir, `${rootDir}/node_modules`, nodePath, sourceFullPath],
|
|
72
|
-
// preset: 'ts-jest', // Removed to avoid resolution issues
|
|
73
65
|
resolver: pathResolve(dirName, './resolver.cjs'),
|
|
74
66
|
rootDir,
|
|
75
67
|
setupFiles: [
|
|
76
68
|
getNodePath('core-js'),
|
|
77
69
|
getNodePath('regenerator-runtime/runtime.js')
|
|
78
70
|
],
|
|
79
|
-
|
|
80
|
-
...(setupFilesAfterEnv.length > 0 ? { setupFilesAfterEnv } : {}),
|
|
71
|
+
setupFilesAfterEnv,
|
|
81
72
|
testEnvironment,
|
|
82
73
|
testEnvironmentOptions,
|
|
83
74
|
testPathIgnorePatterns: ['/node_modules/', `${nodePath}/`],
|
|
84
75
|
testRegex,
|
|
85
|
-
testRunner: getNodePath('jest-circus/runner.js'),
|
|
86
76
|
transform: {
|
|
87
77
|
...(useTypescript ? {
|
|
88
78
|
'\\.tsx?$': [getNodePath('ts-jest/dist/index.js'), {
|
|
89
|
-
useESM: true
|
|
79
|
+
useESM: true,
|
|
80
|
+
tsconfig: {
|
|
81
|
+
useDefineForClassFields: true,
|
|
82
|
+
esModuleInterop: true,
|
|
83
|
+
allowSyntheticDefaultImports: true
|
|
84
|
+
}
|
|
90
85
|
}]
|
|
91
86
|
} : {
|
|
92
87
|
'\\.[jt]sx?$': getNodePath('babel-jest')
|
|
93
88
|
}),
|
|
94
|
-
'\\.(gql|graphql)$': getNodePath('jest-transform-graphql')
|
|
89
|
+
'\\.(gql|graphql)$': getNodePath('jest-transform-graphql'),
|
|
90
|
+
'\\.mjs$': [getNodePath('ts-jest/dist/index.js'), {
|
|
91
|
+
useESM: true
|
|
92
|
+
}],
|
|
93
|
+
'\\.cjs$': getNodePath('babel-jest')
|
|
95
94
|
},
|
|
96
95
|
transformIgnorePatterns: [
|
|
97
|
-
'node_modules/(?!(chalk|@testing-library/jest-dom)/)'
|
|
96
|
+
'node_modules/(?!(chalk|@testing-library/jest-dom|zod|@nlabs)/)'
|
|
98
97
|
],
|
|
99
98
|
verbose: true
|
|
100
99
|
};
|
|
101
100
|
|
|
102
|
-
// Deep merge function
|
|
103
101
|
const deepMerge = (target, source) => {
|
|
104
102
|
if(!source) return target;
|
|
105
103
|
const output = { ...target };
|
|
@@ -108,7 +106,6 @@ const deepMerge = (target, source) => {
|
|
|
108
106
|
if(source[key] instanceof Object && key in target && target[key] instanceof Object && !Array.isArray(source[key]) && !Array.isArray(target[key])) {
|
|
109
107
|
output[key] = {...target[key], ...source[key]};
|
|
110
108
|
} else if(Array.isArray(source[key]) && Array.isArray(target[key])) {
|
|
111
|
-
// Merge arrays
|
|
112
109
|
output[key] = [...target[key], ...source[key]];
|
|
113
110
|
} else {
|
|
114
111
|
output[key] = source[key];
|
|
@@ -118,5 +115,4 @@ const deepMerge = (target, source) => {
|
|
|
118
115
|
return output;
|
|
119
116
|
};
|
|
120
117
|
|
|
121
|
-
// Export the merged configuration
|
|
122
118
|
export default deepMerge(baseConfig, jest);
|