@mavogel/cdk-vscode-server 0.0.96 → 0.0.98

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/API.md CHANGED
@@ -431,9 +431,9 @@ const idleMonitorProps: IdleMonitorProps = { ... }
431
431
 
432
432
  | **Name** | **Type** | **Description** |
433
433
  | --- | --- | --- |
434
- | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.distribution">distribution</a></code> | <code>aws-cdk-lib.aws_cloudfront.IDistribution</code> | The CloudFront distribution to monitor for activity. |
434
+ | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.distribution">distribution</a></code> | <code>aws-cdk-lib.interfaces.aws_cloudfront.IDistributionRef</code> | The CloudFront distribution to monitor for activity. |
435
435
  | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.idleTimeoutMinutes">idleTimeoutMinutes</a></code> | <code>number</code> | Number of minutes of inactivity before stopping the instance. |
436
- | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.instance">instance</a></code> | <code>aws-cdk-lib.aws_ec2.IInstance</code> | The EC2 instance to monitor. |
436
+ | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.instance">instance</a></code> | <code>aws-cdk-lib.interfaces.aws_ec2.IInstanceRef</code> | The EC2 instance to monitor. |
437
437
  | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.checkIntervalMinutes">checkIntervalMinutes</a></code> | <code>number</code> | How often to check for idle activity (in minutes). |
438
438
  | <code><a href="#@mavogel/cdk-vscode-server.IdleMonitorProps.property.skipStatusChecks">skipStatusChecks</a></code> | <code>boolean</code> | Skip instance status checks before stopping When true, IdleMonitor will stop idle instances even if status checks haven't passed This is useful for integration tests where status check initialization time exceeds test timeout limits. |
439
439
 
@@ -442,10 +442,10 @@ const idleMonitorProps: IdleMonitorProps = { ... }
442
442
  ##### `distribution`<sup>Required</sup> <a name="distribution" id="@mavogel/cdk-vscode-server.IdleMonitorProps.property.distribution"></a>
443
443
 
444
444
  ```typescript
445
- public readonly distribution: IDistribution;
445
+ public readonly distribution: IDistributionRef;
446
446
  ```
447
447
 
448
- - *Type:* aws-cdk-lib.aws_cloudfront.IDistribution
448
+ - *Type:* aws-cdk-lib.interfaces.aws_cloudfront.IDistributionRef
449
449
 
450
450
  The CloudFront distribution to monitor for activity.
451
451
 
@@ -466,10 +466,10 @@ Number of minutes of inactivity before stopping the instance.
466
466
  ##### `instance`<sup>Required</sup> <a name="instance" id="@mavogel/cdk-vscode-server.IdleMonitorProps.property.instance"></a>
467
467
 
468
468
  ```typescript
469
- public readonly instance: IInstance;
469
+ public readonly instance: IInstanceRef;
470
470
  ```
471
471
 
472
- - *Type:* aws-cdk-lib.aws_ec2.IInstance
472
+ - *Type:* aws-cdk-lib.interfaces.aws_ec2.IInstanceRef
473
473
 
474
474
  The EC2 instance to monitor.
475
475
 
package/CLAUDE.md CHANGED
@@ -198,7 +198,7 @@ Suppressions defined in `src/suppress-nags.ts` and applied throughout construct
198
198
  - Public subnet deployment
199
199
  - No VPC endpoints
200
200
 
201
- Apply suppressions via `NagSuppressions.addResourceSuppressions()`.
201
+ Apply suppressions via `Validations.of(construct).acknowledge({ id, reason })` (cdk-nag v3's `Validations`/`IPolicyValidationPlugin` API replaced v2's `NagSuppressions`). Granular ARN-embedded findings (e.g. `AwsSolutions-IAM4`/`AwsSolutions-IAM5` for managed policies or wildcard resources) can't go through `acknowledge()` directly — it rejects any id with more than one `::` delimiter — so use the `acknowledgeGranularFinding()` bypass helper in `src/suppress-nags.ts` instead.
202
202
 
203
203
  ## Integration Tests
