@nikovirtala/projen-constructs 0.3.77 → 0.3.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/.jsii +111 -58
  2. package/README.md +18 -0
  3. package/docs/api/assets/search.js +1 -1
  4. package/docs/api/classes/AwsCdkConstructLibraryProject.html +1 -1
  5. package/docs/api/classes/AwsCdkTypeScriptAppProject.html +1 -1
  6. package/docs/api/classes/Colima.html +1 -1
  7. package/docs/api/classes/Homebrew.html +1 -1
  8. package/docs/api/classes/JsiiProject.html +1 -1
  9. package/docs/api/classes/LambdaFunctionCodeBundler.html +26 -15
  10. package/docs/api/classes/LambdaFunctionConstructGenerator.html +1 -1
  11. package/docs/api/classes/LocalStack.html +1 -1
  12. package/docs/api/classes/Mise.html +1 -1
  13. package/docs/api/classes/ProjectGenerator.html +1 -1
  14. package/docs/api/classes/TypeDoc.html +1 -1
  15. package/docs/api/classes/TypeScriptProject.html +1 -1
  16. package/docs/api/classes/Vitest.html +1 -1
  17. package/docs/api/index.html +8 -0
  18. package/docs/api/interfaces/ProjectGeneratorOptions.html +1 -1
  19. package/docs/api/interfaces/VitestOptions.html +48 -3
  20. package/lib/components/bundle-lambda-function-code.d.ts +5 -2
  21. package/lib/components/bundle-lambda-function-code.js +14 -9
  22. package/lib/components/colima.js +1 -1
  23. package/lib/components/homebrew.js +1 -1
  24. package/lib/components/lambda-function-construct-generator.js +1 -1
  25. package/lib/components/localstack.js +1 -1
  26. package/lib/components/mise.js +1 -1
  27. package/lib/components/typedoc.js +1 -1
  28. package/lib/components/vitest.d.ts +29 -0
  29. package/lib/components/vitest.js +38 -35
  30. package/lib/project-generator.js +1 -1
  31. package/lib/projects/awscdk-construct-library.generated.js +1 -1
  32. package/lib/projects/awscdk-typescript-app.generated.js +1 -1
  33. package/lib/projects/jsii.generated.js +1 -1
  34. package/lib/projects/typescript.generated.js +1 -1
  35. package/package.json +1 -1
@@ -10,7 +10,7 @@
10
10
  <ul class="tsd-breadcrumb" aria-label="Breadcrumb">
11
11
  <li><a href="" aria-current="page">VitestOptions</a></li></ul>
12
12
  <h1>Interface VitestOptions</h1></div>
13
- <div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">VitestOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#config">config</a><span class="tsd-signature-symbol">?:</span> <a href="VitestConfigOptions.html" class="tsd-signature-type tsd-kind-interface">VitestConfigOptions</a><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#configfilepath">configFilePath</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#vitestversion">vitestVersion</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
13
+ <div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">VitestOptions</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#config">config</a><span class="tsd-signature-symbol">?:</span> <a href="VitestConfigOptions.html" class="tsd-signature-type tsd-kind-interface">VitestConfigOptions</a><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#configfilepath">configFilePath</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#extraconfig">extraConfig</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#extratestconfig">extraTestConfig</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#vitestversion">vitestVersion</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
14
14
  <section class="tsd-panel-group tsd-index-group">
15
15
  <section class="tsd-panel tsd-index-panel">
16
16
  <details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
@@ -20,6 +20,8 @@
20
20
  <h3 class="tsd-index-heading tsd-anchor-link" id="properties">Properties<a href="#properties" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
21
21
  <div class="tsd-index-list"><a href="#config" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config?</span></a>
22
22
  <a href="#configfilepath" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config<wbr/>File<wbr/>Path?</span></a>
23
+ <a href="#extraconfig" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Config?</span></a>
24
+ <a href="#extratestconfig" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Test<wbr/>Config?</span></a>
23
25
  <a href="#vitestversion" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>vitest<wbr/>Version?</span></a>
24
26
  </div></section></div></details></section></section>
25
27
  <details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
@@ -40,6 +42,49 @@
40
42
  <h4 class="tsd-anchor-link" id="default">Default<a href="#default" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-2">&quot;vitest.config.ts&quot;</span>
41
43
  </code><button type="button">Copy</button></pre>
42
44
 
