@buildvision/nest-sdk-generator 1.2.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,7 @@ const module_1 = require("./module");
13
13
  function analyzeControllers(controllers, absoluteSrcPath, project) {
14
14
  /** Hierarchised SDK informations */
15
15
  const collected = new Map();
16
+ const usedControllerNames = new Set();
16
17
  /**
17
18
  * Modules cache: contains for a given directory the nearest module file's path and name
18
19
  * This allows to avoid having to analyze the whole directory structure for each controller
@@ -70,10 +71,17 @@ function analyzeControllers(controllers, absoluteSrcPath, project) {
70
71
  if (metadata.registrationName in {}) {
71
72
  (0, logging_1.panic)(`Detected controller whose registration name {yellow} collides with a JavaScript's native object property`, metadata.registrationName);
72
73
  }
74
+ // Ensure the each controller has a unique name across modules
75
+ if (usedControllerNames.has(metadata.camelClassName)) {
76
+ (0, logging_1.panic)(`Detected two controllers with the same name {yellow}. Second occurrence found in {yellow}`, metadata.registrationName, metadata.path);
77
+ }
78
+ else {
79
+ usedControllerNames.add(metadata.camelClassName);
80
+ }
73
81
  moduleSdkInfos.set(metadata.camelClassName, metadata);
74
82
  }
75
83
  });
76
84
  return collected;
77
85
  }
78
86
  exports.analyzeControllers = analyzeControllers;
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW5hbHl6ZXIvY29udHJvbGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCx5QkFBd0I7QUFDeEIsNkJBQTRCO0FBRTVCLHdDQUF1RDtBQUN2RCxvQ0FBd0M7QUFDeEMsNkNBQStEO0FBQy9ELHFDQUF3QztBQUl4QyxTQUFnQixrQkFBa0IsQ0FBQyxXQUFxQixFQUFFLGVBQXVCLEVBQUUsT0FBZ0I7SUFDakcsb0NBQW9DO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFBO0lBRS9EOzs7T0FHRztJQUNILE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBRTlDOzs7O09BSUc7SUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBRXJELElBQUEsZUFBSyxFQUFDLG1DQUFtQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUU5RCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBRXBGLElBQUEsZUFBSyxFQUNILDZDQUE2QyxFQUM3Qyw0QkFBNEIsRUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFDaEMsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDUixDQUFBO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRXJELElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFM0MseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFD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
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW5hbHl6ZXIvY29udHJvbGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCx5QkFBd0I7QUFDeEIsNkJBQTRCO0FBRTVCLHdDQUF1RDtBQUN2RCxvQ0FBd0M7QUFDeEMsNkNBQStEO0FBQy9ELHFDQUF3QztBQUl4QyxTQUFnQixrQkFBa0IsQ0FBQyxXQUFxQixFQUFFLGVBQXVCLEVBQUUsT0FBZ0I7SUFDakcsb0NBQW9DO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFBO0lBQy9ELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtJQUU3Qzs7O09BR0c7SUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUU5Qzs7OztPQUlHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUVyRCxJQUFBLGVBQUssRUFBQyxtQ0FBbUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFOUQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUVwRixJQUFBLGVBQUssRUFDSCw2Q0FBNkMsRUFDN0MsNEJBQTRCLEVBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQ2hDLHNCQUFzQixFQUN0QixPQUFPLENBQ1IsQ0FBQTtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUVyRCxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFB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
@@ -8,6 +8,7 @@ const path = require("path");
8
8
  const ts_morph_1 = require("ts-morph");
9
9
  const logging_1 = require("../logging");
10
10
  const classdeps_1 = require("./classdeps");
11
+ const params_1 = require("./params");
11
12
  const typedeps_1 = require("./typedeps");
12
13
  /** Valid extensions for TypeScript module files */
13
14
  exports.MODULE_EXTENSIONS = ['.ts', '.d.ts', '.tsx', '.d.tsx', '.js', '.jsx'];
@@ -323,27 +324,15 @@ function flattenSdkResolvedTypes(sdkModules) {
323
324
  for (const module of sdkModules.values()) {
324
325
  for (const controller of module.values()) {
325
326
  for (const method of controller.methods.values()) {
326
- const { parameters: args, query, body } = method.params;
327
+ const { routeParams, queryParams, bodyParams } = method.params;
327
328
  flattened.push(method.returnType);
328
- if (args) {
329
- flattened.push(...args.values());
330
- }
331
- if (query) {
332
- flattened.push(...query.values());
333
- }
334
- if (!body) {
335
- continue;
336
- }
337
- if (body.full) {
338
- flattened.push(body.type);
339
- }
340
- else {
341
- flattened.push(...body.fields.values());
342
- }
329
+ flattened.push(...(0, params_1.getParamResolvedTypes)(routeParams));
330
+ flattened.push(...(0, params_1.getParamResolvedTypes)(queryParams));
331
+ flattened.push(...(0, params_1.getParamResolvedTypes)(bodyParams));
343
332
  }
344
333
  }
345
334
  }
346
335
  return flattened;
347
336
  }
348
337
  exports.flattenSdkResolvedTypes = flattenSdkResolvedTypes;
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FuYWx5emVyL2V4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILDZCQUE0QjtBQUM1Qix1Q0FBb0Q7QUFFcEQsd0NBQW9FO0FBQ3BFLDJDQUE4QztBQUU5Qyx5Q0FBNkY7QUFFN0YsbURBQW1EO0FBQ3RDLFFBQUEsaUJBQWlCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBa0NsRjs7R0FFRztBQUNILE1BQWEsY0FBYztJQUN6QjtJQUNFLHVCQUF1QjtJQUNQLE9BQWdCO0lBRWhDLDJCQUEyQjtJQUNYLGVBQXVCO0lBRXZDLGdEQUFnRDtJQUNoQyxVQUE0QjtJQUU1QyxzQkFBc0I7SUFDTixZQUFtQyxJQUFJLEdBQUcsRUFBRTtRQVQ1QyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBR2hCLG9CQUFlLEdBQWYsZUFBZSxDQUFRO1FBR3ZCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBRzVCLGNBQVMsR0FBVCxTQUFTLENBQW1DO0lBQzNELENBQUM7SUFFSjs7T0FFRztJQUNILGdCQUFnQixDQUFDLEdBQXdCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNsRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxHQUF3Qjs7UUFDdkMsT0FBTyxNQUFBLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQywwQ0FBRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQ0FBSSxJQUFJLENBQUE7SUFDeEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwrQkFBK0IsQ0FBQyxHQUFpQjtRQUMvQyxLQUFLLE1BQU0sR0FBRyxJQUFJLHlCQUFpQixFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxFQUFFO2dCQUNuRCxPQUFPLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUE7YUFDbkM7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwyQkFBMkIsQ0FBQyxHQUFpQjs7UUFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSx5QkFBaUIsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsMENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUU5RSxJQUFJLEdBQUcsRUFBRTtnQkFDUCxPQUFPLEdBQUcsQ0FBQTthQUNYO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsR0FBd0IsRUFBRSxTQUF3QjtRQUN0RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFaEQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDNUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDNUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1NBQ25DO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3QkFBd0IsQ0FBQyxHQUFpQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDMUMsSUFBQSxxQkFBVyxFQUNULGdIQUFnSCxFQUNoSCxHQUFHLENBQUMsaUJBQWlCLENBQ3RCLENBQUE7U0FDRjtRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBRW5GLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQTtTQUMzQjtRQUVELElBQUksZ0JBQWdCLEdBQWtCLElBQUksQ0FBQTtRQUUxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLHlCQUFpQixFQUFFO1lBQ25DLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQTtnQkFDMUQsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQTthQUMvQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLFNBQVE7YUFDVDtTQUNGO1FBRUQsT0FBTyxDQUNMLGdCQUFnQixhQUFoQixnQkFBZ0IsY0FBaEIsZ0JBQWdCLEdBQ2hCLElBQUksS0FBSyxDQUNQLElBQUEsZ0JBQU0sRUFBQyxpRkFBaUYsRUFBRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUMvSCxDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsR0FBaUIsRUFBRSxZQUFzQixFQUFFOztRQUNyRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDMUMsSUFBQSxxQkFBVyxFQUNULGdIQUFnSCxFQUNoSCxHQUFHLENBQUMsaUJBQWlCLENBQ3RCLENBQUE7U0FDRjtRQUVELGtEQUFrRDtRQUNsRCxzR0FBc0c7UUFDdEcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFFbkYsc0RBQXNEO1FBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sTUFBTSxDQUFBO1NBQ2Q7UUFFRCxnRkFBZ0Y7UUFDaEYsSUFBSSxXQUFXLEdBQWdDLElBQUksQ0FBQTtRQUVuRCxLQUFLLE1BQU0sR0FBRyxJQUFJLHlCQUFpQixFQUFFO1lBQ25DLElBQUk7Z0JBQ0YsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUE7YUFDeEc7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixTQUFRO2FBQ1Q7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxJQUFJLEtBQUssQ0FDZCxJQUFBLGdCQUFNLEVBQUMsaUZBQWlGLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FDL0gsQ0FBQTtTQUNGO1FBRUQsTUFBTSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtRQUU1QyxnREFBZ0Q7UUFDaEQsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDcEgsSUFBQSxlQUFLLEVBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDaEMsa0dBQWtHLEVBQ3BHLEdBQUcsQ0FBQyxRQUFRLEVBQ1osZ0JBQWdCLENBQ2pCLENBQUE7Z0JBRUQsTUFBTSxTQUFTLEdBQWtCO29CQUMvQixPQUFPLEVBQUUsNERBQTRELEdBQUcsU0FBUyxDQUFDLGtCQUFrQjtvQkFDcEcsWUFBWSxFQUFFLGdCQUFnQjtvQkFDOUIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtvQkFDeEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO29CQUN0QixVQUFVLEVBQUUsRUFBRTtvQkFDZCxZQUFZLEVBQUUsRUFBRTtpQkFDakIsQ0FBQTtnQkFFRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUE7Z0JBRWYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtnQkFFaEQsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUE7aUJBQzVDO2dCQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQTtnQkFFbEMsT0FBTyxTQUFTLENBQUE7YUFDakI7U0FDRjtRQUVELElBQUEsZUFBSyxFQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyx1REFBdUQsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFFbkksaUNBQWlDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BELE9BQU8sQ0FDTCxDQUFDLGVBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLGVBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLGVBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLGVBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzdCLGVBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQ2hDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLElBQUksS0FBSyxDQUFDLElBQUEsZ0JBQU0sRUFBQywrQ0FBK0MsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtTQUMxRztRQUVELGlJQUFpSTtRQUNqSSwySEFBMkg7UUFDM0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssZ0JBQWdCLEVBQUU7WUFDaEQsSUFBQSxlQUFLLEVBQ0gsK0dBQStHLEVBQy9HLEdBQUcsQ0FBQyxZQUFZLEVBQ2hCLGdCQUFnQixDQUNqQixDQUFBO1NBQ0Y7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSxZQUFnQyxDQUFBO1FBRXBDLG1DQUFtQztRQUNuQyxJQUFJLFVBQW9CLENBQUE7UUFFeEIsdUJBQXVCO1FBQ3ZCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVsQyxzQkFBc0I7UUFDdEIsSUFBSSxlQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtZQUNqQixVQUFVLEdBQUcsRUFBRSxDQUFBO1NBQ2hCO1FBRUQsc0JBQXNCO2FBQ2pCLElBQUksZUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFDLFlBQVksR0FBRyxDQUFDLElBQUEsa0NBQXVCLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1lBQ2hHLFVBQVUsR0FBRyxFQUFFLENBQUE7U0FDaEI7UUFFRCxvQkFBb0I7YUFDZixJQUFJLGVBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQyxZQUFZLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQzdFLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1NBQ2hFO1FBRUQsaUJBQWlCO1FBQ2pCLCtHQUErRztRQUMvRyx5SEFBeUg7UUFDekgsNkNBQTZDO2FBQ3hDLElBQUksZUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtZQUVwRSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLElBQUEscUJBQVcsRUFBQyxxRUFBcUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTthQUNuRztZQUVELGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFNUIsTUFBTSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsbUNBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUE7WUFFeEYsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsYUFBYSxJQUFJLHFDQUFxQyxHQUFHLElBQUEsZ0NBQXFCLEVBQUMsS0FBSyxDQUFDLENBQUE7YUFDdEY7WUFFRCxxQkFBcUI7WUFDckIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxlQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3ZDLElBQUEsY0FBSSxFQUFDLHNEQUFzRCxFQUFFLE1BQUEsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQ0FBSSxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7b0JBQy9HLFNBQVE7aUJBQ1Q7Z0JBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUVuQyxhQUFhLElBQUksWUFBWSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQzNDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNqRixLQUFLLElBQUEsZ0NBQXFCLEVBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQTthQUMxQztZQUVELGFBQWEsSUFBSSxLQUFLLENBQUE7WUFFdEIsWUFBWSxHQUFHLElBQUEsNEJBQWdCLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUM3RSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtTQUNoRTtRQUVELG1CQUFtQjthQUNkLElBQUksZUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLFlBQVksR0FBRyxFQUFFLENBQUE7WUFDakIsVUFBVSxHQUFHLEVBQUUsQ0FBQTtTQUNoQjtRQUVELHVCQUF1QjthQUNsQjtZQUNILElBQUEsZUFBSyxFQUFDLDJDQUEyQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1NBQ3hFO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sWUFBWSxHQUEwQixFQUFFLENBQUE7UUFFOUMsb0lBQW9JO1FBQ3BJLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEMsSUFBQSxxQkFBVyxFQUFDLHFFQUFxRSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtTQUMzRztRQUVELFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTVCLDJCQUEyQjtRQUMzQixLQUFLLE1BQU0sYUFBYSxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN6RCxtRkFBbUY7WUFDbkYsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDL0MsU0FBUTthQUNUO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksWUFBNEIsQ0FBQTtZQUVoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUE7WUFFOUQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUE7YUFDbkM7aUJBQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDckQsWUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQTthQUM1RDtpQkFBTTtnQkFDTCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQTtnQkFDNUQsWUFBWSxHQUFHLFNBQVMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQTthQUMvRTtZQUVELElBQUksWUFBWSxZQUFZLEtBQUssRUFBRTtnQkFDakMsT0FBTyxJQUFJLEtBQUssQ0FDZCxJQUFBLGdCQUFNLEVBQ0osMkdBQTJHLEVBQzNHLEdBQUcsQ0FBQyxRQUFRLEVBQ1osYUFBYSxDQUFDLFFBQVEsRUFDdEIsZ0JBQWdCLEVBQ2hCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FDMUMsQ0FDRixDQUFBO2FBQ0Y7WUFFRCxzQkFBc0I7WUFDdEIsWUFBWSxDQUFDLElBQUksaUNBQU0sYUFBYSxLQUFFLFlBQVksSUFBRyxDQUFBO1NBQ3REO1FBRUQsTUFBTSxTQUFTLG1DQUNWLEdBQUcsS0FDTixZQUFZLEVBQUUsZ0JBQWdCLEVBQzlCLFVBQVUsRUFDVixPQUFPLEVBQUUsYUFBYSxFQUN0QixZQUFZLEdBQ2IsQ0FBQTtRQUVELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUVmLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFaEQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQzVDO1FBRUQsc0JBQXNCO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUVsQyxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0NBQ0Y7QUF0WEQsd0NBc1hDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxhQUFzQztJQUNwRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBZ0IsQ0FBQTtJQUVyQyxLQUFLLE1BQU0sUUFBUSxJQUFJLGFBQWEsRUFBRTtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtZQUNqRCxLQUFLLE1BQU0sUUFBUSxJQUFJLEtBQUssRUFBRTtnQkFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsRUFBRTtvQkFDbkYsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2lCQUNoRDthQUNGO1NBQ0Y7UUFFRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDeEcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO2FBQ3JFO1NBQ0Y7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQXBCRCwwQ0FvQkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsVUFBc0I7SUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUE7SUFFL0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDeEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNoRCxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtnQkFFdkQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBRWpDLElBQUksSUFBSSxFQUFFO29CQUNSLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtpQkFDakM7Z0JBRUQsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO2lCQUNsQztnQkFFRCxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNULFNBQVE7aUJBQ1Q7Z0JBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNiLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUMxQjtxQkFBTTtvQkFDTCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO2lCQUN4QzthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFoQ0QsMERBZ0NDIn0=
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FuYWx5emVyL2V4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILDZCQUE0QjtBQUM1Qix1Q0FBb0Q7QUFFcEQsd0NBQW9FO0FBQ3BFLDJDQUE4QztBQUU5QyxxQ0FBZ0Q7QUFDaEQseUNBQTZGO0FBRTdGLG1EQUFtRDtBQUN0QyxRQUFBLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtBQWtDbEY7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFDekI7SUFDRSx1QkFBdUI7SUFDUCxPQUFnQjtJQUVoQywyQkFBMkI7SUFDWCxlQUF1QjtJQUV2QyxnREFBZ0Q7SUFDaEMsVUFBNEI7SUFFNUMsc0JBQXNCO0lBQ04sWUFBbUMsSUFBSSxHQUFHLEVBQUU7UUFUNUMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUdoQixvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQUd2QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUc1QixjQUFTLEdBQVQsU0FBUyxDQUFtQztJQUMzRCxDQUFDO0lBRUo7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxHQUF3QjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDbEQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsR0FBd0I7O1FBQ3ZDLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsMENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUNBQUksSUFBSSxDQUFBO0lBQ3hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsK0JBQStCLENBQUMsR0FBaUI7UUFDL0MsS0FBSyxNQUFNLEdBQUcsSUFBSSx5QkFBaUIsRUFBRTtZQUNuQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDbkQsT0FBTyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFBO2FBQ25DO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkJBQTJCLENBQUMsR0FBaUI7O1FBQzNDLEtBQUssTUFBTSxHQUFHLElBQUkseUJBQWlCLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLDBDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFOUUsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsT0FBTyxHQUFHLENBQUE7YUFDWDtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLEdBQXdCLEVBQUUsU0FBd0I7UUFDdEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRWhELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQzVDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQTtTQUNuQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsR0FBaUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzFDLElBQUEscUJBQVcsRUFDVCxnSEFBZ0gsRUFDaEgsR0FBRyxDQUFDLGlCQUFpQixDQUN0QixDQUFBO1NBQ0Y7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUVuRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFcEQsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUE7U0FDM0I7UUFFRCxJQUFJLGdCQUFnQixHQUFrQixJQUFJLENBQUE7UUFFMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSx5QkFBaUIsRUFBRTtZQUNuQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUE7Z0JBQzFELGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUE7YUFDL0M7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixTQUFRO2FBQ1Q7U0FDRjtRQUVELE9BQU8sQ0FDTCxnQkFBZ0IsYUFBaEIsZ0JBQWdCLGNBQWhCLGdCQUFnQixHQUNoQixJQUFJLEtBQUssQ0FDUCxJQUFBLGdCQUFNLEVBQUMsaUZBQWlGLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FDL0gsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEdBQWlCLEVBQUUsWUFBc0IsRUFBRTs7UUFDckQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzFDLElBQUEscUJBQVcsRUFDVCxnSEFBZ0gsRUFDaEgsR0FBRyxDQUFDLGlCQUFpQixDQUN0QixDQUFBO1NBQ0Y7UUFFRCxrREFBa0Q7UUFDbEQsc0dBQXNHO1FBQ3RHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBRW5GLHNEQUFzRDtRQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFcEQsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLE1BQU0sQ0FBQTtTQUNkO1FBRUQsZ0ZBQWdGO1FBQ2hGLElBQUksV0FBVyxHQUFnQyxJQUFJLENBQUE7UUFFbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSx5QkFBaUIsRUFBRTtZQUNuQyxJQUFJO2dCQUNGLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxDQUFBO2FBQ3hHO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsU0FBUTthQUNUO1NBQ0Y7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQ2QsSUFBQSxnQkFBTSxFQUFDLGlGQUFpRixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQy9ILENBQUE7U0FDRjtRQUVELE1BQU0sQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLENBQUE7UUFFNUMsZ0RBQWdEO1FBQ2hELEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2QyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BILElBQUEsZUFBSyxFQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ2hDLGtHQUFrRyxFQUNwRyxHQUFHLENBQUMsUUFBUSxFQUNaLGdCQUFnQixDQUNqQixDQUFBO2dCQUVELE1BQU0sU0FBUyxHQUFrQjtvQkFDL0IsT0FBTyxFQUFFLDREQUE0RCxHQUFHLFNBQVMsQ0FBQyxrQkFBa0I7b0JBQ3BHLFlBQVksRUFBRSxnQkFBZ0I7b0JBQzlCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7b0JBQ3hDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtvQkFDdEIsVUFBVSxFQUFFLEVBQUU7b0JBQ2QsWUFBWSxFQUFFLEVBQUU7aUJBQ2pCLENBQUE7Z0JBRUQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUVmLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7Z0JBRWhELElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFBO2lCQUM1QztnQkFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUE7Z0JBRWxDLE9BQU8sU0FBUyxDQUFBO2FBQ2pCO1NBQ0Y7UUFFRCxJQUFBLGVBQUssRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsdURBQXVELEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1FBRW5JLGlDQUFpQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwRCxPQUFPLENBQ0wsQ0FBQyxlQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUMzQixlQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxlQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxlQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUM3QixlQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUNoQyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFBLGdCQUFNLEVBQUMsK0NBQStDLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7U0FDMUc7UUFFRCxpSUFBaUk7UUFDakksMkhBQTJIO1FBQzNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVqRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLGdCQUFnQixFQUFFO1lBQ2hELElBQUEsZUFBSyxFQUNILCtHQUErRyxFQUMvRyxHQUFHLENBQUMsWUFBWSxFQUNoQixnQkFBZ0IsQ0FDakIsQ0FBQTtTQUNGO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksWUFBZ0MsQ0FBQTtRQUVwQyxtQ0FBbUM7UUFDbkMsSUFBSSxVQUFvQixDQUFBO1FBRXhCLHVCQUF1QjtRQUN2QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFbEMsc0JBQXNCO1FBQ3RCLElBQUksZUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hDLFlBQVksR0FBRyxFQUFFLENBQUE7WUFDakIsVUFBVSxHQUFHLEVBQUUsQ0FBQTtTQUNoQjtRQUVELHNCQUFzQjthQUNqQixJQUFJLGVBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQyxZQUFZLEdBQUcsQ0FBQyxJQUFBLGtDQUF1QixFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtZQUNoRyxVQUFVLEdBQUcsRUFBRSxDQUFBO1NBQ2hCO1FBRUQsb0JBQW9CO2FBQ2YsSUFBSSxlQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsWUFBWSxHQUFHLElBQUEsNEJBQWdCLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUM3RSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtTQUNoRTtRQUVELGlCQUFpQjtRQUNqQiwrR0FBK0c7UUFDL0cseUhBQXlIO1FBQ3pILDZDQUE2QzthQUN4QyxJQUFJLGVBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7WUFFcEUsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxJQUFBLHFCQUFXLEVBQUMscUVBQXFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7YUFDbkc7WUFFRCxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRTVCLE1BQU0sS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLG1DQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1lBRXhGLElBQUksS0FBSyxFQUFFO2dCQUNULGFBQWEsSUFBSSxxQ0FBcUMsR0FBRyxJQUFBLGdDQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3RGO1lBRUQscUJBQXFCO1lBQ3JCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsZUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN2QyxJQUFBLGNBQUksRUFBQyxzREFBc0QsRUFBRSxNQUFBLElBQUksQ0FBQyxPQUFPLEVBQUUsbUNBQUksYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO29CQUMvRyxTQUFRO2lCQUNUO2dCQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtnQkFFbkMsYUFBYSxJQUFJLFlBQVksTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUMzQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDakYsS0FBSyxJQUFBLGdDQUFxQixFQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUE7YUFDMUM7WUFFRCxhQUFhLElBQUksS0FBSyxDQUFBO1lBRXRCLFlBQVksR0FBRyxJQUFBLDRCQUFnQixFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDN0UsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7U0FDaEU7UUFFRCxtQkFBbUI7YUFDZCxJQUFJLGVBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxZQUFZLEdBQUcsRUFBRSxDQUFBO1lBQ2pCLFVBQVUsR0FBRyxFQUFFLENBQUE7U0FDaEI7UUFFRCx1QkFBdUI7YUFDbEI7WUFDSCxJQUFBLGVBQUssRUFBQywyQ0FBMkMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtTQUN4RTtRQUVELDhCQUE4QjtRQUM5QixNQUFNLFlBQVksR0FBMEIsRUFBRSxDQUFBO1FBRTlDLG9JQUFvSTtRQUNwSSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BDLElBQUEscUJBQVcsRUFBQyxxRUFBcUUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDM0c7UUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUU1QiwyQkFBMkI7UUFDM0IsS0FBSyxNQUFNLGFBQWEsSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekQsbUZBQW1GO1lBQ25GLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQy9DLFNBQVE7YUFDVDtZQUVELHNDQUFzQztZQUN0QyxJQUFJLFlBQTRCLENBQUE7WUFFaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBRTlELElBQUksTUFBTSxFQUFFO2dCQUNWLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFBO2FBQ25DO2lCQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JELFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUE7YUFDNUQ7aUJBQU07Z0JBQ0wsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUE7Z0JBQzVELFlBQVksR0FBRyxTQUFTLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUE7YUFDL0U7WUFFRCxJQUFJLFlBQVksWUFBWSxLQUFLLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxLQUFLLENBQ2QsSUFBQSxnQkFBTSxFQUNKLDJHQUEyRyxFQUMzRyxHQUFHLENBQUMsUUFBUSxFQUNaLGFBQWEsQ0FBQyxRQUFRLEVBQ3RCLGdCQUFnQixFQUNoQixZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzFDLENBQ0YsQ0FBQTthQUNGO1lBRUQsc0JBQXNCO1lBQ3RCLFlBQVksQ0FBQyxJQUFJLGlDQUFNLGFBQWEsS0FBRSxZQUFZLElBQUcsQ0FBQTtTQUN0RDtRQUVELE1BQU0sU0FBUyxtQ0FDVixHQUFHLEtBQ04sWUFBWSxFQUFFLGdCQUFnQixFQUM5QixVQUFVLEVBQ1YsT0FBTyxFQUFFLGFBQWEsRUFDdEIsWUFBWSxHQUNiLENBQUE7UUFFRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUE7UUFFZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBRWhELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtTQUM1QztRQUVELHNCQUFzQjtRQUN0QixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFbEMsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztDQUNGO0FBdFhELHdDQXNYQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQUMsYUFBc0M7SUFDcEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUE7SUFFckMsS0FBSyxNQUFNLFFBQVEsSUFBSSxhQUFhLEVBQUU7UUFDcEMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDakQsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDLEVBQUU7b0JBQ25GLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtpQkFDaEQ7YUFDRjtTQUNGO1FBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQ3hHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTthQUNyRTtTQUNGO0tBQ0Y7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUM7QUFwQkQsMENBb0JDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLFVBQXNCO0lBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFBO0lBRS9DLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3hDLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3hDLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtnQkFFOUQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLDhCQUFxQixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLDhCQUFxQixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLDhCQUFxQixFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7YUFDckQ7U0FDRjtLQUNGO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQWpCRCwwREFpQkMifQ==
@@ -92,9 +92,7 @@ function analyzeMethods(controllerClass, controllerUriPrefix, filePath, absolute
92
92
  (0, logging_1.debug)('├─── Parsed URI name to route: {yellow}', (0, route_1.debugUri)(route, chalk_1.blue));
93
93
  // Analyze the method's arguments
94
94
  (0, logging_1.debug)('├─── Analyzing arguments...');
95
- const params = (0, params_1.analyzeParams)(httpMethod, route, method.getParameters(), filePath, absoluteSrcPath);
96
- if (params instanceof Error)
97
- return params;
95
+ const params = (0, params_1.extractParams)({ controllerClass, httpMethod, route, method, filePath, absoluteSrcPath });
98
96
  // Get the method's return type
99
97
  (0, logging_1.debug)('├─── Resolving return type...');
100
98
  const returnType = (0, typedeps_1.resolveTypeDependencies)(method.getReturnType(), filePath, absoluteSrcPath);
@@ -112,4 +110,4 @@ function analyzeMethods(controllerClass, controllerUriPrefix, filePath, absolute
112
110
  return collected;
113
111
  }
114
112
  exports.analyzeMethods = analyzeMethods;
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbmFseXplci9tZXRob2RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsaUNBQTRCO0FBQzVCLHVDQUFvRTtBQUNwRSx3Q0FBMEM7QUFDMUMscUNBQXlEO0FBQ3pELG1DQUFxRDtBQUNyRCx5Q0FBc0U7QUF5QnRFOztHQUVHO0FBQ0gsSUFBWSxhQU1YO0FBTkQsV0FBWSxhQUFhO0lBQ3ZCLDRCQUFXLENBQUE7SUFDWCw4QkFBYSxDQUFBO0lBQ2IsNEJBQVcsQ0FBQTtJQUNYLGdDQUFlLENBQUE7SUFDZixrQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFNeEI7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLGVBQWlDLEVBQ2pDLG1CQUFrQyxFQUNsQyxRQUFnQixFQUNoQixlQUF1QjtJQUV2QixrQkFBa0I7SUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQTtJQUV4Qyw4QkFBOEI7SUFDOUIsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksNEJBQWlCLENBQXdCLENBQUE7SUFFaEksS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7UUFDNUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRW5DLElBQUEsZUFBSyxFQUFDLDJCQUEyQixFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBRTlDLDBDQUEwQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFB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
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbmFseXplci9tZXRob2RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsaUNBQTRCO0FBQzVCLHVDQUFvRTtBQUNwRSx3Q0FBMEM7QUFDMUMscUNBQXlEO0FBQ3pELG1DQUFxRDtBQUNyRCx5Q0FBc0U7QUF5QnRFOztHQUVHO0FBQ0gsSUFBWSxhQU1YO0FBTkQsV0FBWSxhQUFhO0lBQ3ZCLDRCQUFXLENBQUE7SUFDWCw4QkFBYSxDQUFBO0lBQ2IsNEJBQVcsQ0FBQTtJQUNYLGdDQUFlLENBQUE7SUFDZixrQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFNeEI7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLGVBQWlDLEVBQ2pDLG1CQUFrQyxFQUNsQyxRQUFnQixFQUNoQixlQUF1QjtJQUV2QixrQkFBa0I7SUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQTtJQUV4Qyw4QkFBOEI7SUFDOUIsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksNEJBQWlCLENBQXdCLENBQUE7SUFFaEksS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7UUFDNUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRW5DLElBQUEsZUFBSyxFQUFDLDJCQUEyQixFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBRTlDLDBDQUEwQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFB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
@@ -1,30 +1,66 @@
1
1
  /**
2
2
  * @file Analyzer for the source API's controllers' methods' parameters
3
3
  */
4
- import { ParameterDeclaration } from 'ts-morph';
4
+ import { ClassDeclaration, Decorator, MethodDeclaration, ParameterDeclaration } from 'ts-morph';
5
5
  import { SdkHttpMethod } from './methods';
6
6
  import { Route } from './route';
7
7
  import { ResolvedTypeDeps } from './typedeps';
8
+ /**
9
+ * Type of a parameter that must be passed to an SDK method: Body, Query or Route Param
10
+ * Supports accessing parameters individually by key or as a whole object
11
+ *
12
+ * EXAMPLE
13
+ *
14
+ * Controller Method:
15
+ *
16
+ * getStuff(@Query('email') email: string, @Query('companyId'): CompanyId)
17
+ *
18
+ * SDK Method Param:
19
+ * { email: string, companyId: CompanyId }
20
+ *
21
+ * OR
22
+ *
23
+ * Controller Method:
24
+ * type EmailAndCompanyId = { email: string, companyId: CompanyId }
25
+ * getStuff(@Query(): EmailAndCompanyId)
26
+ *
27
+ * SDK Method Param:
28
+ * EmailAndCompanyId
29
+ */
30
+ export declare type SdkMethodParam = SdkMethodParamMap | ResolvedTypeDeps | null;
31
+ export declare type SdkMethodParamMap = {
32
+ [key: string]: ResolvedTypeDeps;
33
+ };
34
+ export declare const isParamResolvedType: (param: SdkMethodParam) => param is ResolvedTypeDeps;
35
+ export declare const getParamResolvedTypes: (param: SdkMethodParam) => ResolvedTypeDeps[];
8
36
  /**
9
37
  * SDK interface for a controller's method's parameters
10
38
  */
11
39
  export interface SdkMethodParams {
12
- /** Route parameters */
13
- parameters: Map<string, ResolvedTypeDeps> | null;
14
- /** Query parameters */
15
- query: Map<string, ResolvedTypeDeps> | null;
16
- /** Body parameters */
17
- body: SdkMethodBodyParam | null;
40
+ routeParams: SdkMethodParam;
41
+ queryParams: SdkMethodParam;
42
+ bodyParams: SdkMethodParam;
43
+ context: MethodContext;
18
44
  }
19
- /**
20
- * Single body parameter in a SDK's method
21
- */
22
- export declare type SdkMethodBodyParam = {
23
- full: true;
24
- type: ResolvedTypeDeps;
25
- } | {
26
- full: false;
27
- fields: Map<string, ResolvedTypeDeps>;
45
+ export declare type MethodContext = {
46
+ controllerClass: ClassDeclaration;
47
+ method: MethodDeclaration;
48
+ httpMethod: SdkHttpMethod;
49
+ route: Route;
50
+ filePath: string;
51
+ absoluteSrcPath: string;
52
+ };
53
+ export declare enum ArgDecorator {
54
+ Param = "Param",
55
+ Query = "Query",
56
+ Body = "Body"
57
+ }
58
+ export declare type DecoratedArg = {
59
+ arg: ParameterDeclaration;
60
+ argParamKey: string | null;
61
+ decorator: Decorator;
62
+ decoratorType: ArgDecorator;
63
+ context: MethodContext;
28
64
  };
29
65
  /**
30
66
  * Generate a SDK interface for a controller's method's parameters
@@ -35,4 +71,10 @@ export declare type SdkMethodBodyParam = {
35
71
  * @param absoluteSrcPath Absolute path to the source directory
36
72
  * @returns A SDK interface for the method's parameters
37
73
  */
38
- export declare function analyzeParams(httpMethod: SdkHttpMethod, route: Route, args: ParameterDeclaration[], filePath: string, absoluteSrcPath: string): SdkMethodParams | Error;
74
+ export declare function extractParams(context: MethodContext): SdkMethodParams;
75
+ export declare function extractDecoratedArgs(context: MethodContext): Record<ArgDecorator, DecoratedArg[]>;
76
+ export declare function extractArgParamKey(context: MethodContext & {
77
+ arg: ParameterDeclaration;
78
+ decorator: Decorator;
79
+ }): string | null;
80
+ export declare function mergeDecoratedArgs(decoratedArgs: DecoratedArg[]): SdkMethodParam;
@@ -3,12 +3,34 @@
3
3
  * @file Analyzer for the source API's controllers' methods' parameters
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.analyzeParams = void 0;
6
+ exports.mergeDecoratedArgs = exports.extractArgParamKey = exports.extractDecoratedArgs = exports.extractParams = exports.ArgDecorator = exports.getParamResolvedTypes = exports.isParamResolvedType = void 0;
7
+ const ts_morph_1 = require("ts-morph");
7
8
  const logging_1 = require("../logging");
8
- const decorator_1 = require("./decorator");
9
- const methods_1 = require("./methods");
10
9
  const route_1 = require("./route");
11
10
  const typedeps_1 = require("./typedeps");
11
+ const isParamResolvedType = (param) => {
12
+ if (param === null) {
13
+ return false;
14
+ }
15
+ return 'rawType' in param && 'resolvedType' in param && 'relativeFilePath' in param && 'dependencies' in param && 'localTypes' in param;
16
+ };
17
+ exports.isParamResolvedType = isParamResolvedType;
18
+ const getParamResolvedTypes = (param) => {
19
+ if (param === null) {
20
+ return [];
21
+ }
22
+ if ((0, exports.isParamResolvedType)(param)) {
23
+ return [param];
24
+ }
25
+ return Object.values(param);
26
+ };
27
+ exports.getParamResolvedTypes = getParamResolvedTypes;
28
+ var ArgDecorator;
29
+ (function (ArgDecorator) {
30
+ ArgDecorator["Param"] = "Param";
31
+ ArgDecorator["Query"] = "Query";
32
+ ArgDecorator["Body"] = "Body";
33
+ })(ArgDecorator = exports.ArgDecorator || (exports.ArgDecorator = {}));
12
34
  /**
13
35
  * Generate a SDK interface for a controller's method's parameters
14
36
  * @param httpMethod The method's HTTP method
@@ -18,146 +40,129 @@ const typedeps_1 = require("./typedeps");
18
40
  * @param absoluteSrcPath Absolute path to the source directory
19
41
  * @returns A SDK interface for the method's parameters
20
42
  */
21
- function analyzeParams(httpMethod, route, args, filePath, absoluteSrcPath) {
22
- var _a, _b, _c, _d;
23
- // The collected informations we will return
24
- const collected = {
25
- parameters: null,
26
- query: null,
27
- body: null,
43
+ function extractParams(context) {
44
+ const { route, filePath } = context;
45
+ const { Param, Query, Body } = extractDecoratedArgs(context);
46
+ const resolvedParams = {
47
+ routeParams: mergeDecoratedArgs(Param),
48
+ queryParams: mergeDecoratedArgs(Query),
49
+ bodyParams: mergeDecoratedArgs(Body),
50
+ context,
28
51
  };
29
- // Get the named parameters of the route
30
- const routeParams = (0, route_1.paramsOfRoute)(route);
31
- // Treat all arguments (to not confuse with the route's parameters)
52
+ /**
53
+ * Validate Route Params exist in route URL
54
+ */
55
+ const { routeParams } = resolvedParams;
56
+ if (routeParams) {
57
+ const allowedRouteParams = new Set((0, route_1.paramsFromRoute)(route));
58
+ const usedRouteParams = routeParams instanceof ts_morph_1.Type ?
59
+ // If routeParams was resolved to a single type, assume there's only one decorated argument
60
+ Param[0].arg.getType().getProperties().map((prop) => prop.getName()) :
61
+ // If routeParams was resolved to a map, assume the keys are the route params
62
+ Object.keys(routeParams);
63
+ for (const usedParam of usedRouteParams) {
64
+ if (!allowedRouteParams.has(usedParam)) {
65
+ panicWithContext(`Route param ${usedParam} does not appear in route URL`, context);
66
+ }
67
+ }
68
+ }
69
+ return resolvedParams;
70
+ }
71
+ exports.extractParams = extractParams;
72
+ function extractDecoratedArgs(context) {
73
+ const decoratedArgs = {
74
+ [ArgDecorator.Param]: [],
75
+ [ArgDecorator.Query]: [],
76
+ [ArgDecorator.Body]: [],
77
+ };
78
+ const { method, filePath, controllerClass } = context;
79
+ const args = method.getParameters();
32
80
  for (const arg of args) {
33
- const name = arg.getName();
34
- (0, logging_1.debug)('├───── Detected argument: {yellow}', name);
81
+ const argName = arg.getName();
82
+ (0, logging_1.debug)('├───── Detected argument: {yellow}', argName);
35
83
  // Arguments are collected as soon as they have a decorator like @Query() or @Body()
36
- const decs = arg.getDecorators();
37
- if (decs.length === 0) {
84
+ const argDecorators = arg.getDecorators().filter((dec) => Object.values(ArgDecorator).includes(dec.getName()));
85
+ if (argDecorators.length === 0) {
38
86
  // If we have no argument, this is not an argument we are interested in, so we just skip it
39
87
  (0, logging_1.debug)('├───── Skipping this argument as it does not have a decorator');
40
88
  continue;
41
89
  }
42
- else if (decs.length > 1) {
43
- // If we have more than one decorator, this could mean we have for instance an @NotEmpty() @Query() or something like this,
44
- // which is currently not supported.
45
- return new Error('Skipping this argument as it has multiple decorators, which is currently not supported');
90
+ else if (argDecorators.length > 1) {
91
+ (0, logging_1.panic)(`${controllerClass.getName()} ${method.getName()} has multiple decorators on argument ${argName} ${argDecorators.map((dec) => dec.getName()).join(', ')}`);
46
92
  }
47
93
  // Get the only decrator
48
- const dec = decs[0];
49
- const decName = dec.getName();
50
- // Treat the @Param() decorator
51
- if (decName === 'Param') {
52
- (0, logging_1.debug)('├───── Detected decorator {blue}', '@Param');
53
- // We expect a single string argument for this decorator,
54
- // which is the route parameter's name
55
- const paramName = (0, decorator_1.expectSingleStrLitDecorator)(dec);
56
- if (paramName instanceof Error)
57
- return paramName;
58
- // If there is no argument, this argument is a global receiver which maps the full set of parameters
59
- // We theorically *could* extract the type informations from this object type, but this would be insanely complex
60
- // So, we just skip it as it's a lot more simple, and is not commonly used anyway as it has a set of downsides
61
- if (paramName === null) {
62
- (0, logging_1.warn)('├───── Skipping this argument as it is a generic parameters receiver, which is currently not supported');
63
- continue;
64
- }
65
- // Ensure the specified parameter appears in the method's route
66
- if (!routeParams.includes(paramName))
67
- return new Error((0, logging_1.format)('├───── Cannot map unknown parameter {yellow}', paramName));
68
- (0, logging_1.debug)('├───── Mapping argument to parameter: {yellow}', paramName);
69
- // Get the route parameter's type
70
- const typ = (0, typedeps_1.resolveTypeDependencies)(arg.getType(), filePath, absoluteSrcPath);
71
- (0, logging_1.debug)('├───── Detected parameter type: {yellow} ({magentaBright} dependencies)', typ.resolvedType, typ.dependencies.size);
72
- // Update the method's route parameters
73
- if (paramName in {}) {
74
- return new Error((0, logging_1.format)(`Detected @Param() field whose name {yellow} collides with a JavaScript's native object property`, paramName));
75
- }
76
- (_a = collected.parameters) !== null && _a !== void 0 ? _a : (collected.parameters = new Map());
77
- collected.parameters.set(paramName, typ);
94
+ const decorator = argDecorators[0];
95
+ const decoratorType = decorator.getName();
96
+ const argParamKey = extractArgParamKey(Object.assign(Object.assign({}, context), { arg, decorator }));
97
+ const argType = arg.getType();
98
+ if (!argParamKey && !argType.isObject()) {
99
+ (0, logging_1.panic)(`${controllerClass.getName()} ${method.getName()} generic controller argument ${decoratorType}() ${argName} must be an object type`);
78
100
  }
79
- // Treat the @Query() decorator
80
- else if (decName === 'Query') {
81
- (0, logging_1.debug)('├───── Detected decorator {blue}', '@Query');
82
- // We expect a single string argument for this decorator,
83
- // which is the query parameter's name
84
- const queryName = (0, decorator_1.expectSingleStrLitDecorator)(dec);
85
- if (queryName instanceof Error)
86
- return queryName;
87
- // If there is no argument, this argument is a global receiver which maps the full set of parameters
88
- // We theorically *could* extract the type informations from this object type, but this would be insanely complex
89
- // So, we just skip it as it's a lot more simple, and is not commonly used anyway as it has a set of downsides
90
- if (queryName === null) {
91
- (0, logging_1.warn)('├───── Skipping this argument as it is a generic query receiver');
92
- continue;
93
- }
94
- (0, logging_1.debug)('├───── Mapping argument to query: {yellow}', queryName);
95
- // Get the parameter's type
96
- const typ = (0, typedeps_1.resolveTypeDependencies)(arg.getType(), filePath, absoluteSrcPath);
97
- (0, logging_1.debug)(`├───── Detected query type: {yellow} ({magentaBright} dependencies)`, typ.resolvedType, typ.dependencies.size);
98
- // Update the method's query parameter
99
- if (queryName in {}) {
100
- return new Error((0, logging_1.format)(`Detected @Query() field whose name {yellow} collides with a JavaScript's native object property`, queryName));
101
+ decoratedArgs[decoratorType].push({
102
+ arg,
103
+ argParamKey,
104
+ decorator,
105
+ decoratorType,
106
+ context,
107
+ });
108
+ }
109
+ return decoratedArgs;
110
+ }
111
+ exports.extractDecoratedArgs = extractDecoratedArgs;
112
+ function extractArgParamKey(context) {
113
+ const { decorator, controllerClass, method, arg } = context;
114
+ const decoratorArgs = decorator.getArguments();
115
+ if (decoratorArgs.length > 1) {
116
+ (0, logging_1.panic)(`${controllerClass.getName()} ${method.getName()} ${decorator.getName()}() ${arg.getName()} argument decorator has multiple parameters`);
117
+ }
118
+ else if (decoratorArgs.length === 0) {
119
+ return null;
120
+ }
121
+ const decoratorArg = decoratorArgs[0];
122
+ if (!ts_morph_1.Node.isStringLiteral(decoratorArg)) {
123
+ (0, logging_1.panic)('The argument provided to the decorator is not a string literal:\n>>> {cyan}', arg.getText());
124
+ }
125
+ const paramKey = decoratorArg.getLiteralText();
126
+ if (paramKey in {}) {
127
+ panicWithContext(`${decorator.getName()}('${paramKey}') param name collides with JavaScript native object property`, context);
128
+ }
129
+ return paramKey;
130
+ }
131
+ exports.extractArgParamKey = extractArgParamKey;
132
+ function mergeDecoratedArgs(decoratedArgs) {
133
+ let genericParam = null;
134
+ let paramMap = {};
135
+ for (const decoratedArg of decoratedArgs) {
136
+ const { argParamKey, decoratorType, arg, context } = decoratedArg;
137
+ const resolvedType = (0, typedeps_1.resolveTypeDependencies)(arg.getType(), context.filePath, context.absoluteSrcPath);
138
+ if (argParamKey) {
139
+ if (paramMap[argParamKey]) {
140
+ panicWithContext(`${decoratorType}('${argParamKey}') used twice in controller method`, decoratedArg.context);
101
141
  }
102
- (_b = collected.query) !== null && _b !== void 0 ? _b : (collected.query = new Map());
103
- collected.query.set(queryName, typ);
142
+ paramMap[argParamKey] = resolvedType;
104
143
  }
105
- // Treat the @Body() decorator
106
- else if (decName === 'Body') {
107
- (0, logging_1.debug)('├───── Detected decorator {blue}', '@Body');
108
- // GET requests cannot have a BODY
109
- if (httpMethod === methods_1.SdkHttpMethod.Get) {
110
- return new Error('GET requests cannot have a BODY!');
111
- }
112
- // We expect a single string argument for this decorator,
113
- // which is the body field's name
114
- const fieldName = (0, decorator_1.expectSingleStrLitDecorator)(dec);
115
- if (fieldName instanceof Error)
116
- return fieldName;
117
- // Get the field's type
118
- const typ = (0, typedeps_1.resolveTypeDependencies)(arg.getType(), filePath, absoluteSrcPath);
119
- const depsCount = typ.dependencies.size;
120
- (0, logging_1.debug)(`├───── Detected BODY type: {cyan} ({magentaBright} ${depsCount === 0 ? 'no dependency' : depsCount > 1 ? 'dependencies' : 'dependency'})`, typ.resolvedType, depsCount);
121
- // If there no name was provided to the decorator, then the decorator is a generic receiver which means it maps to the full body type
122
- // This also means we can map the BODY type to this argument's type
123
- if (fieldName === null) {
124
- const body = collected.body;
125
- // If we previously had an @Body(<name>) decorator on another argument, we have an important risk of mistyping
126
- // => e.g. `@Body("a") a: string, @Body() body: { a: number }` is invalid as the type for the `a` field mismatches
127
- // => It's easy to make an error as the @Body() type is often hidden behind a DTO
128
- // But that's extremely complex to check automatically, so we just display a warning instead
129
- // Also, that's not the kind of thing we make on purpose very often, so it's more likely it's an error, which makes it even more important
130
- // to display a warning here.
131
- if ((body === null || body === void 0 ? void 0 : body.full) === false)
132
- (0, logging_1.warn)('├───── Detected full @Body() decorator after a single parameter. This is considered a bad practice, avoid it if you can!');
133
- // Having two generic @Body() decorators is meaningless and will likey lead to errors, so we return a precise error here
134
- else if (body === null || body === void 0 ? void 0 : body.full) {
135
- return new Error((0, logging_1.format)(`Detected two @Body() decorators: found {yellow} previously, while method argument {yellow} indicates type {yellow}`, body.type.resolvedType, name, typ.resolvedType));
136
- }
137
- (0, logging_1.debug)("├───── Mapping argument to full request's body");
138
- // Update the whole BODY type
139
- collected.body = { full: true, type: typ };
140
- }
141
- else {
142
- // Here we have an @Body(<string>) decorator
143
- // If we previously had an @Body() decorator, this can lead to several types of errors (see the big comment above for more informations)
144
- if ((_c = collected.body) === null || _c === void 0 ? void 0 : _c.full) {
145
- (0, logging_1.warn)('├───── Detected single @Body() decorator after a full parameter. This is considered a bad practice, avoid it if you can!');
146
- }
147
- else {
148
- (0, logging_1.debug)('├───── Mapping argument to BODY field: {yellow}', fieldName);
149
- // Update the BODY type by adding the current field to it
150
- if (fieldName in {}) {
151
- return new Error((0, logging_1.format)(`Detected @Body() field whose name {yellow} collides with a JavaScript's native object property`, fieldName));
152
- }
153
- (_d = collected.body) !== null && _d !== void 0 ? _d : (collected.body = { full: false, fields: new Map() });
154
- collected.body.fields.set(fieldName, typ);
155
- }
144
+ else {
145
+ if (genericParam) {
146
+ panicWithContext(`${decoratorType}() used twice in controller method`, decoratedArg.context);
156
147
  }
148
+ genericParam = resolvedType;
157
149
  }
158
150
  }
159
- // Success!
160
- return collected;
151
+ const hasArgsByKey = Object.keys(paramMap).length > 0;
152
+ if (genericParam && hasArgsByKey) {
153
+ panicWithContext(`Cannot mix generic and specific ${decoratedArgs[0].decoratorType}()`, decoratedArgs[0].context);
154
+ }
155
+ return hasArgsByKey ? paramMap : genericParam;
161
156
  }
162
- exports.analyzeParams = analyzeParams;
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FuYWx5emVyL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUdILHdDQUFnRDtBQUNoRCwyQ0FBeUQ7QUFDekQsdUNBQXlDO0FBQ3pDLG1DQUE4QztBQUM5Qyx5Q0FBc0U7QUFxQnRFOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixVQUF5QixFQUN6QixLQUFZLEVBQ1osSUFBNEIsRUFDNUIsUUFBZ0IsRUFDaEIsZUFBdUI7O0lBRXZCLDRDQUE0QztJQUM1QyxNQUFNLFNBQVMsR0FBb0I7UUFDakMsVUFBVSxFQUFFLElBQUk7UUFDaEIsS0FBSyxFQUFFLElBQUk7UUFDWCxJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUE7SUFFRCx3Q0FBd0M7SUFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBQSxxQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXhDLG1FQUFtRTtJQUNuRSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtRQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFMUIsSUFBQSxlQUFLLEVBQUMsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFakQsb0ZBQW9GO1FBQ3BGLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUVoQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLDJGQUEyRjtZQUMzRixJQUFBLGVBQUssRUFBQywrREFBK0QsQ0FBQyxDQUFBO1lBQ3RFLFNBQVE7U0FDVDthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUIsMkhBQTJIO1lBQzNILHFDQUFxQztZQUNyQyxPQUFPLElBQUksS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUE7U0FDM0c7UUFFRCx3QkFBd0I7UUFDeEIs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
157
+ exports.mergeDecoratedArgs = mergeDecoratedArgs;
158
+ const panicWithContext = (message, context) => {
159
+ const { controllerClass, httpMethod, method, filePath } = context;
160
+ const ctx = {
161
+ controller: controllerClass.getName(),
162
+ method: method.getName(),
163
+ httpMethod,
164
+ filePath,
165
+ };
166
+ (0, logging_1.panic)(`${message}\n${JSON.stringify(ctx, null, 2)}`);
167
+ };
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FuYWx5emVyL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILHVDQUEyRztBQUMzRyx3Q0FBeUM7QUFFekMsbUNBQWdEO0FBQ2hELHlDQUFzRTtBQTZCL0QsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQXFCLEVBQTZCLEVBQUU7SUFDdEYsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1FBQ2xCLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFDRCxPQUFPLFNBQVMsSUFBSSxLQUFLLElBQUksY0FBYyxJQUFJLEtBQUssSUFBSSxrQkFBa0IsSUFBSSxLQUFLLElBQUksY0FBYyxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxDQUFBO0FBQ3pJLENBQUMsQ0FBQTtBQUxZLFFBQUEsbUJBQW1CLHVCQUsvQjtBQUVNLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFxQixFQUFzQixFQUFFO0lBQ2pGLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtRQUNsQixPQUFPLEVBQUUsQ0FBQTtLQUNWO0lBQ0QsSUFBSSxJQUFBLDJCQUFtQixFQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtLQUNmO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdCLENBQUMsQ0FBQTtBQVJZLFFBQUEscUJBQXFCLHlCQVFqQztBQXFCRCxJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdEIsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBSXZCO0FBV0Q7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixhQUFhLENBQzNCLE9BQXNCO0lBRXRCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFB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
@@ -27,7 +27,10 @@ export declare function analyzeUri(uriPath: string): Route | Error;
27
27
  * Get the named parameters of a parsed route
28
28
  * @param route
29
29
  */
30
- export declare function paramsOfRoute(route: Route): string[];
30
+ export declare function routePartIsParam(part: RoutePart): part is {
31
+ readonly param: string;
32
+ };
33
+ export declare function paramsFromRoute(route: Route): string[];
31
34
  /**
32
35
  * Convert a route back to its original string
33
36
  * @param route