@xpertss/projen-types 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.jsii +28 -138
  2. package/API.md +3 -305
  3. package/README.md +16 -1
  4. package/lib/actions/action-build-workflow.js +1 -1
  5. package/lib/actions/action-dogfood-workflow.js +1 -1
  6. package/lib/actions/action-sonar-workflow.js +1 -1
  7. package/lib/actions/github-action-project.d.ts +4 -4
  8. package/lib/actions/github-action-project.js +5 -7
  9. package/lib/cdk/app-runtime-scaffold.js +1 -1
  10. package/lib/cdk/cdk-app-project.js +1 -1
  11. package/lib/cdk/cdk-infra-project.js +1 -1
  12. package/lib/cdk/cdk-typescript-base.js +2 -4
  13. package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
  14. package/lib/cdk/components/edge-networking-constructs.js +1 -1
  15. package/lib/cdk/database-component.js +1 -1
  16. package/lib/common/projen-drift-check-workflow.js +1 -1
  17. package/lib/common/workflow-change-notice-workflow.js +1 -1
  18. package/lib/index.d.ts +0 -1
  19. package/lib/index.js +1 -2
  20. package/lib/java/components/cdk-deploy-hook.js +1 -1
  21. package/lib/java/components/code-index-workflow.js +1 -1
  22. package/lib/java/components/docker-publish.js +1 -1
  23. package/lib/java/components/flyway-migration.js +1 -1
  24. package/lib/java/components/github-packages-publish.js +1 -1
  25. package/lib/java/components/maven-central-publish.js +1 -1
  26. package/lib/java/java-app-project.js +1 -1
  27. package/lib/java/java-library-project.js +1 -1
  28. package/lib/java/java-maven-base.js +2 -4
  29. package/lib/java/java-service-project.js +1 -1
  30. package/package.json +1 -1
  31. package/lib/common/actions-allowlist-guard.d.ts +0 -37
  32. package/lib/common/actions-allowlist-guard.js +0 -72
package/API.md CHANGED
@@ -498,244 +498,6 @@ public readonly workflow: GithubWorkflow;
498
498
  ---
499
499
 
500
500
 
501
- ### ActionsAllowlistGuard <a name="ActionsAllowlistGuard" id="@xpertss/projen-types.ActionsAllowlistGuard"></a>
502
-
503
- #### Initializers <a name="Initializers" id="@xpertss/projen-types.ActionsAllowlistGuard.Initializer"></a>
504
-
505
- ```typescript
506
- import { ActionsAllowlistGuard } from '@xpertss/projen-types'
507
-
508
- new ActionsAllowlistGuard(scope: GitHubProject, options?: ActionsAllowlistGuardOptions)
509
- ```
510
-
511
- | **Name** | **Type** | **Description** |
512
- | --- | --- | --- |
513
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.Initializer.parameter.scope">scope</a></code> | <code>projen.github.GitHubProject</code> | *No description.* |
514
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.Initializer.parameter.options">options</a></code> | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuardOptions">ActionsAllowlistGuardOptions</a></code> | *No description.* |
515
-
516
- ---
517
-
518
- ##### `scope`<sup>Required</sup> <a name="scope" id="@xpertss/projen-types.ActionsAllowlistGuard.Initializer.parameter.scope"></a>
519
-
520
- - *Type:* projen.github.GitHubProject
521
-
522
- ---
523
-
524
- ##### `options`<sup>Optional</sup> <a name="options" id="@xpertss/projen-types.ActionsAllowlistGuard.Initializer.parameter.options"></a>
525
-
526
- - *Type:* <a href="#@xpertss/projen-types.ActionsAllowlistGuardOptions">ActionsAllowlistGuardOptions</a>
527
-
528
- ---
529
-
530
- #### Methods <a name="Methods" id="Methods"></a>
531
-
532
- | **Name** | **Description** |
533
- | --- | --- |
534
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.toString">toString</a></code> | Returns a string representation of this construct. |
535
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.with">with</a></code> | Applies one or more mixins to this construct. |
536
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.postProjectCreation">postProjectCreation</a></code> | Called once, right after `postSynthesize()`, only when the project is created for the first time. |
537
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.postSynthesize">postSynthesize</a></code> | Called after synthesis. |
538
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.preSynthesize">preSynthesize</a></code> | Called before synthesis. |
539
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.projectCreation">projectCreation</a></code> | Called once, right after `synthesize()`, only when the project is created for the first time. |
540
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.synthesize">synthesize</a></code> | Synthesizes files to the project output directory. |
541
-
542
- ---
543
-
544
- ##### `toString` <a name="toString" id="@xpertss/projen-types.ActionsAllowlistGuard.toString"></a>
545
-
546
- ```typescript
547
- public toString(): string
548
- ```
549
-
550
- Returns a string representation of this construct.
551
-
552
- ##### `with` <a name="with" id="@xpertss/projen-types.ActionsAllowlistGuard.with"></a>
553
-
554
- ```typescript
555
- public with(mixins: ...IMixin[]): IConstruct
556
- ```
557
-
558
- Applies one or more mixins to this construct.
559
-
560
- Mixins are applied in order. The list of constructs is captured at the
561
- start of the call, so constructs added by a mixin will not be visited.
562
- Use multiple `with()` calls if subsequent mixins should apply to added
563
- constructs.
564
-
565
- ###### `mixins`<sup>Required</sup> <a name="mixins" id="@xpertss/projen-types.ActionsAllowlistGuard.with.parameter.mixins"></a>
566
-
567
- - *Type:* ...constructs.IMixin[]
568
-
569
- The mixins to apply.
570
-
571
- ---
572
-
573
- ##### `postProjectCreation` <a name="postProjectCreation" id="@xpertss/projen-types.ActionsAllowlistGuard.postProjectCreation"></a>
574
-
575
- ```typescript
576
- public postProjectCreation(initProject: InitProject): void
577
- ```
578
-
579
- Called once, right after `postSynthesize()`, only when the project is created for the first time.
580
-
581
- It does not run on later `projen` invocations. It only fires for `projen new` (or `Projects.createProject`).
582
- It is also skipped when post-synthesis steps are disabled, e.g. `--no-post` or `PROJEN_DISABLE_POST`.
583
- Use it for one-off setup that can be turned off by the user, like running a task to give the user immediate
584
- feedback on their new project. Order across components is not guaranteed.
585
-
586
- ###### `initProject`<sup>Required</sup> <a name="initProject" id="@xpertss/projen-types.ActionsAllowlistGuard.postProjectCreation.parameter.initProject"></a>
587
-
588
- - *Type:* projen.InitProject
589
-
590
- Details about how the project was created, e.g. its type and the original CLI args.
591
-
592
- ---
593
-
594
- ##### `postSynthesize` <a name="postSynthesize" id="@xpertss/projen-types.ActionsAllowlistGuard.postSynthesize"></a>
595
-
596
- ```typescript
597
- public postSynthesize(): void
598
- ```
599
-
600
- Called after synthesis.
601
-
602
- Order is *not* guaranteed.
603
-
604
- ##### `preSynthesize` <a name="preSynthesize" id="@xpertss/projen-types.ActionsAllowlistGuard.preSynthesize"></a>
605
-
606
- ```typescript
607
- public preSynthesize(): void
608
- ```
609
-
610
- Called before synthesis.
611
-
612
- ##### `projectCreation` <a name="projectCreation" id="@xpertss/projen-types.ActionsAllowlistGuard.projectCreation"></a>
613
-
614
- ```typescript
615
- public projectCreation(initProject: InitProject): void
616
- ```
617
-
618
- Called once, right after `synthesize()`, only when the project is created for the first time.
619
-
620
- It does not run on later `projen` invocations. It only fires for `projen new` (or `Projects.createProject`).
621
- Use it for deterministic, one-off file generation. Order across components is not guaranteed.
622
-
623
- ###### `initProject`<sup>Required</sup> <a name="initProject" id="@xpertss/projen-types.ActionsAllowlistGuard.projectCreation.parameter.initProject"></a>
624
-
625
- - *Type:* projen.InitProject
626
-
627
- Details about how the project was created, e.g. its type and the original CLI args.
628
-
629
- ---
630
-
631
- ##### `synthesize` <a name="synthesize" id="@xpertss/projen-types.ActionsAllowlistGuard.synthesize"></a>
632
-
633
- ```typescript
634
- public synthesize(): void
635
- ```
636
-
637
- Synthesizes files to the project output directory.
638
-
639
- #### Static Functions <a name="Static Functions" id="Static Functions"></a>
640
-
641
- | **Name** | **Description** |
642
- | --- | --- |
643
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
644
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.isComponent">isComponent</a></code> | Test whether the given construct is a component. |
645
-
646
- ---
647
-
648
- ##### `isConstruct` <a name="isConstruct" id="@xpertss/projen-types.ActionsAllowlistGuard.isConstruct"></a>
649
-
650
- ```typescript
651
- import { ActionsAllowlistGuard } from '@xpertss/projen-types'
652
-
653
- ActionsAllowlistGuard.isConstruct(x: any)
654
- ```
655
-
656
- Checks if `x` is a construct.
657
-
658
- Use this method instead of `instanceof` to properly detect `Construct`
659
- instances, even when the construct library is symlinked.
660
-
661
- Explanation: in JavaScript, multiple copies of the `constructs` library on
662
- disk are seen as independent, completely different libraries. As a
663
- consequence, the class `Construct` in each copy of the `constructs` library
664
- is seen as a different class, and an instance of one class will not test as
665
- `instanceof` the other class. `npm install` will not create installations
666
- like this, but users may manually symlink construct libraries together or
667
- use a monorepo tool: in those cases, multiple copies of the `constructs`
668
- library can be accidentally installed, and `instanceof` will behave
669
- unpredictably. It is safest to avoid using `instanceof`, and using
670
- this type-testing method instead.
671
-
672
- ###### `x`<sup>Required</sup> <a name="x" id="@xpertss/projen-types.ActionsAllowlistGuard.isConstruct.parameter.x"></a>
673
-
674
- - *Type:* any
675
-
676
- Any object.
677
-
678
- ---
679
-
680
- ##### `isComponent` <a name="isComponent" id="@xpertss/projen-types.ActionsAllowlistGuard.isComponent"></a>
681
-
682
- ```typescript
683
- import { ActionsAllowlistGuard } from '@xpertss/projen-types'
684
-
685
- ActionsAllowlistGuard.isComponent(x: any)
686
- ```
687
-
688
- Test whether the given construct is a component.
689
-
690
- ###### `x`<sup>Required</sup> <a name="x" id="@xpertss/projen-types.ActionsAllowlistGuard.isComponent.parameter.x"></a>
691
-
692
- - *Type:* any
693
-
694
- ---
695
-
696
- #### Properties <a name="Properties" id="Properties"></a>
697
-
698
- | **Name** | **Type** | **Description** |
699
- | --- | --- | --- |
700
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
701
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.property.project">project</a></code> | <code>projen.Project</code> | *No description.* |
702
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuard.property.workflow">workflow</a></code> | <code>projen.github.GithubWorkflow</code> | *No description.* |
703
-
704
- ---
705
-
706
- ##### `node`<sup>Required</sup> <a name="node" id="@xpertss/projen-types.ActionsAllowlistGuard.property.node"></a>
707
-
708
- ```typescript
709
- public readonly node: Node;
710
- ```
711
-
712
- - *Type:* constructs.Node
713
-
714
- The tree node.
715
-
716
- ---
717
-
718
- ##### `project`<sup>Required</sup> <a name="project" id="@xpertss/projen-types.ActionsAllowlistGuard.property.project"></a>
719
-
720
- ```typescript
721
- public readonly project: Project;
722
- ```
723
-
724
- - *Type:* projen.Project
725
-
726
- ---
727
-
728
- ##### `workflow`<sup>Required</sup> <a name="workflow" id="@xpertss/projen-types.ActionsAllowlistGuard.property.workflow"></a>
729
-
730
- ```typescript
731
- public readonly workflow: GithubWorkflow;
732
- ```
733
-
734
- - *Type:* projen.github.GithubWorkflow
735
-
736
- ---
737
-
738
-
739
501
  ### ActionSonarWorkflow <a name="ActionSonarWorkflow" id="@xpertss/projen-types.ActionSonarWorkflow"></a>
