projen-modules 5.2.0 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -3
- package/README.md +5 -36
- package/docs/github-configuration.md +40 -0
- package/lib/components/github/mergify.js +34 -15
- package/lib/components/readme/elements/section.js +1 -1
- package/lib/components/readme/getting-started.d.ts +21 -2
- package/lib/components/readme/getting-started.js +52 -5
- package/lib/components/readme/index.js +2 -2
- package/lib/projects/cdk-ts/index.js +12 -5
- package/lib/projects/jsii/index.js +3 -3
- package/lib/projects/npm/index.js +3 -5
- package/lib/projects/python/index.js +3 -3
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
},
|
|
100
100
|
"name": "projen-modules",
|
|
101
101
|
"readme": {
|
|
102
|
-
"markdown": "<!-- ~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\". -->\n\n# projen-modules\n\nA collection of custom projen modules, that can be used to bootstrap and maintain consistent project configuration, tooling, dependencies, and builds.\n\n## Getting Started\n\n```sh\nyarn install\nnpx projen build\n```\n\nThis will:\n* Install the dependencies\n* Apply any projen changes\n* Run tests\n* Package project locally\n\nAny files changed by projen should be committed to git.\n\nRunning the tests like this will update any snapshot files, this should be reviewed and committed to git.\n\n## Testing\n\nTypes of testing:\n* Snapshot - projen project outputs are stored as a snapshot in the corresponding `__snapshots__` directory. When the project changes then it is expected that these snapshots change too and should be reviewed committed alongside the project.\n* Unit tests - these assert on specific functionality of the project and should be written for any new functionality added.\n\n\n## Creating a New Project\n\n\n```\nnpx projen new {project} --from projen-modules\n```\n\nSome projects may have required fields that need to be specified as part of this command, review any errors for details what needs to be specified.\n\n### Project Types\n\n| Project type | Description |\n| ---------------------------------------------- | -------------------------- |\n| [cdk-typescript-app](API.md#cdktypescriptapp-) | A typescript CDK app |\n| [npm-package](API.md#npmpackage-) | A typescript npm package |\n| [python-package](API.md#pythonpackage-) | A python package |\n| [jsii-package](API.md#jsiiproject-) | A typescript JSII package |\n\n## Project Structure\n\nAll source is located in `src` and is grouped by:\n* `components` - these are common building blocks that can be used by projects to implement specific project functionality.\n* `projects` - these are projects that can be built from this project (see #something)\n* `utils` - these are helper functions that are often reused\n\n`test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section).\n\n## GitHub Configuration\n\
|
|
102
|
+
"markdown": "<!-- ~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\". -->\n\n# projen-modules\n\nA collection of custom projen modules, that can be used to bootstrap and maintain consistent project configuration, tooling, dependencies, and builds.\n\n## Getting Started\n\nPrerequisites:\n* Node.js 22\n* Yarn 1 (classic)\n\n```sh\nyarn install\nnpx projen build\n```\n\nThis will:\n* Install the dependencies\n* Apply any projen changes\n* Run tests\n* Package project locally\n\nAny files changed by projen should be committed to git.\n\nRunning the tests like this will update any snapshot files, this should be reviewed and committed to git.\n\n## Testing\n\nTypes of testing:\n* Snapshot - projen project outputs are stored as a snapshot in the corresponding `__snapshots__` directory. When the project changes then it is expected that these snapshots change too and should be reviewed committed alongside the project.\n* Unit tests - these assert on specific functionality of the project and should be written for any new functionality added.\n\n\n## Creating a New Project\n\n\n```\nnpx projen new {project} --from projen-modules\n```\n\nSome projects may have required fields that need to be specified as part of this command, review any errors for details what needs to be specified.\n\n### Project Types\n\n| Project type | Description |\n| ---------------------------------------------- | -------------------------- |\n| [cdk-typescript-app](API.md#cdktypescriptapp-) | A typescript CDK app |\n| [npm-package](API.md#npmpackage-) | A typescript npm package |\n| [python-package](API.md#pythonpackage-) | A python package |\n| [jsii-package](API.md#jsiiproject-) | A typescript JSII package |\n\n## Project Structure\n\nAll source is located in `src` and is grouped by:\n* `components` - these are common building blocks that can be used by projects to implement specific project functionality.\n* `projects` - these are projects that can be built from this project (see #something)\n* `utils` - these are helper functions that are often reused\n\n`test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section).\n\n## GitHub Configuration\n\nThe one-off configuration that this repository needs on GitHub, such as the Mergify merge queue and the branch ruleset, is described in [docs/github-configuration.md](docs/github-configuration.md).\n\n## Known Issues\n\n`cdk-typescript-app` defaults to Jest 30, which hoists `@sinonjs/fake-timers` 15 whose bundled types conflict with the `@types/sinon` used by `aws-sdk-client-mock`. Projects using `aws-sdk-client-mock` can set `compilerOptions.skipLibCheck` on the test tsconfig:\n\n```ts\nproject.tryFindObjectFile('test/tsconfig.json')?.addOverride('compilerOptions.skipLibCheck', true);\n```"
|
|
103
103
|
},
|
|
104
104
|
"repository": {
|
|
105
105
|
"type": "git",
|
|
@@ -11843,6 +11843,6 @@
|
|
|
11843
11843
|
"symbolId": "src/components/readme/elements/section:SectionOptions"
|
|
11844
11844
|
}
|
|
11845
11845
|
},
|
|
11846
|
-
"version": "5.
|
|
11847
|
-
"fingerprint": "
|
|
11846
|
+
"version": "5.4.0",
|
|
11847
|
+
"fingerprint": "9AMHG3uW5NewWMlNEF8jvji8ApB6HqX5AtrsuCrzU68="
|
|
11848
11848
|
}
|
package/README.md
CHANGED
|
@@ -6,6 +6,10 @@ A collection of custom projen modules, that can be used to bootstrap and maintai
|
|
|
6
6
|
|
|
7
7
|
## Getting Started
|
|
8
8
|
|
|
9
|
+
Prerequisites:
|
|
10
|
+
* Node.js 22
|
|
11
|
+
* Yarn 1 (classic)
|
|
12
|
+
|
|
9
13
|
```sh
|
|
10
14
|
yarn install
|
|
11
15
|
npx projen build
|
|
@@ -57,42 +61,7 @@ All source is located in `src` and is grouped by:
|
|
|
57
61
|
|
|
58
62
|
## GitHub Configuration
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
The repository must be configured as below so that nothing can be merged without going through the queue.
|
|
63
|
-
|
|
64
|
-
### Mergify
|
|
65
|
-
|
|
66
|
-
Install the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.
|
|
67
|
-
|
|
68
|
-
### Pull request settings
|
|
69
|
-
|
|
70
|
-
In **Settings → General → Pull Requests**:
|
|
71
|
-
* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.
|
|
72
|
-
* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
|
|
73
|
-
* Tick **Automatically delete head branches**.
|
|
74
|
-
|
|
75
|
-
### Actions settings
|
|
76
|
-
|
|
77
|
-
In **Settings → Actions → General**, set **Approval for running fork pull request workflows from contributors** to **Require approval for all external contributors**. A pull request from a fork runs its own copy of the workflows, so it can change how the required checks pass.
|
|
78
|
-
|
|
79
|
-
### Code scanning
|
|
80
|
-
|
|
81
|
-
CodeQL runs from `.github/workflows/codeql.yml`, which is managed by projen. In **Settings → Advanced Security**, leave CodeQL **Default setup** off, because it cannot run alongside this workflow. Under **Protection rules**, keep the **Check run failure threshold** at **High or higher** for security alerts and **Errors** for other alerts, as this decides whether the `CodeQL` check fails. Private repositories also need GitHub Code Security enabled there for code scanning results to be uploaded.
|
|
82
|
-
|
|
83
|
-
### Branch ruleset
|
|
84
|
-
|
|
85
|
-
In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:
|
|
86
|
-
* **Bypass list**: the **Mergify** app only, in **Exempt** mode. Do not add admins or other roles, as anyone on this list can merge without the queue.
|
|
87
|
-
* **Restrict updates**: only bypass actors can update the branch, so pull requests cannot be merged from the GitHub UI or CLI and commits cannot be pushed directly.
|
|
88
|
-
* **Restrict deletions** and **Block force pushes**.
|
|
89
|
-
* **Require a pull request before merging**, with 0 required approvals, because Mergify requires approvals itself for authors other than `daveshepherd` and is exempt from this rule. Tick **Dismiss stale pull request approvals when new commits are pushed**, so that commits pushed after an approval need approving again before the queue merges them.
|
|
90
|
-
* **Require status checks to pass**, listing the checks that `.mergify.yml` waits for: `build`, `package-js`, `package-python`. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request.
|
|
91
|
-
* **Require code scanning results**, with the tool **CodeQL**, security alerts set to **High or higher** and alerts set to **Errors**. Mergify is exempt from this rule, so `.mergify.yml` also waits for the `CodeQL` check instead.
|
|
92
|
-
|
|
93
|
-
Do not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.
|
|
94
|
-
|
|
95
|
-
If the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.
|
|
64
|
+
The one-off configuration that this repository needs on GitHub, such as the Mergify merge queue and the branch ruleset, is described in [docs/github-configuration.md](docs/github-configuration.md).
|
|
96
65
|
|
|
97
66
|
## Known Issues
|
|
98
67
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!-- ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". -->
|
|
2
|
+
|
|
3
|
+
# GitHub Configuration
|
|
4
|
+
|
|
5
|
+
All pull requests are merged by the [Mergify](https://mergify.com) merge queue, configured in `.mergify.yml`. Once a pull request is approved, or is opened by `daveshepherd`, and its checks pass, Mergify queues it, brings it up to date with the default branch, waits for the checks again and squash merges it. Draft pull requests and those labelled `do-not-merge` are not merged.
|
|
6
|
+
|
|
7
|
+
The repository must be configured as below so that nothing can be merged without going through the queue.
|
|
8
|
+
|
|
9
|
+
## Mergify
|
|
10
|
+
|
|
11
|
+
Install the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.
|
|
12
|
+
|
|
13
|
+
## Pull request settings
|
|
14
|
+
|
|
15
|
+
In **Settings → General → Pull Requests**:
|
|
16
|
+
* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.
|
|
17
|
+
* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
|
|
18
|
+
* Tick **Automatically delete head branches**.
|
|
19
|
+
|
|
20
|
+
## Actions settings
|
|
21
|
+
|
|
22
|
+
In **Settings → Actions → General**, set **Approval for running fork pull request workflows from contributors** to **Require approval for all external contributors**. A pull request from a fork runs its own copy of the workflows, so it can change how the required checks pass.
|
|
23
|
+
|
|
24
|
+
## Code scanning
|
|
25
|
+
|
|
26
|
+
CodeQL runs from `.github/workflows/codeql.yml`, which is managed by projen. In **Settings → Advanced Security**, leave CodeQL **Default setup** off, because it cannot run alongside this workflow. Under **Protection rules**, keep the **Check run failure threshold** at **High or higher** for security alerts and **Errors** for other alerts, as this decides whether the `CodeQL` check fails. Private repositories also need GitHub Code Security enabled there for code scanning results to be uploaded.
|
|
27
|
+
|
|
28
|
+
## Branch ruleset
|
|
29
|
+
|
|
30
|
+
In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:
|
|
31
|
+
* **Bypass list**: the **Mergify** app only, in **Exempt** mode. Do not add admins or other roles, as anyone on this list can merge without the queue.
|
|
32
|
+
* **Restrict updates**: only bypass actors can update the branch, so pull requests cannot be merged from the GitHub UI or CLI and commits cannot be pushed directly.
|
|
33
|
+
* **Restrict deletions** and **Block force pushes**.
|
|
34
|
+
* **Require a pull request before merging**, with 0 required approvals, because Mergify requires approvals itself for authors other than `daveshepherd` and is exempt from this rule. Tick **Dismiss stale pull request approvals when new commits are pushed**, so that commits pushed after an approval need approving again before the queue merges them.
|
|
35
|
+
* **Require status checks to pass**, listing the checks that `.mergify.yml` waits for: `build`, `package-js`, `package-python`. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request.
|
|
36
|
+
* **Require code scanning results**, with the tool **CodeQL**, security alerts set to **High or higher** and alerts set to **Errors**. Mergify is exempt from this rule, so `.mergify.yml` also waits for the `CodeQL` check instead.
|
|
37
|
+
|
|
38
|
+
Do not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.
|
|
39
|
+
|
|
40
|
+
If the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.
|
|
@@ -43,7 +43,10 @@ A repository with a single maintainer, who cannot approve their own pull request
|
|
|
43
43
|
}
|
|
44
44
|
return '';
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
/**
|
|
47
|
+
* The guide to configuring the repository on GitHub
|
|
48
|
+
*/
|
|
49
|
+
function githubConfigurationGuide(config) {
|
|
47
50
|
const statusChecks = config.requiredChecks.length
|
|
48
51
|
? 'the checks that `.mergify.yml` waits for: `' +
|
|
49
52
|
config.requiredChecks.join('`, `') +
|
|
@@ -67,7 +70,7 @@ function githubConfigurationSection(config) {
|
|
|
67
70
|
const codeScanningSettings = config.codeScanning
|
|
68
71
|
? `
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
## Code scanning
|
|
71
74
|
|
|
72
75
|
CodeQL runs from \`.github/workflows/codeql.yml\`, which is managed by projen. In **Settings → Advanced Security**, leave CodeQL **Default setup** off, because it cannot run alongside this workflow. Under **Protection rules**, keep the **Check run failure threshold** at **High or higher** for security alerts and **Errors** for other alerts, as this decides whether the \`${codeql_1.CodeQl.CHECK_NAME}\` check fails. Private repositories also need GitHub Code Security enabled there for code scanning results to be uploaded.${ignoredPaths}`
|
|
73
76
|
: '';
|
|
@@ -79,22 +82,22 @@ CodeQL runs from \`.github/workflows/codeql.yml\`, which is managed by projen. I
|
|
|
79
82
|
|
|
80
83
|
The repository must be configured as below so that nothing can be merged without going through the queue.
|
|
81
84
|
|
|
82
|
-
|
|
85
|
+
## Mergify
|
|
83
86
|
|
|
84
87
|
Install the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.
|
|
85
88
|
|
|
86
|
-
|
|
89
|
+
## Pull request settings
|
|
87
90
|
|
|
88
91
|
In **Settings → General → Pull Requests**:
|
|
89
92
|
* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.
|
|
90
93
|
* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
|
|
91
94
|
* Tick **Automatically delete head branches**.
|
|
92
95
|
|
|
93
|
-
|
|
96
|
+
## Actions settings
|
|
94
97
|
|
|
95
98
|
In **Settings → Actions → General**, set **Approval for running fork pull request workflows from contributors** to **Require approval for all external contributors**. A pull request from a fork runs its own copy of the workflows, so it can change how the required checks pass.${codeScanningSettings}
|
|
96
99
|
|
|
97
|
-
|
|
100
|
+
## Branch ruleset
|
|
98
101
|
|
|
99
102
|
In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:
|
|
100
103
|
* **Bypass list**: the **Mergify** app only, in **Exempt** mode. Do not add admins or other roles, as anyone on this list can merge without the queue.
|
|
@@ -155,24 +158,40 @@ function configureMergify(project, options = {}) {
|
|
|
155
158
|
},
|
|
156
159
|
});
|
|
157
160
|
project.tryFindObjectFile('.mergify.yml')?.addOverride('merge_protections_settings.reporting_method', options.reportingMethod ?? 'deployments');
|
|
158
|
-
const
|
|
161
|
+
const configuration = () => ({
|
|
159
162
|
approvedReviews,
|
|
160
163
|
codeScanning: codeScanning(),
|
|
161
164
|
codeScanningPathsIgnore: codeQl()?.pathsIgnore ?? [],
|
|
162
165
|
requiredChecks: buildJobIds(),
|
|
163
166
|
trustedAuthors,
|
|
164
|
-
})
|
|
165
|
-
|
|
167
|
+
});
|
|
168
|
+
// the guide is rendered when the file is synthesized, after every component has been added
|
|
169
|
+
new GithubConfigurationFile(project, () => githubConfigurationGuide(configuration()));
|
|
170
|
+
readme_1.Readme.of(project)?.addSection(GITHUB_CONFIGURATION_TITLE, `The one-off configuration that this repository needs on GitHub, such as the Mergify merge queue and the branch ruleset, is described in [${GITHUB_CONFIGURATION_FILE}](${GITHUB_CONFIGURATION_FILE}).`, { order: readme_1.ReadmeOrder.REFERENCE });
|
|
166
171
|
new BeforeSynthesis(project, () => {
|
|
167
172
|
upgradeConditions.splice(0, upgradeConditions.length, upgradeAuthor, ...buildJobIds().map((id) => `status-success=${id}`));
|
|
168
|
-
// leave the section alone if the project has removed or replaced it
|
|
169
|
-
const readme = readme_1.Readme.of(project);
|
|
170
|
-
if (readmeSection && readme?.tryFindSection(GITHUB_CONFIGURATION_TITLE) === readmeSection) {
|
|
171
|
-
readmeSection = addReadmeSection();
|
|
172
|
-
}
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
const GITHUB_CONFIGURATION_TITLE = 'GitHub Configuration';
|
|
176
|
+
/**
|
|
177
|
+
* Where the guide to configuring the repository on GitHub is written, in the
|
|
178
|
+
* docs directory every project uses
|
|
179
|
+
*/
|
|
180
|
+
const GITHUB_CONFIGURATION_FILE = 'docs/github-configuration.md';
|
|
181
|
+
/**
|
|
182
|
+
* The guide to configuring the repository on GitHub, as its own markdown file
|
|
183
|
+
*/
|
|
184
|
+
class GithubConfigurationFile extends projen_1.FileBase {
|
|
185
|
+
body;
|
|
186
|
+
constructor(project, body) {
|
|
187
|
+
super(project, GITHUB_CONFIGURATION_FILE, {});
|
|
188
|
+
this.body = body;
|
|
189
|
+
}
|
|
190
|
+
synthesizeContent(_) {
|
|
191
|
+
const marker = this.marker ? `<!-- ${this.marker} -->\n\n` : '';
|
|
192
|
+
return `${marker}# ${GITHUB_CONFIGURATION_TITLE}\n\n${this.body()}\n`;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
176
195
|
/**
|
|
177
196
|
* Runs a callback once every component has been added, before any file is
|
|
178
197
|
* synthesized
|
|
@@ -187,4 +206,4 @@ class BeforeSynthesis extends projen_1.Component {
|
|
|
187
206
|
this.callback();
|
|
188
207
|
}
|
|
189
208
|
}
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMENBLDRDQVFDO0FBNkdELDRDQTJGQztBQTFQRCxtQ0FBb0Q7QUFDcEQscUNBQWtDO0FBQ2xDLHNDQUFnRDtBQW9DaEQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FHaEM7SUFDQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsTUFBcUI7SUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNyRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBVUQsU0FBUyxnQkFBZ0IsQ0FBQyxNQUEyQjtJQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLGNB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RSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQ3JELENBQUM7UUFDRixvRUFBb0U7UUFDcEUsTUFBTSxNQUFNLEdBQUcsZUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUUsY0FBYyxDQUFDLDBCQUEwQixDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDMUYsYUFBYSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sMEJBQTBCLEdBQUcsc0JBQXNCLENBQUM7QUFFMUQ7OztHQUdHO0FBQ0gsTUFBTSxlQUFnQixTQUFRLGtCQUFTO0lBR2xCO0lBRm5CLFlBQ0UsT0FBZ0IsRUFDQyxRQUFvQjtRQUVyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGRSxhQUFRLEdBQVIsUUFBUSxDQUFZO0lBR3ZDLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZ2l0aHViLCBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvZGVRbCB9IGZyb20gJy4vY29kZXFsJztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi9yZWFkbWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lcmdpZnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBhcHByb3ZpbmcgcmV2aWV3cyB0aGUgbWVyZ2UgcXVldWUgd2FpdHMgZm9yLCB3aGljaCBzaG91bGQgbWF0Y2hcbiAgICogYGF1dG9NZXJnZU9wdGlvbnMuYXBwcm92ZWRSZXZpZXdzYFxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBhcHByb3ZlZFJldmlld3M/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFzc2lnblVzZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcmVwb3J0aW5nTWV0aG9kPzogc3RyaW5nO1xuICAvKipcbiAgICogQXV0aG9ycyB3aG9zZSBwdWxsIHJlcXVlc3RzIHRoZSBtZXJnZSBxdWV1ZSBtZXJnZXMgd2l0aG91dCBhbiBhcHByb3ZhbCwgc3VjaFxuICAgKiBhcyB0aGUgc2luZ2xlIG1haW50YWluZXIgb2YgYSByZXBvc2l0b3J5LCB3aG8gY2Fubm90IGFwcHJvdmUgdGhlaXIgb3duIHB1bGxcbiAgICogcmVxdWVzdHMuIFB1bGwgcmVxdWVzdHMgZnJvbSBhbnlvbmUgZWxzZSBzdGlsbCBuZWVkIGBhcHByb3ZlZFJldmlld3NgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RlZEF1dGhvcnM/OiBBcnJheTxzdHJpbmc+O1xuICAvKipcbiAgICogQXV0aG9yIG9mIHRoZSBwcm9qZW4gdXBncmFkZSBwdWxsIHJlcXVlc3RzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgYXBwcm92ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgJ2VuZG9yLXByb2plbltib3RdJ1xuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZUF1dGhvcj86IHN0cmluZztcbn1cblxudHlwZSBNZXJnaWZ5UHJvamVjdCA9IFByb2plY3QgJiB7XG4gIHJlYWRvbmx5IGF1dG9NZXJnZT86IGdpdGh1Yi5BdXRvTWVyZ2U7XG4gIHJlYWRvbmx5IGdpdGh1Yj86IGdpdGh1Yi5HaXRIdWI7XG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3c/OiB7XG4gICAgcmVhZG9ubHkgYnVpbGRKb2JJZHM/OiBBcnJheTxzdHJpbmc+O1xuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBwcm9qZW4ncyBhdXRvIG1lcmdlLCB3aGljaCByZXF1aXJlcyBpdHMgYXBwcm92YWxzIGZyb20gZXZlcnlcbiAqIGF1dGhvciwgc28gd2l0aCB0cnVzdGVkIGF1dGhvcnMgYGNvbmZpZ3VyZU1lcmdpZnlgIHJlcXVpcmVzIHRoZW0gaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0b01lcmdlT3B0aW9ucyhvcHRpb25zOiB7XG4gIHJlYWRvbmx5IGF1dG9NZXJnZU9wdGlvbnM/OiBnaXRodWIuQXV0b01lcmdlT3B0aW9ucztcbiAgcmVhZG9ubHkgdHJ1c3RlZEF1dGhvcnM/OiBBcnJheTxzdHJpbmc+O1xufSk6IGdpdGh1Yi5BdXRvTWVyZ2VPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zLnRydXN0ZWRBdXRob3JzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zO1xuICB9XG4gIHJldHVybiB7IC4uLm9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucywgYXBwcm92ZWRSZXZpZXdzOiAwIH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpc3QodmFsdWVzOiBBcnJheTxzdHJpbmc+KTogc3RyaW5nIHtcbiAgY29uc3QgcXVvdGVkID0gdmFsdWVzLm1hcCgodmFsdWUpID0+ICdgJyArIHZhbHVlICsgJ2AnKTtcbiAgcmV0dXJuIHF1b3RlZC5sZW5ndGggPiAxXG4gICAgPyBgJHtxdW90ZWQuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyl9IG9yICR7cXVvdGVkW3F1b3RlZC5sZW5ndGggLSAxXX1gXG4gICAgOiBxdW90ZWQuam9pbignJyk7XG59XG5cbmludGVyZmFjZSBHaXRodWJDb25maWd1cmF0aW9uIHtcbiAgcmVhZG9ubHkgYXBwcm92ZWRSZXZpZXdzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvZGVTY2FubmluZzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY29kZVNjYW5uaW5nUGF0aHNJZ25vcmU6IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IHJlcXVpcmVkQ2hlY2tzOiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSB0cnVzdGVkQXV0aG9yczogQXJyYXk8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gcXVldWVEZXNjcmlwdGlvbihjb25maWc6IEdpdGh1YkNvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICBpZiAoIWNvbmZpZy5hcHByb3ZlZFJldmlld3MpIHtcbiAgICByZXR1cm4gXCJPbmNlIGEgcHVsbCByZXF1ZXN0J3MgY2hlY2tzIHBhc3NcIjtcbiAgfVxuICBpZiAoY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBgT25jZSBhIHB1bGwgcmVxdWVzdCBpcyBhcHByb3ZlZCwgb3IgaXMgb3BlbmVkIGJ5ICR7Zm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpfSwgYW5kIGl0cyBjaGVja3MgcGFzc2A7XG4gIH1cbiAgcmV0dXJuICdPbmNlIGEgcHVsbCByZXF1ZXN0IGlzIGFwcHJvdmVkIGFuZCBpdHMgY2hlY2tzIHBhc3MnO1xufVxuXG5mdW5jdGlvbiBhcHByb3ZhbEd1aWRhbmNlKGNvbmZpZzogR2l0aHViQ29uZmlndXJhdGlvbik6IHN0cmluZyB7XG4gIGlmICghY29uZmlnLmFwcHJvdmVkUmV2aWV3cykge1xuICAgIHJldHVybiBgXG5cbioqV2FybmluZzoqKiBubyBhcHByb3ZhbHMgYXJlIHJlcXVpcmVkLCBzbyB0aGUgcXVldWUgbWVyZ2VzIGFueSBwdWxsIHJlcXVlc3Qgd2hvc2UgY2hlY2tzIHBhc3MsIGluY2x1ZGluZyBvbmUgZnJvbSBhIGZvcmsgdGhhdCBjaGFuZ2VzIHRoZSB3b3JrZmxvd3MgcHJvZHVjaW5nIHRob3NlIGNoZWNrcy4gU2V0IFxcYGF1dG9NZXJnZU9wdGlvbnMuYXBwcm92ZWRSZXZpZXdzXFxgIHRvIGF0IGxlYXN0IDEsIGFuZCB1c2UgXFxgdHJ1c3RlZEF1dGhvcnNcXGAgZm9yIG1haW50YWluZXJzIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbCByZXF1ZXN0cy5gO1xuICB9XG4gIGlmICghY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBgXG5cbkEgcmVwb3NpdG9yeSB3aXRoIGEgc2luZ2xlIG1haW50YWluZXIsIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbCByZXF1ZXN0cywgc2hvdWxkIGxpc3QgdGhlbSBpbiBcXGB0cnVzdGVkQXV0aG9yc1xcYCBpbiBcXGAucHJvamVucmMudHNcXGAuIFRoZWlyIHB1bGwgcmVxdWVzdHMgYXJlIHRoZW4gbWVyZ2VkIHdpdGhvdXQgYW4gYXBwcm92YWwsIHdoaWxlIGV2ZXJ5b25lIGVsc2UncyBzdGlsbCBuZWVkIG9uZS5gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2l0aHViQ29uZmlndXJhdGlvblNlY3Rpb24oY29uZmlnOiBHaXRodWJDb25maWd1cmF0aW9uKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzQ2hlY2tzID0gY29uZmlnLnJlcXVpcmVkQ2hlY2tzLmxlbmd0aFxuICAgID8gJ3RoZSBjaGVja3MgdGhhdCBgLm1lcmdpZnkueW1sYCB3YWl0cyBmb3I6IGAnICtcbiAgICAgIGNvbmZpZy5yZXF1aXJlZENoZWNrcy5qb2luKCdgLCBgJykgK1xuICAgICAgJ2AnXG4gICAgOiAnYW55IENJIGNoZWNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCAobm9uZSBhcmUgY29uZmlndXJlZCB5ZXQpLCBrZWVwaW5nIHRoZW0gaW4gc3luYyB3aXRoIGAubWVyZ2lmeS55bWxgJztcbiAgY29uc3QgYXBwcm92YWxzID0gY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aFxuICAgID8gJzAgcmVxdWlyZWQgYXBwcm92YWxzLCBiZWNhdXNlIE1lcmdpZnkgcmVxdWlyZXMgYXBwcm92YWxzIGl0c2VsZiBmb3IgYXV0aG9ycyBvdGhlciB0aGFuICcgK1xuICAgICAgZm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpICtcbiAgICAgICcgYW5kIGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSdcbiAgICA6IGNvbmZpZy5hcHByb3ZlZFJldmlld3MgPT09IDFcbiAgICAgID8gJzEgcmVxdWlyZWQgYXBwcm92YWwnXG4gICAgICA6IGAke2NvbmZpZy5hcHByb3ZlZFJldmlld3N9IHJlcXVpcmVkIGFwcHJvdmFsc2A7XG4gIGNvbnN0IHBhdGhzSWdub3JlID0gY29uZmlnLmNvZGVTY2FubmluZ1BhdGhzSWdub3JlO1xuICBjb25zdCBvdGhlclBhdGhzSWdub3JlID0gcGF0aHNJZ25vcmUuZmlsdGVyKFxuICAgIChwYXR0ZXJuKSA9PiBwYXR0ZXJuICE9PSBDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFMsXG4gICk7XG4gIGNvbnN0IGlnbm9yZWRQYXRocyA9XG4gICAgKHBhdGhzSWdub3JlLmluY2x1ZGVzKENvZGVRbC5JTlRFR19TTkFQU0hPVF9QQVRIUylcbiAgICAgID8gYCBDb2RlUUwgZG9lcyBub3Qgc2NhbiB0aGUgaW50ZWctcnVubmVyIHNuYXBzaG90cyAoXFxgJHtDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFN9XFxgKTogdGhlaXIgYXNzZXRzIGFyZSBnZW5lcmF0ZWQgYnVuZGxlcyBvZiBkZXBlbmRlbmNpZXMgd2hvc2UgZmlsZSBuYW1lcyBjaGFuZ2Ugb24gZXZlcnkgXFxgaW50ZWc6dXBkYXRlXFxgLCBzbyBhbGVydHMgb24gdGhlbSBjYW4gbmVpdGhlciBiZSBmaXhlZCBpbiB0aGUgcmVwb3NpdG9yeSBub3IgZGlzbWlzc2VkIGZvciBnb29kLiBUaGUgc291cmNlIHRoZXkgYXJlIGJ1aWx0IGZyb20gaXMgc3RpbGwgc2Nhbm5lZC5gXG4gICAgICA6ICcnKSArXG4gICAgKG90aGVyUGF0aHNJZ25vcmUubGVuZ3RoXG4gICAgICA/IGAgQ29kZVFMIGRvZXMgbm90IHNjYW4gcGF0aHMgbWF0Y2hpbmcgJHtmb3JtYXRMaXN0KG90aGVyUGF0aHNJZ25vcmUpfS5gXG4gICAgICA6ICcnKTtcbiAgY29uc3QgY29kZVNjYW5uaW5nU2V0dGluZ3MgPSBjb25maWcuY29kZVNjYW5uaW5nXG4gICAgPyBgXG5cbiMjIyBDb2RlIHNjYW5uaW5nXG5cbkNvZGVRTCBydW5zIGZyb20gXFxgLmdpdGh1Yi93b3JrZmxvd3MvY29kZXFsLnltbFxcYCwgd2hpY2ggaXMgbWFuYWdlZCBieSBwcm9qZW4uIEluICoqU2V0dGluZ3Mg4oaSIEFkdmFuY2VkIFNlY3VyaXR5KiosIGxlYXZlIENvZGVRTCAqKkRlZmF1bHQgc2V0dXAqKiBvZmYsIGJlY2F1c2UgaXQgY2Fubm90IHJ1biBhbG9uZ3NpZGUgdGhpcyB3b3JrZmxvdy4gVW5kZXIgKipQcm90ZWN0aW9uIHJ1bGVzKiosIGtlZXAgdGhlICoqQ2hlY2sgcnVuIGZhaWx1cmUgdGhyZXNob2xkKiogYXQgKipIaWdoIG9yIGhpZ2hlcioqIGZvciBzZWN1cml0eSBhbGVydHMgYW5kICoqRXJyb3JzKiogZm9yIG90aGVyIGFsZXJ0cywgYXMgdGhpcyBkZWNpZGVzIHdoZXRoZXIgdGhlIFxcYCR7Q29kZVFsLkNIRUNLX05BTUV9XFxgIGNoZWNrIGZhaWxzLiBQcml2YXRlIHJlcG9zaXRvcmllcyBhbHNvIG5lZWQgR2l0SHViIENvZGUgU2VjdXJpdHkgZW5hYmxlZCB0aGVyZSBmb3IgY29kZSBzY2FubmluZyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLiR7aWdub3JlZFBhdGhzfWBcbiAgICA6ICcnO1xuICBjb25zdCBjb2RlU2Nhbm5pbmdSdWxlID0gY29uZmlnLmNvZGVTY2FubmluZ1xuICAgID8gYFxuKiAqKlJlcXVpcmUgY29kZSBzY2FubmluZyByZXN1bHRzKiosIHdpdGggdGhlIHRvb2wgKipDb2RlUUwqKiwgc2VjdXJpdHkgYWxlcnRzIHNldCB0byAqKkhpZ2ggb3IgaGlnaGVyKiogYW5kIGFsZXJ0cyBzZXQgdG8gKipFcnJvcnMqKi4gTWVyZ2lmeSBpcyBleGVtcHQgZnJvbSB0aGlzIHJ1bGUsIHNvIFxcYC5tZXJnaWZ5LnltbFxcYCBhbHNvIHdhaXRzIGZvciB0aGUgXFxgJHtDb2RlUWwuQ0hFQ0tfTkFNRX1cXGAgY2hlY2sgaW5zdGVhZC5gXG4gICAgOiAnJztcbiAgcmV0dXJuIGBBbGwgcHVsbCByZXF1ZXN0cyBhcmUgbWVyZ2VkIGJ5IHRoZSBbTWVyZ2lmeV0oaHR0cHM6Ly9tZXJnaWZ5LmNvbSkgbWVyZ2UgcXVldWUsIGNvbmZpZ3VyZWQgaW4gXFxgLm1lcmdpZnkueW1sXFxgLiAke3F1ZXVlRGVzY3JpcHRpb24oY29uZmlnKX0sIE1lcmdpZnkgcXVldWVzIGl0LCBicmluZ3MgaXQgdXAgdG8gZGF0ZSB3aXRoIHRoZSBkZWZhdWx0IGJyYW5jaCwgd2FpdHMgZm9yIHRoZSBjaGVja3MgYWdhaW4gYW5kIHNxdWFzaCBtZXJnZXMgaXQuIERyYWZ0IHB1bGwgcmVxdWVzdHMgYW5kIHRob3NlIGxhYmVsbGVkIFxcYGRvLW5vdC1tZXJnZVxcYCBhcmUgbm90IG1lcmdlZC5cblxuVGhlIHJlcG9zaXRvcnkgbXVzdCBiZSBjb25maWd1cmVkIGFzIGJlbG93IHNvIHRoYXQgbm90aGluZyBjYW4gYmUgbWVyZ2VkIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgcXVldWUuXG5cbiMjIyBNZXJnaWZ5XG5cbkluc3RhbGwgdGhlIFtNZXJnaWZ5IEdpdEh1YiBBcHBdKGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBzL21lcmdpZnkpIGFuZCBnaXZlIGl0IGFjY2VzcyB0byB0aGlzIHJlcG9zaXRvcnkuXG5cbiMjIyBQdWxsIHJlcXVlc3Qgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgUHVsbCBSZXF1ZXN0cyoqOlxuKiBBbGxvdyBzcXVhc2ggbWVyZ2luZyBvbmx5ICh1bnRpY2sgbWVyZ2UgY29tbWl0cyBhbmQgcmViYXNlIG1lcmdpbmcpLCBtYXRjaGluZyB0aGUgcXVldWUncyBtZXJnZSBtZXRob2QuXG4qIFVudGljayAqKkFsbG93IGF1dG8tbWVyZ2UqKiwgYmVjYXVzZSBHaXRIdWIncyBvd24gYXV0by1tZXJnZSBtZXJnZXMgb3V0c2lkZSB0aGUgcXVldWUuXG4qIFRpY2sgKipBdXRvbWF0aWNhbGx5IGRlbGV0ZSBoZWFkIGJyYW5jaGVzKiouXG5cbiMjIyBBY3Rpb25zIHNldHRpbmdzXG5cbkluICoqU2V0dGluZ3Mg4oaSIEFjdGlvbnMg4oaSIEdlbmVyYWwqKiwgc2V0ICoqQXBwcm92YWwgZm9yIHJ1bm5pbmcgZm9yayBwdWxsIHJlcXVlc3Qgd29ya2Zsb3dzIGZyb20gY29udHJpYnV0b3JzKiogdG8gKipSZXF1aXJlIGFwcHJvdmFsIGZvciBhbGwgZXh0ZXJuYWwgY29udHJpYnV0b3JzKiouIEEgcHVsbCByZXF1ZXN0IGZyb20gYSBmb3JrIHJ1bnMgaXRzIG93biBjb3B5IG9mIHRoZSB3b3JrZmxvd3MsIHNvIGl0IGNhbiBjaGFuZ2UgaG93IHRoZSByZXF1aXJlZCBjaGVja3MgcGFzcy4ke2NvZGVTY2FubmluZ1NldHRpbmdzfVxuXG4jIyMgQnJhbmNoIHJ1bGVzZXRcblxuSW4gKipTZXR0aW5ncyDihpIgUnVsZXMg4oaSIFJ1bGVzZXRzKiosIGNyZWF0ZSBhIGJyYW5jaCBydWxlc2V0IHdpdGggZW5mb3JjZW1lbnQgKipBY3RpdmUqKiB0aGF0IHRhcmdldHMgdGhlIGRlZmF1bHQgYnJhbmNoLCBhbmQgc2V0OlxuKiAqKkJ5cGFzcyBsaXN0Kio6IHRoZSAqKk1lcmdpZnkqKiBhcHAgb25seSwgaW4gKipFeGVtcHQqKiBtb2RlLiBEbyBub3QgYWRkIGFkbWlucyBvciBvdGhlciByb2xlcywgYXMgYW55b25lIG9uIHRoaXMgbGlzdCBjYW4gbWVyZ2Ugd2l0aG91dCB0aGUgcXVldWUuXG4qICoqUmVzdHJpY3QgdXBkYXRlcyoqOiBvbmx5IGJ5cGFzcyBhY3RvcnMgY2FuIHVwZGF0ZSB0aGUgYnJhbmNoLCBzbyBwdWxsIHJlcXVlc3RzIGNhbm5vdCBiZSBtZXJnZWQgZnJvbSB0aGUgR2l0SHViIFVJIG9yIENMSSBhbmQgY29tbWl0cyBjYW5ub3QgYmUgcHVzaGVkIGRpcmVjdGx5LlxuKiAqKlJlc3RyaWN0IGRlbGV0aW9ucyoqIGFuZCAqKkJsb2NrIGZvcmNlIHB1c2hlcyoqLlxuKiAqKlJlcXVpcmUgYSBwdWxsIHJlcXVlc3QgYmVmb3JlIG1lcmdpbmcqKiwgd2l0aCAke2FwcHJvdmFsc30uIFRpY2sgKipEaXNtaXNzIHN0YWxlIHB1bGwgcmVxdWVzdCBhcHByb3ZhbHMgd2hlbiBuZXcgY29tbWl0cyBhcmUgcHVzaGVkKiosIHNvIHRoYXQgY29tbWl0cyBwdXNoZWQgYWZ0ZXIgYW4gYXBwcm92YWwgbmVlZCBhcHByb3ZpbmcgYWdhaW4gYmVmb3JlIHRoZSBxdWV1ZSBtZXJnZXMgdGhlbS5cbiogKipSZXF1aXJlIHN0YXR1cyBjaGVja3MgdG8gcGFzcyoqLCBsaXN0aW5nICR7c3RhdHVzQ2hlY2tzfS4gTGVhdmUgKipSZXF1aXJlIGJyYW5jaGVzIHRvIGJlIHVwIHRvIGRhdGUgYmVmb3JlIG1lcmdpbmcqKiB1bnRpY2tlZCwgYXMgdGhlIHF1ZXVlIGFscmVhZHkgdXBkYXRlcyBhbmQgcmV0ZXN0cyBlYWNoIHB1bGwgcmVxdWVzdC4ke2NvZGVTY2FubmluZ1J1bGV9XG5cbkRvIG5vdCBlbmFibGUgR2l0SHViJ3Mgb3duICoqUmVxdWlyZSBtZXJnZSBxdWV1ZSoqIHJ1bGUsIGFzIGl0IGNvbXBldGVzIHdpdGggTWVyZ2lmeS5cblxuSWYgdGhlIHF1ZXVlIGlzIHVuYXZhaWxhYmxlIGFuZCBhIGNoYW5nZSBoYXMgdG8gYmUgbWVyZ2VkLCBhZGQgeW91cnNlbGYgdG8gdGhlIGJ5cGFzcyBsaXN0IHRlbXBvcmFyaWx5IGFuZCByZW1vdmUgeW91cnNlbGYgYWZ0ZXJ3YXJkcy4ke2FwcHJvdmFsR3VpZGFuY2UoY29uZmlnKX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlTWVyZ2lmeShcbiAgcHJvamVjdDogTWVyZ2lmeVByb2plY3QsXG4gIG9wdGlvbnM6IE1lcmdpZnlPcHRpb25zID0ge30sXG4pIHtcbiAgY29uc3QgbWVyZ2lmeSA9IHByb2plY3QuZ2l0aHViPy5tZXJnaWZ5O1xuICBpZiAoIW1lcmdpZnkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBidWlsZCBqb2JzIGFuZCBDb2RlUUwgY2FuIGJlIGFkZGVkIGFmdGVyIHRoaXMsIHNvIHRoZXkgYXJlIHJlYWQgYXQgc3ludGhlc2lzXG4gIGNvbnN0IGJ1aWxkSm9iSWRzID0gKCkgPT4gcHJvamVjdC5idWlsZFdvcmtmbG93Py5idWlsZEpvYklkcyA/PyBbXTtcbiAgY29uc3QgY29kZVFsID0gKCkgPT5cbiAgICBwcm9qZWN0LmNvbXBvbmVudHMuZmluZCgoYyk6IGMgaXMgQ29kZVFsID0+IGMgaW5zdGFuY2VvZiBDb2RlUWwpO1xuICBjb25zdCBjb2RlU2Nhbm5pbmcgPSAoKSA9PiBjb2RlUWwoKSAhPT0gdW5kZWZpbmVkO1xuXG4gIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKCctZHJhZnQnKTtcblxuICBjb25zdCBhcHByb3ZlZFJldmlld3MgPSBvcHRpb25zLmFwcHJvdmVkUmV2aWV3cyA/PyAxO1xuICBjb25zdCB0cnVzdGVkQXV0aG9ycyA9IG9wdGlvbnMudHJ1c3RlZEF1dGhvcnMgPz8gW107XG4gIGlmICh0cnVzdGVkQXV0aG9ycy5sZW5ndGggJiYgYXBwcm92ZWRSZXZpZXdzKSB7XG4gICAgY29uc3QgYXBwcm92ZWRPclRydXN0ZWQ6IGdpdGh1Yi5NZXJnaWZ5Q29uZGl0aW9uID0ge1xuICAgICAgb3I6IFtcbiAgICAgICAgYCNhcHByb3ZlZC1yZXZpZXdzLWJ5Pj0ke2FwcHJvdmVkUmV2aWV3c31gLFxuICAgICAgICAuLi50cnVzdGVkQXV0aG9ycy5tYXAoKGF1dGhvcikgPT4gYGF1dGhvcj0ke2F1dGhvcn1gKSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICAvLyBwcm9qZW4gdHlwZXMgYXV0byBtZXJnZSBjb25kaXRpb25zIGFzIHN0cmluZ3MsIGJ1dCBtZXJnaWZ5IGFjY2VwdHMgb3BlcmF0b3JzIHRvb1xuICAgIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKGFwcHJvdmVkT3JUcnVzdGVkIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8vIE1lcmdpZnkgaXMgZXhlbXB0IGZyb20gdGhlIHJ1bGVzZXQncyBjb2RlIHNjYW5uaW5nIHJ1bGUsIHNvIHRoZSBxdWV1ZSBlbmZvcmNlcyBpdCBpbnN0ZWFkXG4gIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zTGF0ZXIoe1xuICAgIHJlbmRlcjogKCkgPT5cbiAgICAgIGNvZGVTY2FubmluZygpID8gW2BzdGF0dXMtc3VjY2Vzcz0ke0NvZGVRbC5DSEVDS19OQU1FfWBdIDogW10sXG4gIH0pO1xuXG4gIGNvbnN0IHVwZ3JhZGVBdXRob3IgPSBgYXV0aG9yPSR7b3B0aW9ucy51cGdyYWRlQXV0aG9yID8/ICdlbmRvci1wcm9qZW5bYm90XSd9YDtcbiAgY29uc3QgdXBncmFkZUNvbmRpdGlvbnMgPSBbdXBncmFkZUF1dGhvcl07XG4gIG1lcmdpZnkuYWRkUnVsZSh7XG4gICAgbmFtZTogJ0F1dG9tYXRpYyBhcHByb3ZhbCBmb3IgcHJvamVuIHVwZ3JhZGUgcHVsbCByZXF1ZXN0cycsXG4gICAgY29uZGl0aW9uczogdXBncmFkZUNvbmRpdGlvbnMsXG4gICAgYWN0aW9uczoge1xuICAgICAgcmV2aWV3OiB7XG4gICAgICAgIHR5cGU6ICdBUFBST1ZFJyxcbiAgICAgICAgbWVzc2FnZTogJ0F1dG9tYXRpY2FsbHkgYXBwcm92aW5nIHByb2plbiB1cGdyYWRlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgbWVyZ2lmeS5hZGRSdWxlKHtcbiAgICBuYW1lOiAnQXNzaWduIFBSIHdoZW4gY2hlY2sgZmFpbHMnLFxuICAgIGNvbmRpdGlvbnM6IFsnI2NoZWNrLWZhaWx1cmUgPiAwJ10sXG4gICAgYWN0aW9uczoge1xuICAgICAgYXNzaWduOiB7XG4gICAgICAgIGFkZF91c2Vyczogb3B0aW9ucy5hc3NpZ25Vc2VycyA/PyBbJ2RhdmVzaGVwaGVyZCddLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBwcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKCcubWVyZ2lmeS55bWwnKT8uYWRkT3ZlcnJpZGUoXG4gICAgJ21lcmdlX3Byb3RlY3Rpb25zX3NldHRpbmdzLnJlcG9ydGluZ19tZXRob2QnLFxuICAgIG9wdGlvbnMucmVwb3J0aW5nTWV0aG9kID8/ICdkZXBsb3ltZW50cycsXG4gICk7XG5cbiAgY29uc3QgYWRkUmVhZG1lU2VjdGlvbiA9ICgpID0+XG4gICAgUmVhZG1lLm9mKHByb2plY3QpPy5hZGRTZWN0aW9uKFxuICAgICAgR0lUSFVCX0NPTkZJR1VSQVRJT05fVElUTEUsXG4gICAgICBnaXRodWJDb25maWd1cmF0aW9uU2VjdGlvbih7XG4gICAgICAgIGFwcHJvdmVkUmV2aWV3cyxcbiAgICAgICAgY29kZVNjYW5uaW5nOiBjb2RlU2Nhbm5pbmcoKSxcbiAgICAgICAgY29kZVNjYW5uaW5nUGF0aHNJZ25vcmU6IGNvZGVRbCgpPy5wYXRoc0lnbm9yZSA/PyBbXSxcbiAgICAgICAgcmVxdWlyZWRDaGVja3M6IGJ1aWxkSm9iSWRzKCksXG4gICAgICAgIHRydXN0ZWRBdXRob3JzLFxuICAgICAgfSksXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5SRUZFUkVOQ0UgfSxcbiAgICApO1xuICBsZXQgcmVhZG1lU2VjdGlvbiA9IGFkZFJlYWRtZVNlY3Rpb24oKTtcblxuICBuZXcgQmVmb3JlU3ludGhlc2lzKHByb2plY3QsICgpID0+IHtcbiAgICB1cGdyYWRlQ29uZGl0aW9ucy5zcGxpY2UoXG4gICAgICAwLFxuICAgICAgdXBncmFkZUNvbmRpdGlvbnMubGVuZ3RoLFxuICAgICAgdXBncmFkZUF1dGhvcixcbiAgICAgIC4uLmJ1aWxkSm9iSWRzKCkubWFwKChpZCkgPT4gYHN0YXR1cy1zdWNjZXNzPSR7aWR9YCksXG4gICAgKTtcbiAgICAvLyBsZWF2ZSB0aGUgc2VjdGlvbiBhbG9uZSBpZiB0aGUgcHJvamVjdCBoYXMgcmVtb3ZlZCBvciByZXBsYWNlZCBpdFxuICAgIGNvbnN0IHJlYWRtZSA9IFJlYWRtZS5vZihwcm9qZWN0KTtcbiAgICBpZiAocmVhZG1lU2VjdGlvbiAmJiByZWFkbWU/LnRyeUZpbmRTZWN0aW9uKEdJVEhVQl9DT05GSUdVUkFUSU9OX1RJVExFKSA9PT0gcmVhZG1lU2VjdGlvbikge1xuICAgICAgcmVhZG1lU2VjdGlvbiA9IGFkZFJlYWRtZVNlY3Rpb24oKTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCBHSVRIVUJfQ09ORklHVVJBVElPTl9USVRMRSA9ICdHaXRIdWIgQ29uZmlndXJhdGlvbic7XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIG9uY2UgZXZlcnkgY29tcG9uZW50IGhhcyBiZWVuIGFkZGVkLCBiZWZvcmUgYW55IGZpbGUgaXNcbiAqIHN5bnRoZXNpemVkXG4gKi9cbmNsYXNzIEJlZm9yZVN5bnRoZXNpcyBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2plY3Q6IFByb2plY3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogKCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG4gIH1cblxuICBwcmVTeW50aGVzaXplKCkge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuIl19
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMENBLDRDQVFDO0FBZ0hELDRDQXlGQztBQTNQRCxtQ0FBeUU7QUFDekUscUNBQWtDO0FBQ2xDLHNDQUFnRDtBQW9DaEQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FHaEM7SUFDQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsTUFBcUI7SUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNyRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBVUQsU0FBUyxnQkFBZ0IsQ0FBQyxNQUEyQjtJQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLGNB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bGVCYXNlLCBnaXRodWIsIElSZXNvbHZlciwgUHJvamVjdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuL2NvZGVxbCc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vcmVhZG1lJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXJnaWZ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgYXBwcm92aW5nIHJldmlld3MgdGhlIG1lcmdlIHF1ZXVlIHdhaXRzIGZvciwgd2hpY2ggc2hvdWxkIG1hdGNoXG4gICAqIGBhdXRvTWVyZ2VPcHRpb25zLmFwcHJvdmVkUmV2aWV3c2BcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZWRSZXZpZXdzPzogbnVtYmVyO1xuICByZWFkb25seSBhc3NpZ25Vc2Vycz86IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IHJlcG9ydGluZ01ldGhvZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1dGhvcnMgd2hvc2UgcHVsbCByZXF1ZXN0cyB0aGUgbWVyZ2UgcXVldWUgbWVyZ2VzIHdpdGhvdXQgYW4gYXBwcm92YWwsIHN1Y2hcbiAgICogYXMgdGhlIHNpbmdsZSBtYWludGFpbmVyIG9mIGEgcmVwb3NpdG9yeSwgd2hvIGNhbm5vdCBhcHByb3ZlIHRoZWlyIG93biBwdWxsXG4gICAqIHJlcXVlc3RzLiBQdWxsIHJlcXVlc3RzIGZyb20gYW55b25lIGVsc2Ugc3RpbGwgbmVlZCBgYXBwcm92ZWRSZXZpZXdzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEF1dGhvciBvZiB0aGUgcHJvamVuIHVwZ3JhZGUgcHVsbCByZXF1ZXN0cyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGFwcHJvdmVkXG4gICAqXG4gICAqIEBkZWZhdWx0ICdlbmRvci1wcm9qZW5bYm90XSdcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGVBdXRob3I/OiBzdHJpbmc7XG59XG5cbnR5cGUgTWVyZ2lmeVByb2plY3QgPSBQcm9qZWN0ICYge1xuICByZWFkb25seSBhdXRvTWVyZ2U/OiBnaXRodWIuQXV0b01lcmdlO1xuICByZWFkb25seSBnaXRodWI/OiBnaXRodWIuR2l0SHViO1xuICByZWFkb25seSBidWlsZFdvcmtmbG93Pzoge1xuICAgIHJlYWRvbmx5IGJ1aWxkSm9iSWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJvamVuJ3MgYXV0byBtZXJnZSwgd2hpY2ggcmVxdWlyZXMgaXRzIGFwcHJvdmFscyBmcm9tIGV2ZXJ5XG4gKiBhdXRob3IsIHNvIHdpdGggdHJ1c3RlZCBhdXRob3JzIGBjb25maWd1cmVNZXJnaWZ5YCByZXF1aXJlcyB0aGVtIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9NZXJnZU9wdGlvbnMob3B0aW9uczoge1xuICByZWFkb25seSBhdXRvTWVyZ2VPcHRpb25zPzogZ2l0aHViLkF1dG9NZXJnZU9wdGlvbnM7XG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbn0pOiBnaXRodWIuQXV0b01lcmdlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucy50cnVzdGVkQXV0aG9ycz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucztcbiAgfVxuICByZXR1cm4geyAuLi5vcHRpb25zLmF1dG9NZXJnZU9wdGlvbnMsIGFwcHJvdmVkUmV2aWV3czogMCB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXN0KHZhbHVlczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHF1b3RlZCA9IHZhbHVlcy5tYXAoKHZhbHVlKSA9PiAnYCcgKyB2YWx1ZSArICdgJyk7XG4gIHJldHVybiBxdW90ZWQubGVuZ3RoID4gMVxuICAgID8gYCR7cXVvdGVkLnNsaWNlKDAsIC0xKS5qb2luKCcsICcpfSBvciAke3F1b3RlZFtxdW90ZWQubGVuZ3RoIC0gMV19YFxuICAgIDogcXVvdGVkLmpvaW4oJycpO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViQ29uZmlndXJhdGlvbiB7XG4gIHJlYWRvbmx5IGFwcHJvdmVkUmV2aWV3czogbnVtYmVyO1xuICByZWFkb25seSBjb2RlU2Nhbm5pbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvZGVTY2FubmluZ1BhdGhzSWdub3JlOiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSByZXF1aXJlZENoZWNrczogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgdHJ1c3RlZEF1dGhvcnM6IEFycmF5PHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRGVzY3JpcHRpb24oY29uZmlnOiBHaXRodWJDb25maWd1cmF0aW9uKTogc3RyaW5nIHtcbiAgaWYgKCFjb25maWcuYXBwcm92ZWRSZXZpZXdzKSB7XG4gICAgcmV0dXJuIFwiT25jZSBhIHB1bGwgcmVxdWVzdCdzIGNoZWNrcyBwYXNzXCI7XG4gIH1cbiAgaWYgKGNvbmZpZy50cnVzdGVkQXV0aG9ycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYE9uY2UgYSBwdWxsIHJlcXVlc3QgaXMgYXBwcm92ZWQsIG9yIGlzIG9wZW5lZCBieSAke2Zvcm1hdExpc3QoY29uZmlnLnRydXN0ZWRBdXRob3JzKX0sIGFuZCBpdHMgY2hlY2tzIHBhc3NgO1xuICB9XG4gIHJldHVybiAnT25jZSBhIHB1bGwgcmVxdWVzdCBpcyBhcHByb3ZlZCBhbmQgaXRzIGNoZWNrcyBwYXNzJztcbn1cblxuZnVuY3Rpb24gYXBwcm92YWxHdWlkYW5jZShjb25maWc6IEdpdGh1YkNvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICBpZiAoIWNvbmZpZy5hcHByb3ZlZFJldmlld3MpIHtcbiAgICByZXR1cm4gYFxuXG4qKldhcm5pbmc6Kiogbm8gYXBwcm92YWxzIGFyZSByZXF1aXJlZCwgc28gdGhlIHF1ZXVlIG1lcmdlcyBhbnkgcHVsbCByZXF1ZXN0IHdob3NlIGNoZWNrcyBwYXNzLCBpbmNsdWRpbmcgb25lIGZyb20gYSBmb3JrIHRoYXQgY2hhbmdlcyB0aGUgd29ya2Zsb3dzIHByb2R1Y2luZyB0aG9zZSBjaGVja3MuIFNldCBcXGBhdXRvTWVyZ2VPcHRpb25zLmFwcHJvdmVkUmV2aWV3c1xcYCB0byBhdCBsZWFzdCAxLCBhbmQgdXNlIFxcYHRydXN0ZWRBdXRob3JzXFxgIGZvciBtYWludGFpbmVycyB3aG8gY2Fubm90IGFwcHJvdmUgdGhlaXIgb3duIHB1bGwgcmVxdWVzdHMuYDtcbiAgfVxuICBpZiAoIWNvbmZpZy50cnVzdGVkQXV0aG9ycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYFxuXG5BIHJlcG9zaXRvcnkgd2l0aCBhIHNpbmdsZSBtYWludGFpbmVyLCB3aG8gY2Fubm90IGFwcHJvdmUgdGhlaXIgb3duIHB1bGwgcmVxdWVzdHMsIHNob3VsZCBsaXN0IHRoZW0gaW4gXFxgdHJ1c3RlZEF1dGhvcnNcXGAgaW4gXFxgLnByb2plbnJjLnRzXFxgLiBUaGVpciBwdWxsIHJlcXVlc3RzIGFyZSB0aGVuIG1lcmdlZCB3aXRob3V0IGFuIGFwcHJvdmFsLCB3aGlsZSBldmVyeW9uZSBlbHNlJ3Mgc3RpbGwgbmVlZCBvbmUuYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogVGhlIGd1aWRlIHRvIGNvbmZpZ3VyaW5nIHRoZSByZXBvc2l0b3J5IG9uIEdpdEh1YlxuICovXG5mdW5jdGlvbiBnaXRodWJDb25maWd1cmF0aW9uR3VpZGUoY29uZmlnOiBHaXRodWJDb25maWd1cmF0aW9uKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzQ2hlY2tzID0gY29uZmlnLnJlcXVpcmVkQ2hlY2tzLmxlbmd0aFxuICAgID8gJ3RoZSBjaGVja3MgdGhhdCBgLm1lcmdpZnkueW1sYCB3YWl0cyBmb3I6IGAnICtcbiAgICAgIGNvbmZpZy5yZXF1aXJlZENoZWNrcy5qb2luKCdgLCBgJykgK1xuICAgICAgJ2AnXG4gICAgOiAnYW55IENJIGNoZWNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCAobm9uZSBhcmUgY29uZmlndXJlZCB5ZXQpLCBrZWVwaW5nIHRoZW0gaW4gc3luYyB3aXRoIGAubWVyZ2lmeS55bWxgJztcbiAgY29uc3QgYXBwcm92YWxzID0gY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aFxuICAgID8gJzAgcmVxdWlyZWQgYXBwcm92YWxzLCBiZWNhdXNlIE1lcmdpZnkgcmVxdWlyZXMgYXBwcm92YWxzIGl0c2VsZiBmb3IgYXV0aG9ycyBvdGhlciB0aGFuICcgK1xuICAgICAgZm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpICtcbiAgICAgICcgYW5kIGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSdcbiAgICA6IGNvbmZpZy5hcHByb3ZlZFJldmlld3MgPT09IDFcbiAgICAgID8gJzEgcmVxdWlyZWQgYXBwcm92YWwnXG4gICAgICA6IGAke2NvbmZpZy5hcHByb3ZlZFJldmlld3N9IHJlcXVpcmVkIGFwcHJvdmFsc2A7XG4gIGNvbnN0IHBhdGhzSWdub3JlID0gY29uZmlnLmNvZGVTY2FubmluZ1BhdGhzSWdub3JlO1xuICBjb25zdCBvdGhlclBhdGhzSWdub3JlID0gcGF0aHNJZ25vcmUuZmlsdGVyKFxuICAgIChwYXR0ZXJuKSA9PiBwYXR0ZXJuICE9PSBDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFMsXG4gICk7XG4gIGNvbnN0IGlnbm9yZWRQYXRocyA9XG4gICAgKHBhdGhzSWdub3JlLmluY2x1ZGVzKENvZGVRbC5JTlRFR19TTkFQU0hPVF9QQVRIUylcbiAgICAgID8gYCBDb2RlUUwgZG9lcyBub3Qgc2NhbiB0aGUgaW50ZWctcnVubmVyIHNuYXBzaG90cyAoXFxgJHtDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFN9XFxgKTogdGhlaXIgYXNzZXRzIGFyZSBnZW5lcmF0ZWQgYnVuZGxlcyBvZiBkZXBlbmRlbmNpZXMgd2hvc2UgZmlsZSBuYW1lcyBjaGFuZ2Ugb24gZXZlcnkgXFxgaW50ZWc6dXBkYXRlXFxgLCBzbyBhbGVydHMgb24gdGhlbSBjYW4gbmVpdGhlciBiZSBmaXhlZCBpbiB0aGUgcmVwb3NpdG9yeSBub3IgZGlzbWlzc2VkIGZvciBnb29kLiBUaGUgc291cmNlIHRoZXkgYXJlIGJ1aWx0IGZyb20gaXMgc3RpbGwgc2Nhbm5lZC5gXG4gICAgICA6ICcnKSArXG4gICAgKG90aGVyUGF0aHNJZ25vcmUubGVuZ3RoXG4gICAgICA/IGAgQ29kZVFMIGRvZXMgbm90IHNjYW4gcGF0aHMgbWF0Y2hpbmcgJHtmb3JtYXRMaXN0KG90aGVyUGF0aHNJZ25vcmUpfS5gXG4gICAgICA6ICcnKTtcbiAgY29uc3QgY29kZVNjYW5uaW5nU2V0dGluZ3MgPSBjb25maWcuY29kZVNjYW5uaW5nXG4gICAgPyBgXG5cbiMjIENvZGUgc2Nhbm5pbmdcblxuQ29kZVFMIHJ1bnMgZnJvbSBcXGAuZ2l0aHViL3dvcmtmbG93cy9jb2RlcWwueW1sXFxgLCB3aGljaCBpcyBtYW5hZ2VkIGJ5IHByb2plbi4gSW4gKipTZXR0aW5ncyDihpIgQWR2YW5jZWQgU2VjdXJpdHkqKiwgbGVhdmUgQ29kZVFMICoqRGVmYXVsdCBzZXR1cCoqIG9mZiwgYmVjYXVzZSBpdCBjYW5ub3QgcnVuIGFsb25nc2lkZSB0aGlzIHdvcmtmbG93LiBVbmRlciAqKlByb3RlY3Rpb24gcnVsZXMqKiwga2VlcCB0aGUgKipDaGVjayBydW4gZmFpbHVyZSB0aHJlc2hvbGQqKiBhdCAqKkhpZ2ggb3IgaGlnaGVyKiogZm9yIHNlY3VyaXR5IGFsZXJ0cyBhbmQgKipFcnJvcnMqKiBmb3Igb3RoZXIgYWxlcnRzLCBhcyB0aGlzIGRlY2lkZXMgd2hldGhlciB0aGUgXFxgJHtDb2RlUWwuQ0hFQ0tfTkFNRX1cXGAgY2hlY2sgZmFpbHMuIFByaXZhdGUgcmVwb3NpdG9yaWVzIGFsc28gbmVlZCBHaXRIdWIgQ29kZSBTZWN1cml0eSBlbmFibGVkIHRoZXJlIGZvciBjb2RlIHNjYW5uaW5nIHJlc3VsdHMgdG8gYmUgdXBsb2FkZWQuJHtpZ25vcmVkUGF0aHN9YFxuICAgIDogJyc7XG4gIGNvbnN0IGNvZGVTY2FubmluZ1J1bGUgPSBjb25maWcuY29kZVNjYW5uaW5nXG4gICAgPyBgXG4qICoqUmVxdWlyZSBjb2RlIHNjYW5uaW5nIHJlc3VsdHMqKiwgd2l0aCB0aGUgdG9vbCAqKkNvZGVRTCoqLCBzZWN1cml0eSBhbGVydHMgc2V0IHRvICoqSGlnaCBvciBoaWdoZXIqKiBhbmQgYWxlcnRzIHNldCB0byAqKkVycm9ycyoqLiBNZXJnaWZ5IGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSwgc28gXFxgLm1lcmdpZnkueW1sXFxgIGFsc28gd2FpdHMgZm9yIHRoZSBcXGAke0NvZGVRbC5DSEVDS19OQU1FfVxcYCBjaGVjayBpbnN0ZWFkLmBcbiAgICA6ICcnO1xuICByZXR1cm4gYEFsbCBwdWxsIHJlcXVlc3RzIGFyZSBtZXJnZWQgYnkgdGhlIFtNZXJnaWZ5XShodHRwczovL21lcmdpZnkuY29tKSBtZXJnZSBxdWV1ZSwgY29uZmlndXJlZCBpbiBcXGAubWVyZ2lmeS55bWxcXGAuICR7cXVldWVEZXNjcmlwdGlvbihjb25maWcpfSwgTWVyZ2lmeSBxdWV1ZXMgaXQsIGJyaW5ncyBpdCB1cCB0byBkYXRlIHdpdGggdGhlIGRlZmF1bHQgYnJhbmNoLCB3YWl0cyBmb3IgdGhlIGNoZWNrcyBhZ2FpbiBhbmQgc3F1YXNoIG1lcmdlcyBpdC4gRHJhZnQgcHVsbCByZXF1ZXN0cyBhbmQgdGhvc2UgbGFiZWxsZWQgXFxgZG8tbm90LW1lcmdlXFxgIGFyZSBub3QgbWVyZ2VkLlxuXG5UaGUgcmVwb3NpdG9yeSBtdXN0IGJlIGNvbmZpZ3VyZWQgYXMgYmVsb3cgc28gdGhhdCBub3RoaW5nIGNhbiBiZSBtZXJnZWQgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cblxuIyMgTWVyZ2lmeVxuXG5JbnN0YWxsIHRoZSBbTWVyZ2lmeSBHaXRIdWIgQXBwXShodHRwczovL2dpdGh1Yi5jb20vYXBwcy9tZXJnaWZ5KSBhbmQgZ2l2ZSBpdCBhY2Nlc3MgdG8gdGhpcyByZXBvc2l0b3J5LlxuXG4jIyBQdWxsIHJlcXVlc3Qgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgUHVsbCBSZXF1ZXN0cyoqOlxuKiBBbGxvdyBzcXVhc2ggbWVyZ2luZyBvbmx5ICh1bnRpY2sgbWVyZ2UgY29tbWl0cyBhbmQgcmViYXNlIG1lcmdpbmcpLCBtYXRjaGluZyB0aGUgcXVldWUncyBtZXJnZSBtZXRob2QuXG4qIFVudGljayAqKkFsbG93IGF1dG8tbWVyZ2UqKiwgYmVjYXVzZSBHaXRIdWIncyBvd24gYXV0by1tZXJnZSBtZXJnZXMgb3V0c2lkZSB0aGUgcXVldWUuXG4qIFRpY2sgKipBdXRvbWF0aWNhbGx5IGRlbGV0ZSBoZWFkIGJyYW5jaGVzKiouXG5cbiMjIEFjdGlvbnMgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgQWN0aW9ucyDihpIgR2VuZXJhbCoqLCBzZXQgKipBcHByb3ZhbCBmb3IgcnVubmluZyBmb3JrIHB1bGwgcmVxdWVzdCB3b3JrZmxvd3MgZnJvbSBjb250cmlidXRvcnMqKiB0byAqKlJlcXVpcmUgYXBwcm92YWwgZm9yIGFsbCBleHRlcm5hbCBjb250cmlidXRvcnMqKi4gQSBwdWxsIHJlcXVlc3QgZnJvbSBhIGZvcmsgcnVucyBpdHMgb3duIGNvcHkgb2YgdGhlIHdvcmtmbG93cywgc28gaXQgY2FuIGNoYW5nZSBob3cgdGhlIHJlcXVpcmVkIGNoZWNrcyBwYXNzLiR7Y29kZVNjYW5uaW5nU2V0dGluZ3N9XG5cbiMjIEJyYW5jaCBydWxlc2V0XG5cbkluICoqU2V0dGluZ3Mg4oaSIFJ1bGVzIOKGkiBSdWxlc2V0cyoqLCBjcmVhdGUgYSBicmFuY2ggcnVsZXNldCB3aXRoIGVuZm9yY2VtZW50ICoqQWN0aXZlKiogdGhhdCB0YXJnZXRzIHRoZSBkZWZhdWx0IGJyYW5jaCwgYW5kIHNldDpcbiogKipCeXBhc3MgbGlzdCoqOiB0aGUgKipNZXJnaWZ5KiogYXBwIG9ubHksIGluICoqRXhlbXB0KiogbW9kZS4gRG8gbm90IGFkZCBhZG1pbnMgb3Igb3RoZXIgcm9sZXMsIGFzIGFueW9uZSBvbiB0aGlzIGxpc3QgY2FuIG1lcmdlIHdpdGhvdXQgdGhlIHF1ZXVlLlxuKiAqKlJlc3RyaWN0IHVwZGF0ZXMqKjogb25seSBieXBhc3MgYWN0b3JzIGNhbiB1cGRhdGUgdGhlIGJyYW5jaCwgc28gcHVsbCByZXF1ZXN0cyBjYW5ub3QgYmUgbWVyZ2VkIGZyb20gdGhlIEdpdEh1YiBVSSBvciBDTEkgYW5kIGNvbW1pdHMgY2Fubm90IGJlIHB1c2hlZCBkaXJlY3RseS5cbiogKipSZXN0cmljdCBkZWxldGlvbnMqKiBhbmQgKipCbG9jayBmb3JjZSBwdXNoZXMqKi5cbiogKipSZXF1aXJlIGEgcHVsbCByZXF1ZXN0IGJlZm9yZSBtZXJnaW5nKiosIHdpdGggJHthcHByb3ZhbHN9LiBUaWNrICoqRGlzbWlzcyBzdGFsZSBwdWxsIHJlcXVlc3QgYXBwcm92YWxzIHdoZW4gbmV3IGNvbW1pdHMgYXJlIHB1c2hlZCoqLCBzbyB0aGF0IGNvbW1pdHMgcHVzaGVkIGFmdGVyIGFuIGFwcHJvdmFsIG5lZWQgYXBwcm92aW5nIGFnYWluIGJlZm9yZSB0aGUgcXVldWUgbWVyZ2VzIHRoZW0uXG4qICoqUmVxdWlyZSBzdGF0dXMgY2hlY2tzIHRvIHBhc3MqKiwgbGlzdGluZyAke3N0YXR1c0NoZWNrc30uIExlYXZlICoqUmVxdWlyZSBicmFuY2hlcyB0byBiZSB1cCB0byBkYXRlIGJlZm9yZSBtZXJnaW5nKiogdW50aWNrZWQsIGFzIHRoZSBxdWV1ZSBhbHJlYWR5IHVwZGF0ZXMgYW5kIHJldGVzdHMgZWFjaCBwdWxsIHJlcXVlc3QuJHtjb2RlU2Nhbm5pbmdSdWxlfVxuXG5EbyBub3QgZW5hYmxlIEdpdEh1YidzIG93biAqKlJlcXVpcmUgbWVyZ2UgcXVldWUqKiBydWxlLCBhcyBpdCBjb21wZXRlcyB3aXRoIE1lcmdpZnkuXG5cbklmIHRoZSBxdWV1ZSBpcyB1bmF2YWlsYWJsZSBhbmQgYSBjaGFuZ2UgaGFzIHRvIGJlIG1lcmdlZCwgYWRkIHlvdXJzZWxmIHRvIHRoZSBieXBhc3MgbGlzdCB0ZW1wb3JhcmlseSBhbmQgcmVtb3ZlIHlvdXJzZWxmIGFmdGVyd2FyZHMuJHthcHByb3ZhbEd1aWRhbmNlKGNvbmZpZyl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU1lcmdpZnkoXG4gIHByb2plY3Q6IE1lcmdpZnlQcm9qZWN0LFxuICBvcHRpb25zOiBNZXJnaWZ5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IG1lcmdpZnkgPSBwcm9qZWN0LmdpdGh1Yj8ubWVyZ2lmeTtcbiAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gYnVpbGQgam9icyBhbmQgQ29kZVFMIGNhbiBiZSBhZGRlZCBhZnRlciB0aGlzLCBzbyB0aGV5IGFyZSByZWFkIGF0IHN5bnRoZXNpc1xuICBjb25zdCBidWlsZEpvYklkcyA9ICgpID0+IHByb2plY3QuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHMgPz8gW107XG4gIGNvbnN0IGNvZGVRbCA9ICgpID0+XG4gICAgcHJvamVjdC5jb21wb25lbnRzLmZpbmQoKGMpOiBjIGlzIENvZGVRbCA9PiBjIGluc3RhbmNlb2YgQ29kZVFsKTtcbiAgY29uc3QgY29kZVNjYW5uaW5nID0gKCkgPT4gY29kZVFsKCkgIT09IHVuZGVmaW5lZDtcblxuICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9ucygnLWRyYWZ0Jyk7XG5cbiAgY29uc3QgYXBwcm92ZWRSZXZpZXdzID0gb3B0aW9ucy5hcHByb3ZlZFJldmlld3MgPz8gMTtcbiAgY29uc3QgdHJ1c3RlZEF1dGhvcnMgPSBvcHRpb25zLnRydXN0ZWRBdXRob3JzID8/IFtdO1xuICBpZiAodHJ1c3RlZEF1dGhvcnMubGVuZ3RoICYmIGFwcHJvdmVkUmV2aWV3cykge1xuICAgIGNvbnN0IGFwcHJvdmVkT3JUcnVzdGVkOiBnaXRodWIuTWVyZ2lmeUNvbmRpdGlvbiA9IHtcbiAgICAgIG9yOiBbXG4gICAgICAgIGAjYXBwcm92ZWQtcmV2aWV3cy1ieT49JHthcHByb3ZlZFJldmlld3N9YCxcbiAgICAgICAgLi4udHJ1c3RlZEF1dGhvcnMubWFwKChhdXRob3IpID0+IGBhdXRob3I9JHthdXRob3J9YCksXG4gICAgICBdLFxuICAgIH07XG4gICAgLy8gcHJvamVuIHR5cGVzIGF1dG8gbWVyZ2UgY29uZGl0aW9ucyBhcyBzdHJpbmdzLCBidXQgbWVyZ2lmeSBhY2NlcHRzIG9wZXJhdG9ycyB0b29cbiAgICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9ucyhhcHByb3ZlZE9yVHJ1c3RlZCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gIH1cblxuICAvLyBNZXJnaWZ5IGlzIGV4ZW1wdCBmcm9tIHRoZSBydWxlc2V0J3MgY29kZSBzY2FubmluZyBydWxlLCBzbyB0aGUgcXVldWUgZW5mb3JjZXMgaXQgaW5zdGVhZFxuICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9uc0xhdGVyKHtcbiAgICByZW5kZXI6ICgpID0+XG4gICAgICBjb2RlU2Nhbm5pbmcoKSA/IFtgc3RhdHVzLXN1Y2Nlc3M9JHtDb2RlUWwuQ0hFQ0tfTkFNRX1gXSA6IFtdLFxuICB9KTtcblxuICBjb25zdCB1cGdyYWRlQXV0aG9yID0gYGF1dGhvcj0ke29wdGlvbnMudXBncmFkZUF1dGhvciA/PyAnZW5kb3ItcHJvamVuW2JvdF0nfWA7XG4gIGNvbnN0IHVwZ3JhZGVDb25kaXRpb25zID0gW3VwZ3JhZGVBdXRob3JdO1xuICBtZXJnaWZ5LmFkZFJ1bGUoe1xuICAgIG5hbWU6ICdBdXRvbWF0aWMgYXBwcm92YWwgZm9yIHByb2plbiB1cGdyYWRlIHB1bGwgcmVxdWVzdHMnLFxuICAgIGNvbmRpdGlvbnM6IHVwZ3JhZGVDb25kaXRpb25zLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHJldmlldzoge1xuICAgICAgICB0eXBlOiAnQVBQUk9WRScsXG4gICAgICAgIG1lc3NhZ2U6ICdBdXRvbWF0aWNhbGx5IGFwcHJvdmluZyBwcm9qZW4gdXBncmFkZScsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIG1lcmdpZnkuYWRkUnVsZSh7XG4gICAgbmFtZTogJ0Fzc2lnbiBQUiB3aGVuIGNoZWNrIGZhaWxzJyxcbiAgICBjb25kaXRpb25zOiBbJyNjaGVjay1mYWlsdXJlID4gMCddLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIGFzc2lnbjoge1xuICAgICAgICBhZGRfdXNlcnM6IG9wdGlvbnMuYXNzaWduVXNlcnMgPz8gWydkYXZlc2hlcGhlcmQnXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZSgnLm1lcmdpZnkueW1sJyk/LmFkZE92ZXJyaWRlKFxuICAgICdtZXJnZV9wcm90ZWN0aW9uc19zZXR0aW5ncy5yZXBvcnRpbmdfbWV0aG9kJyxcbiAgICBvcHRpb25zLnJlcG9ydGluZ01ldGhvZCA/PyAnZGVwbG95bWVudHMnLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSAoKTogR2l0aHViQ29uZmlndXJhdGlvbiA9PiAoe1xuICAgIGFwcHJvdmVkUmV2aWV3cyxcbiAgICBjb2RlU2Nhbm5pbmc6IGNvZGVTY2FubmluZygpLFxuICAgIGNvZGVTY2FubmluZ1BhdGhzSWdub3JlOiBjb2RlUWwoKT8ucGF0aHNJZ25vcmUgPz8gW10sXG4gICAgcmVxdWlyZWRDaGVja3M6IGJ1aWxkSm9iSWRzKCksXG4gICAgdHJ1c3RlZEF1dGhvcnMsXG4gIH0pO1xuICAvLyB0aGUgZ3VpZGUgaXMgcmVuZGVyZWQgd2hlbiB0aGUgZmlsZSBpcyBzeW50aGVzaXplZCwgYWZ0ZXIgZXZlcnkgY29tcG9uZW50IGhhcyBiZWVuIGFkZGVkXG4gIG5ldyBHaXRodWJDb25maWd1cmF0aW9uRmlsZShwcm9qZWN0LCAoKSA9PlxuICAgIGdpdGh1YkNvbmZpZ3VyYXRpb25HdWlkZShjb25maWd1cmF0aW9uKCkpLFxuICApO1xuICBSZWFkbWUub2YocHJvamVjdCk/LmFkZFNlY3Rpb24oXG4gICAgR0lUSFVCX0NPTkZJR1VSQVRJT05fVElUTEUsXG4gICAgYFRoZSBvbmUtb2ZmIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGlzIHJlcG9zaXRvcnkgbmVlZHMgb24gR2l0SHViLCBzdWNoIGFzIHRoZSBNZXJnaWZ5IG1lcmdlIHF1ZXVlIGFuZCB0aGUgYnJhbmNoIHJ1bGVzZXQsIGlzIGRlc2NyaWJlZCBpbiBbJHtHSVRIVUJfQ09ORklHVVJBVElPTl9GSUxFfV0oJHtHSVRIVUJfQ09ORklHVVJBVElPTl9GSUxFfSkuYCxcbiAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5SRUZFUkVOQ0UgfSxcbiAgKTtcblxuICBuZXcgQmVmb3JlU3ludGhlc2lzKHByb2plY3QsICgpID0+IHtcbiAgICB1cGdyYWRlQ29uZGl0aW9ucy5zcGxpY2UoXG4gICAgICAwLFxuICAgICAgdXBncmFkZUNvbmRpdGlvbnMubGVuZ3RoLFxuICAgICAgdXBncmFkZUF1dGhvcixcbiAgICAgIC4uLmJ1aWxkSm9iSWRzKCkubWFwKChpZCkgPT4gYHN0YXR1cy1zdWNjZXNzPSR7aWR9YCksXG4gICAgKTtcbiAgfSk7XG59XG5cbmNvbnN0IEdJVEhVQl9DT05GSUdVUkFUSU9OX1RJVExFID0gJ0dpdEh1YiBDb25maWd1cmF0aW9uJztcblxuLyoqXG4gKiBXaGVyZSB0aGUgZ3VpZGUgdG8gY29uZmlndXJpbmcgdGhlIHJlcG9zaXRvcnkgb24gR2l0SHViIGlzIHdyaXR0ZW4sIGluIHRoZVxuICogZG9jcyBkaXJlY3RvcnkgZXZlcnkgcHJvamVjdCB1c2VzXG4gKi9cbmNvbnN0IEdJVEhVQl9DT05GSUdVUkFUSU9OX0ZJTEUgPSAnZG9jcy9naXRodWItY29uZmlndXJhdGlvbi5tZCc7XG5cbi8qKlxuICogVGhlIGd1aWRlIHRvIGNvbmZpZ3VyaW5nIHRoZSByZXBvc2l0b3J5IG9uIEdpdEh1YiwgYXMgaXRzIG93biBtYXJrZG93biBmaWxlXG4gKi9cbmNsYXNzIEdpdGh1YkNvbmZpZ3VyYXRpb25GaWxlIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYm9keTogKCkgPT4gc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0LCBHSVRIVUJfQ09ORklHVVJBVElPTl9GSUxFLCB7fSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQoXzogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtYXJrZXIgPSB0aGlzLm1hcmtlciA/IGA8IS0tICR7dGhpcy5tYXJrZXJ9IC0tPlxcblxcbmAgOiAnJztcbiAgICByZXR1cm4gYCR7bWFya2VyfSMgJHtHSVRIVUJfQ09ORklHVVJBVElPTl9USVRMRX1cXG5cXG4ke3RoaXMuYm9keSgpfVxcbmA7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGEgY2FsbGJhY2sgb25jZSBldmVyeSBjb21wb25lbnQgaGFzIGJlZW4gYWRkZWQsIGJlZm9yZSBhbnkgZmlsZSBpc1xuICogc3ludGhlc2l6ZWRcbiAqL1xuY2xhc3MgQmVmb3JlU3ludGhlc2lzIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvamVjdDogUHJvamVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKSB7XG4gICAgdGhpcy5jYWxsYmFjaygpO1xuICB9XG59XG4iXX0=
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Section = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
5
|
class Section {
|
|
6
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "5.
|
|
6
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "5.4.0" };
|
|
7
7
|
options;
|
|
8
8
|
constructor(options) {
|
|
9
9
|
this.options = options;
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { Project } from 'projen';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Options for the "Getting Started" README section
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export interface GettingStartedOptions {
|
|
6
|
+
/**
|
|
7
|
+
* The Node.js version the project is built with, such as a node project's
|
|
8
|
+
* `workflowNodeVersion`, which is only visible to the project itself.
|
|
9
|
+
*
|
|
10
|
+
* @default - the project's `minNodeVersion`
|
|
11
|
+
*/
|
|
12
|
+
readonly nodeVersion?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Prerequisites specific to the project type, listed after the tools
|
|
15
|
+
*
|
|
16
|
+
* @default - none
|
|
17
|
+
*/
|
|
18
|
+
readonly prerequisites?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The prerequisites and commands to install a fresh checkout's dependencies
|
|
22
|
+
* and build it
|
|
23
|
+
*/
|
|
24
|
+
export declare function gettingStartedSection(project: Project, options?: GettingStartedOptions): string;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.gettingStartedSection = gettingStartedSection;
|
|
4
4
|
const javascript_1 = require("projen/lib/javascript");
|
|
5
|
+
const python_1 = require("projen/lib/python");
|
|
5
6
|
const YARN_PACKAGE_MANAGERS = [
|
|
6
7
|
javascript_1.NodePackageManager.YARN,
|
|
7
8
|
javascript_1.NodePackageManager.YARN_CLASSIC,
|
|
@@ -18,10 +19,56 @@ function installCommand(project) {
|
|
|
18
19
|
? 'yarn install'
|
|
19
20
|
: `${packageManager} install`;
|
|
20
21
|
}
|
|
22
|
+
function nodePrerequisite(nodeVersion) {
|
|
23
|
+
// versions such as `lts/*` have no major to show
|
|
24
|
+
const major = /\d+/.exec(nodeVersion ?? '')?.[0];
|
|
25
|
+
return major ? `Node.js ${major}` : 'a current Node.js LTS release';
|
|
26
|
+
}
|
|
27
|
+
function packageManagerPrerequisite(project) {
|
|
28
|
+
const { packageManager, pnpmVersion, yarnVersion } = project.package;
|
|
29
|
+
switch (packageManager) {
|
|
30
|
+
case javascript_1.NodePackageManager.YARN:
|
|
31
|
+
case javascript_1.NodePackageManager.YARN_CLASSIC:
|
|
32
|
+
return 'Yarn 1 (classic)';
|
|
33
|
+
case javascript_1.NodePackageManager.YARN2:
|
|
34
|
+
case javascript_1.NodePackageManager.YARN_BERRY:
|
|
35
|
+
return yarnVersion ? `Yarn ${yarnVersion} (Berry)` : 'Yarn (Berry)';
|
|
36
|
+
case javascript_1.NodePackageManager.PNPM:
|
|
37
|
+
return pnpmVersion ? `pnpm ${pnpmVersion}` : 'pnpm';
|
|
38
|
+
case javascript_1.NodePackageManager.BUN:
|
|
39
|
+
return 'Bun';
|
|
40
|
+
default:
|
|
41
|
+
return 'npm';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function prerequisites(project, options) {
|
|
45
|
+
if (!(project instanceof javascript_1.NodeProject)) {
|
|
46
|
+
// non-node projects, such as python, still need Node.js to run projen
|
|
47
|
+
return [
|
|
48
|
+
...(project instanceof python_1.PythonProject ? ['Python 3'] : []),
|
|
49
|
+
`${nodePrerequisite(options.nodeVersion)}, to run projen`,
|
|
50
|
+
...(options.prerequisites ?? []),
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
return [
|
|
54
|
+
nodePrerequisite(options.nodeVersion ?? project.minNodeVersion),
|
|
55
|
+
packageManagerPrerequisite(project),
|
|
56
|
+
...(options.prerequisites ?? []),
|
|
57
|
+
];
|
|
58
|
+
}
|
|
21
59
|
/**
|
|
22
|
-
*
|
|
60
|
+
* The prerequisites and commands to install a fresh checkout's dependencies
|
|
61
|
+
* and build it
|
|
23
62
|
*/
|
|
24
|
-
function
|
|
25
|
-
return [
|
|
63
|
+
function gettingStartedSection(project, options = {}) {
|
|
64
|
+
return [
|
|
65
|
+
'Prerequisites:',
|
|
66
|
+
...prerequisites(project, options).map((prerequisite) => `* ${prerequisite}`),
|
|
67
|
+
'',
|
|
68
|
+
'```sh',
|
|
69
|
+
installCommand(project),
|
|
70
|
+
'npx projen build',
|
|
71
|
+
'```',
|
|
72
|
+
].join('\n');
|
|
26
73
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0dGluZy1zdGFydGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXlGQSxzREFhQztBQXJHRCxzREFBd0U7QUFDeEUsOENBQWtEO0FBRWxELE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsK0JBQWtCLENBQUMsSUFBSTtJQUN2QiwrQkFBa0IsQ0FBQyxZQUFZO0lBQy9CLCtCQUFrQixDQUFDLEtBQUs7SUFDeEIsK0JBQWtCLENBQUMsVUFBVTtDQUM5QixDQUFDO0FBc0JGLFNBQVMsY0FBYyxDQUFDLE9BQWdCO0lBQ3RDLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSx3QkFBVyxDQUFDLEVBQUUsQ0FBQztRQUN0Qyx1RkFBdUY7UUFDdkYsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDdEQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxjQUFjO1FBQ2hCLENBQUMsQ0FBQyxHQUFHLGNBQWMsVUFBVSxDQUFDO0FBQ2xDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFdBQW9CO0lBQzVDLGlEQUFpRDtJQUNqRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxPQUFvQjtJQUN0RCxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3JFLFFBQVEsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSywrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxZQUFZO1lBQ2xDLE9BQU8sa0JBQWtCLENBQUM7UUFDNUIsS0FBSywrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDOUIsS0FBSywrQkFBa0IsQ0FBQyxVQUFVO1lBQ2hDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLFdBQVcsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDdEUsS0FBSywrQkFBa0IsQ0FBQyxJQUFJO1lBQzFCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEQsS0FBSywrQkFBa0IsQ0FBQyxHQUFHO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBQ2Y7WUFDRSxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUNwQixPQUFnQixFQUNoQixPQUE4QjtJQUU5QixJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksd0JBQVcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsc0VBQXNFO1FBQ3RFLE9BQU87WUFDTCxHQUFHLENBQUMsT0FBTyxZQUFZLHNCQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3pELEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU87UUFDTCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDL0QsMEJBQTBCLENBQUMsT0FBTyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztLQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxPQUFnQixFQUNoQixVQUFpQyxFQUFFO0lBRW5DLE9BQU87UUFDTCxnQkFBZ0I7UUFDaEIsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUM3RSxFQUFFO1FBQ0YsT0FBTztRQUNQLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDdkIsa0JBQWtCO1FBQ2xCLEtBQUs7S0FDTixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciwgTm9kZVByb2plY3QgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgUHl0aG9uUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvcHl0aG9uJztcblxuY29uc3QgWUFSTl9QQUNLQUdFX01BTkFHRVJTID0gW1xuICBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTixcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQyxcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yLFxuICBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWSxcbl07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIFwiR2V0dGluZyBTdGFydGVkXCIgUkVBRE1FIHNlY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXR0aW5nU3RhcnRlZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE5vZGUuanMgdmVyc2lvbiB0aGUgcHJvamVjdCBpcyBidWlsdCB3aXRoLCBzdWNoIGFzIGEgbm9kZSBwcm9qZWN0J3NcbiAgICogYHdvcmtmbG93Tm9kZVZlcnNpb25gLCB3aGljaCBpcyBvbmx5IHZpc2libGUgdG8gdGhlIHByb2plY3QgaXRzZWxmLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0J3MgYG1pbk5vZGVWZXJzaW9uYFxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByZXJlcXVpc2l0ZXMgc3BlY2lmaWMgdG8gdGhlIHByb2plY3QgdHlwZSwgbGlzdGVkIGFmdGVyIHRoZSB0b29sc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHByZXJlcXVpc2l0ZXM/OiBzdHJpbmdbXTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbENvbW1hbmQocHJvamVjdDogUHJvamVjdCk6IHN0cmluZyB7XG4gIGlmICghKHByb2plY3QgaW5zdGFuY2VvZiBOb2RlUHJvamVjdCkpIHtcbiAgICAvLyBwcm9qZW4ncyBpbnN0YWxsIHRhc2sgaW5zdGFsbHMgdGhlIGRlcGVuZGVuY2llcyBvZiBub24tbm9kZSBwcm9qZWN0cywgc3VjaCBhcyBweXRob25cbiAgICByZXR1cm4gJ25weCBwcm9qZW4gaW5zdGFsbCc7XG4gIH1cbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBwcm9qZWN0LnBhY2thZ2UucGFja2FnZU1hbmFnZXI7XG4gIHJldHVybiBZQVJOX1BBQ0tBR0VfTUFOQUdFUlMuaW5jbHVkZXMocGFja2FnZU1hbmFnZXIpXG4gICAgPyAneWFybiBpbnN0YWxsJ1xuICAgIDogYCR7cGFja2FnZU1hbmFnZXJ9IGluc3RhbGxgO1xufVxuXG5mdW5jdGlvbiBub2RlUHJlcmVxdWlzaXRlKG5vZGVWZXJzaW9uPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gdmVyc2lvbnMgc3VjaCBhcyBgbHRzLypgIGhhdmUgbm8gbWFqb3IgdG8gc2hvd1xuICBjb25zdCBtYWpvciA9IC9cXGQrLy5leGVjKG5vZGVWZXJzaW9uID8/ICcnKT8uWzBdO1xuICByZXR1cm4gbWFqb3IgPyBgTm9kZS5qcyAke21ham9yfWAgOiAnYSBjdXJyZW50IE5vZGUuanMgTFRTIHJlbGVhc2UnO1xufVxuXG5mdW5jdGlvbiBwYWNrYWdlTWFuYWdlclByZXJlcXVpc2l0ZShwcm9qZWN0OiBOb2RlUHJvamVjdCk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcGFja2FnZU1hbmFnZXIsIHBucG1WZXJzaW9uLCB5YXJuVmVyc2lvbiB9ID0gcHJvamVjdC5wYWNrYWdlO1xuICBzd2l0Y2ggKHBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICByZXR1cm4gJ1lhcm4gMSAoY2xhc3NpYyknO1xuICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yOlxuICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICByZXR1cm4geWFyblZlcnNpb24gPyBgWWFybiAke3lhcm5WZXJzaW9ufSAoQmVycnkpYCA6ICdZYXJuIChCZXJyeSknO1xuICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICByZXR1cm4gcG5wbVZlcnNpb24gPyBgcG5wbSAke3BucG1WZXJzaW9ufWAgOiAncG5wbSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgcmV0dXJuICdCdW4nO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ25wbSc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcmVxdWlzaXRlcyhcbiAgcHJvamVjdDogUHJvamVjdCxcbiAgb3B0aW9uczogR2V0dGluZ1N0YXJ0ZWRPcHRpb25zLFxuKTogc3RyaW5nW10ge1xuICBpZiAoIShwcm9qZWN0IGluc3RhbmNlb2YgTm9kZVByb2plY3QpKSB7XG4gICAgLy8gbm9uLW5vZGUgcHJvamVjdHMsIHN1Y2ggYXMgcHl0aG9uLCBzdGlsbCBuZWVkIE5vZGUuanMgdG8gcnVuIHByb2plblxuICAgIHJldHVybiBbXG4gICAgICAuLi4ocHJvamVjdCBpbnN0YW5jZW9mIFB5dGhvblByb2plY3QgPyBbJ1B5dGhvbiAzJ10gOiBbXSksXG4gICAgICBgJHtub2RlUHJlcmVxdWlzaXRlKG9wdGlvbnMubm9kZVZlcnNpb24pfSwgdG8gcnVuIHByb2plbmAsXG4gICAgICAuLi4ob3B0aW9ucy5wcmVyZXF1aXNpdGVzID8/IFtdKSxcbiAgICBdO1xuICB9XG4gIHJldHVybiBbXG4gICAgbm9kZVByZXJlcXVpc2l0ZShvcHRpb25zLm5vZGVWZXJzaW9uID8/IHByb2plY3QubWluTm9kZVZlcnNpb24pLFxuICAgIHBhY2thZ2VNYW5hZ2VyUHJlcmVxdWlzaXRlKHByb2plY3QpLFxuICAgIC4uLihvcHRpb25zLnByZXJlcXVpc2l0ZXMgPz8gW10pLFxuICBdO1xufVxuXG4vKipcbiAqIFRoZSBwcmVyZXF1aXNpdGVzIGFuZCBjb21tYW5kcyB0byBpbnN0YWxsIGEgZnJlc2ggY2hlY2tvdXQncyBkZXBlbmRlbmNpZXNcbiAqIGFuZCBidWlsZCBpdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uKFxuICBwcm9qZWN0OiBQcm9qZWN0LFxuICBvcHRpb25zOiBHZXR0aW5nU3RhcnRlZE9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ1ByZXJlcXVpc2l0ZXM6JyxcbiAgICAuLi5wcmVyZXF1aXNpdGVzKHByb2plY3QsIG9wdGlvbnMpLm1hcCgocHJlcmVxdWlzaXRlKSA9PiBgKiAke3ByZXJlcXVpc2l0ZX1gKSxcbiAgICAnJyxcbiAgICAnYGBgc2gnLFxuICAgIGluc3RhbGxDb21tYW5kKHByb2plY3QpLFxuICAgICducHggcHJvamVuIGJ1aWxkJyxcbiAgICAnYGBgJyxcbiAgXS5qb2luKCdcXG4nKTtcbn1cbiJdfQ==
|
|
@@ -9,7 +9,7 @@ const section_1 = require("./elements/section");
|
|
|
9
9
|
* in between
|
|
10
10
|
*/
|
|
11
11
|
class ReadmeOrder {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.ReadmeOrder", version: "5.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.ReadmeOrder", version: "5.4.0" };
|
|
13
13
|
/**
|
|
14
14
|
* Sections a reader needs first, such as getting started
|
|
15
15
|
*/
|
|
@@ -30,7 +30,7 @@ class ReadmeOrder {
|
|
|
30
30
|
}
|
|
31
31
|
exports.ReadmeOrder = ReadmeOrder;
|
|
32
32
|
class Readme extends projen_1.FileBase {
|
|
33
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "5.
|
|
33
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "5.4.0" };
|
|
34
34
|
/**
|
|
35
35
|
* The README of a project, if it has one
|
|
36
36
|
*/
|
|
@@ -61,7 +61,7 @@ function getOptions(options) {
|
|
|
61
61
|
* @pjid cdk-typescript-app
|
|
62
62
|
*/
|
|
63
63
|
class CdkTypeScriptApp extends awscdk_1.AwsCdkTypeScriptApp {
|
|
64
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.CdkTypeScriptApp", version: "5.
|
|
64
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.CdkTypeScriptApp", version: "5.4.0" };
|
|
65
65
|
readme;
|
|
66
66
|
constructor(options) {
|
|
67
67
|
const mergedOptions = getOptions(options);
|
|
@@ -73,9 +73,16 @@ class CdkTypeScriptApp extends awscdk_1.AwsCdkTypeScriptApp {
|
|
|
73
73
|
this.readme = new readme_1.Readme(this, {
|
|
74
74
|
description: mergedOptions.readme?.description,
|
|
75
75
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
// integ:debug only compares snapshots, so needs no credentials
|
|
77
|
+
const deployingTasks = mergedOptions.experimentalIntegRunner
|
|
78
|
+
? ' and for the integration test tasks that deploy (`integ:update`, `integ:force`, `integ:watch`)'
|
|
79
|
+
: '';
|
|
80
|
+
this.readme.addSection('Getting Started', (0, getting_started_1.gettingStartedSection)(this, {
|
|
81
|
+
nodeVersion: this.nodeVersion,
|
|
82
|
+
prerequisites: [
|
|
83
|
+
`AWS credentials for the target account, needed to deploy${deployingTasks}`,
|
|
84
|
+
],
|
|
85
|
+
}), { order: readme_1.ReadmeOrder.INTRODUCTION });
|
|
79
86
|
this.readme.addSection('CDK', `Bootstrap each AWS account and region once:
|
|
80
87
|
|
|
81
88
|
\`\`\`sh
|
|
@@ -165,4 +172,4 @@ integ-runner ignores changes to asset hashes, so a test whose only change is Lam
|
|
|
165
172
|
exports.CdkTypeScriptApp = CdkTypeScriptApp;
|
|
166
173
|
__exportStar(require("./cdk-typescript-app-options"), exports);
|
|
167
174
|
__exportStar(require("./deployment-environment"), exports);
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvY2RrLXRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUNoRCw4Q0FJMkI7QUFFM0IsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCxxRUFBcUU7QUFDckUsNkRBR3lDO0FBQ3pDLHlGQUE4RjtBQUM5RixvREFBOEQ7QUFDOUQsNkVBQWlGO0FBQ2pGLDZEQUF5RDtBQUV6RDs7R0FFRztBQUNVLFFBQUEsNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0FBRXRELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLENBQUM7QUFFdkQsU0FBUyxVQUFVLENBQUMsT0FBZ0M7SUFDbEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV6QixNQUFNLFFBQVEsR0FBRztRQUNmLElBQUk7UUFDSixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDaEMsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsc0JBQWEsQ0FBQyxXQUFXLEVBQUU7UUFDckQsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtRQUNuQywyRUFBMkU7UUFDM0UsOERBQThEO1FBQzlELE9BQU8sRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDMUQsc0dBQXNHO1FBQ3RHLGNBQWMsRUFBRSxJQUFJO0tB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QWlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsVUFBVSxFQUNoRSx1QkFBYyxDQUFDLEtBQUssQ0FDckIsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzFCLFdBQVcsRUFDVCxpRkFBaUY7WUFDbkYsUUFBUSxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztZQUN2RSxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUMxQixXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELFFBQVEsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUM7WUFDdkUsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDMUIsV0FBVyxFQUNULHNFQUFzRTtZQUN4RSxRQUFRLEVBQUU7Z0JBQ1IsY0FBYztnQkFDZCxJQUFJO2dCQUNKLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixLQUFLO2dCQUNMLG9CQUFvQjthQUNyQjtZQUNELFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNwQixtQkFBbUIsRUFDbkI7Ozs7Ozs7Ozs7O0lBV0YsWUFBWSxxQkFBcUIsa0JBQWtCLFlBQVksaUJBQWlCLDJNQUEyTSxpQkFBaUI7O2tOQUU5RixFQUM1TSxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO0lBQ0osQ0FBQzs7QUEzSEgsNENBNEhDO0FBRUQsK0RBQTZDO0FBQzdDLDJEQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlcGVuZGVuY3lUeXBlLCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHtcbiAgQXdzQ2RrVHlwZVNjcmlwdEFwcCxcbiAgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMsXG4gIExhbWJkYVJ1bnRpbWUsXG59IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IENka1R5cGVTY3JpcHRBcHBPcHRpb25zIH0gZnJvbSAnLi9jZGstdHlwZXNjcmlwdC1hcHAtb3B0aW9ucyc7XG5pbXBvcnQgeyBDb2RlT3duZXJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZW93bmVycyc7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2RlcWwnO1xuaW1wb3J0IHsgYWRkRGVwbG95bWVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9kZXBsb3ltZW50cyc7XG5pbXBvcnQge1xuICBhdXRvTWVyZ2VPcHRpb25zLFxuICBjb25maWd1cmVNZXJnaWZ5LFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5JztcbmltcG9ydCB7IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvcHVsbC1yZXF1ZXN0LXRlbXBsYXRlJztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZSc7XG5pbXBvcnQgeyBnZXR0aW5nU3RhcnRlZENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUvZ2V0dGluZy1zdGFydGVkJztcbmltcG9ydCB7IG1lcmdlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLW9wdGlvbnMnO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIGBAYXdzLWNkay9pbnRlZy1ydW5uZXJgIHBpbm5lZCB3aGVuIGBleHBlcmltZW50YWxJbnRlZ1J1bm5lcmAgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5URUdfUlVOTkVSX1ZFUlNJT04gPSAnMi4yMDUuNic7XG5cbmNvbnN0IElOVEVHX1JVTk5FUiA9ICdAYXdzLWNkay9pbnRlZy1ydW5uZXInO1xuY29uc3QgSU5URUdfVEVTVFNfQUxQSEEgPSAnQGF3cy1jZGsvaW50ZWctdGVzdHMtYWxwaGEnO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnM6IENka1R5cGVTY3JpcHRBcHBPcHRpb25zKSB7XG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgZ2l0aWdub3JlOiBbJy5ucG1yYycsICcudnNjb2RlJ10sXG4gICAgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzOiBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSxcbiAgICBwcm9qZW5yY1RzOiB0cnVlLFxuICAgIC8vIGF1dGhlbnRpY2F0ZSBhcyB0aGUgR2l0SHViIEFwcCwgc28gbWVyZ2lmeSBjYW4gYXBwcm92ZSB1cGdyYWRlIHB1bGwgcmVxdWVzdHNcbiAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoe30pLFxuICAgIGxhbWJkYU9wdGlvbnM6IHsgcnVudGltZTogTGFtYmRhUnVudGltZS5OT0RFSlNfMjRfWCB9LFxuICAgIGplc3RPcHRpb25zOiB7IGplc3RWZXJzaW9uOiAnXjMwJyB9LFxuICAgIC8vIG1hdGNoIHRoZSBsYW1iZGEgcnVudGltZSwgdW5sZXNzIGRlcml2ZWQgZnJvbSBtaW5Ob2RlVmVyc2lvbjsgYSBjb25zdW1lclxuICAgIC8vIEB0eXBlcy9ub2RlIGluIGRldkRlcHMgaXMgYWRkZWQgbGF0ZXIsIHNvIHJlcGxhY2VzIHRoaXMgb25lXG4gICAgZGV2RGVwczogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiA/IFtdIDogWydAdHlwZXMvbm9kZUBeMjQnXSxcbiAgICAvLyB0cy1qZXN0IG9ubHkgcmVwb3J0cyB0eXBlIGVycm9ycyBpbiB0aGUgZmlsZXMgYSB0ZXN0IHJ1biBsb2Fkcywgc28gdHlwZS1jaGVjayB0aGUgd2hvbGUgc3VpdGUgZmlyc3RcbiAgICB0eXBlY2hlY2tUZXN0czogdHJ1ZSxcbiAgfSBzYXRpc2ZpZXMgUGFydGlhbDxDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucz47XG5cbiAgcmV0dXJuIG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQSBDREsgYXBwbGljYXRpb24gaW4gVHlwZVNjcmlwdFxuICpcbiAqIERlZmF1bHRzIHRvIHRoZSBOb2RlLmpzIDI0IExhbWJkYSBydW50aW1lIChgbGFtYmRhT3B0aW9ucy5ydW50aW1lYCkgd2l0aFxuICogbWF0Y2hpbmcgYEB0eXBlcy9ub2RlYCwgYW5kIEplc3QgMzAgKGBqZXN0T3B0aW9ucy5qZXN0VmVyc2lvbmApLlxuICpcbiAqIEBwamlkIGNkay10eXBlc2NyaXB0LWFwcFxuICovXG5leHBvcnQgY2xhc3MgQ2RrVHlwZVNjcmlwdEFwcCBleHRlbmRzIEF3c0Nka1R5cGVTY3JpcHRBcHAge1xuICByZWFkbWU6IFJlYWRtZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucykge1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICAgIGF1dG9NZXJnZU9wdGlvbnM6IGF1dG9NZXJnZU9wdGlvbnMobWVyZ2VkT3B0aW9ucyksXG4gICAgfSBhcyBBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyk7XG5cbiAgICBuZXcgQ29kZU93bmVycyh0aGlzLCBtZXJnZWRPcHRpb25zLmNvZGVPd25lcnMpO1xuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oJ0dldHRpbmcgU3RhcnRlZCcsIGdldHRpbmdTdGFydGVkQ29tbWFuZHModGhpcyksIHtcbiAgICAgIG9yZGVyOiBSZWFkbWVPcmRlci5JTlRST0RVQ1RJT04sXG4gICAgfSk7XG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbihcbiAgICAgICdDREsnLFxuICAgICAgYEJvb3RzdHJhcCBlYWNoIEFXUyBhY2NvdW50IGFuZCByZWdpb24gb25jZTpcblxuXFxgXFxgXFxgc2hcbm5weCBjZGsgYm9vdHN0cmFwXG5cXGBcXGBcXGBcblxuRGVwbG95IHRoZSBhcHA6XG5cblxcYFxcYFxcYHNoXG5ucHggcHJvamVuIGRlcGxveVxuXFxgXFxgXFxgXG5cbklmIHRoZSBhcHAgaGFzIG1vcmUgdGhhbiBvbmUgc3RhY2ssIG5hbWUgdGhlIHN0YWNrcyB0byBkZXBsb3kgb3IgcGFzcyBcXGAtLWFsbFxcYCwgYXMgaW4gXFxgbnB4IHByb2plbiBkZXBsb3kgLS1hbGxcXGAuYCxcbiAgICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLlVTQUdFIH0sXG4gICAgKTtcbiAgICBpZiAobWVyZ2VkT3B0aW9ucy5leHBlcmltZW50YWxJbnRlZ1J1bm5lcikge1xuICAgICAgdGhpcy5jb25maWd1cmVJbnRlZ1J1bm5lcihcbiAgICAgICAgbWVyZ2VkT3B0aW9ucy5pbnRlZ1J1bm5lclZlcnNpb24gPz8gREVGQVVMVF9JTlRFR19SVU5ORVJfVkVSU0lPTixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICgobWVyZ2VkT3B0aW9ucy5jb2RlcWwgPz8gdHJ1ZSkgJiYgdGhpcy5naXRodWI/LndvcmtmbG93c0VuYWJsZWQpIHtcbiAgICAgIG5ldyBDb2RlUWwodGhpcy5naXRodWIsIHtcbiAgICAgICAgLy8gaW50ZWctcnVubmVyIHNuYXBzaG90IGFzc2V0cyBhcmUgYnVuZGxlcyBvZiBkZXBlbmRlbmNpZXMsIHJlbmFtZWQgb24gZXZlcnkgdXBkYXRlXG4gICAgICAgIHBhdGhzSWdub3JlOiBtZXJnZWRPcHRpb25zLmNvZGVxbFBhdGhzSWdub3JlID8/IFtcbiAgICAgICAgICBDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFMsXG4gICAgICAgIF0sXG4gICAgICAgIGJyYW5jaGVzOiBbbWVyZ2VkT3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaF0sXG4gICAgICAgIGxhbmd1YWdlczogWydqYXZhc2NyaXB0LXR5cGVzY3JpcHQnLCAnYWN0aW9ucyddLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGFkZERlcGxveW1lbnRzKHRoaXMsIHtcbiAgICAgIGRlcGxveW1lbnRzOiBtZXJnZWRPcHRpb25zLmRlcGxveW1lbnRzID8/IFtdLFxuICAgICAgbm9kZVZlcnNpb246IHRoaXMubm9kZVZlcnNpb24sXG4gICAgICByZWxlYXNlV29ya2Zsb3dOYW1lOiBtZXJnZWRPcHRpb25zLnJlbGVhc2VXb3JrZmxvd05hbWUsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuYXV0b01lcmdlKSB7XG4gICAgICBjb25maWd1cmVNZXJnaWZ5KHRoaXMsIHtcbiAgICAgICAgYXBwcm92ZWRSZXZpZXdzOiBtZXJnZWRPcHRpb25zLmF1dG9NZXJnZU9wdGlvbnM/LmFwcHJvdmVkUmV2aWV3cyxcbiAgICAgICAgdHJ1c3RlZEF1dGhvcnM6IG1lcmdlZE9wdGlvbnMudHJ1c3RlZEF1dGhvcnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGlucyB0aGUgaW50ZWdyYXRpb24gdGVzdCBkZXBlbmRlbmNpZXMgdGhhdCBwcm9qZW4gYWRkcyBhdCBgbGF0ZXN0YCwgYXNcbiAgICogZWFjaCBgQGF3cy1jZGsvaW50ZWctdGVzdHMtYWxwaGFgIHJlbGVhc2UgcmV3cml0ZXMgdGhlIGJ1bmRsZWQgYXNzZXJ0aW9uXG4gICAqIGNvZGUgaW4gdGhlIHNuYXBzaG90cyBhbmQgZHJpZnRzIGZyb20gYGF3cy1jZGstbGliYC5cbiAgICovXG4gIHByaXZhdGUgY29uZmlndXJlSW50ZWdSdW5uZXIoaW50ZWdSdW5uZXJWZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRlcHMucmVtb3ZlRGVwZW5kZW5jeShJTlRFR19SVU5ORVIsIERlcGVuZGVuY3lUeXBlLkRFVkVOVik7XG4gICAgdGhpcy5kZXBzLnJlbW92ZURlcGVuZGVuY3koSU5URUdfVEVTVFNfQUxQSEEsIERlcGVuZGVuY3lUeXBlLkRFVkVOVik7XG4gICAgdGhpcy5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHtJTlRFR19SVU5ORVJ9QCR7aW50ZWdSdW5uZXJWZXJzaW9ufWAsXG4gICAgICBEZXBlbmRlbmN5VHlwZS5CVUlMRCxcbiAgICApO1xuICAgIHRoaXMuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7SU5URUdfVEVTVFNfQUxQSEF9QCR7dGhpcy5jZGtEZXBzLmNka01pbmltdW1WZXJzaW9ufS1hbHBoYS4wYCxcbiAgICAgIERlcGVuZGVuY3lUeXBlLkJVSUxELFxuICAgICk7XG5cbiAgICB0aGlzLmFkZFRhc2soJ2ludGVnOmZvcmNlJywge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUnVuIGludGVncmF0aW9uIHNuYXBzaG90IHRlc3RzLCBmb3JjaW5nIHRlc3RzIHRvIHJ1biBldmVuIGlmIHRoZXJlJ3Mgbm8gY2hhbmdlc1wiLFxuICAgICAgZXhlY0FyZ3M6IFsnaW50ZWctcnVubmVyJywgJyRAJywgJy0tbGFuZ3VhZ2UnLCAndHlwZXNjcmlwdCcsICctLWZvcmNlJ10sXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZFRhc2soJ2ludGVnOndhdGNoJywge1xuICAgICAgZGVzY3JpcHRpb246ICdXYXRjaCB0aGUgaW50ZWdyYXRpb24gc25hcHNob3QgdGVzdHMnLFxuICAgICAgZXhlY0FyZ3M6IFsnaW50ZWctcnVubmVyJywgJyRAJywgJy0tbGFuZ3VhZ2UnLCAndHlwZXNjcmlwdCcsICctLXdhdGNoJ10sXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZFRhc2soJ2ludGVnOmRlYnVnJywge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdSdW4gaW50ZWdyYXRpb24gdGVzdHMgd2l0aCB2ZXJib3NlIGRpYWdub3N0aWNzIGFuZCBmYWlsdXJlIGFydGlmYWN0cycsXG4gICAgICBleGVjQXJnczogW1xuICAgICAgICAnaW50ZWctcnVubmVyJyxcbiAgICAgICAgJyRAJyxcbiAgICAgICAgJy0tbGFuZ3VhZ2UnLFxuICAgICAgICAndHlwZXNjcmlwdCcsXG4gICAgICAgICctdnYnLFxuICAgICAgICAnLS1pbnNwZWN0LWZhaWx1cmVzJyxcbiAgICAgIF0sXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnSW50ZWdyYXRpb24gVGVzdHMnLFxuICAgICAgYEludGVncmF0aW9uIHRlc3RzIGFyZSBydW4gYnkgW2ludGVnLXJ1bm5lcl0oaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrLWNsaS90cmVlL21haW4vcGFja2FnZXMvJTQwYXdzLWNkay9pbnRlZy1ydW5uZXIpLlxuXG5UaGVzZSB0YXNrcyBvbmx5IGNvbXBhcmUgc25hcHNob3RzLCBzbyB0aGV5IG5lZWQgbm8gQVdTIGNyZWRlbnRpYWxzIGFuZCBkZXBsb3kgbm90aGluZy4gXFxgbnB4IHByb2plbiB0ZXN0XFxgLCBhbmQgc28gXFxgbnB4IHByb2plbiBidWlsZFxcYCwgcnVucyBcXGBpbnRlZ1xcYDpcbiogXFxgbnB4IHByb2plbiBpbnRlZ1xcYCBzeW50aGVzaXplcyBlYWNoIHRlc3QgYW5kIGNvbXBhcmVzIGl0IHdpdGggaXRzIHNuYXBzaG90LlxuKiBcXGBucHggcHJvamVuIGludGVnOmRlYnVnXFxgIGRvZXMgdGhlIHNhbWUgd2l0aCB2ZXJib3NlIGRpYWdub3N0aWNzLCBrZWVwaW5nIHRoZSBnZW5lcmF0ZWQgc25hcHNob3RzIG9mIHRlc3RzIHRoYXQgZGlmZmVyLlxuXG5UaGVzZSB0YXNrcyBkZXBsb3kgdG8gQVdTLCBpbiB0aGUgYWNjb3VudCBhbmQgcmVnaW9uIG9mIHRoZSBjdXJyZW50IEFXUyBjcmVkZW50aWFscy4gRWFjaCB0ZXN0J3Mgc3RhY2tzIGFyZSByZWFsLCBzbyB0aGUgdGFza3MgdGFrZSBtaW51dGVzIGFuZCBpbmN1ciBBV1MgY29zdHM6XG4qIFxcYG5weCBwcm9qZW4gaW50ZWc6dXBkYXRlXFxgIGRlcGxveXMgdGhlIHRlc3RzIHdob3NlIHNuYXBzaG90cyBkaWZmZXIsIHJ1bnMgdGhlaXIgYXNzZXJ0aW9ucywgZGVzdHJveXMgdGhlIHN0YWNrcyBhbmQsIGlmIHRoZXkgcGFzcywgdXBkYXRlcyB0aGUgc25hcHNob3RzLlxuKiBcXGBucHggcHJvamVuIGludGVnOmZvcmNlXFxgIGRlcGxveXMgZXZlcnkgdGVzdCBpbiB0aGUgc2FtZSB3YXksIGV2ZW4gaWYgaXRzIHNuYXBzaG90IGlzIHVuY2hhbmdlZC5cbiogXFxgbnB4IHByb2plbiBpbnRlZzp3YXRjaFxcYCBkZXBsb3lzIGEgc2luZ2xlIHRlc3QgYW5kIHJlZGVwbG95cyBpdCBhcyBpdHMgY29kZSBjaGFuZ2VzLCBsaWtlIFxcYGNkayBkZXBsb3kgLS13YXRjaFxcYC5cblxuXFxgJHtJTlRFR19SVU5ORVJ9XFxgIGlzIHBpbm5lZCB0byBcXGAke2ludGVnUnVubmVyVmVyc2lvbn1cXGAgYW5kIFxcYCR7SU5URUdfVEVTVFNfQUxQSEF9XFxgIHRvIHRoZSByZWxlYXNlIG1hdGNoaW5nIFxcYGNka1ZlcnNpb25cXGAsIHNvIHRoZSB1cGdyYWRlIHdvcmtmbG93IG5ldmVyIGNoYW5nZXMgdGhlaXIgdmVyc2lvbnM6IHRoZXkgb25seSBjaGFuZ2Ugd2hlbiBcXGBjZGtWZXJzaW9uXFxgIG9yIFxcYGludGVnUnVubmVyVmVyc2lvblxcYCBpcyBjaGFuZ2VkLiBUaGlzIGlzIGludGVuZGVkLCBhcyBlYWNoIFxcYCR7SU5URUdfVEVTVFNfQUxQSEF9XFxgIHJlbGVhc2UgcmV3cml0ZXMgdGhlIGFzc2VydGlvbiBjb2RlIGJ1bmRsZWQgaW4gdGhlIHNuYXBzaG90cy5cblxuaW50ZWctcnVubmVyIGlnbm9yZXMgY2hhbmdlcyB0byBhc3NldCBoYXNoZXMsIHNvIGEgdGVzdCB3aG9zZSBvbmx5IGNoYW5nZSBpcyBMYW1iZGEgY29kZSBpcyByZXBvcnRlZCBhcyBcXGBVTkNIQU5HRURcXGAgYW5kIGlzIG5vdCBkZXBsb3llZC4gUnVuIFxcYG5weCBwcm9qZW4gaW50ZWc6Zm9yY2VcXGAgdG8gZXhlcmNpc2UgbmV3IExhbWJkYSBjb2RlIGVuZCB0byBlbmQuYCxcbiAgICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLlVTQUdFIH0sXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL2Nkay10eXBlc2NyaXB0LWFwcC1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwbG95bWVudC1lbnZpcm9ubWVudCc7XG4iXX0=
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvY2RrLXRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUNoRCw4Q0FJMkI7QUFFM0IsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCxxRUFBcUU7QUFDckUsNkRBR3lDO0FBQ3pDLHlGQUE4RjtBQUM5RixvREFBOEQ7QUFDOUQsNkVBQWdGO0FBQ2hGLDZEQUF5RDtBQUV6RDs7R0FFRztBQUNVLFFBQUEsNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0FBRXRELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLENBQUM7QUFFdkQsU0FBUyxVQUFVLENBQUMsT0FBZ0M7SUFDbEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV6QixNQUFNLFFBQVEsR0FBRztRQUNmLElBQUk7UUFDSixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDaEMsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsc0JBQWEsQ0FBQyxXQUFXLEVBQUU7UUFDckQsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtRQUNuQywyRUFBMkU7UUFDM0UsOERBQThEO1FBQzlELE9BQU8sRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDMUQsc0dBQXNHO1FBQ3RHLGNBQWMsRUFBRSxJQUFJO0tB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QUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO0lBQ0osQ0FBQzs7QUF0SUgsNENBdUlDO0FBRUQsK0RBQTZDO0FBQzdDLDJEQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlcGVuZGVuY3lUeXBlLCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHtcbiAgQXdzQ2RrVHlwZVNjcmlwdEFwcCxcbiAgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMsXG4gIExhbWJkYVJ1bnRpbWUsXG59IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IENka1R5cGVTY3JpcHRBcHBPcHRpb25zIH0gZnJvbSAnLi9jZGstdHlwZXNjcmlwdC1hcHAtb3B0aW9ucyc7XG5pbXBvcnQgeyBDb2RlT3duZXJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZW93bmVycyc7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2RlcWwnO1xuaW1wb3J0IHsgYWRkRGVwbG95bWVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9kZXBsb3ltZW50cyc7XG5pbXBvcnQge1xuICBhdXRvTWVyZ2VPcHRpb25zLFxuICBjb25maWd1cmVNZXJnaWZ5LFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5JztcbmltcG9ydCB7IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvcHVsbC1yZXF1ZXN0LXRlbXBsYXRlJztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZSc7XG5pbXBvcnQgeyBnZXR0aW5nU3RhcnRlZFNlY3Rpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZS9nZXR0aW5nLXN0YXJ0ZWQnO1xuaW1wb3J0IHsgbWVyZ2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVyZ2Utb3B0aW9ucyc7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgYEBhd3MtY2RrL2ludGVnLXJ1bm5lcmAgcGlubmVkIHdoZW4gYGV4cGVyaW1lbnRhbEludGVnUnVubmVyYCBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlRFR19SVU5ORVJfVkVSU0lPTiA9ICcyLjIwNS42JztcblxuY29uc3QgSU5URUdfUlVOTkVSID0gJ0Bhd3MtY2RrL2ludGVnLXJ1bm5lcic7XG5jb25zdCBJTlRFR19URVNUU19BTFBIQSA9ICdAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYSc7XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMob3B0aW9uczogQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIG5hbWUsXG4gICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6ICdtYWluJyxcbiAgICBnaXRpZ25vcmU6IFsnLm5wbXJjJywgJy52c2NvZGUnXSxcbiAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFLFxuICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgLy8gYXV0aGVudGljYXRlIGFzIHRoZSBHaXRIdWIgQXBwLCBzbyBtZXJnaWZ5IGNhbiBhcHByb3ZlIHVwZ3JhZGUgcHVsbCByZXF1ZXN0c1xuICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCh7fSksXG4gICAgbGFtYmRhT3B0aW9uczogeyBydW50aW1lOiBMYW1iZGFSdW50aW1lLk5PREVKU18yNF9YIH0sXG4gICAgamVzdE9wdGlvbnM6IHsgamVzdFZlcnNpb246ICdeMzAnIH0sXG4gICAgLy8gbWF0Y2ggdGhlIGxhbWJkYSBydW50aW1lLCB1bmxlc3MgZGVyaXZlZCBmcm9tIG1pbk5vZGVWZXJzaW9uOyBhIGNvbnN1bWVyXG4gICAgLy8gQHR5cGVzL25vZGUgaW4gZGV2RGVwcyBpcyBhZGRlZCBsYXRlciwgc28gcmVwbGFjZXMgdGhpcyBvbmVcbiAgICBkZXZEZXBzOiBvcHRpb25zLm1pbk5vZGVWZXJzaW9uID8gW10gOiBbJ0B0eXBlcy9ub2RlQF4yNCddLFxuICAgIC8vIHRzLWplc3Qgb25seSByZXBvcnRzIHR5cGUgZXJyb3JzIGluIHRoZSBmaWxlcyBhIHRlc3QgcnVuIGxvYWRzLCBzbyB0eXBlLWNoZWNrIHRoZSB3aG9sZSBzdWl0ZSBmaXJzdFxuICAgIHR5cGVjaGVja1Rlc3RzOiB0cnVlLFxuICB9IHNhdGlzZmllcyBQYXJ0aWFsPENka1R5cGVTY3JpcHRBcHBPcHRpb25zPjtcblxuICByZXR1cm4gbWVyZ2VPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBIENESyBhcHBsaWNhdGlvbiBpbiBUeXBlU2NyaXB0XG4gKlxuICogRGVmYXVsdHMgdG8gdGhlIE5vZGUuanMgMjQgTGFtYmRhIHJ1bnRpbWUgKGBsYW1iZGFPcHRpb25zLnJ1bnRpbWVgKSB3aXRoXG4gKiBtYXRjaGluZyBgQHR5cGVzL25vZGVgLCBhbmQgSmVzdCAzMCAoYGplc3RPcHRpb25zLmplc3RWZXJzaW9uYCkuXG4gKlxuICogQHBqaWQgY2RrLXR5cGVzY3JpcHQtYXBwXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtUeXBlU2NyaXB0QXBwIGV4dGVuZHMgQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG4gIHJlYWRtZTogUmVhZG1lO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka1R5cGVTY3JpcHRBcHBPcHRpb25zKSB7XG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgICAgYXV0b01lcmdlT3B0aW9uczogYXV0b01lcmdlT3B0aW9ucyhtZXJnZWRPcHRpb25zKSxcbiAgICB9IGFzIEF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgdGhpcy5yZWFkbWUgPSBuZXcgUmVhZG1lKHRoaXMsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXJnZWRPcHRpb25zLnJlYWRtZT8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gICAgLy8gaW50ZWc6ZGVidWcgb25seSBjb21wYXJlcyBzbmFwc2hvdHMsIHNvIG5lZWRzIG5vIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgZGVwbG95aW5nVGFza3MgPSBtZXJnZWRPcHRpb25zLmV4cGVyaW1lbnRhbEludGVnUnVubmVyXG4gICAgICA/ICcgYW5kIGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdCB0YXNrcyB0aGF0IGRlcGxveSAoYGludGVnOnVwZGF0ZWAsIGBpbnRlZzpmb3JjZWAsIGBpbnRlZzp3YXRjaGApJ1xuICAgICAgOiAnJztcbiAgICB0aGlzLnJlYWRtZS5hZGRTZWN0aW9uKFxuICAgICAgJ0dldHRpbmcgU3RhcnRlZCcsXG4gICAgICBnZXR0aW5nU3RhcnRlZFNlY3Rpb24odGhpcywge1xuICAgICAgICBub2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgICAgcHJlcmVxdWlzaXRlczogW1xuICAgICAgICAgIGBBV1MgY3JlZGVudGlhbHMgZm9yIHRoZSB0YXJnZXQgYWNjb3VudCwgbmVlZGVkIHRvIGRlcGxveSR7ZGVwbG95aW5nVGFza3N9YCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuSU5UUk9EVUNUSU9OIH0sXG4gICAgKTtcbiAgICB0aGlzLnJlYWRtZS5hZGRTZWN0aW9uKFxuICAgICAgJ0NESycsXG4gICAgICBgQm9vdHN0cmFwIGVhY2ggQVdTIGFjY291bnQgYW5kIHJlZ2lvbiBvbmNlOlxuXG5cXGBcXGBcXGBzaFxubnB4IGNkayBib290c3RyYXBcblxcYFxcYFxcYFxuXG5EZXBsb3kgdGhlIGFwcDpcblxuXFxgXFxgXFxgc2hcbm5weCBwcm9qZW4gZGVwbG95XG5cXGBcXGBcXGBcblxuSWYgdGhlIGFwcCBoYXMgbW9yZSB0aGFuIG9uZSBzdGFjaywgbmFtZSB0aGUgc3RhY2tzIHRvIGRlcGxveSBvciBwYXNzIFxcYC0tYWxsXFxgLCBhcyBpbiBcXGBucHggcHJvamVuIGRlcGxveSAtLWFsbFxcYC5gLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuVVNBR0UgfSxcbiAgICApO1xuICAgIGlmIChtZXJnZWRPcHRpb25zLmV4cGVyaW1lbnRhbEludGVnUnVubmVyKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUludGVnUnVubmVyKFxuICAgICAgICBtZXJnZWRPcHRpb25zLmludGVnUnVubmVyVmVyc2lvbiA/PyBERUZBVUxUX0lOVEVHX1JVTk5FUl9WRVJTSU9OLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKChtZXJnZWRPcHRpb25zLmNvZGVxbCA/PyB0cnVlKSAmJiB0aGlzLmdpdGh1Yj8ud29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgbmV3IENvZGVRbCh0aGlzLmdpdGh1Yiwge1xuICAgICAgICAvLyBpbnRlZy1ydW5uZXIgc25hcHNob3QgYXNzZXRzIGFyZSBidW5kbGVzIG9mIGRlcGVuZGVuY2llcywgcmVuYW1lZCBvbiBldmVyeSB1cGRhdGVcbiAgICAgICAgcGF0aHNJZ25vcmU6IG1lcmdlZE9wdGlvbnMuY29kZXFsUGF0aHNJZ25vcmUgPz8gW1xuICAgICAgICAgIENvZGVRbC5JTlRFR19TTkFQU0hPVF9QQVRIUyxcbiAgICAgICAgXSxcbiAgICAgICAgYnJhbmNoZXM6IFttZXJnZWRPcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoXSxcbiAgICAgICAgbGFuZ3VhZ2VzOiBbJ2phdmFzY3JpcHQtdHlwZXNjcmlwdCcsICdhY3Rpb25zJ10sXG4gICAgICB9KTtcbiAgICB9XG4gICAgYWRkRGVwbG95bWVudHModGhpcywge1xuICAgICAgZGVwbG95bWVudHM6IG1lcmdlZE9wdGlvbnMuZGVwbG95bWVudHMgPz8gW10sXG4gICAgICBub2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgIHJlbGVhc2VXb3JrZmxvd05hbWU6IG1lcmdlZE9wdGlvbnMucmVsZWFzZVdvcmtmbG93TmFtZSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5hdXRvTWVyZ2UpIHtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5zIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGRlcGVuZGVuY2llcyB0aGF0IHByb2plbiBhZGRzIGF0IGBsYXRlc3RgLCBhc1xuICAgKiBlYWNoIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYWAgcmVsZWFzZSByZXdyaXRlcyB0aGUgYnVuZGxlZCBhc3NlcnRpb25cbiAgICogY29kZSBpbiB0aGUgc25hcHNob3RzIGFuZCBkcmlmdHMgZnJvbSBgYXdzLWNkay1saWJgLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWd1cmVJbnRlZ1J1bm5lcihpbnRlZ1J1bm5lclZlcnNpb246IHN0cmluZykge1xuICAgIHRoaXMuZGVwcy5yZW1vdmVEZXBlbmRlbmN5KElOVEVHX1JVTk5FUiwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICB0aGlzLmRlcHMucmVtb3ZlRGVwZW5kZW5jeShJTlRFR19URVNUU19BTFBIQSwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICB0aGlzLmRlcHMuYWRkRGVwZW5kZW5jeShcbiAgICAgIGAke0lOVEVHX1JVTk5FUn1AJHtpbnRlZ1J1bm5lclZlcnNpb259YCxcbiAgICAgIERlcGVuZGVuY3lUeXBlLkJVSUxELFxuICAgICk7XG4gICAgdGhpcy5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHtJTlRFR19URVNUU19BTFBIQX1AJHt0aGlzLmNka0RlcHMuY2RrTWluaW11bVZlcnNpb259LWFscGhhLjBgLFxuICAgICAgRGVwZW5kZW5jeVR5cGUuQlVJTEQsXG4gICAgKTtcblxuICAgIHRoaXMuYWRkVGFzaygnaW50ZWc6Zm9yY2UnLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSdW4gaW50ZWdyYXRpb24gc25hcHNob3QgdGVzdHMsIGZvcmNpbmcgdGVzdHMgdG8gcnVuIGV2ZW4gaWYgdGhlcmUncyBubyBjaGFuZ2VzXCIsXG4gICAgICBleGVjQXJnczogWydpbnRlZy1ydW5uZXInLCAnJEAnLCAnLS1sYW5ndWFnZScsICd0eXBlc2NyaXB0JywgJy0tZm9yY2UnXSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkVGFzaygnaW50ZWc6d2F0Y2gnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1dhdGNoIHRoZSBpbnRlZ3JhdGlvbiBzbmFwc2hvdCB0ZXN0cycsXG4gICAgICBleGVjQXJnczogWydpbnRlZy1ydW5uZXInLCAnJEAnLCAnLS1sYW5ndWFnZScsICd0eXBlc2NyaXB0JywgJy0td2F0Y2gnXSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkVGFzaygnaW50ZWc6ZGVidWcnLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1J1biBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHZlcmJvc2UgZGlhZ25vc3RpY3MgYW5kIGZhaWx1cmUgYXJ0aWZhY3RzJyxcbiAgICAgIGV4ZWNBcmdzOiBbXG4gICAgICAgICdpbnRlZy1ydW5uZXInLFxuICAgICAgICAnJEAnLFxuICAgICAgICAnLS1sYW5ndWFnZScsXG4gICAgICAgICd0eXBlc2NyaXB0JyxcbiAgICAgICAgJy12dicsXG4gICAgICAgICctLWluc3BlY3QtZmFpbHVyZXMnLFxuICAgICAgXSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbihcbiAgICAgICdJbnRlZ3JhdGlvbiBUZXN0cycsXG4gICAgICBgSW50ZWdyYXRpb24gdGVzdHMgYXJlIHJ1biBieSBbaW50ZWctcnVubmVyXShodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstY2xpL3RyZWUvbWFpbi9wYWNrYWdlcy8lNDBhd3MtY2RrL2ludGVnLXJ1bm5lcikuXG5cblRoZXNlIHRhc2tzIG9ubHkgY29tcGFyZSBzbmFwc2hvdHMsIHNvIHRoZXkgbmVlZCBubyBBV1MgY3JlZGVudGlhbHMgYW5kIGRlcGxveSBub3RoaW5nLiBcXGBucHggcHJvamVuIHRlc3RcXGAsIGFuZCBzbyBcXGBucHggcHJvamVuIGJ1aWxkXFxgLCBydW5zIFxcYGludGVnXFxgOlxuKiBcXGBucHggcHJvamVuIGludGVnXFxgIHN5bnRoZXNpemVzIGVhY2ggdGVzdCBhbmQgY29tcGFyZXMgaXQgd2l0aCBpdHMgc25hcHNob3QuXG4qIFxcYG5weCBwcm9qZW4gaW50ZWc6ZGVidWdcXGAgZG9lcyB0aGUgc2FtZSB3aXRoIHZlcmJvc2UgZGlhZ25vc3RpY3MsIGtlZXBpbmcgdGhlIGdlbmVyYXRlZCBzbmFwc2hvdHMgb2YgdGVzdHMgdGhhdCBkaWZmZXIuXG5cblRoZXNlIHRhc2tzIGRlcGxveSB0byBBV1MsIGluIHRoZSBhY2NvdW50IGFuZCByZWdpb24gb2YgdGhlIGN1cnJlbnQgQVdTIGNyZWRlbnRpYWxzLiBFYWNoIHRlc3QncyBzdGFja3MgYXJlIHJlYWwsIHNvIHRoZSB0YXNrcyB0YWtlIG1pbnV0ZXMgYW5kIGluY3VyIEFXUyBjb3N0czpcbiogXFxgbnB4IHByb2plbiBpbnRlZzp1cGRhdGVcXGAgZGVwbG95cyB0aGUgdGVzdHMgd2hvc2Ugc25hcHNob3RzIGRpZmZlciwgcnVucyB0aGVpciBhc3NlcnRpb25zLCBkZXN0cm95cyB0aGUgc3RhY2tzIGFuZCwgaWYgdGhleSBwYXNzLCB1cGRhdGVzIHRoZSBzbmFwc2hvdHMuXG4qIFxcYG5weCBwcm9qZW4gaW50ZWc6Zm9yY2VcXGAgZGVwbG95cyBldmVyeSB0ZXN0IGluIHRoZSBzYW1lIHdheSwgZXZlbiBpZiBpdHMgc25hcHNob3QgaXMgdW5jaGFuZ2VkLlxuKiBcXGBucHggcHJvamVuIGludGVnOndhdGNoXFxgIGRlcGxveXMgYSBzaW5nbGUgdGVzdCBhbmQgcmVkZXBsb3lzIGl0IGFzIGl0cyBjb2RlIGNoYW5nZXMsIGxpa2UgXFxgY2RrIGRlcGxveSAtLXdhdGNoXFxgLlxuXG5cXGAke0lOVEVHX1JVTk5FUn1cXGAgaXMgcGlubmVkIHRvIFxcYCR7aW50ZWdSdW5uZXJWZXJzaW9ufVxcYCBhbmQgXFxgJHtJTlRFR19URVNUU19BTFBIQX1cXGAgdG8gdGhlIHJlbGVhc2UgbWF0Y2hpbmcgXFxgY2RrVmVyc2lvblxcYCwgc28gdGhlIHVwZ3JhZGUgd29ya2Zsb3cgbmV2ZXIgY2hhbmdlcyB0aGVpciB2ZXJzaW9uczogdGhleSBvbmx5IGNoYW5nZSB3aGVuIFxcYGNka1ZlcnNpb25cXGAgb3IgXFxgaW50ZWdSdW5uZXJWZXJzaW9uXFxgIGlzIGNoYW5nZWQuIFRoaXMgaXMgaW50ZW5kZWQsIGFzIGVhY2ggXFxgJHtJTlRFR19URVNUU19BTFBIQX1cXGAgcmVsZWFzZSByZXdyaXRlcyB0aGUgYXNzZXJ0aW9uIGNvZGUgYnVuZGxlZCBpbiB0aGUgc25hcHNob3RzLlxuXG5pbnRlZy1ydW5uZXIgaWdub3JlcyBjaGFuZ2VzIHRvIGFzc2V0IGhhc2hlcywgc28gYSB0ZXN0IHdob3NlIG9ubHkgY2hhbmdlIGlzIExhbWJkYSBjb2RlIGlzIHJlcG9ydGVkIGFzIFxcYFVOQ0hBTkdFRFxcYCBhbmQgaXMgbm90IGRlcGxveWVkLiBSdW4gXFxgbnB4IHByb2plbiBpbnRlZzpmb3JjZVxcYCB0byBleGVyY2lzZSBuZXcgTGFtYmRhIGNvZGUgZW5kIHRvIGVuZC5gLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuVVNBR0UgfSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vY2RrLXR5cGVzY3JpcHQtYXBwLW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXBsb3ltZW50LWVudmlyb25tZW50JztcbiJdfQ==
|
|
@@ -48,7 +48,7 @@ function getOptions(options) {
|
|
|
48
48
|
* @pjid jsii-project
|
|
49
49
|
*/
|
|
50
50
|
class JsiiProject extends projen_1.cdk.JsiiProject {
|
|
51
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.JsiiProject", version: "5.
|
|
51
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.JsiiProject", version: "5.4.0" };
|
|
52
52
|
readme;
|
|
53
53
|
constructor(options) {
|
|
54
54
|
const mergedOptions = getOptions(options);
|
|
@@ -60,7 +60,7 @@ class JsiiProject extends projen_1.cdk.JsiiProject {
|
|
|
60
60
|
this.readme = new readme_1.Readme(this, {
|
|
61
61
|
description: mergedOptions.readme?.description,
|
|
62
62
|
});
|
|
63
|
-
this.readme.addSection('Getting Started', `${(0, getting_started_1.
|
|
63
|
+
this.readme.addSection('Getting Started', `${(0, getting_started_1.gettingStartedSection)(this, { nodeVersion: this.nodeVersion })}\n
|
|
64
64
|
This will:
|
|
65
65
|
* Install the dependencies
|
|
66
66
|
* Apply any projen changes
|
|
@@ -90,4 +90,4 @@ Running the tests like this will update any snapshot files, this should be revie
|
|
|
90
90
|
}
|
|
91
91
|
exports.JsiiProject = JsiiProject;
|
|
92
92
|
__exportStar(require("./jsii-project-options"), exports);
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvanNpaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBcUM7QUFFckMsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCw2REFHeUM7QUFDekMseUZBQThGO0FBQzlGLG9EQUE4RDtBQUM5RCw2RUFBZ0Y7QUFDaEYsNkRBQXlEO0FBRXpELFNBQVMsVUFBVSxDQUFDLE9BQTJCO0lBQzdDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJO1FBQ0osU0FBUyxFQUFFLElBQUk7UUFDZixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDaEMsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RCwwRkFBMEY7UUFDMUYsaUVBQWlFO1FBQ2pFLGNBQWMsRUFBRSxJQUFJO0tBQ2lCLENBQUM7SUFFeEMsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsV0FBWSxTQUFRLFlBQUcsQ0FBQyxXQUFXOztJQUM5QyxNQUFNLENBQVM7SUFFZixZQUFZLE9BQTJCO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixHQUFHLGFBQWE7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBQSwwQkFBZ0IsRUFBQyxhQUFhLENBQUM7U0FDeEIsQ0FBQyxDQUFDO1FBRTdCLElBQUksdUJBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLGlCQUFpQixFQUNqQixHQUFHLElBQUEsdUNBQXFCLEVBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7Ozs7Ozs7OzBHQVNtQyxFQUNwRyxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLFlBQVksRUFBRSxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLFNBQVMsRUFDVDs7O0NBR0wsRUFDSyxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BFLElBQUksZUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDOUMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFBLDBCQUFnQixFQUFDLElBQUksRUFBRTtnQkFDckIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlO2dCQUNoRSxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBakRILGtDQWtEQztBQUVELHlEQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNkaywgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEpzaWlQcm9qZWN0T3B0aW9ucyB9IGZyb20gJy4vanNpaS1wcm9qZWN0LW9wdGlvbnMnO1xuaW1wb3J0IHsgQ29kZU93bmVycyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvZGVvd25lcnMnO1xuaW1wb3J0IHsgQ29kZVFsIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZXFsJztcbmltcG9ydCB7XG4gIGF1dG9NZXJnZU9wdGlvbnMsXG4gIGNvbmZpZ3VyZU1lcmdpZnksXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL21lcmdpZnknO1xuaW1wb3J0IHsgREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9wdWxsLXJlcXVlc3QtdGVtcGxhdGUnO1xuaW1wb3J0IHsgUmVhZG1lLCBSZWFkbWVPcmRlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lJztcbmltcG9ydCB7IGdldHRpbmdTdGFydGVkU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZCc7XG5pbXBvcnQgeyBtZXJnZU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXJnZS1vcHRpb25zJztcblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIG5hbWUsXG4gICAgYXV0b01lcmdlOiB0cnVlLFxuICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgZ2l0aWdub3JlOiBbJy5ucG1yYycsICcudnNjb2RlJ10sXG4gICAgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzOiBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSxcbiAgICBwcm9qZW5yY1RzOiB0cnVlLFxuICAgIC8vIGF1dGhlbnRpY2F0ZSBhcyB0aGUgR2l0SHViIEFwcCwgc28gbWVyZ2lmeSBjYW4gYXBwcm92ZSB1cGdyYWRlIHB1bGwgcmVxdWVzdHNcbiAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoe30pLFxuICAgIC8vIHRzLWplc3Qgc2tpcHMgdHlwZS1jaGVja2luZyB1bmRlciB0aGUgaXNvbGF0ZWRNb2R1bGVzIHNldHRpbmcgb2YgdGhlIGpzaWkgZGV2IHRzY29uZmlnLFxuICAgIC8vIGFuZCBqc2lpIG9ubHkgY29tcGlsZXMgc3JjLCBzbyB0eXBlLWNoZWNrIHRoZSB0ZXN0IHN1aXRlIGZpcnN0XG4gICAgdHlwZWNoZWNrVGVzdHM6IHRydWUsXG4gIH0gc2F0aXNmaWVzIFBhcnRpYWw8SnNpaVByb2plY3RPcHRpb25zPjtcblxuICByZXR1cm4gbWVyZ2VPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBIEpTSUkgcHJvamVjdCBpbiBUeXBlU2NyaXB0XG4gKlxuICpcbiAqIEBwamlkIGpzaWktcHJvamVjdFxuICovXG5leHBvcnQgY2xhc3MgSnNpaVByb2plY3QgZXh0ZW5kcyBjZGsuSnNpaVByb2plY3Qge1xuICByZWFkbWU6IFJlYWRtZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgICBhdXRvTWVyZ2VPcHRpb25zOiBhdXRvTWVyZ2VPcHRpb25zKG1lcmdlZE9wdGlvbnMpLFxuICAgIH0gYXMgY2RrLkpzaWlQcm9qZWN0T3B0aW9ucyk7XG5cbiAgICBuZXcgQ29kZU93bmVycyh0aGlzLCBtZXJnZWRPcHRpb25zLmNvZGVPd25lcnMpO1xuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgIGAke2dldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzLCB7IG5vZGVWZXJzaW9uOiB0aGlzLm5vZGVWZXJzaW9uIH0pfVxcblxuVGhpcyB3aWxsOlxuKiBJbnN0YWxsIHRoZSBkZXBlbmRlbmNpZXNcbiogQXBwbHkgYW55IHByb2plbiBjaGFuZ2VzXG4qIFJ1biB0ZXN0c1xuKiBQYWNrYWdlIHByb2plY3QgbG9jYWxseVxuXG5BbnkgZmlsZXMgY2hhbmdlZCBieSBwcm9qZW4gc2hvdWxkIGJlIGNvbW1pdHRlZCB0byBnaXQuXG5cblJ1bm5pbmcgdGhlIHRlc3RzIGxpa2UgdGhpcyB3aWxsIHVwZGF0ZSBhbnkgc25hcHNob3QgZmlsZXMsIHRoaXMgc2hvdWxkIGJlIHJldmlld2VkIGFuZCBjb21taXR0ZWQgdG8gZ2l0LmAsXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5JTlRST0RVQ1RJT04gfSxcbiAgICApO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnVGVzdGluZycsXG4gICAgICBgVHlwZXMgb2YgdGVzdGluZzpcbiogU25hcHNob3QgLSBwcm9qZW4gcHJvamVjdCBvdXRwdXRzIGFyZSBzdG9yZWQgYXMgYSBzbmFwc2hvdCBpbiB0aGUgY29ycmVzcG9uZGluZyBcXGBfX3NuYXBzaG90c19fXFxgIGRpcmVjdG9yeS4gV2hlbiB0aGUgcHJvamVjdCBjaGFuZ2VzIHRoZW4gaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGVzZSBzbmFwc2hvdHMgY2hhbmdlIHRvbyBhbmQgc2hvdWxkIGJlIHJldmlld2VkIGNvbW1pdHRlZCBhbG9uZ3NpZGUgdGhlIHByb2plY3QuXG4qIFVuaXQgdGVzdHMgLSB0aGVzZSBhc3NlcnQgb24gc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcHJvamVjdCBhbmQgc2hvdWxkIGJlIHdyaXR0ZW4gZm9yIGFueSBuZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC5cbmAsXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5VU0FHRSB9LFxuICAgICk7XG4gICAgaWYgKChtZXJnZWRPcHRpb25zLmNvZGVxbCA/PyB0cnVlKSAmJiB0aGlzLmdpdGh1Yj8ud29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgbmV3IENvZGVRbCh0aGlzLmdpdGh1Yiwge1xuICAgICAgICBicmFuY2hlczogW21lcmdlZE9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2hdLFxuICAgICAgICBsYW5ndWFnZXM6IFsnamF2YXNjcmlwdC10eXBlc2NyaXB0JywgJ2FjdGlvbnMnXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hdXRvTWVyZ2UpIHtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL2pzaWktcHJvamVjdC1vcHRpb25zJztcbiJdfQ==
|
|
@@ -47,7 +47,7 @@ function getOptions(options) {
|
|
|
47
47
|
* @pjid npm-package
|
|
48
48
|
*/
|
|
49
49
|
class NpmPackage extends projen_1.typescript.TypeScriptProject {
|
|
50
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.NpmPackage", version: "5.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.NpmPackage", version: "5.4.0" };
|
|
51
51
|
readme;
|
|
52
52
|
constructor(options) {
|
|
53
53
|
const mergedOptions = getOptions(options);
|
|
@@ -60,9 +60,7 @@ class NpmPackage extends projen_1.typescript.TypeScriptProject {
|
|
|
60
60
|
this.readme = new readme_1.Readme(this, {
|
|
61
61
|
description: mergedOptions.readme?.description,
|
|
62
62
|
});
|
|
63
|
-
this.readme.addSection('Getting Started', (0, getting_started_1.
|
|
64
|
-
order: readme_1.ReadmeOrder.INTRODUCTION,
|
|
65
|
-
});
|
|
63
|
+
this.readme.addSection('Getting Started', (0, getting_started_1.gettingStartedSection)(this, { nodeVersion: this.nodeVersion }), { order: readme_1.ReadmeOrder.INTRODUCTION });
|
|
66
64
|
if (this.autoMerge) {
|
|
67
65
|
(0, mergify_1.configureMergify)(this, {
|
|
68
66
|
approvedReviews: mergedOptions.autoMergeOptions?.approvedReviews,
|
|
@@ -73,4 +71,4 @@ class NpmPackage extends projen_1.typescript.TypeScriptProject {
|
|
|
73
71
|
}
|
|
74
72
|
exports.NpmPackage = NpmPackage;
|
|
75
73
|
__exportStar(require("./npm-package-options"), exports);
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvbnBtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyw2Q0FBNkM7QUFDN0MsbUVBQWdFO0FBQ2hFLDZEQUd5QztBQUN6Qyx5RkFBOEY7QUFDOUYsb0RBQThEO0FBQzlELDZFQUFnRjtBQUNoRiw2REFBeUQ7QUFFekQsU0FBUyxVQUFVLENBQUMsT0FBMEI7SUFDNUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV6QixNQUFNLFFBQVEsR0FBRztRQUNmLElBQUk7UUFDSixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLGFBQWEsRUFBRTtZQUNiLFNBQVMsRUFBRSxLQUFLO1NBQ2pCO1FBQ0QsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUNoQywyQkFBMkIsRUFBRSxxREFBNkI7UUFDMUQsVUFBVSxFQUFFLElBQUk7UUFDaEIsc0dBQXNHO1FBQ3RHLGNBQWMsRUFBRSxJQUFJO0tBQ2dCLENBQUM7SUFFdkMsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsVUFBVyxTQUFRLG1CQUFVLENBQUMsaUJBQWlCOztJQUMxRCxNQUFNLENBQVM7SUFFZixZQUFZLE9BQTBCO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixHQUFHLGFBQWE7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBQSwwQkFBZ0IsRUFBQyxhQUFhLENBQUM7U0FDWCxDQUFDLENBQUM7UUFFMUMsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxzQkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLGlCQUFpQixFQUNqQixJQUFBLHVDQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDOUQsRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FDcEMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUEsMEJBQWdCLEVBQUMsSUFBSSxFQUFFO2dCQUNyQixlQUFlLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGVBQWU7Z0JBQ2hFLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUEzQkgsZ0NBNEJDO0FBRUQsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZXNjcmlwdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBOcG1QYWNrYWdlT3B0aW9ucyB9IGZyb20gJy4vbnBtLXBhY2thZ2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBOcG1DaXJjbGVDaSB9IGZyb20gJy4uLy4uL2NpcmNsZWNpJztcbmltcG9ydCB7IENvZGVPd25lcnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2Rlb3duZXJzJztcbmltcG9ydCB7XG4gIGF1dG9NZXJnZU9wdGlvbnMsXG4gIGNvbmZpZ3VyZU1lcmdpZnksXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL21lcmdpZnknO1xuaW1wb3J0IHsgREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9wdWxsLXJlcXVlc3QtdGVtcGxhdGUnO1xuaW1wb3J0IHsgUmVhZG1lLCBSZWFkbWVPcmRlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lJztcbmltcG9ydCB7IGdldHRpbmdTdGFydGVkU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZCc7XG5pbXBvcnQgeyBtZXJnZU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXJnZS1vcHRpb25zJztcblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zOiBOcG1QYWNrYWdlT3B0aW9ucykge1xuICBjb25zdCB7IG5hbWUgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgbmFtZSxcbiAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgIHdvcmtmbG93czogZmFsc2UsXG4gICAgfSxcbiAgICBnaXRpZ25vcmU6IFsnLm5wbXJjJywgJy52c2NvZGUnXSxcbiAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFLFxuICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgLy8gdHMtamVzdCBvbmx5IHJlcG9ydHMgdHlwZSBlcnJvcnMgaW4gdGhlIGZpbGVzIGEgdGVzdCBydW4gbG9hZHMsIHNvIHR5cGUtY2hlY2sgdGhlIHdob2xlIHN1aXRlIGZpcnN0XG4gICAgdHlwZWNoZWNrVGVzdHM6IHRydWUsXG4gIH0gc2F0aXNmaWVzIFBhcnRpYWw8TnBtUGFja2FnZU9wdGlvbnM+O1xuXG4gIHJldHVybiBtZXJnZU9wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEEgTlBNL25vZGUgcGFja2FnZSBpbiBUeXBlU2NyaXB0XG4gKlxuICpcbiAqIEBwamlkIG5wbS1wYWNrYWdlXG4gKi9cbmV4cG9ydCBjbGFzcyBOcG1QYWNrYWdlIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCB7XG4gIHJlYWRtZTogUmVhZG1lO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5wbVBhY2thZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgICAgYXV0b01lcmdlT3B0aW9uczogYXV0b01lcmdlT3B0aW9ucyhtZXJnZWRPcHRpb25zKSxcbiAgICB9IGFzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgbmV3IE5wbUNpcmNsZUNpKHRoaXMpO1xuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgIGdldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzLCB7IG5vZGVWZXJzaW9uOiB0aGlzLm5vZGVWZXJzaW9uIH0pLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuSU5UUk9EVUNUSU9OIH0sXG4gICAgKTtcbiAgICBpZiAodGhpcy5hdXRvTWVyZ2UpIHtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL25wbS1wYWNrYWdlLW9wdGlvbnMnO1xuIl19
|
|
@@ -43,7 +43,7 @@ function getOptions(options) {
|
|
|
43
43
|
* @pjid python-package
|
|
44
44
|
*/
|
|
45
45
|
class PythonPackage extends python_1.PythonProject {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.PythonPackage", version: "5.
|
|
46
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.PythonPackage", version: "5.4.0" };
|
|
47
47
|
autoMerge;
|
|
48
48
|
readme;
|
|
49
49
|
constructor(options) {
|
|
@@ -58,7 +58,7 @@ class PythonPackage extends python_1.PythonProject {
|
|
|
58
58
|
this.readme = new readme_1.Readme(this, {
|
|
59
59
|
description: mergedOptions.readme?.description,
|
|
60
60
|
});
|
|
61
|
-
this.readme.addSection('Getting Started', (0, getting_started_1.
|
|
61
|
+
this.readme.addSection('Getting Started', (0, getting_started_1.gettingStartedSection)(this), {
|
|
62
62
|
order: readme_1.ReadmeOrder.INTRODUCTION,
|
|
63
63
|
});
|
|
64
64
|
if ((mergedOptions.codeql ?? true) && this.github?.workflowsEnabled) {
|
|
@@ -78,4 +78,4 @@ class PythonPackage extends python_1.PythonProject {
|
|
|
78
78
|
}
|
|
79
79
|
exports.PythonPackage = PythonPackage;
|
|
80
80
|
__exportStar(require("./python-package-options"), exports);
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvcHl0aG9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnQztBQUNoQyw4Q0FBd0U7QUFFeEUsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCw2REFHeUM7QUFDekMseUZBQThGO0FBQzlGLG9EQUE4RDtBQUM5RCw2RUFBZ0Y7QUFDaEYsNkRBQXlEO0FBRXpELFNBQVMsVUFBVSxDQUFDLE9BQTZCO0lBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJO1FBQ0osbUJBQW1CLEVBQUUsSUFBSTtRQUN6QiwyQkFBMkIsRUFBRSxxREFBNkI7UUFDMUQsK0VBQStFO1FBQy9FLGlCQUFpQixFQUFFLGVBQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0tBQ2hCLENBQUM7SUFFMUMsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsYUFBYyxTQUFRLHNCQUFhOztJQUNyQyxTQUFTLENBQW9CO0lBQ3RDLE1BQU0sQ0FBUztJQUVmLFlBQVksT0FBNkI7UUFDdkMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLEtBQUssQ0FBQztZQUNKLEdBQUcsYUFBYTtTQUNPLENBQUMsQ0FBQztRQUUzQixJQUFJLHVCQUFVLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUNqQyxHQUFHLENBQUMsYUFBYSxDQUFDLDJCQUEyQixJQUFJLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBQSx1Q0FBcUIsRUFBQyxJQUFJLENBQUMsRUFBRTtZQUNyRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLGVBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN0QixTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsQ0FDbkMsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFBLDBCQUFnQixFQUFDLGFBQWEsQ0FBQyxDQUNoQyxDQUFDO1lBQ0YsSUFBQSwwQkFBZ0IsRUFBQyxJQUFJLEVBQUU7Z0JBQ3JCLGVBQWUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZUFBZTtnQkFDaEUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXZDSCxzQ0F3Q0M7QUFFRCwyREFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUHl0aG9uUHJvamVjdCwgUHl0aG9uUHJvamVjdE9wdGlvbnMgfSBmcm9tICdwcm9qZW4vbGliL3B5dGhvbic7XG5pbXBvcnQgeyBQeXRob25QYWNrYWdlT3B0aW9ucyB9IGZyb20gJy4vcHl0aG9uLXBhY2thZ2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBDb2RlT3duZXJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZW93bmVycyc7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2RlcWwnO1xuaW1wb3J0IHtcbiAgYXV0b01lcmdlT3B0aW9ucyxcbiAgY29uZmlndXJlTWVyZ2lmeSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvbWVyZ2lmeSc7XG5pbXBvcnQgeyBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL3B1bGwtcmVxdWVzdC10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUnO1xuaW1wb3J0IHsgZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUvZ2V0dGluZy1zdGFydGVkJztcbmltcG9ydCB7IG1lcmdlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLW9wdGlvbnMnO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnM6IFB5dGhvblBhY2thZ2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBuYW1lLFxuICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGU6IHRydWUsXG4gICAgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzOiBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSxcbiAgICAvLyBhdXRoZW50aWNhdGUgYXMgdGhlIEdpdEh1YiBBcHAsIHNvIG1lcmdpZnkgY2FuIGFwcHJvdmUgdXBncmFkZSBwdWxsIHJlcXVlc3RzXG4gICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKHt9KSxcbiAgfSBzYXRpc2ZpZXMgUGFydGlhbDxQeXRob25QYWNrYWdlT3B0aW9ucz47XG5cbiAgcmV0dXJuIG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQSBQeXRob24gcGFja2FnZVxuICpcbiAqXG4gKiBAcGppZCBweXRob24tcGFja2FnZVxuICovXG5leHBvcnQgY2xhc3MgUHl0aG9uUGFja2FnZSBleHRlbmRzIFB5dGhvblByb2plY3Qge1xuICByZWFkb25seSBhdXRvTWVyZ2U/OiBnaXRodWIuQXV0b01lcmdlO1xuICByZWFkbWU6IFJlYWRtZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQeXRob25QYWNrYWdlT3B0aW9ucykge1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICB9IGFzIFB5dGhvblByb2plY3RPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgaWYgKG1lcmdlZE9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmdpdGh1Yj8uYWRkUHVsbFJlcXVlc3RUZW1wbGF0ZShcbiAgICAgICAgLi4uKG1lcmdlZE9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzID8/IFtdKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oJ0dldHRpbmcgU3RhcnRlZCcsIGdldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzKSwge1xuICAgICAgb3JkZXI6IFJlYWRtZU9yZGVyLklOVFJPRFVDVElPTixcbiAgICB9KTtcbiAgICBpZiAoKG1lcmdlZE9wdGlvbnMuY29kZXFsID8/IHRydWUpICYmIHRoaXMuZ2l0aHViPy53b3JrZmxvd3NFbmFibGVkKSB7XG4gICAgICBuZXcgQ29kZVFsKHRoaXMuZ2l0aHViLCB7XG4gICAgICAgIGxhbmd1YWdlczogWydweXRob24nLCAnYWN0aW9ucyddLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHByb2plbiBvbmx5IHdpcmVzIHRoZSBtZXJnZSBxdWV1ZSB1cCBmb3Igbm9kZSBwcm9qZWN0c1xuICAgIGlmICgobWVyZ2VkT3B0aW9ucy5hdXRvTWVyZ2UgPz8gdHJ1ZSkgJiYgdGhpcy5naXRodWI/Lm1lcmdpZnkpIHtcbiAgICAgIHRoaXMuYXV0b01lcmdlID0gbmV3IGdpdGh1Yi5BdXRvTWVyZ2UoXG4gICAgICAgIHRoaXMuZ2l0aHViLFxuICAgICAgICBhdXRvTWVyZ2VPcHRpb25zKG1lcmdlZE9wdGlvbnMpLFxuICAgICAgKTtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL3B5dGhvbi1wYWNrYWdlLW9wdGlvbnMnO1xuIl19
|