@nlabs/lex 2.0.3 → 2.0.5
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/CHANGELOG.md +24 -0
- package/MIGRATION_V2.md +331 -0
- package/README.md +80 -102
- package/config.json +4 -8
- package/docs/assets/lex-logo.png +0 -0
- package/examples/lex.config.js +7 -10
- package/lex.config.js +12 -11
- package/lib/commands/ai/ai.js +22 -6
- package/lib/commands/serverless-dev/serverless-dev.d.ts +8 -0
- package/lib/commands/serverless-dev/serverless-dev.js +42 -6
- package/lib/commands/storybook/storybook.js +4 -30
- package/lib/lex.js +7 -10
- package/lib/utils/vite/config.js +12 -1
- package/package.json +32 -18
- package/scripts/validate-docs.js +141 -0
package/lib/commands/ai/ai.js
CHANGED
|
@@ -188,8 +188,18 @@ const detectCursorIDE = ()=>{
|
|
|
188
188
|
};
|
|
189
189
|
export const aiFunction = async (options)=>{
|
|
190
190
|
try {
|
|
191
|
+
await LexConfig.parseConfig(options);
|
|
191
192
|
const config = LexConfig.config || {};
|
|
192
|
-
const aiConfig =
|
|
193
|
+
const aiConfig = {
|
|
194
|
+
...config.ai,
|
|
195
|
+
...options.model ? {
|
|
196
|
+
model: options.model
|
|
197
|
+
} : {},
|
|
198
|
+
...options.provider ? {
|
|
199
|
+
provider: options.provider
|
|
200
|
+
} : {}
|
|
201
|
+
};
|
|
202
|
+
LexConfig.config.ai = aiConfig;
|
|
193
203
|
const provider = options.provider || aiConfig.provider || 'none';
|
|
194
204
|
if (provider === 'none' && !process.env.CURSOR_EXTENSION) {
|
|
195
205
|
log(`${chalk.red('Error:')} No AI provider configured.`, 'error');
|
|
@@ -197,11 +207,13 @@ export const aiFunction = async (options)=>{
|
|
|
197
207
|
error: 'No AI provider configured'
|
|
198
208
|
};
|
|
199
209
|
}
|
|
200
|
-
const task = options.task || '
|
|
210
|
+
const task = options.task || 'help';
|
|
201
211
|
const validTasks = [
|
|
202
212
|
'explain',
|
|
203
213
|
'generate',
|
|
204
214
|
'test',
|
|
215
|
+
'optimize',
|
|
216
|
+
'help',
|
|
205
217
|
'analyze',
|
|
206
218
|
'ask'
|
|
207
219
|
];
|
|
@@ -219,7 +231,7 @@ export const aiFunction = async (options)=>{
|
|
|
219
231
|
};
|
|
220
232
|
}
|
|
221
233
|
let context = '';
|
|
222
|
-
if (options.file) {
|
|
234
|
+
if (options.context !== false && options.file) {
|
|
223
235
|
try {
|
|
224
236
|
const fs = await import('fs/promises');
|
|
225
237
|
const glob = await import('glob');
|
|
@@ -236,7 +248,7 @@ export const aiFunction = async (options)=>{
|
|
|
236
248
|
log(`${chalk.yellow('Warning:')} Error reading file: ${error.message}`, 'warning');
|
|
237
249
|
}
|
|
238
250
|
}
|
|
239
|
-
if (options.dir) {
|
|
251
|
+
if (options.context !== false && options.dir) {
|
|
240
252
|
try {
|
|
241
253
|
const { execaSync } = await import('execa');
|
|
242
254
|
const result = execaSync('find', [
|
|
@@ -265,7 +277,11 @@ export const aiFunction = async (options)=>{
|
|
|
265
277
|
case 'analyze':
|
|
266
278
|
formattedPrompt = `Analyze the following code:\n${prompt}`;
|
|
267
279
|
break;
|
|
280
|
+
case 'optimize':
|
|
281
|
+
formattedPrompt = `Analyze the following code or configuration and suggest optimization improvements:\n${prompt}`;
|
|
282
|
+
break;
|
|
268
283
|
case 'ask':
|
|
284
|
+
case 'help':
|
|
269
285
|
formattedPrompt = `Provide guidance on the following development question:\n${prompt}`;
|
|
270
286
|
break;
|
|
271
287
|
}
|
|
@@ -294,9 +310,9 @@ export const aiFunction = async (options)=>{
|
|
|
294
310
|
};
|
|
295
311
|
}
|
|
296
312
|
};
|
|
297
|
-
export const ai = new Command('ai').description('Use AI to help with development tasks').option('--provider <provider>', 'AI provider to use (openai, anthropic, cursor)').option('--task <task>', 'Task to perform (explain, generate, test, analyze, ask)').option('--prompt <prompt>', 'Prompt to send to AI').option('--file <file>', 'File to analyze').option('--dir <dir>', 'Directory to analyze').action(async (options)=>{
|
|
313
|
+
export const ai = new Command('ai').description('Use AI to help with development tasks').option('--provider <provider>', 'AI provider to use (openai, anthropic, cursor)').option('--task <task>', 'Task to perform (explain, generate, test, optimize, help, analyze, ask)').option('--prompt <prompt>', 'Prompt to send to AI').option('--file <file>', 'File to analyze').option('--dir <dir>', 'Directory to analyze').action(async (options)=>{
|
|
298
314
|
await aiFunction(options);
|
|
299
315
|
});
|
|
300
316
|
export default ai;
|
|
301
317
|
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9haS9haS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2FsbEFJU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbHMvYWlTZXJ2aWNlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5pZihwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnIHx8XG4gIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfU0VTU0lPTl9JRCkge1xuICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBib29sZWFuO1xuICByZWFkb25seSBmaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBsZXhDb25maWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGVsPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9tcHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFzaz86ICdnZW5lcmF0ZScgfCAnZXhwbGFpbicgfCAndGVzdCcgfCAnb3B0aW1pemUnIHwgJ2hlbHAnIHwgJ2FzaycgfCAnYW5hbHl6ZSc7XG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpcj86IHN0cmluZztcbn1cblxuY29uc3QgZ2V0RmlsZUNvbnRleHQgPSAoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGBGaWxlOiAke2ZpbGVQYXRofVxcblxcbiR7Y29udGVudH1gO1xuICB9IGNhdGNoKF9lcnJvcikge1xuICAgIHJldHVybiBgRXJyb3IgcmVhZGluZyBmaWxlOiAke2ZpbGVQYXRofWA7XG4gIH1cbn07XG5cbmNvbnN0IGdldFByb2plY3RDb250ZXh0ID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHtmaWxlLCB0YXNrLCBjb250ZXh0fSA9IG9wdGlvbnM7XG5cbiAgaWYoY29udGV4dCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgcHJvamVjdENvbnRleHQgPSAnJztcblxuICBpZihmaWxlKSB7XG4gICAgcHJvamVjdENvbnRleHQgKz0gZ2V0RmlsZUNvbnRleHQoZmlsZSk7XG4gIH1cblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMoJ3NyYy8qKi8qLnt0cyx0c3gsanMsanN4fScsIHtcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2xpYi8qKicsICcqKi9kaXN0LyoqJywgJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJ10sXG4gICAgICAgIG1heERlcHRoOiAzXG4gICAgICB9KTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5Qcm9qZWN0IHN0cnVjdHVyZTpcXG4ke2ZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgaWYoZmlsZSkge1xuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0gZ2V0RmlsZUNvbnRleHQoJ3ZpdGVzdC5jb25maWcubWpzJyk7XG4gICAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5UZXN0IGNvbmZpZ3VyYXRpb246XFxuJHt0ZXN0Q29uZmlnfWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGNvbnN0IGxleENvbmZpZyA9IGdldEZpbGVDb250ZXh0KCdsZXguY29uZmlnLmpzJyk7XG4gICAgICBwcm9qZWN0Q29udGV4dCArPSBgXFxuXFxuTGV4L1ZpdGUgY29uZmlndXJhdGlvbjpcXG4ke2xleENvbmZpZ31gO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gcHJvamVjdENvbnRleHQ7XG59O1xuXG5jb25zdCBjb25zdHJ1Y3RQcm9tcHQgPSAob3B0aW9uczogQUlPcHRpb25zLCBwcm9qZWN0Q29udGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Rhc2sgPSAnaGVscCcsIHByb21wdCA9ICcnfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBhbmFseXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6JyxcbiAgICBhc2s6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBleHBsYWluOiAnRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gZGV0YWlsLCBpbmNsdWRpbmcgYW55IHBhdHRlcm5zLCBwb3RlbnRpYWwgaXNzdWVzLCBhbmQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnM6JyxcbiAgICBnZW5lcmF0ZTogJ0dlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdC4gTWFrZSBzdXJlIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgYW5kIGlzIHdlbGwgZG9jdW1lbnRlZDonLFxuICAgIGhlbHA6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBvcHRpbWl6ZTogJ0FuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlL2NvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czonLFxuICAgIHRlc3Q6ICdHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29kZTonXG4gIH07XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uID0gdGFza0luc3RydWN0aW9uc1t0YXNrXSB8fCB0YXNrSW5zdHJ1Y3Rpb25zLmhlbHA7XG5cbiAgbGV0IGZ1bGxQcm9tcHQgPSBgJHt0YXNrSW5zdHJ1Y3Rpb259XFxuXFxuJHtwcm9tcHR9YDtcblxuICBpZihwcm9qZWN0Q29udGV4dCkge1xuICAgIGZ1bGxQcm9tcHQgKz0gYFxcblxcbj09PUNPTlRFWFQ9PT1cXG4ke3Byb2plY3RDb250ZXh0fWA7XG4gIH1cblxuICByZXR1cm4gZnVsbFByb21wdDtcbn07XG5cbmNvbnN0IGRpc3BsYXlSZXNwb25zZSA9IChyZXNwb25zZTogYW55LCBvcHRpb25zOiBBSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgY29uc3Qge3Rhc2sgPSAnaGVscCcsIHF1aWV0ID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICBsZXQgY29udGVudCA9ICcnO1xuXG4gIGlmKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb250ZW50ID0gcmVzcG9uc2U7XG4gIH0gZWxzZSBpZihyZXNwb25zZS5jaG9pY2VzPy5bMF0/Lm1lc3NhZ2U/LmNvbnRlbnQpIHtcbiAgICBjb25zdCB7Y29udGVudDogbWVzc2FnZUNvbnRlbnR9ID0gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlO1xuICAgIGNvbnRlbnQgPSBtZXNzYWdlQ29udGVudDtcbiAgfSBlbHNlIGlmKHJlc3BvbnNlLmNvbnRlbnQpIHtcbiAgICBjb25zdCB7Y29udGVudDogcmVzcG9uc2VDb250ZW50fSA9IHJlc3BvbnNlO1xuICAgIGNvbnRlbnQgPSByZXNwb25zZUNvbnRlbnQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9ICdObyByZXNwb25zZSByZWNlaXZlZCBmcm9tIEFJIG1vZGVsJztcbiAgfVxuXG4gIGNvbnN0IGNsZWFuZWRDb250ZW50ID0gY2xlYW5SZXNwb25zZShjb250ZW50LCBvcHRpb25zKTtcblxuICBzd2l0Y2godGFzaykge1xuICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgIGxvZygnXFxuR2VuZXJhdGVkIENvZGU6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdleHBsYWluJzpcbiAgICAgIGxvZygnXFxuQ29kZSBFeHBsYW5hdGlvbjpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgbG9nKCdcXG5HZW5lcmF0ZWQgVGVzdHM6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpbWl6ZSc6XG4gICAgICBsb2coJ1xcbk9wdGltaXphdGlvbiBTdWdnZXN0aW9uczpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsb2coJ1xcbkFJIFJlc3BvbnNlOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5jb25zdCBjbGVhblJlc3BvbnNlID0gKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQUlPcHRpb25zKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Byb21wdCA9ICcnLCB0YXNrID0gJ2hlbHAnfSA9IG9wdGlvbnM7XG5cbiAgaWYoIWNvbnRlbnQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGxldCBjbGVhbmVkQ29udGVudCA9IGNvbnRlbnQ7XG5cbiAgY29uc3QgdGFza0luc3RydWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBhbmFseXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGU6JyxcbiAgICBhc2s6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBleHBsYWluOiAnRXhwbGFpbiB0aGUgZm9sbG93aW5nIGNvZGUgaW4gZGV0YWlsLCBpbmNsdWRpbmcgYW55IHBhdHRlcm5zLCBwb3RlbnRpYWwgaXNzdWVzLCBhbmQgaW1wcm92ZW1lbnQgc3VnZ2VzdGlvbnM6JyxcbiAgICBnZW5lcmF0ZTogJ0dlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdC4gTWFrZSBzdXJlIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgYW5kIGlzIHdlbGwgZG9jdW1lbnRlZDonLFxuICAgIGhlbHA6ICdQcm92aWRlIGd1aWRhbmNlIG9uIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcG1lbnQgcXVlc3Rpb246JyxcbiAgICBvcHRpbWl6ZTogJ0FuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlL2NvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czonLFxuICAgIHRlc3Q6ICdHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29kZTonXG4gIH07XG5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSB0YXNrSW5zdHJ1Y3Rpb25zW3Rhc2tdIHx8ICcnO1xuXG4gIGlmKGluc3RydWN0aW9uICYmIGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKGluc3RydWN0aW9uKSkge1xuICAgIGNsZWFuZWRDb250ZW50ID0gY2xlYW5lZENvbnRlbnQucmVwbGFjZShpbnN0cnVjdGlvbiwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlmKHByb21wdCAmJiBjbGVhbmVkQ29udGVudC5pbmNsdWRlcyhwcm9tcHQpKSB7XG4gICAgY2xlYW5lZENvbnRlbnQgPSBjbGVhbmVkQ29udGVudC5yZXBsYWNlKHByb21wdCwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlmKGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKCc9PT1DT05URVhUPT09JykpIHtcbiAgICBjbGVhbmVkQ29udGVudCA9IGNsZWFuZWRDb250ZW50LnNwbGl0KCc9PT1DT05URVhUPT09JylbMF0udHJpbSgpO1xuICB9XG5cbiAgaWYoIWNsZWFuZWRDb250ZW50KSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY2xlYW5lZENvbnRlbnQ7XG59O1xuXG5jb25zdCBnZXRQcm92aWRlckF1dGggPSAocHJvdmlkZXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKHByb2Nlc3MuY3dkKCkuaW5jbHVkZXMoJ3JlYWt0b3InKSkge1xuICAgIHJldHVybiAnY3Vyc29yLWF1dGgnO1xuICB9XG5cbiAgaWYocHJvY2Vzcy5lbnYuQUlfQVBJX0tFWSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BSV9BUElfS0VZO1xuICB9XG5cbiAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiBwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gJ2N1cnNvci1hdXRoJztcbiAgfVxuXG4gIHN3aXRjaChwcm92aWRlcikge1xuICAgIGNhc2UgJ29wZW5haSc6XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVk7XG4gICAgY2FzZSAnYW50aHJvcGljJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgICBjYXNlICdjdXJzb3InOlxuICAgICAgcmV0dXJuICdjdXJzb3ItYXV0aCc7XG4gICAgY2FzZSAnY29waWxvdCc6XG4gICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOO1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuY29uc3QgZGV0ZWN0Q3Vyc29ySURFID0gKCk6IGJvb2xlYW4gPT4ge1xuICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHBvc3NpYmxlQ3Vyc29yU2lnbmFscyA9IFtcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfRVhURU5TSU9OID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX1RFUk1JTkFMID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX0FQUCA9PT0gJ3RydWUnLFxuICAgIHByb2Nlc3MuZW52LlBBVEg/LmluY2x1ZGVzKCdjdXJzb3InKSxcbiAgICAhIXByb2Nlc3MuZW52LkNVUlNPUl9TRVNTSU9OX0lEXG4gIF07XG5cbiAgY29uc3QgaXNDdXJzb3JJREUgPSBwb3NzaWJsZUN1cnNvclNpZ25hbHMuc29tZSgoc2lnbmFsKSA9PiBzaWduYWwpO1xuXG4gIGlmKGlzQ3Vyc29ySURFKSB7XG4gICAgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9ICd0cnVlJztcbiAgfVxuXG4gIHJldHVybiBpc0N1cnNvcklERTtcbn07XG5cbmV4cG9ydCBjb25zdCBhaUZ1bmN0aW9uID0gYXN5bmMgKG9wdGlvbnM6IEFJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCBhaUNvbmZpZyA9IGNvbmZpZy5haSB8fCB7fTtcbiAgICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgYWlDb25maWcucHJvdmlkZXIgfHwgJ25vbmUnO1xuXG4gICAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiAhcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IE5vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQuYCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4ge2Vycm9yOiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBvcHRpb25zLnRhc2sgfHwgJ2Fzayc7XG4gICAgY29uc3QgdmFsaWRUYXNrcyA9IFsnZXhwbGFpbicsICdnZW5lcmF0ZScsICd0ZXN0JywgJ2FuYWx5emUnLCAnYXNrJ107XG5cbiAgICBpZighdmFsaWRUYXNrcy5pbmNsdWRlcyh0YXNrKSkge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IEludmFsaWQgdGFzayBcIiR7dGFza31cIi4gVmFsaWQgdGFza3MgYXJlOiAke3ZhbGlkVGFza3Muam9pbignLCAnKX1gLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6IGBJbnZhbGlkIHRhc2sgXCIke3Rhc2t9XCJgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cHJvbXB0fSA9IG9wdGlvbnM7XG5cbiAgICBpZighcHJvbXB0KSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gTm8gcHJvbXB0IHByb3ZpZGVkLiBVc2UgLS1wcm9tcHQgXCJZb3VyIHByb21wdCBoZXJlXCJgLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdObyBwcm9tcHQgcHJvdmlkZWQnfTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9ICcnO1xuXG4gICAgaWYob3B0aW9ucy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICAgICAgY29uc3QgZ2xvYiA9IGF3YWl0IGltcG9ydCgnZ2xvYicpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IuZ2xvYihvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIGlmKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGxvZyhgJHtjaGFsay55ZWxsb3coJ1dhcm5pbmc6Jyl9IE5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nIFwiJHtvcHRpb25zLmZpbGV9XCJgLCAnd2FybmluZycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcihjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGNvbnRleHQgKz0gYFxcbj09PUZJTEU6ICR7ZmlsZX09PT1cXG4ke2NvbnRlbnR9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gRXJyb3IgcmVhZGluZyBmaWxlOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmRpcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2V4ZWNhU3luY30gPSBhd2FpdCBpbXBvcnQoJ2V4ZWNhJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNhU3luYygnZmluZCcsIFtvcHRpb25zLmRpciwgJy10eXBlJywgJ2YnLCAnfCcsICdzb3J0J10pO1xuICAgICAgICBjb250ZXh0ICs9IGBcXG49PT1Qcm9qZWN0IHN0cnVjdHVyZTo9PT1cXG4ke3Jlc3VsdC5zdGRvdXR9XFxuYDtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gRXJyb3IgcmVhZGluZyBkaXJlY3Rvcnk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtYXR0ZWRQcm9tcHQgPSAnJztcblxuICAgIHN3aXRjaCh0YXNrKSB7XG4gICAgICBjYXNlICdleHBsYWluJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEV4cGxhaW4gdGhlIGZvbGxvd2luZyBjb2RlOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0OlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGVzdCc6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBHZW5lcmF0ZSBjb21wcmVoZW5zaXZlIHVuaXQgdGVzdHM6XFxuJHtwcm9tcHR9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbmFseXplJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEFuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNrJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYFByb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZihjb250ZXh0KSB7XG4gICAgICBmb3JtYXR0ZWRQcm9tcHQgKz0gYFxcbj09PUNPTlRFWFQ9PT1cXG4ke2NvbnRleHR9YDtcbiAgICB9XG5cbiAgICBpZigocHJvdmlkZXIgPT09ICdjdXJzb3InIHx8IHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04pICYmIHRhc2sgPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgIGxvZygnVXNpbmcgQ3Vyc29yIElERSBmb3IgY29kZSBnZW5lcmF0aW9uLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogRm9yIGZ1bGwgY29kZSBnZW5lcmF0aW9uIGNhcGFiaWxpdGllcywgcGxlYXNlIHVzZSBDdXJzb3IgSURFIGRpcmVjdGx5IHdpdGggQ21kK0wgb3IgQ21kK0suJywgJ2luZm8nKTtcbiAgICAgIGxvZygnVGhlIENMSSBpbnRlZ3JhdGlvbiBoYXMgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGNvZGUgZ2VuZXJhdGlvbi4nLCAnd2FybmluZycpO1xuICAgIH0gZWxzZSBpZihwcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKCdVc2luZyBDdXJzb3IgSURFIGZvciBBSSBhc3Npc3RhbmNlLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogVGhpcyBpcyBhIGxpbWl0ZWQgaW50ZWdyYXRpb24uIEZvciBmdWxsIEFJIGNhcGFiaWxpdGllcywgdXNlIEN1cnNvciBJREUgZGlyZWN0bHkuJywgJ2luZm8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBVc2luZyAke3Byb3ZpZGVyfSBmb3IgQUkgYXNzaXN0YW5jZS4uLmAsICdpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWxsQUlTZXJ2aWNlKGZvcm1hdHRlZFByb21wdCwgb3B0aW9ucy5xdWlldCB8fCBmYWxzZSk7XG5cbiAgICBsb2coYFxcbiR7cmVzcG9uc2V9YCwgJ3N1Y2Nlc3MnKTtcblxuICAgIHJldHVybiB7cmVzcG9uc2V9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICByZXR1cm4ge2Vycm9yOiBlcnJvci5tZXNzYWdlfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFpID0gbmV3IENvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdVc2UgQUkgdG8gaGVscCB3aXRoIGRldmVsb3BtZW50IHRhc2tzJylcbiAgLm9wdGlvbignLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIHRvIHVzZSAob3BlbmFpLCBhbnRocm9waWMsIGN1cnNvciknKVxuICAub3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1Rhc2sgdG8gcGVyZm9ybSAoZXhwbGFpbiwgZ2VuZXJhdGUsIHRlc3QsIGFuYWx5emUsIGFzayknKVxuICAub3B0aW9uKCctLXByb21wdCA8cHJvbXB0PicsICdQcm9tcHQgdG8gc2VuZCB0byBBSScpXG4gIC5vcHRpb24oJy0tZmlsZSA8ZmlsZT4nLCAnRmlsZSB0byBhbmFseXplJylcbiAgLm9wdGlvbignLS1kaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGFuYWx5emUnKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBBSU9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBhaUZ1bmN0aW9uKG9wdGlvbnMpO1xuICB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYWk7XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJDb21tYW5kIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiTGV4Q29uZmlnIiwiY2FsbEFJU2VydmljZSIsImxvZyIsInByb2Nlc3MiLCJlbnYiLCJDVVJTT1JfRVhURU5TSU9OIiwiQ1VSU09SX1RFUk1JTkFMIiwiQ1VSU09SX0FQUCIsIlBBVEgiLCJpbmNsdWRlcyIsIkNVUlNPUl9TRVNTSU9OX0lEIiwiQ1VSU09SX0lERSIsImdldEZpbGVDb250ZXh0IiwiZmlsZVBhdGgiLCJjb250ZW50IiwiX2Vycm9yIiwiZ2V0UHJvamVjdENvbnRleHQiLCJvcHRpb25zIiwiZmlsZSIsInRhc2siLCJjb250ZXh0IiwicHJvamVjdENvbnRleHQiLCJmaWxlcyIsImN3ZCIsImlnbm9yZSIsIm1heERlcHRoIiwiam9pbiIsInRlc3RDb25maWciLCJsZXhDb25maWciLCJjb25zdHJ1Y3RQcm9tcHQiLCJwcm9tcHQiLCJ0YXNrSW5zdHJ1Y3Rpb25zIiwiYW5hbHl6ZSIsImFzayIsImV4cGxhaW4iLCJnZW5lcmF0ZSIsImhlbHAiLCJvcHRpbWl6ZSIsInRlc3QiLCJ0YXNrSW5zdHJ1Y3Rpb24iLCJmdWxsUHJvbXB0IiwiZGlzcGxheVJlc3BvbnNlIiwicmVzcG9uc2UiLCJxdWlldCIsImNob2ljZXMiLCJtZXNzYWdlIiwibWVzc2FnZUNvbnRlbnQiLCJyZXNwb25zZUNvbnRlbnQiLCJjbGVhbmVkQ29udGVudCIsImNsZWFuUmVzcG9uc2UiLCJpbnN0cnVjdGlvbiIsInJlcGxhY2UiLCJ0cmltIiwic3BsaXQiLCJnZXRQcm92aWRlckF1dGgiLCJwcm92aWRlciIsIkFJX0FQSV9LRVkiLCJPUEVOQUlfQVBJX0tFWSIsIkFOVEhST1BJQ19BUElfS0VZIiwiR0lUSFVCX1RPS0VOIiwidW5kZWZpbmVkIiwiZGV0ZWN0Q3Vyc29ySURFIiwicG9zc2libGVDdXJzb3JTaWduYWxzIiwiaXNDdXJzb3JJREUiLCJzb21lIiwic2lnbmFsIiwiYWlGdW5jdGlvbiIsImNvbmZpZyIsImFpQ29uZmlnIiwiYWkiLCJyZWQiLCJlcnJvciIsInZhbGlkVGFza3MiLCJmcyIsImdsb2IiLCJsZW5ndGgiLCJ5ZWxsb3ciLCJyZWFkRmlsZSIsImRpciIsImV4ZWNhU3luYyIsInJlc3VsdCIsInN0ZG91dCIsImZvcm1hdHRlZFByb21wdCIsImRlc2NyaXB0aW9uIiwib3B0aW9uIiwiYWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsWUFBWSxRQUFPLEtBQUs7QUFDaEMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFFdEMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8sMkJBQTJCO0FBQ3ZELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFFdkMsSUFBR0MsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxVQUNsQ0YsUUFBUUMsR0FBRyxDQUFDRSxlQUFlLEtBQUssVUFDaENILFFBQVFDLEdBQUcsQ0FBQ0csVUFBVSxLQUFLLFVBQzNCSixRQUFRQyxHQUFHLENBQUNJLElBQUksRUFBRUMsU0FBUyxhQUMzQk4sUUFBUUMsR0FBRyxDQUFDTSxpQkFBaUIsRUFBRTtJQUMvQlAsUUFBUUMsR0FBRyxDQUFDTyxVQUFVLEdBQUc7QUFDM0I7QUFnQkEsTUFBTUMsaUJBQWlCLENBQUNDO0lBQ3RCLElBQUk7UUFDRixNQUFNQyxVQUFVakIsYUFBYWdCLFVBQVU7UUFDdkMsT0FBTyxDQUFDLE1BQU0sRUFBRUEsU0FBUyxJQUFJLEVBQUVDLFNBQVM7SUFDMUMsRUFBRSxPQUFNQyxRQUFRO1FBQ2QsT0FBTyxDQUFDLG9CQUFvQixFQUFFRixVQUFVO0lBQzFDO0FBQ0Y7QUFFQSxNQUFNRyxvQkFB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
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9haS9haS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7Q29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2FsbEFJU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbHMvYWlTZXJ2aWNlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7QUlDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5cbmlmKHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04gPT09ICd0cnVlJyB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfVEVSTUlOQUwgPT09ICd0cnVlJyB8fFxuICBwcm9jZXNzLmVudi5DVVJTT1JfQVBQID09PSAndHJ1ZScgfHxcbiAgcHJvY2Vzcy5lbnYuUEFUSD8uaW5jbHVkZXMoJ2N1cnNvcicpIHx8XG4gIHByb2Nlc3MuZW52LkNVUlNPUl9TRVNTSU9OX0lEKSB7XG4gIHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPSAndHJ1ZSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGV4dD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxleENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb21wdD86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0YXNrPzogJ2dlbmVyYXRlJyB8ICdleHBsYWluJyB8ICd0ZXN0JyB8ICdvcHRpbWl6ZScgfCAnaGVscCcgfCAnYXNrJyB8ICdhbmFseXplJztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgZGlyPzogc3RyaW5nO1xufVxuXG5jb25zdCBnZXRGaWxlQ29udGV4dCA9IChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gYEZpbGU6ICR7ZmlsZVBhdGh9XFxuXFxuJHtjb250ZW50fWA7XG4gIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgcmV0dXJuIGBFcnJvciByZWFkaW5nIGZpbGU6ICR7ZmlsZVBhdGh9YDtcbiAgfVxufTtcblxuY29uc3QgZ2V0UHJvamVjdENvbnRleHQgPSBhc3luYyAob3B0aW9uczogQUlPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3Qge2ZpbGUsIHRhc2ssIGNvbnRleHR9ID0gb3B0aW9ucztcblxuICBpZihjb250ZXh0ID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCBwcm9qZWN0Q29udGV4dCA9ICcnO1xuXG4gIGlmKGZpbGUpIHtcbiAgICBwcm9qZWN0Q29udGV4dCArPSBnZXRGaWxlQ29udGV4dChmaWxlKTtcbiAgfVxuXG4gIHN3aXRjaCh0YXNrKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgY29uc3QgZmlsZXMgPSBnbG9iU3luYygnc3JjLyoqLyoue3RzLHRzeCxqcyxqc3h9Jywge1xuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovKi50ZXN0LionLCAnKiovKi5zcGVjLionXSxcbiAgICAgICAgbWF4RGVwdGg6IDNcbiAgICAgIH0pO1xuICAgICAgcHJvamVjdENvbnRleHQgKz0gYFxcblxcblByb2plY3Qgc3RydWN0dXJlOlxcbiR7ZmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGVzdCc6XG4gICAgICBpZihmaWxlKSB7XG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSBnZXRGaWxlQ29udGV4dCgndml0ZXN0LmNvbmZpZy5tanMnKTtcbiAgICAgICAgcHJvamVjdENvbnRleHQgKz0gYFxcblxcblRlc3QgY29uZmlndXJhdGlvbjpcXG4ke3Rlc3RDb25maWd9YDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW1pemUnOlxuICAgICAgY29uc3QgbGV4Q29uZmlnID0gZ2V0RmlsZUNvbnRleHQoJ2xleC5jb25maWcuanMnKTtcbiAgICAgIHByb2plY3RDb250ZXh0ICs9IGBcXG5cXG5MZXgvVml0ZSBjb25maWd1cmF0aW9uOlxcbiR7bGV4Q29uZmlnfWA7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBwcm9qZWN0Q29udGV4dDtcbn07XG5cbmNvbnN0IGNvbnN0cnVjdFByb21wdCA9IChvcHRpb25zOiBBSU9wdGlvbnMsIHByb2plY3RDb250ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7dGFzayA9ICdoZWxwJywgcHJvbXB0ID0gJyd9ID0gb3B0aW9ucztcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFuYWx5emU6ICdBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTonLFxuICAgIGFzazogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIGV4cGxhaW46ICdFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBkZXRhaWwsIGluY2x1ZGluZyBhbnkgcGF0dGVybnMsIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBpbXByb3ZlbWVudCBzdWdnZXN0aW9uczonLFxuICAgIGdlbmVyYXRlOiAnR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0LiBNYWtlIHN1cmUgaXQgZm9sbG93cyBiZXN0IHByYWN0aWNlcyBhbmQgaXMgd2VsbCBkb2N1bWVudGVkOicsXG4gICAgaGVscDogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIG9wdGltaXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGUvY29uZmlndXJhdGlvbiBhbmQgc3VnZ2VzdCBvcHRpbWl6YXRpb24gaW1wcm92ZW1lbnRzOicsXG4gICAgdGVzdDogJ0dlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZyBjb2RlOidcbiAgfTtcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb24gPSB0YXNrSW5zdHJ1Y3Rpb25zW3Rhc2tdIHx8IHRhc2tJbnN0cnVjdGlvbnMuaGVscDtcblxuICBsZXQgZnVsbFByb21wdCA9IGAke3Rhc2tJbnN0cnVjdGlvbn1cXG5cXG4ke3Byb21wdH1gO1xuXG4gIGlmKHByb2plY3RDb250ZXh0KSB7XG4gICAgZnVsbFByb21wdCArPSBgXFxuXFxuPT09Q09OVEVYVD09PVxcbiR7cHJvamVjdENvbnRleHR9YDtcbiAgfVxuXG4gIHJldHVybiBmdWxsUHJvbXB0O1xufTtcblxuY29uc3QgZGlzcGxheVJlc3BvbnNlID0gKHJlc3BvbnNlOiBhbnksIG9wdGlvbnM6IEFJT3B0aW9ucyk6IHZvaWQgPT4ge1xuICBjb25zdCB7dGFzayA9ICdoZWxwJywgcXVpZXQgPSBmYWxzZX0gPSBvcHRpb25zO1xuXG4gIGxldCBjb250ZW50ID0gJyc7XG5cbiAgaWYodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnRlbnQgPSByZXNwb25zZTtcbiAgfSBlbHNlIGlmKHJlc3BvbnNlLmNob2ljZXM/LlswXT8ubWVzc2FnZT8uY29udGVudCkge1xuICAgIGNvbnN0IHtjb250ZW50OiBtZXNzYWdlQ29udGVudH0gPSByZXNwb25zZS5jaG9pY2VzWzBdLm1lc3NhZ2U7XG4gICAgY29udGVudCA9IG1lc3NhZ2VDb250ZW50O1xuICB9IGVsc2UgaWYocmVzcG9uc2UuY29udGVudCkge1xuICAgIGNvbnN0IHtjb250ZW50OiByZXNwb25zZUNvbnRlbnR9ID0gcmVzcG9uc2U7XG4gICAgY29udGVudCA9IHJlc3BvbnNlQ29udGVudDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQUkgbW9kZWwnO1xuICB9XG5cbiAgY29uc3QgY2xlYW5lZENvbnRlbnQgPSBjbGVhblJlc3BvbnNlKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG4gIHN3aXRjaCh0YXNrKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgbG9nKCdcXG5HZW5lcmF0ZWQgQ29kZTpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2V4cGxhaW4nOlxuICAgICAgbG9nKCdcXG5Db2RlIEV4cGxhbmF0aW9uOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGVzdCc6XG4gICAgICBsb2coJ1xcbkdlbmVyYXRlZCBUZXN0czpcXG4nLCAnc3VjY2VzcycsIHF1aWV0KTtcbiAgICAgIGxvZyhjbGVhbmVkQ29udGVudCwgJ2RlZmF1bHQnLCBxdWlldCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgIGxvZygnXFxuT3B0aW1pemF0aW9uIFN1Z2dlc3Rpb25zOlxcbicsICdzdWNjZXNzJywgcXVpZXQpO1xuICAgICAgbG9nKGNsZWFuZWRDb250ZW50LCAnZGVmYXVsdCcsIHF1aWV0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZygnXFxuQUkgUmVzcG9uc2U6XFxuJywgJ3N1Y2Nlc3MnLCBxdWlldCk7XG4gICAgICBsb2coY2xlYW5lZENvbnRlbnQsICdkZWZhdWx0JywgcXVpZXQpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbmNvbnN0IGNsZWFuUmVzcG9uc2UgPSAoY29udGVudDogc3RyaW5nLCBvcHRpb25zOiBBSU9wdGlvbnMpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7cHJvbXB0ID0gJycsIHRhc2sgPSAnaGVscCd9ID0gb3B0aW9ucztcblxuICBpZighY29udGVudCkge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgbGV0IGNsZWFuZWRDb250ZW50ID0gY29udGVudDtcblxuICBjb25zdCB0YXNrSW5zdHJ1Y3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFuYWx5emU6ICdBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTonLFxuICAgIGFzazogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIGV4cGxhaW46ICdFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBkZXRhaWwsIGluY2x1ZGluZyBhbnkgcGF0dGVybnMsIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBpbXByb3ZlbWVudCBzdWdnZXN0aW9uczonLFxuICAgIGdlbmVyYXRlOiAnR2VuZXJhdGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0LiBNYWtlIHN1cmUgaXQgZm9sbG93cyBiZXN0IHByYWN0aWNlcyBhbmQgaXMgd2VsbCBkb2N1bWVudGVkOicsXG4gICAgaGVscDogJ1Byb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjonLFxuICAgIG9wdGltaXplOiAnQW5hbHl6ZSB0aGUgZm9sbG93aW5nIGNvZGUvY29uZmlndXJhdGlvbiBhbmQgc3VnZ2VzdCBvcHRpbWl6YXRpb24gaW1wcm92ZW1lbnRzOicsXG4gICAgdGVzdDogJ0dlbmVyYXRlIGNvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgdGhlIGZvbGxvd2luZyBjb2RlOidcbiAgfTtcblxuICBjb25zdCBpbnN0cnVjdGlvbiA9IHRhc2tJbnN0cnVjdGlvbnNbdGFza10gfHwgJyc7XG5cbiAgaWYoaW5zdHJ1Y3Rpb24gJiYgY2xlYW5lZENvbnRlbnQuaW5jbHVkZXMoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgY2xlYW5lZENvbnRlbnQgPSBjbGVhbmVkQ29udGVudC5yZXBsYWNlKGluc3RydWN0aW9uLCAnJykudHJpbSgpO1xuICB9XG5cbiAgaWYocHJvbXB0ICYmIGNsZWFuZWRDb250ZW50LmluY2x1ZGVzKHByb21wdCkpIHtcbiAgICBjbGVhbmVkQ29udGVudCA9IGNsZWFuZWRDb250ZW50LnJlcGxhY2UocHJvbXB0LCAnJykudHJpbSgpO1xuICB9XG5cbiAgaWYoY2xlYW5lZENvbnRlbnQuaW5jbHVkZXMoJz09PUNPTlRFWFQ9PT0nKSkge1xuICAgIGNsZWFuZWRDb250ZW50ID0gY2xlYW5lZENvbnRlbnQuc3BsaXQoJz09PUNPTlRFWFQ9PT0nKVswXS50cmltKCk7XG4gIH1cblxuICBpZighY2xlYW5lZENvbnRlbnQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBjbGVhbmVkQ29udGVudDtcbn07XG5cbmNvbnN0IGdldFByb3ZpZGVyQXV0aCA9IChwcm92aWRlcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYocHJvY2Vzcy5jd2QoKS5pbmNsdWRlcygncmVha3RvcicpKSB7XG4gICAgcmV0dXJuICdjdXJzb3ItYXV0aCc7XG4gIH1cblxuICBpZihwcm9jZXNzLmVudi5BSV9BUElfS0VZKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFJX0FQSV9LRVk7XG4gIH1cblxuICBpZihwcm92aWRlciA9PT0gJ25vbmUnICYmIHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiAnY3Vyc29yLWF1dGgnO1xuICB9XG5cbiAgc3dpdGNoKHByb3ZpZGVyKSB7XG4gICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWTtcbiAgICBjYXNlICdhbnRocm9waWMnOlxuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFOVEhST1BJQ19BUElfS0VZO1xuICAgIGNhc2UgJ2N1cnNvcic6XG4gICAgICByZXR1cm4gJ2N1cnNvci1hdXRoJztcbiAgICBjYXNlICdjb3BpbG90JzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5jb25zdCBkZXRlY3RDdXJzb3JJREUgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcG9zc2libGVDdXJzb3JTaWduYWxzID0gW1xuICAgIHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04gPT09ICd0cnVlJyxcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfVEVSTUlOQUwgPT09ICd0cnVlJyxcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfQVBQID09PSAndHJ1ZScsXG4gICAgcHJvY2Vzcy5lbnYuUEFUSD8uaW5jbHVkZXMoJ2N1cnNvcicpLFxuICAgICEhcHJvY2Vzcy5lbnYuQ1VSU09SX1NFU1NJT05fSURcbiAgXTtcblxuICBjb25zdCBpc0N1cnNvcklERSA9IHBvc3NpYmxlQ3Vyc29yU2lnbmFscy5zb21lKChzaWduYWwpID0+IHNpZ25hbCk7XG5cbiAgaWYoaXNDdXJzb3JJREUpIHtcbiAgICBwcm9jZXNzLmVudi5DVVJTT1JfSURFID0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIGlzQ3Vyc29ySURFO1xufTtcblxuZXhwb3J0IGNvbnN0IGFpRnVuY3Rpb24gPSBhc3luYyAob3B0aW9uczogQUlPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcob3B0aW9ucyk7XG4gICAgY29uc3QgY29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCBhaUNvbmZpZzogQUlDb25maWcgPSB7XG4gICAgICAuLi5jb25maWcuYWksXG4gICAgICAuLi4ob3B0aW9ucy5tb2RlbCA/IHttb2RlbDogb3B0aW9ucy5tb2RlbH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5wcm92aWRlciA/IHtwcm92aWRlcjogb3B0aW9ucy5wcm92aWRlciBhcyBBSUNvbmZpZ1sncHJvdmlkZXInXX0gOiB7fSlcbiAgICB9O1xuICAgIExleENvbmZpZy5jb25maWcuYWkgPSBhaUNvbmZpZztcbiAgICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgYWlDb25maWcucHJvdmlkZXIgfHwgJ25vbmUnO1xuXG4gICAgaWYocHJvdmlkZXIgPT09ICdub25lJyAmJiAhcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IE5vIEFJIHByb3ZpZGVyIGNvbmZpZ3VyZWQuYCwgJ2Vycm9yJyk7XG4gICAgICByZXR1cm4ge2Vycm9yOiAnTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBvcHRpb25zLnRhc2sgfHwgJ2hlbHAnO1xuICAgIGNvbnN0IHZhbGlkVGFza3MgPSBbJ2V4cGxhaW4nLCAnZ2VuZXJhdGUnLCAndGVzdCcsICdvcHRpbWl6ZScsICdoZWxwJywgJ2FuYWx5emUnLCAnYXNrJ107XG5cbiAgICBpZighdmFsaWRUYXNrcy5pbmNsdWRlcyh0YXNrKSkge1xuICAgICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9IEludmFsaWQgdGFzayBcIiR7dGFza31cIi4gVmFsaWQgdGFza3MgYXJlOiAke3ZhbGlkVGFza3Muam9pbignLCAnKX1gLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6IGBJbnZhbGlkIHRhc2sgXCIke3Rhc2t9XCJgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cHJvbXB0fSA9IG9wdGlvbnM7XG5cbiAgICBpZighcHJvbXB0KSB7XG4gICAgICBsb2coYCR7Y2hhbGsucmVkKCdFcnJvcjonKX0gTm8gcHJvbXB0IHByb3ZpZGVkLiBVc2UgLS1wcm9tcHQgXCJZb3VyIHByb21wdCBoZXJlXCJgLCAnZXJyb3InKTtcbiAgICAgIHJldHVybiB7ZXJyb3I6ICdObyBwcm9tcHQgcHJvdmlkZWQnfTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dCA9ICcnO1xuXG4gICAgaWYob3B0aW9ucy5jb250ZXh0ICE9PSBmYWxzZSAmJiBvcHRpb25zLmZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KCdmcy9wcm9taXNlcycpO1xuICAgICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYi5nbG9iKG9wdGlvbnMuZmlsZSk7XG5cbiAgICAgICAgaWYoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbG9nKGAke2NoYWxrLnllbGxvdygnV2FybmluZzonKX0gTm8gZmlsZXMgZm91bmQgbWF0Y2hpbmcgXCIke29wdGlvbnMuZmlsZX1cImAsICd3YXJuaW5nJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgY29udGV4dCArPSBgXFxuPT09RklMRTogJHtmaWxlfT09PVxcbiR7Y29udGVudH1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYCR7Y2hhbGsueWVsbG93KCdXYXJuaW5nOicpfSBFcnJvciByZWFkaW5nIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuY29udGV4dCAhPT0gZmFsc2UgJiYgb3B0aW9ucy5kaXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtleGVjYVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdleGVjYScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleGVjYVN5bmMoJ2ZpbmQnLCBbb3B0aW9ucy5kaXIsICctdHlwZScsICdmJywgJ3wnLCAnc29ydCddKTtcbiAgICAgICAgY29udGV4dCArPSBgXFxuPT09UHJvamVjdCBzdHJ1Y3R1cmU6PT09XFxuJHtyZXN1bHQuc3Rkb3V0fVxcbmA7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxvZyhgJHtjaGFsay55ZWxsb3coJ1dhcm5pbmc6Jyl9IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm5pbmcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkUHJvbXB0ID0gJyc7XG5cbiAgICBzd2l0Y2godGFzaykge1xuICAgICAgY2FzZSAnZXhwbGFpbic6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBFeHBsYWluIHRoZSBmb2xsb3dpbmcgY29kZTpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dlbmVyYXRlJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEdlbmVyYXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdDpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rlc3QnOlxuICAgICAgICBmb3JtYXR0ZWRQcm9tcHQgPSBgR2VuZXJhdGUgY29tcHJlaGVuc2l2ZSB1bml0IHRlc3RzOlxcbiR7cHJvbXB0fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYW5hbHl6ZSc6XG4gICAgICAgIGZvcm1hdHRlZFByb21wdCA9IGBBbmFseXplIHRoZSBmb2xsb3dpbmcgY29kZTpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGltaXplJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYEFuYWx5emUgdGhlIGZvbGxvd2luZyBjb2RlIG9yIGNvbmZpZ3VyYXRpb24gYW5kIHN1Z2dlc3Qgb3B0aW1pemF0aW9uIGltcHJvdmVtZW50czpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzayc6XG4gICAgICBjYXNlICdoZWxwJzpcbiAgICAgICAgZm9ybWF0dGVkUHJvbXB0ID0gYFByb3ZpZGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBkZXZlbG9wbWVudCBxdWVzdGlvbjpcXG4ke3Byb21wdH1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZihjb250ZXh0KSB7XG4gICAgICBmb3JtYXR0ZWRQcm9tcHQgKz0gYFxcbj09PUNPTlRFWFQ9PT1cXG4ke2NvbnRleHR9YDtcbiAgICB9XG5cbiAgICBpZigocHJvdmlkZXIgPT09ICdjdXJzb3InIHx8IHByb2Nlc3MuZW52LkNVUlNPUl9FWFRFTlNJT04pICYmIHRhc2sgPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgIGxvZygnVXNpbmcgQ3Vyc29yIElERSBmb3IgY29kZSBnZW5lcmF0aW9uLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogRm9yIGZ1bGwgY29kZSBnZW5lcmF0aW9uIGNhcGFiaWxpdGllcywgcGxlYXNlIHVzZSBDdXJzb3IgSURFIGRpcmVjdGx5IHdpdGggQ21kK0wgb3IgQ21kK0suJywgJ2luZm8nKTtcbiAgICAgIGxvZygnVGhlIENMSSBpbnRlZ3JhdGlvbiBoYXMgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGNvZGUgZ2VuZXJhdGlvbi4nLCAnd2FybmluZycpO1xuICAgIH0gZWxzZSBpZihwcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0VYVEVOU0lPTikge1xuICAgICAgbG9nKCdVc2luZyBDdXJzb3IgSURFIGZvciBBSSBhc3Npc3RhbmNlLi4uJywgJ2luZm8nKTtcbiAgICAgIGxvZygnTm90ZTogVGhpcyBpcyBhIGxpbWl0ZWQgaW50ZWdyYXRpb24uIEZvciBmdWxsIEFJIGNhcGFiaWxpdGllcywgdXNlIEN1cnNvciBJREUgZGlyZWN0bHkuJywgJ2luZm8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBVc2luZyAke3Byb3ZpZGVyfSBmb3IgQUkgYXNzaXN0YW5jZS4uLmAsICdpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWxsQUlTZXJ2aWNlKGZvcm1hdHRlZFByb21wdCwgb3B0aW9ucy5xdWlldCB8fCBmYWxzZSk7XG5cbiAgICBsb2coYFxcbiR7cmVzcG9uc2V9YCwgJ3N1Y2Nlc3MnKTtcblxuICAgIHJldHVybiB7cmVzcG9uc2V9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGAke2NoYWxrLnJlZCgnRXJyb3I6Jyl9ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InKTtcbiAgICByZXR1cm4ge2Vycm9yOiBlcnJvci5tZXNzYWdlfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFpID0gbmV3IENvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdVc2UgQUkgdG8gaGVscCB3aXRoIGRldmVsb3BtZW50IHRhc2tzJylcbiAgLm9wdGlvbignLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIHRvIHVzZSAob3BlbmFpLCBhbnRocm9waWMsIGN1cnNvciknKVxuICAub3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1Rhc2sgdG8gcGVyZm9ybSAoZXhwbGFpbiwgZ2VuZXJhdGUsIHRlc3QsIG9wdGltaXplLCBoZWxwLCBhbmFseXplLCBhc2spJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHByb21wdD4nLCAnUHJvbXB0IHRvIHNlbmQgdG8gQUknKVxuICAub3B0aW9uKCctLWZpbGUgPGZpbGU+JywgJ0ZpbGUgdG8gYW5hbHl6ZScpXG4gIC5vcHRpb24oJy0tZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBhbmFseXplJylcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogQUlPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgYWlGdW5jdGlvbihvcHRpb25zKTtcbiAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFpO1xuIl0sIm5hbWVzIjpbImNoYWxrIiwiQ29tbWFuZCIsInJlYWRGaWxlU3luYyIsInN5bmMiLCJnbG9iU3luYyIsIkxleENvbmZpZyIsImNhbGxBSVNlcnZpY2UiLCJsb2ciLCJwcm9jZXNzIiwiZW52IiwiQ1VSU09SX0VYVEVOU0lPTiIsIkNVUlNPUl9URVJNSU5BTCIsIkNVUlNPUl9BUFAiLCJQQVRIIiwiaW5jbHVkZXMiLCJDVVJTT1JfU0VTU0lPTl9JRCIsIkNVUlNPUl9JREUiLCJnZXRGaWxlQ29udGV4dCIsImZpbGVQYXRoIiwiY29udGVudCIsIl9lcnJvciIsImdldFByb2plY3RDb250ZXh0Iiwib3B0aW9ucyIsImZpbGUiLCJ0YXNrIiwiY29udGV4dCIsInByb2plY3RDb250ZXh0IiwiZmlsZXMiLCJjd2QiLCJpZ25vcmUiLCJtYXhEZXB0aCIsImpvaW4iLCJ0ZXN0Q29uZmlnIiwibGV4Q29uZmlnIiwiY29uc3RydWN0UHJvbXB0IiwicHJvbXB0IiwidGFza0luc3RydWN0aW9ucyIsImFuYWx5emUiLCJhc2siLCJleHBsYWluIiwiZ2VuZXJhdGUiLCJoZWxwIiwib3B0aW1pemUiLCJ0ZXN0IiwidGFza0luc3RydWN0aW9uIiwiZnVsbFByb21wdCIsImRpc3BsYXlSZXNwb25zZSIsInJlc3BvbnNlIiwicXVpZXQiLCJjaG9pY2VzIiwibWVzc2FnZSIsIm1lc3NhZ2VDb250ZW50IiwicmVzcG9uc2VDb250ZW50IiwiY2xlYW5lZENvbnRlbnQiLCJjbGVhblJlc3BvbnNlIiwiaW5zdHJ1Y3Rpb24iLCJyZXBsYWNlIiwidHJpbSIsInNwbGl0IiwiZ2V0UHJvdmlkZXJBdXRoIiwicHJvdmlkZXIiLCJBSV9BUElfS0VZIiwiT1BFTkFJX0FQSV9LRVkiLCJBTlRIUk9QSUNfQVBJX0tFWSIsIkdJVEhVQl9UT0tFTiIsInVuZGVmaW5lZCIsImRldGVjdEN1cnNvcklERSIsInBvc3NpYmxlQ3Vyc29yU2lnbmFscyIsImlzQ3Vyc29ySURFIiwic29tZSIsInNpZ25hbCIsImFpRnVuY3Rpb24iLCJwYXJzZUNvbmZpZyIsImNvbmZpZyIsImFpQ29uZmlnIiwiYWkiLCJtb2RlbCIsInJlZCIsImVycm9yIiwidmFsaWRUYXNrcyIsImZzIiwiZ2xvYiIsImxlbmd0aCIsInllbGxvdyIsInJlYWRGaWxlIiwiZGlyIiwiZXhlY2FTeW5jIiwicmVzdWx0Iiwic3Rkb3V0IiwiZm9ybWF0dGVkUHJvbXB0IiwiZGVzY3JpcHRpb24iLCJvcHRpb24iLCJhY3Rpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELE9BQU9B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
|
|
@@ -13,4 +13,12 @@ export interface ServerlessDevOptions {
|
|
|
13
13
|
readonly wsPort?: number;
|
|
14
14
|
}
|
|
15
15
|
export type ServerlessDevCallback = (status: number) => void;
|
|
16
|
+
interface ServerlessCorsConfig {
|
|
17
|
+
readonly allowCredentials?: boolean;
|
|
18
|
+
readonly headers?: readonly string[];
|
|
19
|
+
readonly methods?: readonly string[];
|
|
20
|
+
readonly origins?: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
export declare const getCorsHeaders: (cors: boolean | ServerlessCorsConfig | undefined, requestOrigin: string | undefined) => Record<string, string>;
|
|
16
23
|
export declare const serverlessDev: (cmd: ServerlessDevOptions, callback?: ServerlessDevCallback) => Promise<number>;
|
|
24
|
+
export {};
|