740
502
 
741
503
  AD-001 Layer 2: SonarCloud via the Scanner CLI only (never `SonarSource/sonarqube-scan-action` - third-party, and it carried a security advisory).
@@ -7192,7 +6954,7 @@ public readonly project: Project;
7192
6954
 
7193
6955
  ### GitHubActionProject <a name="GitHubActionProject" id="@xpertss/projen-types.GitHubActionProject"></a>
7194
6956
 
7195
- Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release` workflows, versioning and release discipline, the F003 verify components, the F009 allowlist guard, and repo boilerplate (a private version-source `package.json`, `.yamllint`, `LICENSE`, and a `README.md` template). The action's own content (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand per the action's own F### spec - this type only lints it.
6957
+ Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release` workflows, versioning and release discipline, the F003 verify components, and repo boilerplate (a private version-source `package.json`, `.yamllint`, `LICENSE`, and a `README.md` template). The action's own content (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand per the action's own F### spec - this type only lints it.
7196
6958
 
7197
6959
  #### Initializers <a name="Initializers" id="@xpertss/projen-types.GitHubActionProject.Initializer"></a>
7198
6960
 
@@ -12970,70 +12732,6 @@ public readonly inputs: {[ key: string ]: string};
12970
12732
 
12971
12733
  ---
12972
12734
 
12973
- ### ActionsAllowlistGuardOptions <a name="ActionsAllowlistGuardOptions" id="@xpertss/projen-types.ActionsAllowlistGuardOptions"></a>
12974
-
12975
- Blocking, tamper-proof PR check that stops a disallowed GitHub Action reference from ever (re)appearing in a repo's workflow or composite-action files.
12976
-
12977
- Runs on `pull_request_target` so it always executes the copy of this
12978
- workflow committed on the base branch - a PR cannot edit this file to
12979
- disable or weaken the check. It checks out and executes nothing from the
12980
- PR; it only reads the PR head's file content via the GitHub API. Because
12981
- `pull_request_target` runs with the base repo's token even for
12982
- fork-originated PRs, the failure comment posts reliably.
12983
-
12984
- It performs a flat, unconditional scan of the PR's head ref (no
12985
- base-vs-head comparison): fetch the content of every GitHub workflow and
12986
- composite-action file, extract every `uses:` value, and fail if any does
12987
- not start with one of the three trusted namespaces from AD-001
12988
- (`actions/`, `docker/`, `xpertss/`). The single
12989
- exemption is a local same-repo reference (`uses: .` or
12990
- `uses: ./.github/actions/<name>`) - the repo's own hand-committed action,
12991
- to which the org policy's "allow select actions" setting does not apply.
12992
-
12993
- #### Initializer <a name="Initializer" id="@xpertss/projen-types.ActionsAllowlistGuardOptions.Initializer"></a>
12994
-
12995
- ```typescript
12996
- import { ActionsAllowlistGuardOptions } from '@xpertss/projen-types'
12997
-
12998
- const actionsAllowlistGuardOptions: ActionsAllowlistGuardOptions = { ... }
12999
- ```
13000
-
13001
- #### Properties <a name="Properties" id="Properties"></a>
13002
-
13003
- | **Name** | **Type** | **Description** |
13004
- | --- | --- | --- |
13005
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuardOptions.property.gheTokenSecret">gheTokenSecret</a></code> | <code>string</code> | GitHub secret holding a token with permission to comment on PRs, used for the failure comment. |
13006
- | <code><a href="#@xpertss/projen-types.ActionsAllowlistGuardOptions.property.workflowName">workflowName</a></code> | <code>string</code> | *No description.* |
13007
-
13008
- ---
13009
-
13010
- ##### `gheTokenSecret`<sup>Optional</sup> <a name="gheTokenSecret" id="@xpertss/projen-types.ActionsAllowlistGuardOptions.property.gheTokenSecret"></a>
13011
-
13012
- ```typescript
13013
- public readonly gheTokenSecret: string;
13014
- ```
13015
-
13016
- - *Type:* string
13017
- - *Default:* "PROJEN_GITHUB_TOKEN"
13018
-
13019
- GitHub secret holding a token with permission to comment on PRs, used for the failure comment.
13020
-
13021
- The check still fails without it, so fork PRs -
13022
- which get no secrets - are only missing the extra comment.
13023
-
13024
- ---
13025
-
13026
- ##### `workflowName`<sup>Optional</sup> <a name="workflowName" id="@xpertss/projen-types.ActionsAllowlistGuardOptions.property.workflowName"></a>
13027
-
13028
- ```typescript
13029
- public readonly workflowName: string;
13030
- ```
13031
-
13032
- - *Type:* string
13033
- - *Default:* "actions-allowlist-guard"
13034
-
13035
- ---
13036
-
13037
12735
  ### ActionSonarWorkflowOptions <a name="ActionSonarWorkflowOptions" id="@xpertss/projen-types.ActionSonarWorkflowOptions"></a>
13038
12736
 
13039
12737
  #### Initializer <a name="Initializer" id="@xpertss/projen-types.ActionSonarWorkflowOptions.Initializer"></a>
@@ -13765,7 +13463,7 @@ const gitHubActionProjectOptions: GitHubActionProjectOptions = { ... }
13765
13463
  | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.sonarHostUrl">sonarHostUrl</a></code> | <code>string</code> | URL of the org's SonarCloud instance (e.g. `https://sonarcloud.io`). MUST be reachable from github.com-hosted (public) runners (AD-001). Required, no default: a guessed server is worse than a loud failure. |
13766
13464
  | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.description">description</a></code> | <code>string</code> | One-line description of the action. |
13767
13465
  | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.dogfood">dogfood</a></code> | <code><a href="#@xpertss/projen-types.ActionDogfoodOptions">ActionDogfoodOptions</a></code> | The dogfood scenario (AD-001). |
13768
- | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.gheTokenSecret">gheTokenSecret</a></code> | <code>string</code> | Name of the GitHub Actions secret holding the PAT used for projen-automation PR comments (F003/F009) and, when the action has a `token` input, the dogfood's invocation of it. |
13466
+ | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.gheTokenSecret">gheTokenSecret</a></code> | <code>string</code> | Name of the GitHub Actions secret holding the PAT used for projen-automation PR comments (F003) and, when the action has a `token` input, the dogfood's invocation of it. |
13769
13467
  | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.license">license</a></code> | <code>string</code> | SPDX identifier for the generated `LICENSE`. |
13770
13468
  | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.sonarPullRequestGate">sonarPullRequestGate</a></code> | <code>boolean</code> | Whether `sonar.yml` also runs on `pull_request` as a pass/fail gate. |
13771
13469
  | <code><a href="#@xpertss/projen-types.GitHubActionProjectOptions.property.sonarTokenSecret">sonarTokenSecret</a></code> | <code>string</code> | *No description.* |
@@ -14200,7 +13898,7 @@ public readonly gheTokenSecret: string;
14200
13898
  - *Type:* string
14201
13899
  - *Default:* "PROJEN_GITHUB_TOKEN"
14202
13900
 
14203
- Name of the GitHub Actions secret holding the PAT used for projen-automation PR comments (F003/F009) and, when the action has a `token` input, the dogfood's invocation of it.
13901
+ Name of the GitHub Actions secret holding the PAT used for projen-automation PR comments (F003) and, when the action has a `token` input, the dogfood's invocation of it.
14204
13902
 
14205
13903
  ---
14206
13904
 
package/README.md CHANGED
@@ -61,6 +61,21 @@ is allowed to be missing loudly, never silently.
61
61
 
62
62
  The `name` option must match the `name` field in the project's `package.json` (for the CDK types) or the project name used by projen's `java.JavaProject` (for the Java types).
