projen-modules 5.3.0 → 5.5.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 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\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\nAll 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.\n\nThe repository must be configured as below so that nothing can be merged without going through the queue.\n\n### Mergify\n\nInstall the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.\n\n### Pull request settings\n\nIn **Settings → General → Pull Requests**:\n* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.\n* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.\n* Tick **Automatically delete head branches**.\n\n### Actions settings\n\nIn **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.\n\n### Code scanning\n\nCodeQL 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.\n\n### Branch ruleset\n\nIn **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:\n* **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.\n* **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.\n* **Restrict deletions** and **Block force pushes**.\n* **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.\n* **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.\n* **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.\n\nDo not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.\n\nIf the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.\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```"
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## Contributing\n\nPull request titles must follow [Conventional Commits](https://www.conventionalcommits.org), with one of the types `feat`, `fix` or `chore`, such as `feat: describe the change`. The **Validate PR title** check fails until the title does.\n\nOnce a pull request is approved, or is opened by `daveshepherd`, and its checks pass, the [Mergify](https://mergify.com) merge queue squash merges it, with its title as the commit message. Draft pull requests and those labelled `do-not-merge` are not merged.\n\nThe type decides the next release: `feat` releases a minor version and `fix` a patch version, while a breaking change, marked by `!` after the type (such as `feat!: ...`) or a `BREAKING CHANGE:` footer, releases a major version. Other types still release a patch version. While the version is below 1.0.0, a breaking change releases a minor version and `feat` a patch version.\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",
@@ -170,7 +170,7 @@
170
170
  },
171
171
  "locationInModule": {
172
172
  "filename": "src/projects/cdk-ts/index.ts",
173
- "line": 62
173
+ "line": 63
174
174
  },
