cdk-serverless 2.5.0 → 2.6.1

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.
Files changed (79) hide show
  1. package/docs/constructs/assets/main.js +1 -1
  2. package/docs/constructs/assets/search.js +1 -1
  3. package/docs/constructs/assets/style.css +19 -7
  4. package/docs/constructs/classes/AssetCdn.html +4 -4
  5. package/docs/constructs/classes/BaseApi.html +4 -4
  6. package/docs/constructs/classes/CognitoAuthentication.html +4 -4
  7. package/docs/constructs/classes/GraphQlApi.html +18 -14
  8. package/docs/constructs/classes/LambdaFunction.html +34 -50
  9. package/docs/constructs/classes/RestApi.html +5 -7
  10. package/docs/constructs/classes/SingleTableDatastore.html +4 -4
  11. package/docs/constructs/classes/Workflow.html +4 -4
  12. package/docs/constructs/index.html +3 -2
  13. package/docs/constructs/interfaces/AssetCdnProps.html +3 -2
  14. package/docs/constructs/interfaces/BaseApiProps.html +3 -2
  15. package/docs/constructs/interfaces/CognitoAuthenticationProps.html +3 -2
  16. package/docs/constructs/interfaces/GraphQlApiProps.html +3 -2
  17. package/docs/constructs/interfaces/ICognitoAuthentication.html +3 -2
  18. package/docs/constructs/interfaces/IJwtAuthentication.html +3 -2
  19. package/docs/constructs/interfaces/JsResolverOptions.html +106 -0
  20. package/docs/constructs/interfaces/LambdaFunctionProps.html +3 -2
  21. package/docs/constructs/interfaces/LambdaTracingOptions.html +3 -2
  22. package/docs/constructs/interfaces/RestApiProps.html +3 -2
  23. package/docs/constructs/interfaces/SingleTableDatastoreProps.html +3 -2
  24. package/docs/constructs/interfaces/SingleTableDesign.html +3 -2
  25. package/docs/constructs/interfaces/VtlResolverOptions.html +3 -2
  26. package/docs/constructs/interfaces/WorkflowProps.html +3 -2
  27. package/docs/constructs/modules.html +5 -3
  28. package/docs/constructs/types/LambdaOptions.html +3 -2
  29. package/docs/lambda/assets/main.js +1 -1
  30. package/docs/lambda/assets/search.js +1 -1
  31. package/docs/lambda/assets/style.css +19 -7
  32. package/docs/lambda/classes/auth.ApiGatewayv1CognitoAuthorizer.html +4 -7
  33. package/docs/lambda/classes/auth.ApiGatewayv1JwtAuthorizer.html +4 -7
  34. package/docs/lambda/classes/auth.ApiGatewayv2CognitoAuthorizer.html +4 -7
  35. package/docs/lambda/classes/auth.ApiGatewayv2JwtAuthorizer.html +4 -7
  36. package/docs/lambda/classes/auth.AppSyncCognitoAuthorizer.html +4 -7
  37. package/docs/lambda/classes/auth.CognitoAuthorizer.html +4 -7
  38. package/docs/lambda/classes/auth.JwtAuthorizer.html +5 -8
  39. package/docs/lambda/classes/errors.BadRequestError.html +3 -3
  40. package/docs/lambda/classes/errors.ForbiddenError.html +3 -3
  41. package/docs/lambda/classes/errors.HttpError.html +3 -3
  42. package/docs/lambda/classes/errors.NotFoundError.html +3 -3
  43. package/docs/lambda/classes/errors.UnauthenticatedError.html +3 -3
  44. package/docs/lambda/functions/api.createAppSyncHandler.html +5 -6
  45. package/docs/lambda/functions/api.createHttpHandler.html +4 -4
  46. package/docs/lambda/functions/api.createOpenApiHandler.html +4 -4
  47. package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBody.html +4 -4
  48. package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBodyNoResponse.html +4 -4
  49. package/docs/lambda/index.html +1 -1
  50. package/docs/lambda/interfaces/api.AppSyncHandlerContext.html +4 -4
  51. package/docs/lambda/interfaces/api.HttpHandlerContext.html +4 -4
  52. package/docs/lambda/interfaces/api.HttpResponseContext.html +4 -4
  53. package/docs/lambda/interfaces/api.Operation.html +4 -4
  54. package/docs/lambda/interfaces/api.OperationWithRequestBody.html +4 -4
  55. package/docs/lambda/modules/api.html +7 -7
  56. package/docs/lambda/modules/auth.html +1 -1
  57. package/docs/lambda/modules/errors.html +1 -1
  58. package/docs/lambda/modules.html +1 -1
  59. package/docs/lambda/types/api.APIGatewayv1Handler.html +4 -4
  60. package/docs/lambda/types/api.AppSyncHandler.html +4 -4
  61. package/docs/lambda/types/api.HttpHandler.html +4 -4
  62. package/docs/projen/assets/main.js +1 -1
  63. package/docs/projen/assets/style.css +19 -7
  64. package/docs/projen/classes/Datastore.html +1 -1
  65. package/docs/projen/classes/GraphQlApi.html +1 -1
  66. package/docs/projen/classes/RestApi.html +1 -1
  67. package/docs/projen/classes/ServerlessProject.html +26 -51
  68. package/docs/projen/classes/Workflow.html +1 -1
  69. package/docs/projen/index.html +1 -1
  70. package/docs/projen/interfaces/DatastoreOptions.html +1 -1
  71. package/docs/projen/interfaces/GraphQlApiOptions.html +1 -1
  72. package/docs/projen/interfaces/RestApiOptions.html +1 -1
  73. package/docs/projen/interfaces/ServerlessProjectOptions.html +2 -2
  74. package/docs/projen/interfaces/WorkflowOptions.html +1 -1
  75. package/docs/projen/modules.html +1 -1
  76. package/docs/projen/variables/PACKAGE_NAME.html +1 -1
  77. package/lib/constructs/graphql.d.ts +18 -2
  78. package/lib/constructs/graphql.js +79 -47
  79. package/package.json +13 -13
@@ -73,5 +73,5 @@
73
73
  <li><a href="WorkflowOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Workflow<wbr/>Options</span></a></li>
74
74
  <li><a href="../variables/PACKAGE_NAME.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-32"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)"></path></g></svg><span>PACKAGE_<wbr/>NAME</span></a></li></ul></nav></div></div></div>
75
75
  <div class="tsd-generator">
76
- <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
76
+ <p>Generated using <a href="https://typedoc.org/" rel="noopener" target="_blank">TypeDoc</a></p></div>
77
77
  <div class="overlay"></div></body></html>
@@ -73,5 +73,5 @@
73
73
  <li><a href="WorkflowOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Workflow<wbr/>Options</span></a></li>
74
74
  <li><a href="../variables/PACKAGE_NAME.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-32"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)"></path></g></svg><span>PACKAGE_<wbr/>NAME</span></a></li></ul></nav></div></div></div>
75
75
  <div class="tsd-generator">
76
- <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
76
+ <p>Generated using <a href="https://typedoc.org/" rel="noopener" target="_blank">TypeDoc</a></p></div>
77
77
  <div class="overlay"></div></body></html>
@@ -631,7 +631,7 @@ this will be what you <code>package.json</code> will eventually include.</p>
631
631
  <section class="tsd-panel tsd-member tsd-is-inherited tsd-is-external"><a id="depsUpgrade" class="tsd-anchor"></a>
632
632
  <h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <code class="tsd-tag ts-flagReadonly">Readonly</code> <span>deps<wbr/>Upgrade</span><a href="#depsUpgrade" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
633
633
  <div class="tsd-signature"><span class="tsd-kind-property">deps<wbr/>Upgrade</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span></div>
634
- <div class="tsd-comment tsd-typography"><p>Use github workflows to handle dependency upgrades.
634
+ <div class="tsd-comment tsd-typography"><p>Use tasks and github workflows to handle dependency upgrades.
635
635
  Cannot be used in conjunction with <code>dependabot</code>.</p>
636
636
  </div>
637
637
  <div class="tsd-comment tsd-typography">
@@ -2101,5 +2101,5 @@ Given values either append to default configuration or overwrite values in it.</
2101
2101
  <li><a href="WorkflowOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Workflow<wbr/>Options</span></a></li>