63
63
 
64
+ ## Updating an existing project when this package changes
65
+
66
+ Your generated scaffold reflects the *installed* version of `@xpertss/projen-types` - `npx projen` reads your project type from the package in `node_modules`, not from this repository. So when this package ships a change (a bug fix, a new generated file, or altered workflow behavior), an existing project picks it up by bumping the dependency and re-synthesizing. A stale `node_modules` silently regenerates with the old behavior, so the bump is the load-bearing step.
67
+
68
+ Using the [`auto-commit` action](#githubactionproject) as a running example, say a new release adds the `# Purpose:` workflow header and SonarCloud wording. In the `auto-commit` repo:
69
+
70
+ ```bash
71
+ npm view @xpertss/projen-types version # what's the newest release?
72
+ npm i -D @xpertss/projen-types@latest # bump the installed project type
73
+ npx projen # re-synthesize every generated file
74
+ git diff # review before committing
75
+ ```
76
+
77
+ The diff here is the workflows gaining a `# Purpose:` comment and `sonar.yml` reflecting the SonarCloud wording. Commit the result with a normal `chore:` or `fix:` message - you never hand-edit the generated files themselves.
78
+
64
79
  ## Examples
65
80
 
66
81
  ### CdkInfraProject
@@ -256,7 +271,7 @@ You get:
256
271
  - `.github/workflows/test-dogfood.yml` - runs the `dogfood.scenario` steps above against this repo's own `action.yml` (via `uses: .`), then the shared `cleanup`, on `workflow_dispatch`, every `pull_request`, and nightly. Omit `dogfood` and the workflow still exists, with one step that fails on every PR until you declare a scenario - AD-001 allows a dogfood to be missing loudly, never silently. A *partial* `dogfood` (a scenario with no cleanup) is a synth error.
257
272
  - `.github/workflows/sonar.yml` - SonarCloud scan via the Scanner CLI (the quality gate blocks the PR), scanning `action.yml`/`.github/workflows/**`/`**/*.sh` explicitly.
258
273
  - `.github/workflows/release.yml` - `feat:`/`fix:` commits on `main` bump the version, tag `vX.Y.Z`, and create a GitHub Release.
259
- - `.github/workflows/projen-drift-check.yml`, `workflow-change-notice.yml`, `actions-allowlist-guard.yml` - drift detection, a change notice, and an action allow-list guard, always included.
274
+ - `.github/workflows/projen-drift-check.yml` and `workflow-change-notice.yml` - drift detection and a change notice, always included.
260
275
  - `package.json` (**private**, version source only), `.yamllint`, `LICENSE` (MIT by default), and a `README.md` template - all regenerated by `npx projen`.
261
276
 
262
277
  Needs the same two secrets as everything else in this package: `PROJEN_GITHUB_TOKEN` (used for automated PR comments) and `SONAR_TOKEN` (the Sonar scan). Onboard a brand-new action repo following [Getting started](#getting-started), write the `.projenrc.ts` above, then hand-write `action.yml`/`auto-commit.sh`/`test/fixtures/`.
@@ -20,7 +20,7 @@ const ACTIONLINT_SHA256 = '8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc
20
20
  * the release build job, so the lint commands exist in exactly one place.
21
21
  */
22
22
  class ActionBuildWorkflow extends projen_1.Component {
23
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionBuildWorkflow", version: "0.0.7" };
23
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionBuildWorkflow", version: "0.0.8" };
24
24
  task;
25
25
  workflow;
26
26
  constructor(scope) {
@@ -41,7 +41,7 @@ const UNCONFIGURED_STEPS = [
41
41
  * error: if you wrote a scenario by hand, you can write its cleanup too.
42
42
  */
43
43
  class ActionDogfoodWorkflow extends projen_1.Component {
44
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionDogfoodWorkflow", version: "0.0.7" };
44
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionDogfoodWorkflow", version: "0.0.8" };
45
45
  workflow;
46
46
  constructor(scope, options) {
47
47
  super(scope, 'ActionDogfoodWorkflow');
@@ -15,7 +15,7 @@ const SONAR_SCANNER_SHA256 = 'bb8f709f9cb73352f8d1260a3b3c506c0f41146754bc630762
15
15
  * inclusions may skip `action.yml` outside `.github/`.
16
16
  */
17
17
  class ActionSonarWorkflow extends projen_1.Component {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionSonarWorkflow", version: "0.0.7" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ActionSonarWorkflow", version: "0.0.8" };
19
19
  workflow;
20
20
  constructor(scope, options) {
21
21
  super(scope, 'ActionSonarWorkflow');
@@ -10,7 +10,7 @@ export interface GitHubActionProjectOptions extends github.GitHubProjectOptions
10
10
  readonly description?: string;
11
11
  /**
12
12
  * Name of the GitHub Actions secret holding the PAT used for
13
- * projen-automation PR comments (F003/F009) and, when the action has a
13
+ * projen-automation PR comments (F003) and, when the action has a
14
14
  * `token` input, the dogfood's invocation of it.
15
15
  * @default "PROJEN_GITHUB_TOKEN"
16
16
  */
@@ -53,9 +53,9 @@ export interface GitHubActionProjectOptions extends github.GitHubProjectOptions
53
53
  /**
54
54
  * Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite
55
55
  * (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release`
56
- * workflows, versioning and release discipline, the F003 verify components,
57
- * the F009 allowlist guard, and repo boilerplate (a private version-source
58
- * `package.json`, `.yamllint`, `LICENSE`, and a `README.md` template). The
56
+ * workflows, versioning and release discipline, the F003 verify components,
57
+ * and repo boilerplate (a private version-source `package.json`, `.yamllint`,
58
+ * `LICENSE`, and a `README.md` template). The
59
59
  * action's own content
60
60
  * (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand
61
61
  * per the action's own F### spec - this type only lints it.
@@ -6,7 +6,6 @@ const projen_1 = require("projen");
6
6
  const action_build_workflow_1 = require("./action-build-workflow");
7
7
  const action_dogfood_workflow_1 = require("./action-dogfood-workflow");
8
8
  const action_sonar_workflow_1 = require("./action-sonar-workflow");
9
- const actions_allowlist_guard_1 = require("../common/actions-allowlist-guard");
10
9
  const constants_1 = require("../common/constants");
11
10
  const internal_actions_1 = require("../common/internal-actions");
12
11
  const projen_drift_check_workflow_1 = require("../common/projen-drift-check-workflow");
@@ -55,15 +54,15 @@ hand-committed.
55
54
  /**
56
55
  * Scaffolds the repo lifecycle (AD-001) around a hand-committed, composite
57
56
  * (shell) GitHub Action: the `build`/`test-dogfood`/`sonar`/`release`
58
- * workflows, versioning and release discipline, the F003 verify components,
59
- * the F009 allowlist guard, and repo boilerplate (a private version-source
60
- * `package.json`, `.yamllint`, `LICENSE`, and a `README.md` template). The
57
+ * workflows, versioning and release discipline, the F003 verify components,
58
+ * and repo boilerplate (a private version-source `package.json`, `.yamllint`,
59
+ * `LICENSE`, and a `README.md` template). The
61
60
  * action's own content
62
61
  * (`action.yml`, its shell scripts, `test/` fixtures) is authored by hand
63
62
  * per the action's own F### spec - this type only lints it.
64
63
  */
65
64
  class GitHubActionProject extends projen_1.github.GitHubProject {
66
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.7" };
65
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.8" };
67
66
  buildWorkflow;
68
67
  dogfoodWorkflow;
69
68
  sonarWorkflow;
@@ -88,7 +87,6 @@ class GitHubActionProject extends projen_1.github.GitHubProject {
88
87
  gheTokenSecret: options.gheTokenSecret ?? constants_1.DEFAULT_GHE_TOKEN_SECRET,
89
88
  });
90
89
  new workflow_change_notice_workflow_1.WorkflowChangeNoticeWorkflow(this);
91
- new actions_allowlist_guard_1.ActionsAllowlistGuard(this);
92
90
  new projen_1.License(this, {
93
91
  spdx: options.license ?? 'MIT',
94
92
  copyrightOwner: 'xpertss',
@@ -152,4 +150,4 @@ class GitHubActionProject extends projen_1.github.GitHubProject {
152
150
  }
153
151
  }
154
152
  exports.GitHubActionProject = GitHubActionProject;
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWFjdGlvbi1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvZ2l0aHViLWFjdGlvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FPZ0I7QUFDaEIsbUVBQThEO0FBQzlELHVFQUF3RjtBQUN4RixtRUFBOEQ7QUFDOUQsK0VBQTBFO0FBQzFFLG1EQUErRDtBQUMvRCxpRUFBMEU7QUFDMUUsdUZBQWlGO0FBQ2pGLHVEQUFpRTtBQUNqRSwrRkFBeUY7QUFDekYsaUVBQWlFO0FBRWpFLDJFQUEyRTtBQUMzRSx5RUFBeUU7QUFDekUsK0RBQStEO0FBQy9ELHlFQUF5RTtBQUN6RSxvRUFBb0U7QUFDcEUsa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxNQUFNLGNBQWMsR0FBVyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEUsaUVBQWlFO0FBQ2pFLE1BQU0sb0JBQW9CLEdBQVcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBRTNFLHdFQUF3RTtBQUN4RSw0RUFBNEU7QUFDNUUsbUNBQW1DO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDO0FBMER4QyxTQUFTLHFCQUFxQixDQUFDLE9BQW1DO0lBQ2hFLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSTs7RUFFeEIsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFOzs7OztrQkFLVCxPQUFPLENBQUMsSUFBSTs7Ozs7Ozs7Ozs7Ozs7O0NBZTdCLENBQUM7QUFDRixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxlQUFNLENBQUMsYUFBYTs7SUFDM0MsYUFBYSxDQUFzQjtJQUNuQyxlQUFlLENBQXdCO0lBQ3ZDLGFBQWEsQ0FBc0I7SUFDbkMsT0FBTyxDQUFrQjtJQUV6QyxZQUFZLE9BQW1DO1FBQzdDLElBQUksQ0FBQyxPQUFPLENB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QUFFO1lBQ3ZELGNBQWMsRUFBRSxnQkFBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsV0FBVyxFQUFFLDBCQUEwQixzQkFBc0IsRUFBRTtZQUMvRCx5QkFBeUIsRUFBRTtnQkFDekIsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTthQUNoRDtTQUNGLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxzRUFBc0U7UUFDdEUsa0VBQWtFO1FBQ2xFLDZDQUE2QztRQUM3QyxJQUFBLHNDQUFtQixFQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLEVBQ2pELHFGQUFxRixDQUN0RixDQUFDO1FBQ0YseUVBQXlFO1FBQ3pFLElBQUEsc0NBQW1CLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMseUNBQXlDLENBQUMsRUFDM0Qsb0dBQW9HLENBQ3JHLENBQUM7SUFDSixDQUFDOztBQTNHSCxrREE0R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBKc29uRmlsZSxcbiAgTGljZW5zZSxcbiAgUmVsZWFzYWJsZUNvbW1pdHMsXG4gIFlhbWxGaWxlLFxuICBnaXRodWIsXG4gIHJlbGVhc2UsXG59IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBY3Rpb25CdWlsZFdvcmtmbG93IH0gZnJvbSAnLi9hY3Rpb24tYnVpbGQtd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uRG9nZm9vZE9wdGlvbnMsIEFjdGlvbkRvZ2Zvb2RXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLWRvZ2Zvb2Qtd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uU29uYXJXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLXNvbmFyLXdvcmtmbG93JztcbmltcG9ydCB7IEFjdGlvbnNBbGxvd2xpc3RHdWFyZCB9IGZyb20gJy4uL2NvbW1vbi9hY3Rpb25zLWFsbG93bGlzdC1ndWFyZCc7XG5pbXBvcnQgeyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IGFwcGx5SW50ZXJuYWxBY3Rpb25PdmVycmlkZXMgfSBmcm9tICcuLi9jb21tb24vaW50ZXJuYWwtYWN0aW9ucyc7XG5pbXBvcnQgeyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3cgfSBmcm9tICcuLi9jb21tb24vcHJvamVuLWRyaWZ0LWNoZWNrLXdvcmtmbG93JztcbmltcG9ydCB7IGF0dGFjaFR5cGVTY3JpcHRQcm9qZW5yYyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW5yYy10cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93IH0gZnJvbSAnLi4vY29tbW9uL3dvcmtmbG93LWNoYW5nZS1ub3RpY2Utd29ya2Zsb3cnO1xuaW1wb3J0IHsgbm90ZVdvcmtmbG93UHVycG9zZSB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1wdXJwb3NlJztcblxuLy8gYHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKWAvYHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpYCByZXNvbHZlXG4vLyB2aWEgTm9kZSdzIG5vcm1hbCBtb2R1bGUgcmVzb2x1dGlvbiwgc28gaW4gYSAqcHVibGlzaGVkKiBwYWNrYWdlIHRoZXNlXG4vLyByZWFkIHRoZSB2ZXJzaW9ucyBhY3R1YWxseSBpbnN0YWxsZWQgaW4gdGhlIGNvbnN1bWluZyByZXBvJ3Ncbi8vIG5vZGVfbW9kdWxlcyAtIGV4YWN0bHkgdGhlIFwiUFJPSkVOX1ZFUlNJT04gb2YgdGhlIHN5bnRoXCIgLyBcInZlcnNpb24gb2Zcbi8vIHRoaXMgcGFja2FnZSB0aGF0IHNjYWZmb2xkZWQgdGhlIHJlcG9cIiB0aGUgcHJpdmF0ZSBwYWNrYWdlLmpzb24nc1xuLy8gZGV2RGVwZW5kZW5jaWVzIG5lZWQgdG8gcGluIChzZWUgRjAxMCBDSS1kZXBlbmRlbmNpZXMgc2VjdGlvbikuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9UWVBFU19WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG4vLyBFeGFjdCBwaW4sIHJlY29yZGVkIGFzIGEgY29tcG9uZW50IGNvbnN0YW50IChBRC0wMDE6IG5vIGxhdGVzdC9tb3Zpbmdcbi8vIHRhZy9zZW12ZXIgcmFuZ2UgaW4gYW55dGhpbmcgYSBnZW5lcmF0ZWQgcmVwbyBkZXBlbmRzIG9uKS4gVXBncmFkaW5nIHRoaXNcbi8vIGlzIGEgcmV2aWV3ZWQgZGlmZiBvZiB0aGlzIGZpbGUuXG5jb25zdCBDT01NSVRfQU5EX1RBR19WRVJTSU9OID0gJzEzLjIuMSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViQWN0aW9uUHJvamVjdE9wdGlvbnNcbiAgZXh0ZW5kcyBnaXRodWIuR2l0SHViUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogT25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIGFjdGlvbi4gVXNlZCBpbiB0aGUgZGVmYXVsdCBSRUFETUVcbiAgICogdGVtcGxhdGUgYW5kIHJlY29yZGVkIGluIHRoZSBwcml2YXRlIGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIEdpdEh1YiBBY3Rpb25zIHNlY3JldCBob2xkaW5nIHRoZSBQQVQgdXNlZCBmb3JcbiAgICogcHJvamVuLWF1dG9tYXRpb24gUFIgY29tbWVudHMgKEYwMDMvRjAwOSkgYW5kLCB3aGVuIHRoZSBhY3Rpb24gaGFzIGFcbiAgICogYHRva2VuYCBpbnB1dCwgdGhlIGRvZ2Zvb2QncyBpbnZvY2F0aW9uIG9mIGl0LlxuICAgKiBAZGVmYXVsdCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIlxuICAgKi9cbiAgcmVhZG9ubHkgZ2hlVG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgb3JnJ3MgU29uYXJDbG91ZCBpbnN0YW5jZSAoZS5nLiBgaHR0cHM6Ly9zb25hcmNsb3VkLmlvYCkuXG4gICAqIE1VU1QgYmUgcmVhY2hhYmxlIGZyb20gZ2l0aHViLmNvbS1ob3N0ZWQgKHB1YmxpYykgcnVubmVycyAoQUQtMDAxKS5cbiAgICogUmVxdWlyZWQsIG5vIGRlZmF1bHQ6IGEgZ3Vlc3NlZCBzZXJ2ZXIgaXMgd29yc2UgdGhhbiBhIGxvdWQgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvbmFySG9zdFVybDogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIlNPTkFSX1RPS0VOXCIgKi9cbiAgcmVhZG9ubHkgc29uYXJUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBgc29uYXIueW1sYCBhbHNvIHJ1bnMgb24gYHB1bGxfcmVxdWVzdGAgYXMgYSBwYXNzL2ZhaWwgZ2F0ZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc29uYXJQdWxsUmVxdWVzdEdhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9nZm9vZCBzY2VuYXJpbyAoQUQtMDAxKS4gV2hhdCBmaXh0dXJlIHN0YXRlLCB3aGF0IHRvIGFzc2VydCwgYW5kXG4gICAqIGhvdyB0byBjbGVhbiB1cCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBhY3Rpb24ncyBvd24gRiMjIyBzcGVjIC0gdGhlXG4gICAqIGhpZ2hlc3QtcmlzayBiZWhhdmlvciBvZiB0aGF0IGFjdGlvbi5cbiAgICpcbiAgICogSXRzIHR5cGUgaXMgYSBzdHJ1Y3QsIHdoaWNoIHByb2plbidzIENMSSBjYW5ub3QgcmVuZGVyIGludG8gYSBwcm9qZW5yYyxcbiAgICogc28gaXQgY2FuIG9ubHkgYmUgd3JpdHRlbiBieSBoYW5kIC0gaXQgaXMgdGhlcmVmb3JlIG9wdGlvbmFsLCBiZWNhdXNlIGFcbiAgICogKnJlcXVpcmVkKiBvcHRpb24gYHByb2plbiBuZXdgIGNhbm5vdCBzdXBwbHkgd291bGQgbWFrZSB0aGlzIHByb2plY3RcbiAgICogdHlwZSBpbXBvc3NpYmxlIHRvIHNjYWZmb2xkLiBBRC0wMDEncyBcIm5ldmVyIGEgc2lsZW50IG5vLW9wIGRvZ2Zvb2RcIlxuICAgKiBydWxlIGlzIGVuZm9yY2VkIGluc3RlYWQgYnkgdGhlIHdvcmtmbG93IGl0IGdlbmVyYXRlcyBpbiB0aGF0IGNhc2U6IGFcbiAgICogc2luZ2xlIHN0ZXAgdGhhdCBmYWlscyBvbiBldmVyeSBQUiB1bnRpbCBhIHNjZW5hcmlvIGlzIGRlY2xhcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGB0ZXN0LWRvZ2Zvb2QueW1sYCBydW5zIG9uZSBmYWlsaW5nIHN0ZXAgdGhhdCB0ZWxscyB5b3UgdG9cbiAgICogZGVjbGFyZSBhIHNjZW5hcmlvXG4gICAqL1xuICByZWFkb25seSBkb2dmb29kPzogQWN0aW9uRG9nZm9vZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFNQRFggaWRlbnRpZmllciBmb3IgdGhlIGdlbmVyYXRlZCBgTElDRU5TRWAuXG4gICAqIEBkZWZhdWx0IFwiTUlUXCJcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2U/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZWFkbWVDb250ZW50cyhvcHRpb25zOiBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBgIyAke29wdGlvbnMubmFtZX1cblxuJHtvcHRpb25zLmRlc2NyaXB0aW9uID8/ICcnfVxuXG4jIyBVc2FnZVxuXG5cXGBcXGBcXGB5YW1sXG4tIHVzZXM6IHhwZXJ0c3MvJHtvcHRpb25zLm5hbWV9QDxyZWY+XG5cXGBcXGBcXGBcblxuIyMgQnVtcGluZ1xuXG5BIFxcYGZlYXQ6XFxgL1xcYGZpeDpcXGAgY29tbWl0IHB1c2hlZCB0byBcXGBtYWluXFxgIGlzIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHk6IGJ1bXAsXG50YWcgXFxgdlguWS5aXFxgLCBHaXRIdWIgUmVsZWFzZS4gU2VlIFxcYC5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sXFxgLlxuXG4jIyBUcnVzdCBjb250cmFjdFxuXG5UaGlzIGlzIGEgY29tcG9zaXRlIChzaGVsbCkgYWN0aW9uIC0gbm8gTm9kZS9ucG0gYXQgcnVudGltZSwgbm8gRG9ja2VyLiBJdHNcbkNJIGxpbnQgZ2F0ZSAoXFxgYnVpbGQueW1sXFxgKSwgZG9nZm9vZCB0ZXN0IChcXGB0ZXN0LWRvZ2Zvb2QueW1sXFxgKSwgYW5kIFNvbmFyXG5zY2FuIChcXGBzb25hci55bWxcXGApIGFyZSBzY2FmZm9sZGVkIGJ5IFxcYEB4cGVydHNzL3Byb2plbi10eXBlc1xcYCdcblxcYEdpdEh1YkFjdGlvblByb2plY3RcXGA7IG9ubHkgXFxgYWN0aW9uLnltbFxcYCBhbmQgaXRzIHNoZWxsIHNjcmlwdHMgYXJlXG5oYW5kLWNvbW1pdHRlZC5cbmA7XG59XG5cbi8qKlxuICogU2NhZmZvbGRzIHRoZSByZXBvIGxpZmVjeWNsZSAoQUQtMDAxKSBhcm91bmQgYSBoYW5kLWNvbW1pdHRlZCwgY29tcG9zaXRlXG4gKiAoc2hlbGwpIEdpdEh1YiBBY3Rpb246IHRoZSBgYnVpbGRgL2B0ZXN0LWRvZ2Zvb2RgL2Bzb25hcmAvYHJlbGVhc2VgXG4gKiB3b3JrZmxvd3MsIHZlcnNpb25pbmcgYW5kIHJlbGVhc2UgZGlzY2lwbGluZSwgdGhlIEYwMDMgdmVyaWZ5IGNvbXBvbmVudHMsXG4gKiB0aGUgRjAwOSBhbGxvd2xpc3QgZ3VhcmQsIGFuZCByZXBvIGJvaWxlcnBsYXRlIChhIHByaXZhdGUgdmVyc2lvbi1zb3VyY2VcbiAqIGBwYWNrYWdlLmpzb25gLCBgLnlhbWxsaW50YCwgYExJQ0VOU0VgLCBhbmQgYSBgUkVBRE1FLm1kYCB0ZW1wbGF0ZSkuIFRoZVxuICogYWN0aW9uJ3Mgb3duIGNvbnRlbnRcbiAqIChgYWN0aW9uLnltbGAsIGl0cyBzaGVsbCBzY3JpcHRzLCBgdGVzdC9gIGZpeHR1cmVzKSBpcyBhdXRob3JlZCBieSBoYW5kXG4gKiBwZXIgdGhlIGFjdGlvbidzIG93biBGIyMjIHNwZWMgLSB0aGlzIHR5cGUgb25seSBsaW50cyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdpdEh1YkFjdGlvblByb2plY3QgZXh0ZW5kcyBnaXRodWIuR2l0SHViUHJvamVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBidWlsZFdvcmtmbG93OiBBY3Rpb25CdWlsZFdvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgZG9nZm9vZFdvcmtmbG93OiBBY3Rpb25Eb2dmb29kV29ya2Zsb3c7XG4gIHB1YmxpYyByZWFkb25seSBzb25hcldvcmtmbG93OiBBY3Rpb25Tb25hcldvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsZWFzZTogcmVsZWFzZS5SZWxlYXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEh1YkFjdGlvblByb2plY3RPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnNvbmFySG9zdFVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWJBY3Rpb25Qcm9qZWN0IHJlcXVpcmVzIHNvbmFySG9zdFVybCcpO1xuICAgIH1cbiAgICAvLyBBIGRlY2xhcmVkLWJ1dC1pbmNvbXBsZXRlIGRvZ2Zvb2QgaXMgc3RpbGwgYW4gZXJyb3IgLSBzZWVcbiAgICAvLyBgQWN0aW9uRG9nZm9vZFdvcmtmbG93YCwgd2hpY2ggb3ducyB0aGF0IGNoZWNrIChhbmQgdGhlXG4gICAgLy8gbm8tZG9nZm9vZC1kZWNsYXJlZCBjYXNlKS5cblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICByZWFkbWU6IG9wdGlvbnMucmVhZG1lID8/IHsgY29udGVudHM6IGRlZmF1bHRSZWFkbWVDb250ZW50cyhvcHRpb25zKSB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2ggPSB0aGlzLmdpdGh1YjtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdHaXRIdWJBY3Rpb25Qcm9qZWN0IHJlcXVpcmVzIEdpdEh1YiBpbnRlZ3JhdGlvbiB0byBiZSBlbmFibGVkJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGFwcGx5SW50ZXJuYWxBY3Rpb25PdmVycmlkZXMoZ2gpO1xuXG4gICAgbmV3IFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyh0aGlzLCB7XG4gICAgICBnaGVUb2tlblNlY3JldDogb3B0aW9ucy5naGVUb2tlblNlY3JldCA/PyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQsXG4gICAgfSk7XG4gICAgbmV3IFdvcmtmbG93Q2hhbmdlTm90aWNlV29ya2Zsb3codGhpcyk7XG4gICAgbmV3IEFjdGlvbnNBbGxvd2xpc3RHdWFyZCh0aGlzKTtcblxuICAgIG5ldyBMaWNlbnNlKHRoaXMsIHtcbiAgICAgIHNwZHg6IG9wdGlvbnMubGljZW5zZSA/PyAnTUlUJyxcbiAgICAgIGNvcHlyaWdodE93bmVyOiAneHBlcnRzcycsXG4gICAgfSk7XG5cbiAgICAvLyBgLnByb2plbnJjLnRzYCArIGBucHggcHJvamVuYCwgc2FtZSBhcyBldmVyeSBvdGhlciB0eXBlIGhlcmUuIEEgYmFyZVxuICAgIC8vIEdpdEh1YlByb2plY3QgaGFzIG5vIGRlZmF1bHQgdGFzayB0aGF0IHJ1bnMgYSBwcm9qZW5yYyBvbiBpdHMgb3duLCBzb1xuICAgIC8vIHRoaXMgaXMgd2hhdCBtYWtlcyBgbnB4IHByb2plbmAgd29yayBpbiB0aGUgZ2VuZXJhdGVkIHJlcG8gYXQgYWxsLlxuICAgIGF0dGFjaFR5cGVTY3JpcHRQcm9qZW5yYyh0aGlzKTtcblxuICAgIG5ldyBKc29uRmlsZSh0aGlzLCAncGFja2FnZS5qc29uJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgICAgcHJpdmF0ZTogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICAgIGRldkRlcGVuZGVuY2llczoge1xuICAgICAgICAgICdwcm9qZW4nOiBQUk9KRU5fVkVSU0lPTixcbiAgICAgICAgICAnQHhwZXJ0c3MvcHJvamVuLXR5cGVzJzogUFJPSkVOX1RZUEVTX1ZFUlNJT04sXG4gICAgICAgICAgJ2NvbW1pdC1hbmQtdGFnLXZlcnNpb24nOiBDT01NSVRfQU5EX1RBR19WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBZYW1sRmlsZSh0aGlzLCAnLnlhbWxsaW50Jywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6ICdkZWZhdWx0JyxcbiAgICAgICAgcnVsZXM6IHsgJ2xpbmUtbGVuZ3RoJzogeyBtYXg6IDEyMCB9IH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFdvcmtmbG93ID0gbmV3IEFjdGlvbkJ1aWxkV29ya2Zsb3codGhpcyk7XG5cbiAgICB0aGlzLmRvZ2Zvb2RXb3JrZmxvdyA9IG5ldyBBY3Rpb25Eb2dmb29kV29ya2Zsb3codGhpcywgb3B0aW9ucy5kb2dmb29kKTtcblxuICAgIHRoaXMuc29uYXJXb3JrZmxvdyA9IG5ldyBBY3Rpb25Tb25hcldvcmtmbG93KHRoaXMsIHtcbiAgICAgIHNvbmFySG9zdFVybDogb3B0aW9ucy5zb25hckhvc3RVcmwsXG4gICAgICBzb25hclRva2VuU2VjcmV0OiBvcHRpb25zLnNvbmFyVG9rZW5TZWNyZXQsXG4gICAgICBzb25hclB1bGxSZXF1ZXN0R2F0ZTogb3B0aW9ucy5zb25hclB1bGxSZXF1ZXN0R2F0ZSxcbiAgICB9KTtcblxuICAgIC8vIGBnaXRodWJSZWxlYXNlYCBkZWZhdWx0cyB0byB0cnVlLCB3aGljaCBhdXRvLXdpcmVzXG4gICAgLy8gYHB1Ymxpc2hUb0dpdEh1YlJlbGVhc2VzYCAtIGl0cyBgZ2ggcmVsZWFzZSBjcmVhdGUgLi4uIC0tdGFyZ2V0XG4gICAgLy8gJEdJVEhVQl9TSEFgIGNyZWF0ZXMgdGhlIHRhZyAqYW5kKiB0aGUgcmVsZWFzZSB0b2dldGhlciBmb3Igb3VyXG4gICAgLy8gY29udGludW91cyAocHVzaC10by1tYWluKSB0cmlnZ2VyLiBObyBzZXBhcmF0ZSBgcHVibGlzaFRvR2l0YCBjYWxsXG4gICAgLy8gbmVlZGVkICh0aGF0IHBhdGggb25seSBmaXJlcyBmb3IgYSBtYW51YWwgcmVsZWFzZSB0cmlnZ2VyKS5cbiAgICB0aGlzLnJlbGVhc2UgPSBuZXcgcmVsZWFzZS5SZWxlYXNlKHRoaXMsIHtcbiAgICAgIGJyYW5jaDogJ21haW4nLFxuICAgICAgLy8gTm8gYnVpbGQgYXJ0aWZhY3QgZm9yIGEgY29tcG9zaXRlIGFjdGlvbiAoQUQtMDAxKSAtIHRoaXMgaXMgb25seVxuICAgICAgLy8gd2hlcmUgUmVsZWFzZSBzdGFnZXMgaXRzIG93biB2ZXJzaW9uL2NoYW5nZWxvZyBmaWxlcy5cbiAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogJ2Rpc3QnLFxuICAgICAgdGFza3M6IFt0aGlzLmJ1aWxkV29ya2Zsb3cudGFza10sXG4gICAgICB2ZXJzaW9uRmlsZTogJ3BhY2thZ2UuanNvbicsXG4gICAgICByZWxlYXNhYmxlQ29tbWl0czogUmVsZWFzYWJsZUNvbW1pdHMuZmVhdHVyZXNBbmRGaXhlcygpLFxuICAgICAgcmVsZWFzZVRyaWdnZXI6IHJlbGVhc2UuUmVsZWFzZVRyaWdnZXIuY29udGludW91cygpLFxuICAgICAgYnVtcFBhY2thZ2U6IGBjb21taXQtYW5kLXRhZy12ZXJzaW9uQCR7Q09NTUlUX0FORF9UQUdfVkVSU0lPTn1gLFxuICAgICAgcmVsZWFzZVdvcmtmbG93U2V0dXBTdGVwczogW1xuICAgICAgICB7IG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsIHJ1bjogJ25wbSBjaScgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgcmVsZWFzZSB3b3JrZmxvdyBpcyBjcmVhdGVkIGluc2lkZSBgcmVsZWFzZS5SZWxlYXNlYCAocHJvamVuXG4gICAgLy8gaW50ZXJuYWwpLCBub3QgYnkgdGhpcyB0eXBlIC0gcmVhY2ggaXRzIGZpbGUgYnkgcGF0aCB0byBhbm5vdGF0ZSBpdFxuICAgIC8vIGxpa2UgZXZlcnkgb3RoZXIgZ2VuZXJhdGVkIHdvcmtmbG93LiBUaGlzIHR5cGUgaXMgYWx3YXlzIGEgcm9vdFxuICAgIC8vIHByb2plY3QsIHNvIHByb2plbiBuYW1lcyBpdCBgcmVsZWFzZS55bWxgLlxuICAgIG5vdGVXb3JrZmxvd1B1cnBvc2UoXG4gICAgICB0aGlzLnRyeUZpbmRGaWxlKCcuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbCcpLFxuICAgICAgJ0NvbnRpbnVvdXMgcmVsZWFzZSBvbiBwdXNoIHRvIG1haW46IGJ1bXAgdmVyc2lvbiwgdGFnLCBhbmQgY3JlYXRlIGEgR2l0SHViIFJlbGVhc2UuJyxcbiAgICApO1xuICAgIC8vIGBwdWxsLXJlcXVlc3QtbGludGAgaXMgcHJvamVuJ3MgYnVpbHQtaW4gUFItdGl0bGUgdmFsaWRhdGlvbiB3b3JrZmxvdy5cbiAgICBub3RlV29ya2Zsb3dQdXJwb3NlKFxuICAgICAgdGhpcy50cnlGaW5kRmlsZSgnLmdpdGh1Yi93b3JrZmxvd3MvcHVsbC1yZXF1ZXN0LWxpbnQueW1sJyksXG4gICAgICAnUmVqZWN0IHB1bGwgcmVxdWVzdHMgd2hvc2UgdGl0bGVzIGRvIG5vdCBmb2xsb3cgdGhlIGNvbnZlbnRpb25hbC1jb21taXQgKHNlbWFudGljLXJlbGVhc2UpIGZvcm1hdC4nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWFjdGlvbi1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvZ2l0aHViLWFjdGlvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FPZ0I7QUFDaEIsbUVBQThEO0FBQzlELHVFQUF3RjtBQUN4RixtRUFBOEQ7QUFDOUQsbURBQStEO0FBQy9ELGlFQUEwRTtBQUMxRSx1RkFBaUY7QUFDakYsdURBQWlFO0FBQ2pFLCtGQUF5RjtBQUN6RixpRUFBaUU7QUFFakUsMkVBQTJFO0FBQzNFLHlFQUF5RTtBQUN6RSwrREFBK0Q7QUFDL0QseUVBQXlFO0FBQ3pFLG9FQUFvRTtBQUNwRSxrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLE1BQU0sY0FBYyxHQUFXLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN0RSxpRUFBaUU7QUFDakUsTUFBTSxvQkFBb0IsR0FBVyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFFM0Usd0VBQXdFO0FBQ3hFLDRFQUE0RTtBQUM1RSxtQ0FBbUM7QUFDbkMsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUM7QUEwRHhDLFNBQVMscUJBQXFCLENBQUMsT0FBbUM7SUFDaEUsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJOztFQUV4QixPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUU7Ozs7O2tCQUtULE9BQU8sQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7Q0FlN0IsQ0FBQztBQUNGLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLGVBQU0sQ0FBQyxhQUFhOztJQUMzQyxhQUFhLENBQXNCO0lBQ25DLGVBQWUsQ0FBd0I7SUFDdkMsYUFBYSxDQUFzQjtJQUNuQyxPQUFPLENBQWtCO0lBRXpDLFlBQVksT0FBbUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUs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WUFDbkQsV0FBVyxFQUFFLDBCQUEwQixzQkFBc0IsRUFBRTtZQUMvRCx5QkFBeUIsRUFBRTtnQkFDekIsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTthQUNoRDtTQUNGLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxzRUFBc0U7UUFDdEUsa0VBQWtFO1FBQ2xFLDZDQUE2QztRQUM3QyxJQUFBLHNDQUFtQixFQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLEVBQ2pELHFGQUFxRixDQUN0RixDQUFDO1FBQ0YseUVBQXlFO1FBQ3pFLElBQUEsc0NBQW1CLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMseUNBQXlDLENBQUMsRUFDM0Qsb0dBQW9HLENBQ3JHLENBQUM7SUFDSixDQUFDOztBQTFHSCxrREEyR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBKc29uRmlsZSxcbiAgTGljZW5zZSxcbiAgUmVsZWFzYWJsZUNvbW1pdHMsXG4gIFlhbWxGaWxlLFxuICBnaXRodWIsXG4gIHJlbGVhc2UsXG59IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBY3Rpb25CdWlsZFdvcmtmbG93IH0gZnJvbSAnLi9hY3Rpb24tYnVpbGQtd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uRG9nZm9vZE9wdGlvbnMsIEFjdGlvbkRvZ2Zvb2RXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLWRvZ2Zvb2Qtd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uU29uYXJXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLXNvbmFyLXdvcmtmbG93JztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyB9IGZyb20gJy4uL2NvbW1vbi9pbnRlcm5hbC1hY3Rpb25zJztcbmltcG9ydCB7IFByb2plbkRyaWZ0Q2hlY2tXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW4tZHJpZnQtY2hlY2std29ya2Zsb3cnO1xuaW1wb3J0IHsgYXR0YWNoVHlwZVNjcmlwdFByb2plbnJjIH0gZnJvbSAnLi4vY29tbW9uL3Byb2plbnJjLXRzJztcbmltcG9ydCB7IFdvcmtmbG93Q2hhbmdlTm90aWNlV29ya2Zsb3cgfSBmcm9tICcuLi9jb21tb24vd29ya2Zsb3ctY2hhbmdlLW5vdGljZS13b3JrZmxvdyc7XG5pbXBvcnQgeyBub3RlV29ya2Zsb3dQdXJwb3NlIH0gZnJvbSAnLi4vY29tbW9uL3dvcmtmbG93LXB1cnBvc2UnO1xuXG4vLyBgcmVxdWlyZSgncHJvamVuL3BhY2thZ2UuanNvbicpYC9gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJylgIHJlc29sdmVcbi8vIHZpYSBOb2RlJ3Mgbm9ybWFsIG1vZHVsZSByZXNvbHV0aW9uLCBzbyBpbiBhICpwdWJsaXNoZWQqIHBhY2thZ2UgdGhlc2Vcbi8vIHJlYWQgdGhlIHZlcnNpb25zIGFjdHVhbGx5IGluc3RhbGxlZCBpbiB0aGUgY29uc3VtaW5nIHJlcG8nc1xuLy8gbm9kZV9tb2R1bGVzIC0gZXhhY3RseSB0aGUgXCJQUk9KRU5fVkVSU0lPTiBvZiB0aGUgc3ludGhcIiAvIFwidmVyc2lvbiBvZlxuLy8gdGhpcyBwYWNrYWdlIHRoYXQgc2NhZmZvbGRlZCB0aGUgcmVwb1wiIHRoZSBwcml2YXRlIHBhY2thZ2UuanNvbidzXG4vLyBkZXZEZXBlbmRlbmNpZXMgbmVlZCB0byBwaW4gKHNlZSBGMDEwIENJLWRlcGVuZGVuY2llcyBzZWN0aW9uKS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBQUk9KRU5fVkVSU0lPTjogc3RyaW5nID0gcmVxdWlyZSgncHJvamVuL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1RZUEVTX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG5cbi8vIEV4YWN0IHBpbiwgcmVjb3JkZWQgYXMgYSBjb21wb25lbnQgY29uc3RhbnQgKEFELTAwMTogbm8gbGF0ZXN0L21vdmluZ1xuLy8gdGFnL3NlbXZlciByYW5nZSBpbiBhbnl0aGluZyBhIGdlbmVyYXRlZCByZXBvIGRlcGVuZHMgb24pLiBVcGdyYWRpbmcgdGhpc1xuLy8gaXMgYSByZXZpZXdlZCBkaWZmIG9mIHRoaXMgZmlsZS5cbmNvbnN0IENPTU1JVF9BTkRfVEFHX1ZFUlNJT04gPSAnMTMuMi4xJztcblxuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9uc1xuICBleHRlbmRzIGdpdGh1Yi5HaXRIdWJQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgYWN0aW9uLiBVc2VkIGluIHRoZSBkZWZhdWx0IFJFQURNRVxuICAgKiB0ZW1wbGF0ZSBhbmQgcmVjb3JkZWQgaW4gdGhlIHByaXZhdGUgYHBhY2thZ2UuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2l0SHViIEFjdGlvbnMgc2VjcmV0IGhvbGRpbmcgdGhlIFBBVCB1c2VkIGZvclxuICAgKiBwcm9qZW4tYXV0b21hdGlvbiBQUiBjb21tZW50cyAoRjAwMykgYW5kLCB3aGVuIHRoZSBhY3Rpb24gaGFzIGFcbiAgICogYHRva2VuYCBpbnB1dCwgdGhlIGRvZ2Zvb2QncyBpbnZvY2F0aW9uIG9mIGl0LlxuICAgKiBAZGVmYXVsdCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIlxuICAgKi9cbiAgcmVhZG9ubHkgZ2hlVG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgb3JnJ3MgU29uYXJDbG91ZCBpbnN0YW5jZSAoZS5nLiBgaHR0cHM6Ly9zb25hcmNsb3VkLmlvYCkuXG4gICAqIE1VU1QgYmUgcmVhY2hhYmxlIGZyb20gZ2l0aHViLmNvbS1ob3N0ZWQgKHB1YmxpYykgcnVubmVycyAoQUQtMDAxKS5cbiAgICogUmVxdWlyZWQsIG5vIGRlZmF1bHQ6IGEgZ3Vlc3NlZCBzZXJ2ZXIgaXMgd29yc2UgdGhhbiBhIGxvdWQgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvbmFySG9zdFVybDogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcIlNPTkFSX1RPS0VOXCIgKi9cbiAgcmVhZG9ubHkgc29uYXJUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBgc29uYXIueW1sYCBhbHNvIHJ1bnMgb24gYHB1bGxfcmVxdWVzdGAgYXMgYSBwYXNzL2ZhaWwgZ2F0ZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc29uYXJQdWxsUmVxdWVzdEdhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9nZm9vZCBzY2VuYXJpbyAoQUQtMDAxKS4gV2hhdCBmaXh0dXJlIHN0YXRlLCB3aGF0IHRvIGFzc2VydCwgYW5kXG4gICAqIGhvdyB0byBjbGVhbiB1cCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBhY3Rpb24ncyBvd24gRiMjIyBzcGVjIC0gdGhlXG4gICAqIGhpZ2hlc3QtcmlzayBiZWhhdmlvciBvZiB0aGF0IGFjdGlvbi5cbiAgICpcbiAgICogSXRzIHR5cGUgaXMgYSBzdHJ1Y3QsIHdoaWNoIHByb2plbidzIENMSSBjYW5ub3QgcmVuZGVyIGludG8gYSBwcm9qZW5yYyxcbiAgICogc28gaXQgY2FuIG9ubHkgYmUgd3JpdHRlbiBieSBoYW5kIC0gaXQgaXMgdGhlcmVmb3JlIG9wdGlvbmFsLCBiZWNhdXNlIGFcbiAgICogKnJlcXVpcmVkKiBvcHRpb24gYHByb2plbiBuZXdgIGNhbm5vdCBzdXBwbHkgd291bGQgbWFrZSB0aGlzIHByb2plY3RcbiAgICogdHlwZSBpbXBvc3NpYmxlIHRvIHNjYWZmb2xkLiBBRC0wMDEncyBcIm5ldmVyIGEgc2lsZW50IG5vLW9wIGRvZ2Zvb2RcIlxuICAgKiBydWxlIGlzIGVuZm9yY2VkIGluc3RlYWQgYnkgdGhlIHdvcmtmbG93IGl0IGdlbmVyYXRlcyBpbiB0aGF0IGNhc2U6IGFcbiAgICogc2luZ2xlIHN0ZXAgdGhhdCBmYWlscyBvbiBldmVyeSBQUiB1bnRpbCBhIHNjZW5hcmlvIGlzIGRlY2xhcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGB0ZXN0LWRvZ2Zvb2QueW1sYCBydW5zIG9uZSBmYWlsaW5nIHN0ZXAgdGhhdCB0ZWxscyB5b3UgdG9cbiAgICogZGVjbGFyZSBhIHNjZW5hcmlvXG4gICAqL1xuICByZWFkb25seSBkb2dmb29kPzogQWN0aW9uRG9nZm9vZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFNQRFggaWRlbnRpZmllciBmb3IgdGhlIGdlbmVyYXRlZCBgTElDRU5TRWAuXG4gICAqIEBkZWZhdWx0IFwiTUlUXCJcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2U/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZWFkbWVDb250ZW50cyhvcHRpb25zOiBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBgIyAke29wdGlvbnMubmFtZX1cblxuJHtvcHRpb25zLmRlc2NyaXB0aW9uID8/ICcnfVxuXG4jIyBVc2FnZVxuXG5cXGBcXGBcXGB5YW1sXG4tIHVzZXM6IHhwZXJ0c3MvJHtvcHRpb25zLm5hbWV9QDxyZWY+XG5cXGBcXGBcXGBcblxuIyMgQnVtcGluZ1xuXG5BIFxcYGZlYXQ6XFxgL1xcYGZpeDpcXGAgY29tbWl0IHB1c2hlZCB0byBcXGBtYWluXFxgIGlzIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHk6IGJ1bXAsXG50YWcgXFxgdlguWS5aXFxgLCBHaXRIdWIgUmVsZWFzZS4gU2VlIFxcYC5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sXFxgLlxuXG4jIyBUcnVzdCBjb250cmFjdFxuXG5UaGlzIGlzIGEgY29tcG9zaXRlIChzaGVsbCkgYWN0aW9uIC0gbm8gTm9kZS9ucG0gYXQgcnVudGltZSwgbm8gRG9ja2VyLiBJdHNcbkNJIGxpbnQgZ2F0ZSAoXFxgYnVpbGQueW1sXFxgKSwgZG9nZm9vZCB0ZXN0IChcXGB0ZXN0LWRvZ2Zvb2QueW1sXFxgKSwgYW5kIFNvbmFyXG5zY2FuIChcXGBzb25hci55bWxcXGApIGFyZSBzY2FmZm9sZGVkIGJ5IFxcYEB4cGVydHNzL3Byb2plbi10eXBlc1xcYCdcblxcYEdpdEh1YkFjdGlvblByb2plY3RcXGA7IG9ubHkgXFxgYWN0aW9uLnltbFxcYCBhbmQgaXRzIHNoZWxsIHNjcmlwdHMgYXJlXG5oYW5kLWNvbW1pdHRlZC5cbmA7XG59XG5cbi8qKlxuICogU2NhZmZvbGRzIHRoZSByZXBvIGxpZmVjeWNsZSAoQUQtMDAxKSBhcm91bmQgYSBoYW5kLWNvbW1pdHRlZCwgY29tcG9zaXRlXG4gKiAoc2hlbGwpIEdpdEh1YiBBY3Rpb246IHRoZSBgYnVpbGRgL2B0ZXN0LWRvZ2Zvb2RgL2Bzb25hcmAvYHJlbGVhc2VgXG4gICogd29ya2Zsb3dzLCB2ZXJzaW9uaW5nIGFuZCByZWxlYXNlIGRpc2NpcGxpbmUsIHRoZSBGMDAzIHZlcmlmeSBjb21wb25lbnRzLFxuICAqIGFuZCByZXBvIGJvaWxlcnBsYXRlIChhIHByaXZhdGUgdmVyc2lvbi1zb3VyY2UgYHBhY2thZ2UuanNvbmAsIGAueWFtbGxpbnRgLFxuICAqIGBMSUNFTlNFYCwgYW5kIGEgYFJFQURNRS5tZGAgdGVtcGxhdGUpLiBUaGVcbiAqIGFjdGlvbidzIG93biBjb250ZW50XG4gKiAoYGFjdGlvbi55bWxgLCBpdHMgc2hlbGwgc2NyaXB0cywgYHRlc3QvYCBmaXh0dXJlcykgaXMgYXV0aG9yZWQgYnkgaGFuZFxuICogcGVyIHRoZSBhY3Rpb24ncyBvd24gRiMjIyBzcGVjIC0gdGhpcyB0eXBlIG9ubHkgbGludHMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRIdWJBY3Rpb25Qcm9qZWN0IGV4dGVuZHMgZ2l0aHViLkdpdEh1YlByb2plY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdzogQWN0aW9uQnVpbGRXb3JrZmxvdztcbiAgcHVibGljIHJlYWRvbmx5IGRvZ2Zvb2RXb3JrZmxvdzogQWN0aW9uRG9nZm9vZFdvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgc29uYXJXb3JrZmxvdzogQWN0aW9uU29uYXJXb3JrZmxvdztcbiAgcHVibGljIHJlYWRvbmx5IHJlbGVhc2U6IHJlbGVhc2UuUmVsZWFzZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5zb25hckhvc3RVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBzb25hckhvc3RVcmwnKTtcbiAgICB9XG4gICAgLy8gQSBkZWNsYXJlZC1idXQtaW5jb21wbGV0ZSBkb2dmb29kIGlzIHN0aWxsIGFuIGVycm9yIC0gc2VlXG4gICAgLy8gYEFjdGlvbkRvZ2Zvb2RXb3JrZmxvd2AsIHdoaWNoIG93bnMgdGhhdCBjaGVjayAoYW5kIHRoZVxuICAgIC8vIG5vLWRvZ2Zvb2QtZGVjbGFyZWQgY2FzZSkuXG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZSA/PyB7IGNvbnRlbnRzOiBkZWZhdWx0UmVhZG1lQ29udGVudHMob3B0aW9ucykgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGdoID0gdGhpcy5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24gdG8gYmUgZW5hYmxlZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzKGdoKTtcblxuICAgIG5ldyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3codGhpcywge1xuICAgICAgZ2hlVG9rZW5TZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgIH0pO1xuICAgIG5ldyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93KHRoaXMpO1xuXG4gICAgbmV3IExpY2Vuc2UodGhpcywge1xuICAgICAgc3BkeDogb3B0aW9ucy5saWNlbnNlID8/ICdNSVQnLFxuICAgICAgY29weXJpZ2h0T3duZXI6ICd4cGVydHNzJyxcbiAgICB9KTtcblxuICAgIC8vIGAucHJvamVucmMudHNgICsgYG5weCBwcm9qZW5gLCBzYW1lIGFzIGV2ZXJ5IG90aGVyIHR5cGUgaGVyZS4gQSBiYXJlXG4gICAgLy8gR2l0SHViUHJvamVjdCBoYXMgbm8gZGVmYXVsdCB0YXNrIHRoYXQgcnVucyBhIHByb2plbnJjIG9uIGl0cyBvd24sIHNvXG4gICAgLy8gdGhpcyBpcyB3aGF0IG1ha2VzIGBucHggcHJvamVuYCB3b3JrIGluIHRoZSBnZW5lcmF0ZWQgcmVwbyBhdCBhbGwuXG4gICAgYXR0YWNoVHlwZVNjcmlwdFByb2plbnJjKHRoaXMpO1xuXG4gICAgbmV3IEpzb25GaWxlKHRoaXMsICdwYWNrYWdlLmpzb24nLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBwcml2YXRlOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgJ3Byb2plbic6IFBST0pFTl9WRVJTSU9OLFxuICAgICAgICAgICdAeHBlcnRzcy9wcm9qZW4tdHlwZXMnOiBQUk9KRU5fVFlQRVNfVkVSU0lPTixcbiAgICAgICAgICAnY29tbWl0LWFuZC10YWctdmVyc2lvbic6IENPTU1JVF9BTkRfVEFHX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbmV3IFlhbWxGaWxlKHRoaXMsICcueWFtbGxpbnQnLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZXh0ZW5kczogJ2RlZmF1bHQnLFxuICAgICAgICBydWxlczogeyAnbGluZS1sZW5ndGgnOiB7IG1heDogMTIwIH0gfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkV29ya2Zsb3cgPSBuZXcgQWN0aW9uQnVpbGRXb3JrZmxvdyh0aGlzKTtcblxuICAgIHRoaXMuZG9nZm9vZFdvcmtmbG93ID0gbmV3IEFjdGlvbkRvZ2Zvb2RXb3JrZmxvdyh0aGlzLCBvcHRpb25zLmRvZ2Zvb2QpO1xuXG4gICAgdGhpcy5zb25hcldvcmtmbG93ID0gbmV3IEFjdGlvblNvbmFyV29ya2Zsb3codGhpcywge1xuICAgICAgc29uYXJIb3N0VXJsOiBvcHRpb25zLnNvbmFySG9zdFVybCxcbiAgICAgIHNvbmFyVG9rZW5TZWNyZXQ6IG9wdGlvbnMuc29uYXJUb2tlblNlY3JldCxcbiAgICAgIHNvbmFyUHVsbFJlcXVlc3RHYXRlOiBvcHRpb25zLnNvbmFyUHVsbFJlcXVlc3RHYXRlLFxuICAgIH0pO1xuXG4gICAgLy8gYGdpdGh1YlJlbGVhc2VgIGRlZmF1bHRzIHRvIHRydWUsIHdoaWNoIGF1dG8td2lyZXNcbiAgICAvLyBgcHVibGlzaFRvR2l0SHViUmVsZWFzZXNgIC0gaXRzIGBnaCByZWxlYXNlIGNyZWF0ZSAuLi4gLS10YXJnZXRcbiAgICAvLyAkR0lUSFVCX1NIQWAgY3JlYXRlcyB0aGUgdGFnICphbmQqIHRoZSByZWxlYXNlIHRvZ2V0aGVyIGZvciBvdXJcbiAgICAvLyBjb250aW51b3VzIChwdXNoLXRvLW1haW4pIHRyaWdnZXIuIE5vIHNlcGFyYXRlIGBwdWJsaXNoVG9HaXRgIGNhbGxcbiAgICAvLyBuZWVkZWQgKHRoYXQgcGF0aCBvbmx5IGZpcmVzIGZvciBhIG1hbnVhbCByZWxlYXNlIHRyaWdnZXIpLlxuICAgIHRoaXMucmVsZWFzZSA9IG5ldyByZWxlYXNlLlJlbGVhc2UodGhpcywge1xuICAgICAgYnJhbmNoOiAnbWFpbicsXG4gICAgICAvLyBObyBidWlsZCBhcnRpZmFjdCBmb3IgYSBjb21wb3NpdGUgYWN0aW9uIChBRC0wMDEpIC0gdGhpcyBpcyBvbmx5XG4gICAgICAvLyB3aGVyZSBSZWxlYXNlIHN0YWdlcyBpdHMgb3duIHZlcnNpb24vY2hhbmdlbG9nIGZpbGVzLlxuICAgICAgYXJ0aWZhY3RzRGlyZWN0b3J5OiAnZGlzdCcsXG4gICAgICB0YXNrczogW3RoaXMuYnVpbGRXb3JrZmxvdy50YXNrXSxcbiAgICAgIHZlcnNpb25GaWxlOiAncGFja2FnZS5qc29uJyxcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5mZWF0dXJlc0FuZEZpeGVzKCksXG4gICAgICByZWxlYXNlVHJpZ2dlcjogcmVsZWFzZS5SZWxlYXNlVHJpZ2dlci5jb250aW51b3VzKCksXG4gICAgICBidW1wUGFja2FnZTogYGNvbW1pdC1hbmQtdGFnLXZlcnNpb25AJHtDT01NSVRfQU5EX1RBR19WRVJTSU9OfWAsXG4gICAgICByZWxlYXNlV29ya2Zsb3dTZXR1cFN0ZXBzOiBbXG4gICAgICAgIHsgbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJywgcnVuOiAnbnBtIGNpJyB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIFRoZSByZWxlYXNlIHdvcmtmbG93IGlzIGNyZWF0ZWQgaW5zaWRlIGByZWxlYXNlLlJlbGVhc2VgIChwcm9qZW5cbiAgICAvLyBpbnRlcm5hbCksIG5vdCBieSB0aGlzIHR5cGUgLSByZWFjaCBpdHMgZmlsZSBieSBwYXRoIHRvIGFubm90YXRlIGl0XG4gICAgLy8gbGlrZSBldmVyeSBvdGhlciBnZW5lcmF0ZWQgd29ya2Zsb3cuIFRoaXMgdHlwZSBpcyBhbHdheXMgYSByb290XG4gICAgLy8gcHJvamVjdCwgc28gcHJvamVuIG5hbWVzIGl0IGByZWxlYXNlLnltbGAuXG4gICAgbm90ZVdvcmtmbG93UHVycG9zZShcbiAgICAgIHRoaXMudHJ5RmluZEZpbGUoJy5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sJyksXG4gICAgICAnQ29udGludW91cyByZWxlYXNlIG9uIHB1c2ggdG8gbWFpbjogYnVtcCB2ZXJzaW9uLCB0YWcsIGFuZCBjcmVhdGUgYSBHaXRIdWIgUmVsZWFzZS4nLFxuICAgICk7XG4gICAgLy8gYHB1bGwtcmVxdWVzdC1saW50YCBpcyBwcm9qZW4ncyBidWlsdC1pbiBQUi10aXRsZSB2YWxpZGF0aW9uIHdvcmtmbG93LlxuICAgIG5vdGVXb3JrZmxvd1B1cnBvc2UoXG4gICAgICB0aGlzLnRyeUZpbmRGaWxlKCcuZ2l0aHViL3dvcmtmbG93cy9wdWxsLXJlcXVlc3QtbGludC55bWwnKSxcbiAgICAgICdSZWplY3QgcHVsbCByZXF1ZXN0cyB3aG9zZSB0aXRsZXMgZG8gbm90IGZvbGxvdyB0aGUgY29udmVudGlvbmFsLWNvbW1pdCAoc2VtYW50aWMtcmVsZWFzZSkgZm9ybWF0LicsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -8,7 +8,7 @@ const projen_1 = require("projen");
8
8
  * layered on top of `CdkTypescriptProject`'s pure-infra scaffold.
9
9
  */
10
10
  class AppRuntimeScaffold extends projen_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.7" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.8" };
12
12
  constructor(project, appEntryPoint = 'src/app.ts') {
13
13
  super(project, 'AppRuntimeScaffold');
14
14
  const app = new projen_1.SourceCode(project, appEntryPoint);
@@ -13,7 +13,7 @@ const workflow_purpose_1 = require("../common/workflow-purpose");
13
13
  * application source, a database, and an app-level build/test workflow.
14
14
  */
15
15
  class CdkAppProject extends cdk_infra_project_1.CdkInfraProject {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.7" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.8" };
17
17
  constructor(options) {
18
18
  super(options);
19
19
  new app_runtime_scaffold_1.AppRuntimeScaffold(this, options.appEntryPoint ?? 'src/app.ts');
@@ -11,7 +11,7 @@ const edge_networking_constructs_1 = require("./components/edge-networking-const
11
11
  * externally-built images). Reference example: SimulcastAVDelivery.
12
12
  */
13
13
  class CdkInfraProject extends cdk_typescript_base_1.CdkTypescriptProject {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.7" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.8" };
15
15
  constructor(options) {
16
16
  super(options);
17
17
  if (options.ecrEcs?.enabled) {