@macedon-technologies/batman 1.24.2 → 1.25.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.
package/.jsii CHANGED
@@ -1283,6 +1283,6 @@
1283
1283
  "symbolId": "src/WorkflowAutoDiscover:WorkflowAutoDiscover"
1284
1284
  }
1285
1285
  },
1286
- "version": "1.24.2",
1287
- "fingerprint": "sFp7ZrQrJJb11FaUQc/GxMRUFHD1UgQNfu8HQP7LoGM="
1286
+ "version": "1.25.1",
1287
+ "fingerprint": "1IkMbG2gz2YLJMAIQn0A6d4Hx7KsusEnahMdd9rHMXU="
1288
1288
  }
@@ -9,6 +9,9 @@ needs a genuinely new kind of check.
9
9
 
10
10
  ## Rule shape
11
11
 
12
+ Two `check.type`s are implemented: `forbidden-import` (whole-repo import-graph
13
+ check) and `required-companion` (diff-based co-change check).
14
+
12
15
  ```json
13
16
  {
14
17
  "id": "unique-id",
@@ -23,6 +26,56 @@ needs a genuinely new kind of check.
23
26
  }
24
27
  ```
25
28
 
29
+ ```json
30
+ {
31
+ "id": "unique-id",
32
+ "description": "What this enforces and why.",
33
+ "enabled": true,
34
+ "severity": "low" | "medium" | "high" | "critical",
35
+ "check": {
36
+ "type": "required-companion",
37
+ "from": ["glob patterns selecting changed files that trigger the requirement"],
38
+ "requireOneOf": ["glob patterns -- at least one CHANGED file must match one of these"],
39
+ "exempt": ["optional -- from-files matching these globs don't trigger the requirement"]
40
+ }
41
+ }
42
+ ```
43
+
44
+ `required-companion` evaluates the set of files changed in the current diff
45
+ (`git diff --name-only --diff-filter=ACMR <baseRef>...HEAD`), not the whole
46
+ repo tree: if any changed file matches `from` (and doesn't match `exempt`) but
47
+ no changed file matches `requireOneOf`, that's a violation. The base ref
48
+ defaults to `origin/main` and can be overridden with the
49
+ `ARCHITECTURE_RULES_BASE_REF` environment variable. This means the checkout
50
+ running `pnpm validate:architecture` must have that base ref fetched and
51
+ resolvable (a shallow, single-branch checkout will make the check fail closed
52
+ with an error rather than silently reporting no violations) — make sure
53
+ whatever runs this task fetches enough history for `git diff <baseRef>...HEAD`
54
+ to succeed.
55
+
56
+ `from`/`requireOneOf`/`exempt` globs are matched against the paths `git
57
+ diff --name-only` reports, which are relative to the git repository's
58
+ top-level directory. This lines up with `from`'s own directory (the parent of
59
+ `architecture-rules/`) in the common case — a single project generated at the
60
+ repo root — but if `architecture-rules/` instead lives under a nested
61
+ subdirectory of a larger git repo, write globs relative to the git root, not
62
+ to that subdirectory.
63
+
64
+ **`required-companion` is a coverage check, not a correctness check.** It only
65
+ confirms that *some* changed file matches `requireOneOf` — it can't tell
66
+ whether that change is actually related to the triggering `from` change (a
67
+ trivial or unrelated edit to a file under `requireOneOf` satisfies the rule
68
+ just as well as a substantive one), and it can't tell whether a given `from`
69
+ change genuinely needed a companion at all (a pure refactor might not).
70
+ `exempt` covers *known, glob-expressible* exceptions, but not every false
71
+ positive is expressible as a glob — that judgment call still belongs to the
72
+ rule author (scoping `from`/`exempt`) and the reviewer (reading the companion
73
+ diff, not just trusting that the check passed). Also note that `main()`
74
+ fails the whole run on *any* violation regardless of `severity` — `severity`
75
+ is informational only, not a leniency lever — so start with a narrowly
76
+ scoped `from` (or `enabled: false`) and widen it as the convention proves
77
+ itself, the same guidance as for `forbidden-import`.
78
+
26
79
  `enabled: false` rules are skipped (reported as "deferred") rather than
27
80
  evaluated — use this for a rule you've named and described but don't yet
28
81
  have a concrete convention to check.