45
+ </div></div></section>
46
+ <section class="tsd-panel tsd-member">
47
+ <h3 class="tsd-anchor-link" id="extraconfig"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>extra<wbr/>Config</span><a href="#extraconfig" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
48
+ <div class="tsd-signature"><span class="tsd-kind-property">extraConfig</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span></div>
49
+ <div class="tsd-comment tsd-typography"><p>Additional top-level config options, next to <code>test</code>, such as <code>resolve</code>.</p>
50
+ <p>Values are rendered as JSON, so they must be JSON-serializable (no functions or regular expressions,
51
+ which rules out plugins). Use <code>extraTestConfig</code> for <code>test</code> options.</p>
52
+ </div>
53
+ <div class="tsd-comment tsd-typography">
54
+ <div class="tsd-tag-example">
55
+ <h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">{ </span><span class="hl-10">resolve</span><span class="hl-1">: { </span><span class="hl-10">alias</span><span class="hl-1">: { </span><span class="hl-2">&quot;@&quot;</span><span class="hl-1">: </span><span class="hl-2">&quot;/src&quot;</span><span class="hl-1"> } } }</span>
56
+ </code><button type="button">Copy</button></pre>
57
+
58
+ </div>
59
+ <div class="tsd-tag-default">
60
+ <h4 class="tsd-anchor-link" id="default-1">Default<a href="#default-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">- </span><span class="hl-5">no</span><span class="hl-1"> </span><span class="hl-5">additional</span><span class="hl-1"> </span><span class="hl-5">top</span><span class="hl-1">-</span><span class="hl-5">level</span><span class="hl-1"> </span><span class="hl-5">options</span>
61
+ </code><button type="button">Copy</button></pre>
62
+
63
+ </div>
64
+ <div class="tsd-tag-see">
65
+ <h4 class="tsd-anchor-link" id="see">See<a href="#see" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p><a href="https://vitest.dev/config/">https://vitest.dev/config/</a></p>
66
+ </div></div></section>
67
+ <section class="tsd-panel tsd-member">
68
+ <h3 class="tsd-anchor-link" id="extratestconfig"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>extra<wbr/>Test<wbr/>Config</span><a href="#extratestconfig" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
69
+ <div class="tsd-signature"><span class="tsd-kind-property">extraTestConfig</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span></div>
70
+ <div class="tsd-comment tsd-typography"><p>Additional <code>test</code> options for settings that <code>config</code> doesn't cover, such as <code>setupFiles</code> or <code>expect</code>.</p>
71
+ <p>Deep-merged over the options generated from <code>config</code>: objects are merged, other values (including
72
+ arrays) replace the generated value. Values are rendered as JSON, so they must be JSON-serializable
73
+ (no functions or regular expressions).</p>
74
+ </div>
75
+ <div class="tsd-comment tsd-typography">
76
+ <div class="tsd-tag-example">
77
+ <h4 class="tsd-anchor-link" id="example-1">Example<a href="#example-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">{ </span><span class="hl-10">setupFiles</span><span class="hl-1">: [</span><span class="hl-2">&quot;test/setup.ts&quot;</span><span class="hl-1">], </span><span class="hl-10">expect</span><span class="hl-1">: { </span><span class="hl-10">requireAssertions</span><span class="hl-1">: </span><span class="hl-3">true</span><span class="hl-1"> } }</span>
78
+ </code><button type="button">Copy</button></pre>
79
+
80
+ </div>
81
+ <div class="tsd-tag-default">
82
+ <h4 class="tsd-anchor-link" id="default-2">Default<a href="#default-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">- </span><span class="hl-5">no</span><span class="hl-1"> </span><span class="hl-5">additional</span><span class="hl-1"> </span><span class="hl-5">test</span><span class="hl-1"> </span><span class="hl-5">options</span>
83
+ </code><button type="button">Copy</button></pre>
84
+
85
+ </div>
86
+ <div class="tsd-tag-see">
87
+ <h4 class="tsd-anchor-link" id="see-1">See<a href="#see-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p><a href="https://vitest.dev/config/">https://vitest.dev/config/</a></p>
43
88
  </div></div></section>
44
89
  <section class="tsd-panel tsd-member">
45
90
  <h3 class="tsd-anchor-link" id="vitestversion"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>vitest<wbr/>Version</span><a href="#vitestversion" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -48,7 +93,7 @@
48
93
  </div>
49
94
  <div class="tsd-comment tsd-typography">
50
95
  <div class="tsd-tag-default">
51
- <h4 class="tsd-anchor-link" id="default-1">Default<a href="#default-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-2">&quot;^4&quot;</span>
96
+ <h4 class="tsd-anchor-link" id="default-3">Default<a href="#default-3" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-2">&quot;^4&quot;</span>
52
97
  </code><button type="button">Copy</button></pre>
53
98
 
54
99
  </div></div></section></section></details></div>
@@ -68,7 +113,7 @@
68
113
  <h3>On This Page</h3></summary>
69
114
  <div class="tsd-accordion-details">
70
115
  <details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary>
71
- <div><a href="#config"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config</span></a><a href="#configfilepath"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config<wbr/>File<wbr/>Path</span></a><a href="#vitestversion"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>vitest<wbr/>Version</span></a></div></details></div></details></div>
116
+ <div><a href="#config"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config</span></a><a href="#configfilepath"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config<wbr/>File<wbr/>Path</span></a><a href="#extraconfig"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Config</span></a><a href="#extratestconfig"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Test<wbr/>Config</span></a><a href="#vitestversion"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>vitest<wbr/>Version</span></a></div></details></div></details></div>
72
117
  <div class="site-menu">
73
118
  <nav class="tsd-navigation"><a href="../modules.html">@nikovirtala/projen-constructs</a>
74
119
  <ul class="tsd-small-nested-navigation" id="tsd-nav-container">
@@ -1,4 +1,4 @@
1
- import { Component, type Project, type Task } from "projen";
1
+ import { Component, cdk, type Project, type Task } from "projen";
2
2
  export declare function renderBundleName(entrypoint: string): string;
3
3
  export declare function convertToPosixPath(p: string): string;