2102
2102
  <li><a href="../variables/PACKAGE_NAME.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-32"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)"></path></g></svg><span>PACKAGE_<wbr/>NAME</span></a></li></ul></nav></div></div></div>
2103
2103
  <div class="tsd-generator">
2104
- <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
2104
+ <p>Generated using <a href="https://typedoc.org/" rel="noopener" target="_blank">TypeDoc</a></p></div>
2105
2105
  <div class="overlay"></div></body></html>
@@ -73,5 +73,5 @@
73
73
  <li><a href="WorkflowOptions.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Workflow<wbr/>Options</span></a></li>
74
74
  <li><a href="../variables/PACKAGE_NAME.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-32"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)"></path></g></svg><span>PACKAGE_<wbr/>NAME</span></a></li></ul></nav></div></div></div>
75
75
  <div class="tsd-generator">
76
- <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
76
+ <p>Generated using <a href="https://typedoc.org/" rel="noopener" target="_blank">TypeDoc</a></p></div>
77
77
  <div class="overlay"></div></body></html>
@@ -65,5 +65,5 @@
65
65
  <li><a href="interfaces/WorkflowOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Workflow<wbr/>Options</span></a></li>
66
66
  <li><a href="variables/PACKAGE_NAME.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-32"></use></svg><span>PACKAGE_<wbr/>NAME</span></a></li></ul></nav></div></div></div>
67
67
  <div class="tsd-generator">
68
- <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
68
+ <p>Generated using <a href="https://typedoc.org/" rel="noopener" target="_blank">TypeDoc</a></p></div>
69
69
  <div class="overlay"></div></body></html>
@@ -46,5 +46,5 @@
46
46
  <li><a href="../interfaces/WorkflowOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Workflow<wbr/>Options</span></a></li>
47
47
  <li><a href="PACKAGE_NAME.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-32"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)"></path></g></svg><span>PACKAGE_<wbr/>NAME</span></a></li></ul></nav></div></div></div>
48
48
  <div class="tsd-generator">
49
- <p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
49
+ <p>Generated using <a href="https://typedoc.org/" rel="noopener" target="_blank">TypeDoc</a></p></div>
50
50
  <div class="overlay"></div></body></html>
@@ -19,6 +19,22 @@ export interface VtlResolverOptions {
19
19
  [name: string]: string;
20
20
  };
21
21
  }
22
+ export interface JsResolverOptions {
23
+ /**
24
+ * Variables that will be put into the "stash" of the resolver pipeline
25
+ *
26
+ * @default none
27
+ */
28
+ readonly stashValues?: {
29
+ [key: string]: string;
30
+ };
31
+ /**
32
+ * name of the pipeline steps to create
33
+ *
34
+ * @default - only a default step will be created
35
+ */
36
+ readonly pipelineStepNames?: string[];
37
+ }
22
38
  export declare class GraphQlApi<RESOLVERS> extends BaseApi {
23
39
  private props;
24
40
  readonly api: aws_appsync.GraphqlApi;
@@ -44,8 +60,8 @@ export declare class GraphQlApi<RESOLVERS> extends BaseApi {
44
60
  getFunctionForOperation<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE): LambdaFunction;
45
61
  addLambdaResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE): LambdaFunction;
46
62
  addDynamoDbVtlResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE, options?: Omit<VtlResolverOptions, 'dataSource'>): void;
47
- addDynamoDbJSResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE): void;
48
- addJSResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE, dataSource: aws_appsync.BaseDataSource): void;
63
+ addDynamoDbJSResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE, options?: JsResolverOptions): void;
64
+ addJSResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE, dataSource: aws_appsync.BaseDataSource, options?: JsResolverOptions): void;
49
65
  addVtlResolver<TYPE extends keyof RESOLVERS, FIELDTYPE extends NonNullable<RESOLVERS[TYPE]>>(typeName: TYPE, fieldName: keyof FIELDTYPE, options: VtlResolverOptions): void;
50
66
  private substVariables;
51
67
  private createEntryFile;
@@ -224,64 +224,95 @@ class GraphQlApi extends base_api_1.BaseApi {
224
224
  ...options,
225
225
  });
226
226
  }