@@ -35,8 +88,10 @@ conventions solidify (e.g. an event-sourced/CQRS module layout under
35
88
 
36
89
  ## Adding a check type
37
90
 
38
- `forbidden-import` is the only implemented `check.type`. If a future rule
39
- needs something it can't express (e.g. "every aggregate file must have a
40
- matching events file"), add a new `type` value, a matching interface, and a
41
- case in `evaluateRule()` in `check.ts` — keep the engine itself generic;
42
- rule-specific knowledge belongs in `rules.json`.
91
+ `forbidden-import` (whole-repo import graph) and `required-companion`
92
+ (diff-based co-change) are the implemented `check.type`s. If a future rule
93
+ needs a data source neither provides (e.g. "every aggregate file must have a
94
+ matching events file", which is a repo-wide naming convention rather than
95
+ either an import-graph or a diff check), add a new `type` value, a matching
96
+ interface, and a case in `evaluateRule()` in `check.ts` — keep the engine
97
+ itself generic; rule-specific knowledge belongs in `rules.json`.
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import * as fs from 'node:fs';
8
8
  import * as path from 'node:path';
9
+ import { execFileSync } from 'node:child_process';
9
10
  import rulesFile from './rules.json';
10
11
 
11
12
  interface ForbiddenImportCheck {
@@ -16,12 +17,22 @@ interface ForbiddenImportCheck {
16
17
  forbid: string[];
17
18
  }
18
19
 
20
+ interface RequiredCompanionCheck {
21
+ type: 'required-companion';
22
+ // Glob patterns selecting changed files that trigger the requirement.
23
+ from: string[];
24
+ // Glob patterns -- at least one CHANGED file must match one of these.
25
+ requireOneOf: string[];
26
+ // Optional -- 'from' files matching these globs don't trigger the requirement.
27
+ exempt?: string[];
28
+ }
29
+
19
30
  interface Rule {
20
31
  id: string;
21
32
  description: string;
22
33
  enabled: boolean;
23
34
  severity: 'low' | 'medium' | 'high' | 'critical';
24
- check: ForbiddenImportCheck;
35
+ check: ForbiddenImportCheck | RequiredCompanionCheck;
25
36
  }
26
37
 
27
38
  interface Violation {
@@ -32,6 +43,7 @@ interface Violation {
32
43
 
33
44
  const REPO_ROOT = path.resolve(__dirname, '..');
34
45
  const IGNORED_DIRS = new Set(['node_modules', '.git', '.swamp', 'cdk.out', 'lib', 'build', 'dist']);
46
+ const BASE_REF = process.env.ARCHITECTURE_RULES_BASE_REF || 'origin/main';
35
47
 
36
48
  // Minimal glob -> RegExp: supports "*", "**", "**/" and literal path segments.
37
49
  // No new dependency for this — the only pattern shapes rules.json ever needs
@@ -69,6 +81,26 @@ function toRepoRelative(absPath: string): string {
69
81
  return path.relative(REPO_ROOT, absPath).split(path.sep).join('/');
70
82
  }
71
83
 
84
+ // Files changed relative to baseRef, sourced from git rather than the whole-tree
85
+ // walk() below -- required-companion checks care about what a PR touched, not
86
+ // the full repo. Throws (rather than returning []) if baseRef cannot be resolved,
87
+ // so an unfetched base ref fails the check instead of silently reporting no violations.
88
+ function getChangedFiles(baseRef: string): string[] {
89
+ let output: string;
90
+ try {
91
+ output = execFileSync('git', ['diff', '--name-only', '--diff-filter=ACMR', `${baseRef}...HEAD`], {
92
+ cwd: REPO_ROOT,
93
+ encoding: 'utf8',
94
+ });
95
+ } catch (err) {
96
+ throw new Error(
97
+ `architecture-rules: failed to compute the changed-file set against base ref "${baseRef}" -- ` +
98
+ `is it fetched and resolvable in this checkout? (${(err as Error).message})`,
99
+ );
100
+ }
101
+ return output.split('\n').map((line) => line.trim()).filter((line) => line.length > 0);
102
+ }
103
+
72
104
  function walk(dir: string, acc: string[] = []): string[] {
73
105
  for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
74
106
  if (IGNORED_DIRS.has(entry.name)) continue;
@@ -103,7 +135,7 @@ function resolvedCandidates(fromFile: string, spec: string): string[] {
103
135
  }
104
136
 
105
137
  function evaluateForbiddenImport(rule: Rule): Violation[] {
106
- const { from, forbid } = rule.check;
138
+ const { from, forbid } = rule.check as ForbiddenImportCheck;
107
139
  if (from.length === 0 || forbid.length === 0) return [];
108
140
 
109
141
  const violations: Violation[] = [];
@@ -126,10 +158,34 @@ function evaluateForbiddenImport(rule: Rule): Violation[] {
126
158
  return violations;
127
159
  }
128
160
 
161
+ function evaluateRequiredCompanion(rule: Rule): Violation[] {
162
+ const { from, requireOneOf, exempt } = rule.check as RequiredCompanionCheck;
163
+ if (from.length === 0 || requireOneOf.length === 0) return [];
164
+
165
+ const changedFiles = getChangedFiles(BASE_REF);
166
+ const triggering = changedFiles.filter(
167
+ (file) => matchesAny(file, from) && !(exempt && matchesAny(file, exempt)),
168
+ );
169
+ if (triggering.length === 0) return [];
170
+
171
+ const satisfied = changedFiles.some((file) => matchesAny(file, requireOneOf));
172
+ if (satisfied) return [];
173
+
174
+ return [
175
+ {
176
+ ruleId: rule.id,
177
+ severity: rule.severity,
178
+ message: `changed file(s) ${triggering.join(', ')} match rule "${rule.id}"'s "from" patterns, but no changed file matches its "requireOneOf" patterns`,
179
+ },
180
+ ];
181
+ }
182
+
129
183
  function evaluateRule(rule: Rule): Violation[] {
130
184
  switch (rule.check.type) {
131
185
  case 'forbidden-import':
132
186
  return evaluateForbiddenImport(rule);
187
+ case 'required-companion':
188
+ return evaluateRequiredCompanion(rule);
133
189
  default:
134
190
  throw new Error(`architecture-rules: unknown check.type "${(rule.check as { type: string }).type}" on rule "${rule.id}"`);
135
191
  }
@@ -6,7 +6,7 @@ class ApiFunctionFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
7
  super(project, 'src/constructs/handler/Api.Function.ts', {
8
8
  contents: `import serverless from 'serverless-http';
9
- import { initializeApp } from './app';
9
+ import { initializeApp } from '../../api/app';
10
10
 
11
11
  export const handler = serverless(initializeApp());
12
12
 
@@ -15,4 +15,4 @@ export const handler = serverless(initializeApp());
15
15
  }
16
16
  }
17
17
  exports.ApiFunctionFile = ApiFunctionFile;
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpRnVuY3Rpb25GaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FwaS9BcGlGdW5jdGlvbkZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTZDO0FBRzdDLE1BQWEsZUFBZ0IsU0FBUSxtQkFBVTtJQUM3QyxZQUFZLE9BQWdCO1FBQzFCLEtBQUssQ0FBQyxPQUFPLEVBQUUsd0NBQXdDLEVBQUU7WUFDdkQsUUFBUSxFQUFFOzs7OztDQUtmO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBWEQsMENBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0LCBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcblxuXG5leHBvcnQgY2xhc3MgQXBpRnVuY3Rpb25GaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9BcGkuRnVuY3Rpb24udHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCBzZXJ2ZXJsZXNzIGZyb20gJ3NlcnZlcmxlc3MtaHR0cCc7XG5pbXBvcnQgeyBpbml0aWFsaXplQXBwIH0gZnJvbSAnLi9hcHAnO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IHNlcnZlcmxlc3MoaW5pdGlhbGl6ZUFwcCgpKTtcblxuYCxcbiAgICB9KTtcbiAgfVxufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpRnVuY3Rpb25GaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FwaS9BcGlGdW5jdGlvbkZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTZDO0FBRzdDLE1BQWEsZUFBZ0IsU0FBUSxtQkFBVTtJQUM3QyxZQUFZLE9BQWdCO1FBQzFCLEtBQUssQ0FBQyxPQUFPLEVBQUUsd0NBQXdDLEVBQUU7WUFDdkQsUUFBUSxFQUFFOzs7OztDQUtmO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBWEQsMENBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0LCBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcblxuXG5leHBvcnQgY2xhc3MgQXBpRnVuY3Rpb25GaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9BcGkuRnVuY3Rpb24udHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCBzZXJ2ZXJsZXNzIGZyb20gJ3NlcnZlcmxlc3MtaHR0cCc7XG5pbXBvcnQgeyBpbml0aWFsaXplQXBwIH0gZnJvbSAnLi4vLi4vYXBpL2FwcCc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gc2VydmVybGVzcyhpbml0aWFsaXplQXBwKCkpO1xuXG5gLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -4,7 +4,7 @@ exports.AppHelperFile = void 0;
4
4
  const projen_1 = require("projen");
5
5
  class AppHelperFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
- super(project, 'src/constructs/handler/app.ts', {
7
+ super(project, 'src/api/app.ts', {
8
8
  contents: `import express, { Express, Request, Response, Router } from 'express';
9
9
  import { ExpressApiRouter } from './ExpressApiRouter';
10
10
  import { authMiddleware } from './auth';
@@ -60,4 +60,4 @@ export function initializeApp(): Express {
60
60
  }
61
61
  }
62
62
  exports.AppHelperFile = AppHelperFile;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwSGVscGVyRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BcGkvQXBwSGVscGVyRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBNkM7QUFFN0MsTUFBYSxhQUFjLFNBQVEsbUJBQVU7SUFDM0MsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLCtCQUErQixFQUFFO1lBQzlDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrRGY7U0FDSSxDQUNBLENBQUM7SUFDSixDQUFDO0NBRUY7QUExREQsc0NBMERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvamVjdCwgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBjbGFzcyBBcHBIZWxwZXJGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9hcHAudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCBleHByZXNzLCB7IEV4cHJlc3MsIFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEV4cHJlc3NBcGlSb3V0ZXIgfSBmcm9tICcuL0V4cHJlc3NBcGlSb3V0ZXInO1xuaW1wb3J0IHsgYXV0aE1pZGRsZXdhcmUgfSBmcm9tICcuL2F1dGgnO1xuaW1wb3J0IHsgY29yc01pZGRsZXdhcmUgfSBmcm9tICcuL2NvcnMnO1xuaW1wb3J0IHsgZXJyb3JIYW5kbGVyTWlkZGxld2FyZSB9IGZyb20gJy4vZXJyb3InO1xuXG5leHBvcnQgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuXG4vLyBCb2R5IHBhcnNpbmcgbWlkZGxld2FyZVxuYXBwLnVzZShleHByZXNzLmpzb24oKSk7XG5cbi8vIFBsYWNlaG9sZGVyIGZvciBwcmUtcm91dGUgbWlkZGxld2FyZSAodXNlZCBieSBkZXYudHMgZm9yIG1vY2sgY29udGV4dClcbmV4cG9ydCBjb25zdCBwcmVSb3V0ZU1pZGRsZXdhcmU6IEFycmF5PGV4cHJlc3MuUmVxdWVzdEhhbmRsZXI+ID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQXBwKCk6IEV4cHJlc3Mge1xuICAvLyBSZWdpc3RlciBtaWRkbGV3YXJlIGluIGNvcnJlY3Qgb3JkZXI6XG4gIC8vIDEuIEJvZHkgcGFyc2luZyAoYWxyZWFkeSBkb25lIGFib3ZlKVxuICAvLyAyLiBDT1JTIG1pZGRsZXdhcmUgKGhhbmRsZXMgcHJlZmxpZ2h0IGFuZCBzZXRzIGhlYWRlcnMpXG4gIGFwcC51c2UoY29yc01pZGRsZXdhcmUpO1xuXG4gIC8vIDMuIFByZS1yb3V0ZSBtaWRkbGV3YXJlIChlLmcuLCBhdXRoL21vY2sgY29udGV4dCBmcm9tIGRldi50cylcbiAgcHJlUm91dGVNaWRkbGV3YXJlLmZvckVhY2gobXcgPT4gYXBwLnVzZShtdykpO1xuXG4gIC8vIDQuIEF1dGggbWlkZGxld2FyZSAoZXh0cmFjdHMgdXNlcklkLCBvcmcgcm9sZSwgcGVybWlzc2lvbnMgZnJvbSBKV1QgXCJvXCIgY2xhaW0pXG4gIGFwcC51c2UoYXV0aE1pZGRsZXdhcmUpO1xuXG4gIC8vIDUuIFJvdXRlcyAoaGFuZGxlcnMgd3JhcHBlZCB3aXRoIHJlc3BvbnNlRm9ybWF0dGVyKVxuICBjb25zdCBhcGlSb3V0ZXI6IFJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG5cbiAgLy8gSW5pdGlhbGl6ZSBFeHByZXNzQXBpUm91dGVyIGlmIGRhdGFiYXNlIGNsaWVudCBpcyBwcm92aWRlZFxuICAvLyBpZiAoIWRhdGFiYXNlQ2xpZW50KSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RCX0VORFBPSU5UIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBkYXRhYmFzZSBjbGllbnQgaXMgbm90IHNldCcpO1xuICAvLyB9XG5cbiAgY29uc3QgZXhwcmVzc0FwaVJvdXRlciA9IG5ldyBFeHByZXNzQXBpUm91dGVyKFxuICAgIGFwaVJvdXRlcixcbiAgKTtcbiAgYXBwLnVzZSgnL2FwaScsIGV4cHJlc3NBcGlSb3V0ZXIuZ2V0Um91dGVyKCkpO1xuXG4gIC8vIDYuIEVycm9yIGhhbmRsZXIgbWlkZGxld2FyZSAoY2F0Y2hlcyBhbGwgZXJyb3JzKVxuICBhcHAudXNlKGVycm9ySGFuZGxlck1pZGRsZXdhcmUpO1xuXG4gIC8vIENhdGNoLWFsbCByb3V0ZSBmb3IgNDA0cyAtIHVzZSByZWdleCBwYXR0ZXJuIGZvciBFeHByZXNzIDVcbiAgYXBwLmFsbCgvLiovLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5kZWJ1ZyhcXGBbNDA0XSBcXCR7cmVxLm1ldGhvZH0gXFwke3JlcS5wYXRofSAtIFJvdXRlIG5vdCBmb3VuZFxcYCk7XG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ05vdCBGb3VuZCcsIHBhdGg6IHJlcS5wYXRoIH0pO1xuICB9KTtcblxuICByZXR1cm4gYXBwO1xufVxuYCxcbiAgICB9LFxuICAgICk7XG4gIH1cblxufVxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwSGVscGVyRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BcGkvQXBwSGVscGVyRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBNkM7QUFFN0MsTUFBYSxhQUFjLFNBQVEsbUJBQVU7SUFDM0MsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFO1lBQy9CLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrRGY7U0FDSSxDQUNBLENBQUM7SUFDSixDQUFDO0NBRUY7QUExREQsc0NBMERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvamVjdCwgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBjbGFzcyBBcHBIZWxwZXJGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2FwaS9hcHAudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCBleHByZXNzLCB7IEV4cHJlc3MsIFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEV4cHJlc3NBcGlSb3V0ZXIgfSBmcm9tICcuL0V4cHJlc3NBcGlSb3V0ZXInO1xuaW1wb3J0IHsgYXV0aE1pZGRsZXdhcmUgfSBmcm9tICcuL2F1dGgnO1xuaW1wb3J0IHsgY29yc01pZGRsZXdhcmUgfSBmcm9tICcuL2NvcnMnO1xuaW1wb3J0IHsgZXJyb3JIYW5kbGVyTWlkZGxld2FyZSB9IGZyb20gJy4vZXJyb3InO1xuXG5leHBvcnQgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuXG4vLyBCb2R5IHBhcnNpbmcgbWlkZGxld2FyZVxuYXBwLnVzZShleHByZXNzLmpzb24oKSk7XG5cbi8vIFBsYWNlaG9sZGVyIGZvciBwcmUtcm91dGUgbWlkZGxld2FyZSAodXNlZCBieSBkZXYudHMgZm9yIG1vY2sgY29udGV4dClcbmV4cG9ydCBjb25zdCBwcmVSb3V0ZU1pZGRsZXdhcmU6IEFycmF5PGV4cHJlc3MuUmVxdWVzdEhhbmRsZXI+ID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQXBwKCk6IEV4cHJlc3Mge1xuICAvLyBSZWdpc3RlciBtaWRkbGV3YXJlIGluIGNvcnJlY3Qgb3JkZXI6XG4gIC8vIDEuIEJvZHkgcGFyc2luZyAoYWxyZWFkeSBkb25lIGFib3ZlKVxuICAvLyAyLiBDT1JTIG1pZGRsZXdhcmUgKGhhbmRsZXMgcHJlZmxpZ2h0IGFuZCBzZXRzIGhlYWRlcnMpXG4gIGFwcC51c2UoY29yc01pZGRsZXdhcmUpO1xuXG4gIC8vIDMuIFByZS1yb3V0ZSBtaWRkbGV3YXJlIChlLmcuLCBhdXRoL21vY2sgY29udGV4dCBmcm9tIGRldi50cylcbiAgcHJlUm91dGVNaWRkbGV3YXJlLmZvckVhY2gobXcgPT4gYXBwLnVzZShtdykpO1xuXG4gIC8vIDQuIEF1dGggbWlkZGxld2FyZSAoZXh0cmFjdHMgdXNlcklkLCBvcmcgcm9sZSwgcGVybWlzc2lvbnMgZnJvbSBKV1QgXCJvXCIgY2xhaW0pXG4gIGFwcC51c2UoYXV0aE1pZGRsZXdhcmUpO1xuXG4gIC8vIDUuIFJvdXRlcyAoaGFuZGxlcnMgd3JhcHBlZCB3aXRoIHJlc3BvbnNlRm9ybWF0dGVyKVxuICBjb25zdCBhcGlSb3V0ZXI6IFJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG5cbiAgLy8gSW5pdGlhbGl6ZSBFeHByZXNzQXBpUm91dGVyIGlmIGRhdGFiYXNlIGNsaWVudCBpcyBwcm92aWRlZFxuICAvLyBpZiAoIWRhdGFiYXNlQ2xpZW50KSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RCX0VORFBPSU5UIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBkYXRhYmFzZSBjbGllbnQgaXMgbm90IHNldCcpO1xuICAvLyB9XG5cbiAgY29uc3QgZXhwcmVzc0FwaVJvdXRlciA9IG5ldyBFeHByZXNzQXBpUm91dGVyKFxuICAgIGFwaVJvdXRlcixcbiAgKTtcbiAgYXBwLnVzZSgnL2FwaScsIGV4cHJlc3NBcGlSb3V0ZXIuZ2V0Um91dGVyKCkpO1xuXG4gIC8vIDYuIEVycm9yIGhhbmRsZXIgbWlkZGxld2FyZSAoY2F0Y2hlcyBhbGwgZXJyb3JzKVxuICBhcHAudXNlKGVycm9ySGFuZGxlck1pZGRsZXdhcmUpO1xuXG4gIC8vIENhdGNoLWFsbCByb3V0ZSBmb3IgNDA0cyAtIHVzZSByZWdleCBwYXR0ZXJuIGZvciBFeHByZXNzIDVcbiAgYXBwLmFsbCgvLiovLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5kZWJ1ZyhcXGBbNDA0XSBcXCR7cmVxLm1ldGhvZH0gXFwke3JlcS5wYXRofSAtIFJvdXRlIG5vdCBmb3VuZFxcYCk7XG4gICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ05vdCBGb3VuZCcsIHBhdGg6IHJlcS5wYXRoIH0pO1xuICB9KTtcblxuICByZXR1cm4gYXBwO1xufVxuYCxcbiAgICB9LFxuICAgICk7XG4gIH1cblxufVxuIl19
@@ -4,7 +4,7 @@ exports.AuthMiddlewareFile = void 0;
4
4
  const projen_1 = require("projen");
5
5
  class AuthMiddlewareFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
- super(project, 'src/constructs/handler/auth.ts', {
7
+ super(project, 'src/api/auth.ts', {
8
8
  contents: `import type { Request, Response, NextFunction } from 'express';
9
9
  import jwt from 'jsonwebtoken';
10
10
 
@@ -106,4 +106,4 @@ export function authMiddleware(req: Request, _res: Response, next: NextFunction)
106
106
  }
107
107
  }
108
108
  exports.AuthMiddlewareFile = AuthMiddlewareFile;
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0aE1pZGRsZXdhcmVGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FwaS9BdXRoTWlkZGxld2FyZUZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTZDO0FBRTdDLE1BQWEsa0JBQW1CLFNBQVEsbUJBQVU7SUFDaEQsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFO1lBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0dmO1NBQ0ksQ0FBQyxDQUFDO0lBRUwsQ0FBQztDQUVGO0FBeEdELGdEQXdHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QsIFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgY2xhc3MgQXV0aE1pZGRsZXdhcmVGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9hdXRoLnRzJywge1xuICAgICAgY29udGVudHM6IGBpbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcblxuLyoqXG4gKiBDbGVyayBPcmdhbml6YXRpb24gcm9sZSBrZXlzICh3aXRob3V0IG9yZzogcHJlZml4IGluIEpXVCBcIm8ucm9sXCIgY2xhaW0pXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ1JvbGUgPSAnYWRtaW4nIHwgJ21lbWJlcicgfCAnc2FsZXNfdGVhbScgfCAnc3RvcmVfbWFuYWdlcnMnO1xuXG4vKipcbiAqIFNlc3Npb24gZGF0YSBleHRyYWN0ZWQgZnJvbSBDbGVyayBKV1Qgb3IgYXV0aG9yaXplciBjb250ZXh0LlxuICogVGhlIFwib1wiIChPcmdhbml6YXRpb24pIGNsYWltIGlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGhhcyBhbiBhY3RpdmUgb3JnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTZXNzaW9uIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIG9yZ0lkPzogc3RyaW5nO1xuICBvcmdTbHVnPzogc3RyaW5nO1xuICBvcmdSb2xlPzogT3JnUm9sZTtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgRXhwcmVzcyB7XG4gICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgYXV0aD86IEF1dGhTZXNzaW9uO1xuICAgIH1cbiAgfVxufVxuXG4vKiogSldUIHBheWxvYWQgc2hhcGUgZm9yIENsZXJrIHNlc3Npb24gdG9rZW4gd2l0aCBPcmdhbml6YXRpb24gY2xhaW0gKi9cbmludGVyZmFjZSBDbGVya0p3dFBheWxvYWQge1xuICBzdWI/OiBzdHJpbmc7XG4gIG8/OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgc2xnPzogc3RyaW5nO1xuICAgIHJvbD86IHN0cmluZztcbiAgICBwZXI/OiBzdHJpbmdbXTtcbiAgICBmcG0/OiB1bmtub3duO1xuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGF1dGggc2Vzc2lvbiBmcm9tIEpXVCAoQ2xlcmsgXCJvXCIgY2xhaW0pIG9yIGF1dGhvcml6ZXIgY29udGV4dC5cbiAqIC0gTGFtYmRhL0FQSSBHYXRld2F5OiBkZWNvZGVzIEpXVCBmcm9tIEF1dGhvcml6YXRpb24gaGVhZGVyIChhbHJlYWR5IHZhbGlkYXRlZCBieSBDbGVyayBhdXRob3JpemVyKVxuICogLSBMb2NhbCBkZXY6IHVzZXMgcmVxLmFwaUdhdGV3YXkuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplclxuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0aE1pZGRsZXdhcmUocmVxOiBSZXF1ZXN0LCBfcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgLy8gMS4gQXV0aG9yaXplciBjb250ZXh0IChMYW1iZGEgb3IgbG9jYWwgbW9jaykgLSBwcm92aWRlcyB1c2VySWQgd2hlbiBKV1Qgbm90IGF2YWlsYWJsZVxuICAgIGNvbnN0IGF1dGhvcml6ZXIgPSAocmVxIGFzIFJlcXVlc3QgJiB7XG4gICAgICBhcGlHYXRld2F5PzogeyBldmVudD86IHsgcmVxdWVzdENvbnRleHQ/OiB7IGF1dGhvcml6ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IH0gfTtcbiAgICB9KS5hcGlHYXRld2F5Py5ldmVudD8ucmVxdWVzdENvbnRleHQ/LmF1dGhvcml6ZXI7XG5cbiAgICBsZXQgdXNlcklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG9yZ1NsdWc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgb3JnUm9sZTogT3JnUm9sZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVybWlzc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGF1dGhvcml6ZXIgJiYgdHlwZW9mIGF1dGhvcml6ZXIudXNlcklkID09PSAnc3RyaW5nJykge1xuICAgICAgdXNlcklkID0gYXV0aG9yaXplci51c2VySWQ7XG4gICAgICAvLyBBdXRob3JpemVyIG1heSBwYXNzIG9yZyBkYXRhIGlmIGNvbmZpZ3VyZWRcbiAgICAgIGlmICh0eXBlb2YgYXV0aG9yaXplci5vcmdJZCA9PT0gJ3N0cmluZycpIG9yZ0lkID0gYXV0aG9yaXplci5vcmdJZDtcbiAgICAgIGlmICh0eXBlb2YgYXV0aG9yaXplci5vcmdSb2xlID09PSAnc3RyaW5nJykgb3JnUm9sZSA9IGF1dGhvcml6ZXIub3JnUm9sZSBhcyBPcmdSb2xlO1xuICAgIH1cblxuICAgIC8vIDIuIERlY29kZSBKV1QgZm9yIGZ1bGwgY2xhaW1zIChPcmdhbml6YXRpb24gXCJvXCIgY2xhaW0pXG4gICAgY29uc3QgYXV0aEhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgY29uc3QgdG9rZW4gPSBhdXRoSGVhZGVyPy5zdGFydHNXaXRoKCdCZWFyZXIgJykgPyBhdXRoSGVhZGVyLnNsaWNlKDcpIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gand0LmRlY29kZSh0b2tlbikgYXMgQ2xlcmtKd3RQYXlsb2FkIHwgbnVsbDtcbiAgICAgIGlmIChkZWNvZGVkKSB7XG4gICAgICAgIGlmICghdXNlcklkICYmIGRlY29kZWQuc3ViKSB1c2VySWQgPSBkZWNvZGVkLnN1YjtcbiAgICAgICAgaWYgKGRlY29kZWQubykge1xuICAgICAgICAgIGlmIChkZWNvZGVkLm8uaWQpIG9yZ0lkID0gZGVjb2RlZC5vLmlkO1xuICAgICAgICAgIGlmIChkZWNvZGVkLm8uc2xnKSBvcmdTbHVnID0gZGVjb2RlZC5vLnNsZztcbiAgICAgICAgICBpZiAoZGVjb2RlZC5vLnJvbCkgb3JnUm9sZSA9IGRlY29kZWQuby5yb2wgYXMgT3JnUm9sZTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNvZGVkLm8ucGVyKSkgcGVybWlzc2lvbnMgPSBkZWNvZGVkLm8ucGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzZXJJZCkge1xuICAgICAgcmVxLmF1dGggPSB7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgLi4uKG9yZ0lkICYmIHsgb3JnSWQgfSksXG4gICAgICAgIC4uLihvcmdTbHVnICYmIHsgb3JnU2x1ZyB9KSxcbiAgICAgICAgLi4uKG9yZ1JvbGUgJiYgeyBvcmdSb2xlIH0pLFxuICAgICAgICAuLi4ocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB7IHBlcm1pc3Npb25zIH0pLFxuICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUud2FybignW0F1dGhdIEZhaWxlZCB0byBleHRyYWN0IHNlc3Npb246JywgZXJyKTtcbiAgfVxuICBuZXh0KCk7XG59XG5gLFxuICAgIH0pO1xuXG4gIH1cblxufVxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0aE1pZGRsZXdhcmVGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FwaS9BdXRoTWlkZGxld2FyZUZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTZDO0FBRTdDLE1BQWEsa0JBQW1CLFNBQVEsbUJBQVU7SUFDaEQsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFO1lBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0dmO1NBQ0ksQ0FBQyxDQUFDO0lBRUwsQ0FBQztDQUVGO0FBeEdELGdEQXdHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QsIFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgY2xhc3MgQXV0aE1pZGRsZXdhcmVGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2FwaS9hdXRoLnRzJywge1xuICAgICAgY29udGVudHM6IGBpbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcblxuLyoqXG4gKiBDbGVyayBPcmdhbml6YXRpb24gcm9sZSBrZXlzICh3aXRob3V0IG9yZzogcHJlZml4IGluIEpXVCBcIm8ucm9sXCIgY2xhaW0pXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ1JvbGUgPSAnYWRtaW4nIHwgJ21lbWJlcicgfCAnc2FsZXNfdGVhbScgfCAnc3RvcmVfbWFuYWdlcnMnO1xuXG4vKipcbiAqIFNlc3Npb24gZGF0YSBleHRyYWN0ZWQgZnJvbSBDbGVyayBKV1Qgb3IgYXV0aG9yaXplciBjb250ZXh0LlxuICogVGhlIFwib1wiIChPcmdhbml6YXRpb24pIGNsYWltIGlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2VyIGhhcyBhbiBhY3RpdmUgb3JnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTZXNzaW9uIHtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIG9yZ0lkPzogc3RyaW5nO1xuICBvcmdTbHVnPzogc3RyaW5nO1xuICBvcmdSb2xlPzogT3JnUm9sZTtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgRXhwcmVzcyB7XG4gICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgYXV0aD86IEF1dGhTZXNzaW9uO1xuICAgIH1cbiAgfVxufVxuXG4vKiogSldUIHBheWxvYWQgc2hhcGUgZm9yIENsZXJrIHNlc3Npb24gdG9rZW4gd2l0aCBPcmdhbml6YXRpb24gY2xhaW0gKi9cbmludGVyZmFjZSBDbGVya0p3dFBheWxvYWQge1xuICBzdWI/OiBzdHJpbmc7XG4gIG8/OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgc2xnPzogc3RyaW5nO1xuICAgIHJvbD86IHN0cmluZztcbiAgICBwZXI/OiBzdHJpbmdbXTtcbiAgICBmcG0/OiB1bmtub3duO1xuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGF1dGggc2Vzc2lvbiBmcm9tIEpXVCAoQ2xlcmsgXCJvXCIgY2xhaW0pIG9yIGF1dGhvcml6ZXIgY29udGV4dC5cbiAqIC0gTGFtYmRhL0FQSSBHYXRld2F5OiBkZWNvZGVzIEpXVCBmcm9tIEF1dGhvcml6YXRpb24gaGVhZGVyIChhbHJlYWR5IHZhbGlkYXRlZCBieSBDbGVyayBhdXRob3JpemVyKVxuICogLSBMb2NhbCBkZXY6IHVzZXMgcmVxLmFwaUdhdGV3YXkuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplclxuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0aE1pZGRsZXdhcmUocmVxOiBSZXF1ZXN0LCBfcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgLy8gMS4gQXV0aG9yaXplciBjb250ZXh0IChMYW1iZGEgb3IgbG9jYWwgbW9jaykgLSBwcm92aWRlcyB1c2VySWQgd2hlbiBKV1Qgbm90IGF2YWlsYWJsZVxuICAgIGNvbnN0IGF1dGhvcml6ZXIgPSAocmVxIGFzIFJlcXVlc3QgJiB7XG4gICAgICBhcGlHYXRld2F5PzogeyBldmVudD86IHsgcmVxdWVzdENvbnRleHQ/OiB7IGF1dGhvcml6ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IH0gfTtcbiAgICB9KS5hcGlHYXRld2F5Py5ldmVudD8ucmVxdWVzdENvbnRleHQ/LmF1dGhvcml6ZXI7XG5cbiAgICBsZXQgdXNlcklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG9yZ1NsdWc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgb3JnUm9sZTogT3JnUm9sZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVybWlzc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGF1dGhvcml6ZXIgJiYgdHlwZW9mIGF1dGhvcml6ZXIudXNlcklkID09PSAnc3RyaW5nJykge1xuICAgICAgdXNlcklkID0gYXV0aG9yaXplci51c2VySWQ7XG4gICAgICAvLyBBdXRob3JpemVyIG1heSBwYXNzIG9yZyBkYXRhIGlmIGNvbmZpZ3VyZWRcbiAgICAgIGlmICh0eXBlb2YgYXV0aG9yaXplci5vcmdJZCA9PT0gJ3N0cmluZycpIG9yZ0lkID0gYXV0aG9yaXplci5vcmdJZDtcbiAgICAgIGlmICh0eXBlb2YgYXV0aG9yaXplci5vcmdSb2xlID09PSAnc3RyaW5nJykgb3JnUm9sZSA9IGF1dGhvcml6ZXIub3JnUm9sZSBhcyBPcmdSb2xlO1xuICAgIH1cblxuICAgIC8vIDIuIERlY29kZSBKV1QgZm9yIGZ1bGwgY2xhaW1zIChPcmdhbml6YXRpb24gXCJvXCIgY2xhaW0pXG4gICAgY29uc3QgYXV0aEhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgY29uc3QgdG9rZW4gPSBhdXRoSGVhZGVyPy5zdGFydHNXaXRoKCdCZWFyZXIgJykgPyBhdXRoSGVhZGVyLnNsaWNlKDcpIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gand0LmRlY29kZSh0b2tlbikgYXMgQ2xlcmtKd3RQYXlsb2FkIHwgbnVsbDtcbiAgICAgIGlmIChkZWNvZGVkKSB7XG4gICAgICAgIGlmICghdXNlcklkICYmIGRlY29kZWQuc3ViKSB1c2VySWQgPSBkZWNvZGVkLnN1YjtcbiAgICAgICAgaWYgKGRlY29kZWQubykge1xuICAgICAgICAgIGlmIChkZWNvZGVkLm8uaWQpIG9yZ0lkID0gZGVjb2RlZC5vLmlkO1xuICAgICAgICAgIGlmIChkZWNvZGVkLm8uc2xnKSBvcmdTbHVnID0gZGVjb2RlZC5vLnNsZztcbiAgICAgICAgICBpZiAoZGVjb2RlZC5vLnJvbCkgb3JnUm9sZSA9IGRlY29kZWQuby5yb2wgYXMgT3JnUm9sZTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNvZGVkLm8ucGVyKSkgcGVybWlzc2lvbnMgPSBkZWNvZGVkLm8ucGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzZXJJZCkge1xuICAgICAgcmVxLmF1dGggPSB7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgLi4uKG9yZ0lkICYmIHsgb3JnSWQgfSksXG4gICAgICAgIC4uLihvcmdTbHVnICYmIHsgb3JnU2x1ZyB9KSxcbiAgICAgICAgLi4uKG9yZ1JvbGUgJiYgeyBvcmdSb2xlIH0pLFxuICAgICAgICAuLi4ocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCAmJiB7IHBlcm1pc3Npb25zIH0pLFxuICAgICAgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUud2FybignW0F1dGhdIEZhaWxlZCB0byBleHRyYWN0IHNlc3Npb246JywgZXJyKTtcbiAgfVxuICBuZXh0KCk7XG59XG5gLFxuICAgIH0pO1xuXG4gIH1cblxufVxuIl19
@@ -4,7 +4,7 @@ exports.CorsMiddlewareFile = void 0;
4
4
  const projen_1 = require("projen");
5
5
  class CorsMiddlewareFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
- super(project, 'src/constructs/handler/cors.ts', {
7
+ super(project, 'src/api/cors.ts', {
8
8
  contents: `import type { Request, Response, NextFunction } from 'express';
9
9
 
10
10
  /**
@@ -51,4 +51,4 @@ export function corsMiddleware(req: Request, res: Response, next: NextFunction):
51
51
  }
52
52
  }
53
53
  exports.CorsMiddlewareFile = CorsMiddlewareFile;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29yc01pZGRsZXdhcmVGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FwaS9Db3JzTWlkZGxld2FyZUZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTZDO0FBRTdDLE1BQWEsa0JBQW1CLFNBQVEsbUJBQVU7SUFDaEQsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFO1lBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5Q2Y7U0FDSSxDQUFDLENBQUM7SUFFTCxDQUFDO0NBRUY7QUFqREQsZ0RBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvamVjdCwgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBjbGFzcyBDb3JzTWlkZGxld2FyZUZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL2NvcnMudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuXG4vKipcbiAqIFByb2R1Y3Rpb24gb3JpZ2luIGZvciBDT1JTXG4gKi9cbi8vIFRPRE86IENoYW5nZSB0byB0aGUgcHJvZHVjdGlvbiBvcmlnaW5cbmNvbnN0IFBST0RVQ1RJT05fT1JJR0lOID0gcHJvY2Vzcy5lbnYuT1JJR0lOIHx8ICdodHRwczovL3NhbXBsZS5tYWNlZG9uLnNhbmRib3guZGVmaWFuY2UuYWknO1xuXG4vKipcbiAqIENlbnRyYWxpemVkIENPUlMgbWlkZGxld2FyZVxuICogSGFuZGxlcyBwcmVmbGlnaHQgT1BUSU9OUyByZXF1ZXN0cyBhbmQgc2V0cyBDT1JTIGhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcnNNaWRkbGV3YXJlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCB7XG4gIGNvbnN0IG9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcblxuICAvLyBEZXRlcm1pbmUgYWxsb3dlZCBvcmlnaW5cbiAgbGV0IGFsbG93ZWRPcmlnaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKG9yaWdpbiAmJiBvcmlnaW4uc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdDonKSkge1xuICAgIC8vIExvY2FsIGRldmVsb3BtZW50IC0gYWxsb3cgbG9jYWxob3N0IG9yaWdpbnNcbiAgICBhbGxvd2VkT3JpZ2luID0gb3JpZ2luO1xuICB9IGVsc2UgaWYgKG9yaWdpbiA9PT0gUFJPRFVDVElPTl9PUklHSU4pIHtcbiAgICAvLyBQcm9kdWN0aW9uIC0gYWxsb3cgY29uZmlndXJlZCBwcm9kdWN0aW9uIG9yaWdpblxuICAgIGFsbG93ZWRPcmlnaW4gPSBQUk9EVUNUSU9OX09SSUdJTjtcbiAgfVxuXG4gIC8vIFNldCBDT1JTIGhlYWRlcnNcbiAgaWYgKGFsbG93ZWRPcmlnaW4pIHtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd2VkT3JpZ2luKTtcbiAgfVxuICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCwgUE9TVCwgUFVULCBERUxFVEUsIE9QVElPTlMnKTtcbiAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICdPcmlnaW4sIFgtUmVxdWVzdGVkLVdpdGgsIENvbnRlbnQtVHlwZSwgQWNjZXB0LCBBdXRob3JpemF0aW9uJyk7XG4gIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJywgJ3RydWUnKTtcblxuICAvLyBIYW5kbGUgcHJlZmxpZ2h0IE9QVElPTlMgcmVxdWVzdHNcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbmV4dCgpO1xufVxuYCxcbiAgICB9KTtcblxuICB9XG5cbn1cbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29yc01pZGRsZXdhcmVGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FwaS9Db3JzTWlkZGxld2FyZUZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTZDO0FBRTdDLE1BQWEsa0JBQW1CLFNBQVEsbUJBQVU7SUFDaEQsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFO1lBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5Q2Y7U0FDSSxDQUFDLENBQUM7SUFFTCxDQUFDO0NBRUY7QUFqREQsZ0RBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvamVjdCwgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBjbGFzcyBDb3JzTWlkZGxld2FyZUZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvYXBpL2NvcnMudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuXG4vKipcbiAqIFByb2R1Y3Rpb24gb3JpZ2luIGZvciBDT1JTXG4gKi9cbi8vIFRPRE86IENoYW5nZSB0byB0aGUgcHJvZHVjdGlvbiBvcmlnaW5cbmNvbnN0IFBST0RVQ1RJT05fT1JJR0lOID0gcHJvY2Vzcy5lbnYuT1JJR0lOIHx8ICdodHRwczovL3NhbXBsZS5tYWNlZG9uLnNhbmRib3guZGVmaWFuY2UuYWknO1xuXG4vKipcbiAqIENlbnRyYWxpemVkIENPUlMgbWlkZGxld2FyZVxuICogSGFuZGxlcyBwcmVmbGlnaHQgT1BUSU9OUyByZXF1ZXN0cyBhbmQgc2V0cyBDT1JTIGhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcnNNaWRkbGV3YXJlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCB7XG4gIGNvbnN0IG9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcblxuICAvLyBEZXRlcm1pbmUgYWxsb3dlZCBvcmlnaW5cbiAgbGV0IGFsbG93ZWRPcmlnaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKG9yaWdpbiAmJiBvcmlnaW4uc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdDonKSkge1xuICAgIC8vIExvY2FsIGRldmVsb3BtZW50IC0gYWxsb3cgbG9jYWxob3N0IG9yaWdpbnNcbiAgICBhbGxvd2VkT3JpZ2luID0gb3JpZ2luO1xuICB9IGVsc2UgaWYgKG9yaWdpbiA9PT0gUFJPRFVDVElPTl9PUklHSU4pIHtcbiAgICAvLyBQcm9kdWN0aW9uIC0gYWxsb3cgY29uZmlndXJlZCBwcm9kdWN0aW9uIG9yaWdpblxuICAgIGFsbG93ZWRPcmlnaW4gPSBQUk9EVUNUSU9OX09SSUdJTjtcbiAgfVxuXG4gIC8vIFNldCBDT1JTIGhlYWRlcnNcbiAgaWYgKGFsbG93ZWRPcmlnaW4pIHtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd2VkT3JpZ2luKTtcbiAgfVxuICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCwgUE9TVCwgUFVULCBERUxFVEUsIE9QVElPTlMnKTtcbiAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICdPcmlnaW4sIFgtUmVxdWVzdGVkLVdpdGgsIENvbnRlbnQtVHlwZSwgQWNjZXB0LCBBdXRob3JpemF0aW9uJyk7XG4gIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJywgJ3RydWUnKTtcblxuICAvLyBIYW5kbGUgcHJlZmxpZ2h0IE9QVElPTlMgcmVxdWVzdHNcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbmV4dCgpO1xufVxuYCxcbiAgICB9KTtcblxuICB9XG5cbn1cbiJdfQ==
@@ -4,7 +4,7 @@ exports.ErrorHandlerMiddlewareFile = void 0;
4
4
  const projen_1 = require("projen");
5
5
  class ErrorHandlerMiddlewareFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
- super(project, 'src/constructs/handler/error.ts', {
7
+ super(project, 'src/api/error.ts', {
8
8
  contents: `import type { Request, Response, NextFunction } from 'express';
9
9
  /**
10
10
  * HTTP error for 4xx/5xx responses.
@@ -46,4 +46,4 @@ export function errorHandlerMiddleware(
46
46
  }
47
47
  }
48
48
  exports.ErrorHandlerMiddlewareFile = ErrorHandlerMiddlewareFile;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3JIYW5kbGVyTWlkZGxld2FyZUZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQXBpL0Vycm9ySGFuZGxlck1pZGRsZXdhcmVGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE2QztBQUU3QyxNQUFhLDBCQUEyQixTQUFRLG1CQUFVO0lBQ3hELFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRTtZQUNoRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DZjtTQUNJLENBQUMsQ0FBQztJQUVMLENBQUM7Q0FFRjtBQTVDRCxnRUE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0LCBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcblxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlck1pZGRsZXdhcmVGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9lcnJvci50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG4vKipcbiAqIEhUVFAgZXJyb3IgZm9yIDR4eC81eHggcmVzcG9uc2VzLlxuICogRXJyb3IgbWlkZGxld2FyZSByZWFkcyBzdGF0dXNDb2RlIHRvIHNlbmQgYXBwcm9wcmlhdGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnSHR0cEVycm9yJztcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIGhhbmRsZXIgbWlkZGxld2FyZS4gSGFuZGxlcyBIdHRwRXJyb3Igd2l0aCBzdGF0dXNDb2RlOyBvdGhlcndpc2UgcmV0dXJucyA1MDAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckhhbmRsZXJNaWRkbGV3YXJlKFxuICBlcnI6IHVua25vd24sXG4gIF9yZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIF9uZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvcikge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLmpzb24oe1xuICAgICAgZXJyb3I6IGVyci5zdGF0dXNDb2RlID49IDUwMCA/ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InIDogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICBjb25zb2xlLmVycm9yKCdbRXJyb3JdJywgZXJyKTtcbiAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIG1lc3NhZ2UgfSk7XG59XG5gLFxuICAgIH0pO1xuXG4gIH1cblxufVxuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3JIYW5kbGVyTWlkZGxld2FyZUZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQXBpL0Vycm9ySGFuZGxlck1pZGRsZXdhcmVGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE2QztBQUU3QyxNQUFhLDBCQUEyQixTQUFRLG1CQUFVO0lBQ3hELFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRTtZQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW9DZjtTQUNJLENBQUMsQ0FBQztJQUVMLENBQUM7Q0FFRjtBQTVDRCxnRUE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0LCBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcblxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlck1pZGRsZXdhcmVGaWxlIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnc3JjL2FwaS9lcnJvci50cycsIHtcbiAgICAgIGNvbnRlbnRzOiBgaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSwgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG4vKipcbiAqIEhUVFAgZXJyb3IgZm9yIDR4eC81eHggcmVzcG9uc2VzLlxuICogRXJyb3IgbWlkZGxld2FyZSByZWFkcyBzdGF0dXNDb2RlIHRvIHNlbmQgYXBwcm9wcmlhdGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnSHR0cEVycm9yJztcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBIdHRwRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIGhhbmRsZXIgbWlkZGxld2FyZS4gSGFuZGxlcyBIdHRwRXJyb3Igd2l0aCBzdGF0dXNDb2RlOyBvdGhlcndpc2UgcmV0dXJucyA1MDAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckhhbmRsZXJNaWRkbGV3YXJlKFxuICBlcnI6IHVua25vd24sXG4gIF9yZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIF9uZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkIHtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvcikge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLmpzb24oe1xuICAgICAgZXJyb3I6IGVyci5zdGF0dXNDb2RlID49IDUwMCA/ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InIDogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICBjb25zb2xlLmVycm9yKCdbRXJyb3JdJywgZXJyKTtcbiAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIG1lc3NhZ2UgfSk7XG59XG5gLFxuICAgIH0pO1xuXG4gIH1cblxufVxuIl19
@@ -4,7 +4,7 @@ exports.ExpressApiRouterFile = void 0;
4
4
  const projen_1 = require("projen");
5
5
  class ExpressApiRouterFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
- super(project, 'src/constructs/handler/ExpressApiRouter.ts', {
7
+ super(project, 'src/api/ExpressApiRouter.ts', {
8
8
  contents: `import { Request, Response, Router } from 'express';
9
9
 
10
10
  export class ExpressApiRouter {
@@ -63,4 +63,4 @@ export class ExpressApiRouter {
63
63
  }
64
64
  }
65
65
  exports.ExpressApiRouterFile = ExpressApiRouterFile;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc0FwaVJvdXRlckZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQXBpL0V4cHJlc3NBcGlSb3V0ZXJGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE2QztBQUU3QyxNQUFhLG9CQUFxQixTQUFRLG1CQUFVO0lBQ2xELFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRTtZQUMzRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcURmO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGO0FBNURELG9EQTREQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QsIFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc0FwaVJvdXRlckZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL0V4cHJlc3NBcGlSb3V0ZXIudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3NBcGlSb3V0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyO1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyKSB7XG4gICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgdGhpcy5zZXR1cFJvdXRlcygpO1xuICB9XG5cblxuICAvKipcbiAgICogR2V0cyB0aGUgRXhwcmVzcyByb3V0ZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybnMgUm91dGVyIFRoZSBFeHByZXNzIHJvdXRlclxuICAgKi9cbiAgcHVibGljIGdldFJvdXRlcigpOiBSb3V0ZXIge1xuICAgIHJldHVybiB0aGlzLnJvdXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGFsbCBhdmFpbGFibGUgcm91dGVzXG4gICAqL1xuICBwcml2YXRlIHNldHVwUm91dGVzKCk6IHZvaWQge1xuICAgIFxuICAgIHRoaXMucm91dGVyLmdldCgnLycsIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGF1dGggPSByZXEuYXV0aDtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7IG1lc3NhZ2U6IFxcYEhlbGxvIFxcJHthdXRoIS51c2VySWR9XFxgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIHRoaXMucm91dGVyLmdldCgnL3Rlc3QnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBtZXNzYWdlOiAnSGVsbG8gV29ybGQnIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU2Vzc2lvbiBlbmRwb2ludDogcmV0dXJucyBjdXJyZW50IHVzZXIncyBvcmcgcm9sZXMgYW5kIHBlcm1pc3Npb25zIGZyb20gQ2xlcmsgSldULlxuICAgICAqIFRoZSBcIm9cIiBjbGFpbSBpcyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBoYXMgYW4gYWN0aXZlIG9yZ2FuaXphdGlvbi5cbiAgICAgKi9cbiAgICB0aGlzLnJvdXRlci5nZXQoJy9zZXNzaW9uJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgYXV0aCA9IHJlcS5hdXRoO1xuICAgICAgaWYgKCFhdXRoKSB7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuanNvbih7IGVycm9yOiAnVW5hdXRob3JpemVkJywgbWVzc2FnZTogJ05vIHNlc3Npb24nIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgdXNlcklkOiBhdXRoLnVzZXJJZCxcbiAgICAgICAgb3JnSWQ6IGF1dGgub3JnSWQgPz8gbnVsbCxcbiAgICAgICAgb3JnU2x1ZzogYXV0aC5vcmdTbHVnID8/IG51bGwsXG4gICAgICAgIG9yZ1JvbGU6IGF1dGgub3JnUm9sZSA/PyBudWxsLFxuICAgICAgICBwZXJtaXNzaW9uczogYXV0aC5wZXJtaXNzaW9ucyA/PyBbXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5gLFxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc0FwaVJvdXRlckZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQXBpL0V4cHJlc3NBcGlSb3V0ZXJGaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE2QztBQUU3QyxNQUFhLG9CQUFxQixTQUFRLG1CQUFVO0lBQ2xELFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRTtZQUM1QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcURmO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGO0FBNURELG9EQTREQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QsIFNhbXBsZUZpbGUgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc0FwaVJvdXRlckZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QsICdzcmMvYXBpL0V4cHJlc3NBcGlSb3V0ZXIudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3NBcGlSb3V0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyO1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyKSB7XG4gICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgdGhpcy5zZXR1cFJvdXRlcygpO1xuICB9XG5cblxuICAvKipcbiAgICogR2V0cyB0aGUgRXhwcmVzcyByb3V0ZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybnMgUm91dGVyIFRoZSBFeHByZXNzIHJvdXRlclxuICAgKi9cbiAgcHVibGljIGdldFJvdXRlcigpOiBSb3V0ZXIge1xuICAgIHJldHVybiB0aGlzLnJvdXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGFsbCBhdmFpbGFibGUgcm91dGVzXG4gICAqL1xuICBwcml2YXRlIHNldHVwUm91dGVzKCk6IHZvaWQge1xuICAgIFxuICAgIHRoaXMucm91dGVyLmdldCgnLycsIGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGF1dGggPSByZXEuYXV0aDtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7IG1lc3NhZ2U6IFxcYEhlbGxvIFxcJHthdXRoIS51c2VySWR9XFxgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIHRoaXMucm91dGVyLmdldCgnL3Rlc3QnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBtZXNzYWdlOiAnSGVsbG8gV29ybGQnIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogU2Vzc2lvbiBlbmRwb2ludDogcmV0dXJucyBjdXJyZW50IHVzZXIncyBvcmcgcm9sZXMgYW5kIHBlcm1pc3Npb25zIGZyb20gQ2xlcmsgSldULlxuICAgICAqIFRoZSBcIm9cIiBjbGFpbSBpcyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNlciBoYXMgYW4gYWN0aXZlIG9yZ2FuaXphdGlvbi5cbiAgICAgKi9cbiAgICB0aGlzLnJvdXRlci5nZXQoJy9zZXNzaW9uJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgYXV0aCA9IHJlcS5hdXRoO1xuICAgICAgaWYgKCFhdXRoKSB7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuanNvbih7IGVycm9yOiAnVW5hdXRob3JpemVkJywgbWVzc2FnZTogJ05vIHNlc3Npb24nIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgdXNlcklkOiBhdXRoLnVzZXJJZCxcbiAgICAgICAgb3JnSWQ6IGF1dGgub3JnSWQgPz8gbnVsbCxcbiAgICAgICAgb3JnU2x1ZzogYXV0aC5vcmdTbHVnID8/IG51bGwsXG4gICAgICAgIG9yZ1JvbGU6IGF1dGgub3JnUm9sZSA/PyBudWxsLFxuICAgICAgICBwZXJtaXNzaW9uczogYXV0aC5wZXJtaXNzaW9ucyA/PyBbXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5gLFxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
@@ -12,7 +12,7 @@ const SoftwareFactoryFiles_1 = require("./SoftwareFactoryFiles");
12
12
  const utils_1 = require("./utils");
13
13
  const ViteReactProject_1 = require("./ViteReactProject");
14
14
  class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.24.2" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.25.1" };
16
16
  constructor(options) {
17
17
  super({
18
18
  ...options,
@@ -117,7 +117,7 @@ class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
117
117
  return `concurrently ${args.map(a => `"${a}"`).join(' ')}`;
118
118
  };
119
119
  this.addTask('dev', {
120
- exec: concurrently('nodemon --watch ./src/constructs/handler --watch ./local/dev.ts ./local/dev.ts', viteReact.devCommand),
120
+ exec: concurrently('nodemon --watch ./src/constructs/handler --watch ./src/api --watch ./local/dev.ts ./local/dev.ts', viteReact.devCommand),
121
121
  });
122
122
  this.addTask('cdk:dev', {
123
123
  exec: 'cdk -a "npx ts-node -P tsconfig.json --prefer-ts-exts src/LocalDevApp.ts"',
@@ -141,4 +141,4 @@ class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
141
141
  }
142
142
  }
143
143
  exports.BatmanProject = BatmanProject;
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0bWFuUHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXRtYW5Qcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw4Q0FBb0Y7QUFDcEYsOENBQXNEO0FBQ3RELCtDQUEwRTtBQUMxRSxxREFBa0Q7QUFDbEQsMkRBQXdEO0FBQ3hELHVEQUFvRDtBQUNwRCxpRUFBOEQ7QUFDOUQsbUNBQXlDO0FBQ3pDLHlEQUFzRDtBQTZEdEQsTUFBYSxhQUFjLFNBQVEsNEJBQW1COztJQUNwRCxZQUFZLE9BQTZCO1FBQ3ZDLEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDM0Msb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixJQUFJLE1BQU07WUFDNUQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLElBQUksRUFBRTtnQkFDSixtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsV0FBVztnQkFDWCxJQUFJO2dCQUNKLHFCQUFxQjtnQkFDckIsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLDBCQUEwQjtnQkFDMUIsbUNBQW1DO2dCQUNuQyxjQUFjO2dCQUNkLGlDQUFpQztnQkFDakMsU0FBUztnQkFDVCxpQkFBaUI7Z0JBQ2pCLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2FBQ3RCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLHFCQUFxQjtnQkFDckIsU0FBUztnQkFDVCxjQUFjO2dCQUNkLHFDQUFxQztnQkFDckMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7YUFDekI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsbURBQW1EO2dCQUNuRCxjQUFjO2dCQUNkLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO2FBQzNCO1lBQ0QsUUFBUSxF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QUNsQixJQUFJLEVBQUUsWUFBWSxDQUNoQixnRkFBZ0YsRUFDaEYsU0FBUyxDQUFDLFVBQVUsQ0FDckI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixJQUFJLEVBQUUsMkVBQTJFO1lBQ2pGLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDOUIsV0FBVyxFQUFFLDRFQUE0RTtZQUN6RixJQUFJLEVBQUUscUdBQXFHO1lBQzNHLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsaUVBQWlFO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLENBQUMsV0FBVyxHQUFHLHFGQUFxRixDQUFDO1lBQzFHLEtBQUssQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFFSCxDQUFDOztBQS9JSCxzQ0FnSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwLCBBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgQXBwbGljYXRpb24sIEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWcgfSBmcm9tICcuL0FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvZGVPd25lcnNGaWxlIH0gZnJvbSAnLi9Db2RlT3duZXJzRmlsZSc7XG5pbXBvcnQgeyBEYXRhRG9nQXNwZWN0RmlsZSB9IGZyb20gJy4vRGF0YURvZ0FzcGVjdEZpbGUnO1xuaW1wb3J0IHsgR2l0SHViUm9sZXNGaWxlIH0gZnJvbSAnLi9HaXRIdWJSb2xlc0ZpbGUnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5RmlsZXMgfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeUZpbGVzJztcbmltcG9ydCB7IHJlYWRtZUNvbnRlbnRzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBWaXRlUmVhY3RQcm9qZWN0IH0gZnJvbSAnLi9WaXRlUmVhY3RQcm9qZWN0JztcbmltcG9ydCB7IFdvcmtmbG93QWN0aW9uVmVyc2lvbnMgfSBmcm9tICcuL1dvcmtmbG93QWN0aW9uVmVyc2lvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhdG1hblByb2plY3RPcHRpb25zIGV4dGVuZHMgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXY6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIERldmVsb3BtZW50IGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdpbmc6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIFByb2R1Y3Rpb24gZW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIGFsbCBzdGFja3NcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRW5hYmxlIG44biB3b3JrZmxvdyBhdXRvLWRpc2NvdmVyeSBhbmQgV29ya2Zsb3dQcm92aWRlciBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBuOG5Xb3JrZmxvd3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvZGUgb3duZXJzIHRvIGFkZCB0byB0aGUgQ09ERU9XTkVSUyBmaWxlXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQ29kZU93bmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXZWJzaXRlIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgd2Vic2l0ZURlcHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIGZvciB0aGUgcGlubmVkIGFjdGlvbiB2ZXJzaW9ucyB1c2VkIGJ5IHRoZSBnZW5lcmF0ZWQgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uVmVyc2lvbnM/OiBXb3JrZmxvd0FjdGlvblZlcnNpb25zO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIHBpbm5lZCBTMyBvYmplY3QgdmVyc2lvbiBvZiB0aGUgY2xlcmstYXV0aG9yaXplciBMYW1iZGEgZGVwbG95bWVudCBwYWNrYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHBpbm5lZCBpbiBBcGlDb25zdHJ1Y3RGaWxlXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyT2JqZWN0VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGB3ZWJgIGFwcCBhbmQgaXRzIGBQckRlcGxveVdvcmtmbG93YCBDSSBzdGVwIGluY2x1ZGVcbiAgICogUGxheXdyaWdodCBlMmUgdGVzdGluZyBzdXBwb3J0LlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlMmVUZXN0aW5nPzogYm9vbGVhbjtcbn1cblxuXG5leHBvcnQgY2xhc3MgQmF0bWFuUHJvamVjdCBleHRlbmRzIEF3c0Nka1R5cGVTY3JpcHRBcHAge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCYXRtYW5Qcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjZGtWZXJzaW9uOiBvcHRpb25zLmNka1ZlcnNpb24gfHwgJzIuMjI0LjAnLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggfHwgJ21haW4nLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGJ1aWxkV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgZGVwczogW1xuICAgICAgICAnQHR5cGVzL2F3cy1sYW1iZGEnLFxuICAgICAgICAnQHR5cGVzL2V4cHJlc3MnLFxuICAgICAgICAnQHR5cGVzL3BnJyxcbiAgICAgICAgJ3BnJyxcbiAgICAgICAgJ0Bhd3Mtc2RrL3Jkcy1zaWduZXInLFxuICAgICAgICAnQG1hdHRoZXdib25pZy9zZWNyZXQnLFxuICAgICAgICAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12MicsXG4gICAgICAgICdAY2RrbGFicy9hd3MtbGFtYmRhLXJ1c3QnLFxuICAgICAgICAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9wYXJhbWV0ZXJzJyxcbiAgICAgICAgJ2pzb253ZWJ0b2tlbicsXG4gICAgICAgICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJyxcbiAgICAgICAgJ2V4cHJlc3MnLFxuICAgICAgICAnc2VydmVybGVzcy1odHRwJyxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXBzIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0eXBlcy9qc29ud2VidG9rZW4nLFxuICAgICAgICAnbm9kZW1vbicsXG4gICAgICAgICdjb25jdXJyZW50bHknLFxuICAgICAgICAnQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBeMS4wLjAnLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgfHwgW10sXG4gICAgICBdLFxuICAgICAgZ2l0aWdub3JlOiBbXG4gICAgICAgICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL2NsZXJrLWF1dGhvcml6ZXIvdGFyZ2V0LyoqJyxcbiAgICAgICAgJyoqLy5EU19TdG9yZScsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aWdub3JlIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIHRzY29uZmlnOiB7XG4gICAgICAgIC4uLm9wdGlvbnMudHNjb25maWcsXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiB8fCAnMjInLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRtZToge1xuICAgICAgICBjb250ZW50czogcmVhZG1lQ29udGVudHMob3B0aW9ucy5uYW1lLCBvcHRpb25zLmUyZVRlc3RpbmcgPz8gdHJ1ZSwgb3B0aW9ucy5wYWNrYWdlTWFuYWdlciksXG4gICAgICB9LFxuICAgIH0pO1xuXG5cbiAgICAvLyBDcmVhdGUgc3RhbmRhcmQgcHJvamVjdCBmaWxlc1xuICAgIGNvbnN0IFBSSU1BUllfQUNDT1VOVCA9ICcwMTU5NTU4MTcyNjMnO1xuICAgIGNvbnN0IFBSSU1BUllfUkVHSU9OID0gJ3VzLWVhc3QtMSc7XG5cbiAgICBuZXcgQXBwbGljYXRpb24odGhpcywge1xuICAgICAgZ2l0aHViUmVwb3NpdG9yeTogYG1hY2Vkb24tdGVjaG5vbG9naWVzLyR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICBkZXY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5kZXYsXG4gICAgICB9LFxuICAgICAgc3RhZ2luZzoge1xuICAgICAgICAuLi5vcHRpb25zLnN0YWdpbmcsXG4gICAgICB9LFxuICAgICAgcHJvZDoge1xuICAgICAgICAuLi5vcHRpb25zLmRldixcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsVGFnczogb3B0aW9ucy5hZGRpdGlvbmFsVGFncyxcbiAgICAgIG44bldvcmtmbG93czogb3B0aW9ucy5uOG5Xb3JrZmxvd3MsXG4gICAgICBhY3Rpb25WZXJzaW9uczogb3B0aW9ucy5hY3Rpb25WZXJzaW9ucyxcbiAgICAgIGF1dGhvcml6ZXJPYmplY3RWZXJzaW9uOiBvcHRpb25zLmF1dGhvcml6ZXJPYmplY3RWZXJzaW9uLFxuICAgICAgZTJlVGVzdGluZzogb3B0aW9ucy5lMmVUZXN0aW5nLFxuICAgIH0pO1xuXG4gICAgbmV3IEdpdEh1YlJvbGVzRmlsZSh0aGlzLCB7XG4gICAgICBhY2NvdW50OiBQUklNQVJZX0FDQ09VTlQsXG4gICAgICBwcmltYXJ5UmVnaW9uOiBQUklNQVJZX1JFR0lPTixcbiAgICB9KTtcblxuICAgIG5ldyBDb2RlT3duZXJzRmlsZSh0aGlzLCB7XG4gICAgICBhZGRpdGlvbmFsT3duZXJzOiBvcHRpb25zLmFkZGl0aW9uYWxDb2RlT3duZXJzLFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFEb2dBc3BlY3RGaWxlKHRoaXMpO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeUZpbGVzKHRoaXMsIHtcbiAgICAgIHJlcG9OYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBiYXNlQnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoLFxuICAgICAgYWN0aW9uVmVyc2lvbnM6IG9wdGlvbnMuYWN0aW9uVmVyc2lvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2aXRlUmVhY3QgPSBuZXcgVml0ZVJlYWN0UHJvamVjdCh7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgb3V0ZGlyOiAnd2ViJyxcbiAgICAgIGRlcHM6IG9wdGlvbnMud2Vic2l0ZURlcHMsXG4gICAgICBlMmVUZXN0aW5nOiBvcHRpb25zLmUyZVRlc3RpbmcsXG4gICAgfSk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmcnLCAnbnVtYmVyJyk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmdFbHNlJywgJ3N0cmluZycpO1xuXG4gICAgY29uc3QgY29uY3VycmVudGx5ID0gKC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICByZXR1cm4gYGNvbmN1cnJlbnRseSAke2FyZ3MubWFwKGEgPT4gYFwiJHthfVwiYCkuam9pbignICcpfWA7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkVGFzaygnZGV2Jywge1xuICAgICAgZXhlYzogY29uY3VycmVudGx5KFxuICAgICAgICAnbm9kZW1vbiAtLXdhdGNoIC4vc3JjL2NvbnN0cnVjdHMvaGFuZGxlciAtLXdhdGNoIC4vbG9jYWwvZGV2LnRzIC4vbG9jYWwvZGV2LnRzJyxcbiAgICAgICAgdml0ZVJlYWN0LmRldkNvbW1hbmQsXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRUYXNrKCdjZGs6ZGV2Jywge1xuICAgICAgZXhlYzogJ2NkayAtYSBcIm5weCB0cy1ub2RlIC1QIHRzY29uZmlnLmpzb24gLS1wcmVmZXItdHMtZXh0cyBzcmMvTG9jYWxEZXZBcHAudHNcIicsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkVGFzaygnY2RrOmRldjpob3Rzd2FwJywge1xuICAgICAgZGVzY3JpcHRpb246ICdEZXBsb3lzIHlvdXIgcGVyc29uYWwgZGV2IHN0YWNrIChzcmMvTG9jYWxEZXZBcHAudHMpIHdpdGggaG90c3dhcC1mYWxsYmFjaycsXG4gICAgICBleGVjOiAnY2RrIC1hIFwibnB4IHRzLW5vZGUgLVAgdHNjb25maWcuanNvbiAtLXByZWZlci10cy1leHRzIHNyYy9Mb2NhbERldkFwcC50c1wiIGRlcGxveSAtLWhvdHN3YXAtZmFsbGJhY2snLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBwcm9qZW4ncyBBd3NDZGtUeXBlU2NyaXB0QXBwIGRlZmF1bHQgYHdhdGNoYCB0YXNrIHVzZXMgYmFyZSBgLS1ob3Rzd2FwYCxcbiAgICAvLyB3aGljaCBzaWxlbnRseSBpZ25vcmVzIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlcyAoZS5nLiB0aGUgTWlncmF0aW9uc1xuICAgIC8vIGN1c3RvbSByZXNvdXJjZSkgaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gYSBmdWxsIGRlcGxveW1lbnQuXG4gICAgY29uc3Qgd2F0Y2ggPSB0aGlzLnRhc2tzLnRyeUZpbmQoJ3dhdGNoJyk7XG4gICAgaWYgKHdhdGNoKSB7XG4gICAgICB3YXRjaC5yZXNldCgpO1xuICAgICAgd2F0Y2guZGVzY3JpcHRpb24gPSAnV2F0Y2hlcyBjaGFuZ2VzIGluIHlvdXIgc291cmNlIGNvZGUgYW5kIHJlYnVpbGRzIGFuZCBkZXBsb3lzIHRvIHRoZSBjdXJyZW50IGFjY291bnQnO1xuICAgICAgd2F0Y2guZXhlYygnY2RrIGRlcGxveSAtLWhvdHN3YXAtZmFsbGJhY2snKTtcbiAgICAgIHdhdGNoLmV4ZWMoJ2NkayB3YXRjaCcpO1xuICAgIH1cblxuICB9XG59XG4iXX0=
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0bWFuUHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXRtYW5Qcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw4Q0FBb0Y7QUFDcEYsOENBQXNEO0FBQ3RELCtDQUEwRTtBQUMxRSxxREFBa0Q7QUFDbEQsMkRBQXdEO0FBQ3hELHVEQUFvRDtBQUNwRCxpRUFBOEQ7QUFDOUQsbUNBQXlDO0FBQ3pDLHlEQUFzRDtBQTZEdEQsTUFBYSxhQUFjLFNBQVEsNEJBQW1COztJQUNwRCxZQUFZLE9BQTZCO1FBQ3ZDLEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDM0Msb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixJQUFJLE1BQU07WUFDNUQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLElBQUksRUFBRTtnQkFDSixtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsV0FBVztnQkFDWCxJQUFJO2dCQUNKLHFCQUFxQjtnQkFDckIsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLDBCQUEwQjtnQkFDMUIsbUNBQW1DO2dCQUNuQyxjQUFjO2dCQUNkLGlDQUFpQztnQkFDakMsU0FBUztnQkFDVCxpQkFBaUI7Z0JBQ2pCLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2FBQ3RCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLHFCQUFxQjtnQkFDckIsU0FBUztnQkFDVCxjQUFjO2dCQUNkLHFDQUFxQztnQkFDckMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7YUFDekI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsbURBQW1EO2dCQUNuRCxjQUFjO2dCQUNkLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO2FBQzNCO1lBQ0QsUUFBUSxF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QUNsQixJQUFJLEVBQUUsWUFBWSxDQUNoQixrR0FBa0csRUFDbEcsU0FBUyxDQUFDLFVBQVUsQ0FDckI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0QixJQUFJLEVBQUUsMkVBQTJFO1lBQ2pGLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDOUIsV0FBVyxFQUFFLDRFQUE0RTtZQUN6RixJQUFJLEVBQUUscUdBQXFHO1lBQzNHLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsaUVBQWlFO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLENBQUMsV0FBVyxHQUFHLHFGQUFxRixDQUFDO1lBQzFHLEtBQUssQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFFSCxDQUFDOztBQS9JSCxzQ0FnSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwLCBBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgQXBwbGljYXRpb24sIEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWcgfSBmcm9tICcuL0FwcGxpY2F0aW9uJztcbmltcG9ydCB7IENvZGVPd25lcnNGaWxlIH0gZnJvbSAnLi9Db2RlT3duZXJzRmlsZSc7XG5pbXBvcnQgeyBEYXRhRG9nQXNwZWN0RmlsZSB9IGZyb20gJy4vRGF0YURvZ0FzcGVjdEZpbGUnO1xuaW1wb3J0IHsgR2l0SHViUm9sZXNGaWxlIH0gZnJvbSAnLi9HaXRIdWJSb2xlc0ZpbGUnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5RmlsZXMgfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeUZpbGVzJztcbmltcG9ydCB7IHJlYWRtZUNvbnRlbnRzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBWaXRlUmVhY3RQcm9qZWN0IH0gZnJvbSAnLi9WaXRlUmVhY3RQcm9qZWN0JztcbmltcG9ydCB7IFdvcmtmbG93QWN0aW9uVmVyc2lvbnMgfSBmcm9tICcuL1dvcmtmbG93QWN0aW9uVmVyc2lvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhdG1hblByb2plY3RPcHRpb25zIGV4dGVuZHMgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXY6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIERldmVsb3BtZW50IGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdpbmc6IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIFByb2R1Y3Rpb24gZW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogQXBwbGljYXRpb25FbnZpcm9ubWVudENvbmZpZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIGFsbCBzdGFja3NcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRW5hYmxlIG44biB3b3JrZmxvdyBhdXRvLWRpc2NvdmVyeSBhbmQgV29ya2Zsb3dQcm92aWRlciBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBuOG5Xb3JrZmxvd3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvZGUgb3duZXJzIHRvIGFkZCB0byB0aGUgQ09ERU9XTkVSUyBmaWxlXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQ29kZU93bmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXZWJzaXRlIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgd2Vic2l0ZURlcHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIGZvciB0aGUgcGlubmVkIGFjdGlvbiB2ZXJzaW9ucyB1c2VkIGJ5IHRoZSBnZW5lcmF0ZWQgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uVmVyc2lvbnM/OiBXb3JrZmxvd0FjdGlvblZlcnNpb25zO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIHBpbm5lZCBTMyBvYmplY3QgdmVyc2lvbiBvZiB0aGUgY2xlcmstYXV0aG9yaXplciBMYW1iZGEgZGVwbG95bWVudCBwYWNrYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHBpbm5lZCBpbiBBcGlDb25zdHJ1Y3RGaWxlXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyT2JqZWN0VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGB3ZWJgIGFwcCBhbmQgaXRzIGBQckRlcGxveVdvcmtmbG93YCBDSSBzdGVwIGluY2x1ZGVcbiAgICogUGxheXdyaWdodCBlMmUgdGVzdGluZyBzdXBwb3J0LlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlMmVUZXN0aW5nPzogYm9vbGVhbjtcbn1cblxuXG5leHBvcnQgY2xhc3MgQmF0bWFuUHJvamVjdCBleHRlbmRzIEF3c0Nka1R5cGVTY3JpcHRBcHAge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCYXRtYW5Qcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjZGtWZXJzaW9uOiBvcHRpb25zLmNka1ZlcnNpb24gfHwgJzIuMjI0LjAnLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggfHwgJ21haW4nLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGJ1aWxkV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgZGVwczogW1xuICAgICAgICAnQHR5cGVzL2F3cy1sYW1iZGEnLFxuICAgICAgICAnQHR5cGVzL2V4cHJlc3MnLFxuICAgICAgICAnQHR5cGVzL3BnJyxcbiAgICAgICAgJ3BnJyxcbiAgICAgICAgJ0Bhd3Mtc2RrL3Jkcy1zaWduZXInLFxuICAgICAgICAnQG1hdHRoZXdib25pZy9zZWNyZXQnLFxuICAgICAgICAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12MicsXG4gICAgICAgICdAY2RrbGFicy9hd3MtbGFtYmRhLXJ1c3QnLFxuICAgICAgICAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9wYXJhbWV0ZXJzJyxcbiAgICAgICAgJ2pzb253ZWJ0b2tlbicsXG4gICAgICAgICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJyxcbiAgICAgICAgJ2V4cHJlc3MnLFxuICAgICAgICAnc2VydmVybGVzcy1odHRwJyxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXBzIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0eXBlcy9qc29ud2VidG9rZW4nLFxuICAgICAgICAnbm9kZW1vbicsXG4gICAgICAgICdjb25jdXJyZW50bHknLFxuICAgICAgICAnQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBeMS4wLjAnLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgfHwgW10sXG4gICAgICBdLFxuICAgICAgZ2l0aWdub3JlOiBbXG4gICAgICAgICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL2NsZXJrLWF1dGhvcml6ZXIvdGFyZ2V0LyoqJyxcbiAgICAgICAgJyoqLy5EU19TdG9yZScsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aWdub3JlIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIHRzY29uZmlnOiB7XG4gICAgICAgIC4uLm9wdGlvbnMudHNjb25maWcsXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiB8fCAnMjInLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRtZToge1xuICAgICAgICBjb250ZW50czogcmVhZG1lQ29udGVudHMob3B0aW9ucy5uYW1lLCBvcHRpb25zLmUyZVRlc3RpbmcgPz8gdHJ1ZSwgb3B0aW9ucy5wYWNrYWdlTWFuYWdlciksXG4gICAgICB9LFxuICAgIH0pO1xuXG5cbiAgICAvLyBDcmVhdGUgc3RhbmRhcmQgcHJvamVjdCBmaWxlc1xuICAgIGNvbnN0IFBSSU1BUllfQUNDT1VOVCA9ICcwMTU5NTU4MTcyNjMnO1xuICAgIGNvbnN0IFBSSU1BUllfUkVHSU9OID0gJ3VzLWVhc3QtMSc7XG5cbiAgICBuZXcgQXBwbGljYXRpb24odGhpcywge1xuICAgICAgZ2l0aHViUmVwb3NpdG9yeTogYG1hY2Vkb24tdGVjaG5vbG9naWVzLyR7b3B0aW9ucy5uYW1lfWAsXG4gICAgICBkZXY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5kZXYsXG4gICAgICB9LFxuICAgICAgc3RhZ2luZzoge1xuICAgICAgICAuLi5vcHRpb25zLnN0YWdpbmcsXG4gICAgICB9LFxuICAgICAgcHJvZDoge1xuICAgICAgICAuLi5vcHRpb25zLmRldixcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsVGFnczogb3B0aW9ucy5hZGRpdGlvbmFsVGFncyxcbiAgICAgIG44bldvcmtmbG93czogb3B0aW9ucy5uOG5Xb3JrZmxvd3MsXG4gICAgICBhY3Rpb25WZXJzaW9uczogb3B0aW9ucy5hY3Rpb25WZXJzaW9ucyxcbiAgICAgIGF1dGhvcml6ZXJPYmplY3RWZXJzaW9uOiBvcHRpb25zLmF1dGhvcml6ZXJPYmplY3RWZXJzaW9uLFxuICAgICAgZTJlVGVzdGluZzogb3B0aW9ucy5lMmVUZXN0aW5nLFxuICAgIH0pO1xuXG4gICAgbmV3IEdpdEh1YlJvbGVzRmlsZSh0aGlzLCB7XG4gICAgICBhY2NvdW50OiBQUklNQVJZX0FDQ09VTlQsXG4gICAgICBwcmltYXJ5UmVnaW9uOiBQUklNQVJZX1JFR0lPTixcbiAgICB9KTtcblxuICAgIG5ldyBDb2RlT3duZXJzRmlsZSh0aGlzLCB7XG4gICAgICBhZGRpdGlvbmFsT3duZXJzOiBvcHRpb25zLmFkZGl0aW9uYWxDb2RlT3duZXJzLFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFEb2dBc3BlY3RGaWxlKHRoaXMpO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeUZpbGVzKHRoaXMsIHtcbiAgICAgIHJlcG9OYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBiYXNlQnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoLFxuICAgICAgYWN0aW9uVmVyc2lvbnM6IG9wdGlvbnMuYWN0aW9uVmVyc2lvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2aXRlUmVhY3QgPSBuZXcgVml0ZVJlYWN0UHJvamVjdCh7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgb3V0ZGlyOiAnd2ViJyxcbiAgICAgIGRlcHM6IG9wdGlvbnMud2Vic2l0ZURlcHMsXG4gICAgICBlMmVUZXN0aW5nOiBvcHRpb25zLmUyZVRlc3RpbmcsXG4gICAgfSk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmcnLCAnbnVtYmVyJyk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmdFbHNlJywgJ3N0cmluZycpO1xuXG4gICAgY29uc3QgY29uY3VycmVudGx5ID0gKC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICByZXR1cm4gYGNvbmN1cnJlbnRseSAke2FyZ3MubWFwKGEgPT4gYFwiJHthfVwiYCkuam9pbignICcpfWA7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkVGFzaygnZGV2Jywge1xuICAgICAgZXhlYzogY29uY3VycmVudGx5KFxuICAgICAgICAnbm9kZW1vbiAtLXdhdGNoIC4vc3JjL2NvbnN0cnVjdHMvaGFuZGxlciAtLXdhdGNoIC4vc3JjL2FwaSAtLXdhdGNoIC4vbG9jYWwvZGV2LnRzIC4vbG9jYWwvZGV2LnRzJyxcbiAgICAgICAgdml0ZVJlYWN0LmRldkNvbW1hbmQsXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRUYXNrKCdjZGs6ZGV2Jywge1xuICAgICAgZXhlYzogJ2NkayAtYSBcIm5weCB0cy1ub2RlIC1QIHRzY29uZmlnLmpzb24gLS1wcmVmZXItdHMtZXh0cyBzcmMvTG9jYWxEZXZBcHAudHNcIicsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkVGFzaygnY2RrOmRldjpob3Rzd2FwJywge1xuICAgICAgZGVzY3JpcHRpb246ICdEZXBsb3lzIHlvdXIgcGVyc29uYWwgZGV2IHN0YWNrIChzcmMvTG9jYWxEZXZBcHAudHMpIHdpdGggaG90c3dhcC1mYWxsYmFjaycsXG4gICAgICBleGVjOiAnY2RrIC1hIFwibnB4IHRzLW5vZGUgLVAgdHNjb25maWcuanNvbiAtLXByZWZlci10cy1leHRzIHNyYy9Mb2NhbERldkFwcC50c1wiIGRlcGxveSAtLWhvdHN3YXAtZmFsbGJhY2snLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBwcm9qZW4ncyBBd3NDZGtUeXBlU2NyaXB0QXBwIGRlZmF1bHQgYHdhdGNoYCB0YXNrIHVzZXMgYmFyZSBgLS1ob3Rzd2FwYCxcbiAgICAvLyB3aGljaCBzaWxlbnRseSBpZ25vcmVzIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlcyAoZS5nLiB0aGUgTWlncmF0aW9uc1xuICAgIC8vIGN1c3RvbSByZXNvdXJjZSkgaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gYSBmdWxsIGRlcGxveW1lbnQuXG4gICAgY29uc3Qgd2F0Y2ggPSB0aGlzLnRhc2tzLnRyeUZpbmQoJ3dhdGNoJyk7XG4gICAgaWYgKHdhdGNoKSB7XG4gICAgICB3YXRjaC5yZXNldCgpO1xuICAgICAgd2F0Y2guZGVzY3JpcHRpb24gPSAnV2F0Y2hlcyBjaGFuZ2VzIGluIHlvdXIgc291cmNlIGNvZGUgYW5kIHJlYnVpbGRzIGFuZCBkZXBsb3lzIHRvIHRoZSBjdXJyZW50IGFjY291bnQnO1xuICAgICAgd2F0Y2guZXhlYygnY2RrIGRlcGxveSAtLWhvdHN3YXAtZmFsbGJhY2snKTtcbiAgICAgIHdhdGNoLmV4ZWMoJ2NkayB3YXRjaCcpO1xuICAgIH1cblxuICB9XG59XG4iXX0=
@@ -12,7 +12,7 @@ const SoftwareFactoryFiles_1 = require("./SoftwareFactoryFiles");
12
12
  const utils_1 = require("./utils");
13
13
  const ViteReactProject_1 = require("./ViteReactProject");
14
14
  class BootcampProject extends awscdk_1.AwsCdkTypeScriptApp {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.24.2" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.25.1" };
16
16
  constructor(options) {
17
17
  super({
18
18
  ...options,
@@ -117,7 +117,7 @@ class BootcampProject extends awscdk_1.AwsCdkTypeScriptApp {
117
117
  return `concurrently ${args.map(a => `"${a}"`).join(' ')}`;
118
118
  };
119
119
  this.addTask('dev', {
120
- exec: concurrently('nodemon --watch ./src/constructs/handler --watch ./local/dev.ts ./local/dev.ts', viteReact.devCommand),
120
+ exec: concurrently('nodemon --watch ./src/constructs/handler --watch ./src/api --watch ./local/dev.ts ./local/dev.ts', viteReact.devCommand),
121
121
  });
122
122
  this.addTask('cdk:dev', {
123
123
  exec: 'cdk -a "npx ts-node -P tsconfig.json --prefer-ts-exts src/LocalDevApp.ts"',
@@ -126,4 +126,4 @@ class BootcampProject extends awscdk_1.AwsCdkTypeScriptApp {
126
126
  }
127
127
  }
128
128
  exports.BootcampProject = BootcampProject;
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBQcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Jvb3RjYW1wUHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsOENBQXdEO0FBQ3hELDhDQUFzRDtBQUV0RCwrREFBNEQ7QUFDNUQscURBQWtEO0FBQ2xELDJEQUF3RDtBQUN4RCx1REFBb0Q7QUFDcEQsaUVBQThEO0FBQzlELG1DQUF5QztBQUN6Qyx5REFBc0Q7QUFPdEQsTUFBYSxlQUFnQixTQUFRLDRCQUFtQjs7SUFDdEQsWUFBWSxPQUErQjtRQUN6QyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTO1lBQzNDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxNQUFNO1lBQzVELElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixJQUFJLEVBQUU7Z0JBQ0osbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLFdBQVc7Z0JBQ1gsSUFBSTtnQkFDSixxQkFBcUI7Z0JBQ3JCLHNCQUFzQjtnQkFDdEIsMkJBQTJCO2dCQUMzQiwwQkFBMEI7Z0JBQzFCLG1DQUFtQztnQkFDbkMsY0FBYztnQkFDZCxpQ0FBaUM7Z0JBQ2pDLFNBQVM7Z0JBQ1QsaUJBQWlCO2dCQUNqQixhQUFhO2dCQUNiLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2FBQ3RCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLHFCQUFxQjtnQkFDckIsU0FBUztnQkFDVCxjQUFjO2dCQUNkLHFDQUFxQztnQkFDckMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7YUFDekI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsbURBQW1EO2dCQUNuRCxjQUFjO2dCQUNkLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO2FB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LENBQ2hCLGdGQUFnRixFQUNoRixTQUFTLENBQUMsVUFBVSxDQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLElBQUksRUFBRSwyRUFBMkU7WUFDakYsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0lBR0wsQ0FBQzs7QUEvSEgsMENBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgQmF0bWFuUHJvamVjdE9wdGlvbnMgfSBmcm9tICcuL0JhdG1hblByb2plY3QnO1xuaW1wb3J0IHsgQm9vdGNhbXBBcHBsaWNhdGlvbiB9IGZyb20gJy4vQm9vdGNhbXBBcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBDb2RlT3duZXJzRmlsZSB9IGZyb20gJy4vQ29kZU93bmVyc0ZpbGUnO1xuaW1wb3J0IHsgRGF0YURvZ0FzcGVjdEZpbGUgfSBmcm9tICcuL0RhdGFEb2dBc3BlY3RGaWxlJztcbmltcG9ydCB7IEdpdEh1YlJvbGVzRmlsZSB9IGZyb20gJy4vR2l0SHViUm9sZXNGaWxlJztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeUZpbGVzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlGaWxlcyc7XG5pbXBvcnQgeyByZWFkbWVDb250ZW50cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVml0ZVJlYWN0UHJvamVjdCB9IGZyb20gJy4vVml0ZVJlYWN0UHJvamVjdCc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBCb290Y2FtcFByb2plY3RPcHRpb25zIGV4dGVuZHMgQmF0bWFuUHJvamVjdE9wdGlvbnMge1xuXG59XG5cbmV4cG9ydCBjbGFzcyBCb290Y2FtcFByb2plY3QgZXh0ZW5kcyBBd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQm9vdGNhbXBQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjZGtWZXJzaW9uOiBvcHRpb25zLmNka1ZlcnNpb24gfHwgJzIuMjI0LjAnLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggfHwgJ21haW4nLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGJ1aWxkV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgZGVwczogW1xuICAgICAgICAnQHR5cGVzL2F3cy1sYW1iZGEnLFxuICAgICAgICAnQHR5cGVzL2V4cHJlc3MnLFxuICAgICAgICAnQHR5cGVzL3BnJyxcbiAgICAgICAgJ3BnJyxcbiAgICAgICAgJ0Bhd3Mtc2RrL3Jkcy1zaWduZXInLFxuICAgICAgICAnQG1hdHRoZXdib25pZy9zZWNyZXQnLFxuICAgICAgICAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12MicsXG4gICAgICAgICdAY2RrbGFicy9hd3MtbGFtYmRhLXJ1c3QnLFxuICAgICAgICAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9wYXJhbWV0ZXJzJyxcbiAgICAgICAgJ2pzb253ZWJ0b2tlbicsXG4gICAgICAgICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJyxcbiAgICAgICAgJ2V4cHJlc3MnLFxuICAgICAgICAnc2VydmVybGVzcy1odHRwJyxcbiAgICAgICAgJ2Nkay1yZHMtc3FsJyxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXBzIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0eXBlcy9qc29ud2VidG9rZW4nLFxuICAgICAgICAnbm9kZW1vbicsXG4gICAgICAgICdjb25jdXJyZW50bHknLFxuICAgICAgICAnQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBeMS4wLjAnLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgfHwgW10sXG4gICAgICBdLFxuICAgICAgZ2l0aWdub3JlOiBbXG4gICAgICAgICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL2NsZXJrLWF1dGhvcml6ZXIvdGFyZ2V0LyoqJyxcbiAgICAgICAgJyoqLy5EU19TdG9yZScsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aWdub3JlIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIHRzY29uZmlnOiB7XG4gICAgICAgIC4uLm9wdGlvbnMudHNjb25maWcsXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiB8fCAnMjInLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRtZToge1xuICAgICAgICBjb250ZW50czogcmVhZG1lQ29udGVudHMob3B0aW9ucy5uYW1lLCBvcHRpb25zLmUyZVRlc3RpbmcgPz8gdHJ1ZSwgb3B0aW9ucy5wYWNrYWdlTWFuYWdlciksXG4gICAgICB9LFxuICAgIH0pO1xuXG5cbiAgICAvLyBDcmVhdGUgc3RhbmRhcmQgcHJvamVjdCBmaWxlc1xuICAgIGNvbnN0IFBSSU1BUllfQUNDT1VOVCA9ICcwMTU5NTU4MTcyNjMnO1xuICAgIGNvbnN0IFBSSU1BUllfUkVHSU9OID0gJ3VzLWVhc3QtMSc7XG5cbiAgICBuZXcgQm9vdGNhbXBBcHBsaWNhdGlvbih0aGlzLCB7XG4gICAgICBnaXRodWJSZXBvc2l0b3J5OiBgbWFjZWRvbi10ZWNobm9sb2dpZXMvJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgIGRldjoge1xuICAgICAgICAuLi5vcHRpb25zLmRldixcbiAgICAgIH0sXG4gICAgICBzdGFnaW5nOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuc3RhZ2luZyxcbiAgICAgIH0sXG4gICAgICBwcm9kOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZGV2LFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxUYWdzOiBvcHRpb25zLmFkZGl0aW9uYWxUYWdzLFxuICAgICAgbjhuV29ya2Zsb3dzOiBvcHRpb25zLm44bldvcmtmbG93cyxcbiAgICAgIGFjdGlvblZlcnNpb25zOiBvcHRpb25zLmFjdGlvblZlcnNpb25zLFxuICAgICAgZTJlVGVzdGluZzogb3B0aW9ucy5lMmVUZXN0aW5nLFxuICAgIH0pO1xuXG4gICAgbmV3IEdpdEh1YlJvbGVzRmlsZSh0aGlzLCB7XG4gICAgICBhY2NvdW50OiBQUklNQVJZX0FDQ09VTlQsXG4gICAgICBwcmltYXJ5UmVnaW9uOiBQUklNQVJZX1JFR0lPTixcbiAgICB9KTtcblxuICAgIG5ldyBDb2RlT3duZXJzRmlsZSh0aGlzLCB7XG4gICAgICBhZGRpdGlvbmFsT3duZXJzOiBvcHRpb25zLmFkZGl0aW9uYWxDb2RlT3duZXJzLFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFEb2dBc3BlY3RGaWxlKHRoaXMpO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeUZpbGVzKHRoaXMsIHtcbiAgICAgIHJlcG9OYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBiYXNlQnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoLFxuICAgICAgYWN0aW9uVmVyc2lvbnM6IG9wdGlvbnMuYWN0aW9uVmVyc2lvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2aXRlUmVhY3QgPSBuZXcgVml0ZVJlYWN0UHJvamVjdCh7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgb3V0ZGlyOiAnd2ViJyxcbiAgICAgIGRlcHM6IG9wdGlvbnMud2Vic2l0ZURlcHMsXG4gICAgICBlMmVUZXN0aW5nOiBvcHRpb25zLmUyZVRlc3RpbmcsXG4gICAgfSk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmcnLCAnbnVtYmVyJyk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmdFbHNlJywgJ3N0cmluZycpO1xuXG4gICAgY29uc3QgY29uY3VycmVudGx5ID0gKC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICByZXR1cm4gYGNvbmN1cnJlbnRseSAke2FyZ3MubWFwKGEgPT4gYFwiJHthfVwiYCkuam9pbignICcpfWA7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkVGFzaygnZGV2Jywge1xuICAgICAgZXhlYzogY29uY3VycmVudGx5KFxuICAgICAgICAnbm9kZW1vbiAtLXdhdGNoIC4vc3JjL2NvbnN0cnVjdHMvaGFuZGxlciAtLXdhdGNoIC4vbG9jYWwvZGV2LnRzIC4vbG9jYWwvZGV2LnRzJyxcbiAgICAgICAgdml0ZVJlYWN0LmRldkNvbW1hbmQsXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRUYXNrKCdjZGs6ZGV2Jywge1xuICAgICAgZXhlYzogJ2NkayAtYSBcIm5weCB0cy1ub2RlIC1QIHRzY29uZmlnLmpzb24gLS1wcmVmZXItdHMtZXh0cyBzcmMvTG9jYWxEZXZBcHAudHNcIicsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuXG4gIH1cbn1cbiJdfQ==
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vdGNhbXBQcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Jvb3RjYW1wUHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsOENBQXdEO0FBQ3hELDhDQUFzRDtBQUV0RCwrREFBNEQ7QUFDNUQscURBQWtEO0FBQ2xELDJEQUF3RDtBQUN4RCx1REFBb0Q7QUFDcEQsaUVBQThEO0FBQzlELG1DQUF5QztBQUN6Qyx5REFBc0Q7QUFPdEQsTUFBYSxlQUFnQixTQUFRLDRCQUFtQjs7SUFDdEQsWUFBWSxPQUErQjtRQUN6QyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTO1lBQzNDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxNQUFNO1lBQzVELElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixJQUFJLEVBQUU7Z0JBQ0osbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLFdBQVc7Z0JBQ1gsSUFBSTtnQkFDSixxQkFBcUI7Z0JBQ3JCLHNCQUFzQjtnQkFDdEIsMkJBQTJCO2dCQUMzQiwwQkFBMEI7Z0JBQzFCLG1DQUFtQztnQkFDbkMsY0FBYztnQkFDZCxpQ0FBaUM7Z0JBQ2pDLFNBQVM7Z0JBQ1QsaUJBQWlCO2dCQUNqQixhQUFhO2dCQUNiLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2FBQ3RCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLHFCQUFxQjtnQkFDckIsU0FBUztnQkFDVCxjQUFjO2dCQUNkLHFDQUFxQztnQkFDckMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUU7YUFDekI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsbURBQW1EO2dCQUNuRCxjQUFjO2dCQUNkLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO2FB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LENBQ2hCLGtHQUFrRyxFQUNsRyxTQUFTLENBQUMsVUFBVSxDQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLElBQUksRUFBRSwyRUFBMkU7WUFDakYsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0lBR0wsQ0FBQzs7QUEvSEgsMENBZ0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgQmF0bWFuUHJvamVjdE9wdGlvbnMgfSBmcm9tICcuL0JhdG1hblByb2plY3QnO1xuaW1wb3J0IHsgQm9vdGNhbXBBcHBsaWNhdGlvbiB9IGZyb20gJy4vQm9vdGNhbXBBcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBDb2RlT3duZXJzRmlsZSB9IGZyb20gJy4vQ29kZU93bmVyc0ZpbGUnO1xuaW1wb3J0IHsgRGF0YURvZ0FzcGVjdEZpbGUgfSBmcm9tICcuL0RhdGFEb2dBc3BlY3RGaWxlJztcbmltcG9ydCB7IEdpdEh1YlJvbGVzRmlsZSB9IGZyb20gJy4vR2l0SHViUm9sZXNGaWxlJztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeUZpbGVzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlGaWxlcyc7XG5pbXBvcnQgeyByZWFkbWVDb250ZW50cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVml0ZVJlYWN0UHJvamVjdCB9IGZyb20gJy4vVml0ZVJlYWN0UHJvamVjdCc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBCb290Y2FtcFByb2plY3RPcHRpb25zIGV4dGVuZHMgQmF0bWFuUHJvamVjdE9wdGlvbnMge1xuXG59XG5cbmV4cG9ydCBjbGFzcyBCb290Y2FtcFByb2plY3QgZXh0ZW5kcyBBd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQm9vdGNhbXBQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjZGtWZXJzaW9uOiBvcHRpb25zLmNka1ZlcnNpb24gfHwgJzIuMjI0LjAnLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggfHwgJ21haW4nLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGJ1aWxkV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgZGVwczogW1xuICAgICAgICAnQHR5cGVzL2F3cy1sYW1iZGEnLFxuICAgICAgICAnQHR5cGVzL2V4cHJlc3MnLFxuICAgICAgICAnQHR5cGVzL3BnJyxcbiAgICAgICAgJ3BnJyxcbiAgICAgICAgJ0Bhd3Mtc2RrL3Jkcy1zaWduZXInLFxuICAgICAgICAnQG1hdHRoZXdib25pZy9zZWNyZXQnLFxuICAgICAgICAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12MicsXG4gICAgICAgICdAY2RrbGFicy9hd3MtbGFtYmRhLXJ1c3QnLFxuICAgICAgICAnQGF3cy1sYW1iZGEtcG93ZXJ0b29scy9wYXJhbWV0ZXJzJyxcbiAgICAgICAgJ2pzb253ZWJ0b2tlbicsXG4gICAgICAgICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJyxcbiAgICAgICAgJ2V4cHJlc3MnLFxuICAgICAgICAnc2VydmVybGVzcy1odHRwJyxcbiAgICAgICAgJ2Nkay1yZHMtc3FsJyxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXBzIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0eXBlcy9qc29ud2VidG9rZW4nLFxuICAgICAgICAnbm9kZW1vbicsXG4gICAgICAgICdjb25jdXJyZW50bHknLFxuICAgICAgICAnQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBeMS4wLjAnLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgfHwgW10sXG4gICAgICBdLFxuICAgICAgZ2l0aWdub3JlOiBbXG4gICAgICAgICdzcmMvY29uc3RydWN0cy9oYW5kbGVyL2NsZXJrLWF1dGhvcml6ZXIvdGFyZ2V0LyoqJyxcbiAgICAgICAgJyoqLy5EU19TdG9yZScsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aWdub3JlIHx8IFtdLFxuICAgICAgXSxcbiAgICAgIHRzY29uZmlnOiB7XG4gICAgICAgIC4uLm9wdGlvbnMudHNjb25maWcsXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiB8fCAnMjInLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRtZToge1xuICAgICAgICBjb250ZW50czogcmVhZG1lQ29udGVudHMob3B0aW9ucy5uYW1lLCBvcHRpb25zLmUyZVRlc3RpbmcgPz8gdHJ1ZSwgb3B0aW9ucy5wYWNrYWdlTWFuYWdlciksXG4gICAgICB9LFxuICAgIH0pO1xuXG5cbiAgICAvLyBDcmVhdGUgc3RhbmRhcmQgcHJvamVjdCBmaWxlc1xuICAgIGNvbnN0IFBSSU1BUllfQUNDT1VOVCA9ICcwMTU5NTU4MTcyNjMnO1xuICAgIGNvbnN0IFBSSU1BUllfUkVHSU9OID0gJ3VzLWVhc3QtMSc7XG5cbiAgICBuZXcgQm9vdGNhbXBBcHBsaWNhdGlvbih0aGlzLCB7XG4gICAgICBnaXRodWJSZXBvc2l0b3J5OiBgbWFjZWRvbi10ZWNobm9sb2dpZXMvJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgIGRldjoge1xuICAgICAgICAuLi5vcHRpb25zLmRldixcbiAgICAgIH0sXG4gICAgICBzdGFnaW5nOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuc3RhZ2luZyxcbiAgICAgIH0sXG4gICAgICBwcm9kOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZGV2LFxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxUYWdzOiBvcHRpb25zLmFkZGl0aW9uYWxUYWdzLFxuICAgICAgbjhuV29ya2Zsb3dzOiBvcHRpb25zLm44bldvcmtmbG93cyxcbiAgICAgIGFjdGlvblZlcnNpb25zOiBvcHRpb25zLmFjdGlvblZlcnNpb25zLFxuICAgICAgZTJlVGVzdGluZzogb3B0aW9ucy5lMmVUZXN0aW5nLFxuICAgIH0pO1xuXG4gICAgbmV3IEdpdEh1YlJvbGVzRmlsZSh0aGlzLCB7XG4gICAgICBhY2NvdW50OiBQUklNQVJZX0FDQ09VTlQsXG4gICAgICBwcmltYXJ5UmVnaW9uOiBQUklNQVJZX1JFR0lPTixcbiAgICB9KTtcblxuICAgIG5ldyBDb2RlT3duZXJzRmlsZSh0aGlzLCB7XG4gICAgICBhZGRpdGlvbmFsT3duZXJzOiBvcHRpb25zLmFkZGl0aW9uYWxDb2RlT3duZXJzLFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFEb2dBc3BlY3RGaWxlKHRoaXMpO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeUZpbGVzKHRoaXMsIHtcbiAgICAgIHJlcG9OYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBiYXNlQnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoLFxuICAgICAgYWN0aW9uVmVyc2lvbnM6IG9wdGlvbnMuYWN0aW9uVmVyc2lvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB2aXRlUmVhY3QgPSBuZXcgVml0ZVJlYWN0UHJvamVjdCh7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgb3V0ZGlyOiAnd2ViJyxcbiAgICAgIGRlcHM6IG9wdGlvbnMud2Vic2l0ZURlcHMsXG4gICAgICBlMmVUZXN0aW5nOiBvcHRpb25zLmUyZVRlc3RpbmcsXG4gICAgfSk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmcnLCAnbnVtYmVyJyk7XG4gICAgdml0ZVJlYWN0LmFkZENvbmZpZ0ZpZWxkKCdzb21ldGhpbmdFbHNlJywgJ3N0cmluZycpO1xuXG4gICAgY29uc3QgY29uY3VycmVudGx5ID0gKC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICByZXR1cm4gYGNvbmN1cnJlbnRseSAke2FyZ3MubWFwKGEgPT4gYFwiJHthfVwiYCkuam9pbignICcpfWA7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkVGFzaygnZGV2Jywge1xuICAgICAgZXhlYzogY29uY3VycmVudGx5KFxuICAgICAgICAnbm9kZW1vbiAtLXdhdGNoIC4vc3JjL2NvbnN0cnVjdHMvaGFuZGxlciAtLXdhdGNoIC4vc3JjL2FwaSAtLXdhdGNoIC4vbG9jYWwvZGV2LnRzIC4vbG9jYWwvZGV2LnRzJyxcbiAgICAgICAgdml0ZVJlYWN0LmRldkNvbW1hbmQsXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRUYXNrKCdjZGs6ZGV2Jywge1xuICAgICAgZXhlYzogJ2NkayAtYSBcIm5weCB0cy1ub2RlIC1QIHRzY29uZmlnLmpzb24gLS1wcmVmZXItdHMtZXh0cyBzcmMvTG9jYWxEZXZBcHAudHNcIicsXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuXG4gIH1cbn1cbiJdfQ==
@@ -4,7 +4,7 @@ exports.CodeOwnersFile = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const projen_1 = require("projen");
6
6
  class CodeOwnersFile extends projen_1.TextFile {
7
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.24.2" };
7
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.25.1" };
8
8
  constructor(project, options = {}) {
9
9
  const defaultOwners = ['* @macedon-technologies/platform', '* @macedon-technologies/ai-development-team'];
10
10
  const allOwners = [...defaultOwners, ...(options.additionalOwners || [])];
@@ -6,8 +6,8 @@ class LocalDevServerFile extends projen_1.SampleFile {
6
6
  constructor(project) {
7
7
  super(project, 'local/dev.ts', {
8
8
  contents: `import 'dotenv/config';
9
- import { corsMiddleware } from '../src/constructs/handler/cors';
10
- import { initializeApp, preRouteMiddleware } from '../src/constructs/handler/app';
9
+ import { corsMiddleware } from '../src/api/cors';
10
+ import { initializeApp, preRouteMiddleware } from '../src/api/app';
11
11
 
12
12
  const PORT = process.env.PORT || 3000;
13
13
 
@@ -56,4 +56,4 @@ preRouteMiddleware.push(addMockContext);
56
56
  }
57
57
  }
58
58
  exports.LocalDevServerFile = LocalDevServerFile;
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxEZXZTZXJ2ZXJGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0xvY2FsRGV2U2VydmVyRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFHcEMsTUFBYSxrQkFBbUIsU0FBUSxtQkFBVTtJQUNoRCxZQUFZLE9BQTRCO1FBQ3RDLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO1lBQzdCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThDZjtTQUNJLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXBERCxnREFvREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbERldlNlcnZlckZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCkge1xuICAgIHN1cGVyKHByb2plY3QsICdsb2NhbC9kZXYudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCAnZG90ZW52L2NvbmZpZyc7XG5pbXBvcnQgeyBjb3JzTWlkZGxld2FyZSB9IGZyb20gJy4uL3NyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvY29ycyc7XG5pbXBvcnQgeyBpbml0aWFsaXplQXBwLCBwcmVSb3V0ZU1pZGRsZXdhcmUgfSBmcm9tICcuLi9zcmMvY29uc3RydWN0cy9oYW5kbGVyL2FwcCc7XG5cbmNvbnN0IFBPUlQgPSBwcm9jZXNzLmVudi5QT1JUIHx8IDMwMDA7XG5cbmNvbnN0IGFkZE1vY2tDb250ZXh0ID0gKHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogYW55KSA9PiB7XG4gICAgLy8gUmVwbGljYXRlIHdoYXQgdGhlIGNsZXJrLWF1dGhvcml6ZXIgTGFtYmRhIGFkZHM7IGluY2x1ZGUgbW9jayBvcmcgZGF0YSBmb3IgbG9jYWwgdGVzdGluZ1xuICAgIHJlcS5hcGlHYXRld2F5ID0ge1xuICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgcmVxdWVzdENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogJ3VzZXJfbW9jazEyMzQ1Njc4OScsXG4gICAgICAgICAgICAgICAgICAgIG9yZ0lkOiAnb3JnX21vY2tfc3RvcmUnLFxuICAgICAgICAgICAgICAgICAgICBvcmdSb2xlOiAnYWRtaW4nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnW01vY2sgQXV0aF0gQWRkZWQgbW9jayB1c2VyIGNvbnRleHQ6JywgcmVxLmFwaUdhdGV3YXkuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplcik7XG4gICAgbmV4dCgpO1xufTtcblxucHJlUm91dGVNaWRkbGV3YXJlLnB1c2goY29yc01pZGRsZXdhcmUpO1xucHJlUm91dGVNaWRkbGV3YXJlLnB1c2goYWRkTW9ja0NvbnRleHQpO1xuXG4oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGluaXRpYWxpemVBcHAoKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhcHAubGlzdGVuKFBPUlQsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXFxgU2VydmVyIHJ1bm5pbmcgb24gaHR0cDovL2xvY2FsaG9zdDpcXCR7UE9SVH1cXGApO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGdyYWNlZnVsIHNodXRkb3duXG4gICAgY29uc3Qgc2h1dGRvd24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdcXFxcblNodXR0aW5nIGRvd24gZ3JhY2VmdWxseS4uLicpO1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1NlcnZlciBjbG9zZWQnKTtcbiAgICAgICAgICAgXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIHNodXRkb3duKTtcbn0pKCk7XG5gLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxEZXZTZXJ2ZXJGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0xvY2FsRGV2U2VydmVyRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFHcEMsTUFBYSxrQkFBbUIsU0FBUSxtQkFBVTtJQUNoRCxZQUFZLE9BQTRCO1FBQ3RDLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO1lBQzdCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThDZjtTQUNJLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXBERCxnREFvREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbERldlNlcnZlckZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCkge1xuICAgIHN1cGVyKHByb2plY3QsICdsb2NhbC9kZXYudHMnLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCAnZG90ZW52L2NvbmZpZyc7XG5pbXBvcnQgeyBjb3JzTWlkZGxld2FyZSB9IGZyb20gJy4uL3NyYy9hcGkvY29ycyc7XG5pbXBvcnQgeyBpbml0aWFsaXplQXBwLCBwcmVSb3V0ZU1pZGRsZXdhcmUgfSBmcm9tICcuLi9zcmMvYXBpL2FwcCc7XG5cbmNvbnN0IFBPUlQgPSBwcm9jZXNzLmVudi5QT1JUIHx8IDMwMDA7XG5cbmNvbnN0IGFkZE1vY2tDb250ZXh0ID0gKHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogYW55KSA9PiB7XG4gICAgLy8gUmVwbGljYXRlIHdoYXQgdGhlIGNsZXJrLWF1dGhvcml6ZXIgTGFtYmRhIGFkZHM7IGluY2x1ZGUgbW9jayBvcmcgZGF0YSBmb3IgbG9jYWwgdGVzdGluZ1xuICAgIHJlcS5hcGlHYXRld2F5ID0ge1xuICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgcmVxdWVzdENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJJZDogJ3VzZXJfbW9jazEyMzQ1Njc4OScsXG4gICAgICAgICAgICAgICAgICAgIG9yZ0lkOiAnb3JnX21vY2tfc3RvcmUnLFxuICAgICAgICAgICAgICAgICAgICBvcmdSb2xlOiAnYWRtaW4nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnW01vY2sgQXV0aF0gQWRkZWQgbW9jayB1c2VyIGNvbnRleHQ6JywgcmVxLmFwaUdhdGV3YXkuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplcik7XG4gICAgbmV4dCgpO1xufTtcblxucHJlUm91dGVNaWRkbGV3YXJlLnB1c2goY29yc01pZGRsZXdhcmUpO1xucHJlUm91dGVNaWRkbGV3YXJlLnB1c2goYWRkTW9ja0NvbnRleHQpO1xuXG4oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGluaXRpYWxpemVBcHAoKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhcHAubGlzdGVuKFBPUlQsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXFxgU2VydmVyIHJ1bm5pbmcgb24gaHR0cDovL2xvY2FsaG9zdDpcXCR7UE9SVH1cXGApO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGdyYWNlZnVsIHNodXRkb3duXG4gICAgY29uc3Qgc2h1dGRvd24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdcXFxcblNodXR0aW5nIGRvd24gZ3JhY2VmdWxseS4uLicpO1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1NlcnZlciBjbG9zZWQnKTtcbiAgICAgICAgICAgXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIHNodXRkb3duKTtcbn0pKCk7XG5gLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class ProductionDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.ProductionDeployWorkflow", version: "1.24.2" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.ProductionDeployWorkflow", version: "1.25.1" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);