4
4
  export interface BundlerOptions {
@@ -57,6 +57,9 @@ export interface LambdaFunctionCodeBundlerOptions {
57
57
  readonly srcdir: string;
58
58
  readonly bundleOptions?: LambdaFunctionCodeBundleOptions;
59
59
  }
60
- export declare class LambdaFunctionCodeBundler extends Component {
60
+ /**
61
+ * Creates Lambda Function code bundles from entrypoints discovered in the project's source tree.
62
+ */
63
+ export declare class LambdaFunctionCodeBundler extends cdk.AutoDiscoverBase {
61
64
  constructor(project: Project, options: LambdaFunctionCodeBundlerOptions);
62
65
  }
@@ -55,7 +55,7 @@ function convertToPosixPath(p) {
55
55
  return p.split(node_path_1.sep).join(node_path_1.posix.sep);
56
56
  }
57
57
  class Bundler extends projen_1.Component {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Bundler", version: "0.3.77" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Bundler", version: "0.3.79" };
59
59
  static of(project) {
60
60
  const isBundler = (o) => o instanceof Bundler;
61
61
  return project.components.find(isBundler);
@@ -157,7 +157,7 @@ class Bundler extends projen_1.Component {
157
157
  }
158
158
  exports.Bundler = Bundler;
159
159
  class LambdaFunctionCodeBundle extends projen_1.Component {
160
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundle", version: "0.3.77" };
160
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundle", version: "0.3.79" };
161
161
  constructor(project, options) {
162
162
  super(project);
163
163
  const bundler = Bundler.of(project);
@@ -199,19 +199,24 @@ class LambdaFunctionCodeBundle extends projen_1.Component {
199
199
  }
200
200
  }
201
201
  exports.LambdaFunctionCodeBundle = LambdaFunctionCodeBundle;
202
- class LambdaFunctionCodeBundler extends projen_1.Component {
203
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundler", version: "0.3.77" };
202
+ /**
203
+ * Creates Lambda Function code bundles from entrypoints discovered in the project's source tree.
204
+ */
205
+ class LambdaFunctionCodeBundler extends projen_1.cdk.AutoDiscoverBase {
206
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundler", version: "0.3.79" };
204
207
  constructor(project, options) {
205
- super(project);
206
- const entrypoints = [];
207
- for (const entrypoint of entrypoints) {
208
+ super(project, {
209
+ projectdir: options.srcdir,
210
+ extension: options.extension,
211
+ });
212
+ for (const entrypoint of this.entrypoints) {
208
213
  new LambdaFunctionCodeBundle(this.project, {
214
+ ...options.bundleOptions,
209
215
  entrypoint: entrypoint,
210
216
  extension: options.extension,
211
- ...options.bundleOptions,
212
217
  });
213
218
  }
214
219
  }
215
220
  }
216
221
  exports.LambdaFunctionCodeBundler = LambdaFunctionCodeBundler;
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtBLDRDQVNDO0FBRUQsZ0RBRUM7O0FBbEJELGdEQUFrQztBQUNsQyx5Q0FBeUU7QUFDekUsK0JBQThCO0FBQzlCLG1DQUFxSDtBQUVySCxTQUFnQixnQkFBZ0IsQ0FBQyxVQUFrQjtJQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFJLEVBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQUcsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFBLG1CQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFBLG1CQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxPQUFPLElBQUEsZ0JBQUksRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLENBQVM7SUFDeEMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFTRCxNQUFhLE9BQVEsU0FBUSxrQkFBUzs7SUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFn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QUM7UUFDNUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxrQkFBa0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7O0FBbERMLDREQW1EQztBQVFELE1BQWEseUJBQTBCLFNBQVEsa0JBQVM7O0lBQ3BELFlBQVksT0FBZ0IsRUFBRSxPQUF5QztRQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFFakMsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNuQyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQzVCLEdBQUcsT0FBTyxDQUFDLGFBQWE7YUFDM0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7O0FBYkwsOERBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCBwb3NpeCwgc2VwIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGFzY2FsIH0gZnJvbSBcImNhc2VcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgRGVwZW5kZW5jeVR5cGUsIGphdmFzY3JpcHQsIHR5cGUgUHJvamVjdCwgU291cmNlQ29kZSwgdHlwZSBUYXNrLCB0eXBlIHR5cGVzY3JpcHQgfSBmcm9tIFwicHJvamVuXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnRzID0gam9pbihlbnRyeXBvaW50KS5zcGxpdChzZXApO1xuICAgIGlmIChwYXJ0c1swXSA9PT0gXCJzcmNcIikge1xuICAgICAgICBwYXJ0cy5zaGlmdCgpO1xuICAgIH1cbiAgICBjb25zdCBwID0gcGFydHMuam9pbihzZXApO1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUocCk7XG4gICAgY29uc3QgYmFzZSA9IGJhc2VuYW1lKHAsIGV4dG5hbWUocCkpO1xuICAgIHJldHVybiBqb2luKGRpciwgYmFzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9Qb3NpeFBhdGgocDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHAuc3BsaXQoc2VwKS5qb2luKHBvc2l4LnNlcCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlck9wdGlvbnMge1xuICAgIHJlYWRvbmx5IGVzYnVpbGRWZXJzaW9uPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFzc2V0c0Rpcj86IHN0cmluZztcbiAgICByZWFkb25seSBhZGRUb1ByZUNvbXBpbGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgY2xhc3MgQnVuZGxlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogQnVuZGxlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGlzQnVuZGxlciA9IChvOiBDb21wb25lbnQpOiBvIGlzIEJ1bmRsZXIgPT4gbyBpbnN0YW5jZW9mIEJ1bmRsZXI7XG4gICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0J1bmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSBlc2J1aWxkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyByZWFkb25seSBidW5kbGVkaXI6IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Rhc2s6IFRhc2sgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRUb1ByZUNvbXBpbGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEJ1bmRsZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCk7XG4gICAgICAgIHRoaXMuZXNidWlsZFZlcnNpb24gPSBvcHRpb25zLmVzYnVpbGRWZXJzaW9uO1xuICAgICAgICB0aGlzLmJ1bmRsZWRpciA9IG9wdGlvbnMuYXNzZXRzRGlyID8/IFwiYXNzZXRzXCI7XG4gICAgICAgIHRoaXMuYWRkVG9QcmVDb21waWxlID0gb3B0aW9ucy5hZGRUb1ByZUNvbXBpbGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkZXJzID0gb3B0aW9ucy5sb2FkZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnVuZGxlVGFzaygpOiBUYXNrIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJ1bmRsaW5nU3VwcG9ydCgpO1xuICAgICAgICAgICAgdGhpcy5fdGFzayA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFwiYnVuZGxlXCIsIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmVwYXJlIGFzc2V0c1wiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRUb1ByZUNvbXBpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2suc3Bhd24odGhpcy5fdGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2s7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEJ1bmRsZShlbnRyeXBvaW50OiBzdHJpbmcsIG9wdGlvbnM6IEJ1bmRsaW5nT3B0aW9ucyk6IEJ1bmRsZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQpO1xuICAgICAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnBvc2l4LmpvaW4odGhpcy5idW5kbGVkaXIsIG5hbWUpO1xuICAgICAgICBjb25zdCBvdXRmaWxlID0gcGF0aC5wb3NpeC5qb2luKG91dGRpciwgb3B0aW9ucy5vdXRmaWxlID8/IFwiaW5kZXgubWpzXCIpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBvcHRpb25zLnRhcmdldCA/PyBcImVzbmV4dFwiO1xuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gPz8gXCJub2RlXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMuZm9ybWF0ID8/IFwiZXNtXCI7XG4gICAgICAgIGNvbnN0IHNvdXJjZW1hcCA9IG9wdGlvbnMuc291cmNlbWFwID8/IHRydWU7XG4gICAgICAgIGNvbnN0IHNvdXJjZXNDb250ZW50ID0gb3B0aW9ucy5zb3VyY2VzQ29udGVudCA/PyBmYWxzZTtcbiAgICAgICAgY29uc3QgbWluaWZ5ID0gb3B0aW9ucy5taW5pZnkgPz8gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWFpbkZpZWxkcyA9IG9wdGlvbnMubWFpbkZpZWxkcyA/PyBcIm1vZHVsZSxtYWluXCI7XG4gICAgICAgIGNvbnN0IGJhbm5lciA9XG4gICAgICAgICAgICBvcHRpb25zLmJhbm5lciA/P1xuICAgICAgICAgICAgXCI6anM9aW1wb3J0IHsgY3JlYXRlUmVxdWlyZSBhcyB0b3BMZXZlbENyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO2NvbnN0IHJlcXVpcmUgPSB0b3BMZXZlbENyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKVwiO1xuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICAgICBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIFwiLS1idW5kbGVcIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICBgLS10YXJnZXQ9XCIke3RhcmdldH1cImAsXG4gICAgICAgICAgICBgLS1wbGF0Zm9ybT1cIiR7cGxhdGZvcm19XCJgLFxuICAgICAgICAgICAgYC0tb3V0ZmlsZT1cIiR7b3V0ZmlsZX1cImAsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgdHNjb25maWcgPSBvcHRpb25zLnRzY29uZmlnUGF0aCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKHRzY29uZmlnKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tdHNjb25maWc9XCIke3RzY29uZmlnfVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHggb2Ygb3B0aW9ucy5leHRlcm5hbHMgPz8gW10pIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1leHRlcm5hbDoke3h9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlbWFwKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCItLXNvdXJjZW1hcFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2VzQ29udGVudCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGAtLXNvdXJjZXMtY29udGVudD0ke3NvdXJjZXNDb250ZW50fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pbmlmeSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKFwiLS1taW5pZnlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tZm9ybWF0PSR7Zm9ybWF0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1haW5GaWVsZHMpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1tYWluLWZpZWxkcz0ke21haW5GaWVsZHN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFubmVyKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tYmFubmVyJHtiYW5uZXJ9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkZXJzID0gKG9wdGlvbnMubG9hZGVycyA/PyBmYWxzZSkgPyBvcHRpb25zLmxvYWRlcnMgOiAodGhpcy5sb2FkZXJzID8/IGZhbHNlKTtcbiAgICAgICAgaWYgKGxvYWRlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2V4dGVuc2lvbiwgbG9hZGVyXSBvZiBPYmplY3QuZW50cmllcyhsb2FkZXJzKSkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChgLS1sb2FkZXI6LiR7ZXh0ZW5zaW9ufT0ke2xvYWRlcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1bmRsZVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhgYnVuZGxlOiR7bmFtZX1gLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhIEphdmFTY3JpcHQgYnVuZGxlIGZyb20gJHtlbnRyeXBvaW50fWAsXG4gICAgICAgICAgICBleGVjOiBhcmdzLmpvaW4oXCIgXCIpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1bmRsZVRhc2suc3Bhd24oYnVuZGxlVGFzayk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1bmRsZVRhc2s6IGJ1bmRsZVRhc2ssXG4gICAgICAgICAgICBvdXRkaXI6IG91dGRpcixcbiAgICAgICAgICAgIG91dGZpbGU6IG91dGZpbGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCdW5kbGluZ1N1cHBvcnQoKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZUVudHJ5ID0gYC8ke3RoaXMuYnVuZGxlZGlyfS9gO1xuICAgICAgICB0aGlzLnByb2plY3QuYWRkR2l0SWdub3JlKGlnbm9yZUVudHJ5KTtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUoYCEke2lnbm9yZUVudHJ5fWApO1xuICAgICAgICBjb25zdCBkZXAgPSB0aGlzLmVzYnVpbGRWZXJzaW9uID8gYGVzYnVpbGRAJHt0aGlzLmVzYnVpbGRWZXJzaW9ufWAgOiBcImVzYnVpbGRcIjtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlIHtcbiAgICByZWFkb25seSBidW5kbGVUYXNrOiBUYXNrO1xuICAgIHJlYWRvbmx5IG91dGZpbGU6IHN0cmluZztcbiAgICByZWFkb25seSBvdXRkaXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdW5kbGluZ09wdGlvbnMge1xuICAgIHJlYWRvbmx5IGV4dGVybmFscz86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHNvdXJjZW1hcD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG91dGZpbGU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgICByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcbiAgICByZWFkb25seSBtYWluRmllbGRzPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJhbm5lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVPcHRpb25zIHtcbiAgICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29uc3RydWN0RmlsZT86IHN0cmluZztcbiAgICByZWFkb25seSBjb25zdHJ1Y3ROYW1lPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJ1bmRsaW5nT3B0aW9ucz86IEJ1bmRsaW5nT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucykge1xuICAgICAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgICAgICBjb25zdCBidW5kbGVyID0gQnVuZGxlci5vZihwcm9qZWN0KTtcbiAgICAgICAgaWYgKCFidW5kbGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBidW5kbGVyIGZvdW5kLiBQbGVhc2UgYWRkIGEgQnVuZGxlciBjb21wb25lbnQgdG8geW91ciBwcm9qZWN0LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVzbGludCA9IGphdmFzY3JpcHQuRXNsaW50Lm9mKHByb2plY3QpO1xuICAgICAgICBlc2xpbnQ/LmFsbG93RGV2RGVwcyhvcHRpb25zLmVudHJ5cG9pbnQpO1xuXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBvcHRpb25zLmVudHJ5cG9pbnQ7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IG9wdGlvbnMuZXh0ZW5zaW9uID8/IFwiLmxhbWJkYS50c1wiO1xuXG4gICAgICAgIGlmICghZW50cnlwb2ludC5lbmRzV2l0aChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlwb2ludH0gbXVzdCBoYXZlIGEgJHtleHRlbnNpb259IGV4dGVuc2lvbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4ocGF0aC5kaXJuYW1lKGVudHJ5cG9pbnQpLCBwYXRoLmJhc2VuYW1lKGVudHJ5cG9pbnQsIGV4dGVuc2lvbikpO1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RGaWxlID0gb3B0aW9ucy5jb25zdHJ1Y3RGaWxlID8/IGAke2Jhc2VQYXRofS1jb2RlLnRzYDtcblxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGNvbnN0cnVjdEZpbGUpICE9PSBcIi50c1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnN0cnVjdCBmaWxlIG5hbWUgXCIke2NvbnN0cnVjdEZpbGV9XCIgbXVzdCBoYXZlIGEgLnRzIGV4dGVuc2lvbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RydWN0TmFtZSA9IG9wdGlvbnMuY29uc3RydWN0TmFtZSA/PyBgJHtwYXNjYWwocGF0aC5iYXNlbmFtZShiYXNlUGF0aCkpfUZ1bmN0aW9uQ29kZWA7XG5cbiAgICAgICAgY29uc3QgYnVuZGxlID0gYnVuZGxlci5hZGRCdW5kbGUoZW50cnlwb2ludCwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5idW5kbGluZ09wdGlvbnMsXG4gICAgICAgICAgICB0c2NvbmZpZ1BhdGg6IChwcm9qZWN0IGFzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3QpPy50c2NvbmZpZ0Rldj8uZmlsZU5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG91dGZpbGVBYnMgPSBwYXRoLmpvaW4ocHJvamVjdC5vdXRkaXIsIGJ1bmRsZS5vdXRmaWxlKTtcbiAgICAgICAgY29uc3QgY29uc3RydWN0QWJzID0gcGF0aC5qb2luKHByb2plY3Qub3V0ZGlyLCBjb25zdHJ1Y3RGaWxlKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVPdXRmaWxlID0gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29uc3RydWN0QWJzKSwgcGF0aC5kaXJuYW1lKG91dGZpbGVBYnMpKTtcblxuICAgICAgICBjb25zdCBzcmMgPSBuZXcgU291cmNlQ29kZShwcm9qZWN0LCBjb25zdHJ1Y3RGaWxlKTtcbiAgICAgICAgaWYgKHNyYy5tYXJrZXIpIHtcbiAgICAgICAgICAgIHNyYy5saW5lKGAvLyAke3NyYy5tYXJrZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3JjLmxpbmUoXCJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1wiKTtcbiAgICAgICAgc3JjLmxpbmUoXCJpbXBvcnQgeyBhd3NfbGFtYmRhIH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICAgICAgc3JjLmxpbmUoKTtcbiAgICAgICAgc3JjLm9wZW4oYGV4cG9ydCBjb25zdCAke2NvbnN0cnVjdE5hbWV9ID0gYXdzX2xhbWJkYS5Db2RlLmZyb21Bc3NldChgKTtcbiAgICAgICAgc3JjLmxpbmUoYHBhdGguam9pbihfX2Rpcm5hbWUsICcke2NvbnZlcnRUb1Bvc2l4UGF0aChyZWxhdGl2ZU91dGZpbGUpfScpLGApO1xuICAgICAgICBzcmMuY2xvc2UoXCIpO1wiKTtcblxuICAgICAgICB0aGlzLnByb2plY3QubG9nZ2VyLnZlcmJvc2UoYCR7YmFzZVBhdGh9OiBjb25zdHJ1Y3QgXCIke2NvbnN0cnVjdE5hbWV9XCIgZ2VuZXJhdGVkIHVuZGVyIFwiJHtjb25zdHJ1Y3RGaWxlfVwiYCk7XG4gICAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIudmVyYm9zZShgJHtiYXNlUGF0aH06IGJ1bmRsZSB0YXNrIFwiJHtidW5kbGUuYnVuZGxlVGFzay5uYW1lfVwiYCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJPcHRpb25zIHtcbiAgICByZWFkb25seSBleHRlbnNpb246IHN0cmluZztcbiAgICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbiAgICByZWFkb25seSBidW5kbGVPcHRpb25zPzogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnlwb2ludCBvZiBlbnRyeXBvaW50cykge1xuICAgICAgICAgICAgbmV3IExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZSh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICAgICAgICBlbnRyeXBvaW50OiBlbnRyeXBvaW50LFxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogb3B0aW9ucy5leHRlbnNpb24sXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5idW5kbGVPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYnVuZGxlLWxhbWJkYS1mdW5jdGlvbi1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLDRDQVNDO0FBRUQsZ0RBRUM7O0FBM0JELGdEQUFrQztBQUNsQyx5Q0FBeUU7QUFDekUsK0JBQThCO0FBQzlCLG1DQVNnQjtBQUVoQixTQUFnQixnQkFBZ0IsQ0FBQyxVQUFrQjtJQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFJLEVBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQUcsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFBLG1CQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFBLG1CQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxPQUFPLElBQUEsZ0JBQUksRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLENBQVM7SUFDeEMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFTRCxNQUFhLE9BQVEsU0FBUSxrQkFBUzs7SUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFn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QUM7UUFDNUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxrQkFBa0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7O0FBbERMLDREQW1EQztBQVFEOztHQUVHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxZQUFHLENBQUMsZ0JBQWdCOztJQUMvRCxZQUFZLE9BQWdCLEVBQUUsT0FBeUM7UUFDbkUsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNYLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTTtZQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUN2QyxHQUFHLE9BQU8sQ0FBQyxhQUFhO2dCQUN4QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDOztBQWRMLDhEQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgcG9zaXgsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBhc2NhbCB9IGZyb20gXCJjYXNlXCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBjZGssXG4gICAgRGVwZW5kZW5jeVR5cGUsXG4gICAgamF2YXNjcmlwdCxcbiAgICB0eXBlIFByb2plY3QsXG4gICAgU291cmNlQ29kZSxcbiAgICB0eXBlIFRhc2ssXG4gICAgdHlwZSB0eXBlc2NyaXB0LFxufSBmcm9tIFwicHJvamVuXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnRzID0gam9pbihlbnRyeXBvaW50KS5zcGxpdChzZXApO1xuICAgIGlmIChwYXJ0c1swXSA9PT0gXCJzcmNcIikge1xuICAgICAgICBwYXJ0cy5zaGlmdCgpO1xuICAgIH1cbiAgICBjb25zdCBwID0gcGFydHMuam9pbihzZXApO1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUocCk7XG4gICAgY29uc3QgYmFzZSA9IGJhc2VuYW1lKHAsIGV4dG5hbWUocCkpO1xuICAgIHJldHVybiBqb2luKGRpciwgYmFzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9Qb3NpeFBhdGgocDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHAuc3BsaXQoc2VwKS5qb2luKHBvc2l4LnNlcCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlck9wdGlvbnMge1xuICAgIHJlYWRvbmx5IGVzYnVpbGRWZXJzaW9uPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFzc2V0c0Rpcj86IHN0cmluZztcbiAgICByZWFkb25seSBhZGRUb1ByZUNvbXBpbGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgY2xhc3MgQnVuZGxlciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogQnVuZGxlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGlzQnVuZGxlciA9IChvOiBDb21wb25lbnQpOiBvIGlzIEJ1bmRsZXIgPT4gbyBpbnN0YW5jZW9mIEJ1bmRsZXI7XG4gICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0J1bmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSBlc2J1aWxkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyByZWFkb25seSBidW5kbGVkaXI6IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Rhc2s6IFRhc2sgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRUb1ByZUNvbXBpbGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEJ1bmRsZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCk7XG4gICAgICAgIHRoaXMuZXNidWlsZFZlcnNpb24gPSBvcHRpb25zLmVzYnVpbGRWZXJzaW9uO1xuICAgICAgICB0aGlzLmJ1bmRsZWRpciA9IG9wdGlvbnMuYXNzZXRzRGlyID8/IFwiYXNzZXRzXCI7XG4gICAgICAgIHRoaXMuYWRkVG9QcmVDb21waWxlID0gb3B0aW9ucy5hZGRUb1ByZUNvbXBpbGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkZXJzID0gb3B0aW9ucy5sb2FkZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnVuZGxlVGFzaygpOiBUYXNrIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YXNrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJ1bmRsaW5nU3VwcG9ydCgpO1xuICAgICAgICAgICAgdGhpcy5fdGFzayA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFwiYnVuZGxlXCIsIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQcmVwYXJlIGFzc2V0c1wiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRUb1ByZUNvbXBpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2suc3Bhd24odGhpcy5fdGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2s7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEJ1bmRsZShlbnRyeXBvaW50OiBzdHJpbmcsIG9wdGlvbnM6IEJ1bmRsaW5nT3B0aW9ucyk6IEJ1bmRsZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSByZW5kZXJCdW5kbGVOYW1lKGVudHJ5cG9pbnQpO1xuICAgICAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnBvc2l4LmpvaW4odGhpcy5idW5kbGVkaXIsIG5hbWUpO1xuICAgICAgICBjb25zdCBvdXRmaWxlID0gcGF0aC5wb3NpeC5qb2luKG91dGRpciwgb3B0aW9ucy5vdXRmaWxlID8/IFwiaW5kZXgubWpzXCIpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBvcHRpb25zLnRhcmdldCA/PyBcImVzbmV4dFwiO1xuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gPz8gXCJub2RlXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMuZm9ybWF0ID8/IFwiZXNtXCI7XG4gICAgICAgIGNvbnN0IHNvdXJjZW1hcCA9IG9wdGlvbnMuc291cmNlbWFwID8/IHRydWU7XG4gICAgICAgIGNvbnN0IHNvdXJjZXNDb250ZW50ID0gb3B0aW9ucy5zb3VyY2VzQ29udGVudCA/PyBmYWxzZTtcbiAgICAgICAgY29uc3QgbWluaWZ5ID0gb3B0aW9ucy5taW5pZnkgPz8gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWFpbkZpZWxkcyA9IG9wdGlvbnMubWFpbkZpZWxkcyA/PyBcIm1vZHVsZSxtYWluXCI7XG4gICAgICAgIGNvbnN0IGJhbm5lciA9XG4gICAgICAgICAgICBvcHRpb25zLmJhbm5lciA/P1xuICAgICAgICAgICAgXCI6anM9aW1wb3J0IHsgY3JlYXRlUmVxdWlyZSBhcyB0b3BMZXZlbENyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO2NvbnN0IHJlcXVpcmUgPSB0b3BMZXZlbENyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKVwiO1xuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICAgICBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIFwiLS1idW5kbGVcIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICBgLS10YXJnZXQ9XCIke3RhcmdldH1cImAsXG4gICAgICAgICAgICBgLS1wbGF0Zm9ybT1cIiR7cGxhdGZvcm19XCJgLFxuICAgICAgICAgICAgYC0tb3V0ZmlsZT1cIiR7b3V0ZmlsZX1cImAsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgdHNjb25maWcgPSBvcHRpb25zLnRzY29uZmlnUGF0aCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKHRzY29uZmlnKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tdHNjb25maWc9XCIke3RzY29uZmlnfVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHggb2Ygb3B0aW9ucy5leHRlcm5hbHMgPz8gW10pIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1leHRlcm5hbDoke3h9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlbWFwKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goXCItLXNvdXJjZW1hcFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2VzQ29udGVudCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGAtLXNvdXJjZXMtY29udGVudD0ke3NvdXJjZXNDb250ZW50fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pbmlmeSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKFwiLS1taW5pZnlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tZm9ybWF0PSR7Zm9ybWF0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1haW5GaWVsZHMpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChgLS1tYWluLWZpZWxkcz0ke21haW5GaWVsZHN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmFubmVyKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goYC0tYmFubmVyJHtiYW5uZXJ9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkZXJzID0gKG9wdGlvbnMubG9hZGVycyA/PyBmYWxzZSkgPyBvcHRpb25zLmxvYWRlcnMgOiAodGhpcy5sb2FkZXJzID8/IGZhbHNlKTtcbiAgICAgICAgaWYgKGxvYWRlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2V4dGVuc2lvbiwgbG9hZGVyXSBvZiBPYmplY3QuZW50cmllcyhsb2FkZXJzKSkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChgLS1sb2FkZXI6LiR7ZXh0ZW5zaW9ufT0ke2xvYWRlcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1bmRsZVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhgYnVuZGxlOiR7bmFtZX1gLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhIEphdmFTY3JpcHQgYnVuZGxlIGZyb20gJHtlbnRyeXBvaW50fWAsXG4gICAgICAgICAgICBleGVjOiBhcmdzLmpvaW4oXCIgXCIpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1bmRsZVRhc2suc3Bhd24oYnVuZGxlVGFzayk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1bmRsZVRhc2s6IGJ1bmRsZVRhc2ssXG4gICAgICAgICAgICBvdXRkaXI6IG91dGRpcixcbiAgICAgICAgICAgIG91dGZpbGU6IG91dGZpbGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCdW5kbGluZ1N1cHBvcnQoKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZUVudHJ5ID0gYC8ke3RoaXMuYnVuZGxlZGlyfS9gO1xuICAgICAgICB0aGlzLnByb2plY3QuYWRkR2l0SWdub3JlKGlnbm9yZUVudHJ5KTtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUoYCEke2lnbm9yZUVudHJ5fWApO1xuICAgICAgICBjb25zdCBkZXAgPSB0aGlzLmVzYnVpbGRWZXJzaW9uID8gYGVzYnVpbGRAJHt0aGlzLmVzYnVpbGRWZXJzaW9ufWAgOiBcImVzYnVpbGRcIjtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlIHtcbiAgICByZWFkb25seSBidW5kbGVUYXNrOiBUYXNrO1xuICAgIHJlYWRvbmx5IG91dGZpbGU6IHN0cmluZztcbiAgICByZWFkb25seSBvdXRkaXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdW5kbGluZ09wdGlvbnMge1xuICAgIHJlYWRvbmx5IGV4dGVybmFscz86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHNvdXJjZW1hcD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG91dGZpbGU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxvYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgICByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcbiAgICByZWFkb25seSBtYWluRmllbGRzPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJhbm5lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVPcHRpb25zIHtcbiAgICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29uc3RydWN0RmlsZT86IHN0cmluZztcbiAgICByZWFkb25seSBjb25zdHJ1Y3ROYW1lPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJ1bmRsaW5nT3B0aW9ucz86IEJ1bmRsaW5nT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucykge1xuICAgICAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgICAgICBjb25zdCBidW5kbGVyID0gQnVuZGxlci5vZihwcm9qZWN0KTtcbiAgICAgICAgaWYgKCFidW5kbGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBidW5kbGVyIGZvdW5kLiBQbGVhc2UgYWRkIGEgQnVuZGxlciBjb21wb25lbnQgdG8geW91ciBwcm9qZWN0LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVzbGludCA9IGphdmFzY3JpcHQuRXNsaW50Lm9mKHByb2plY3QpO1xuICAgICAgICBlc2xpbnQ/LmFsbG93RGV2RGVwcyhvcHRpb25zLmVudHJ5cG9pbnQpO1xuXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBvcHRpb25zLmVudHJ5cG9pbnQ7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IG9wdGlvbnMuZXh0ZW5zaW9uID8/IFwiLmxhbWJkYS50c1wiO1xuXG4gICAgICAgIGlmICghZW50cnlwb2ludC5lbmRzV2l0aChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnlwb2ludH0gbXVzdCBoYXZlIGEgJHtleHRlbnNpb259IGV4dGVuc2lvbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4ocGF0aC5kaXJuYW1lKGVudHJ5cG9pbnQpLCBwYXRoLmJhc2VuYW1lKGVudHJ5cG9pbnQsIGV4dGVuc2lvbikpO1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RGaWxlID0gb3B0aW9ucy5jb25zdHJ1Y3RGaWxlID8/IGAke2Jhc2VQYXRofS1jb2RlLnRzYDtcblxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGNvbnN0cnVjdEZpbGUpICE9PSBcIi50c1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnN0cnVjdCBmaWxlIG5hbWUgXCIke2NvbnN0cnVjdEZpbGV9XCIgbXVzdCBoYXZlIGEgLnRzIGV4dGVuc2lvbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RydWN0TmFtZSA9IG9wdGlvbnMuY29uc3RydWN0TmFtZSA/PyBgJHtwYXNjYWwocGF0aC5iYXNlbmFtZShiYXNlUGF0aCkpfUZ1bmN0aW9uQ29kZWA7XG5cbiAgICAgICAgY29uc3QgYnVuZGxlID0gYnVuZGxlci5hZGRCdW5kbGUoZW50cnlwb2ludCwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5idW5kbGluZ09wdGlvbnMsXG4gICAgICAgICAgICB0c2NvbmZpZ1BhdGg6IChwcm9qZWN0IGFzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3QpPy50c2NvbmZpZ0Rldj8uZmlsZU5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG91dGZpbGVBYnMgPSBwYXRoLmpvaW4ocHJvamVjdC5vdXRkaXIsIGJ1bmRsZS5vdXRmaWxlKTtcbiAgICAgICAgY29uc3QgY29uc3RydWN0QWJzID0gcGF0aC5qb2luKHByb2plY3Qub3V0ZGlyLCBjb25zdHJ1Y3RGaWxlKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVPdXRmaWxlID0gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29uc3RydWN0QWJzKSwgcGF0aC5kaXJuYW1lKG91dGZpbGVBYnMpKTtcblxuICAgICAgICBjb25zdCBzcmMgPSBuZXcgU291cmNlQ29kZShwcm9qZWN0LCBjb25zdHJ1Y3RGaWxlKTtcbiAgICAgICAgaWYgKHNyYy5tYXJrZXIpIHtcbiAgICAgICAgICAgIHNyYy5saW5lKGAvLyAke3NyYy5tYXJrZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3JjLmxpbmUoXCJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1wiKTtcbiAgICAgICAgc3JjLmxpbmUoXCJpbXBvcnQgeyBhd3NfbGFtYmRhIH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICAgICAgc3JjLmxpbmUoKTtcbiAgICAgICAgc3JjLm9wZW4oYGV4cG9ydCBjb25zdCAke2NvbnN0cnVjdE5hbWV9ID0gYXdzX2xhbWJkYS5Db2RlLmZyb21Bc3NldChgKTtcbiAgICAgICAgc3JjLmxpbmUoYHBhdGguam9pbihfX2Rpcm5hbWUsICcke2NvbnZlcnRUb1Bvc2l4UGF0aChyZWxhdGl2ZU91dGZpbGUpfScpLGApO1xuICAgICAgICBzcmMuY2xvc2UoXCIpO1wiKTtcblxuICAgICAgICB0aGlzLnByb2plY3QubG9nZ2VyLnZlcmJvc2UoYCR7YmFzZVBhdGh9OiBjb25zdHJ1Y3QgXCIke2NvbnN0cnVjdE5hbWV9XCIgZ2VuZXJhdGVkIHVuZGVyIFwiJHtjb25zdHJ1Y3RGaWxlfVwiYCk7XG4gICAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIudmVyYm9zZShgJHtiYXNlUGF0aH06IGJ1bmRsZSB0YXNrIFwiJHtidW5kbGUuYnVuZGxlVGFzay5uYW1lfVwiYCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJPcHRpb25zIHtcbiAgICByZWFkb25seSBleHRlbnNpb246IHN0cmluZztcbiAgICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbiAgICByZWFkb25seSBidW5kbGVPcHRpb25zPzogTGFtYmRhRnVuY3Rpb25Db2RlQnVuZGxlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIExhbWJkYSBGdW5jdGlvbiBjb2RlIGJ1bmRsZXMgZnJvbSBlbnRyeXBvaW50cyBkaXNjb3ZlcmVkIGluIHRoZSBwcm9qZWN0J3Mgc291cmNlIHRyZWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGVyIGV4dGVuZHMgY2RrLkF1dG9EaXNjb3ZlckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IExhbWJkYUZ1bmN0aW9uQ29kZUJ1bmRsZXJPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHByb2plY3QsIHtcbiAgICAgICAgICAgIHByb2plY3RkaXI6IG9wdGlvbnMuc3JjZGlyLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBvcHRpb25zLmV4dGVuc2lvbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeXBvaW50IG9mIHRoaXMuZW50cnlwb2ludHMpIHtcbiAgICAgICAgICAgIG5ldyBMYW1iZGFGdW5jdGlvbkNvZGVCdW5kbGUodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5idW5kbGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQ6IGVudHJ5cG9pbnQsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBvcHRpb25zLmV4dGVuc2lvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -6,7 +6,7 @@ const component_1 = require("projen/lib/component");
6
6
  const task_shell_1 = require("projen/lib/task-shell");
7
7
  const homebrew_1 = require("./homebrew");
8
8
  class Colima extends component_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Colima", version: "0.3.77" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Colima", version: "0.3.79" };
10
10
  constructor(scope) {
11
11
  super(scope);
12
12
  const project = this.project;
@@ -6,7 +6,7 @@ const component_1 = require("projen/lib/component");
6
6
  const task_shell_1 = require("projen/lib/task-shell");
7
7
  const textfile_1 = require("projen/lib/textfile");
8
8
  class Homebrew extends component_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Homebrew", version: "0.3.77" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Homebrew", version: "0.3.79" };
10
10
  static of(project) {
11
11
  const isHomebrew = (c) => c instanceof Homebrew;
12
12
  return project.components.find(isHomebrew);
@@ -39,7 +39,7 @@ const path = __importStar(require("node:path"));
39
39
  const projen_1 = require("projen");
40
40
  const utils_1 = require("../utils");
41
41
  class LambdaFunctionConstructGenerator extends projen_1.Component {
42
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionConstructGenerator", version: "0.3.77" };
42
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionConstructGenerator", version: "0.3.79" };
43
43
  sourceDir;
44
44
  outputDir;
45
45
  filePattern;
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const colima_1 = require("./colima");
8
8
  const homebrew_1 = require("./homebrew");
9
9
  class LocalStack extends component_1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LocalStack", version: "0.3.77" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LocalStack", version: "0.3.79" };
11
11
  constructor(scope, options = {}) {
12
12
  super(scope);
13
13
  const project = javascript_1.NodeProject.of(this);
@@ -7,7 +7,7 @@ const component_1 = require("projen/lib/component");
7
7
  const textfile_1 = require("projen/lib/textfile");
8
8
  const homebrew_1 = require("./homebrew");
9
9
  class Mise extends component_1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Mise", version: "0.3.77" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Mise", version: "0.3.79" };
11
11
  static of(project) {
12
12
  const isMise = (c) => c instanceof Mise;
13
13
  return project.components.find(isMise);
@@ -34,7 +34,7 @@ const DEFAULT_CONFIG = {
34
34
  * TypeDoc component for projen projects
35
35
  */
36
36
  class TypeDoc extends component_1.Component {
37
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeDoc", version: "0.3.77" };
37
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeDoc", version: "0.3.79" };
38
38
  static of(project) {
39
39
  const isTypeDoc = (c) => c instanceof TypeDoc;
40
40
  return project.components.find(isTypeDoc);
@@ -244,6 +244,33 @@ export interface VitestOptions {
244
244
  * @default "^4"
245
245
  */
246
246
  readonly vitestVersion?: string;
247
+ /**
248
+ * Additional `test` options for settings that `config` doesn't cover, such as `setupFiles` or `expect`.
249
+ *
250
+ * Deep-merged over the options generated from `config`: objects are merged, other values (including
251
+ * arrays) replace the generated value. Values are rendered as JSON, so they must be JSON-serializable
252
+ * (no functions or regular expressions).
253
+ *
254
+ * @example { setupFiles: ["test/setup.ts"], expect: { requireAssertions: true } }
255
+ * @default - no additional test options
256
+ * @see https://vitest.dev/config/
257
+ */
258
+ readonly extraTestConfig?: {
259
+ [key: string]: unknown;
260
+ };
261
+ /**
262
+ * Additional top-level config options, next to `test`, such as `resolve`.
263
+ *
264
+ * Values are rendered as JSON, so they must be JSON-serializable (no functions or regular expressions,
265
+ * which rules out plugins). Use `extraTestConfig` for `test` options.
266
+ *
267
+ * @example { resolve: { alias: { "@": "/src" } } }
268
+ * @default - no additional top-level options
269
+ * @see https://vitest.dev/config/
270
+ */
271
+ readonly extraConfig?: {
272
+ [key: string]: unknown;
273
+ };
247
274
  }
248
275
  export declare class Vitest extends Component {
249
276
  static of(project: NodeProject): Vitest | undefined;
@@ -267,6 +294,8 @@ export declare class Vitest extends Component {
267
294
  private version;
268
295
  private readonly printConsoleTrace;
269
296
  private readonly slowTestThreshold;
297
+ private readonly extraTestConfig;
298
+ private readonly extraConfig;
270
299
  constructor(project: NodeProject, options?: VitestOptions);
271
300
  preSynthesize(): void;
272
301
  addInclude(pattern: string): void;