227
- addDynamoDbJSResolver(typeName, fieldName) {
227
+ addDynamoDbJSResolver(typeName, fieldName, options) {
228
+ var _a;
228
229
  if (!this.tableDataSource) {
229
230
  throw new Error('DynamoDB is not initialized');
230
231
  }
231
- this.addJSResolver(typeName, fieldName, this.tableDataSource);
232
+ this.addJSResolver(typeName, fieldName, this.tableDataSource, {
233
+ ...options,
234
+ stashValues: {
235
+ ...(_a = options === null || options === void 0 ? void 0 : options.stashValues) !== null && _a !== void 0 ? _a : {},
236
+ table: this.props.singleTableDatastore.table.tableName,
237
+ },
238
+ });
232
239
  }
233
- addJSResolver(typeName, fieldName, dataSource) {
240
+ addJSResolver(typeName, fieldName, dataSource, options) {
241
+ var _a;
234
242
  const operationId = `${typeName}.${fieldName}`;
235
243
  const description = `Type ${typeName} Field ${fieldName} Resolver`;
236
244
  const resolverDir = './src/js-resolver/';
237
- const entryFile = `${resolverDir}/${operationId}.ts`;
238
- if (!fs.existsSync(entryFile)) {
239
- fs.mkdirSync(resolverDir, { recursive: true });
240
- this.createJSResolverFile(entryFile, typeName, fieldName);
245
+ const functions = [];
246
+ if (!options || !options.pipelineStepNames || options.pipelineStepNames.length == 0) {
247
+ functions.push({
248
+ name: 'default',
249
+ index: 0,
250
+ stepCount: 1,
251
+ entryFile: `${resolverDir}/${operationId}.ts`,
252
+ functionId: `JSFunction${operationId}`,
253
+ });
241
254
  }
242
- const jsFunction = new aws_cdk_lib_1.aws_appsync.AppsyncFunction(this, `JSFunction${operationId}`, {
243
- api: this.api,
244
- name: operationId.replace(/\./g, ''),
245
- description,
246
- dataSource,
247
- code: aws_cdk_lib_1.aws_appsync.Code.fromAsset('.', {
248
- assetHashType: aws_cdk_lib_1.AssetHashType.CUSTOM,
249
- assetHash: aws_cdk_lib_1.FileSystem.fingerprint(entryFile),
250
- bundling: {
251
- image: aws_cdk_lib_1.DockerImage.fromRegistry('dummy'),
252
- outputType: aws_cdk_lib_1.BundlingOutput.ARCHIVED,
253
- local: {
254
- tryBundle(outputDir) {
255
- const osPlatform = os.platform();
256
- exec(osPlatform === 'win32' ? 'cmd' : 'bash', [
257
- osPlatform === 'win32' ? '/c' : '-c',
258
- `esbuild --bundle --sourcemap=inline --sources-content=false --target=esnext --platform=node --format=esm --external:@aws-appsync/utils --out-extension:.js=.jar --outdir=${outputDir} ${entryFile}`,
259
- ], {
260
- env: { ...process.env },
261
- stdio: [
262
- 'ignore',
263
- process.stderr,
264
- 'inherit', // inherit stderr
265
- ],
266
- windowsVerbatimArguments: osPlatform === 'win32',
267
- });
268
- return true;
255
+ else {
256
+ functions.push(...options.pipelineStepNames.map((name, index) => ({
257
+ name,
258
+ index,
259
+ stepCount: options.pipelineStepNames.length,
260
+ entryFile: `${resolverDir}/${operationId}.${name}.ts`,
261
+ functionId: `JSFunction${operationId}${name}`,
262
+ })));
263
+ }
264
+ const pipelineConfig = [];
265
+ for (const fn of functions) {
266
+ if (!fs.existsSync(fn.entryFile)) {
267
+ fs.mkdirSync(resolverDir, { recursive: true });
268
+ this.createJSResolverFile(fn, typeName, fieldName);
269
+ }
270
+ const jsFunction = new aws_cdk_lib_1.aws_appsync.AppsyncFunction(this, fn.functionId, {
271
+ api: this.api,
272
+ name: operationId.replace(/\./g, ''),
273
+ description,
274
+ dataSource,
275
+ code: aws_cdk_lib_1.aws_appsync.Code.fromAsset('.', {
276
+ assetHashType: aws_cdk_lib_1.AssetHashType.CUSTOM,
277
+ assetHash: aws_cdk_lib_1.FileSystem.fingerprint(fn.entryFile),
278
+ bundling: {
279
+ image: aws_cdk_lib_1.DockerImage.fromRegistry('dummy'),
280
+ outputType: aws_cdk_lib_1.BundlingOutput.ARCHIVED,
281
+ local: {
282
+ tryBundle(outputDir) {
283
+ const osPlatform = os.platform();
284
+ exec(osPlatform === 'win32' ? 'cmd' : 'bash', [
285
+ osPlatform === 'win32' ? '/c' : '-c',
286
+ `esbuild --bundle --sourcemap=inline --sources-content=false --target=esnext --platform=node --format=esm --external:@aws-appsync/utils --out-extension:.js=.jar --outdir=${outputDir} ${fn.entryFile}`,
287
+ ], {
288
+ env: { ...process.env },
289
+ stdio: [
290
+ 'ignore',
291
+ process.stderr,
292
+ 'inherit', // inherit stderr
293
+ ],
294
+ windowsVerbatimArguments: osPlatform === 'win32',
295
+ });
296
+ return true;
297
+ },
269
298
  },
270
299
  },
271
- },
272
- }),
273
- runtime: aws_cdk_lib_1.aws_appsync.FunctionRuntime.JS_1_0_0,
274
- });
300
+ }),
301
+ runtime: aws_cdk_lib_1.aws_appsync.FunctionRuntime.JS_1_0_0,
302
+ });
303
+ pipelineConfig.push(jsFunction);
304
+ }
275
305
  new aws_cdk_lib_1.aws_appsync.Resolver(this, `Resolver${operationId}`, {
276
306
  api: this.api,
277
307
  typeName: typeName,
278
308
  fieldName: fieldName,
279
309
  runtime: aws_cdk_lib_1.aws_appsync.FunctionRuntime.JS_1_0_0,
280
- pipelineConfig: [jsFunction],
310
+ pipelineConfig,
281
311
  code: aws_cdk_lib_1.aws_appsync.Code.fromInline(`
282
312
  // The before step
283
- export function request(...args) {
284
- console.log(args);
313
+ export function request(ctx) {
314
+ console.log(ctx);
315
+ ${Object.entries((_a = options === null || options === void 0 ? void 0 : options.stashValues) !== null && _a !== void 0 ? _a : []).map(val => ` ctx.stash.${val[0]} = '${val[1]}'`).join('\n')}
285
316
  return {}
286
317
  }
287
318
 
@@ -335,13 +366,14 @@ export const handler = api.createAppSyncHandler<${argType}, ${typeName}['${field
335
366
  encoding: 'utf-8',
336
367
  });
337
368
  }
338
- createJSResolverFile(entryFile, typeName, fieldName) {
369
+ createJSResolverFile(fn, typeName, fieldName) {
339
370
  const argType = `${typeName}${uppercaseFirst(fieldName)}Args`;
340
- fs.writeFileSync(entryFile, `import { Context, util } from '@aws-appsync/utils';
371
+ const returnType = (fn.index == (fn.stepCount - 1)) ? `${typeName}['${fieldName}']` : 'any';
372
+ fs.writeFileSync(fn.entryFile, `import { Context, util } from '@aws-appsync/utils';
341
373
  import { ${typeName}, ${argType} } from '../generated/graphql.${this.props.apiName.toLowerCase()}-model.generated';
342
374
 
343
375
  /**
344
- * Request for ${typeName}.${fieldName}
376
+ * Request for ${typeName}.${fieldName} (Step: ${fn.name} ${fn.index + 1}/${fn.stepCount})
345
377
  */
346
378
  export function request(ctx: Context<${argType}>): any {
347
379
  console.log(ctx);
@@ -349,9 +381,9 @@ export function request(ctx: Context<${argType}>): any {
349
381
  }
350
382
 
351
383
  /**
352
- * Response for ${typeName}.${fieldName}
384
+ * Response for ${typeName}.${fieldName} (Step: ${fn.name} ${fn.index + 1}/${fn.stepCount})
353
385
  */
354
- export function response(ctx: Context<${argType}>): ${typeName}['${fieldName}'] {
386
+ export function response(ctx: Context<${argType}>): ${returnType} {
355
387
  console.log(ctx);
356
388
  return ctx.result.items;
357
389
  }`, {
@@ -381,4 +413,4 @@ function exec(cmd, args, options) {
381
413
  }
382
414
  return proc;
383
415
  }
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0QkFBNEI7QUFDNUIsaURBQTREO0FBQzVELHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsNkNBQWdLO0FBR2hLLHlDQUFtRDtBQUNuRCxpQ0FBd0M7QUFvQnhDLE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQVFoRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFVLEtBQXNCOztRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUhoRSxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQU1qRSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUF1QyxDQUFDO1FBRWpFLElBQUksZ0JBQXVELENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLGdCQUFnQixHQUFHO2dCQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLG9DQUFzQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQzVFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVztvQkFDNUIsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLHlCQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdEQsSUFBSSxFQUFFLEdBQUcs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QyxNQUFNLDBDQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsaUJBQWlCLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNySTtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ3hJO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU3Bhd25TeW5jT3B0aW9ucywgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBCdW5kbGluZ091dHB1dCwgRG9ja2VySW1hZ2UsIEZpbGVTeXN0ZW0sIFRhZ3MsIGF3c19hcHBzeW5jLCBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLCBhd3NfaWFtLCBhd3NfbG9ncywgYXdzX3JvdXRlNTMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vYXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJy4vZnVuYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhRbEFwaVByb3BzIGV4dGVuZHMgQmFzZUFwaVByb3BzIHtcbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnRsUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhc291cmNlIHRoZSBWVEwgcmVzb2x2ZXIgdGFyZ2V0c1xuICAgKi9cbiAgZGF0YVNvdXJjZTogYXdzX2FwcHN5bmMuQmFzZURhdGFTb3VyY2U7XG5cbiAgLyoqXG4gICAqIHN0cmluZyByZXBsYWNlbWVudHMgdG8gcHJvY2VzcyBvbiB0aGUgVlRMXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHZhcmlhYmxlIGV4cGFuc2lvbnNcbiAgICovXG4gIHZhcmlhYmxlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgY2xhc3MgR3JhcGhRbEFwaTxSRVNPTFZFUlM+IGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogYXdzX2FwcHN5bmMuR3JhcGhxbEFwaTtcbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlRGF0YVNvdXJjZT86IGF3c19hcHBzeW5jLkR5bmFtb0RiRGF0YVNvdXJjZTtcblxuICBwcml2YXRlIF9mdW5jdGlvbnM6IHsgW29wZXJhdGlvbklkOiBzdHJpbmddOiBMYW1iZGFGdW5jdGlvbiB9ID0ge307XG4gIHByaXZhdGUgY29nbml0b0F1dGg6IENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHByb3BzOiBHcmFwaFFsQXBpUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuY29nbml0b0F1dGggPSBwcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBDb2duaXRvQXV0aGVudGljYXRpb247XG5cbiAgICBsZXQgY3VzdG9tRG9tYWluTmFtZTogYXdzX2FwcHN5bmMuRG9tYWluT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5hcGlGUUROKSB7XG4gICAgICBjdXN0b21Eb21haW5OYW1lID0ge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgIGNlcnRpZmljYXRlOiBuZXcgYXdzX2NlcnRpZmljYXRlbWFuYWdlci5EbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ2VydCcsIHtcbiAgICAgICAgICBob3N0ZWRab25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICAgIHZhbGlkYXRpb246IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnModGhpcy5ob3N0ZWRab25lKSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuYXBpID0gbmV3IGF3c19hcHBzeW5jLkdyYXBocWxBcGkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogYCR7cHJvcHMuYXBpTmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgbG9nQ29uZmlnOiB7XG4gICAgICAgIGZpZWxkTG9nTGV2ZWw6IGF3c19hcHBzeW5jLkZpZWxkTG9nTGV2ZWwuQUxMLFxuICAgICAgICByZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuVFdPX01PTlRIUyxcbiAgICAgIH0sXG4gICAgICBzY2hlbWE6IGF3c19hcHBzeW5jLlNjaGVtYUZpbGUuZnJvbUFzc2V0KHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSksXG4gICAgICBkb21haW5OYW1lOiBjdXN0b21Eb21haW5OYW1lLFxuICAgICAgLi4udGhpcy5jb2duaXRvQXV0aCAmJiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHtcbiAgICAgICAgICBhZGRpdGlvbmFsQXV0aG9yaXphdGlvbk1vZGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhd3NfYXBwc3luYy5BdXRob3JpemF0aW9uVHlwZS5VU0VSX1BPT0wsXG4gICAgICAgICAgICAgIHVzZXJQb29sQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgdXNlclBvb2w6IHRoaXMuY29nbml0b0F1dGgudXNlcnBvb2wsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbjogYXdzX2FwcHN5bmMuVXNlclBvb2xEZWZhdWx0QWN0aW9uLkRFTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wgPyBbeyBhdXRob3JpemF0aW9uVHlwZTogYXdzX2FwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuSUFNIH1dIDogW10sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKGN1c3RvbURvbWFpbk5hbWUgJiYgdGhpcy5hcGkuYXBwU3luY0RvbWFpbk5hbWUpIHtcbiAgICAgIG5ldyBhd3Nfcm91dGU1My5DbmFtZVJlY29yZCh0aGlzLCAnRG5zUmVjb3JkJywge1xuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICByZWNvcmROYW1lOiBjdXN0b21Eb21haW5OYW1lLmRvbWFpbk5hbWUsXG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpLmFwcFN5bmNEb21haW5OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJzVYWEVycm9yJyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnNFhYRXJyb3InLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTAnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTknLFxuICAgIC8vICAgfSkpO1xuICAgIC8vIH1cblxuICAgIGlmIChwcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSkge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgYXdzX2FwcHN5bmMuRHluYW1vRGJEYXRhU291cmNlKHRoaXMsICdTaW5nbGVUYWJsZVNvdXJjZScsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgdGFibGU6IHByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlPy50YWJsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KGdyYW50ZWU6IGF3c19pYW0uSUdyYW50YWJsZSwgdHlwZU5hbWU6IFRZUEUsIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW10pOiB2b2lkIHtcbiAgICB0aGlzLmFwaS5ncmFudChncmFudGVlLCBhd3NfYXBwc3luYy5JYW1SZXNvdXJjZS5vZlR5cGUodHlwZU5hbWUgYXMgc3RyaW5nLCAuLi5maWVsZE5hbWVzIGFzIHN0cmluZ1tdKSwgJ2FwcHN5bmM6R3JhcGhRTCcpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3NVbkF1dGg8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBncmFudCB0byBDb2duaXRvIGlkZW50aXR5IHBvb2wgYXMgbm9uZSBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICB0aGlzLmdyYW50QWNjZXNzKHRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sLnVuYXV0aGVudGljYXRlZFJvbGUsIHR5cGVOYW1lLCAuLi5maWVsZE5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzQXV0aDxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdyYW50IHRvIENvZ25pdG8gaWRlbnRpdHkgcG9vbCBhcyBub25lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuZ3JhbnRBY2Nlc3ModGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wuYXV0aGVudGljYXRlZFJvbGUsIHR5cGVOYW1lLCAuLi5maWVsZE5hbWVzKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb248VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YF07XG4gIH1cblxuICBwdWJsaWMgYWRkTGFtYmRhUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGBUeXBlICR7dHlwZU5hbWUgYXMgc3RyaW5nfSBGaWVsZCAke2ZpZWxkTmFtZSBhcyBTdHJpbmd9IFJlc29sdmVyYDtcblxuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGAuL3NyYy9sYW1iZGEvJHtvcGVyYXRpb25JZH0udHNgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL2xhbWJkYS8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZSwgdHlwZU5hbWUgYXMgc3RyaW5nLCBmaWVsZE5hbWUgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCBgRm4ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB0aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYge1xuICAgICAgICB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0eXBlTmFtZSA9PT0gJ011dGF0aW9uJyxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9uczogdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBUYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5MYW1iZGFEYXRhU291cmNlKHRoaXMsIGBMYW1iZGFEUyR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIG5hbWU6IGBMYW1iZGFfJHt0eXBlTmFtZSBhcyBzdHJpbmd9XyR7ZmllbGROYW1lIGFzIFN0cmluZ31gLFxuICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgIH0pO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYlZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KHR5cGVOYW1lOiBUWVBFLCBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSwgb3B0aW9ucz86IE9taXQ8VnRsUmVzb2x2ZXJPcHRpb25zLCAnZGF0YVNvdXJjZSc+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEeW5hbW9EQiBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRWdGxSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB7XG4gICAgICBkYXRhU291cmNlOiB0aGlzLnRhYmxlRGF0YVNvdXJjZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRHluYW1vRGJKU1Jlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KHR5cGVOYW1lOiBUWVBFLCBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkSlNSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB0aGlzLnRhYmxlRGF0YVNvdXJjZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsIGRhdGFTb3VyY2U6IGF3c19hcHBzeW5jLkJhc2VEYXRhU291cmNlKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJEaXIgPSAnLi9zcmMvanMtcmVzb2x2ZXIvJztcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgJHtyZXNvbHZlckRpcn0vJHtvcGVyYXRpb25JZH0udHNgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMocmVzb2x2ZXJEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5jcmVhdGVKU1Jlc29sdmVyRmlsZShlbnRyeUZpbGUsIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QganNGdW5jdGlvbiA9IG5ldyBhd3NfYXBwc3luYy5BcHBzeW5jRnVuY3Rpb24odGhpcywgYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICBuYW1lOiBvcGVyYXRpb25JZC5yZXBsYWNlKC9cXC4vZywgJycpLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tQXNzZXQoJy4nLCB7XG4gICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuQ1VTVE9NLFxuICAgICAgICBhc3NldEhhc2g6IEZpbGVTeXN0ZW0uZmluZ2VycHJpbnQoZW50cnlGaWxlKSxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdkdW1teScpLCAvLyBXaWxsIG5ldmVyIGJlIHVzZWQgZHVlIHRvIGxvY2FsIGJ1bmRsaW5nXG4gICAgICAgICAgb3V0cHV0VHlwZTogQnVuZGxpbmdPdXRwdXQuQVJDSElWRUQsIC8vIFRPRE8gY3JlYXRlIHNpbmdsZSBmaWxlIGFzc2V0IHVwc3RyZWFtIHRvIGZpeCB0aGlzXG4gICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXIpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3NQbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7XG4gICAgICAgICAgICAgIGV4ZWMoXG4gICAgICAgICAgICAgICAgb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdjbWQnIDogJ2Jhc2gnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIG9zUGxhdGZvcm0gPT09ICd3aW4zMicgPyAnL2MnIDogJy1jJyxcbiAgICAgICAgICAgICAgICAgIGBlc2J1aWxkIC0tYnVuZGxlIC0tc291cmNlbWFwPWlubGluZSAtLXNvdXJjZXMtY29udGVudD1mYWxzZSAtLXRhcmdldD1lc25leHQgLS1wbGF0Zm9ybT1ub2RlIC0tZm9ybWF0PWVzbSAtLWV4dGVybmFsOkBhd3MtYXBwc3luYy91dGlscyAtLW91dC1leHRlbnNpb246LmpzPS5qYXIgLS1vdXRkaXI9JHtvdXRwdXREaXJ9ICR7ZW50cnlGaWxlfWAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYgfSxcbiAgICAgICAgICAgICAgICAgIHN0ZGlvOiBbIC8vIHNob3cgb3V0cHV0XG4gICAgICAgICAgICAgICAgICAgICdpZ25vcmUnLCAvLyBpZ25vcmUgc3RkaW9cbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIsIC8vIHJlZGlyZWN0IHN0ZG91dCB0byBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgJ2luaGVyaXQnLCAvLyBpbmhlcml0IHN0ZGVyclxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgcnVudGltZTogYXdzX2FwcHN5bmMuRnVuY3Rpb25SdW50aW1lLkpTXzFfMF8wLFxuICAgIH0pO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICBwaXBlbGluZUNvbmZpZzogW2pzRnVuY3Rpb25dLFxuICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tSW5saW5lKGBcbiAgICAvLyBUaGUgYmVmb3JlIHN0ZXBcbiAgICBleHBvcnQgZnVuY3Rpb24gcmVxdWVzdCguLi5hcmdzKSB7XG4gICAgICBjb25zb2xlLmxvZyhhcmdzKTtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIC8vIFRoZSBhZnRlciBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5wcmV2LnJlc3VsdFxuICAgIH1cbiAgYCksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLCBvcHRpb25zOiBWdGxSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG5cbiAgICBjb25zdCBtYXBwaW5nUmVxRmlsZSA9IGAuL3NyYy92dGwvJHtvcGVyYXRpb25JZH0ucmVxLnZ0bGA7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hcHBpbmdSZXFGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy92dGwvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG1hcHBpbmdSZXFGaWxlLCAnIyMgUmVxdWVzdCBtYXBwaW5nJywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZ1Jlc0ZpbGUgPSBgLi9zcmMvdnRsLyR7b3BlcmF0aW9uSWR9LnJlcy52dGxgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhtYXBwaW5nUmVzRmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvdnRsLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYXBwaW5nUmVzRmlsZSwgJyR1dGlsLnRvSnNvbigkY3R4LnJlc3VsdCknLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIH1cblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcih0aGlzLCBgUmVzb2x2ZXIke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUgYXMgc3RyaW5nLFxuICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgZGF0YVNvdXJjZTogb3B0aW9ucy5kYXRhU291cmNlLFxuICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogYXdzX2FwcHN5bmMuTWFwcGluZ1RlbXBsYXRlLmZyb21TdHJpbmcodGhpcy5zdWJzdFZhcmlhYmxlcyhmcy5yZWFkRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLCBvcHRpb25zLnZhcmlhYmxlcykpLFxuICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IGF3c19hcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic3RWYXJpYWJsZXMoZGF0YTogc3RyaW5nLCB2YXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgcmVzID0gZGF0YTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFycykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YXJzLCBuYW1lKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhcnNbbmFtZV07XG4gICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwkXFx7JHtuYW1lfVxcfWAsICdnJyksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFyZ1R5cGUgPSBgJHt0eXBlTmFtZX0ke3VwcGVyY2FzZUZpcnN0KGZpZWxkTmFtZSl9QXJnc2A7XG4gICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBpbXBvcnQgeyBhcGkgfSBmcm9tICdjZGstc2VydmVybGVzcy9saWIvbGFtYmRhJztcbmltcG9ydCB7ICR7dHlwZU5hbWV9LCAke2FyZ1R5cGV9IH0gZnJvbSAnLi4vZ2VuZXJhdGVkL2dyYXBocWwuJHt0aGlzLnByb3BzLmFwaU5hbWUudG9Mb3dlckNhc2UoKX0tbW9kZWwuZ2VuZXJhdGVkJztcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhcGkuY3JlYXRlQXBwU3luY0hhbmRsZXI8JHthcmdUeXBlfSwgJHt0eXBlTmFtZX1bJyR7ZmllbGROYW1lfSddPihhc3luYyAoY3R4KSA9PiB7XG4gIGN0eC5sb2dnZXIuaW5mbyhKU09OLnN0cmluZ2lmeShjdHguZXZlbnQpKTtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgeWV0IGltcGxlbWVudGVkJyk7XG59KTtgLCB7XG4gICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSlNSZXNvbHZlckZpbGUoZW50cnlGaWxlOiBzdHJpbmcsIHR5cGVOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJnVHlwZSA9IGAke3R5cGVOYW1lfSR7dXBwZXJjYXNlRmlyc3QoZmllbGROYW1lKX1BcmdzYDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGltcG9ydCB7IENvbnRleHQsIHV0aWwgfSBmcm9tICdAYXdzLWFwcHN5bmMvdXRpbHMnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG4vKipcbiAqIFJlcXVlc3QgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiBhbnkge1xuICBjb25zb2xlLmxvZyhjdHgpO1xuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzcG9uc2UoY3R4OiBDb250ZXh0PCR7YXJnVHlwZX0+KTogJHt0eXBlTmFtZX1bJyR7ZmllbGROYW1lfSddIHtcbiAgY29uc29sZS5sb2coY3R4KTtcbiAgcmV0dXJuIGN0eC5yZXN1bHQuaXRlbXM7XG59YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB1cHBlcmNhc2VGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpO1xufVxuXG4vKipcbiAqIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMvbGliL3V0aWwudHNcbiAqIGFzIGl0IGlzIG5vdCBleHBvcnRlZCBieSBhd3MtY2RrLWxpYlxuICovXG5mdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IFNwYXduU3luY09wdGlvbnMpIHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjbWQsIGFyZ3MsIG9wdGlvbnMpO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7XG4gICAgdGhyb3cgcHJvYy5lcnJvcjtcbiAgfVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIGlmIChwcm9jLnN0ZG91dCB8fCBwcm9jLnN0ZGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbU3RhdHVzICR7cHJvYy5zdGF0dXN9XSBzdGRvdXQ6ICR7cHJvYy5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpfVxcblxcblxcbnN0ZGVycjogJHtwcm9jLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCl9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9ICR7b3B0aW9ucz8uY3dkID8gYHJ1biBpbiBkaXJlY3RvcnkgJHtvcHRpb25zLmN3ZH1gIDogJyd9IGV4aXRlZCB3aXRoIHN0YXR1cyAke3Byb2Muc3RhdHVzfWApO1xuICB9XG5cbiAgcmV0dXJuIHByb2M7XG59XG5cbiJdfQ==
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0QkFBNEI7QUFDNUIsaURBQTREO0FBQzVELHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsNkNBQWdLO0FBR2hLLHlDQUFtRDtBQUNuRCxpQ0FBd0M7QUE0Q3hDLE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQVFoRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFVLEtBQXNCOztRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUhoRSxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQU1qRSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUF1QyxDQUFDO1FBRWpFLElBQUksZ0JBQXVELENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLGdCQUFnQixHQUFHO2dCQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLG9DQUFzQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQzVFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVztvQkFDNUIsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLHlCQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdEQsSUFBSSxFQUFFLEdBQUcs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cGF3blN5bmNPcHRpb25zLCBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IEFzc2V0SGFzaFR5cGUsIEJ1bmRsaW5nT3V0cHV0LCBEb2NrZXJJbWFnZSwgRmlsZVN5c3RlbSwgVGFncywgYXdzX2FwcHN5bmMsIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsIGF3c19pYW0sIGF3c19sb2dzLCBhd3Nfcm91dGU1MyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ29nbml0b0F1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jJztcblxuZXhwb3J0IGludGVyZmFjZSBHcmFwaFFsQXBpUHJvcHMgZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuICBkZWZpbml0aW9uRmlsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWdGxSZXNvbHZlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRhdGFzb3VyY2UgdGhlIFZUTCByZXNvbHZlciB0YXJnZXRzXG4gICAqL1xuICBkYXRhU291cmNlOiBhd3NfYXBwc3luYy5CYXNlRGF0YVNvdXJjZTtcblxuICAvKipcbiAgICogc3RyaW5nIHJlcGxhY2VtZW50cyB0byBwcm9jZXNzIG9uIHRoZSBWVExcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gdmFyaWFibGUgZXhwYW5zaW9uc1xuICAgKi9cbiAgdmFyaWFibGVzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNSZXNvbHZlck9wdGlvbnMge1xuICAvKipcbiAgICogVmFyaWFibGVzIHRoYXQgd2lsbCBiZSBwdXQgaW50byB0aGUgXCJzdGFzaFwiIG9mIHRoZSByZXNvbHZlciBwaXBlbGluZVxuICAgKlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBzdGFzaFZhbHVlcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIG5hbWUgb2YgdGhlIHBpcGVsaW5lIHN0ZXBzIHRvIGNyZWF0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9ubHkgYSBkZWZhdWx0IHN0ZXAgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVN0ZXBOYW1lcz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSnNSZXNvbHZlckNvbmZpZyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgc3RlcENvdW50OiBudW1iZXI7XG4gIGVudHJ5RmlsZTogc3RyaW5nO1xuICBmdW5jdGlvbklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaFFsQXBpPFJFU09MVkVSUz4gZXh0ZW5kcyBCYXNlQXBpIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhd3NfYXBwc3luYy5HcmFwaHFsQXBpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVEYXRhU291cmNlPzogYXdzX2FwcHN5bmMuRHluYW1vRGJEYXRhU291cmNlO1xuXG4gIHByaXZhdGUgX2Z1bmN0aW9uczogeyBbb3BlcmF0aW9uSWQ6IHN0cmluZ106IExhbWJkYUZ1bmN0aW9uIH0gPSB7fTtcbiAgcHJpdmF0ZSBjb2duaXRvQXV0aDogQ29nbml0b0F1dGhlbnRpY2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEdyYXBoUWxBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jb2duaXRvQXV0aCA9IHByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lOiBhd3NfYXBwc3luYy5Eb21haW5PcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFwaUZRRE4pIHtcbiAgICAgIGN1c3RvbURvbWFpbk5hbWUgPSB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgY2VydGlmaWNhdGU6IG5ldyBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICAgIGhvc3RlZFpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgICAgdmFsaWRhdGlvbjogYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5hcGkgPSBuZXcgYXdzX2FwcHN5bmMuR3JhcGhxbEFwaSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiBgJHtwcm9wcy5hcGlOYW1lfSBbJHtwcm9wcy5zdGFnZU5hbWV9XWAsXG4gICAgICBsb2dDb25maWc6IHtcbiAgICAgICAgZmllbGRMb2dMZXZlbDogYXdzX2FwcHN5bmMuRmllbGRMb2dMZXZlbC5BTEwsXG4gICAgICAgIHJldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5UV09fTU9OVEhTLFxuICAgICAgfSxcbiAgICAgIHNjaGVtYTogYXdzX2FwcHN5bmMuU2NoZW1hRmlsZS5mcm9tQXNzZXQocHJvcHMuZGVmaW5pdGlvbkZpbGVOYW1lKSxcbiAgICAgIGRvbWFpbk5hbWU6IGN1c3RvbURvbWFpbk5hbWUsXG4gICAgICAuLi50aGlzLmNvZ25pdG9BdXRoICYmIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbkNvbmZpZzoge1xuICAgICAgICAgIGFkZGl0aW9uYWxBdXRob3JpemF0aW9uTW9kZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvblR5cGU6IGF3c19hcHBzeW5jLkF1dGhvcml6YXRpb25UeXBlLlVTRVJfUE9PTCxcbiAgICAgICAgICAgICAgdXNlclBvb2xDb25maWc6IHtcbiAgICAgICAgICAgICAgICB1c2VyUG9vbDogdGhpcy5jb2duaXRvQXV0aC51c2VycG9vbCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0QWN0aW9uOiBhd3NfYXBwc3luYy5Vc2VyUG9vbERlZmF1bHRBY3Rpb24uREVOWSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCA/IFt7IGF1dGhvcml6YXRpb25UeXBlOiBhd3NfYXBwc3luYy5BdXRob3JpemF0aW9uVHlwZS5JQU0gfV0gOiBbXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAoY3VzdG9tRG9tYWluTmFtZSAmJiB0aGlzLmFwaS5hcHBTeW5jRG9tYWluTmFtZSkge1xuICAgICAgbmV3IGF3c19yb3V0ZTUzLkNuYW1lUmVjb3JkKHRoaXMsICdEbnNSZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgIHJlY29yZE5hbWU6IGN1c3RvbURvbWFpbk5hbWUuZG9tYWluTmFtZSxcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGkuYXBwU3luY0RvbWFpbk5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiAoKHByb3BzLm1vbml0b3JpbmcgPz8gdHJ1ZSkgJiYgdGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnNVhYRXJyb3InLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICc0WFhFcnJvcicsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5MCcsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5NScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICdMYXRlbmN5JyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5OScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlKSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5EeW5hbW9EYkRhdGFTb3VyY2UodGhpcywgJ1NpbmdsZVRhYmxlU291cmNlJywge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICB0YWJsZTogcHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmU/LnRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3M8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oZ3JhbnRlZTogYXdzX2lhbS5JR3JhbnRhYmxlLCB0eXBlTmFtZTogVFlQRSwgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXSk6IHZvaWQge1xuICAgIHRoaXMuYXBpLmdyYW50KGdyYW50ZWUsIGF3c19hcHBzeW5jLklhbVJlc291cmNlLm9mVHlwZSh0eXBlTmFtZSBhcyBzdHJpbmcsIC4uLmZpZWxkTmFtZXMgYXMgc3RyaW5nW10pLCAnYXBwc3luYzpHcmFwaFFMJyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2Vzc1VuQXV0aDxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdyYW50IHRvIENvZ25pdG8gaWRlbnRpdHkgcG9vbCBhcyBub25lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuZ3JhbnRBY2Nlc3ModGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wudW5hdXRoZW50aWNhdGVkUm9sZSwgdHlwZU5hbWUsIC4uLmZpZWxkTmFtZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3NBdXRoPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KHR5cGVOYW1lOiBUWVBFLCAuLi5maWVsZE5hbWVzOiAoa2V5b2YgRklFTERUWVBFKVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ3JhbnQgdG8gQ29nbml0byBpZGVudGl0eSBwb29sIGFzIG5vbmUgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgdGhpcy5ncmFudEFjY2Vzcyh0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbC5hdXRoZW50aWNhdGVkUm9sZSwgdHlwZU5hbWUsIC4uLmZpZWxkTmFtZXMpO1xuICB9XG5cblxuICAvKipcbiAgICogZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbkZvck9wZXJhdGlvbjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uc1tgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gXTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRMYW1iZGFSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3QgZW50cnlGaWxlID0gYC4vc3JjL2xhbWJkYS8ke29wZXJhdGlvbklkfS50c2A7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5RmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvbGFtYmRhLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5jcmVhdGVFbnRyeUZpbGUoZW50cnlGaWxlLCB0eXBlTmFtZSBhcyBzdHJpbmcsIGZpZWxkTmFtZSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGBGbiR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLnByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IHRoaXMucHJvcHMuYWRkaXRpb25hbEVudixcbiAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICBkZXNjcmlwdGlvbjogYFske3RoaXMucHJvcHMuc3RhZ2VOYW1lfV0gJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgLi4udGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiAmJiB7XG4gICAgICAgIHVzZXJQb29sOiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBDb2duaXRvQXV0aGVudGljYXRpb24pLnVzZXJwb29sLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUgJiYge1xuICAgICAgICB0YWJsZTogdGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZS50YWJsZSxcbiAgICAgICAgdGFibGVXcml0ZXM6IHR5cGVOYW1lID09PSAnTXV0YXRpb24nLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXNzZXRDZG4gJiYge1xuICAgICAgICBhc3NldERvbWFpbk5hbWU6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXREb21haW5OYW1lLFxuICAgICAgICBhc3NldEJ1Y2tldDogdGhpcy5wcm9wcy5hc3NldENkbi5hc3NldEJ1Y2tldCxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFPcHRpb25zOiB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgICBsYW1iZGFUcmFjaW5nOiB0aGlzLnByb3BzLmxhbWJkYVRyYWNpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbklkXSA9IGZuO1xuICAgIFRhZ3Mub2YoZm4pLmFkZCgnR3JhcGhRTCcsIGRlc2NyaXB0aW9uKTtcblxuICAgIC8vIGlmICh0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFEdXJhdGlvbnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNEdXJhdGlvbigpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFJbnZva2VzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljSW52b2NhdGlvbnMoKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRXJyb3JzKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY1Rocm90dGxlcygpKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IGF3c19hcHBzeW5jLkxhbWJkYURhdGFTb3VyY2UodGhpcywgYExhbWJkYURTJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgbmFtZTogYExhbWJkYV8ke3R5cGVOYW1lIGFzIHN0cmluZ31fJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWAsXG4gICAgICBsYW1iZGFGdW5jdGlvbjogZm4sXG4gICAgfSk7XG5cbiAgICBuZXcgYXdzX2FwcHN5bmMuUmVzb2x2ZXIodGhpcywgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtb0RiVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLCBvcHRpb25zPzogT21pdDxWdGxSZXNvbHZlck9wdGlvbnMsICdkYXRhU291cmNlJz4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhU291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtb0RCIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0aGlzLmFkZFZ0bFJlc29sdmVyKHR5cGVOYW1lLCBmaWVsZE5hbWUsIHtcbiAgICAgIGRhdGFTb3VyY2U6IHRoaXMudGFibGVEYXRhU291cmNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYkpTUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLCBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhU291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtb0RCIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEpTUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwgdGhpcy50YWJsZURhdGFTb3VyY2UsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdGFzaFZhbHVlczoge1xuICAgICAgICAuLi5vcHRpb25zPy5zdGFzaFZhbHVlcyA/PyB7fSxcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUhLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsIGRhdGFTb3VyY2U6IGF3c19hcHBzeW5jLkJhc2VEYXRhU291cmNlLCBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgVHlwZSAke3R5cGVOYW1lIGFzIHN0cmluZ30gRmllbGQgJHtmaWVsZE5hbWUgYXMgU3RyaW5nfSBSZXNvbHZlcmA7XG5cbiAgICBjb25zdCByZXNvbHZlckRpciA9ICcuL3NyYy9qcy1yZXNvbHZlci8nO1xuICAgIGNvbnN0IGZ1bmN0aW9uczogSnNSZXNvbHZlckNvbmZpZ1tdID0gW107XG5cbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMgfHwgb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcy5sZW5ndGggPT0gMCkge1xuICAgICAgZnVuY3Rpb25zLnB1c2goe1xuICAgICAgICBuYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBzdGVwQ291bnQ6IDEsXG4gICAgICAgIGVudHJ5RmlsZTogYCR7cmVzb2x2ZXJEaXJ9LyR7b3BlcmF0aW9uSWR9LnRzYCxcbiAgICAgICAgZnVuY3Rpb25JZDogYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfWAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVuY3Rpb25zLnB1c2goLi4ub3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcy5tYXAoKG5hbWUsIGluZGV4KSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgc3RlcENvdW50OiBvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzIS5sZW5ndGgsXG4gICAgICAgIGVudHJ5RmlsZTogYCR7cmVzb2x2ZXJEaXJ9LyR7b3BlcmF0aW9uSWR9LiR7bmFtZX0udHNgLFxuICAgICAgICBmdW5jdGlvbklkOiBgSlNGdW5jdGlvbiR7b3BlcmF0aW9uSWR9JHtuYW1lfWAsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBpcGVsaW5lQ29uZmlnID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGZuIG9mIGZ1bmN0aW9ucykge1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGZuLmVudHJ5RmlsZSkpIHtcbiAgICAgICAgZnMubWtkaXJTeW5jKHJlc29sdmVyRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5jcmVhdGVKU1Jlc29sdmVyRmlsZShmbiwgdHlwZU5hbWUgYXMgc3RyaW5nLCBmaWVsZE5hbWUgYXMgc3RyaW5nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QganNGdW5jdGlvbiA9IG5ldyBhd3NfYXBwc3luYy5BcHBzeW5jRnVuY3Rpb24odGhpcywgZm4uZnVuY3Rpb25JZCwge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICBuYW1lOiBvcGVyYXRpb25JZC5yZXBsYWNlKC9cXC4vZywgJycpLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tQXNzZXQoJy4nLCB7XG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogQXNzZXRIYXNoVHlwZS5DVVNUT00sXG4gICAgICAgICAgYXNzZXRIYXNoOiBGaWxlU3lzdGVtLmZpbmdlcnByaW50KGZuLmVudHJ5RmlsZSksXG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ2R1bW15JyksIC8vIFdpbGwgbmV2ZXIgYmUgdXNlZCBkdWUgdG8gbG9jYWwgYnVuZGxpbmdcbiAgICAgICAgICAgIG91dHB1dFR5cGU6IEJ1bmRsaW5nT3V0cHV0LkFSQ0hJVkVELCAvLyBUT0RPIGNyZWF0ZSBzaW5nbGUgZmlsZSBhc3NldCB1cHN0cmVhbSB0byBmaXggdGhpc1xuICAgICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xuICAgICAgICAgICAgICAgIGV4ZWMoXG4gICAgICAgICAgICAgICAgICBvc1BsYXRmb3JtID09PSAnd2luMzInID8gJ2NtZCcgOiAnYmFzaCcsXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIG9zUGxhdGZvcm0gPT09ICd3aW4zMicgPyAnL2MnIDogJy1jJyxcbiAgICAgICAgICAgICAgICAgICAgYGVzYnVpbGQgLS1idW5kbGUgLS1zb3VyY2VtYXA9aW5saW5lIC0tc291cmNlcy1jb250ZW50PWZhbHNlIC0tdGFyZ2V0PWVzbmV4dCAtLXBsYXRmb3JtPW5vZGUgLS1mb3JtYXQ9ZXNtIC0tZXh0ZXJuYWw6QGF3cy1hcHBzeW5jL3V0aWxzIC0tb3V0LWV4dGVuc2lvbjouanM9LmphciAtLW91dGRpcj0ke291dHB1dERpcn0gJHtmbi5lbnRyeUZpbGV9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiB9LFxuICAgICAgICAgICAgICAgICAgICBzdGRpbzogWyAvLyBzaG93IG91dHB1dFxuICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUnLCAvLyBpZ25vcmUgc3RkaW9cbiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZGVyciwgLy8gcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyclxuICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0JywgLy8gaW5oZXJpdCBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvc1BsYXRmb3JtID09PSAnd2luMzInLFxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bnRpbWU6IGF3c19hcHBzeW5jLkZ1bmN0aW9uUnVudGltZS5KU18xXzBfMCxcbiAgICAgIH0pO1xuICAgICAgcGlwZWxpbmVDb25maWcucHVzaChqc0Z1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBuZXcgYXdzX2FwcHN5bmMuUmVzb2x2ZXIodGhpcywgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIHJ1bnRpbWU6IGF3c19hcHBzeW5jLkZ1bmN0aW9uUnVudGltZS5KU18xXzBfMCxcbiAgICAgIHBpcGVsaW5lQ29uZmlnLFxuICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tSW5saW5lKGBcbiAgICAvLyBUaGUgYmVmb3JlIHN0ZXBcbiAgICBleHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGN0eCk7XG4ke09iamVjdC5lbnRyaWVzKG9wdGlvbnM/LnN0YXNoVmFsdWVzID8/IFtdKS5tYXAodmFsID0+IGAgICAgICBjdHguc3Rhc2guJHt2YWxbMF19ID0gJyR7dmFsWzFdfSdgKS5qb2luKCdcXG4nKX1cbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIC8vIFRoZSBhZnRlciBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5wcmV2LnJlc3VsdFxuICAgIH1cbiAgYCksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLCBvcHRpb25zOiBWdGxSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG5cbiAgICBjb25zdCBtYXBwaW5nUmVxRmlsZSA9IGAuL3NyYy92dGwvJHtvcGVyYXRpb25JZH0ucmVxLnZ0bGA7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hcHBpbmdSZXFGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy92dGwvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG1hcHBpbmdSZXFGaWxlLCAnIyMgUmVxdWVzdCBtYXBwaW5nJywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZ1Jlc0ZpbGUgPSBgLi9zcmMvdnRsLyR7b3BlcmF0aW9uSWR9LnJlcy52dGxgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhtYXBwaW5nUmVzRmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvdnRsLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYXBwaW5nUmVzRmlsZSwgJyR1dGlsLnRvSnNvbigkY3R4LnJlc3VsdCknLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIH1cblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcih0aGlzLCBgUmVzb2x2ZXIke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUgYXMgc3RyaW5nLFxuICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgZGF0YVNvdXJjZTogb3B0aW9ucy5kYXRhU291cmNlLFxuICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogYXdzX2FwcHN5bmMuTWFwcGluZ1RlbXBsYXRlLmZyb21TdHJpbmcodGhpcy5zdWJzdFZhcmlhYmxlcyhmcy5yZWFkRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLCBvcHRpb25zLnZhcmlhYmxlcykpLFxuICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IGF3c19hcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic3RWYXJpYWJsZXMoZGF0YTogc3RyaW5nLCB2YXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgcmVzID0gZGF0YTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFycykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YXJzLCBuYW1lKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhcnNbbmFtZV07XG4gICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwkXFx7JHtuYW1lfVxcfWAsICdnJyksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFyZ1R5cGUgPSBgJHt0eXBlTmFtZX0ke3VwcGVyY2FzZUZpcnN0KGZpZWxkTmFtZSl9QXJnc2A7XG4gICAgZnMud3JpdGVGaWxlU3luYyhlbnRyeUZpbGUsIGBpbXBvcnQgeyBhcGkgfSBmcm9tICdjZGstc2VydmVybGVzcy9saWIvbGFtYmRhJztcbmltcG9ydCB7ICR7dHlwZU5hbWV9LCAke2FyZ1R5cGV9IH0gZnJvbSAnLi4vZ2VuZXJhdGVkL2dyYXBocWwuJHt0aGlzLnByb3BzLmFwaU5hbWUudG9Mb3dlckNhc2UoKX0tbW9kZWwuZ2VuZXJhdGVkJztcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhcGkuY3JlYXRlQXBwU3luY0hhbmRsZXI8JHthcmdUeXBlfSwgJHt0eXBlTmFtZX1bJyR7ZmllbGROYW1lfSddPihhc3luYyAoY3R4KSA9PiB7XG4gIGN0eC5sb2dnZXIuaW5mbyhKU09OLnN0cmluZ2lmeShjdHguZXZlbnQpKTtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgeWV0IGltcGxlbWVudGVkJyk7XG59KTtgLCB7XG4gICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSlNSZXNvbHZlckZpbGUoZm46IEpzUmVzb2x2ZXJDb25maWcsIHR5cGVOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJnVHlwZSA9IGAke3R5cGVOYW1lfSR7dXBwZXJjYXNlRmlyc3QoZmllbGROYW1lKX1BcmdzYDtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gKGZuLmluZGV4ID09IChmbi5zdGVwQ291bnQgLSAxKSkgPyBgJHt0eXBlTmFtZX1bJyR7ZmllbGROYW1lfSddYCA6ICdhbnknO1xuXG4gICAgZnMud3JpdGVGaWxlU3luYyhmbi5lbnRyeUZpbGUsIGBpbXBvcnQgeyBDb250ZXh0LCB1dGlsIH0gZnJvbSAnQGF3cy1hcHBzeW5jL3V0aWxzJztcbmltcG9ydCB7ICR7dHlwZU5hbWV9LCAke2FyZ1R5cGV9IH0gZnJvbSAnLi4vZ2VuZXJhdGVkL2dyYXBocWwuJHt0aGlzLnByb3BzLmFwaU5hbWUudG9Mb3dlckNhc2UoKX0tbW9kZWwuZ2VuZXJhdGVkJztcblxuLyoqXG4gKiBSZXF1ZXN0IGZvciAke3R5cGVOYW1lfS4ke2ZpZWxkTmFtZX0gKFN0ZXA6ICR7Zm4ubmFtZX0gJHtmbi5pbmRleCArIDF9LyR7Zm4uc3RlcENvdW50fSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoY3R4OiBDb250ZXh0PCR7YXJnVHlwZX0+KTogYW55IHtcbiAgY29uc29sZS5sb2coY3R4KTtcbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciAke3R5cGVOYW1lfS4ke2ZpZWxkTmFtZX0gKFN0ZXA6ICR7Zm4ubmFtZX0gJHtmbi5pbmRleCArIDF9LyR7Zm4uc3RlcENvdW50fSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlKGN0eDogQ29udGV4dDwke2FyZ1R5cGV9Pik6ICR7cmV0dXJuVHlwZX0ge1xuICBjb25zb2xlLmxvZyhjdHgpO1xuICByZXR1cm4gY3R4LnJlc3VsdC5pdGVtcztcbn1gLCB7XG4gICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICB9KTtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIHVwcGVyY2FzZUZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvbWFpbi9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcy9saWIvdXRpbC50c1xuICogYXMgaXQgaXMgbm90IGV4cG9ydGVkIGJ5IGF3cy1jZGstbGliXG4gKi9cbmZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogU3Bhd25TeW5jT3B0aW9ucykge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNtZCwgYXJncywgb3B0aW9ucyk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHtcbiAgICB0aHJvdyBwcm9jLmVycm9yO1xuICB9XG5cbiAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgaWYgKHByb2Muc3Rkb3V0IHx8IHByb2Muc3RkZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtTdGF0dXMgJHtwcm9jLnN0YXR1c31dIHN0ZG91dDogJHtwcm9jLnN0ZG91dD8udG9TdHJpbmcoKS50cmltKCl9XFxuXFxuXFxuc3RkZXJyOiAke3Byb2Muc3RkZXJyPy50b1N0cmluZygpLnRyaW0oKX1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2NtZH0gJHthcmdzLmpvaW4oJyAnKX0gJHtvcHRpb25zPy5jd2QgPyBgcnVuIGluIGRpcmVjdG9yeSAke29wdGlvbnMuY3dkfWAgOiAnJ30gZXhpdGVkIHdpdGggc3RhdHVzICR7cHJvYy5zdGF0dXN9YCk7XG4gIH1cblxuICByZXR1cm4gcHJvYztcbn1cblxuIl19
package/package.json CHANGED
@@ -36,31 +36,31 @@
36
36
  "@hapi/boom": "^10.0.1",
37
37
  "@taimos/projen": "^0.0.187",
38
38
  "@types/aws-lambda": "^8.10.119",
39
- "@types/jest": "^29.5.3",
39
+ "@types/jest": "^29.5.4",
40
40
  "@types/js-yaml": "^4.0.5",
41
41
  "@types/jsonwebtoken": "^9.0.2",
42
42
  "@types/jwk-to-pem": "^2.0.1",
43
43
  "@types/lambda-log": "^2.2.1",
44
44
  "@types/node": "^16",
45
- "@types/uuid": "^9.0.2",
46
- "@typescript-eslint/eslint-plugin": "^5",
47
- "@typescript-eslint/parser": "^5",
45
+ "@types/uuid": "^9.0.3",
46
+ "@typescript-eslint/eslint-plugin": "^6",
47
+ "@typescript-eslint/parser": "^6",
48
48
  "aws-cdk-lib": "2.60.0",
49
49
  "constructs": "10.0.5",
50
- "dynamodb-onetable": "~2.6.2",
50
+ "dynamodb-onetable": "~2.6.4",
51
51
  "eslint": "^8",
52
52
  "eslint-import-resolver-node": "^0.3.9",
53
53
  "eslint-import-resolver-typescript": "^3.6.0",
54
- "eslint-plugin-import": "^2.28.0",
55
- "jest": "^29.6.2",
54
+ "eslint-plugin-import": "^2.28.1",
55
+ "jest": "^29.6.4",
56
56
  "jest-junit": "^15",
57
57
  "npm-check-updates": "^16",
58
58
  "openapi-typescript": "6.2.1",
59
- "projen": "^0.72.12",
59
+ "projen": "^0.73.4",
60
60
  "standard-version": "^9",
61
61
  "ts-jest": "^29.1.1",
62
62
  "ts-node": "^10.9.1",
63
- "typedoc": "^0.24.8",
63
+ "typedoc": "^0.25.0",
64
64
  "typescript": "^4.4.0"
65
65
  },
66
66
  "peerDependencies": {
@@ -71,13 +71,13 @@
71
71
  "openapi-typescript": "^6.2.1"
72
72
  },
73
73
  "dependencies": {
74
- "axios": "^1.4.0",
74
+ "axios": "^1.5.0",
75
75
  "date-fns": "^2.30.0",
76
76
  "js-yaml": "^4.1.0",
77
- "jsonwebtoken": "^9.0.1",
77
+ "jsonwebtoken": "^9.0.2",
78
78
  "jwk-to-pem": "^2.0.5",
79
79
  "lambda-log": "^3.1.0",
80
- "projen": "^0.72.12",
80
+ "projen": "^0.73.4",
81
81
  "uuid": "^9.0.0"
82
82
  },
83
83
  "keywords": [
@@ -92,7 +92,7 @@
92
92
  },
93
93
  "main": "lib/index.js",
94
94
  "license": "Apache-2.0",
95
- "version": "2.5.0",
95
+ "version": "2.6.1",
96
96
  "jest": {
97
97
  "testMatch": [
98
98
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",