204
204
 
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- ![Source](https://img.shields.io/github/stars/MV-Consulting/cdk-vscode-server?logo=github&label=GitHub%20Stars)
2
- [![Build Status](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml/badge.svg)](https://github.com/MV-Consulting/cdk-vscode-server/actions/workflows/build.yml)
1
+ ![Source](https://img.shields.io/github/stars/mavogel/cdk-vscode-server?logo=github&label=GitHub%20Stars)
2
+ [![Build Status](https://github.com/mavogel/cdk-vscode-server/actions/workflows/build.yml/badge.svg)](https://github.com/mavogel/cdk-vscode-server/actions/workflows/build.yml)
3
3
  [![ESLint Code Formatting](https://img.shields.io/badge/code_style-eslint-brightgreen.svg)](https://eslint.org)
4
- [![Latest release](https://img.shields.io/github/release/MV-Consulting/cdk-vscode-server.svg)](https://github.com/MV-Consulting/cdk-vscode-server/releases)
5
- ![GitHub](https://img.shields.io/github/license/MV-Consulting/cdk-vscode-server)
4
+ [![Latest release](https://img.shields.io/github/release/mavogel/cdk-vscode-server.svg)](https://github.com/mavogel/cdk-vscode-server/releases)
5
+ ![GitHub](https://img.shields.io/github/license/mavogel/cdk-vscode-server)
6
6
  [![npm](https://img.shields.io/npm/dt/@mavogel/cdk-vscode-server?label=npm&color=orange)](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)
7
7
  [![typescript](https://img.shields.io/badge/jsii-typescript-blueviolet.svg)](https://www.npmjs.com/package/@mavogel/cdk-vscode-server)
8
8
 
@@ -0,0 +1,156 @@
1
+ # CDK-Nag v3 Migration Implementation Plan
2
+
3
+ Created: 2026-08-09
4
+ Author: info@manuel-vogel.de
5
+ Agent: Claude Code
6
+ Status: VERIFIED
7
+ Approved: Yes
8
+ Iterations: 0
9
+ Worktree: No
10
+ Type: Feature
11
+
12
+ ## Summary
13
+
14
+ **Goal:** Upgrade `@mavogel/mvc-projen` to its latest published version (`0.0.30`), which forces `cdk-nag@^3.0.1`, bump `aws-cdk-lib` to `2.261.0` to satisfy cdk-nag v3's `>=2.257.0` floor, and migrate all 19 existing `NagSuppressions` call sites across 7 source files to cdk-nag v3's `Validations.of(...).acknowledge(...)` API so the construct still suppresses its known findings and the test suite still asserts zero unacknowledged violations.
15
+
16
+ ## Out of Scope
17
+
18
+ - Running `npm run integ-test` (real multi-region AWS deployment) — this plan verifies via local build/lint/synth/snapshot only.
19
+ - Bumping `aws-cdk-lib` beyond `2.261.0` to the newest npm release (`2.263.0`) — user chose the version `@mavogel/mvc-projen`'s own migration already validated end-to-end.
20
+ - Any `@mavogel/mvc-projen` version beyond `^0.0.30` (latest published as of this plan).
21
+ - Re-running the release pipeline / publishing this bump — separate from this plan.
22
+
23
+ ## Approach
24
+
25
+ **Chosen:** Mirror `@mavogel/mvc-projen`'s own validated cdk-nag v2→v3 migration (commit `76fddc5` in `/Users/mavogel/Developer/projects/mvc-projen`), adapted to this repo's 19 suppression call sites across `src/suppress-nags.ts`, `src/vscode-server.ts`, `src/installer/installer.ts`, `src/secret-retriever/secret-retriever.ts`, `src/idle-monitor-enabler/idle-monitor-enabler.ts`, `src/idle-monitor/idle-monitor.ts`, and `src/prefixlist-retriever/prefixlist-retriever.ts`.
26
+ **Why:** That commit already proved the exact API shapes end-to-end against real `aws-cdk-lib@2.261.0` + `cdk-nag@3.0.1` (the author built a standalone harness to confirm 0 unacknowledged violations), so this plan reuses a validated pattern instead of guessing at cdk-nag v3's new API from its changelog alone.
27
+
28
+ ## Global Constraints
29
+
30
+ - `@mavogel/mvc-projen@^0.0.30` in `.projenrc.ts` `deps` (was `^0.0.25`).
31
+ - `cdkVersion: '2.261.0'` in `.projenrc.ts` (was `'2.190.0'`).
32
+ - `cdk-nag@^3.0.1` — auto-added by `MvcCdkConstructLibrary` once `@mavogel/mvc-projen` is bumped; do not add it manually in `.projenrc.ts` `deps`.
33
+ - Top-level `projen` devDependency must be re-aligned to `^0.101.31` (the version `@mavogel/mvc-projen@0.0.30` itself depends on) — same single-deduped-install reasoning as the prior release-pipeline fix; the existing `depsUpgradeOptions: { exclude: ['projen'] }` guard in `.projenrc.ts` stays as-is (it only blocks the *automated* weekly upgrade from drifting `projen` again, not this deliberate manual bump).
34
+
35
+ ## Context for Implementer
36
+
37
+ cdk-nag v3 replaces its old `IAspect`-based suppression engine with CDK's native `IPolicyValidationPlugin`/`Validations` framework. Six things matter here:
38
+
39
+ 1. **`NagSuppressions` is fully removed** from cdk-nag v3's public API (verified against the published `cdk-nag@3.0.2` package — no export in any `lib/*.d.ts`). The code will fail to *compile* immediately after the dependency bump lands; this is the expected signal that the migration is required, not a bug to work around. There is no way to land the dependency bump and the suppression-call-site migration as two separately-green tasks — cdk-nag v2 and v3 cannot coexist in one `node_modules` tree, so Task 1 below intentionally bundles both.
40
+
41
+ 2. **Full call-site inventory (verified by `grep -rn "NagSuppressions\." src/`, 19 call sites across 7 files, all importing NagSuppressions from cdk-nag):**
42
+
43
+ | File | Call sites | Notes |
44
+ |------|-----------|-------|
45
+ | `src/suppress-nags.ts` | 1 | Uses `addResourceSuppressionsByPath` — see item 3 below |
46
+ | `src/vscode-server.ts` | 9 | Plain `addResourceSuppressions`; includes the IAM4/IAM5 sites noted in item 4 |
47
+ | `src/installer/installer.ts` | 3 | One call uses `appliesTo: ['Resource::*']` on `AwsSolutions-IAM5` — a granular finding, see item 4 |
48
+ | `src/secret-retriever/secret-retriever.ts` | 2 | Plain `addResourceSuppressions`, includes an `IAM4` on a Lambda default execution role |
49
+ | `src/idle-monitor-enabler/idle-monitor-enabler.ts` | 2 | Plain `addResourceSuppressions`, includes an `IAM4` on a Lambda default execution role |
50
+ | `src/idle-monitor/idle-monitor.ts` | 1 | Plain `addResourceSuppressions`, includes `IAM4` + `IAM5` |
51
+ | `src/prefixlist-retriever/prefixlist-retriever.ts` | 1 | Plain `addResourceSuppressions`, `IAM5` |
52
+
53
+ Every plain-id call site's third positional argument is `true` (v2's `applyToChildren`) and every resource argument is either a single construct or a single-element array — no call site suppresses more than one resource at once.
54
+
55
+ 3. **`suppress-nags.ts:9` uses `addResourceSuppressionsByPath(stack, path, [{id, reason}])`** — a stack + CloudFormation-path-string form, not a construct instance, so it has no direct `Validations.of(construct)` target. `Validations` operates on construct instances, so the migration must first resolve the construct at that path: `Node.of(stack).findAll().find(c => c.node.path === '<path-without-leading-slash-and-stack-name>')` (the v2 path argument `` `/${stack.stackName}/AWS679f53fac002430cb0da5b7982bd2287/Resource` `` is the CDK construct path, minus the leading slash, relative to `app`, not `stack` — resolve exactly against what `Node.of(stack).findAll()` returns before assuming the string form is directly reusable). If no construct exists at that exact path (i.e. it only exists in the synthesized template, not the construct tree), acknowledge on the nearest resolvable ancestor construct instead and note the substitution in the task's completion notes.
56
+
57
+ 4. **Granular per-resource finding ids — not limited to IAM4/IAM5, and not limited to a fixed applyToChildren cascade.** cdk-nag v3 reports a *granular* id embedding the specific managed-policy or resource ARN for any rule that inherently varies per-resource (confirmed for `AwsSolutions-IAM4`/`AwsSolutions-IAM5` against mvc-projen's own migrated example, `assets/cdk-construct/src_crd-example.ts`), e.g. `AwsSolutions-IAM5[Resource::<SomeLogicalId.Arn>:*]` or `AwsSolutions-IAM4[Policy::arn:<AWS::Partition>:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole]`. `Validations.of(x).acknowledge({id, reason})` rejects any id containing more than one `::` (`aws-cdk-lib`'s internal `Validations.qualifyId` validator), so these granular findings need the bypass helper mvc-projen already wrote and validated:
58
+
59
+ ```typescript
60
+ function acknowledgeGranularFinding(construct: Construct, id: string, reason: string): void {
61
+ construct.node.addMetadata(Validations.ACKNOWLEDGED_RULES_METADATA_KEY, { [id]: reason });
62
+ }
63
+ ```
64
+
65
+ Separately, v2's third `true` argument (`applyToChildren`) has **no stated v3 equivalent** — `acknowledge()`/the metadata bypass are per-construct, with no built-in cascade to CDK-generated children (e.g. a `Provider`'s internal `LogRetention`/framework-onEvent constructs). A suppression that relied on `applyToChildren` may reappear as a violation on a child construct v3 reports separately.
66
+
67
+ Because of both points, the exact set of ids and the constructs they must be acknowledged on **cannot be fully predicted from reading the v2 code** — they depend on this repo's specific construct ids, attached policies, and whatever child constructs v3 walks into. Task 1's recipe: migrate every call site to `Validations`/the bypass helper using the v2 id as a first guess, run the rewritten cdk-nag test with `verbose: true`, read every reported violation id from `policy-validation-report.json`, and add one `acknowledge()`/`acknowledgeGranularFinding()` call per reported id — for ANY rule, not only IAM4/IAM5 — until the violation count is 0. Do not hand-author guessed granular ids; every granular id in the final diff must have been copied from an actual report run.
68
+
69
+ 5. **`suppress-nags.ts`'s target, `AWS679f53fac002430cb0da5b7982bd2287`, is a CDK-owned singleton Lambda logical id** (from CDK's built-in `AwsCustomResource`), which can change across a version jump this large. If it isn't found at the expected path, don't force an ancestor acknowledgement first — check whether the `AwsSolutions-L1` entry in `policy-validation-report.json` names a different path for the same singleton, and acknowledge there instead; only fall back to the nearest ancestor if the finding doesn't appear at all.
70
+
71
+ 6. **Two artifacts outside `src/` reference cdk-nag and are not part of the migration itself:**
72
+ - `mavogelcdkvscodeserver/` (committed Go bindings, generated by `jsii-pacmak`) pins `github.com/cdklabs/cdk-nag-go/cdknag/v2` in `go.mod` and `jsii/jsii.go`. `publishToGo` is commented out in `.projenrc.ts` (confirmed), so `npx projen build`/`package-all` does not regenerate this directory — it's a pre-existing stale artifact, unrelated to this migration. Leave it untouched (mention, don't fix, per lineage rules) rather than hand-editing it to reference `cdknag/v3`.
73
+ - `renovate.json5` lists `cdk-nag` inside its Renovate-ignore array, but the file carries a `~~ Generated by projen` banner — it's fully regenerated by `npx projen` from `.projenrc.ts`'s `renovatebotOptions`, so no manual edit is needed there.
74
+
75
+ ## Assumptions
76
+
77
+ - `Validations` (with `.of()`, `.acknowledge()`, `ACKNOWLEDGED_RULES_METADATA_KEY`) and `AwsSolutionsChecks`'s new `(app, options)` constructor signature exist in `aws-cdk-lib@2.261.0` / `cdk-nag@3.0.1` exactly as used in mvc-projen's validated migration — not independently re-verified against those exact versions' own `.d.ts` in this planning session (they aren't installed yet). Task 1's first step (below) verifies this immediately after `npm install`, before any source file is touched, specifically because the fallback is NOT "adjust syntax mechanically" for every case: if `ACKNOWLEDGED_RULES_METADATA_KEY` is not publicly exported, the granular-finding bypass helper — the plan's only mechanism for IAM4/IAM5 and other ARN-embedded findings — has no implementation and there is no fallback within this plan's approach. In that case, stop and report back rather than improvising a metadata key string or a different bypass mechanism (that would be a design change, not a mechanical syntax fix).
78
+
79
+ ## Risks and Mitigations
80
+
81
+ | Risk | Likelihood | Impact | Mitigation |
82
+ |------|------------|--------|------------|
83
+ | Guessed/incomplete granular finding ids (any rule, not just IAM4/IAM5) leave real findings silently unacknowledged, and the test passes anyway | Medium | Medium | Task 1's DoD requires an observed 0-violation run (via the report), not just "code compiles" — ids are discovered empirically from actual report output, never hand-guessed |
84
+ | `Validations`/`ACKNOWLEDGED_RULES_METADATA_KEY` API differs from or is absent in the actual installed `aws-cdk-lib@2.261.0`/`cdk-nag@3.0.1` | Low | High | Task 1's first step verifies the API shape immediately after `npm install`, before touching any source file; absence of the metadata key export is a stop-and-report condition, not an improvised workaround |
85
+ | The 71-minor-version `aws-cdk-lib` jump (2.190.0 → 2.261.0) changes CDK L2 default behavior beyond cdk-nag itself (VPC/CloudFront/Lambda/etc. defaults), silently altering the deployed stack | Medium | High | Task 2 requires a manual review of the regenerated Jest snapshot diff — not a blind `jest -u` accept — and any security- or behavior-relevant change gets called out explicitly in the completion report |
86
+ | jsii 5.9→6.0 (bundled with the `@mavogel/mvc-projen` bump) breaks `jsii-diff`/`jsii-pacmak`/docgen compatibility | Low | Medium | Covered by Task 2's full `npx projen build`, which runs all three; any incompatibility surfaces as a build failure to fix before the plan is done |
87
+ | Task 1's long red-build window (7 files + regenerated lockfile) has no stated recovery point if the Validations API assumption fails mid-migration | Low | Medium | Key Decisions below requires a clean git checkpoint (commit hash noted, or a user-approved commit/stash) before `npx projen` runs, so an abort can restore the pre-migration green v2 tree via `git reset --hard <hash>` (with user permission) followed by `npm ci` to rebuild `node_modules` at the v2 lockfile — a bare git restore alone leaves a v3 `node_modules` behind |
88
+
89
+ ## Progress Tracking
90
+
91
+ - [x] Task 1: Bump mvc-projen/cdkVersion and migrate cdk-nag v2 → v3
92
+ - [x] Task 2: Regenerate snapshots and verify full build
93
+
94
+ ## Implementation Tasks
95
+
96
+ ### Task 1: Bump mvc-projen/cdkVersion and migrate cdk-nag v2 → v3
97
+
98
+ **Objective:** Bump `@mavogel/mvc-projen` to `^0.0.30` and `cdkVersion` to `2.261.0` in `.projenrc.ts`, re-synth the generated project files, verify the `Validations` API shape actually installed, then migrate every `NagSuppressions` call site across all 7 affected source files (see Context item 2's inventory table) plus the cdk-nag test block in `test/vscode-server.test.ts` to cdk-nag v3's `Validations` API, discovering the exact granular finding ids empirically. Also updates `CLAUDE.md`'s stale "CDK-nag Integration" section and sweeps README/examples for any other stale reference.
99
+
100
+ **Files:**
101
+
102
+ - Modify: `.projenrc.ts` (`deps` mvc-projen version, `cdkVersion`)
103
+ - Modify: `package.json`, `package-lock.json`, `.projen/tasks.json`, `.projen/deps.json`, `.projen/files.json` (regenerated by `npx projen`, not hand-edited)
104
+ - Modify: `src/suppress-nags.ts`
105
+ - Modify: `src/vscode-server.ts`
106
+ - Modify: `src/installer/installer.ts`
107
+ - Modify: `src/secret-retriever/secret-retriever.ts`
108
+ - Modify: `src/idle-monitor-enabler/idle-monitor-enabler.ts`
109
+ - Modify: `src/idle-monitor/idle-monitor.ts`
110
+ - Modify: `src/prefixlist-retriever/prefixlist-retriever.ts`
111
+ - Modify: `test/vscode-server.test.ts`
112
+ - Modify: `CLAUDE.md`
113
+
114
+ **Key Decisions / Notes:**
115
+
116
+ - **Checkpoint first:** ensure the working tree is clean and note the current commit hash before running `npx projen` — this task's red-build window spans 7 source files and a regenerated lockfile. If the Assumptions section's API-shape bet turns out wrong and Task 1 must be aborted, the recovery path is `git reset --hard <checkpoint-hash>` (ask the user for permission first — this discards the in-progress migration) followed by `npm ci` to rebuild `node_modules` back at the v2 lockfile; a bare `git checkout` of individual files would leave a v3 `node_modules` installed against v2 source.
117
+ - **Verify the API before migrating any source file:** after `npm install` picks up the bumped deps, read `node_modules/aws-cdk-lib/core/lib/validation/*.d.ts` and confirm `Validations.of()`, `.acknowledge()`, `.addPlugins()`, and `ACKNOWLEDGED_RULES_METADATA_KEY` are exported as used in mvc-projen's reference migration, and confirm `cdk-nag`'s `AwsSolutionsChecks` constructor accepts `(app, options)`. If `ACKNOWLEDGED_RULES_METADATA_KEY` (or any of the above) is missing or shaped differently, STOP — do not improvise a different bypass mechanism — revert to the checkpoint and report back.
118
+ - Same version-alignment reasoning as the prior release-pipeline `/fix`: after bumping `@mavogel/mvc-projen`, also `npm install --save-dev projen@^0.101.31` (or let `npx projen` re-resolve it) so the top-level `projen` matches what `0.0.30` needs — a single deduped install, not a nested copy with mismatched builtin task names.
119
+ - Follow the `Context for Implementer` recipe (items 2–4) for the full inventory, the `addResourceSuppressionsByPath` construct-resolution step in `suppress-nags.ts`, and the empirical granular-id discovery loop covering every rule (not only IAM4/IAM5).
120
+ - Test rewrite pattern (mirrors mvc-projen's validated `assets/cdk-construct/test_index.test.ts`): construct `app` as `new App({ context: { '@aws-cdk/core:validationReportJson': true } })`; register the plugin via `Validations.of(app).addPlugins(new AwsSolutionsChecks(app, { verbose: true }))`; replace the two existing `Annotations.fromStack(...).findWarning/findError` tests with a single test that calls `app.synth()`, reads `<assembly.directory>/policy-validation-report.json` (treat a missing file as zero violations rather than throwing — some CDK versions omit the report entirely when there is nothing to report), flat-maps `pluginReports[].violations`, and asserts the array has length 0. Additionally assert the report/plugin actually ran against the full construct tree (e.g. a non-empty `pluginReports` array, or a known-nonzero count of acknowledged rules) so an accidentally-under-synthesized app can't produce a false-positive 0.
121
+ - The scope moves from stack-level (`Aspects.of(stack)`, v2) to app-level (`Validations.of(app)`, v3), and the single `violations` array replaces two separate warning/error assertions. Confirm `violations` merges both severities (not just errors) by temporarily removing one known `acknowledge()` call and re-running the test — it must reappear as a violation — before restoring it; note the confirmed severity behavior in the completion report rather than assuming it from the API name.
122
+ - Update `CLAUDE.md` line ~201 ("Apply suppressions via `NagSuppressions.addResourceSuppressions()`") to describe `Validations.of(...).acknowledge(...)` instead. Also run `grep -rn "NagSuppressions\|cdk-nag" README.md examples/ API.md renovate.json5 .projenrc.ts` and update any other stale reference found in the same change (Context item 6 already covers why `renovate.json5` itself needs no manual edit).
123
+ - In the completion report, list every acknowledged id (plain and granular) mapped to the v2 suppression it replaces, so any dropped or newly-appeared id is visible rather than silently absorbed into a passing test.
124
+
125
+ **Definition of Done:**
126
+
127
+ - [x] `package.json` shows `@mavogel/mvc-projen: ^0.0.30`, `cdk-nag: ^3.0.1`, and `aws-cdk-lib` peer/dev at `2.261.0`/`^2.261.0`
128
+ - [x] `grep -rn "from 'cdk-nag'" src/` shows no `NagSuppressions` import anywhere (all 7 previously-importing files migrated)
129
+ - [x] The rewritten cdk-nag test in `test/vscode-server.test.ts` observes 0 entries in `policy-validation-report.json`'s violations when run, and confirms the app was fully synthesized (deviation from the DoD wording below — see note)
130
+ - [x] Verify: `npx jest test/vscode-server.test.ts -t "cdk-nag"` passes (0 failures)
131
+
132
+ **Deviation note:** cdk-nag v3's `formatLegacyJson`/`formatJson` (`aws-cdk-lib/core/lib/validation/private/report.js`) both drop a plugin's entry from `pluginReports` entirely once every violation for it is acknowledged (`rep.success && violations.length===0 && !suppressed` short-circuits the push, and `suppressed` here only tracks annotation-based warnings, not acknowledged plugin violations) — confirmed empirically against both `policy-validation-report.json` and the modern `validation-report.json` in this run. So "non-empty report / non-zero acknowledged-rule count" is unobservable once suppression is fully successful. The test instead asserts the synthesized template has `resourceCount > 20`, which fails the same accidentally-under-synthesized-app scenario the DoD line was guarding against.
133
+
134
+ ### Task 2: Regenerate snapshots and verify full build
135
+
136
+ **Objective:** Regenerate the Jest CloudFormation-template snapshots against the new `aws-cdk-lib` version, manually review the diff for anything beyond expected drift, and run the full `npx projen build` (lint, full test suite, `package:js`, `package:python`) to confirm nothing else broke — including that `integ-tests/*.ts` still type-checks under the bumped `aws-cdk-lib`/`@aws-cdk/integ-tests-alpha`.
137
+
138
+ **Files:**
139
+
140
+ - Modify: `test/__snapshots__/vscode-server.test.ts.snap`
141
+ - Modify: `API.md` (docgen output, regenerated by `npx projen build`)
142
+ - Modify: any `src/*.ts` file needing a jsii 5.9→6.0 compatibility fix, if the build surfaces one (not expected, but in scope if it happens)
143
+
144
+ **Key Decisions / Notes:**
145
+
146
+ - Run `npx jest test/vscode-server.test.ts -u` to regenerate, then `git diff test/__snapshots__/` and read it — every changed line should be attributable to the `aws-cdk-lib` 2.190.0→2.261.0 bump (e.g. updated construct metadata, changed default resource properties). If anything looks security- or behavior-relevant (e.g. a changed IAM policy, a removed encryption setting), call it out explicitly in the completion report rather than silently accepting the snapshot.
147
+ - `integ-tests/*.ts` has no hardcoded `aws-cdk-lib`/`cdk-nag` version references (confirmed during planning) — it just needs to still compile, which the full build's TypeScript step covers; no separate task needed.
148
+ - `npx projen build` regenerates `API.md` via docgen — expect it to change (new/renamed types from the jsii bump are unlikely but possible) and let it land as part of this task rather than treating it as scope creep.
149
+
150
+ **Definition of Done:**
151
+
152
+ - [x] Snapshot diff reviewed; only attributable-to-CDK-bump changes remain (or none)
153
+ - [x] `npx projen build` exits 0 (lint, full test suite, `package:js`, `package:python`)
154
+ - [x] Verify: `npx projen build`
155
+
156
+ **Snapshot review notes:** the diff is fully attributable to the version bumps. Removed: `cdk_nag`/`rules_to_suppress`/`applies_to` template `Metadata` blocks (v3's `Validations.acknowledge()` writes its `aws:cdk:acknowledged-rules` metadata under a key CDK does not emit into the synthesized CloudFormation template, unlike v2's `NagSuppressions`, which did). Changed: CDK's own internally-bundled `Provider` framework `framework-onEvent` handlers and the `AwsCustomResource` singleton handler moved `Runtime` from `nodejs20.x` to `nodejs24.x` and gained a `LoggingConfig` (`LogFormat: JSON`, `ApplicationLogLevel: FATAL`) — both are `aws-cdk-lib` 2.190→2.261 defaults for CDK's own bundled Lambda code, not anything this repo's source controls; matching `S3Key` asset-hash changes follow from the same bundled-code change. No IAM policy, security-group, or other resource-property changes appear outside those two categories. Neither our own explicitly-defined Lambdas (`idle-monitor.lambda`, `installer.lambda`, `secret-retriever.lambda`, `idle-monitor-enabler.lambda`) nor `API.md` changed.
@@ -1,9 +1,42 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.IdleMonitorFunction = void 0;
4
37
  // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
5
- const path = require("path");
6
- const lambda = require("aws-cdk-lib/aws-lambda");
38
+ const path = __importStar(require("path"));
39
+ const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
7
40
  /**
8
41
  * An AWS Lambda function which executes src/idle-monitor/idle-monitor.
9
42
  */
@@ -19,4 +52,4 @@ class IdleMonitorFunction extends lambda.Function {
19
52
  }
20
53
  }
21
54
  exports.IdleMonitorFunction = IdleMonitorFunction;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3ItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO1NBQ25HLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZU1vbml0b3JGdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7XG59XG5cbi8qKlxuICogQW4gQVdTIExhbWJkYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IElkbGVNb25pdG9yRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczI0LngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3ItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkVBQTZFO0FBQzdFLDJDQUE2QjtBQUM3QiwrREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO1NBQ25HLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZU1vbml0b3JGdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7XG59XG5cbi8qKlxuICogQW4gQVdTIExhbWJkYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IElkbGVNb25pdG9yRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczI0LngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -1,5 +1,5 @@
1
- import { IDistribution } from 'aws-cdk-lib/aws-cloudfront';
2
- import { IInstance } from 'aws-cdk-lib/aws-ec2';
1
+ import { IDistributionRef } from 'aws-cdk-lib/aws-cloudfront';
2
+ import { IInstanceRef } from 'aws-cdk-lib/aws-ec2';
3
3
  import { Rule } from 'aws-cdk-lib/aws-events';
4
4
  import { Function as LambdaFunction } from 'aws-cdk-lib/aws-lambda';
5
5
  import { Construct } from 'constructs';
@@ -10,11 +10,11 @@ export interface IdleMonitorProps {
10
10
  /**
11
11
  * The EC2 instance to monitor
12
12
  */
13
- readonly instance: IInstance;
13
+ readonly instance: IInstanceRef;
14
14
  /**
15
15
  * The CloudFront distribution to monitor for activity
16
16
  */
17
- readonly distribution: IDistribution;
17
+ readonly distribution: IDistributionRef;
18
18
  /**
19
19
  * Number of minutes of inactivity before stopping the instance
20
20
  */
@@ -1,20 +1,60 @@
1
1
  "use strict";
2
- var _a;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.IdleMonitor = void 0;
5
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const path = require("path");
38
+ const path = __importStar(require("path"));
7
39
  const aws_cdk_lib_1 = require("aws-cdk-lib");
8
40
  const aws_events_1 = require("aws-cdk-lib/aws-events");
9
41
  const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
10
42
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
11
43
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
12
- const cdk_nag_1 = require("cdk-nag");
13
44
  const constructs_1 = require("constructs");
14
45
  /**
15
46
  * Construct that monitors CloudFront request metrics and stops the EC2 instance when idle
16
47
  */
17
48
  class IdleMonitor extends constructs_1.Construct {
49
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@mavogel/cdk-vscode-server.IdleMonitor", version: "0.0.98" };
50
+ /**
51
+ * The Lambda function that performs idle monitoring
52
+ */
53
+ function;
54
+ /**
55
+ * The EventBridge rule that triggers idle monitoring checks
56
+ */
57
+ scheduleRule;
18
58
  constructor(scope, id, props) {
19
59
  super(scope, id);
20
60
  this.function = new aws_lambda_1.Function(this, 'Function', {
@@ -24,8 +64,8 @@ class IdleMonitor extends constructs_1.Construct {
24
64
  timeout: aws_cdk_lib_1.Duration.seconds(30),
25
65
  memorySize: 256,
26
66
  environment: {
27
- INSTANCE_ID: props.instance.instanceId,
28
- DISTRIBUTION_ID: props.distribution.distributionId,
67
+ INSTANCE_ID: props.instance.instanceRef.instanceId,
68
+ DISTRIBUTION_ID: props.distribution.distributionRef.distributionId,
29
69
  IDLE_TIMEOUT_MINUTES: props.idleTimeoutMinutes.toString(),
30
70
  SKIP_STATUS_CHECKS: props.skipStatusChecks ? 'true' : 'false',
31
71
  },
@@ -52,7 +92,7 @@ class IdleMonitor extends constructs_1.Construct {
52
92
  'ec2:StopInstances',
53
93
  ],
54
94
  resources: [
55
- `arn:aws:ec2:${aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:instance/${props.instance.instanceId}`,
95
+ `arn:aws:ec2:${aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:instance/${props.instance.instanceRef.instanceId}`,
56
96
  ],
57
97
  }));
58
98
  // Create EventBridge rule to trigger at specified interval
@@ -65,23 +105,17 @@ class IdleMonitor extends constructs_1.Construct {
65
105
  });
66
106
  this.scheduleRule.addTarget(new aws_events_targets_1.LambdaFunction(this.function));
67
107
  // CDK-nag suppressions
68
- cdk_nag_1.NagSuppressions.addResourceSuppressions(this.function, [
69
- {
70
- id: 'AwsSolutions-IAM4',
71
- reason: 'Managed policies acceptable for workshop Lambda functions',
72
- },
73
- {
74
- id: 'AwsSolutions-IAM5',
75
- reason: 'CloudWatch metrics require wildcard permissions',
76
- },
77
- {
78
- id: 'AwsSolutions-L1',
79
- reason: 'Latest runtime not required for this function',
80
- },
81
- ], true);
108
+ aws_cdk_lib_1.Validations.of(this.function).acknowledge({
109
+ id: 'AwsSolutions-IAM4',
110
+ reason: 'Managed policies acceptable for workshop Lambda functions',
111
+ }, {
112
+ id: 'AwsSolutions-IAM5',
113
+ reason: 'CloudWatch metrics require wildcard permissions',
114
+ }, {
115
+ id: 'AwsSolutions-L1',
116
+ reason: 'Latest runtime not required for this function',
117
+ });
82
118
  }
83
119
  }
84
120
  exports.IdleMonitor = IdleMonitor;
85
- _a = JSII_RTTI_SYMBOL_1;
86
- IdleMonitor[_a] = { fqn: "@mavogel/cdk-vscode-server.IdleMonitor", version: "0.0.96" };
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNkNBQThDO0FBRzlDLHVEQUF3RDtBQUN4RCx1RUFBd0Y7QUFDeEYsaURBQXNEO0FBQ3RELHVEQUFtRjtBQUNuRixxQ0FBMEM7QUFDMUMsMkNBQXVDO0FBcUN2Qzs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBV3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLCtDQUErQyxDQUFDLENBQUM7WUFDM0YsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsR0FBRztZQUNmLFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVO2dCQUN0QyxlQUFlLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO2dCQUNsRCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO2dCQUN6RCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTzthQUM5RDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQixJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLGdDQUFnQztnQkFDaEMsMEJBQTBCO2FBQzNCO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsd0ZBQXdGO1FBQ3hGLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCx1QkFBdUI7Z0JBQ3ZCLDRCQUE0QjthQUM3QjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxtQkFBbUI7YUFDcEI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxhQUFhLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQ3ZHO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFRiwyREFBMkQ7UUFDM0QseUVBQXlFO1FBQ3pFLDZFQUE2RTtRQUM3RSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxpQkFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDakQsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUscURBQXFEO1NBQ3RFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksbUNBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFckUsdUJBQXVCO1FBQ3ZCLHlCQUFlLENBQUMsdUJBQXVCLENBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQ2I7WUFDRTtnQkFDRSxFQUFFLEVBQUUsbUJBQW1CO2dCQUN2QixNQUFNLEVBQUUsMkRBQTJEO2FBQ3BFO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLGlEQUFpRDthQUMxRDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxpQkFBaUI7Z0JBQ3JCLE1BQU0sRUFBRSwrQ0FBK0M7YUFDeEQ7U0FDRixFQUNELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQzs7QUE1Rkgsa0NBNkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBJSW5zdGFuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvblRhcmdldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIENvZGUsIEZ1bmN0aW9uIGFzIExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBOYWdTdXBwcmVzc2lvbnMgfSBmcm9tICdjZGstbmFnJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvciBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGxlTW9uaXRvclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBFQzIgaW5zdGFuY2UgdG8gbW9uaXRvclxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2U6IElJbnN0YW5jZTtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byBtb25pdG9yIGZvciBhY3Rpdml0eVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBJRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogTnVtYmVyIG9mIG1pbnV0ZXMgb2YgaW5hY3Rpdml0eSBiZWZvcmUgc3RvcHBpbmcgdGhlIGluc3RhbmNlXG4gICAqL1xuICByZWFkb25seSBpZGxlVGltZW91dE1pbnV0ZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgaWRsZSBhY3Rpdml0eSAoaW4gbWludXRlcylcbiAgICogQGRlZmF1bHQgNSAtIENoZWNrIGV2ZXJ5IDUgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJbnRlcnZhbE1pbnV0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTa2lwIGluc3RhbmNlIHN0YXR1cyBjaGVja3MgYmVmb3JlIHN0b3BwaW5nXG4gICAqIFdoZW4gdHJ1ZSwgSWRsZU1vbml0b3Igd2lsbCBzdG9wIGlkbGUgaW5zdGFuY2VzIGV2ZW4gaWYgc3RhdHVzIGNoZWNrcyBoYXZlbid0IHBhc3NlZFxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW50ZWdyYXRpb24gdGVzdHMgd2hlcmUgc3RhdHVzIGNoZWNrIGluaXRpYWxpemF0aW9uIHRpbWVcbiAgICogZXhjZWVkcyB0ZXN0IHRpbWVvdXQgbGltaXRzXG4gICAqXG4gICAqIFdBUk5JTkc6IEZvciB0ZXN0aW5nIG9ubHkgLSBpbiBwcm9kdWN0aW9uLCB5b3Ugc2hvdWxkIHdhaXQgZm9yIHN0YXR1cyBjaGVja3NcbiAgICogdG8gcGFzcyBiZWZvcmUgc3RvcHBpbmcgaW5zdGFuY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwU3RhdHVzQ2hlY2tzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhhdCBtb25pdG9ycyBDbG91ZEZyb250IHJlcXVlc3QgbWV0cmljcyBhbmQgc3RvcHMgdGhlIEVDMiBpbnN0YW5jZSB3aGVuIGlkbGVcbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBpZGxlIG1vbml0b3JpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbjogTGFtYmRhRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBFdmVudEJyaWRnZSBydWxlIHRoYXQgdHJpZ2dlcnMgaWRsZSBtb25pdG9yaW5nIGNoZWNrc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjaGVkdWxlUnVsZTogUnVsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWRsZU1vbml0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdGdW5jdGlvbicsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vYXNzZXRzL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3IubGFtYmRhJykpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBJTlNUQU5DRV9JRDogcHJvcHMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgRElTVFJJQlVUSU9OX0lEOiBwcm9wcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQsXG4gICAgICAgIElETEVfVElNRU9VVF9NSU5VVEVTOiBwcm9wcy5pZGxlVGltZW91dE1pbnV0ZXMudG9TdHJpbmcoKSxcbiAgICAgICAgU0tJUF9TVEFUVVNfQ0hFQ0tTOiBwcm9wcy5za2lwU3RhdHVzQ2hlY2tzID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6R2V0TWV0cmljU3RhdGlzdGljcycsXG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6R2V0TWV0cmljRGF0YScsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gRGVzY3JpYmVJbnN0YW5jZXMgYW5kIERlc2NyaWJlSW5zdGFuY2VTdGF0dXMgZG9uJ3Qgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9uc1xuICAgIC8vIFRoZXkgcmVxdWlyZSB3aWxkY2FyZCByZXNvdXJjZXNcbiAgICB0aGlzLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlU3RhdHVzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBTdG9wSW5zdGFuY2VzIHN1cHBvcnRzIHJlc291cmNlLWxldmVsIHBlcm1pc3Npb25zLCBzbyB3ZSBjYW4gcmVzdHJpY3QgaXRcbiAgICB0aGlzLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjMjpTdG9wSW5zdGFuY2VzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6ZWMyOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke1N0YWNrLm9mKHRoaXMpLmFjY291bnR9Omluc3RhbmNlLyR7cHJvcHMuaW5zdGFuY2UuaW5zdGFuY2VJZH1gLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBFdmVudEJyaWRnZSBydWxlIHRvIHRyaWdnZXIgYXQgc3BlY2lmaWVkIGludGVydmFsXG4gICAgLy8gTk9URTogUnVsZSBpcyBjcmVhdGVkIGluIERJU0FCTEVEIHN0YXRlIGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgIC8vIGFmdGVyIGluc3RhbGxhdGlvbiBjb21wbGV0ZXMgdG8gcHJldmVudCBzdG9wcGluZyB0aGUgaW5zdGFuY2UgZHVyaW5nIHNldHVwXG4gICAgY29uc3QgY2hlY2tJbnRlcnZhbCA9IHByb3BzLmNoZWNrSW50ZXJ2YWxNaW51dGVzID8/IDU7XG4gICAgdGhpcy5zY2hlZHVsZVJ1bGUgPSBuZXcgUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUoRHVyYXRpb24ubWludXRlcyhjaGVja0ludGVydmFsKSksXG4gICAgICBlbmFibGVkOiBmYWxzZSwgLy8gU3RhcnQgZGlzYWJsZWQsIHdpbGwgYmUgZW5hYmxlZCBhZnRlciBpbnN0YWxsYXRpb25cbiAgICB9KTtcblxuICAgIHRoaXMuc2NoZWR1bGVSdWxlLmFkZFRhcmdldChuZXcgTGFtYmRhRnVuY3Rpb25UYXJnZXQodGhpcy5mdW5jdGlvbikpO1xuXG4gICAgLy8gQ0RLLW5hZyBzdXBwcmVzc2lvbnNcbiAgICBOYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICB0aGlzLmZ1bmN0aW9uLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyBhY2NlcHRhYmxlIGZvciB3b3Jrc2hvcCBMYW1iZGEgZnVuY3Rpb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICAgIHJlYXNvbjogJ0Nsb3VkV2F0Y2ggbWV0cmljcyByZXF1aXJlIHdpbGRjYXJkIHBlcm1pc3Npb25zJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUwxJyxcbiAgICAgICAgICByZWFzb246ICdMYXRlc3QgcnVudGltZSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb24nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgfVxufVxuIl19
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qiw2Q0FBMkQ7QUFHM0QsdURBQXdEO0FBQ3hELHVFQUF3RjtBQUN4RixpREFBc0Q7QUFDdEQsdURBQW1GO0FBQ25GLDJDQUF1QztBQXFDdkM7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUzs7SUFDeEM7O09BRUc7SUFDYSxRQUFRLENBQWlCO0lBRXpDOztPQUVHO0lBQ2EsWUFBWSxDQUFPO0lBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLCtDQUErQyxDQUFDLENBQUM7WUFDM0YsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsR0FBRztZQUNmLFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDbEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLGNBQWM7Z0JBQ2xFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pELGtCQUFrQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO2FBQzlEO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzNCLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUU7Z0JBQ1AsZ0NBQWdDO2dCQUNoQywwQkFBMEI7YUFDM0I7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7UUFFRix3RkFBd0Y7UUFDeEYsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQixJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLHVCQUF1QjtnQkFDdkIsNEJBQTRCO2FBQzdCO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQixJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLG1CQUFtQjthQUNwQjtZQUNELFNBQVMsRUFBRTtnQkFDVCxlQUFlLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLGFBQWEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO2FBQ25IO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFRiwyREFBMkQ7UUFDM0QseUVBQXlFO1FBQ3pFLDZFQUE2RTtRQUM3RSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxpQkFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDakQsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUscURBQXFEO1NBQ3RFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksbUNBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFckUsdUJBQXVCO1FBQ3ZCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQ3ZDO1lBQ0UsRUFBRSxFQUFFLG1CQUFtQjtZQUN2QixNQUFNLEVBQUUsMkRBQTJEO1NBQ3BFLEVBQ0Q7WUFDRSxFQUFFLEVBQUUsbUJBQW1CO1lBQ3ZCLE1BQU0sRUFBRSxpREFBaUQ7U0FDMUQsRUFDRDtZQUNFLEVBQUUsRUFBRSxpQkFBaUI7WUFDckIsTUFBTSxFQUFFLCtDQUErQztTQUN4RCxDQUNGLENBQUM7SUFDSixDQUFDOztBQXhGSCxrQ0F5RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBWYWxpZGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElEaXN0cmlidXRpb25SZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgeyBJSW5zdGFuY2VSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvblRhcmdldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIENvZGUsIEZ1bmN0aW9uIGFzIExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgSWRsZU1vbml0b3IgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZU1vbml0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgRUMyIGluc3RhbmNlIHRvIG1vbml0b3JcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlOiBJSW5zdGFuY2VSZWY7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gbW9uaXRvciBmb3IgYWN0aXZpdHlcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvblJlZjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBtaW51dGVzIG9mIGluYWN0aXZpdHkgYmVmb3JlIHN0b3BwaW5nIHRoZSBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgaWRsZVRpbWVvdXRNaW51dGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIGlkbGUgYWN0aXZpdHkgKGluIG1pbnV0ZXMpXG4gICAqIEBkZWZhdWx0IDUgLSBDaGVjayBldmVyeSA1IG1pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrSW50ZXJ2YWxNaW51dGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogU2tpcCBpbnN0YW5jZSBzdGF0dXMgY2hlY2tzIGJlZm9yZSBzdG9wcGluZ1xuICAgKiBXaGVuIHRydWUsIElkbGVNb25pdG9yIHdpbGwgc3RvcCBpZGxlIGluc3RhbmNlcyBldmVuIGlmIHN0YXR1cyBjaGVja3MgaGF2ZW4ndCBwYXNzZWRcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGludGVncmF0aW9uIHRlc3RzIHdoZXJlIHN0YXR1cyBjaGVjayBpbml0aWFsaXphdGlvbiB0aW1lXG4gICAqIGV4Y2VlZHMgdGVzdCB0aW1lb3V0IGxpbWl0c1xuICAgKlxuICAgKiBXQVJOSU5HOiBGb3IgdGVzdGluZyBvbmx5IC0gaW4gcHJvZHVjdGlvbiwgeW91IHNob3VsZCB3YWl0IGZvciBzdGF0dXMgY2hlY2tzXG4gICAqIHRvIHBhc3MgYmVmb3JlIHN0b3BwaW5nIGluc3RhbmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFN0YXR1c0NoZWNrcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHRoYXQgbW9uaXRvcnMgQ2xvdWRGcm9udCByZXF1ZXN0IG1ldHJpY3MgYW5kIHN0b3BzIHRoZSBFQzIgaW5zdGFuY2Ugd2hlbiBpZGxlXG4gKi9cbmV4cG9ydCBjbGFzcyBJZGxlTW9uaXRvciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgaWRsZSBtb25pdG9yaW5nXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgRXZlbnRCcmlkZ2UgcnVsZSB0aGF0IHRyaWdnZXJzIGlkbGUgbW9uaXRvcmluZyBjaGVja3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZVJ1bGU6IFJ1bGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElkbGVNb25pdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Fzc2V0cy9pZGxlLW1vbml0b3IvaWRsZS1tb25pdG9yLmxhbWJkYScpKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgbWVtb3J5U2l6ZTogMjU2LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgSU5TVEFOQ0VfSUQ6IHByb3BzLmluc3RhbmNlLmluc3RhbmNlUmVmLmluc3RhbmNlSWQsXG4gICAgICAgIERJU1RSSUJVVElPTl9JRDogcHJvcHMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvblJlZi5kaXN0cmlidXRpb25JZCxcbiAgICAgICAgSURMRV9USU1FT1VUX01JTlVURVM6IHByb3BzLmlkbGVUaW1lb3V0TWludXRlcy50b1N0cmluZygpLFxuICAgICAgICBTS0lQX1NUQVRVU19DSEVDS1M6IHByb3BzLnNraXBTdGF0dXNDaGVja3MgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY2xvdWR3YXRjaDpHZXRNZXRyaWNTdGF0aXN0aWNzJyxcbiAgICAgICAgICAnY2xvdWR3YXRjaDpHZXRNZXRyaWNEYXRhJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBEZXNjcmliZUluc3RhbmNlcyBhbmQgRGVzY3JpYmVJbnN0YW5jZVN0YXR1cyBkb24ndCBzdXBwb3J0IHJlc291cmNlLWxldmVsIHBlcm1pc3Npb25zXG4gICAgLy8gVGhleSByZXF1aXJlIHdpbGRjYXJkIHJlc291cmNlc1xuICAgIHRoaXMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VTdGF0dXMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIFN0b3BJbnN0YW5jZXMgc3VwcG9ydHMgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMsIHNvIHdlIGNhbiByZXN0cmljdCBpdFxuICAgIHRoaXMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnZWMyOlN0b3BJbnN0YW5jZXMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czplYzI6JHtTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06aW5zdGFuY2UvJHtwcm9wcy5pbnN0YW5jZS5pbnN0YW5jZVJlZi5pbnN0YW5jZUlkfWAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIEV2ZW50QnJpZGdlIHJ1bGUgdG8gdHJpZ2dlciBhdCBzcGVjaWZpZWQgaW50ZXJ2YWxcbiAgICAvLyBOT1RFOiBSdWxlIGlzIGNyZWF0ZWQgaW4gRElTQUJMRUQgc3RhdGUgYW5kIG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkXG4gICAgLy8gYWZ0ZXIgaW5zdGFsbGF0aW9uIGNvbXBsZXRlcyB0byBwcmV2ZW50IHN0b3BwaW5nIHRoZSBpbnN0YW5jZSBkdXJpbmcgc2V0dXBcbiAgICBjb25zdCBjaGVja0ludGVydmFsID0gcHJvcHMuY2hlY2tJbnRlcnZhbE1pbnV0ZXMgPz8gNTtcbiAgICB0aGlzLnNjaGVkdWxlUnVsZSA9IG5ldyBSdWxlKHRoaXMsICdTY2hlZHVsZVJ1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5taW51dGVzKGNoZWNrSW50ZXJ2YWwpKSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLCAvLyBTdGFydCBkaXNhYmxlZCwgd2lsbCBiZSBlbmFibGVkIGFmdGVyIGluc3RhbGxhdGlvblxuICAgIH0pO1xuXG4gICAgdGhpcy5zY2hlZHVsZVJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFGdW5jdGlvblRhcmdldCh0aGlzLmZ1bmN0aW9uKSk7XG5cbiAgICAvLyBDREstbmFnIHN1cHByZXNzaW9uc1xuICAgIFZhbGlkYXRpb25zLm9mKHRoaXMuZnVuY3Rpb24pLmFja25vd2xlZGdlKFxuICAgICAge1xuICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgcmVhc29uOiAnTWFuYWdlZCBwb2xpY2llcyBhY2NlcHRhYmxlIGZvciB3b3Jrc2hvcCBMYW1iZGEgZnVuY3Rpb25zJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgICByZWFzb246ICdDbG91ZFdhdGNoIG1ldHJpY3MgcmVxdWlyZSB3aWxkY2FyZCBwZXJtaXNzaW9ucycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICAgIHJlYXNvbjogJ0xhdGVzdCBydW50aW1lIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbicsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +1,42 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.IdleMonitorEnablerFunction = void 0;
4
37
  // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
5
- const path = require("path");
6
- const lambda = require("aws-cdk-lib/aws-lambda");
38
+ const path = __importStar(require("path"));
39
+ const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
7
40
  /**
8
41
  * An AWS Lambda function which executes src/idle-monitor-enabler/idle-monitor-enabler.
9
42
  */
@@ -19,4 +52,4 @@ class IdleMonitorEnablerFunction extends lambda.Function {
19
52
  }
20
53
  }
21
54
  exports.IdleMonitorEnablerFunction = IdleMonitorEnablerFunction;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWVuYWJsZXItZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLDBCQUEyQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzdELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseURBQXlEO1lBQ3RFLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1NBQ25ILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGdFQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckVuYWJsZXJGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9pZGxlLW1vbml0b3ItZW5hYmxlci9pZGxlLW1vbml0b3ItZW5hYmxlci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJZGxlTW9uaXRvckVuYWJsZXJGdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3NyYy9pZGxlLW1vbml0b3ItZW5hYmxlci9pZGxlLW1vbml0b3ItZW5hYmxlci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczI0LngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXIubGFtYmRhJykpLFxuICAgIH0pO1xuICB9XG59Il19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWVuYWJsZXItZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkVBQTZFO0FBQzdFLDJDQUE2QjtBQUM3QiwrREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLDBCQUEyQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzdELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseURBQXlEO1lBQ3RFLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1NBQ25ILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGdFQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckVuYWJsZXJGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9pZGxlLW1vbml0b3ItZW5hYmxlci9pZGxlLW1vbml0b3ItZW5hYmxlci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRW5hYmxlckZ1bmN0aW9uIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJZGxlTW9uaXRvckVuYWJsZXJGdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3NyYy9pZGxlLW1vbml0b3ItZW5hYmxlci9pZGxlLW1vbml0b3ItZW5hYmxlci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczI0LngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yLWVuYWJsZXIvaWRsZS1tb25pdG9yLWVuYWJsZXIubGFtYmRhJykpLFxuICAgIH0pO1xuICB9XG59Il19