175
175
  "parameters": [
176
176
  {
@@ -184,7 +184,7 @@
184
184
  "kind": "class",
185
185
  "locationInModule": {
186
186
  "filename": "src/projects/cdk-ts/index.ts",
187
- "line": 59
187
+ "line": 60
188
188
  },
189
189
  "name": "CdkTypeScriptApp",
190
190
  "properties": [
@@ -194,7 +194,7 @@
194
194
  },
195
195
  "locationInModule": {
196
196
  "filename": "src/projects/cdk-ts/index.ts",
197
- "line": 60
197
+ "line": 61
198
198
  },
199
199
  "name": "readme",
200
200
  "type": {
@@ -3787,7 +3787,7 @@
3787
3787
  },
3788
3788
  "locationInModule": {
3789
3789
  "filename": "src/projects/jsii/index.ts",
3790
- "line": 43
3790
+ "line": 44
3791
3791
  },
3792
3792
  "parameters": [
3793
3793
  {
@@ -3801,7 +3801,7 @@
3801
3801
  "kind": "class",
3802
3802
  "locationInModule": {
3803
3803
  "filename": "src/projects/jsii/index.ts",
3804
- "line": 40
3804
+ "line": 41
3805
3805
  },
3806
3806
  "name": "JsiiProject",
3807
3807
  "properties": [
@@ -3811,7 +3811,7 @@
3811
3811
  },
3812
3812
  "locationInModule": {
3813
3813
  "filename": "src/projects/jsii/index.ts",
3814
- "line": 41
3814
+ "line": 42
3815
3815
  },
3816
3816
  "name": "readme",
3817
3817
  "type": {
@@ -7113,7 +7113,7 @@
7113
7113
  },
7114
7114
  "locationInModule": {
7115
7115
  "filename": "src/projects/npm/index.ts",
7116
- "line": 42
7116
+ "line": 43
7117
7117
  },
7118
7118
  "parameters": [
7119
7119
  {
@@ -7127,7 +7127,7 @@
7127
7127
  "kind": "class",
7128
7128
  "locationInModule": {
7129
7129
  "filename": "src/projects/npm/index.ts",
7130
- "line": 39
7130
+ "line": 40
7131
7131
  },
7132
7132
  "name": "NpmPackage",
7133
7133
  "properties": [
@@ -7137,7 +7137,7 @@
7137
7137
  },
7138
7138
  "locationInModule": {
7139
7139
  "filename": "src/projects/npm/index.ts",
7140
- "line": 40
7140
+ "line": 41
7141
7141
  },
7142
7142
  "name": "readme",
7143
7143
  "type": {
@@ -10144,7 +10144,7 @@
10144
10144
  },
10145
10145
  "locationInModule": {
10146
10146
  "filename": "src/projects/python/index.ts",
10147
- "line": 39
10147
+ "line": 40
10148
10148
  },
10149
10149
  "parameters": [
10150
10150
  {
@@ -10158,7 +10158,7 @@
10158
10158
  "kind": "class",
10159
10159
  "locationInModule": {
10160
10160
  "filename": "src/projects/python/index.ts",
10161
- "line": 35
10161
+ "line": 36
10162
10162
  },
10163
10163
  "name": "PythonPackage",
10164
10164
  "properties": [
@@ -10169,7 +10169,7 @@
10169
10169
  "immutable": true,
10170
10170
  "locationInModule": {
10171
10171
  "filename": "src/projects/python/index.ts",
10172
- "line": 36
10172
+ "line": 37
10173
10173
  },
10174
10174
  "name": "autoMerge",
10175
10175
  "optional": true,
@@ -10183,7 +10183,7 @@
10183
10183
  },
10184
10184
  "locationInModule": {
10185
10185
  "filename": "src/projects/python/index.ts",
10186
- "line": 37
10186
+ "line": 38
10187
10187
  },
10188
10188
  "name": "readme",
10189
10189
  "type": {
@@ -11405,7 +11405,7 @@
11405
11405
  },
11406
11406
  "locationInModule": {
11407
11407
  "filename": "src/components/readme/index.ts",
11408
- "line": 62
11408
+ "line": 67
11409
11409
  },
11410
11410
  "parameters": [
11411
11411
  {
@@ -11426,7 +11426,7 @@
11426
11426
  "kind": "class",
11427
11427
  "locationInModule": {
11428
11428
  "filename": "src/components/readme/index.ts",
11429
- "line": 51
11429
+ "line": 56
11430
11430
  },
11431
11431
  "methods": [
11432
11432
  {
@@ -11436,7 +11436,7 @@
11436
11436
  },
11437
11437
  "locationInModule": {
11438
11438
  "filename": "src/components/readme/index.ts",
11439
- "line": 55
11439
+ "line": 60
11440
11440
  },
11441
11441
  "name": "of",
11442
11442
  "parameters": [
@@ -11463,7 +11463,7 @@
11463
11463
  },
11464
11464
  "locationInModule": {
11465
11465
  "filename": "src/components/readme/index.ts",
11466
- "line": 86
11466
+ "line": 91
11467
11467
  },
11468
11468
  "name": "addSection",
11469
11469
  "parameters": [
@@ -11501,7 +11501,7 @@
11501
11501
  },
11502
11502
  "locationInModule": {
11503
11503
  "filename": "src/components/readme/index.ts",
11504
- "line": 109
11504
+ "line": 114
11505
11505
  },
11506
11506
  "name": "removeSection",
11507
11507
  "parameters": [
@@ -11525,7 +11525,7 @@
11525
11525
  },
11526
11526
  "locationInModule": {
11527
11527
  "filename": "src/components/readme/index.ts",
11528
- "line": 126
11528
+ "line": 131
11529
11529
  },
11530
11530
  "name": "synthesizeContent",
11531
11531
  "overrides": "projen.FileBase",
@@ -11552,7 +11552,7 @@
11552
11552
  },
11553
11553
  "locationInModule": {
11554
11554
  "filename": "src/components/readme/index.ts",
11555
- "line": 121
11555
+ "line": 126
11556
11556
  },
11557
11557
  "name": "tryFindSection",
11558
11558
  "parameters": [
@@ -11581,7 +11581,7 @@
11581
11581
  "immutable": true,
11582
11582
  "locationInModule": {
11583
11583
  "filename": "src/components/readme/index.ts",
11584
- "line": 77
11584
+ "line": 82
11585
11585
  },
11586
11586
  "name": "sections",
11587
11587
  "type": {
@@ -11599,7 +11599,7 @@
11599
11599
  },
11600
11600
  "locationInModule": {
11601
11601
  "filename": "src/components/readme/index.ts",
11602
- "line": 59
11602
+ "line": 64
11603
11603
  },
11604
11604
  "name": "description",
11605
11605
  "optional": true,
@@ -11658,6 +11658,23 @@
11658
11658
  },
11659
11659
  "name": "ReadmeOrder",
11660
11660
  "properties": [
11661
+ {
11662
+ "const": true,
11663
+ "docs": {
11664
+ "stability": "stable",
11665
+ "summary": "How to contribute, such as the pull request title format and how pull requests are merged."
11666
+ },
11667
+ "immutable": true,
11668
+ "locationInModule": {
11669
+ "filename": "src/components/readme/index.ts",
11670
+ "line": 42
11671
+ },
11672
+ "name": "CONTRIBUTING",
11673
+ "static": true,
11674
+ "type": {
11675
+ "primitive": "number"
11676
+ }
11677
+ },
11661
11678
  {
11662
11679
  "const": true,
11663
11680
  "docs": {
@@ -11701,7 +11718,7 @@
11701
11718
  "immutable": true,
11702
11719
  "locationInModule": {
11703
11720
  "filename": "src/components/readme/index.ts",
11704
- "line": 41
11721
+ "line": 46
11705
11722
  },
11706
11723
  "name": "REFERENCE",
11707
11724
  "static": true,
@@ -11843,6 +11860,6 @@
11843
11860
  "symbolId": "src/components/readme/elements/section:SectionOptions"
11844
11861
  }
11845
11862
  },
11846
- "version": "5.3.0",
11847
- "fingerprint": "4vPFaM2oHZpa8Kck0X67umXp5M+b7g4QbyIXpr6KaQ0="
11863
+ "version": "5.5.0",
11864
+ "fingerprint": "RTUKPAK3v6ZEBDtVFO1FSCcMsxP8abOp0CXWHe44we0="
11848
11865
  }
package/API.md CHANGED
@@ -14727,6 +14727,7 @@ Orders of the bands of sections in the README, leaving room for sections in betw
14727
14727
 
14728
14728
  | **Name** | **Type** | **Description** |
14729
14729
  | --- | --- | --- |
14730
+ | <code><a href="#projen-modules.ReadmeOrder.property.CONTRIBUTING">CONTRIBUTING</a></code> | <code>number</code> | How to contribute, such as the pull request title format and how pull requests are merged. |
14730
14731
  | <code><a href="#projen-modules.ReadmeOrder.property.DEFAULT">DEFAULT</a></code> | <code>number</code> | Sections added without an order. |
14731
14732
  | <code><a href="#projen-modules.ReadmeOrder.property.INTRODUCTION">INTRODUCTION</a></code> | <code>number</code> | Sections a reader needs first, such as getting started. |
14732
14733
  | <code><a href="#projen-modules.ReadmeOrder.property.REFERENCE">REFERENCE</a></code> | <code>number</code> | Reference material, such as repository configuration and known issues. |
@@ -14734,6 +14735,18 @@ Orders of the bands of sections in the README, leaving room for sections in betw
14734
14735
 
14735
14736
  ---
14736
14737
 
14738
+ ##### `CONTRIBUTING`<sup>Required</sup> <a name="CONTRIBUTING" id="projen-modules.ReadmeOrder.property.CONTRIBUTING"></a>
14739
+
14740
+ ```typescript
14741
+ public readonly CONTRIBUTING: number;
14742
+ ```
14743
+
14744
+ - *Type:* number
14745
+
14746
+ How to contribute, such as the pull request title format and how pull requests are merged.
14747
+
14748
+ ---
14749
+
14737
14750
  ##### `DEFAULT`<sup>Required</sup> <a name="DEFAULT" id="projen-modules.ReadmeOrder.property.DEFAULT"></a>
14738
14751
 
14739
14752
  ```typescript
package/README.md CHANGED
@@ -59,44 +59,17 @@ All source is located in `src` and is grouped by:
59
59
 
60
60
  `test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section).
61
61
 
62
- ## GitHub Configuration
63
-
64
- 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.
65
-
66
- The repository must be configured as below so that nothing can be merged without going through the queue.
67
-
68
- ### Mergify
69
-
70
- Install the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.
71
-
72
- ### Pull request settings
62
+ ## Contributing
73
63
 
74
- In **Settings → General → Pull Requests**:
75
- * Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.
76
- * Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
77
- * Tick **Automatically delete head branches**.
64
+ Pull request titles must follow [Conventional Commits](https://www.conventionalcommits.org), with one of the types `feat`, `fix` or `chore`, such as `feat: describe the change`. The **Validate PR title** check fails until the title does.
78
65
 
79
- ### Actions settings
66
+ Once a pull request is approved, or is opened by `daveshepherd`, and its checks pass, the [Mergify](https://mergify.com) merge queue squash merges it, with its title as the commit message. Draft pull requests and those labelled `do-not-merge` are not merged.
80
67
 
81
- 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.
68
+ The type decides the next release: `feat` releases a minor version and `fix` a patch version, while a breaking change, marked by `!` after the type (such as `feat!: ...`) or a `BREAKING CHANGE:` footer, releases a major version. Other types still release a patch version. While the version is below 1.0.0, a breaking change releases a minor version and `feat` a patch version.
82
69
 
83
- ### Code scanning
84
-
85
- 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.
86
-
87
- ### Branch ruleset
88
-
89
- In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:
90
- * **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.
91
- * **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.
92
- * **Restrict deletions** and **Block force pushes**.
93
- * **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.
94
- * **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.
95
- * **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.
96
-
97
- Do not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.
70
+ ## GitHub Configuration
98
71
 
99
- If the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.
72
+ 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).
100
73
 
101
74
  ## Known Issues
102
75
 
@@ -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.
@@ -0,0 +1,33 @@
1
+ import { Component, github, Project, ReleasableCommits } from 'projen';
2
+ export interface ContributingOptions {
3
+ /**
4
+ * The project's GitHub options, which configure the pull request title check
5
+ */
6
+ readonly githubOptions?: github.GitHubOptions;
7
+ /**
8
+ * The project's releasable commits, which decide whether other types release
9
+ */
10
+ readonly releasableCommits?: ReleasableCommits;
11
+ }
12
+ /**
13
+ * The Contributing section of the README, describing the pull request title
14
+ * check and the merge queue that are configured
15
+ */
16
+ export declare class Contributing extends Component {
17
+ /**
18
+ * The project's Contributing section, created if it does not have one yet
19
+ */
20
+ static of(project: Project): Contributing;
21
+ private pullRequestTitle?;
22
+ private mergeQueue?;
23
+ private constructor();
24
+ /**
25
+ * Describes the pull request title check, if the project runs it
26
+ */
27
+ configurePullRequestTitle(options: ContributingOptions): void;
28
+ /**
29
+ * Describes how pull requests are merged by the merge queue
30
+ */
31
+ configureMergeQueue(description: string): void;
32
+ private render;
33
+ }
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Contributing = void 0;
4
+ const projen_1 = require("projen");
5
+ const javascript_1 = require("projen/lib/javascript");
6
+ const format_1 = require("./format");
7
+ const readme_1 = require("../readme");
8
+ // projen's default pull request title types; its PullRequestLint keeps its
9
+ // options private, so they are read from the project's options instead
10
+ const DEFAULT_TYPES = ['feat', 'fix', 'chore'];
11
+ function titleParagraph(title) {
12
+ const scope = title.scopes.length
13
+ ? `${title.requireScope ? 'and a scope' : 'and, optionally, a scope'} from ${(0, format_1.formatList)(title.scopes)}`
14
+ : title.requireScope
15
+ ? 'and a scope'
16
+ : '';
17
+ const exampleScope = title.requireScope || title.scopes.length
18
+ ? `(${title.scopes[0] ?? 'scope'})`
19
+ : '';
20
+ return `Pull request titles must follow [Conventional Commits](https://www.conventionalcommits.org), with one of the types ${(0, format_1.formatList)(title.types)}${scope ? ` ${scope}` : ''}, such as \`${title.types[0]}${exampleScope}: describe the change\`. The **Validate PR title** check fails until the title does.`;
21
+ }
22
+ function releaseParagraph(title, mergeQueue) {
23
+ const bumps = [
24
+ ...(title.types.includes('feat') ? ['`feat` releases a minor version'] : []),
25
+ ...(title.types.includes('fix')
26
+ ? [`\`fix\`${title.types.includes('feat') ? '' : ' releases'} a patch version`]
27
+ : []),
28
+ ];
29
+ const otherTypes = title.types.filter((t) => t !== 'feat' && t !== 'fix');
30
+ const others = !otherTypes.length
31
+ ? ''
32
+ : title.everyCommitReleases
33
+ ? ' Other types still release a patch version.'
34
+ : ' Other types only release a patch version if `releasableCommits` counts them.';
35
+ const intro = mergeQueue
36
+ ? 'The type decides the next release'
37
+ : 'Once a pull request is squash merged with its title as the commit message, its type decides the next release';
38
+ const preMajor = title.types.includes('feat')
39
+ ? 'a breaking change releases a minor version and `feat` a patch version'
40
+ : 'a breaking change releases a minor version';
41
+ return `${intro}: ${bumps.length ? `${bumps.join(' and ')}, while ` : ''}a breaking change, marked by \`!\` after the type (such as \`${title.types[0]}!: ...\`) or a \`BREAKING CHANGE:\` footer, releases a major version.${others} While the version is below 1.0.0, ${preMajor}.`;
42
+ }
43
+ /**
44
+ * The Contributing section of the README, describing the pull request title
45
+ * check and the merge queue that are configured
46
+ */
47
+ class Contributing extends projen_1.Component {
48
+ /**
49
+ * The project's Contributing section, created if it does not have one yet
50
+ */
51
+ static of(project) {
52
+ return (project.components.find((c) => c instanceof Contributing) ?? new Contributing(project));
53
+ }
54
+ pullRequestTitle;
55
+ mergeQueue;
56
+ constructor(project) {
57
+ super(project);
58
+ }
59
+ /**
60
+ * Describes the pull request title check, if the project runs it
61
+ */
62
+ configurePullRequestTitle(options) {
63
+ const githubOptions = options.githubOptions ?? {};
64
+ const lintOptions = githubOptions.pullRequestLintOptions ?? {};
65
+ const project = this.project;
66
+ if (!project.github?.workflowsEnabled ||
67
+ !(githubOptions.pullRequestLint ?? true) ||
68
+ !(lintOptions.semanticTitle ?? true)) {
69
+ return;
70
+ }
71
+ const titleOptions = lintOptions.semanticTitleOptions ?? {};
72
+ this.pullRequestTitle = {
73
+ types: titleOptions.types ?? DEFAULT_TYPES,
74
+ requireScope: titleOptions.requireScope ?? false,
75
+ scopes: titleOptions.scopes ?? [],
76
+ release: this.project instanceof javascript_1.NodeProject &&
77
+ this.project.release !== undefined,
78
+ everyCommitReleases: options.releasableCommits === undefined,
79
+ };
80
+ this.render();
81
+ }
82
+ /**
83
+ * Describes how pull requests are merged by the merge queue
84
+ */
85
+ configureMergeQueue(description) {
86
+ this.mergeQueue = description;
87
+ this.render();
88
+ }
89
+ render() {
90
+ const paragraphs = [
91
+ ...(this.pullRequestTitle ? [titleParagraph(this.pullRequestTitle)] : []),
92
+ ...(this.mergeQueue ? [this.mergeQueue] : []),
93
+ ...(this.pullRequestTitle?.release
94
+ ? [releaseParagraph(this.pullRequestTitle, this.mergeQueue !== undefined)]
95
+ : []),
96
+ ];
97
+ if (paragraphs.length) {
98
+ readme_1.Readme.of(this.project)?.addSection(CONTRIBUTING_TITLE, paragraphs.join('\n\n'), { order: readme_1.ReadmeOrder.CONTRIBUTING });
99
+ }
100
+ }
101
+ }
102
+ exports.Contributing = Contributing;
103
+ const CONTRIBUTING_TITLE = 'Contributing';
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJpYnV0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZ2l0aHViL2NvbnRyaWJ1dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBdUU7QUFDdkUsc0RBQW9EO0FBQ3BELHFDQUFzQztBQUN0QyxzQ0FBZ0Q7QUFFaEQsMkVBQTJFO0FBQzNFLHVFQUF1RTtBQUN2RSxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFxQi9DLFNBQVMsY0FBYyxDQUFDLEtBQXVCO0lBQzdDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUMvQixDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixTQUFTLElBQUEsbUJBQVUsRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdkcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ2xCLENBQUMsQ0FBQyxhQUFhO1lBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULE1BQU0sWUFBWSxHQUNoQixLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUN2QyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRztRQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsT0FBTyxzSEFBc0gsSUFBQSxtQkFBVSxFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksc0ZBQXNGLENBQUM7QUFDcFQsQ0FBQztBQUVELFNB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QUFrQixFQUNsQixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUN2QixFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLFlBQVksRUFBRSxDQUNwQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQXRFRCxvQ0FzRUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZ2l0aHViLCBQcm9qZWN0LCBSZWxlYXNhYmxlQ29tbWl0cyB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBmb3JtYXRMaXN0IH0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHsgUmVhZG1lLCBSZWFkbWVPcmRlciB9IGZyb20gJy4uL3JlYWRtZSc7XG5cbi8vIHByb2plbidzIGRlZmF1bHQgcHVsbCByZXF1ZXN0IHRpdGxlIHR5cGVzOyBpdHMgUHVsbFJlcXVlc3RMaW50IGtlZXBzIGl0c1xuLy8gb3B0aW9ucyBwcml2YXRlLCBzbyB0aGV5IGFyZSByZWFkIGZyb20gdGhlIHByb2plY3QncyBvcHRpb25zIGluc3RlYWRcbmNvbnN0IERFRkFVTFRfVFlQRVMgPSBbJ2ZlYXQnLCAnZml4JywgJ2Nob3JlJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJpYnV0aW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIEdpdEh1YiBvcHRpb25zLCB3aGljaCBjb25maWd1cmUgdGhlIHB1bGwgcmVxdWVzdCB0aXRsZSBjaGVja1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViT3B0aW9ucz86IGdpdGh1Yi5HaXRIdWJPcHRpb25zO1xuICAvKipcbiAgICogVGhlIHByb2plY3QncyByZWxlYXNhYmxlIGNvbW1pdHMsIHdoaWNoIGRlY2lkZSB3aGV0aGVyIG90aGVyIHR5cGVzIHJlbGVhc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2FibGVDb21taXRzPzogUmVsZWFzYWJsZUNvbW1pdHM7XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdFRpdGxlIHtcbiAgcmVhZG9ubHkgdHlwZXM6IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IHJlcXVpcmVTY29wZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2NvcGVzOiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSByZWxlYXNlOiBib29sZWFuO1xuICByZWFkb25seSBldmVyeUNvbW1pdFJlbGVhc2VzOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiB0aXRsZVBhcmFncmFwaCh0aXRsZTogUHVsbFJlcXVlc3RUaXRsZSk6IHN0cmluZyB7XG4gIGNvbnN0IHNjb3BlID0gdGl0bGUuc2NvcGVzLmxlbmd0aFxuICAgID8gYCR7dGl0bGUucmVxdWlyZVNjb3BlID8gJ2FuZCBhIHNjb3BlJyA6ICdhbmQsIG9wdGlvbmFsbHksIGEgc2NvcGUnfSBmcm9tICR7Zm9ybWF0TGlzdCh0aXRsZS5zY29wZXMpfWBcbiAgICA6IHRpdGxlLnJlcXVpcmVTY29wZVxuICAgICAgPyAnYW5kIGEgc2NvcGUnXG4gICAgICA6ICcnO1xuICBjb25zdCBleGFtcGxlU2NvcGUgPVxuICAgIHRpdGxlLnJlcXVpcmVTY29wZSB8fCB0aXRsZS5zY29wZXMubGVuZ3RoXG4gICAgICA/IGAoJHt0aXRsZS5zY29wZXNbMF0gPz8gJ3Njb3BlJ30pYFxuICAgICAgOiAnJztcbiAgcmV0dXJuIGBQdWxsIHJlcXVlc3QgdGl0bGVzIG11c3QgZm9sbG93IFtDb252ZW50aW9uYWwgQ29tbWl0c10oaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcpLCB3aXRoIG9uZSBvZiB0aGUgdHlwZXMgJHtmb3JtYXRMaXN0KHRpdGxlLnR5cGVzKX0ke3Njb3BlID8gYCAke3Njb3BlfWAgOiAnJ30sIHN1Y2ggYXMgXFxgJHt0aXRsZS50eXBlc1swXX0ke2V4YW1wbGVTY29wZX06IGRlc2NyaWJlIHRoZSBjaGFuZ2VcXGAuIFRoZSAqKlZhbGlkYXRlIFBSIHRpdGxlKiogY2hlY2sgZmFpbHMgdW50aWwgdGhlIHRpdGxlIGRvZXMuYDtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZVBhcmFncmFwaCh0aXRsZTogUHVsbFJlcXVlc3RUaXRsZSwgbWVyZ2VRdWV1ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGJ1bXBzID0gW1xuICAgIC4uLih0aXRsZS50eXBlcy5pbmNsdWRlcygnZmVhdCcpID8gWydgZmVhdGAgcmVsZWFzZXMgYSBtaW5vciB2ZXJzaW9uJ10gOiBbXSksXG4gICAgLi4uKHRpdGxlLnR5cGVzLmluY2x1ZGVzKCdmaXgnKVxuICAgICAgPyBbYFxcYGZpeFxcYCR7dGl0bGUudHlwZXMuaW5jbHVkZXMoJ2ZlYXQnKSA/ICcnIDogJyByZWxlYXNlcyd9IGEgcGF0Y2ggdmVyc2lvbmBdXG4gICAgICA6IFtdKSxcbiAgXTtcbiAgY29uc3Qgb3RoZXJUeXBlcyA9IHRpdGxlLnR5cGVzLmZpbHRlcigodCkgPT4gdCAhPT0gJ2ZlYXQnICYmIHQgIT09ICdmaXgnKTtcbiAgY29uc3Qgb3RoZXJzID0gIW90aGVyVHlwZXMubGVuZ3RoXG4gICAgPyAnJ1xuICAgIDogdGl0bGUuZXZlcnlDb21taXRSZWxlYXNlc1xuICAgICAgPyAnIE90aGVyIHR5cGVzIHN0aWxsIHJlbGVhc2UgYSBwYXRjaCB2ZXJzaW9uLidcbiAgICAgIDogJyBPdGhlciB0eXBlcyBvbmx5IHJlbGVhc2UgYSBwYXRjaCB2ZXJzaW9uIGlmIGByZWxlYXNhYmxlQ29tbWl0c2AgY291bnRzIHRoZW0uJztcbiAgY29uc3QgaW50cm8gPSBtZXJnZVF1ZXVlXG4gICAgPyAnVGhlIHR5cGUgZGVjaWRlcyB0aGUgbmV4dCByZWxlYXNlJ1xuICAgIDogJ09uY2UgYSBwdWxsIHJlcXVlc3QgaXMgc3F1YXNoIG1lcmdlZCB3aXRoIGl0cyB0aXRsZSBhcyB0aGUgY29tbWl0IG1lc3NhZ2UsIGl0cyB0eXBlIGRlY2lkZXMgdGhlIG5leHQgcmVsZWFzZSc7XG4gIGNvbnN0IHByZU1ham9yID0gdGl0bGUudHlwZXMuaW5jbHVkZXMoJ2ZlYXQnKVxuICAgID8gJ2EgYnJlYWtpbmcgY2hhbmdlIHJlbGVhc2VzIGEgbWlub3IgdmVyc2lvbiBhbmQgYGZlYXRgIGEgcGF0Y2ggdmVyc2lvbidcbiAgICA6ICdhIGJyZWFraW5nIGNoYW5nZSByZWxlYXNlcyBhIG1pbm9yIHZlcnNpb24nO1xuICByZXR1cm4gYCR7aW50cm99OiAke2J1bXBzLmxlbmd0aCA/IGAke2J1bXBzLmpvaW4oJyBhbmQgJyl9LCB3aGlsZSBgIDogJyd9YSBicmVha2luZyBjaGFuZ2UsIG1hcmtlZCBieSBcXGAhXFxgIGFmdGVyIHRoZSB0eXBlIChzdWNoIGFzIFxcYCR7dGl0bGUudHlwZXNbMF19ITogLi4uXFxgKSBvciBhIFxcYEJSRUFLSU5HIENIQU5HRTpcXGAgZm9vdGVyLCByZWxlYXNlcyBhIG1ham9yIHZlcnNpb24uJHtvdGhlcnN9IFdoaWxlIHRoZSB2ZXJzaW9uIGlzIGJlbG93IDEuMC4wLCAke3ByZU1ham9yfS5gO1xufVxuXG4vKipcbiAqIFRoZSBDb250cmlidXRpbmcgc2VjdGlvbiBvZiB0aGUgUkVBRE1FLCBkZXNjcmliaW5nIHRoZSBwdWxsIHJlcXVlc3QgdGl0bGVcbiAqIGNoZWNrIGFuZCB0aGUgbWVyZ2UgcXVldWUgdGhhdCBhcmUgY29uZmlndXJlZFxuICovXG5leHBvcnQgY2xhc3MgQ29udHJpYnV0aW5nIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgQ29udHJpYnV0aW5nIHNlY3Rpb24sIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgaGF2ZSBvbmUgeWV0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBDb250cmlidXRpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChcbiAgICAgICAgKGMpOiBjIGlzIENvbnRyaWJ1dGluZyA9PiBjIGluc3RhbmNlb2YgQ29udHJpYnV0aW5nLFxuICAgICAgKSA/PyBuZXcgQ29udHJpYnV0aW5nKHByb2plY3QpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVsbFJlcXVlc3RUaXRsZT86IFB1bGxSZXF1ZXN0VGl0bGU7XG4gIHByaXZhdGUgbWVyZ2VRdWV1ZT86IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHB1bGwgcmVxdWVzdCB0aXRsZSBjaGVjaywgaWYgdGhlIHByb2plY3QgcnVucyBpdFxuICAgKi9cbiAgY29uZmlndXJlUHVsbFJlcXVlc3RUaXRsZShvcHRpb25zOiBDb250cmlidXRpbmdPcHRpb25zKSB7XG4gICAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IG9wdGlvbnMuZ2l0aHViT3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBsaW50T3B0aW9ucyA9IGdpdGh1Yk9wdGlvbnMucHVsbFJlcXVlc3RMaW50T3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBwcm9qZWN0ID0gdGhpcy5wcm9qZWN0IGFzIFByb2plY3QgJiB7IGdpdGh1Yj86IGdpdGh1Yi5HaXRIdWIgfTtcbiAgICBpZiAoXG4gICAgICAhcHJvamVjdC5naXRodWI/LndvcmtmbG93c0VuYWJsZWQgfHxcbiAgICAgICEoZ2l0aHViT3B0aW9ucy5wdWxsUmVxdWVzdExpbnQgPz8gdHJ1ZSkgfHxcbiAgICAgICEobGludE9wdGlvbnMuc2VtYW50aWNUaXRsZSA/PyB0cnVlKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aXRsZU9wdGlvbnMgPSBsaW50T3B0aW9ucy5zZW1hbnRpY1RpdGxlT3B0aW9ucyA/PyB7fTtcbiAgICB0aGlzLnB1bGxSZXF1ZXN0VGl0bGUgPSB7XG4gICAgICB0eXBlczogdGl0bGVPcHRpb25zLnR5cGVzID8/IERFRkFVTFRfVFlQRVMsXG4gICAgICByZXF1aXJlU2NvcGU6IHRpdGxlT3B0aW9ucy5yZXF1aXJlU2NvcGUgPz8gZmFsc2UsXG4gICAgICBzY29wZXM6IHRpdGxlT3B0aW9ucy5zY29wZXMgPz8gW10sXG4gICAgICByZWxlYXNlOlxuICAgICAgICB0aGlzLnByb2plY3QgaW5zdGFuY2VvZiBOb2RlUHJvamVjdCAmJlxuICAgICAgICB0aGlzLnByb2plY3QucmVsZWFzZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgZXZlcnlDb21taXRSZWxlYXNlczogb3B0aW9ucy5yZWxlYXNhYmxlQ29tbWl0cyA9PT0gdW5kZWZpbmVkLFxuICAgIH07XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgaG93IHB1bGwgcmVxdWVzdHMgYXJlIG1lcmdlZCBieSB0aGUgbWVyZ2UgcXVldWVcbiAgICovXG4gIGNvbmZpZ3VyZU1lcmdlUXVldWUoZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgIHRoaXMubWVyZ2VRdWV1ZSA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYXJhZ3JhcGhzID0gW1xuICAgICAgLi4uKHRoaXMucHVsbFJlcXVlc3RUaXRsZSA/IFt0aXRsZVBhcmFncmFwaCh0aGlzLnB1bGxSZXF1ZXN0VGl0bGUpXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLm1lcmdlUXVldWUgPyBbdGhpcy5tZXJnZVF1ZXVlXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLnB1bGxSZXF1ZXN0VGl0bGU/LnJlbGVhc2VcbiAgICAgICAgPyBbcmVsZWFzZVBhcmFncmFwaCh0aGlzLnB1bGxSZXF1ZXN0VGl0bGUsIHRoaXMubWVyZ2VRdWV1ZSAhPT0gdW5kZWZpbmVkKV1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgICBpZiAocGFyYWdyYXBocy5sZW5ndGgpIHtcbiAgICAgIFJlYWRtZS5vZih0aGlzLnByb2plY3QpPy5hZGRTZWN0aW9uKFxuICAgICAgICBDT05UUklCVVRJTkdfVElUTEUsXG4gICAgICAgIHBhcmFncmFwaHMuam9pbignXFxuXFxuJyksXG4gICAgICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLkNPTlRSSUJVVElORyB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgQ09OVFJJQlVUSU5HX1RJVExFID0gJ0NvbnRyaWJ1dGluZyc7XG4iXX0=
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Formats values as code, such as "`a`, `b` or `c`"
3
+ */
4
+ export declare function formatList(values: Array<string>): string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatList = formatList;
4
+ /**
5
+ * Formats values as code, such as "`a`, `b` or `c`"
6
+ */
7
+ function formatList(values) {
8
+ const quoted = values.map((value) => '`' + value + '`');
9
+ return quoted.length > 1
10
+ ? `${quoted.slice(0, -1).join(', ')} or ${quoted[quoted.length - 1]}`
11
+ : quoted.join('');
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZ2l0aHViL2Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLGdDQUtDO0FBUkQ7O0dBRUc7QUFDSCxTQUFnQixVQUFVLENBQUMsTUFBcUI7SUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNyRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JtYXRzIHZhbHVlcyBhcyBjb2RlLCBzdWNoIGFzIFwiYGFgLCBgYmAgb3IgYGNgXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExpc3QodmFsdWVzOiBBcnJheTxzdHJpbmc+KTogc3RyaW5nIHtcbiAgY29uc3QgcXVvdGVkID0gdmFsdWVzLm1hcCgodmFsdWUpID0+ICdgJyArIHZhbHVlICsgJ2AnKTtcbiAgcmV0dXJuIHF1b3RlZC5sZW5ndGggPiAxXG4gICAgPyBgJHtxdW90ZWQuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyl9IG9yICR7cXVvdGVkW3F1b3RlZC5sZW5ndGggLSAxXX1gXG4gICAgOiBxdW90ZWQuam9pbignJyk7XG59XG4iXX0=
@@ -4,6 +4,8 @@ exports.autoMergeOptions = autoMergeOptions;
4
4
  exports.configureMergify = configureMergify;
5
5
  const projen_1 = require("projen");
6
6
  const codeql_1 = require("./codeql");
7
+ const contributing_1 = require("./contributing");
8
+ const format_1 = require("./format");
7
9
  const readme_1 = require("../readme");
8
10
  /**
9
11
  * Options for projen's auto merge, which requires its approvals from every
@@ -15,18 +17,12 @@ function autoMergeOptions(options) {
15
17
  }
16
18
  return { ...options.autoMergeOptions, approvedReviews: 0 };
17
19
  }
18
- function formatList(values) {
19
- const quoted = values.map((value) => '`' + value + '`');
20
- return quoted.length > 1
21
- ? `${quoted.slice(0, -1).join(', ')} or ${quoted[quoted.length - 1]}`
22
- : quoted.join('');
23
- }
24
20
  function queueDescription(config) {
25
21
  if (!config.approvedReviews) {
26
22
  return "Once a pull request's checks pass";
27
23
  }
28
24
  if (config.trustedAuthors.length) {
29
- return `Once a pull request is approved, or is opened by ${formatList(config.trustedAuthors)}, and its checks pass`;
25
+ return `Once a pull request is approved, or is opened by ${(0, format_1.formatList)(config.trustedAuthors)}, and its checks pass`;
30
26
  }
31
27
  return 'Once a pull request is approved and its checks pass';
32
28
  }
@@ -43,7 +39,10 @@ A repository with a single maintainer, who cannot approve their own pull request
43
39
  }
44
40
  return '';
45
41
  }
46
- function githubConfigurationSection(config) {
42
+ /**
43
+ * The guide to configuring the repository on GitHub
44
+ */
45
+ function githubConfigurationGuide(config) {
47
46
  const statusChecks = config.requiredChecks.length
48
47
  ? 'the checks that `.mergify.yml` waits for: `' +
49
48
  config.requiredChecks.join('`, `') +
@@ -51,7 +50,7 @@ function githubConfigurationSection(config) {
51
50
  : 'any CI checks added to the project (none are configured yet), keeping them in sync with `.mergify.yml`';
52
51
  const approvals = config.trustedAuthors.length
53
52
  ? '0 required approvals, because Mergify requires approvals itself for authors other than ' +
54
- formatList(config.trustedAuthors) +
53
+ (0, format_1.formatList)(config.trustedAuthors) +
55
54
  ' and is exempt from this rule'
56
55
  : config.approvedReviews === 1
57
56
  ? '1 required approval'
@@ -62,12 +61,12 @@ function githubConfigurationSection(config) {
62
61
  ? ` CodeQL does not scan the integ-runner snapshots (\`${codeql_1.CodeQl.INTEG_SNAPSHOT_PATHS}\`): their assets are generated bundles of dependencies whose file names change on every \`integ:update\`, so alerts on them can neither be fixed in the repository nor dismissed for good. The source they are built from is still scanned.`
63
62
  : '') +
64
63
  (otherPathsIgnore.length
65
- ? ` CodeQL does not scan paths matching ${formatList(otherPathsIgnore)}.`
64
+ ? ` CodeQL does not scan paths matching ${(0, format_1.formatList)(otherPathsIgnore)}.`
66
65
  : '');
67
66
  const codeScanningSettings = config.codeScanning
68
67
  ? `
69
68
 
70
- ### Code scanning
69
+ ## Code scanning
71
70
 
72
71
  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
72
  : '';
@@ -79,22 +78,22 @@ CodeQL runs from \`.github/workflows/codeql.yml\`, which is managed by projen. I
79
78
 
80
79
  The repository must be configured as below so that nothing can be merged without going through the queue.
81
80
 
82
- ### Mergify
81
+ ## Mergify
83
82
 
84
83
  Install the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.
85
84
 
86
- ### Pull request settings
85
+ ## Pull request settings
87
86
 
88
87
  In **Settings → General → Pull Requests**:
89
88
  * Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.
90
89
  * Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
91
90
  * Tick **Automatically delete head branches**.
92
91
 
93
- ### Actions settings
92
+ ## Actions settings
94
93
 
95
94
  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
95
 
97
- ### Branch ruleset
96
+ ## Branch ruleset
98
97
 
99
98
  In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:
100
99
  * **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 +154,41 @@ function configureMergify(project, options = {}) {
155
154
  },
156
155
  });
157
156
  project.tryFindObjectFile('.mergify.yml')?.addOverride('merge_protections_settings.reporting_method', options.reportingMethod ?? 'deployments');
158
- const addReadmeSection = () => readme_1.Readme.of(project)?.addSection(GITHUB_CONFIGURATION_TITLE, githubConfigurationSection({
157
+ contributing_1.Contributing.of(project).configureMergeQueue(`${queueDescription({ approvedReviews, trustedAuthors })}, the [Mergify](https://mergify.com) merge queue squash merges it, with its title as the commit message. Draft pull requests and those labelled \`do-not-merge\` are not merged.`);
158
+ const configuration = () => ({
159
159
  approvedReviews,
160
160
  codeScanning: codeScanning(),
161
161
  codeScanningPathsIgnore: codeQl()?.pathsIgnore ?? [],
162
162
  requiredChecks: buildJobIds(),
163
163
  trustedAuthors,
164
- }), { order: readme_1.ReadmeOrder.REFERENCE });
165
- let readmeSection = addReadmeSection();
164
+ });
165
+ // the guide is rendered when the file is synthesized, after every component has been added
166
+ new GithubConfigurationFile(project, () => githubConfigurationGuide(configuration()));
167
+ 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
168
  new BeforeSynthesis(project, () => {
167
169
  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
170
  });
174
171
  }
175
172
  const GITHUB_CONFIGURATION_TITLE = 'GitHub Configuration';
173
+ /**
174
+ * Where the guide to configuring the repository on GitHub is written, in the
175
+ * docs directory every project uses
176
+ */
177
+ const GITHUB_CONFIGURATION_FILE = 'docs/github-configuration.md';
178
+ /**
179
+ * The guide to configuring the repository on GitHub, as its own markdown file
180
+ */
181
+ class GithubConfigurationFile extends projen_1.FileBase {
182
+ body;
183
+ constructor(project, body) {
184
+ super(project, GITHUB_CONFIGURATION_FILE, {});
185
+ this.body = body;
186
+ }
187
+ synthesizeContent(_) {
188
+ const marker = this.marker ? `<!-- ${this.marker} -->\n\n` : '';
189
+ return `${marker}# ${GITHUB_CONFIGURATION_TITLE}\n\n${this.body()}\n`;
190
+ }
191
+ }
176
192
  /**
177
193
  * Runs a callback once every component has been added, before any file is
178
194
  * synthesized
@@ -187,4 +203,4 @@ class BeforeSynthesis extends projen_1.Component {
187
203
  this.callback();
188
204
  }
189
205
  }
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
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNENBLDRDQVFDO0FBMkdELDRDQTZGQztBQTVQRCxtQ0FBeUU7QUFDekUscUNBQWtDO0FBQ2xDLGlEQUE4QztBQUM5QyxxQ0FBc0M7QUFDdEMsc0NBQWdEO0FBb0NoRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUdoQztJQUNDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELENBQUM7QUFVRCxTQUFTLGdCQUFnQixDQUN2QixNQUF1RTtJQUV2RSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLE9BQU8sbUNBQW1DLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqQyxPQUFPLG9EQUFvRCxJQUFBLG1CQUFVLEVBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQztJQUN0SCxDQUFDO0lBQ0QsT0FBTyxxREFBcUQsQ0FBQztBQUMvRCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxNQUEyQjtJQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLE9BQU87OzRUQUVpVCxDQUFDO0lBQzNULENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQyxPQUFPOzs4T0FFbU8sQ0FBQztJQUM3TyxDQUFDO0lBQ0QsT0FBTyxFQUFFLENB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Q0wsQ0FBQztBQUVELE1BQU0sMEJBQTBCLEdBQUcsc0JBQXNCLENBQUM7QUFFMUQ7OztHQUdHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyw4QkFBOEIsQ0FBQztBQUVqRTs7R0FFRztBQUNILE1BQU0sdUJBQXdCLFNBQVEsaUJBQVE7SUFHekI7SUFGbkIsWUFDRSxPQUFnQixFQUNDLElBQWtCO1FBRW5DLEtBQUssQ0FBQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFGN0IsU0FBSSxHQUFKLElBQUksQ0FBYztJQUdyQyxDQUFDO0lBRVMsaUJBQWlCLENBQUMsQ0FBWTtRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sR0FBRyxNQUFNLEtBQUssMEJBQTBCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDeEUsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxlQUFnQixTQUFRLGtCQUFTO0lBR2xCO0lBRm5CLFlBQ0UsT0FBZ0IsRUFDQyxRQUFvQjtRQUVyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGRSxhQUFRLEdBQVIsUUFBUSxDQUFZO0lBR3ZDLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIGdpdGh1YiwgSVJlc29sdmVyLCBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvZGVRbCB9IGZyb20gJy4vY29kZXFsJztcbmltcG9ydCB7IENvbnRyaWJ1dGluZyB9IGZyb20gJy4vY29udHJpYnV0aW5nJztcbmltcG9ydCB7IGZvcm1hdExpc3QgfSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vcmVhZG1lJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXJnaWZ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgYXBwcm92aW5nIHJldmlld3MgdGhlIG1lcmdlIHF1ZXVlIHdhaXRzIGZvciwgd2hpY2ggc2hvdWxkIG1hdGNoXG4gICAqIGBhdXRvTWVyZ2VPcHRpb25zLmFwcHJvdmVkUmV2aWV3c2BcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZWRSZXZpZXdzPzogbnVtYmVyO1xuICByZWFkb25seSBhc3NpZ25Vc2Vycz86IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IHJlcG9ydGluZ01ldGhvZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1dGhvcnMgd2hvc2UgcHVsbCByZXF1ZXN0cyB0aGUgbWVyZ2UgcXVldWUgbWVyZ2VzIHdpdGhvdXQgYW4gYXBwcm92YWwsIHN1Y2hcbiAgICogYXMgdGhlIHNpbmdsZSBtYWludGFpbmVyIG9mIGEgcmVwb3NpdG9yeSwgd2hvIGNhbm5vdCBhcHByb3ZlIHRoZWlyIG93biBwdWxsXG4gICAqIHJlcXVlc3RzLiBQdWxsIHJlcXVlc3RzIGZyb20gYW55b25lIGVsc2Ugc3RpbGwgbmVlZCBgYXBwcm92ZWRSZXZpZXdzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEF1dGhvciBvZiB0aGUgcHJvamVuIHVwZ3JhZGUgcHVsbCByZXF1ZXN0cyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGFwcHJvdmVkXG4gICAqXG4gICAqIEBkZWZhdWx0ICdlbmRvci1wcm9qZW5bYm90XSdcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGVBdXRob3I/OiBzdHJpbmc7XG59XG5cbnR5cGUgTWVyZ2lmeVByb2plY3QgPSBQcm9qZWN0ICYge1xuICByZWFkb25seSBhdXRvTWVyZ2U/OiBnaXRodWIuQXV0b01lcmdlO1xuICByZWFkb25seSBnaXRodWI/OiBnaXRodWIuR2l0SHViO1xuICByZWFkb25seSBidWlsZFdvcmtmbG93Pzoge1xuICAgIHJlYWRvbmx5IGJ1aWxkSm9iSWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJvamVuJ3MgYXV0byBtZXJnZSwgd2hpY2ggcmVxdWlyZXMgaXRzIGFwcHJvdmFscyBmcm9tIGV2ZXJ5XG4gKiBhdXRob3IsIHNvIHdpdGggdHJ1c3RlZCBhdXRob3JzIGBjb25maWd1cmVNZXJnaWZ5YCByZXF1aXJlcyB0aGVtIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9NZXJnZU9wdGlvbnMob3B0aW9uczoge1xuICByZWFkb25seSBhdXRvTWVyZ2VPcHRpb25zPzogZ2l0aHViLkF1dG9NZXJnZU9wdGlvbnM7XG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbn0pOiBnaXRodWIuQXV0b01lcmdlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucy50cnVzdGVkQXV0aG9ycz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucztcbiAgfVxuICByZXR1cm4geyAuLi5vcHRpb25zLmF1dG9NZXJnZU9wdGlvbnMsIGFwcHJvdmVkUmV2aWV3czogMCB9O1xufVxuXG5pbnRlcmZhY2UgR2l0aHViQ29uZmlndXJhdGlvbiB7XG4gIHJlYWRvbmx5IGFwcHJvdmVkUmV2aWV3czogbnVtYmVyO1xuICByZWFkb25seSBjb2RlU2Nhbm5pbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvZGVTY2FubmluZ1BhdGhzSWdub3JlOiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSByZXF1aXJlZENoZWNrczogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgdHJ1c3RlZEF1dGhvcnM6IEFycmF5PHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRGVzY3JpcHRpb24oXG4gIGNvbmZpZzogUGljazxHaXRodWJDb25maWd1cmF0aW9uLCAnYXBwcm92ZWRSZXZpZXdzJyB8ICd0cnVzdGVkQXV0aG9ycyc+LFxuKTogc3RyaW5nIHtcbiAgaWYgKCFjb25maWcuYXBwcm92ZWRSZXZpZXdzKSB7XG4gICAgcmV0dXJuIFwiT25jZSBhIHB1bGwgcmVxdWVzdCdzIGNoZWNrcyBwYXNzXCI7XG4gIH1cbiAgaWYgKGNvbmZpZy50cnVzdGVkQXV0aG9ycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYE9uY2UgYSBwdWxsIHJlcXVlc3QgaXMgYXBwcm92ZWQsIG9yIGlzIG9wZW5lZCBieSAke2Zvcm1hdExpc3QoY29uZmlnLnRydXN0ZWRBdXRob3JzKX0sIGFuZCBpdHMgY2hlY2tzIHBhc3NgO1xuICB9XG4gIHJldHVybiAnT25jZSBhIHB1bGwgcmVxdWVzdCBpcyBhcHByb3ZlZCBhbmQgaXRzIGNoZWNrcyBwYXNzJztcbn1cblxuZnVuY3Rpb24gYXBwcm92YWxHdWlkYW5jZShjb25maWc6IEdpdGh1YkNvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICBpZiAoIWNvbmZpZy5hcHByb3ZlZFJldmlld3MpIHtcbiAgICByZXR1cm4gYFxuXG4qKldhcm5pbmc6Kiogbm8gYXBwcm92YWxzIGFyZSByZXF1aXJlZCwgc28gdGhlIHF1ZXVlIG1lcmdlcyBhbnkgcHVsbCByZXF1ZXN0IHdob3NlIGNoZWNrcyBwYXNzLCBpbmNsdWRpbmcgb25lIGZyb20gYSBmb3JrIHRoYXQgY2hhbmdlcyB0aGUgd29ya2Zsb3dzIHByb2R1Y2luZyB0aG9zZSBjaGVja3MuIFNldCBcXGBhdXRvTWVyZ2VPcHRpb25zLmFwcHJvdmVkUmV2aWV3c1xcYCB0byBhdCBsZWFzdCAxLCBhbmQgdXNlIFxcYHRydXN0ZWRBdXRob3JzXFxgIGZvciBtYWludGFpbmVycyB3aG8gY2Fubm90IGFwcHJvdmUgdGhlaXIgb3duIHB1bGwgcmVxdWVzdHMuYDtcbiAgfVxuICBpZiAoIWNvbmZpZy50cnVzdGVkQXV0aG9ycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYFxuXG5BIHJlcG9zaXRvcnkgd2l0aCBhIHNpbmdsZSBtYWludGFpbmVyLCB3aG8gY2Fubm90IGFwcHJvdmUgdGhlaXIgb3duIHB1bGwgcmVxdWVzdHMsIHNob3VsZCBsaXN0IHRoZW0gaW4gXFxgdHJ1c3RlZEF1dGhvcnNcXGAgaW4gXFxgLnByb2plbnJjLnRzXFxgLiBUaGVpciBwdWxsIHJlcXVlc3RzIGFyZSB0aGVuIG1lcmdlZCB3aXRob3V0IGFuIGFwcHJvdmFsLCB3aGlsZSBldmVyeW9uZSBlbHNlJ3Mgc3RpbGwgbmVlZCBvbmUuYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogVGhlIGd1aWRlIHRvIGNvbmZpZ3VyaW5nIHRoZSByZXBvc2l0b3J5IG9uIEdpdEh1YlxuICovXG5mdW5jdGlvbiBnaXRodWJDb25maWd1cmF0aW9uR3VpZGUoY29uZmlnOiBHaXRodWJDb25maWd1cmF0aW9uKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzQ2hlY2tzID0gY29uZmlnLnJlcXVpcmVkQ2hlY2tzLmxlbmd0aFxuICAgID8gJ3RoZSBjaGVja3MgdGhhdCBgLm1lcmdpZnkueW1sYCB3YWl0cyBmb3I6IGAnICtcbiAgICAgIGNvbmZpZy5yZXF1aXJlZENoZWNrcy5qb2luKCdgLCBgJykgK1xuICAgICAgJ2AnXG4gICAgOiAnYW55IENJIGNoZWNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCAobm9uZSBhcmUgY29uZmlndXJlZCB5ZXQpLCBrZWVwaW5nIHRoZW0gaW4gc3luYyB3aXRoIGAubWVyZ2lmeS55bWxgJztcbiAgY29uc3QgYXBwcm92YWxzID0gY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aFxuICAgID8gJzAgcmVxdWlyZWQgYXBwcm92YWxzLCBiZWNhdXNlIE1lcmdpZnkgcmVxdWlyZXMgYXBwcm92YWxzIGl0c2VsZiBmb3IgYXV0aG9ycyBvdGhlciB0aGFuICcgK1xuICAgICAgZm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpICtcbiAgICAgICcgYW5kIGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSdcbiAgICA6IGNvbmZpZy5hcHByb3ZlZFJldmlld3MgPT09IDFcbiAgICAgID8gJzEgcmVxdWlyZWQgYXBwcm92YWwnXG4gICAgICA6IGAke2NvbmZpZy5hcHByb3ZlZFJldmlld3N9IHJlcXVpcmVkIGFwcHJvdmFsc2A7XG4gIGNvbnN0IHBhdGhzSWdub3JlID0gY29uZmlnLmNvZGVTY2FubmluZ1BhdGhzSWdub3JlO1xuICBjb25zdCBvdGhlclBhdGhzSWdub3JlID0gcGF0aHNJZ25vcmUuZmlsdGVyKFxuICAgIChwYXR0ZXJuKSA9PiBwYXR0ZXJuICE9PSBDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFMsXG4gICk7XG4gIGNvbnN0IGlnbm9yZWRQYXRocyA9XG4gICAgKHBhdGhzSWdub3JlLmluY2x1ZGVzKENvZGVRbC5JTlRFR19TTkFQU0hPVF9QQVRIUylcbiAgICAgID8gYCBDb2RlUUwgZG9lcyBub3Qgc2NhbiB0aGUgaW50ZWctcnVubmVyIHNuYXBzaG90cyAoXFxgJHtDb2RlUWwuSU5URUdfU05BUFNIT1RfUEFUSFN9XFxgKTogdGhlaXIgYXNzZXRzIGFyZSBnZW5lcmF0ZWQgYnVuZGxlcyBvZiBkZXBlbmRlbmNpZXMgd2hvc2UgZmlsZSBuYW1lcyBjaGFuZ2Ugb24gZXZlcnkgXFxgaW50ZWc6dXBkYXRlXFxgLCBzbyBhbGVydHMgb24gdGhlbSBjYW4gbmVpdGhlciBiZSBmaXhlZCBpbiB0aGUgcmVwb3NpdG9yeSBub3IgZGlzbWlzc2VkIGZvciBnb29kLiBUaGUgc291cmNlIHRoZXkgYXJlIGJ1aWx0IGZyb20gaXMgc3RpbGwgc2Nhbm5lZC5gXG4gICAgICA6ICcnKSArXG4gICAgKG90aGVyUGF0aHNJZ25vcmUubGVuZ3RoXG4gICAgICA/IGAgQ29kZVFMIGRvZXMgbm90IHNjYW4gcGF0aHMgbWF0Y2hpbmcgJHtmb3JtYXRMaXN0KG90aGVyUGF0aHNJZ25vcmUpfS5gXG4gICAgICA6ICcnKTtcbiAgY29uc3QgY29kZVNjYW5uaW5nU2V0dGluZ3MgPSBjb25maWcuY29kZVNjYW5uaW5nXG4gICAgPyBgXG5cbiMjIENvZGUgc2Nhbm5pbmdcblxuQ29kZVFMIHJ1bnMgZnJvbSBcXGAuZ2l0aHViL3dvcmtmbG93cy9jb2RlcWwueW1sXFxgLCB3aGljaCBpcyBtYW5hZ2VkIGJ5IHByb2plbi4gSW4gKipTZXR0aW5ncyDihpIgQWR2YW5jZWQgU2VjdXJpdHkqKiwgbGVhdmUgQ29kZVFMICoqRGVmYXVsdCBzZXR1cCoqIG9mZiwgYmVjYXVzZSBpdCBjYW5ub3QgcnVuIGFsb25nc2lkZSB0aGlzIHdvcmtmbG93LiBVbmRlciAqKlByb3RlY3Rpb24gcnVsZXMqKiwga2VlcCB0aGUgKipDaGVjayBydW4gZmFpbHVyZSB0aHJlc2hvbGQqKiBhdCAqKkhpZ2ggb3IgaGlnaGVyKiogZm9yIHNlY3VyaXR5IGFsZXJ0cyBhbmQgKipFcnJvcnMqKiBmb3Igb3RoZXIgYWxlcnRzLCBhcyB0aGlzIGRlY2lkZXMgd2hldGhlciB0aGUgXFxgJHtDb2RlUWwuQ0hFQ0tfTkFNRX1cXGAgY2hlY2sgZmFpbHMuIFByaXZhdGUgcmVwb3NpdG9yaWVzIGFsc28gbmVlZCBHaXRIdWIgQ29kZSBTZWN1cml0eSBlbmFibGVkIHRoZXJlIGZvciBjb2RlIHNjYW5uaW5nIHJlc3VsdHMgdG8gYmUgdXBsb2FkZWQuJHtpZ25vcmVkUGF0aHN9YFxuICAgIDogJyc7XG4gIGNvbnN0IGNvZGVTY2FubmluZ1J1bGUgPSBjb25maWcuY29kZVNjYW5uaW5nXG4gICAgPyBgXG4qICoqUmVxdWlyZSBjb2RlIHNjYW5uaW5nIHJlc3VsdHMqKiwgd2l0aCB0aGUgdG9vbCAqKkNvZGVRTCoqLCBzZWN1cml0eSBhbGVydHMgc2V0IHRvICoqSGlnaCBvciBoaWdoZXIqKiBhbmQgYWxlcnRzIHNldCB0byAqKkVycm9ycyoqLiBNZXJnaWZ5IGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSwgc28gXFxgLm1lcmdpZnkueW1sXFxgIGFsc28gd2FpdHMgZm9yIHRoZSBcXGAke0NvZGVRbC5DSEVDS19OQU1FfVxcYCBjaGVjayBpbnN0ZWFkLmBcbiAgICA6ICcnO1xuICByZXR1cm4gYEFsbCBwdWxsIHJlcXVlc3RzIGFyZSBtZXJnZWQgYnkgdGhlIFtNZXJnaWZ5XShodHRwczovL21lcmdpZnkuY29tKSBtZXJnZSBxdWV1ZSwgY29uZmlndXJlZCBpbiBcXGAubWVyZ2lmeS55bWxcXGAuICR7cXVldWVEZXNjcmlwdGlvbihjb25maWcpfSwgTWVyZ2lmeSBxdWV1ZXMgaXQsIGJyaW5ncyBpdCB1cCB0byBkYXRlIHdpdGggdGhlIGRlZmF1bHQgYnJhbmNoLCB3YWl0cyBmb3IgdGhlIGNoZWNrcyBhZ2FpbiBhbmQgc3F1YXNoIG1lcmdlcyBpdC4gRHJhZnQgcHVsbCByZXF1ZXN0cyBhbmQgdGhvc2UgbGFiZWxsZWQgXFxgZG8tbm90LW1lcmdlXFxgIGFyZSBub3QgbWVyZ2VkLlxuXG5UaGUgcmVwb3NpdG9yeSBtdXN0IGJlIGNvbmZpZ3VyZWQgYXMgYmVsb3cgc28gdGhhdCBub3RoaW5nIGNhbiBiZSBtZXJnZWQgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cblxuIyMgTWVyZ2lmeVxuXG5JbnN0YWxsIHRoZSBbTWVyZ2lmeSBHaXRIdWIgQXBwXShodHRwczovL2dpdGh1Yi5jb20vYXBwcy9tZXJnaWZ5KSBhbmQgZ2l2ZSBpdCBhY2Nlc3MgdG8gdGhpcyByZXBvc2l0b3J5LlxuXG4jIyBQdWxsIHJlcXVlc3Qgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgUHVsbCBSZXF1ZXN0cyoqOlxuKiBBbGxvdyBzcXVhc2ggbWVyZ2luZyBvbmx5ICh1bnRpY2sgbWVyZ2UgY29tbWl0cyBhbmQgcmViYXNlIG1lcmdpbmcpLCBtYXRjaGluZyB0aGUgcXVldWUncyBtZXJnZSBtZXRob2QuXG4qIFVudGljayAqKkFsbG93IGF1dG8tbWVyZ2UqKiwgYmVjYXVzZSBHaXRIdWIncyBvd24gYXV0by1tZXJnZSBtZXJnZXMgb3V0c2lkZSB0aGUgcXVldWUuXG4qIFRpY2sgKipBdXRvbWF0aWNhbGx5IGRlbGV0ZSBoZWFkIGJyYW5jaGVzKiouXG5cbiMjIEFjdGlvbnMgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgQWN0aW9ucyDihpIgR2VuZXJhbCoqLCBzZXQgKipBcHByb3ZhbCBmb3IgcnVubmluZyBmb3JrIHB1bGwgcmVxdWVzdCB3b3JrZmxvd3MgZnJvbSBjb250cmlidXRvcnMqKiB0byAqKlJlcXVpcmUgYXBwcm92YWwgZm9yIGFsbCBleHRlcm5hbCBjb250cmlidXRvcnMqKi4gQSBwdWxsIHJlcXVlc3QgZnJvbSBhIGZvcmsgcnVucyBpdHMgb3duIGNvcHkgb2YgdGhlIHdvcmtmbG93cywgc28gaXQgY2FuIGNoYW5nZSBob3cgdGhlIHJlcXVpcmVkIGNoZWNrcyBwYXNzLiR7Y29kZVNjYW5uaW5nU2V0dGluZ3N9XG5cbiMjIEJyYW5jaCBydWxlc2V0XG5cbkluICoqU2V0dGluZ3Mg4oaSIFJ1bGVzIOKGkiBSdWxlc2V0cyoqLCBjcmVhdGUgYSBicmFuY2ggcnVsZXNldCB3aXRoIGVuZm9yY2VtZW50ICoqQWN0aXZlKiogdGhhdCB0YXJnZXRzIHRoZSBkZWZhdWx0IGJyYW5jaCwgYW5kIHNldDpcbiogKipCeXBhc3MgbGlzdCoqOiB0aGUgKipNZXJnaWZ5KiogYXBwIG9ubHksIGluICoqRXhlbXB0KiogbW9kZS4gRG8gbm90IGFkZCBhZG1pbnMgb3Igb3RoZXIgcm9sZXMsIGFzIGFueW9uZSBvbiB0aGlzIGxpc3QgY2FuIG1lcmdlIHdpdGhvdXQgdGhlIHF1ZXVlLlxuKiAqKlJlc3RyaWN0IHVwZGF0ZXMqKjogb25seSBieXBhc3MgYWN0b3JzIGNhbiB1cGRhdGUgdGhlIGJyYW5jaCwgc28gcHVsbCByZXF1ZXN0cyBjYW5ub3QgYmUgbWVyZ2VkIGZyb20gdGhlIEdpdEh1YiBVSSBvciBDTEkgYW5kIGNvbW1pdHMgY2Fubm90IGJlIHB1c2hlZCBkaXJlY3RseS5cbiogKipSZXN0cmljdCBkZWxldGlvbnMqKiBhbmQgKipCbG9jayBmb3JjZSBwdXNoZXMqKi5cbiogKipSZXF1aXJlIGEgcHVsbCByZXF1ZXN0IGJlZm9yZSBtZXJnaW5nKiosIHdpdGggJHthcHByb3ZhbHN9LiBUaWNrICoqRGlzbWlzcyBzdGFsZSBwdWxsIHJlcXVlc3QgYXBwcm92YWxzIHdoZW4gbmV3IGNvbW1pdHMgYXJlIHB1c2hlZCoqLCBzbyB0aGF0IGNvbW1pdHMgcHVzaGVkIGFmdGVyIGFuIGFwcHJvdmFsIG5lZWQgYXBwcm92aW5nIGFnYWluIGJlZm9yZSB0aGUgcXVldWUgbWVyZ2VzIHRoZW0uXG4qICoqUmVxdWlyZSBzdGF0dXMgY2hlY2tzIHRvIHBhc3MqKiwgbGlzdGluZyAke3N0YXR1c0NoZWNrc30uIExlYXZlICoqUmVxdWlyZSBicmFuY2hlcyB0byBiZSB1cCB0byBkYXRlIGJlZm9yZSBtZXJnaW5nKiogdW50aWNrZWQsIGFzIHRoZSBxdWV1ZSBhbHJlYWR5IHVwZGF0ZXMgYW5kIHJldGVzdHMgZWFjaCBwdWxsIHJlcXVlc3QuJHtjb2RlU2Nhbm5pbmdSdWxlfVxuXG5EbyBub3QgZW5hYmxlIEdpdEh1YidzIG93biAqKlJlcXVpcmUgbWVyZ2UgcXVldWUqKiBydWxlLCBhcyBpdCBjb21wZXRlcyB3aXRoIE1lcmdpZnkuXG5cbklmIHRoZSBxdWV1ZSBpcyB1bmF2YWlsYWJsZSBhbmQgYSBjaGFuZ2UgaGFzIHRvIGJlIG1lcmdlZCwgYWRkIHlvdXJzZWxmIHRvIHRoZSBieXBhc3MgbGlzdCB0ZW1wb3JhcmlseSBhbmQgcmVtb3ZlIHlvdXJzZWxmIGFmdGVyd2FyZHMuJHthcHByb3ZhbEd1aWRhbmNlKGNvbmZpZyl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU1lcmdpZnkoXG4gIHByb2plY3Q6IE1lcmdpZnlQcm9qZWN0LFxuICBvcHRpb25zOiBNZXJnaWZ5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IG1lcmdpZnkgPSBwcm9qZWN0LmdpdGh1Yj8ubWVyZ2lmeTtcbiAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gYnVpbGQgam9icyBhbmQgQ29kZVFMIGNhbiBiZSBhZGRlZCBhZnRlciB0aGlzLCBzbyB0aGV5IGFyZSByZWFkIGF0IHN5bnRoZXNpc1xuICBjb25zdCBidWlsZEpvYklkcyA9ICgpID0+IHByb2plY3QuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHMgPz8gW107XG4gIGNvbnN0IGNvZGVRbCA9ICgpID0+XG4gICAgcHJvamVjdC5jb21wb25lbnRzLmZpbmQoKGMpOiBjIGlzIENvZGVRbCA9PiBjIGluc3RhbmNlb2YgQ29kZVFsKTtcbiAgY29uc3QgY29kZVNjYW5uaW5nID0gKCkgPT4gY29kZVFsKCkgIT09IHVuZGVmaW5lZDtcblxuICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9ucygnLWRyYWZ0Jyk7XG5cbiAgY29uc3QgYXBwcm92ZWRSZXZpZXdzID0gb3B0aW9ucy5hcHByb3ZlZFJldmlld3MgPz8gMTtcbiAgY29uc3QgdHJ1c3RlZEF1dGhvcnMgPSBvcHRpb25zLnRydXN0ZWRBdXRob3JzID8/IFtdO1xuICBpZiAodHJ1c3RlZEF1dGhvcnMubGVuZ3RoICYmIGFwcHJvdmVkUmV2aWV3cykge1xuICAgIGNvbnN0IGFwcHJvdmVkT3JUcnVzdGVkOiBnaXRodWIuTWVyZ2lmeUNvbmRpdGlvbiA9IHtcbiAgICAgIG9yOiBbXG4gICAgICAgIGAjYXBwcm92ZWQtcmV2aWV3cy1ieT49JHthcHByb3ZlZFJldmlld3N9YCxcbiAgICAgICAgLi4udHJ1c3RlZEF1dGhvcnMubWFwKChhdXRob3IpID0+IGBhdXRob3I9JHthdXRob3J9YCksXG4gICAgICBdLFxuICAgIH07XG4gICAgLy8gcHJvamVuIHR5cGVzIGF1dG8gbWVyZ2UgY29uZGl0aW9ucyBhcyBzdHJpbmdzLCBidXQgbWVyZ2lmeSBhY2NlcHRzIG9wZXJhdG9ycyB0b29cbiAgICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9ucyhhcHByb3ZlZE9yVHJ1c3RlZCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gIH1cblxuICAvLyBNZXJnaWZ5IGlzIGV4ZW1wdCBmcm9tIHRoZSBydWxlc2V0J3MgY29kZSBzY2FubmluZyBydWxlLCBzbyB0aGUgcXVldWUgZW5mb3JjZXMgaXQgaW5zdGVhZFxuICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9uc0xhdGVyKHtcbiAgICByZW5kZXI6ICgpID0+XG4gICAgICBjb2RlU2Nhbm5pbmcoKSA/IFtgc3RhdHVzLXN1Y2Nlc3M9JHtDb2RlUWwuQ0hFQ0tfTkFNRX1gXSA6IFtdLFxuICB9KTtcblxuICBjb25zdCB1cGdyYWRlQXV0aG9yID0gYGF1dGhvcj0ke29wdGlvbnMudXBncmFkZUF1dGhvciA/PyAnZW5kb3ItcHJvamVuW2JvdF0nfWA7XG4gIGNvbnN0IHVwZ3JhZGVDb25kaXRpb25zID0gW3VwZ3JhZGVBdXRob3JdO1xuICBtZXJnaWZ5LmFkZFJ1bGUoe1xuICAgIG5hbWU6ICdBdXRvbWF0aWMgYXBwcm92YWwgZm9yIHByb2plbiB1cGdyYWRlIHB1bGwgcmVxdWVzdHMnLFxuICAgIGNvbmRpdGlvbnM6IHVwZ3JhZGVDb25kaXRpb25zLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHJldmlldzoge1xuICAgICAgICB0eXBlOiAnQVBQUk9WRScsXG4gICAgICAgIG1lc3NhZ2U6ICdBdXRvbWF0aWNhbGx5IGFwcHJvdmluZyBwcm9qZW4gdXBncmFkZScsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIG1lcmdpZnkuYWRkUnVsZSh7XG4gICAgbmFtZTogJ0Fzc2lnbiBQUiB3aGVuIGNoZWNrIGZhaWxzJyxcbiAgICBjb25kaXRpb25zOiBbJyNjaGVjay1mYWlsdXJlID4gMCddLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIGFzc2lnbjoge1xuICAgICAgICBhZGRfdXNlcnM6IG9wdGlvbnMuYXNzaWduVXNlcnMgPz8gWydkYXZlc2hlcGhlcmQnXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZSgnLm1lcmdpZnkueW1sJyk/LmFkZE92ZXJyaWRlKFxuICAgICdtZXJnZV9wcm90ZWN0aW9uc19zZXR0aW5ncy5yZXBvcnRpbmdfbWV0aG9kJyxcbiAgICBvcHRpb25zLnJlcG9ydGluZ01ldGhvZCA/PyAnZGVwbG95bWVudHMnLFxuICApO1xuXG4gIENvbnRyaWJ1dGluZy5vZihwcm9qZWN0KS5jb25maWd1cmVNZXJnZVF1ZXVlKFxuICAgIGAke3F1ZXVlRGVzY3JpcHRpb24oeyBhcHByb3ZlZFJldmlld3MsIHRydXN0ZWRBdXRob3JzIH0pfSwgdGhlIFtNZXJnaWZ5XShodHRwczovL21lcmdpZnkuY29tKSBtZXJnZSBxdWV1ZSBzcXVhc2ggbWVyZ2VzIGl0LCB3aXRoIGl0cyB0aXRsZSBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuIERyYWZ0IHB1bGwgcmVxdWVzdHMgYW5kIHRob3NlIGxhYmVsbGVkIFxcYGRvLW5vdC1tZXJnZVxcYCBhcmUgbm90IG1lcmdlZC5gLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSAoKTogR2l0aHViQ29uZmlndXJhdGlvbiA9PiAoe1xuICAgIGFwcHJvdmVkUmV2aWV3cyxcbiAgICBjb2RlU2Nhbm5pbmc6IGNvZGVTY2FubmluZygpLFxuICAgIGNvZGVTY2FubmluZ1BhdGhzSWdub3JlOiBjb2RlUWwoKT8ucGF0aHNJZ25vcmUgPz8gW10sXG4gICAgcmVxdWlyZWRDaGVja3M6IGJ1aWxkSm9iSWRzKCksXG4gICAgdHJ1c3RlZEF1dGhvcnMsXG4gIH0pO1xuICAvLyB0aGUgZ3VpZGUgaXMgcmVuZGVyZWQgd2hlbiB0aGUgZmlsZSBpcyBzeW50aGVzaXplZCwgYWZ0ZXIgZXZlcnkgY29tcG9uZW50IGhhcyBiZWVuIGFkZGVkXG4gIG5ldyBHaXRodWJDb25maWd1cmF0aW9uRmlsZShwcm9qZWN0LCAoKSA9PlxuICAgIGdpdGh1YkNvbmZpZ3VyYXRpb25HdWlkZShjb25maWd1cmF0aW9uKCkpLFxuICApO1xuICBSZWFkbWUub2YocHJvamVjdCk/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.3.0" };
6
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "5.5.0" };
7
7
  options;
8
8
  constructor(options) {
9
9
  this.options = options;
@@ -32,6 +32,11 @@ export declare class ReadmeOrder {
32
32
  * Sections added without an order
33
33
  */
34
34
  static readonly DEFAULT = 50;
35
+ /**
36
+ * How to contribute, such as the pull request title format and how pull
37
+ * requests are merged
38
+ */
39
+ static readonly CONTRIBUTING = 80;
35
40
  /**
36
41
  * Reference material, such as repository configuration and known issues
37
42
  */
@@ -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.3.0" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.ReadmeOrder", version: "5.5.0" };
13
13
  /**
14
14
  * Sections a reader needs first, such as getting started
15
15
  */
@@ -22,6 +22,11 @@ class ReadmeOrder {
22
22
  * Sections added without an order
23
23
  */
24
24
  static DEFAULT = 50;
25
+ /**
26
+ * How to contribute, such as the pull request title format and how pull
27
+ * requests are merged
28
+ */
29
+ static CONTRIBUTING = 80;
25
30
  /**
26
31
  * Reference material, such as repository configuration and known issues
27
32
  */
@@ -30,7 +35,7 @@ class ReadmeOrder {
30
35
  }
31
36
  exports.ReadmeOrder = ReadmeOrder;
32
37
  class Readme extends projen_1.FileBase {
33
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "5.3.0" };
38
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "5.5.0" };
34
39
  /**
35
40
  * The README of a project, if it has one
36
41
  */
@@ -108,4 +113,4 @@ class Readme extends projen_1.FileBase {
108
113
  }
109
114
  }
110
115
  exports.Readme = Readme;
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9yZWFkbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFvRTtBQUNwRSxnREFBNkM7QUFtQjdDOzs7R0FHRztBQUNILE1BQWEsV0FBVzs7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQVUsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6Qzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFVLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEM7O09BRUc7SUFDSSxNQUFNLENBQVUsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV0QyxnQkFBdUIsQ0FBQzs7QUFsQjFCLGtDQW1CQztBQU9ELE1BQWEsTUFBTyxTQUFRLGlCQUFROztJQUNsQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxXQUFXLENBQXFCO0lBQ2YsT0FBTyxHQUF3QixFQUFFLENBQUM7SUFFbkQsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBRXZDLGdFQUFnRTtRQUNoRSxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxJQUFJLE1BQU0sWUFBWSxxQkFBWSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFj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QUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsb0dBQW9HO0lBQzVGLGNBQWM7UUFDcEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7O0FBekZILHdCQTBGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbGVCYXNlLCBJUmVzb2x2ZXIsIFByb2plY3QsIFNhbXBsZVJlYWRtZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi9lbGVtZW50cy9zZWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFkbWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNlY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBzZWN0aW9uIGluIHRoZSBSRUFETUUsIGxvd2VzdCBmaXJzdC4gU2VjdGlvbnMgd2l0aCB0aGVcbiAgICogc2FtZSBvcmRlciBrZWVwIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYFJlYWRtZU9yZGVyLkRFRkFVTFRgLCBvciB0aGUgZXhpc3Rpbmcgb3JkZXIgd2hlbiByZXBsYWNpbmcgYSBzZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBvcmRlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcmRlcnMgb2YgdGhlIGJhbmRzIG9mIHNlY3Rpb25zIGluIHRoZSBSRUFETUUsIGxlYXZpbmcgcm9vbSBmb3Igc2VjdGlvbnNcbiAqIGluIGJldHdlZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlYWRtZU9yZGVyIHtcbiAgLyoqXG4gICAqIFNlY3Rpb25zIGEgcmVhZGVyIG5lZWRzIGZpcnN0LCBzdWNoIGFzIGdldHRpbmcgc3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlRST0RVQ1RJT04gPSAxMDtcbiAgLyoqXG4gICAqIEhvdyB0byB1c2UgYW5kIG9wZXJhdGUgdGhlIHByb2plY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNBR0UgPSAyMDtcbiAgLyoqXG4gICAqIFNlY3Rpb25zIGFkZGVkIHdpdGhvdXQgYW4gb3JkZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVCA9IDUwO1xuICAvKipcbiAgICogUmVmZXJlbmNlIG1hdGVyaWFsLCBzdWNoIGFzIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhbmQga25vd24gaXNzdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFRkVSRU5DRSA9IDkwO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxufVxuXG5pbnRlcmZhY2UgU2VjdGlvbkVudHJ5IHtcbiAgcmVhZG9ubHkgc2VjdGlvbjogU2VjdGlvbjtcbiAgcmVhZG9ubHkgb3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlYWRtZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBSRUFETUUgb2YgYSBwcm9qZWN0LCBpZiBpdCBoYXMgb25lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBSZWFkbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZCgoYyk6IGMgaXMgUmVhZG1lID0+IGMgaW5zdGFuY2VvZiBSZWFkbWUpO1xuICB9XG5cbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyaWVzOiBBcnJheTxTZWN0aW9uRW50cnk+ID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUmVhZG1lT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ1JFQURNRS5tZCcsIHt9KTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcblxuICAgIC8vIHByb2plbidzIHByb2plY3RzIGFkZCBhIHNhbXBsZSBSRUFETUUubWQsIHdoaWNoIHRoaXMgcmVwbGFjZXNcbiAgICBmb3IgKGNvbnN0IHNhbXBsZSBvZiBwcm9qZWN0LmNvbXBvbmVudHMpIHtcbiAgICAgIGlmIChzYW1wbGUgaW5zdGFuY2VvZiBTYW1wbGVSZWFkbWUpIHtcbiAgICAgICAgc2FtcGxlLm5vZGUuc2NvcGU/Lm5vZGUudHJ5UmVtb3ZlQ2hpbGQoc2FtcGxlLm5vZGUuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbnMsIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgUkVBRE1FXG4gICAqL1xuICBnZXQgc2VjdGlvbnMoKTogQXJyYXk8U2VjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLm9yZGVyZWRFbnRyaWVzKCkubWFwKChlKSA9PiBlLnNlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWN0aW9uLCBvciByZXBsYWNlcyB0aGUgc2VjdGlvbiB3aXRoIHRoZSBzYW1lIHRpdGxlXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBzZWN0aW9uXG4gICAqL1xuICBhZGRTZWN0aW9uKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgYm9keTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFkZFNlY3Rpb25PcHRpb25zID0ge30sXG4gICk6IFNlY3Rpb24ge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kSW5kZXgodGl0bGUpO1xuICAgIGNvbnN0IG9yZGVyID1cbiAgICAgIG9wdGlvbnMub3JkZXIgPz9cbiAgICAgIChpbmRleCA+PSAwID8gdGhpcy5lbnRyaWVzW2luZGV4XS5vcmRlciA6IFJlYWRtZU9yZGVyLkRFRkFVTFQpO1xuICAgIGNvbnN0IGVudHJ5ID0geyBzZWN0aW9uOiBuZXcgU2VjdGlvbih7IHRpdGxlLCBib2R5IH0pLCBvcmRlciB9O1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmVudHJpZXNbaW5kZXhdID0gZW50cnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5LnNlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgc2VjdGlvbiB3aXRoIHRoZSBnaXZlbiB0aXRsZVxuICAgKlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIGEgc2VjdGlvbiB3YXMgcmVtb3ZlZFxuICAgKi9cbiAgcmVtb3ZlU2VjdGlvbih0aXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRJbmRleCh0aXRsZSk7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB3aXRoIHRoZSBnaXZlbiB0aXRsZSwgaWYgdGhlcmUgaXMgb25lXG4gICAqL1xuICB0cnlGaW5kU2VjdGlvbih0aXRsZTogc3RyaW5nKTogU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRJbmRleCh0aXRsZSk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLmVudHJpZXNbaW5kZXhdLnNlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQoXzogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY29udGVudCA9IHRoaXMubWFya2VyID8gYDwhLS0gJHt0aGlzLm1hcmtlcn0gLS0+XFxuXFxuYCA6ICcnO1xuICAgIGNvbnRlbnQgPSBjb250ZW50LmNvbmNhdChgIyAke3RoaXMucHJvamVjdC5uYW1lfVxcblxcbmApO1xuICAgIGNvbnRlbnQgPSBjb250ZW50LmNvbmNhdCh0aGlzLmRlc2NyaXB0aW9uID8gYCR7dGhpcy5kZXNjcmlwdGlvbn1cXG5cXG5gIDogJycpO1xuICAgIHJldHVybiBjb250ZW50LmNvbmNhdCh0aGlzLnNlY3Rpb25zLm1hcCgocykgPT4gcy5zeW50aCgpKS5qb2luKCdcXG5cXG4nKSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbmRleCh0aXRsZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbmRJbmRleCgoZSkgPT4gZS5zZWN0aW9uLm9wdGlvbnMudGl0bGUgPT09IHRpdGxlKTtcbiAgfVxuXG4gIC8vIEFycmF5LnByb3RvdHlwZS5zb3J0IGlzIHN0YWJsZSwgc28gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcmRlciBrZWVwIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgaW5cbiAgcHJpdmF0ZSBvcmRlcmVkRW50cmllcygpOiBBcnJheTxTZWN0aW9uRW50cnk+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc10uc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xuICB9XG59XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9yZWFkbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFvRTtBQUNwRSxnREFBNkM7QUFtQjdDOzs7R0FHRztBQUNILE1BQWEsV0FBVzs7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQVUsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6Qzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFVLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEM7OztPQUdHO0lBQ0ksTUFBTSxDQUFVLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekM7O09BRUc7SUFDSSxNQUFNLENBQVUsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV0QyxnQkFBdUIsQ0FBQzs7QUF2QjFCLGtDQXdCQztBQU9ELE1BQWEsTUFBTyxTQUFRLGlCQUFROztJQUNsQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxXQUFXLENBQXFCO0lBQ2YsT0FBTyxHQUF3QixFQUFFLENBQUM7SUFFbkQsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBRXZDLGdFQUFnRTtRQUNoRSxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxJQUFJLE1BQU0sWUFBWSxxQkFBWSxFQUFFLENBQUM7Z0JB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SSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsb0dBQW9HO0lBQzVGLGNBQWM7UUFDcEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7O0FBekZILHdCQTBGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbGVCYXNlLCBJUmVzb2x2ZXIsIFByb2plY3QsIFNhbXBsZVJlYWRtZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi9lbGVtZW50cy9zZWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFkbWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNlY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBzZWN0aW9uIGluIHRoZSBSRUFETUUsIGxvd2VzdCBmaXJzdC4gU2VjdGlvbnMgd2l0aCB0aGVcbiAgICogc2FtZSBvcmRlciBrZWVwIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYFJlYWRtZU9yZGVyLkRFRkFVTFRgLCBvciB0aGUgZXhpc3Rpbmcgb3JkZXIgd2hlbiByZXBsYWNpbmcgYSBzZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBvcmRlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcmRlcnMgb2YgdGhlIGJhbmRzIG9mIHNlY3Rpb25zIGluIHRoZSBSRUFETUUsIGxlYXZpbmcgcm9vbSBmb3Igc2VjdGlvbnNcbiAqIGluIGJldHdlZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlYWRtZU9yZGVyIHtcbiAgLyoqXG4gICAqIFNlY3Rpb25zIGEgcmVhZGVyIG5lZWRzIGZpcnN0LCBzdWNoIGFzIGdldHRpbmcgc3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlRST0RVQ1RJT04gPSAxMDtcbiAgLyoqXG4gICAqIEhvdyB0byB1c2UgYW5kIG9wZXJhdGUgdGhlIHByb2plY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNBR0UgPSAyMDtcbiAgLyoqXG4gICAqIFNlY3Rpb25zIGFkZGVkIHdpdGhvdXQgYW4gb3JkZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVCA9IDUwO1xuICAvKipcbiAgICogSG93IHRvIGNvbnRyaWJ1dGUsIHN1Y2ggYXMgdGhlIHB1bGwgcmVxdWVzdCB0aXRsZSBmb3JtYXQgYW5kIGhvdyBwdWxsXG4gICAqIHJlcXVlc3RzIGFyZSBtZXJnZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09OVFJJQlVUSU5HID0gODA7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgbWF0ZXJpYWwsIHN1Y2ggYXMgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFuZCBrbm93biBpc3N1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVGRVJFTkNFID0gOTA7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmludGVyZmFjZSBTZWN0aW9uRW50cnkge1xuICByZWFkb25seSBzZWN0aW9uOiBTZWN0aW9uO1xuICByZWFkb25seSBvcmRlcjogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVhZG1lIGV4dGVuZHMgRmlsZUJhc2Uge1xuICAvKipcbiAgICogVGhlIFJFQURNRSBvZiBhIHByb2plY3QsIGlmIGl0IGhhcyBvbmVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IFJlYWRtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKChjKTogYyBpcyBSZWFkbWUgPT4gYyBpbnN0YW5jZW9mIFJlYWRtZSk7XG4gIH1cblxuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IEFycmF5PFNlY3Rpb25FbnRyeT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBSZWFkbWVPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnUkVBRE1FLm1kJywge30pO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xuXG4gICAgLy8gcHJvamVuJ3MgcHJvamVjdHMgYWRkIGEgc2FtcGxlIFJFQURNRS5tZCwgd2hpY2ggdGhpcyByZXBsYWNlc1xuICAgIGZvciAoY29uc3Qgc2FtcGxlIG9mIHByb2plY3QuY29tcG9uZW50cykge1xuICAgICAgaWYgKHNhbXBsZSBpbnN0YW5jZW9mIFNhbXBsZVJlYWRtZSkge1xuICAgICAgICBzYW1wbGUubm9kZS5zY29wZT8ubm9kZS50cnlSZW1vdmVDaGlsZChzYW1wbGUubm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9ucywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoZSBSRUFETUVcbiAgICovXG4gIGdldCBzZWN0aW9ucygpOiBBcnJheTxTZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJlZEVudHJpZXMoKS5tYXAoKGUpID0+IGUuc2VjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNlY3Rpb24sIG9yIHJlcGxhY2VzIHRoZSBzZWN0aW9uIHdpdGggdGhlIHNhbWUgdGl0bGVcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHNlY3Rpb25cbiAgICovXG4gIGFkZFNlY3Rpb24oXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgb3B0aW9uczogQWRkU2VjdGlvbk9wdGlvbnMgPSB7fSxcbiAgKTogU2VjdGlvbiB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRJbmRleCh0aXRsZSk7XG4gICAgY29uc3Qgb3JkZXIgPVxuICAgICAgb3B0aW9ucy5vcmRlciA/P1xuICAgICAgKGluZGV4ID49IDAgPyB0aGlzLmVudHJpZXNbaW5kZXhdLm9yZGVyIDogUmVhZG1lT3JkZXIuREVGQVVMVCk7XG4gICAgY29uc3QgZW50cnkgPSB7IHNlY3Rpb246IG5ldyBTZWN0aW9uKHsgdGl0bGUsIGJvZHkgfSksIG9yZGVyIH07XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZW50cmllc1tpbmRleF0gPSBlbnRyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkuc2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBzZWN0aW9uIHdpdGggdGhlIGdpdmVuIHRpdGxlXG4gICAqXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgYSBzZWN0aW9uIHdhcyByZW1vdmVkXG4gICAqL1xuICByZW1vdmVTZWN0aW9uKHRpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZEluZGV4KHRpdGxlKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHdpdGggdGhlIGdpdmVuIHRpdGxlLCBpZiB0aGVyZSBpcyBvbmVcbiAgICovXG4gIHRyeUZpbmRTZWN0aW9uKHRpdGxlOiBzdHJpbmcpOiBTZWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZEluZGV4KHRpdGxlKTtcbiAgICByZXR1cm4gaW5kZXggPj0gMCA/IHRoaXMuZW50cmllc1tpbmRleF0uc2VjdGlvbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQ29udGVudChfOiBJUmVzb2x2ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBjb250ZW50ID0gdGhpcy5tYXJrZXIgPyBgPCEtLSAke3RoaXMubWFya2VyfSAtLT5cXG5cXG5gIDogJyc7XG4gICAgY29udGVudCA9IGNvbnRlbnQuY29uY2F0KGAjICR7dGhpcy5wcm9qZWN0Lm5hbWV9XFxuXFxuYCk7XG4gICAgY29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRoaXMuZGVzY3JpcHRpb24gPyBgJHt0aGlzLmRlc2NyaXB0aW9ufVxcblxcbmAgOiAnJyk7XG4gICAgcmV0dXJuIGNvbnRlbnQuY29uY2F0KHRoaXMuc2VjdGlvbnMubWFwKChzKSA9PiBzLnN5bnRoKCkpLmpvaW4oJ1xcblxcbicpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEluZGV4KHRpdGxlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZmluZEluZGV4KChlKSA9PiBlLnNlY3Rpb24ub3B0aW9ucy50aXRsZSA9PT0gdGl0bGUpO1xuICB9XG5cbiAgLy8gQXJyYXkucHJvdG90eXBlLnNvcnQgaXMgc3RhYmxlLCBzbyBzZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9yZGVyIGtlZXAgdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCBpblxuICBwcml2YXRlIG9yZGVyZWRFbnRyaWVzKCk6IEFycmF5PFNlY3Rpb25FbnRyeT4ge1xuICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXS5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gIH1cbn1cbiJdfQ==
@@ -20,6 +20,7 @@ const projen_1 = require("projen");
20
20
  const awscdk_1 = require("projen/lib/awscdk");
21
21
  const codeowners_1 = require("../../components/github/codeowners");
22
22
  const codeql_1 = require("../../components/github/codeql");
23
+ const contributing_1 = require("../../components/github/contributing");
23
24
  const deployments_1 = require("../../components/github/deployments");
24
25
  const mergify_1 = require("../../components/github/mergify");
25
26
  const pull_request_template_1 = require("../../components/github/pull-request-template");
@@ -61,7 +62,7 @@ function getOptions(options) {
61
62
  * @pjid cdk-typescript-app
62
63
  */
63
64
  class CdkTypeScriptApp extends awscdk_1.AwsCdkTypeScriptApp {
64
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.CdkTypeScriptApp", version: "5.3.0" };
65
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.CdkTypeScriptApp", version: "5.5.0" };
65
66
  readme;
66
67
  constructor(options) {
67
68
  const mergedOptions = getOptions(options);
@@ -114,6 +115,7 @@ If the app has more than one stack, name the stacks to deploy or pass \`--all\`,
114
115
  nodeVersion: this.nodeVersion,
115
116
  releaseWorkflowName: mergedOptions.releaseWorkflowName,
116
117
  });
118
+ contributing_1.Contributing.of(this).configurePullRequestTitle(mergedOptions);
117
119
  if (this.autoMerge) {
118
120
  (0, mergify_1.configureMergify)(this, {
119
121
  approvedReviews: mergedOptions.autoMergeOptions?.approvedReviews,
@@ -172,4 +174,4 @@ integ-runner ignores changes to asset hashes, so a test whose only change is Lam
172
174
  exports.CdkTypeScriptApp = CdkTypeScriptApp;
173
175
  __exportStar(require("./cdk-typescript-app-options"), exports);
174
176
  __exportStar(require("./deployment-environment"), exports);
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvY2RrLXRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUNoRCw4Q0FJMkI7QUFFM0IsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCxxRUFBcUU7QUFDckUsNkRBR3lDO0FBQ3pDLHlGQUE4RjtBQUM5RixvREFBOEQ7QUFDOUQsNkVBQWdGO0FBQ2hGLDZEQUF5RDtBQUV6RDs7R0FFRztBQUNVLFFBQUEsNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0FBRXRELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLENBQUM7QUFFdkQsU0FBUyxVQUFVLENBQUMsT0FBZ0M7SUFDbEQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV6QixNQUFNLFFBQVEsR0FBRztRQUNmLElBQUk7UUFDSixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDaEMsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsc0JBQWEsQ0FBQyxXQUFXLEVBQUU7UUFDckQsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtRQUNuQywyRUFBMkU7UUFDM0UsOERBQThEO1FBQzlELE9BQU8sRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDMUQsc0dBQXNHO1FBQ3RHLGNBQWMsRUFBRSxJQUFJO0tBQ3NCLENBQUM7SUFFN0MsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSw0QkFBbUI7O0lBQ3ZELE1BQU0sQ0FBUztJQUVmLFlBQVksT0FBZ0M7UUFDMUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLEtBQUssQ0FBQztZQUNKLEdBQUcsYUFBYTtZQUNoQixnQkFBZ0IsRUFBRSxJQUFBLDBCQUFnQixFQUFDLGFBQWEsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFFakMsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsV0FBVyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVztTQUMvQyxDQUFDLENBQUM7UUFDSCwrREFBK0Q7UUFDL0QsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLHVCQUF1QjtZQUMxRCxDQUFDLENBQUMsZ0dBQWdHO1lBQ2xHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDcEIsaUJBQWlCLEVBQ2pCLElBQUEsdUNBQXFCLEVBQUMsSUFBSSxFQUFFO1lBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixhQUFhLEVBQUU7Z0JBQ2IsMkRBQTJELGNBQWMsRUFBRTthQUM1RTtTQUNGLENBQUMsRUFDRixFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLFlBQVksRUFBRSxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLEtBQUssRUFDTDs7Ozs7Ozs7Ozs7O29IQVk4RyxFQUM5RyxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSxvQ0FBNEIsQ0FDakUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDcEUsSUFBSSxlQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsb0ZBQW9GO2dCQUNwRixXQUFXLEVBQUUsYUFBYSxDQUFDLGlCQUFpQixJQUFJO29CQUM5QyxlQUFNLENBQUMsb0JBQW9CO2lCQUM1QjtnQkFDRCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7Z0JBQzlDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBQSw0QkFBYyxFQUFDLElBQUksRUFBRTtZQUNuQixXQUFXLEVBQUUsYUFBYSxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixtQkFBbUIsRUFBRSxhQUFhLENBQUMsbUJBQW1CO1NBQ3ZELENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUEsMEJBQWdCLEVBQUMsSUFBSSxFQUFFO2dCQUNyQixlQUFlLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGVBQWU7Z0JBQ2hFLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxvQkFBb0IsQ0FBQyxrQkFBMEI7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsdUJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLHVCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3JCLEdBQUcsWUFBWSxJQUFJLGtCQUFrQixFQUFFLEVBQ3ZDLHVCQUFjLENBQUMsS0FBSyxDQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3JCLEdBQUcsaUJBQWlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsVUFBVSxFQUNoRSx1QkFBYyxDQUFDLEtBQUssQ0FDckIsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzFCLFdBQVcsRUFDVCxpRkFBaUY7WUFDbkYsUUFBUSxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztZQUN2RSxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUMxQixXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELFFBQVEsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUM7WUFDdkUsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDMUIsV0FBVyxFQUNULHNFQUFzRTtZQUN4RSxRQUFRLEVBQUU7Z0JBQ1IsY0FBYztnQkFDZCxJQUFJO2dCQUNKLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixLQUFLO2dCQUNMLG9CQUFvQjthQUNyQjtZQUNELFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNwQixtQkFBbUIsRUFDbkI7Ozs7Ozs7Ozs7O0lBV0YsWUFBWSxxQkFBcUIsa0JBQWtCLFlBQVksaUJBQWlCLDJNQUEyTSxpQkFBaUI7O2tOQUU5RixFQUM1TSxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO0lBQ0osQ0FBQzs7QUF0SUgsNENBdUlDO0FBRUQsK0RBQTZDO0FBQzdDLDJEQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlcGVuZGVuY3lUeXBlLCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHtcbiAgQXdzQ2RrVHlwZVNjcmlwdEFwcCxcbiAgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMsXG4gIExhbWJkYVJ1bnRpbWUsXG59IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IENka1R5cGVTY3JpcHRBcHBPcHRpb25zIH0gZnJvbSAnLi9jZGstdHlwZXNjcmlwdC1hcHAtb3B0aW9ucyc7XG5pbXBvcnQgeyBDb2RlT3duZXJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZW93bmVycyc7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2RlcWwnO1xuaW1wb3J0IHsgYWRkRGVwbG95bWVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9kZXBsb3ltZW50cyc7XG5pbXBvcnQge1xuICBhdXRvTWVyZ2VPcHRpb25zLFxuICBjb25maWd1cmVNZXJnaWZ5LFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5JztcbmltcG9ydCB7IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvcHVsbC1yZXF1ZXN0LXRlbXBsYXRlJztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZSc7XG5pbXBvcnQgeyBnZXR0aW5nU3RhcnRlZFNlY3Rpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZS9nZXR0aW5nLXN0YXJ0ZWQnO1xuaW1wb3J0IHsgbWVyZ2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVyZ2Utb3B0aW9ucyc7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgYEBhd3MtY2RrL2ludGVnLXJ1bm5lcmAgcGlubmVkIHdoZW4gYGV4cGVyaW1lbnRhbEludGVnUnVubmVyYCBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlRFR19SVU5ORVJfVkVSU0lPTiA9ICcyLjIwNS42JztcblxuY29uc3QgSU5URUdfUlVOTkVSID0gJ0Bhd3MtY2RrL2ludGVnLXJ1bm5lcic7XG5jb25zdCBJTlRFR19URVNUU19BTFBIQSA9ICdAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYSc7XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMob3B0aW9uczogQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIG5hbWUsXG4gICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6ICdtYWluJyxcbiAgICBnaXRpZ25vcmU6IFsnLm5wbXJjJywgJy52c2NvZGUnXSxcbiAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFLFxuICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgLy8gYXV0aGVudGljYXRlIGFzIHRoZSBHaXRIdWIgQXBwLCBzbyBtZXJnaWZ5IGNhbiBhcHByb3ZlIHVwZ3JhZGUgcHVsbCByZXF1ZXN0c1xuICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCh7fSksXG4gICAgbGFtYmRhT3B0aW9uczogeyBydW50aW1lOiBMYW1iZGFSdW50aW1lLk5PREVKU18yNF9YIH0sXG4gICAgamVzdE9wdGlvbnM6IHsgamVzdFZlcnNpb246ICdeMzAnIH0sXG4gICAgLy8gbWF0Y2ggdGhlIGxhbWJkYSBydW50aW1lLCB1bmxlc3MgZGVyaXZlZCBmcm9tIG1pbk5vZGVWZXJzaW9uOyBhIGNvbnN1bWVyXG4gICAgLy8gQHR5cGVzL25vZGUgaW4gZGV2RGVwcyBpcyBhZGRlZCBsYXRlciwgc28gcmVwbGFjZXMgdGhpcyBvbmVcbiAgICBkZXZEZXBzOiBvcHRpb25zLm1pbk5vZGVWZXJzaW9uID8gW10gOiBbJ0B0eXBlcy9ub2RlQF4yNCddLFxuICAgIC8vIHRzLWplc3Qgb25seSByZXBvcnRzIHR5cGUgZXJyb3JzIGluIHRoZSBmaWxlcyBhIHRlc3QgcnVuIGxvYWRzLCBzbyB0eXBlLWNoZWNrIHRoZSB3aG9sZSBzdWl0ZSBmaXJzdFxuICAgIHR5cGVjaGVja1Rlc3RzOiB0cnVlLFxuICB9IHNhdGlzZmllcyBQYXJ0aWFsPENka1R5cGVTY3JpcHRBcHBPcHRpb25zPjtcblxuICByZXR1cm4gbWVyZ2VPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBIENESyBhcHBsaWNhdGlvbiBpbiBUeXBlU2NyaXB0XG4gKlxuICogRGVmYXVsdHMgdG8gdGhlIE5vZGUuanMgMjQgTGFtYmRhIHJ1bnRpbWUgKGBsYW1iZGFPcHRpb25zLnJ1bnRpbWVgKSB3aXRoXG4gKiBtYXRjaGluZyBgQHR5cGVzL25vZGVgLCBhbmQgSmVzdCAzMCAoYGplc3RPcHRpb25zLmplc3RWZXJzaW9uYCkuXG4gKlxuICogQHBqaWQgY2RrLXR5cGVzY3JpcHQtYXBwXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtUeXBlU2NyaXB0QXBwIGV4dGVuZHMgQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG4gIHJlYWRtZTogUmVhZG1lO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka1R5cGVTY3JpcHRBcHBPcHRpb25zKSB7XG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgICAgYXV0b01lcmdlT3B0aW9uczogYXV0b01lcmdlT3B0aW9ucyhtZXJnZWRPcHRpb25zKSxcbiAgICB9IGFzIEF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgdGhpcy5yZWFkbWUgPSBuZXcgUmVhZG1lKHRoaXMsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXJnZWRPcHRpb25zLnJlYWRtZT8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gICAgLy8gaW50ZWc6ZGVidWcgb25seSBjb21wYXJlcyBzbmFwc2hvdHMsIHNvIG5lZWRzIG5vIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgZGVwbG95aW5nVGFza3MgPSBtZXJnZWRPcHRpb25zLmV4cGVyaW1lbnRhbEludGVnUnVubmVyXG4gICAgICA/ICcgYW5kIGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdCB0YXNrcyB0aGF0IGRlcGxveSAoYGludGVnOnVwZGF0ZWAsIGBpbnRlZzpmb3JjZWAsIGBpbnRlZzp3YXRjaGApJ1xuICAgICAgOiAnJztcbiAgICB0aGlzLnJlYWRtZS5hZGRTZWN0aW9uKFxuICAgICAgJ0dldHRpbmcgU3RhcnRlZCcsXG4gICAgICBnZXR0aW5nU3RhcnRlZFNlY3Rpb24odGhpcywge1xuICAgICAgICBub2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgICAgcHJlcmVxdWlzaXRlczogW1xuICAgICAgICAgIGBBV1MgY3JlZGVudGlhbHMgZm9yIHRoZSB0YXJnZXQgYWNjb3VudCwgbmVlZGVkIHRvIGRlcGxveSR7ZGVwbG95aW5nVGFza3N9YCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuSU5UUk9EVUNUSU9OIH0sXG4gICAgKTtcbiAgICB0aGlzLnJlYWRtZS5hZGRTZWN0aW9uKFxuICAgICAgJ0NESycsXG4gICAgICBgQm9vdHN0cmFwIGVhY2ggQVdTIGFjY291bnQgYW5kIHJlZ2lvbiBvbmNlOlxuXG5cXGBcXGBcXGBzaFxubnB4IGNkayBib290c3RyYXBcblxcYFxcYFxcYFxuXG5EZXBsb3kgdGhlIGFwcDpcblxuXFxgXFxgXFxgc2hcbm5weCBwcm9qZW4gZGVwbG95XG5cXGBcXGBcXGBcblxuSWYgdGhlIGFwcCBoYXMgbW9yZSB0aGFuIG9uZSBzdGFjaywgbmFtZSB0aGUgc3RhY2tzIHRvIGRlcGxveSBvciBwYXNzIFxcYC0tYWxsXFxgLCBhcyBpbiBcXGBucHggcHJvamVuIGRlcGxveSAtLWFsbFxcYC5gLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuVVNBR0UgfSxcbiAgICApO1xuICAgIGlmIChtZXJnZWRPcHRpb25zLmV4cGVyaW1lbnRhbEludGVnUnVubmVyKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUludGVnUnVubmVyKFxuICAgICAgICBtZXJnZWRPcHRpb25zLmludGVnUnVubmVyVmVyc2lvbiA/PyBERUZBVUxUX0lOVEVHX1JVTk5FUl9WRVJTSU9OLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKChtZXJnZWRPcHRpb25zLmNvZGVxbCA/PyB0cnVlKSAmJiB0aGlzLmdpdGh1Yj8ud29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgbmV3IENvZGVRbCh0aGlzLmdpdGh1Yiwge1xuICAgICAgICAvLyBpbnRlZy1ydW5uZXIgc25hcHNob3QgYXNzZXRzIGFyZSBidW5kbGVzIG9mIGRlcGVuZGVuY2llcywgcmVuYW1lZCBvbiBldmVyeSB1cGRhdGVcbiAgICAgICAgcGF0aHNJZ25vcmU6IG1lcmdlZE9wdGlvbnMuY29kZXFsUGF0aHNJZ25vcmUgPz8gW1xuICAgICAgICAgIENvZGVRbC5JTlRFR19TTkFQU0hPVF9QQVRIUyxcbiAgICAgICAgXSxcbiAgICAgICAgYnJhbmNoZXM6IFttZXJnZWRPcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoXSxcbiAgICAgICAgbGFuZ3VhZ2VzOiBbJ2phdmFzY3JpcHQtdHlwZXNjcmlwdCcsICdhY3Rpb25zJ10sXG4gICAgICB9KTtcbiAgICB9XG4gICAgYWRkRGVwbG95bWVudHModGhpcywge1xuICAgICAgZGVwbG95bWVudHM6IG1lcmdlZE9wdGlvbnMuZGVwbG95bWVudHMgPz8gW10sXG4gICAgICBub2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgIHJlbGVhc2VXb3JrZmxvd05hbWU6IG1lcmdlZE9wdGlvbnMucmVsZWFzZVdvcmtmbG93TmFtZSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5hdXRvTWVyZ2UpIHtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5zIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGRlcGVuZGVuY2llcyB0aGF0IHByb2plbiBhZGRzIGF0IGBsYXRlc3RgLCBhc1xuICAgKiBlYWNoIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYWAgcmVsZWFzZSByZXdyaXRlcyB0aGUgYnVuZGxlZCBhc3NlcnRpb25cbiAgICogY29kZSBpbiB0aGUgc25hcHNob3RzIGFuZCBkcmlmdHMgZnJvbSBgYXdzLWNkay1saWJgLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25maWd1cmVJbnRlZ1J1bm5lcihpbnRlZ1J1bm5lclZlcnNpb246IHN0cmluZykge1xuICAgIHRoaXMuZGVwcy5yZW1vdmVEZXBlbmRlbmN5KElOVEVHX1JVTk5FUiwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICB0aGlzLmRlcHMucmVtb3ZlRGVwZW5kZW5jeShJTlRFR19URVNUU19BTFBIQSwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICB0aGlzLmRlcHMuYWRkRGVwZW5kZW5jeShcbiAgICAgIGAke0lOVEVHX1JVTk5FUn1AJHtpbnRlZ1J1bm5lclZlcnNpb259YCxcbiAgICAgIERlcGVuZGVuY3lUeXBlLkJVSUxELFxuICAgICk7XG4gICAgdGhpcy5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHtJTlRFR19URVNUU19BTFBIQX1AJHt0aGlzLmNka0RlcHMuY2RrTWluaW11bVZlcnNpb259LWFscGhhLjBgLFxuICAgICAgRGVwZW5kZW5jeVR5cGUuQlVJTEQsXG4gICAgKTtcblxuICAgIHRoaXMuYWRkVGFzaygnaW50ZWc6Zm9yY2UnLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSdW4gaW50ZWdyYXRpb24gc25hcHNob3QgdGVzdHMsIGZvcmNpbmcgdGVzdHMgdG8gcnVuIGV2ZW4gaWYgdGhlcmUncyBubyBjaGFuZ2VzXCIsXG4gICAgICBleGVjQXJnczogWydpbnRlZy1ydW5uZXInLCAnJEAnLCAnLS1sYW5ndWFnZScsICd0eXBlc2NyaXB0JywgJy0tZm9yY2UnXSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkVGFzaygnaW50ZWc6d2F0Y2gnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1dhdGNoIHRoZSBpbnRlZ3JhdGlvbiBzbmFwc2hvdCB0ZXN0cycsXG4gICAgICBleGVjQXJnczogWydpbnRlZy1ydW5uZXInLCAnJEAnLCAnLS1sYW5ndWFnZScsICd0eXBlc2NyaXB0JywgJy0td2F0Y2gnXSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkVGFzaygnaW50ZWc6ZGVidWcnLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1J1biBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHZlcmJvc2UgZGlhZ25vc3RpY3MgYW5kIGZhaWx1cmUgYXJ0aWZhY3RzJyxcbiAgICAgIGV4ZWNBcmdzOiBbXG4gICAgICAgICdpbnRlZy1ydW5uZXInLFxuICAgICAgICAnJEAnLFxuICAgICAgICAnLS1sYW5ndWFnZScsXG4gICAgICAgICd0eXBlc2NyaXB0JyxcbiAgICAgICAgJy12dicsXG4gICAgICAgICctLWluc3BlY3QtZmFpbHVyZXMnLFxuICAgICAgXSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbihcbiAgICAgICdJbnRlZ3JhdGlvbiBUZXN0cycsXG4gICAgICBgSW50ZWdyYXRpb24gdGVzdHMgYXJlIHJ1biBieSBbaW50ZWctcnVubmVyXShodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGstY2xpL3RyZWUvbWFpbi9wYWNrYWdlcy8lNDBhd3MtY2RrL2ludGVnLXJ1bm5lcikuXG5cblRoZXNlIHRhc2tzIG9ubHkgY29tcGFyZSBzbmFwc2hvdHMsIHNvIHRoZXkgbmVlZCBubyBBV1MgY3JlZGVudGlhbHMgYW5kIGRlcGxveSBub3RoaW5nLiBcXGBucHggcHJvamVuIHRlc3RcXGAsIGFuZCBzbyBcXGBucHggcHJvamVuIGJ1aWxkXFxgLCBydW5zIFxcYGludGVnXFxgOlxuKiBcXGBucHggcHJvamVuIGludGVnXFxgIHN5bnRoZXNpemVzIGVhY2ggdGVzdCBhbmQgY29tcGFyZXMgaXQgd2l0aCBpdHMgc25hcHNob3QuXG4qIFxcYG5weCBwcm9qZW4gaW50ZWc6ZGVidWdcXGAgZG9lcyB0aGUgc2FtZSB3aXRoIHZlcmJvc2UgZGlhZ25vc3RpY3MsIGtlZXBpbmcgdGhlIGdlbmVyYXRlZCBzbmFwc2hvdHMgb2YgdGVzdHMgdGhhdCBkaWZmZXIuXG5cblRoZXNlIHRhc2tzIGRlcGxveSB0byBBV1MsIGluIHRoZSBhY2NvdW50IGFuZCByZWdpb24gb2YgdGhlIGN1cnJlbnQgQVdTIGNyZWRlbnRpYWxzLiBFYWNoIHRlc3QncyBzdGFja3MgYXJlIHJlYWwsIHNvIHRoZSB0YXNrcyB0YWtlIG1pbnV0ZXMgYW5kIGluY3VyIEFXUyBjb3N0czpcbiogXFxgbnB4IHByb2plbiBpbnRlZzp1cGRhdGVcXGAgZGVwbG95cyB0aGUgdGVzdHMgd2hvc2Ugc25hcHNob3RzIGRpZmZlciwgcnVucyB0aGVpciBhc3NlcnRpb25zLCBkZXN0cm95cyB0aGUgc3RhY2tzIGFuZCwgaWYgdGhleSBwYXNzLCB1cGRhdGVzIHRoZSBzbmFwc2hvdHMuXG4qIFxcYG5weCBwcm9qZW4gaW50ZWc6Zm9yY2VcXGAgZGVwbG95cyBldmVyeSB0ZXN0IGluIHRoZSBzYW1lIHdheSwgZXZlbiBpZiBpdHMgc25hcHNob3QgaXMgdW5jaGFuZ2VkLlxuKiBcXGBucHggcHJvamVuIGludGVnOndhdGNoXFxgIGRlcGxveXMgYSBzaW5nbGUgdGVzdCBhbmQgcmVkZXBsb3lzIGl0IGFzIGl0cyBjb2RlIGNoYW5nZXMsIGxpa2UgXFxgY2RrIGRlcGxveSAtLXdhdGNoXFxgLlxuXG5cXGAke0lOVEVHX1JVTk5FUn1cXGAgaXMgcGlubmVkIHRvIFxcYCR7aW50ZWdSdW5uZXJWZXJzaW9ufVxcYCBhbmQgXFxgJHtJTlRFR19URVNUU19BTFBIQX1cXGAgdG8gdGhlIHJlbGVhc2UgbWF0Y2hpbmcgXFxgY2RrVmVyc2lvblxcYCwgc28gdGhlIHVwZ3JhZGUgd29ya2Zsb3cgbmV2ZXIgY2hhbmdlcyB0aGVpciB2ZXJzaW9uczogdGhleSBvbmx5IGNoYW5nZSB3aGVuIFxcYGNka1ZlcnNpb25cXGAgb3IgXFxgaW50ZWdSdW5uZXJWZXJzaW9uXFxgIGlzIGNoYW5nZWQuIFRoaXMgaXMgaW50ZW5kZWQsIGFzIGVhY2ggXFxgJHtJTlRFR19URVNUU19BTFBIQX1cXGAgcmVsZWFzZSByZXdyaXRlcyB0aGUgYXNzZXJ0aW9uIGNvZGUgYnVuZGxlZCBpbiB0aGUgc25hcHNob3RzLlxuXG5pbnRlZy1ydW5uZXIgaWdub3JlcyBjaGFuZ2VzIHRvIGFzc2V0IGhhc2hlcywgc28gYSB0ZXN0IHdob3NlIG9ubHkgY2hhbmdlIGlzIExhbWJkYSBjb2RlIGlzIHJlcG9ydGVkIGFzIFxcYFVOQ0hBTkdFRFxcYCBhbmQgaXMgbm90IGRlcGxveWVkLiBSdW4gXFxgbnB4IHByb2plbiBpbnRlZzpmb3JjZVxcYCB0byBleGVyY2lzZSBuZXcgTGFtYmRhIGNvZGUgZW5kIHRvIGVuZC5gLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuVVNBR0UgfSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vY2RrLXR5cGVzY3JpcHQtYXBwLW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXBsb3ltZW50LWVudmlyb25tZW50JztcbiJdfQ==
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvY2RrLXRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUNoRCw4Q0FJMkI7QUFFM0IsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCx1RUFBb0U7QUFDcEUscUVBQXFFO0FBQ3JFLDZEQUd5QztBQUN6Qyx5RkFBOEY7QUFDOUYsb0RBQThEO0FBQzlELDZFQUFnRjtBQUNoRiw2REFBeUQ7QUFFekQ7O0dBRUc7QUFDVSxRQUFBLDRCQUE0QixHQUFHLFNBQVMsQ0FBQztBQUV0RCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQztBQUM3QyxNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDO0FBRXZELFNBQVMsVUFBVSxDQUFDLE9BQWdDO0lBQ2xELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJO1FBQ0osb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ2hDLDJCQUEyQixFQUFFLHFEQUE2QjtRQUMxRCxVQUFVLEVBQUUsSUFBSTtRQUNoQiwrRUFBK0U7UUFDL0UsaUJBQWlCLEVBQUUsZUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkQsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLHNCQUFhLENBQUMsV0FBVyxFQUFFO1FBQ3JELFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7UUFDbkMsMkVBQTJFO1FBQzNFLDhEQUE4RDtRQUM5RCxPQUFPLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBQzFELHNHQUFzRztRQUN0RyxjQUFjLEVBQUUsSUFBSTtLQUNzQixDQUFDO0lBRTdDLE9BQU8sSUFBQSw0QkFBWSxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsNEJBQW1COztJQUN2RCxNQUFNLENBQVM7SUFFZixZQUFZLE9BQWdDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixHQUFHLGFBQWE7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBQSwwQkFBZ0IsRUFBQyxhQUFhLENBQUM7U0FDcEIsQ0FBQyxDQUFDO1FBRWpDLElBQUksdUJBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsK0RBQStEO1FBQy9ELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyx1QkFBdUI7WUFDMUQsQ0FBQyxDQUFDLGdHQUFnRztZQUNsRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLGlCQUFpQixFQUNqQixJQUFBLHVDQUFxQixFQUFDLElBQUksRUFBRTtZQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsYUFBYSxFQUFFO2dCQUNiLDJEQUEyRCxjQUFjLEVBQUU7YUFDNUU7U0FDRixDQUFDLEVBQ0YsRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FDcEMsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNwQixLQUFLLEVBQ0w7Ozs7Ozs7Ozs7OztvSEFZOEcsRUFDOUcsRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FDN0IsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixhQUFhLENBQUMsa0JBQWtCLElBQUksb0NBQTRCLENBQ2pFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BFLElBQUksZUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLG9GQUFvRjtnQkFDcEYsV0FBVyxFQUFFLGFBQWEsQ0FBQyxpQkFBaUIsSUFBSTtvQkFDOUMsZUFBTSxDQUFDLG9CQUFvQjtpQkFDNUI7Z0JBQ0QsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO2dCQUM5QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLENBQUM7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUEsNEJBQWMsRUFBQyxJQUFJLEVBQUU7WUFDbkIsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRTtZQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLG1CQUFtQjtTQUN2RCxDQUFDLENBQUM7UUFDSCwyQkFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFBLDBCQUFnQixFQUFDLElBQUksRUFBRTtnQkFDckIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlO2dCQUNoRSxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsa0JBQTBCO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLHVCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSx1QkFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUNyQixHQUFHLFlBQVksSUFBSSxrQkFBa0IsRUFBRSxFQUN2Qyx1QkFBYyxDQUFDLEtBQUssQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUNyQixHQUFHLGlCQUFpQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLFVBQVUsRUFDaEUsdUJBQWMsQ0FBQyxLQUFLLENBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUMxQixXQUFXLEVBQ1QsaUZBQWlGO1lBQ25GLFFBQVEsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUM7WUFDdkUsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDMUIsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxRQUFRLEVBQUUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO1lBQ3ZFLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzFCLFdBQVcsRUFDVCxzRUFBc0U7WUFDeEUsUUFBUSxFQUFFO2dCQUNSLGNBQWM7Z0JBQ2QsSUFBSTtnQkFDSixZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osS0FBSztnQkFDTCxvQkFBb0I7YUFDckI7WUFDRCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDcEIsbUJBQW1CLEVBQ25COzs7Ozs7Ozs7OztJQVdGLFlBQVkscUJBQXFCLGtCQUFrQixZQUFZLGlCQUFpQiwyTUFBMk0saUJBQWlCOztrTkFFOUYsRUFDNU0sRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FDN0IsQ0FBQztJQUNKLENBQUM7O0FBdklILDRDQXdJQztBQUVELCtEQUE2QztBQUM3QywyREFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSwgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7XG4gIEF3c0Nka1R5cGVTY3JpcHRBcHAsXG4gIEF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zLFxuICBMYW1iZGFSdW50aW1lLFxufSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5pbXBvcnQgeyBDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucyB9IGZyb20gJy4vY2RrLXR5cGVzY3JpcHQtYXBwLW9wdGlvbnMnO1xuaW1wb3J0IHsgQ29kZU93bmVycyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvZGVvd25lcnMnO1xuaW1wb3J0IHsgQ29kZVFsIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZXFsJztcbmltcG9ydCB7IENvbnRyaWJ1dGluZyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvbnRyaWJ1dGluZyc7XG5pbXBvcnQgeyBhZGREZXBsb3ltZW50cyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2RlcGxveW1lbnRzJztcbmltcG9ydCB7XG4gIGF1dG9NZXJnZU9wdGlvbnMsXG4gIGNvbmZpZ3VyZU1lcmdpZnksXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL21lcmdpZnknO1xuaW1wb3J0IHsgREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9wdWxsLXJlcXVlc3QtdGVtcGxhdGUnO1xuaW1wb3J0IHsgUmVhZG1lLCBSZWFkbWVPcmRlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lJztcbmltcG9ydCB7IGdldHRpbmdTdGFydGVkU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZCc7XG5pbXBvcnQgeyBtZXJnZU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXJnZS1vcHRpb25zJztcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiBgQGF3cy1jZGsvaW50ZWctcnVubmVyYCBwaW5uZWQgd2hlbiBgZXhwZXJpbWVudGFsSW50ZWdSdW5uZXJgIGlzIGVuYWJsZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOVEVHX1JVTk5FUl9WRVJTSU9OID0gJzIuMjA1LjYnO1xuXG5jb25zdCBJTlRFR19SVU5ORVIgPSAnQGF3cy1jZGsvaW50ZWctcnVubmVyJztcbmNvbnN0IElOVEVHX1RFU1RTX0FMUEhBID0gJ0Bhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhJztcblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zOiBDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucykge1xuICBjb25zdCB7IG5hbWUgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgbmFtZSxcbiAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgIGdpdGlnbm9yZTogWycubnBtcmMnLCAnLnZzY29kZSddLFxuICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50czogREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUsXG4gICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAvLyBhdXRoZW50aWNhdGUgYXMgdGhlIEdpdEh1YiBBcHAsIHNvIG1lcmdpZnkgY2FuIGFwcHJvdmUgdXBncmFkZSBwdWxsIHJlcXVlc3RzXG4gICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKHt9KSxcbiAgICBsYW1iZGFPcHRpb25zOiB7IHJ1bnRpbWU6IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzI0X1ggfSxcbiAgICBqZXN0T3B0aW9uczogeyBqZXN0VmVyc2lvbjogJ14zMCcgfSxcbiAgICAvLyBtYXRjaCB0aGUgbGFtYmRhIHJ1bnRpbWUsIHVubGVzcyBkZXJpdmVkIGZyb20gbWluTm9kZVZlcnNpb247IGEgY29uc3VtZXJcbiAgICAvLyBAdHlwZXMvbm9kZSBpbiBkZXZEZXBzIGlzIGFkZGVkIGxhdGVyLCBzbyByZXBsYWNlcyB0aGlzIG9uZVxuICAgIGRldkRlcHM6IG9wdGlvbnMubWluTm9kZVZlcnNpb24gPyBbXSA6IFsnQHR5cGVzL25vZGVAXjI0J10sXG4gICAgLy8gdHMtamVzdCBvbmx5IHJlcG9ydHMgdHlwZSBlcnJvcnMgaW4gdGhlIGZpbGVzIGEgdGVzdCBydW4gbG9hZHMsIHNvIHR5cGUtY2hlY2sgdGhlIHdob2xlIHN1aXRlIGZpcnN0XG4gICAgdHlwZWNoZWNrVGVzdHM6IHRydWUsXG4gIH0gc2F0aXNmaWVzIFBhcnRpYWw8Q2RrVHlwZVNjcmlwdEFwcE9wdGlvbnM+O1xuXG4gIHJldHVybiBtZXJnZU9wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEEgQ0RLIGFwcGxpY2F0aW9uIGluIFR5cGVTY3JpcHRcbiAqXG4gKiBEZWZhdWx0cyB0byB0aGUgTm9kZS5qcyAyNCBMYW1iZGEgcnVudGltZSAoYGxhbWJkYU9wdGlvbnMucnVudGltZWApIHdpdGhcbiAqIG1hdGNoaW5nIGBAdHlwZXMvbm9kZWAsIGFuZCBKZXN0IDMwIChgamVzdE9wdGlvbnMuamVzdFZlcnNpb25gKS5cbiAqXG4gKiBAcGppZCBjZGstdHlwZXNjcmlwdC1hcHBcbiAqL1xuZXhwb3J0IGNsYXNzIENka1R5cGVTY3JpcHRBcHAgZXh0ZW5kcyBBd3NDZGtUeXBlU2NyaXB0QXBwIHtcbiAgcmVhZG1lOiBSZWFkbWU7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgICBhdXRvTWVyZ2VPcHRpb25zOiBhdXRvTWVyZ2VPcHRpb25zKG1lcmdlZE9wdGlvbnMpLFxuICAgIH0gYXMgQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpO1xuXG4gICAgbmV3IENvZGVPd25lcnModGhpcywgbWVyZ2VkT3B0aW9ucy5jb2RlT3duZXJzKTtcbiAgICB0aGlzLnJlYWRtZSA9IG5ldyBSZWFkbWUodGhpcywge1xuICAgICAgZGVzY3JpcHRpb246IG1lcmdlZE9wdGlvbnMucmVhZG1lPy5kZXNjcmlwdGlvbixcbiAgICB9KTtcbiAgICAvLyBpbnRlZzpkZWJ1ZyBvbmx5IGNvbXBhcmVzIHNuYXBzaG90cywgc28gbmVlZHMgbm8gY3JlZGVudGlhbHNcbiAgICBjb25zdCBkZXBsb3lpbmdUYXNrcyA9IG1lcmdlZE9wdGlvbnMuZXhwZXJpbWVudGFsSW50ZWdSdW5uZXJcbiAgICAgID8gJyBhbmQgZm9yIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHRhc2tzIHRoYXQgZGVwbG95IChgaW50ZWc6dXBkYXRlYCwgYGludGVnOmZvcmNlYCwgYGludGVnOndhdGNoYCknXG4gICAgICA6ICcnO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgIGdldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzLCB7XG4gICAgICAgIG5vZGVWZXJzaW9uOiB0aGlzLm5vZGVWZXJzaW9uLFxuICAgICAgICBwcmVyZXF1aXNpdGVzOiBbXG4gICAgICAgICAgYEFXUyBjcmVkZW50aWFscyBmb3IgdGhlIHRhcmdldCBhY2NvdW50LCBuZWVkZWQgdG8gZGVwbG95JHtkZXBsb3lpbmdUYXNrc31gLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5JTlRST0RVQ1RJT04gfSxcbiAgICApO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnQ0RLJyxcbiAgICAgIGBCb290c3RyYXAgZWFjaCBBV1MgYWNjb3VudCBhbmQgcmVnaW9uIG9uY2U6XG5cblxcYFxcYFxcYHNoXG5ucHggY2RrIGJvb3RzdHJhcFxuXFxgXFxgXFxgXG5cbkRlcGxveSB0aGUgYXBwOlxuXG5cXGBcXGBcXGBzaFxubnB4IHByb2plbiBkZXBsb3lcblxcYFxcYFxcYFxuXG5JZiB0aGUgYXBwIGhhcyBtb3JlIHRoYW4gb25lIHN0YWNrLCBuYW1lIHRoZSBzdGFja3MgdG8gZGVwbG95IG9yIHBhc3MgXFxgLS1hbGxcXGAsIGFzIGluIFxcYG5weCBwcm9qZW4gZGVwbG95IC0tYWxsXFxgLmAsXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5VU0FHRSB9LFxuICAgICk7XG4gICAgaWYgKG1lcmdlZE9wdGlvbnMuZXhwZXJpbWVudGFsSW50ZWdSdW5uZXIpIHtcbiAgICAgIHRoaXMuY29uZmlndXJlSW50ZWdSdW5uZXIoXG4gICAgICAgIG1lcmdlZE9wdGlvbnMuaW50ZWdSdW5uZXJWZXJzaW9uID8/IERFRkFVTFRfSU5URUdfUlVOTkVSX1ZFUlNJT04sXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoKG1lcmdlZE9wdGlvbnMuY29kZXFsID8/IHRydWUpICYmIHRoaXMuZ2l0aHViPy53b3JrZmxvd3NFbmFibGVkKSB7XG4gICAgICBuZXcgQ29kZVFsKHRoaXMuZ2l0aHViLCB7XG4gICAgICAgIC8vIGludGVnLXJ1bm5lciBzbmFwc2hvdCBhc3NldHMgYXJlIGJ1bmRsZXMgb2YgZGVwZW5kZW5jaWVzLCByZW5hbWVkIG9uIGV2ZXJ5IHVwZGF0ZVxuICAgICAgICBwYXRoc0lnbm9yZTogbWVyZ2VkT3B0aW9ucy5jb2RlcWxQYXRoc0lnbm9yZSA/PyBbXG4gICAgICAgICAgQ29kZVFsLklOVEVHX1NOQVBTSE9UX1BBVEhTLFxuICAgICAgICBdLFxuICAgICAgICBicmFuY2hlczogW21lcmdlZE9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2hdLFxuICAgICAgICBsYW5ndWFnZXM6IFsnamF2YXNjcmlwdC10eXBlc2NyaXB0JywgJ2FjdGlvbnMnXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhZGREZXBsb3ltZW50cyh0aGlzLCB7XG4gICAgICBkZXBsb3ltZW50czogbWVyZ2VkT3B0aW9ucy5kZXBsb3ltZW50cyA/PyBbXSxcbiAgICAgIG5vZGVWZXJzaW9uOiB0aGlzLm5vZGVWZXJzaW9uLFxuICAgICAgcmVsZWFzZVdvcmtmbG93TmFtZTogbWVyZ2VkT3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dOYW1lLFxuICAgIH0pO1xuICAgIENvbnRyaWJ1dGluZy5vZih0aGlzKS5jb25maWd1cmVQdWxsUmVxdWVzdFRpdGxlKG1lcmdlZE9wdGlvbnMpO1xuICAgIGlmICh0aGlzLmF1dG9NZXJnZSkge1xuICAgICAgY29uZmlndXJlTWVyZ2lmeSh0aGlzLCB7XG4gICAgICAgIGFwcHJvdmVkUmV2aWV3czogbWVyZ2VkT3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zPy5hcHByb3ZlZFJldmlld3MsXG4gICAgICAgIHRydXN0ZWRBdXRob3JzOiBtZXJnZWRPcHRpb25zLnRydXN0ZWRBdXRob3JzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIGludGVncmF0aW9uIHRlc3QgZGVwZW5kZW5jaWVzIHRoYXQgcHJvamVuIGFkZHMgYXQgYGxhdGVzdGAsIGFzXG4gICAqIGVhY2ggYEBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhYCByZWxlYXNlIHJld3JpdGVzIHRoZSBidW5kbGVkIGFzc2VydGlvblxuICAgKiBjb2RlIGluIHRoZSBzbmFwc2hvdHMgYW5kIGRyaWZ0cyBmcm9tIGBhd3MtY2RrLWxpYmAuXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZUludGVnUnVubmVyKGludGVnUnVubmVyVmVyc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5kZXBzLnJlbW92ZURlcGVuZGVuY3koSU5URUdfUlVOTkVSLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuICAgIHRoaXMuZGVwcy5yZW1vdmVEZXBlbmRlbmN5KElOVEVHX1RFU1RTX0FMUEhBLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuICAgIHRoaXMuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7SU5URUdfUlVOTkVSfUAke2ludGVnUnVubmVyVmVyc2lvbn1gLFxuICAgICAgRGVwZW5kZW5jeVR5cGUuQlVJTEQsXG4gICAgKTtcbiAgICB0aGlzLmRlcHMuYWRkRGVwZW5kZW5jeShcbiAgICAgIGAke0lOVEVHX1RFU1RTX0FMUEhBfUAke3RoaXMuY2RrRGVwcy5jZGtNaW5pbXVtVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICBEZXBlbmRlbmN5VHlwZS5CVUlMRCxcbiAgICApO1xuXG4gICAgdGhpcy5hZGRUYXNrKCdpbnRlZzpmb3JjZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJ1biBpbnRlZ3JhdGlvbiBzbmFwc2hvdCB0ZXN0cywgZm9yY2luZyB0ZXN0cyB0byBydW4gZXZlbiBpZiB0aGVyZSdzIG5vIGNoYW5nZXNcIixcbiAgICAgIGV4ZWNBcmdzOiBbJ2ludGVnLXJ1bm5lcicsICckQCcsICctLWxhbmd1YWdlJywgJ3R5cGVzY3JpcHQnLCAnLS1mb3JjZSddLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdpbnRlZzp3YXRjaCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2F0Y2ggdGhlIGludGVncmF0aW9uIHNuYXBzaG90IHRlc3RzJyxcbiAgICAgIGV4ZWNBcmdzOiBbJ2ludGVnLXJ1bm5lcicsICckQCcsICctLWxhbmd1YWdlJywgJ3R5cGVzY3JpcHQnLCAnLS13YXRjaCddLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdpbnRlZzpkZWJ1ZycsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUnVuIGludGVncmF0aW9uIHRlc3RzIHdpdGggdmVyYm9zZSBkaWFnbm9zdGljcyBhbmQgZmFpbHVyZSBhcnRpZmFjdHMnLFxuICAgICAgZXhlY0FyZ3M6IFtcbiAgICAgICAgJ2ludGVnLXJ1bm5lcicsXG4gICAgICAgICckQCcsXG4gICAgICAgICctLWxhbmd1YWdlJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQnLFxuICAgICAgICAnLXZ2JyxcbiAgICAgICAgJy0taW5zcGVjdC1mYWlsdXJlcycsXG4gICAgICBdLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlYWRtZS5hZGRTZWN0aW9uKFxuICAgICAgJ0ludGVncmF0aW9uIFRlc3RzJyxcbiAgICAgIGBJbnRlZ3JhdGlvbiB0ZXN0cyBhcmUgcnVuIGJ5IFtpbnRlZy1ydW5uZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvdHJlZS9tYWluL3BhY2thZ2VzLyU0MGF3cy1jZGsvaW50ZWctcnVubmVyKS5cblxuVGhlc2UgdGFza3Mgb25seSBjb21wYXJlIHNuYXBzaG90cywgc28gdGhleSBuZWVkIG5vIEFXUyBjcmVkZW50aWFscyBhbmQgZGVwbG95IG5vdGhpbmcuIFxcYG5weCBwcm9qZW4gdGVzdFxcYCwgYW5kIHNvIFxcYG5weCBwcm9qZW4gYnVpbGRcXGAsIHJ1bnMgXFxgaW50ZWdcXGA6XG4qIFxcYG5weCBwcm9qZW4gaW50ZWdcXGAgc3ludGhlc2l6ZXMgZWFjaCB0ZXN0IGFuZCBjb21wYXJlcyBpdCB3aXRoIGl0cyBzbmFwc2hvdC5cbiogXFxgbnB4IHByb2plbiBpbnRlZzpkZWJ1Z1xcYCBkb2VzIHRoZSBzYW1lIHdpdGggdmVyYm9zZSBkaWFnbm9zdGljcywga2VlcGluZyB0aGUgZ2VuZXJhdGVkIHNuYXBzaG90cyBvZiB0ZXN0cyB0aGF0IGRpZmZlci5cblxuVGhlc2UgdGFza3MgZGVwbG95IHRvIEFXUywgaW4gdGhlIGFjY291bnQgYW5kIHJlZ2lvbiBvZiB0aGUgY3VycmVudCBBV1MgY3JlZGVudGlhbHMuIEVhY2ggdGVzdCdzIHN0YWNrcyBhcmUgcmVhbCwgc28gdGhlIHRhc2tzIHRha2UgbWludXRlcyBhbmQgaW5jdXIgQVdTIGNvc3RzOlxuKiBcXGBucHggcHJvamVuIGludGVnOnVwZGF0ZVxcYCBkZXBsb3lzIHRoZSB0ZXN0cyB3aG9zZSBzbmFwc2hvdHMgZGlmZmVyLCBydW5zIHRoZWlyIGFzc2VydGlvbnMsIGRlc3Ryb3lzIHRoZSBzdGFja3MgYW5kLCBpZiB0aGV5IHBhc3MsIHVwZGF0ZXMgdGhlIHNuYXBzaG90cy5cbiogXFxgbnB4IHByb2plbiBpbnRlZzpmb3JjZVxcYCBkZXBsb3lzIGV2ZXJ5IHRlc3QgaW4gdGhlIHNhbWUgd2F5LCBldmVuIGlmIGl0cyBzbmFwc2hvdCBpcyB1bmNoYW5nZWQuXG4qIFxcYG5weCBwcm9qZW4gaW50ZWc6d2F0Y2hcXGAgZGVwbG95cyBhIHNpbmdsZSB0ZXN0IGFuZCByZWRlcGxveXMgaXQgYXMgaXRzIGNvZGUgY2hhbmdlcywgbGlrZSBcXGBjZGsgZGVwbG95IC0td2F0Y2hcXGAuXG5cblxcYCR7SU5URUdfUlVOTkVSfVxcYCBpcyBwaW5uZWQgdG8gXFxgJHtpbnRlZ1J1bm5lclZlcnNpb259XFxgIGFuZCBcXGAke0lOVEVHX1RFU1RTX0FMUEhBfVxcYCB0byB0aGUgcmVsZWFzZSBtYXRjaGluZyBcXGBjZGtWZXJzaW9uXFxgLCBzbyB0aGUgdXBncmFkZSB3b3JrZmxvdyBuZXZlciBjaGFuZ2VzIHRoZWlyIHZlcnNpb25zOiB0aGV5IG9ubHkgY2hhbmdlIHdoZW4gXFxgY2RrVmVyc2lvblxcYCBvciBcXGBpbnRlZ1J1bm5lclZlcnNpb25cXGAgaXMgY2hhbmdlZC4gVGhpcyBpcyBpbnRlbmRlZCwgYXMgZWFjaCBcXGAke0lOVEVHX1RFU1RTX0FMUEhBfVxcYCByZWxlYXNlIHJld3JpdGVzIHRoZSBhc3NlcnRpb24gY29kZSBidW5kbGVkIGluIHRoZSBzbmFwc2hvdHMuXG5cbmludGVnLXJ1bm5lciBpZ25vcmVzIGNoYW5nZXMgdG8gYXNzZXQgaGFzaGVzLCBzbyBhIHRlc3Qgd2hvc2Ugb25seSBjaGFuZ2UgaXMgTGFtYmRhIGNvZGUgaXMgcmVwb3J0ZWQgYXMgXFxgVU5DSEFOR0VEXFxgIGFuZCBpcyBub3QgZGVwbG95ZWQuIFJ1biBcXGBucHggcHJvamVuIGludGVnOmZvcmNlXFxgIHRvIGV4ZXJjaXNlIG5ldyBMYW1iZGEgY29kZSBlbmQgdG8gZW5kLmAsXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5VU0FHRSB9LFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0ICogZnJvbSAnLi9jZGstdHlwZXNjcmlwdC1hcHAtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2RlcGxveW1lbnQtZW52aXJvbm1lbnQnO1xuIl19
@@ -19,6 +19,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
19
19
  const projen_1 = require("projen");
20
20
  const codeowners_1 = require("../../components/github/codeowners");
21
21
  const codeql_1 = require("../../components/github/codeql");
22
+ const contributing_1 = require("../../components/github/contributing");
22
23
  const mergify_1 = require("../../components/github/mergify");
23
24
  const pull_request_template_1 = require("../../components/github/pull-request-template");
24
25
  const readme_1 = require("../../components/readme");
@@ -48,7 +49,7 @@ function getOptions(options) {
48
49
  * @pjid jsii-project
49
50
  */
50
51
  class JsiiProject extends projen_1.cdk.JsiiProject {
51
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.JsiiProject", version: "5.3.0" };
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.JsiiProject", version: "5.5.0" };
52
53
  readme;
53
54
  constructor(options) {
54
55
  const mergedOptions = getOptions(options);
@@ -80,6 +81,7 @@ Running the tests like this will update any snapshot files, this should be revie
80
81
  languages: ['javascript-typescript', 'actions'],
81
82
  });
82
83
  }
84
+ contributing_1.Contributing.of(this).configurePullRequestTitle(mergedOptions);
83
85
  if (this.autoMerge) {
84
86
  (0, mergify_1.configureMergify)(this, {
85
87
  approvedReviews: mergedOptions.autoMergeOptions?.approvedReviews,
@@ -90,4 +92,4 @@ Running the tests like this will update any snapshot files, this should be revie
90
92
  }
91
93
  exports.JsiiProject = JsiiProject;
92
94
  __exportStar(require("./jsii-project-options"), exports);
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvanNpaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBcUM7QUFFckMsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCw2REFHeUM7QUFDekMseUZBQThGO0FBQzlGLG9EQUE4RDtBQUM5RCw2RUFBZ0Y7QUFDaEYsNkRBQXlEO0FBRXpELFNBQVMsVUFBVSxDQUFDLE9BQTJCO0lBQzdDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJO1FBQ0osU0FBUyxFQUFFLElBQUk7UUFDZixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDaEMsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RCwwRkFBMEY7UUFDMUYsaUVBQWlFO1FBQ2pFLGNBQWMsRUFBRSxJQUFJO0tBQ2lCLENBQUM7SUFFeEMsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsV0FBWSxTQUFRLFlBQUcsQ0FBQyxXQUFXOztJQUM5QyxNQUFNLENBQVM7SUFFZixZQUFZLE9BQTJCO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixHQUFHLGFBQWE7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBQSwwQkFBZ0IsRUFBQyxhQUFhLENBQUM7U0FDeEIsQ0FBQyxDQUFDO1FBRTdCLElBQUksdUJBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLGlCQUFpQixFQUNqQixHQUFHLElBQUEsdUNBQXFCLEVBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7Ozs7Ozs7OzBHQVNtQyxFQUNwRyxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLFlBQVksRUFBRSxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLFNBQVMsRUFDVDs7O0NBR0wsRUFDSyxFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BFLElBQUksZUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDOUMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFBLDBCQUFnQixFQUFDLElBQUksRUFBRTtnQkFDckIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlO2dCQUNoRSxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBakRILGtDQWtEQztBQUVELHlEQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNkaywgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEpzaWlQcm9qZWN0T3B0aW9ucyB9IGZyb20gJy4vanNpaS1wcm9qZWN0LW9wdGlvbnMnO1xuaW1wb3J0IHsgQ29kZU93bmVycyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvZGVvd25lcnMnO1xuaW1wb3J0IHsgQ29kZVFsIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZXFsJztcbmltcG9ydCB7XG4gIGF1dG9NZXJnZU9wdGlvbnMsXG4gIGNvbmZpZ3VyZU1lcmdpZnksXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL21lcmdpZnknO1xuaW1wb3J0IHsgREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9wdWxsLXJlcXVlc3QtdGVtcGxhdGUnO1xuaW1wb3J0IHsgUmVhZG1lLCBSZWFkbWVPcmRlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lJztcbmltcG9ydCB7IGdldHRpbmdTdGFydGVkU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZCc7XG5pbXBvcnQgeyBtZXJnZU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXJnZS1vcHRpb25zJztcblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIG5hbWUsXG4gICAgYXV0b01lcmdlOiB0cnVlLFxuICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgZ2l0aWdub3JlOiBbJy5ucG1yYycsICcudnNjb2RlJ10sXG4gICAgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzOiBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSxcbiAgICBwcm9qZW5yY1RzOiB0cnVlLFxuICAgIC8vIGF1dGhlbnRpY2F0ZSBhcyB0aGUgR2l0SHViIEFwcCwgc28gbWVyZ2lmeSBjYW4gYXBwcm92ZSB1cGdyYWRlIHB1bGwgcmVxdWVzdHNcbiAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoe30pLFxuICAgIC8vIHRzLWplc3Qgc2tpcHMgdHlwZS1jaGVja2luZyB1bmRlciB0aGUgaXNvbGF0ZWRNb2R1bGVzIHNldHRpbmcgb2YgdGhlIGpzaWkgZGV2IHRzY29uZmlnLFxuICAgIC8vIGFuZCBqc2lpIG9ubHkgY29tcGlsZXMgc3JjLCBzbyB0eXBlLWNoZWNrIHRoZSB0ZXN0IHN1aXRlIGZpcnN0XG4gICAgdHlwZWNoZWNrVGVzdHM6IHRydWUsXG4gIH0gc2F0aXNmaWVzIFBhcnRpYWw8SnNpaVByb2plY3RPcHRpb25zPjtcblxuICByZXR1cm4gbWVyZ2VPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBIEpTSUkgcHJvamVjdCBpbiBUeXBlU2NyaXB0XG4gKlxuICpcbiAqIEBwamlkIGpzaWktcHJvamVjdFxuICovXG5leHBvcnQgY2xhc3MgSnNpaVByb2plY3QgZXh0ZW5kcyBjZGsuSnNpaVByb2plY3Qge1xuICByZWFkbWU6IFJlYWRtZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgICBhdXRvTWVyZ2VPcHRpb25zOiBhdXRvTWVyZ2VPcHRpb25zKG1lcmdlZE9wdGlvbnMpLFxuICAgIH0gYXMgY2RrLkpzaWlQcm9qZWN0T3B0aW9ucyk7XG5cbiAgICBuZXcgQ29kZU93bmVycyh0aGlzLCBtZXJnZWRPcHRpb25zLmNvZGVPd25lcnMpO1xuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgIGAke2dldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzLCB7IG5vZGVWZXJzaW9uOiB0aGlzLm5vZGVWZXJzaW9uIH0pfVxcblxuVGhpcyB3aWxsOlxuKiBJbnN0YWxsIHRoZSBkZXBlbmRlbmNpZXNcbiogQXBwbHkgYW55IHByb2plbiBjaGFuZ2VzXG4qIFJ1biB0ZXN0c1xuKiBQYWNrYWdlIHByb2plY3QgbG9jYWxseVxuXG5BbnkgZmlsZXMgY2hhbmdlZCBieSBwcm9qZW4gc2hvdWxkIGJlIGNvbW1pdHRlZCB0byBnaXQuXG5cblJ1bm5pbmcgdGhlIHRlc3RzIGxpa2UgdGhpcyB3aWxsIHVwZGF0ZSBhbnkgc25hcHNob3QgZmlsZXMsIHRoaXMgc2hvdWxkIGJlIHJldmlld2VkIGFuZCBjb21taXR0ZWQgdG8gZ2l0LmAsXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5JTlRST0RVQ1RJT04gfSxcbiAgICApO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnVGVzdGluZycsXG4gICAgICBgVHlwZXMgb2YgdGVzdGluZzpcbiogU25hcHNob3QgLSBwcm9qZW4gcHJvamVjdCBvdXRwdXRzIGFyZSBzdG9yZWQgYXMgYSBzbmFwc2hvdCBpbiB0aGUgY29ycmVzcG9uZGluZyBcXGBfX3NuYXBzaG90c19fXFxgIGRpcmVjdG9yeS4gV2hlbiB0aGUgcHJvamVjdCBjaGFuZ2VzIHRoZW4gaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGVzZSBzbmFwc2hvdHMgY2hhbmdlIHRvbyBhbmQgc2hvdWxkIGJlIHJldmlld2VkIGNvbW1pdHRlZCBhbG9uZ3NpZGUgdGhlIHByb2plY3QuXG4qIFVuaXQgdGVzdHMgLSB0aGVzZSBhc3NlcnQgb24gc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcHJvamVjdCBhbmQgc2hvdWxkIGJlIHdyaXR0ZW4gZm9yIGFueSBuZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC5cbmAsXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5VU0FHRSB9LFxuICAgICk7XG4gICAgaWYgKChtZXJnZWRPcHRpb25zLmNvZGVxbCA/PyB0cnVlKSAmJiB0aGlzLmdpdGh1Yj8ud29ya2Zsb3dzRW5hYmxlZCkge1xuICAgICAgbmV3IENvZGVRbCh0aGlzLmdpdGh1Yiwge1xuICAgICAgICBicmFuY2hlczogW21lcmdlZE9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2hdLFxuICAgICAgICBsYW5ndWFnZXM6IFsnamF2YXNjcmlwdC10eXBlc2NyaXB0JywgJ2FjdGlvbnMnXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hdXRvTWVyZ2UpIHtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL2pzaWktcHJvamVjdC1vcHRpb25zJztcbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvanNpaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBcUM7QUFFckMsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCx1RUFBb0U7QUFDcEUsNkRBR3lDO0FBQ3pDLHlGQUE4RjtBQUM5RixvREFBOEQ7QUFDOUQsNkVBQWdGO0FBQ2hGLDZEQUF5RDtBQUV6RCxTQUFTLFVBQVUsQ0FBQyxPQUEyQjtJQUM3QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpCLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSTtRQUNKLFNBQVMsRUFBRSxJQUFJO1FBQ2Ysb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ2hDLDJCQUEyQixFQUFFLHFEQUE2QjtRQUMxRCxVQUFVLEVBQUUsSUFBSTtRQUNoQiwrRUFBK0U7UUFDL0UsaUJBQWlCLEVBQUUsZUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkQsMEZBQTBGO1FBQzFGLGlFQUFpRTtRQUNqRSxjQUFjLEVBQUUsSUFBSTtLQUNpQixDQUFDO0lBRXhDLE9BQU8sSUFBQSw0QkFBWSxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFdBQVksU0FBUSxZQUFHLENBQUMsV0FBVzs7SUFDOUMsTUFBTSxDQUFTO0lBRWYsWUFBWSxPQUEyQjtRQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUMsS0FBSyxDQUFDO1lBQ0osR0FBRyxhQUFhO1lBQ2hCLGdCQUFnQixFQUFFLElBQUEsMEJBQWdCLEVBQUMsYUFBYSxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUU3QixJQUFJLHVCQUFVLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksRUFBRTtZQUM3QixXQUFXLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXO1NBQy9DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNwQixpQkFBaUIsRUFDakIsR0FBRyxJQUFBLHVDQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Ozs7Ozs7OzswR0FTbUMsRUFDcEcsRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FDcEMsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNwQixTQUFTLEVBQ1Q7OztDQUdMLEVBQ0ssRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLGVBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN0QixRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7Z0JBQzlDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQzthQUNoRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsMkJBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBQSwwQkFBZ0IsRUFBQyxJQUFJLEVBQUU7Z0JBQ3JCLGVBQWUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZUFBZTtnQkFDaEUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQWxESCxrQ0FtREM7QUFFRCx5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjZGssIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBKc2lpUHJvamVjdE9wdGlvbnMgfSBmcm9tICcuL2pzaWktcHJvamVjdC1vcHRpb25zJztcbmltcG9ydCB7IENvZGVPd25lcnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2Rlb3duZXJzJztcbmltcG9ydCB7IENvZGVRbCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvZGVxbCc7XG5pbXBvcnQgeyBDb250cmlidXRpbmcgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb250cmlidXRpbmcnO1xuaW1wb3J0IHtcbiAgYXV0b01lcmdlT3B0aW9ucyxcbiAgY29uZmlndXJlTWVyZ2lmeSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvbWVyZ2lmeSc7XG5pbXBvcnQgeyBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL3B1bGwtcmVxdWVzdC10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUnO1xuaW1wb3J0IHsgZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUvZ2V0dGluZy1zdGFydGVkJztcbmltcG9ydCB7IG1lcmdlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLW9wdGlvbnMnO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnM6IEpzaWlQcm9qZWN0T3B0aW9ucykge1xuICBjb25zdCB7IG5hbWUgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgbmFtZSxcbiAgICBhdXRvTWVyZ2U6IHRydWUsXG4gICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6ICdtYWluJyxcbiAgICBnaXRpZ25vcmU6IFsnLm5wbXJjJywgJy52c2NvZGUnXSxcbiAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFLFxuICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgLy8gYXV0aGVudGljYXRlIGFzIHRoZSBHaXRIdWIgQXBwLCBzbyBtZXJnaWZ5IGNhbiBhcHByb3ZlIHVwZ3JhZGUgcHVsbCByZXF1ZXN0c1xuICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCh7fSksXG4gICAgLy8gdHMtamVzdCBza2lwcyB0eXBlLWNoZWNraW5nIHVuZGVyIHRoZSBpc29sYXRlZE1vZHVsZXMgc2V0dGluZyBvZiB0aGUganNpaSBkZXYgdHNjb25maWcsXG4gICAgLy8gYW5kIGpzaWkgb25seSBjb21waWxlcyBzcmMsIHNvIHR5cGUtY2hlY2sgdGhlIHRlc3Qgc3VpdGUgZmlyc3RcbiAgICB0eXBlY2hlY2tUZXN0czogdHJ1ZSxcbiAgfSBzYXRpc2ZpZXMgUGFydGlhbDxKc2lpUHJvamVjdE9wdGlvbnM+O1xuXG4gIHJldHVybiBtZXJnZU9wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEEgSlNJSSBwcm9qZWN0IGluIFR5cGVTY3JpcHRcbiAqXG4gKlxuICogQHBqaWQganNpaS1wcm9qZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBKc2lpUHJvamVjdCBleHRlbmRzIGNkay5Kc2lpUHJvamVjdCB7XG4gIHJlYWRtZTogUmVhZG1lO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEpzaWlQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICAgIGF1dG9NZXJnZU9wdGlvbnM6IGF1dG9NZXJnZU9wdGlvbnMobWVyZ2VkT3B0aW9ucyksXG4gICAgfSBhcyBjZGsuSnNpaVByb2plY3RPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgdGhpcy5yZWFkbWUgPSBuZXcgUmVhZG1lKHRoaXMsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXJnZWRPcHRpb25zLnJlYWRtZT8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbihcbiAgICAgICdHZXR0aW5nIFN0YXJ0ZWQnLFxuICAgICAgYCR7Z2V0dGluZ1N0YXJ0ZWRTZWN0aW9uKHRoaXMsIHsgbm9kZVZlcnNpb246IHRoaXMubm9kZVZlcnNpb24gfSl9XFxuXG5UaGlzIHdpbGw6XG4qIEluc3RhbGwgdGhlIGRlcGVuZGVuY2llc1xuKiBBcHBseSBhbnkgcHJvamVuIGNoYW5nZXNcbiogUnVuIHRlc3RzXG4qIFBhY2thZ2UgcHJvamVjdCBsb2NhbGx5XG5cbkFueSBmaWxlcyBjaGFuZ2VkIGJ5IHByb2plbiBzaG91bGQgYmUgY29tbWl0dGVkIHRvIGdpdC5cblxuUnVubmluZyB0aGUgdGVzdHMgbGlrZSB0aGlzIHdpbGwgdXBkYXRlIGFueSBzbmFwc2hvdCBmaWxlcywgdGhpcyBzaG91bGQgYmUgcmV2aWV3ZWQgYW5kIGNvbW1pdHRlZCB0byBnaXQuYCxcbiAgICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLklOVFJPRFVDVElPTiB9LFxuICAgICk7XG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbihcbiAgICAgICdUZXN0aW5nJyxcbiAgICAgIGBUeXBlcyBvZiB0ZXN0aW5nOlxuKiBTbmFwc2hvdCAtIHByb2plbiBwcm9qZWN0IG91dHB1dHMgYXJlIHN0b3JlZCBhcyBhIHNuYXBzaG90IGluIHRoZSBjb3JyZXNwb25kaW5nIFxcYF9fc25hcHNob3RzX19cXGAgZGlyZWN0b3J5LiBXaGVuIHRoZSBwcm9qZWN0IGNoYW5nZXMgdGhlbiBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZXNlIHNuYXBzaG90cyBjaGFuZ2UgdG9vIGFuZCBzaG91bGQgYmUgcmV2aWV3ZWQgY29tbWl0dGVkIGFsb25nc2lkZSB0aGUgcHJvamVjdC5cbiogVW5pdCB0ZXN0cyAtIHRoZXNlIGFzc2VydCBvbiBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBwcm9qZWN0IGFuZCBzaG91bGQgYmUgd3JpdHRlbiBmb3IgYW55IG5ldyBmdW5jdGlvbmFsaXR5IGFkZGVkLlxuYCxcbiAgICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLlVTQUdFIH0sXG4gICAgKTtcbiAgICBpZiAoKG1lcmdlZE9wdGlvbnMuY29kZXFsID8/IHRydWUpICYmIHRoaXMuZ2l0aHViPy53b3JrZmxvd3NFbmFibGVkKSB7XG4gICAgICBuZXcgQ29kZVFsKHRoaXMuZ2l0aHViLCB7XG4gICAgICAgIGJyYW5jaGVzOiBbbWVyZ2VkT3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaF0sXG4gICAgICAgIGxhbmd1YWdlczogWydqYXZhc2NyaXB0LXR5cGVzY3JpcHQnLCAnYWN0aW9ucyddLFxuICAgICAgfSk7XG4gICAgfVxuICAgIENvbnRyaWJ1dGluZy5vZih0aGlzKS5jb25maWd1cmVQdWxsUmVxdWVzdFRpdGxlKG1lcmdlZE9wdGlvbnMpO1xuICAgIGlmICh0aGlzLmF1dG9NZXJnZSkge1xuICAgICAgY29uZmlndXJlTWVyZ2lmeSh0aGlzLCB7XG4gICAgICAgIGFwcHJvdmVkUmV2aWV3czogbWVyZ2VkT3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zPy5hcHByb3ZlZFJldmlld3MsXG4gICAgICAgIHRydXN0ZWRBdXRob3JzOiBtZXJnZWRPcHRpb25zLnRydXN0ZWRBdXRob3JzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vanNpaS1wcm9qZWN0LW9wdGlvbnMnO1xuIl19
@@ -19,6 +19,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
19
19
  const projen_1 = require("projen");
20
20
  const circleci_1 = require("../../circleci");
21
21
  const codeowners_1 = require("../../components/github/codeowners");
22
+ const contributing_1 = require("../../components/github/contributing");
22
23
  const mergify_1 = require("../../components/github/mergify");
23
24
  const pull_request_template_1 = require("../../components/github/pull-request-template");
24
25
  const readme_1 = require("../../components/readme");
@@ -47,7 +48,7 @@ function getOptions(options) {
47
48
  * @pjid npm-package
48
49
  */
49
50
  class NpmPackage extends projen_1.typescript.TypeScriptProject {
50
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.NpmPackage", version: "5.3.0" };
51
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.NpmPackage", version: "5.5.0" };
51
52
  readme;
52
53
  constructor(options) {
53
54
  const mergedOptions = getOptions(options);
@@ -61,6 +62,7 @@ class NpmPackage extends projen_1.typescript.TypeScriptProject {
61
62
  description: mergedOptions.readme?.description,
62
63
  });
63
64
  this.readme.addSection('Getting Started', (0, getting_started_1.gettingStartedSection)(this, { nodeVersion: this.nodeVersion }), { order: readme_1.ReadmeOrder.INTRODUCTION });
65
+ contributing_1.Contributing.of(this).configurePullRequestTitle(mergedOptions);
64
66
  if (this.autoMerge) {
65
67
  (0, mergify_1.configureMergify)(this, {
66
68
  approvedReviews: mergedOptions.autoMergeOptions?.approvedReviews,
@@ -71,4 +73,4 @@ class NpmPackage extends projen_1.typescript.TypeScriptProject {
71
73
  }
72
74
  exports.NpmPackage = NpmPackage;
73
75
  __exportStar(require("./npm-package-options"), exports);
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvbnBtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyw2Q0FBNkM7QUFDN0MsbUVBQWdFO0FBQ2hFLDZEQUd5QztBQUN6Qyx5RkFBOEY7QUFDOUYsb0RBQThEO0FBQzlELDZFQUFnRjtBQUNoRiw2REFBeUQ7QUFFekQsU0FBUyxVQUFVLENBQUMsT0FBMEI7SUFDNUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV6QixNQUFNLFFBQVEsR0FBRztRQUNmLElBQUk7UUFDSixvQkFBb0IsRUFBRSxNQUFNO1FBQzVCLGFBQWEsRUFBRTtZQUNiLFNBQVMsRUFBRSxLQUFLO1NBQ2pCO1FBQ0QsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUNoQywyQkFBMkIsRUFBRSxxREFBNkI7UUFDMUQsVUFBVSxFQUFFLElBQUk7UUFDaEIsc0dBQXNHO1FBQ3RHLGNBQWMsRUFBRSxJQUFJO0tBQ2dCLENBQUM7SUFFdkMsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsVUFBVyxTQUFRLG1CQUFVLENBQUMsaUJBQWlCOztJQUMxRCxNQUFNLENBQVM7SUFFZixZQUFZLE9BQTBCO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixHQUFHLGFBQWE7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBQSwwQkFBZ0IsRUFBQyxhQUFhLENBQUM7U0FDWCxDQUFDLENBQUM7UUFFMUMsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxzQkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3BCLGlCQUFpQixFQUNqQixJQUFBLHVDQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDOUQsRUFBRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FDcEMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUEsMEJBQWdCLEVBQUMsSUFBSSxFQUFFO2dCQUNyQixlQUFlLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGVBQWU7Z0JBQ2hFLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUEzQkgsZ0NBNEJDO0FBRUQsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZXNjcmlwdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBOcG1QYWNrYWdlT3B0aW9ucyB9IGZyb20gJy4vbnBtLXBhY2thZ2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBOcG1DaXJjbGVDaSB9IGZyb20gJy4uLy4uL2NpcmNsZWNpJztcbmltcG9ydCB7IENvZGVPd25lcnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2Rlb3duZXJzJztcbmltcG9ydCB7XG4gIGF1dG9NZXJnZU9wdGlvbnMsXG4gIGNvbmZpZ3VyZU1lcmdpZnksXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL21lcmdpZnknO1xuaW1wb3J0IHsgREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9wdWxsLXJlcXVlc3QtdGVtcGxhdGUnO1xuaW1wb3J0IHsgUmVhZG1lLCBSZWFkbWVPcmRlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lJztcbmltcG9ydCB7IGdldHRpbmdTdGFydGVkU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZCc7XG5pbXBvcnQgeyBtZXJnZU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXJnZS1vcHRpb25zJztcblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhvcHRpb25zOiBOcG1QYWNrYWdlT3B0aW9ucykge1xuICBjb25zdCB7IG5hbWUgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgbmFtZSxcbiAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogJ21haW4nLFxuICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgIHdvcmtmbG93czogZmFsc2UsXG4gICAgfSxcbiAgICBnaXRpZ25vcmU6IFsnLm5wbXJjJywgJy52c2NvZGUnXSxcbiAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFLFxuICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgLy8gdHMtamVzdCBvbmx5IHJlcG9ydHMgdHlwZSBlcnJvcnMgaW4gdGhlIGZpbGVzIGEgdGVzdCBydW4gbG9hZHMsIHNvIHR5cGUtY2hlY2sgdGhlIHdob2xlIHN1aXRlIGZpcnN0XG4gICAgdHlwZWNoZWNrVGVzdHM6IHRydWUsXG4gIH0gc2F0aXNmaWVzIFBhcnRpYWw8TnBtUGFja2FnZU9wdGlvbnM+O1xuXG4gIHJldHVybiBtZXJnZU9wdGlvbnMoZGVmYXVsdHMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEEgTlBNL25vZGUgcGFja2FnZSBpbiBUeXBlU2NyaXB0XG4gKlxuICpcbiAqIEBwamlkIG5wbS1wYWNrYWdlXG4gKi9cbmV4cG9ydCBjbGFzcyBOcG1QYWNrYWdlIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCB7XG4gIHJlYWRtZTogUmVhZG1lO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5wbVBhY2thZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgICAgYXV0b01lcmdlT3B0aW9uczogYXV0b01lcmdlT3B0aW9ucyhtZXJnZWRPcHRpb25zKSxcbiAgICB9IGFzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgbmV3IE5wbUNpcmNsZUNpKHRoaXMpO1xuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oXG4gICAgICAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgIGdldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzLCB7IG5vZGVWZXJzaW9uOiB0aGlzLm5vZGVWZXJzaW9uIH0pLFxuICAgICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuSU5UUk9EVUNUSU9OIH0sXG4gICAgKTtcbiAgICBpZiAodGhpcy5hdXRvTWVyZ2UpIHtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL25wbS1wYWNrYWdlLW9wdGlvbnMnO1xuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvbnBtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyw2Q0FBNkM7QUFDN0MsbUVBQWdFO0FBQ2hFLHVFQUFvRTtBQUNwRSw2REFHeUM7QUFDekMseUZBQThGO0FBQzlGLG9EQUE4RDtBQUM5RCw2RUFBZ0Y7QUFDaEYsNkRBQXlEO0FBRXpELFNBQVMsVUFBVSxDQUFDLE9BQTBCO0lBQzVDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJO1FBQ0osb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixhQUFhLEVBQUU7WUFDYixTQUFTLEVBQUUsS0FBSztTQUNqQjtRQUNELFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDaEMsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLHNHQUFzRztRQUN0RyxjQUFjLEVBQUUsSUFBSTtLQUNnQixDQUFDO0lBRXZDLE9BQU8sSUFBQSw0QkFBWSxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFDMUQsTUFBTSxDQUFTO0lBRWYsWUFBWSxPQUEwQjtRQUNwQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUMsS0FBSyxDQUFDO1lBQ0osR0FBRyxhQUFhO1lBQ2hCLGdCQUFnQixFQUFFLElBQUEsMEJBQWdCLEVBQUMsYUFBYSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO1FBRTFDLElBQUksdUJBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksc0JBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksRUFBRTtZQUM3QixXQUFXLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXO1NBQy9DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNwQixpQkFBaUIsRUFDakIsSUFBQSx1Q0FBcUIsRUFBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQzlELEVBQUUsS0FBSyxFQUFFLG9CQUFXLENBQUMsWUFBWSxFQUFFLENBQ3BDLENBQUM7UUFDRiwyQkFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFBLDBCQUFnQixFQUFDLElBQUksRUFBRTtnQkFDckIsZUFBZSxFQUFFLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlO2dCQUNoRSxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBNUJILGdDQTZCQztBQUVELHdEQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGVzY3JpcHQgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTnBtUGFja2FnZU9wdGlvbnMgfSBmcm9tICcuL25wbS1wYWNrYWdlLW9wdGlvbnMnO1xuaW1wb3J0IHsgTnBtQ2lyY2xlQ2kgfSBmcm9tICcuLi8uLi9jaXJjbGVjaSc7XG5pbXBvcnQgeyBDb2RlT3duZXJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZW93bmVycyc7XG5pbXBvcnQgeyBDb250cmlidXRpbmcgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb250cmlidXRpbmcnO1xuaW1wb3J0IHtcbiAgYXV0b01lcmdlT3B0aW9ucyxcbiAgY29uZmlndXJlTWVyZ2lmeSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvbWVyZ2lmeSc7XG5pbXBvcnQgeyBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL3B1bGwtcmVxdWVzdC10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUnO1xuaW1wb3J0IHsgZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUvZ2V0dGluZy1zdGFydGVkJztcbmltcG9ydCB7IG1lcmdlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLW9wdGlvbnMnO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnM6IE5wbVBhY2thZ2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnbWFpbicsXG4gICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgd29ya2Zsb3dzOiBmYWxzZSxcbiAgICB9LFxuICAgIGdpdGlnbm9yZTogWycubnBtcmMnLCAnLnZzY29kZSddLFxuICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50czogREVGQVVMVF9QVUxMX1JFUVVFU1RfVEVNUExBVEUsXG4gICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAvLyB0cy1qZXN0IG9ubHkgcmVwb3J0cyB0eXBlIGVycm9ycyBpbiB0aGUgZmlsZXMgYSB0ZXN0IHJ1biBsb2Fkcywgc28gdHlwZS1jaGVjayB0aGUgd2hvbGUgc3VpdGUgZmlyc3RcbiAgICB0eXBlY2hlY2tUZXN0czogdHJ1ZSxcbiAgfSBzYXRpc2ZpZXMgUGFydGlhbDxOcG1QYWNrYWdlT3B0aW9ucz47XG5cbiAgcmV0dXJuIG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQSBOUE0vbm9kZSBwYWNrYWdlIGluIFR5cGVTY3JpcHRcbiAqXG4gKlxuICogQHBqaWQgbnBtLXBhY2thZ2VcbiAqL1xuZXhwb3J0IGNsYXNzIE5wbVBhY2thZ2UgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IHtcbiAgcmVhZG1lOiBSZWFkbWU7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTnBtUGFja2FnZU9wdGlvbnMpIHtcbiAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgICBhdXRvTWVyZ2VPcHRpb25zOiBhdXRvTWVyZ2VPcHRpb25zKG1lcmdlZE9wdGlvbnMpLFxuICAgIH0gYXMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMpO1xuXG4gICAgbmV3IENvZGVPd25lcnModGhpcywgbWVyZ2VkT3B0aW9ucy5jb2RlT3duZXJzKTtcbiAgICBuZXcgTnBtQ2lyY2xlQ2kodGhpcyk7XG4gICAgdGhpcy5yZWFkbWUgPSBuZXcgUmVhZG1lKHRoaXMsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXJnZWRPcHRpb25zLnJlYWRtZT8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbihcbiAgICAgICdHZXR0aW5nIFN0YXJ0ZWQnLFxuICAgICAgZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uKHRoaXMsIHsgbm9kZVZlcnNpb246IHRoaXMubm9kZVZlcnNpb24gfSksXG4gICAgICB7IG9yZGVyOiBSZWFkbWVPcmRlci5JTlRST0RVQ1RJT04gfSxcbiAgICApO1xuICAgIENvbnRyaWJ1dGluZy5vZih0aGlzKS5jb25maWd1cmVQdWxsUmVxdWVzdFRpdGxlKG1lcmdlZE9wdGlvbnMpO1xuICAgIGlmICh0aGlzLmF1dG9NZXJnZSkge1xuICAgICAgY29uZmlndXJlTWVyZ2lmeSh0aGlzLCB7XG4gICAgICAgIGFwcHJvdmVkUmV2aWV3czogbWVyZ2VkT3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zPy5hcHByb3ZlZFJldmlld3MsXG4gICAgICAgIHRydXN0ZWRBdXRob3JzOiBtZXJnZWRPcHRpb25zLnRydXN0ZWRBdXRob3JzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vbnBtLXBhY2thZ2Utb3B0aW9ucyc7XG4iXX0=
@@ -20,6 +20,7 @@ const projen_1 = require("projen");
20
20
  const python_1 = require("projen/lib/python");
21
21
  const codeowners_1 = require("../../components/github/codeowners");
22
22
  const codeql_1 = require("../../components/github/codeql");
23
+ const contributing_1 = require("../../components/github/contributing");
23
24
  const mergify_1 = require("../../components/github/mergify");
24
25
  const pull_request_template_1 = require("../../components/github/pull-request-template");
25
26
  const readme_1 = require("../../components/readme");
@@ -43,7 +44,7 @@ function getOptions(options) {
43
44
  * @pjid python-package
44
45
  */
45
46
  class PythonPackage extends python_1.PythonProject {
46
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.PythonPackage", version: "5.3.0" };
47
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.PythonPackage", version: "5.5.0" };
47
48
  autoMerge;
48
49
  readme;
49
50
  constructor(options) {
@@ -66,6 +67,7 @@ class PythonPackage extends python_1.PythonProject {
66
67
  languages: ['python', 'actions'],
67
68
  });
68
69
  }
70
+ contributing_1.Contributing.of(this).configurePullRequestTitle(mergedOptions);
69
71
  // projen only wires the merge queue up for node projects
70
72
  if ((mergedOptions.autoMerge ?? true) && this.github?.mergify) {
71
73
  this.autoMerge = new projen_1.github.AutoMerge(this.github, (0, mergify_1.autoMergeOptions)(mergedOptions));
@@ -78,4 +80,4 @@ class PythonPackage extends python_1.PythonProject {
78
80
  }
79
81
  exports.PythonPackage = PythonPackage;
80
82
  __exportStar(require("./python-package-options"), exports);
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvcHl0aG9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnQztBQUNoQyw4Q0FBd0U7QUFFeEUsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCw2REFHeUM7QUFDekMseUZBQThGO0FBQzlGLG9EQUE4RDtBQUM5RCw2RUFBZ0Y7QUFDaEYsNkRBQXlEO0FBRXpELFNBQVMsVUFBVSxDQUFDLE9BQTZCO0lBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJO1FBQ0osbUJBQW1CLEVBQUUsSUFBSTtRQUN6QiwyQkFBMkIsRUFBRSxxREFBNkI7UUFDMUQsK0VBQStFO1FBQy9FLGlCQUFpQixFQUFFLGVBQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0tBQ2hCLENBQUM7SUFFMUMsT0FBTyxJQUFBLDRCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsYUFBYyxTQUFRLHNCQUFhOztJQUNyQyxTQUFTLENBQW9CO0lBQ3RDLE1BQU0sQ0FBUztJQUVmLFlBQVksT0FBNkI7UUFDdkMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLEtBQUssQ0FBQztZQUNKLEdBQUcsYUFBYTtTQUNPLENBQUMsQ0FBQztRQUUzQixJQUFJLHVCQUFVLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUNqQyxHQUFHLENBQUMsYUFBYSxDQUFDLDJCQUEyQixJQUFJLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFO1lBQzdCLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVc7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBQSx1Q0FBcUIsRUFBQyxJQUFJLENBQUMsRUFBRTtZQUNyRSxLQUFLLEVBQUUsb0JBQVcsQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLGVBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN0QixTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBTSxDQUFDLFNBQVMsQ0FDbkMsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFBLDBCQUFnQixFQUFDLGFBQWEsQ0FBQyxDQUNoQyxDQUFDO1lBQ0YsSUFBQSwwQkFBZ0IsRUFBQyxJQUFJLEVBQUU7Z0JBQ3JCLGVBQWUsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZUFBZTtnQkFDaEUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXZDSCxzQ0F3Q0M7QUFFRCwyREFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUHl0aG9uUHJvamVjdCwgUHl0aG9uUHJvamVjdE9wdGlvbnMgfSBmcm9tICdwcm9qZW4vbGliL3B5dGhvbic7XG5pbXBvcnQgeyBQeXRob25QYWNrYWdlT3B0aW9ucyB9IGZyb20gJy4vcHl0aG9uLXBhY2thZ2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBDb2RlT3duZXJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZW93bmVycyc7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9jb2RlcWwnO1xuaW1wb3J0IHtcbiAgYXV0b01lcmdlT3B0aW9ucyxcbiAgY29uZmlndXJlTWVyZ2lmeSxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvbWVyZ2lmeSc7XG5pbXBvcnQgeyBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL3B1bGwtcmVxdWVzdC10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUnO1xuaW1wb3J0IHsgZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9yZWFkbWUvZ2V0dGluZy1zdGFydGVkJztcbmltcG9ydCB7IG1lcmdlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLW9wdGlvbnMnO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdGlvbnM6IFB5dGhvblBhY2thZ2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBuYW1lLFxuICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGU6IHRydWUsXG4gICAgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzOiBERUZBVUxUX1BVTExfUkVRVUVTVF9URU1QTEFURSxcbiAgICAvLyBhdXRoZW50aWNhdGUgYXMgdGhlIEdpdEh1YiBBcHAsIHNvIG1lcmdpZnkgY2FuIGFwcHJvdmUgdXBncmFkZSBwdWxsIHJlcXVlc3RzXG4gICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKHt9KSxcbiAgfSBzYXRpc2ZpZXMgUGFydGlhbDxQeXRob25QYWNrYWdlT3B0aW9ucz47XG5cbiAgcmV0dXJuIG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQSBQeXRob24gcGFja2FnZVxuICpcbiAqXG4gKiBAcGppZCBweXRob24tcGFja2FnZVxuICovXG5leHBvcnQgY2xhc3MgUHl0aG9uUGFja2FnZSBleHRlbmRzIFB5dGhvblByb2plY3Qge1xuICByZWFkb25seSBhdXRvTWVyZ2U/OiBnaXRodWIuQXV0b01lcmdlO1xuICByZWFkbWU6IFJlYWRtZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQeXRob25QYWNrYWdlT3B0aW9ucykge1xuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICB9IGFzIFB5dGhvblByb2plY3RPcHRpb25zKTtcblxuICAgIG5ldyBDb2RlT3duZXJzKHRoaXMsIG1lcmdlZE9wdGlvbnMuY29kZU93bmVycyk7XG4gICAgaWYgKG1lcmdlZE9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmdpdGh1Yj8uYWRkUHVsbFJlcXVlc3RUZW1wbGF0ZShcbiAgICAgICAgLi4uKG1lcmdlZE9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzID8/IFtdKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVhZG1lID0gbmV3IFJlYWRtZSh0aGlzLCB7XG4gICAgICBkZXNjcmlwdGlvbjogbWVyZ2VkT3B0aW9ucy5yZWFkbWU/LmRlc2NyaXB0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMucmVhZG1lLmFkZFNlY3Rpb24oJ0dldHRpbmcgU3RhcnRlZCcsIGdldHRpbmdTdGFydGVkU2VjdGlvbih0aGlzKSwge1xuICAgICAgb3JkZXI6IFJlYWRtZU9yZGVyLklOVFJPRFVDVElPTixcbiAgICB9KTtcbiAgICBpZiAoKG1lcmdlZE9wdGlvbnMuY29kZXFsID8/IHRydWUpICYmIHRoaXMuZ2l0aHViPy53b3JrZmxvd3NFbmFibGVkKSB7XG4gICAgICBuZXcgQ29kZVFsKHRoaXMuZ2l0aHViLCB7XG4gICAgICAgIGxhbmd1YWdlczogWydweXRob24nLCAnYWN0aW9ucyddLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHByb2plbiBvbmx5IHdpcmVzIHRoZSBtZXJnZSBxdWV1ZSB1cCBmb3Igbm9kZSBwcm9qZWN0c1xuICAgIGlmICgobWVyZ2VkT3B0aW9ucy5hdXRvTWVyZ2UgPz8gdHJ1ZSkgJiYgdGhpcy5naXRodWI/Lm1lcmdpZnkpIHtcbiAgICAgIHRoaXMuYXV0b01lcmdlID0gbmV3IGdpdGh1Yi5BdXRvTWVyZ2UoXG4gICAgICAgIHRoaXMuZ2l0aHViLFxuICAgICAgICBhdXRvTWVyZ2VPcHRpb25zKG1lcmdlZE9wdGlvbnMpLFxuICAgICAgKTtcbiAgICAgIGNvbmZpZ3VyZU1lcmdpZnkodGhpcywge1xuICAgICAgICBhcHByb3ZlZFJldmlld3M6IG1lcmdlZE9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucz8uYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgICB0cnVzdGVkQXV0aG9yczogbWVyZ2VkT3B0aW9ucy50cnVzdGVkQXV0aG9ycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICcuL3B5dGhvbi1wYWNrYWdlLW9wdGlvbnMnO1xuIl19
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvamVjdHMvcHl0aG9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnQztBQUNoQyw4Q0FBd0U7QUFFeEUsbUVBQWdFO0FBQ2hFLDJEQUF3RDtBQUN4RCx1RUFBb0U7QUFDcEUsNkRBR3lDO0FBQ3pDLHlGQUE4RjtBQUM5RixvREFBOEQ7QUFDOUQsNkVBQWdGO0FBQ2hGLDZEQUF5RDtBQUV6RCxTQUFTLFVBQVUsQ0FBQyxPQUE2QjtJQUMvQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpCLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSTtRQUNKLG1CQUFtQixFQUFFLElBQUk7UUFDekIsMkJBQTJCLEVBQUUscURBQTZCO1FBQzFELCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRSxlQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztLQUNoQixDQUFDO0lBRTFDLE9BQU8sSUFBQSw0QkFBWSxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGFBQWMsU0FBUSxzQkFBYTs7SUFDckMsU0FBUyxDQUFvQjtJQUN0QyxNQUFNLENBQVM7SUFFZixZQUFZLE9BQTZCO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixHQUFHLGFBQWE7U0FDTyxDQUFDLENBQUM7UUFFM0IsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsSUFBSSxhQUFhLENBQUMsbUJBQW1CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FDakMsR0FBRyxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsSUFBSSxFQUFFLENBQUMsQ0FDckQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksRUFBRTtZQUM3QixXQUFXLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXO1NBQy9DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUEsdUNBQXFCLEVBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckUsS0FBSyxFQUFFLG9CQUFXLENBQUMsWUFBWTtTQUNoQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDcEUsSUFBSSxlQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzthQUNqQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsMkJBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QseURBQXlEO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQU0sQ0FBQyxTQUFTLENBQ25DLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBQSwwQkFBZ0IsRUFBQyxhQUFhLENBQUMsQ0FDaEMsQ0FBQztZQUNGLElBQUEsMEJBQWdCLEVBQUMsSUFBSSxFQUFFO2dCQUNyQixlQUFlLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGVBQWU7Z0JBQ2hFLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUF4Q0gsc0NBeUNDO0FBRUQsMkRBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IFB5dGhvblByb2plY3QsIFB5dGhvblByb2plY3RPcHRpb25zIH0gZnJvbSAncHJvamVuL2xpYi9weXRob24nO1xuaW1wb3J0IHsgUHl0aG9uUGFja2FnZU9wdGlvbnMgfSBmcm9tICcuL3B5dGhvbi1wYWNrYWdlLW9wdGlvbnMnO1xuaW1wb3J0IHsgQ29kZU93bmVycyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvZGVvd25lcnMnO1xuaW1wb3J0IHsgQ29kZVFsIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvY29kZXFsJztcbmltcG9ydCB7IENvbnRyaWJ1dGluZyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2l0aHViL2NvbnRyaWJ1dGluZyc7XG5pbXBvcnQge1xuICBhdXRvTWVyZ2VPcHRpb25zLFxuICBjb25maWd1cmVNZXJnaWZ5LFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5JztcbmltcG9ydCB7IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9naXRodWIvcHVsbC1yZXF1ZXN0LXRlbXBsYXRlJztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZSc7XG5pbXBvcnQgeyBnZXR0aW5nU3RhcnRlZFNlY3Rpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlYWRtZS9nZXR0aW5nLXN0YXJ0ZWQnO1xuaW1wb3J0IHsgbWVyZ2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVyZ2Utb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMob3B0aW9uczogUHl0aG9uUGFja2FnZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIG5hbWUsXG4gICAgcHVsbFJlcXVlc3RUZW1wbGF0ZTogdHJ1ZSxcbiAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IERFRkFVTFRfUFVMTF9SRVFVRVNUX1RFTVBMQVRFLFxuICAgIC8vIGF1dGhlbnRpY2F0ZSBhcyB0aGUgR2l0SHViIEFwcCwgc28gbWVyZ2lmeSBjYW4gYXBwcm92ZSB1cGdyYWRlIHB1bGwgcmVxdWVzdHNcbiAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoe30pLFxuICB9IHNhdGlzZmllcyBQYXJ0aWFsPFB5dGhvblBhY2thZ2VPcHRpb25zPjtcblxuICByZXR1cm4gbWVyZ2VPcHRpb25zKGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBBIFB5dGhvbiBwYWNrYWdlXG4gKlxuICpcbiAqIEBwamlkIHB5dGhvbi1wYWNrYWdlXG4gKi9cbmV4cG9ydCBjbGFzcyBQeXRob25QYWNrYWdlIGV4dGVuZHMgUHl0aG9uUHJvamVjdCB7XG4gIHJlYWRvbmx5IGF1dG9NZXJnZT86IGdpdGh1Yi5BdXRvTWVyZ2U7XG4gIHJlYWRtZTogUmVhZG1lO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFB5dGhvblBhY2thZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIH0gYXMgUHl0aG9uUHJvamVjdE9wdGlvbnMpO1xuXG4gICAgbmV3IENvZGVPd25lcnModGhpcywgbWVyZ2VkT3B0aW9ucy5jb2RlT3duZXJzKTtcbiAgICBpZiAobWVyZ2VkT3B0aW9ucy5wdWxsUmVxdWVzdFRlbXBsYXRlID8/IHRydWUpIHtcbiAgICAgIHRoaXMuZ2l0aHViPy5hZGRQdWxsUmVxdWVzdFRlbXBsYXRlKFxuICAgICAgICAuLi4obWVyZ2VkT3B0aW9ucy5wdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHMgPz8gW10pLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkbWUgPSBuZXcgUmVhZG1lKHRoaXMsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXJnZWRPcHRpb25zLnJlYWRtZT8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gICAgdGhpcy5yZWFkbWUuYWRkU2VjdGlvbignR2V0dGluZyBTdGFydGVkJywgZ2V0dGluZ1N0YXJ0ZWRTZWN0aW9uKHRoaXMpLCB7XG4gICAgICBvcmRlcjogUmVhZG1lT3JkZXIuSU5UUk9EVUNUSU9OLFxuICAgIH0pO1xuICAgIGlmICgobWVyZ2VkT3B0aW9ucy5jb2RlcWwgPz8gdHJ1ZSkgJiYgdGhpcy5naXRodWI/LndvcmtmbG93c0VuYWJsZWQpIHtcbiAgICAgIG5ldyBDb2RlUWwodGhpcy5naXRodWIsIHtcbiAgICAgICAgbGFuZ3VhZ2VzOiBbJ3B5dGhvbicsICdhY3Rpb25zJ10sXG4gICAgICB9KTtcbiAgICB9XG4gICAgQ29udHJpYnV0aW5nLm9mKHRoaXMpLmNvbmZpZ3VyZVB1bGxSZXF1ZXN0VGl0bGUobWVyZ2VkT3B0aW9ucyk7XG4gICAgLy8gcHJvamVuIG9ubHkgd2lyZXMgdGhlIG1lcmdlIHF1ZXVlIHVwIGZvciBub2RlIHByb2plY3RzXG4gICAgaWYgKChtZXJnZWRPcHRpb25zLmF1dG9NZXJnZSA/PyB0cnVlKSAmJiB0aGlzLmdpdGh1Yj8ubWVyZ2lmeSkge1xuICAgICAgdGhpcy5hdXRvTWVyZ2UgPSBuZXcgZ2l0aHViLkF1dG9NZXJnZShcbiAgICAgICAgdGhpcy5naXRodWIsXG4gICAgICAgIGF1dG9NZXJnZU9wdGlvbnMobWVyZ2VkT3B0aW9ucyksXG4gICAgICApO1xuICAgICAgY29uZmlndXJlTWVyZ2lmeSh0aGlzLCB7XG4gICAgICAgIGFwcHJvdmVkUmV2aWV3czogbWVyZ2VkT3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zPy5hcHByb3ZlZFJldmlld3MsXG4gICAgICAgIHRydXN0ZWRBdXRob3JzOiBtZXJnZWRPcHRpb25zLnRydXN0ZWRBdXRob3JzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vcHl0aG9uLXBhY2thZ2Utb3B0aW9ucyc7XG4iXX0=
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "publishConfig": {
84
84
  "access": "public"
85
85
  },
86
- "version": "5.3.0",
86
+ "version": "5.5.0",
87
87
  "jest": {
88
88
  "coverageProvider": "v8",
89
89
  "testMatch": [