@nikovirtala/projen-constructs 0.3.2 → 0.3.3

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 (34) hide show
  1. package/.jsii +270 -282
  2. package/README.md +144 -11
  3. package/docs/api/classes/AwsCdkConstructLibraryProject.html +1 -1
  4. package/docs/api/classes/AwsCdkTypeScriptAppProject.html +1 -1
  5. package/docs/api/classes/JsiiProject.html +1 -1
  6. package/docs/api/classes/TypeScriptProject.html +1 -1
  7. package/docs/api/index.html +152 -12
  8. package/docs/api/interfaces/AwsCdkConstructLibraryProjectOptions.html +4 -7
  9. package/docs/api/interfaces/AwsCdkTypeScriptAppProjectOptions.html +4 -7
  10. package/docs/api/interfaces/JsiiProjectOptions.html +4 -7
  11. package/docs/api/interfaces/TypeScriptProjectOptions.html +4 -7
  12. package/lib/components/bundle-lambda-function-code.js +3 -3
  13. package/lib/components/colima.js +1 -1
  14. package/lib/components/homebrew.js +1 -1
  15. package/lib/components/lambda-function-construct-generator.js +1 -1
  16. package/lib/components/localstack.js +1 -1
  17. package/lib/components/mise.js +1 -1
  18. package/lib/components/typedoc.js +1 -1
  19. package/lib/components/vitest.js +1 -1
  20. package/lib/project-generator.d.ts +17 -1
  21. package/lib/project-generator.js +47 -4
  22. package/lib/projects/awscdk-construct-library-options.generated.d.ts +1 -2
  23. package/lib/projects/awscdk-construct-library-options.generated.js +1 -1
  24. package/lib/projects/awscdk-construct-library.generated.js +1 -1
  25. package/lib/projects/awscdk-typescript-app-options.generated.d.ts +1 -2
  26. package/lib/projects/awscdk-typescript-app-options.generated.js +1 -1
  27. package/lib/projects/awscdk-typescript-app.generated.js +1 -1
  28. package/lib/projects/jsii-options.generated.d.ts +1 -2
  29. package/lib/projects/jsii-options.generated.js +1 -1
  30. package/lib/projects/jsii.generated.js +1 -1
  31. package/lib/projects/typescript-options.generated.d.ts +1 -2
  32. package/lib/projects/typescript-options.generated.js +1 -1
  33. package/lib/projects/typescript.generated.js +1 -1
  34. package/package.json +1 -1
package/README.md CHANGED
@@ -8,11 +8,20 @@ Projen project types with standard configuration for consistent project setup ac
8
8
  pnpm add -D @nikovirtala/projen-constructs projen constructs
9
9
  ```
10
10
 
11
+ Requires pnpm 11 and `projen` >= 0.101.27. `@mrgrain/cdk-esbuild` and `constructs` are peer
12
+ dependencies as well.
13
+
14
+ To create a project from scratch:
15
+
16
+ ```bash
17
+ pnpm dlx projen new --from @nikovirtala/projen-constructs aws_cdk_construct_library
18
+ ```
19
+
11
20
  ## Features
12
21
 
13
22
  - **Standard Configuration**: Opinionated defaults for author, release branch, package manager, Node.js, TypeScript, and tooling
14
- - **Automatic Project Type Discovery**: Generates `ProjectType` enum from Projen's JSII manifest (18 project types)
15
- - **Component System**: Reusable components (Vitest, Mise, TypeDoc, LocalStack, etc.)
23
+ - **Automatic Project Type Discovery**: Generates the `ProjectType` enum from Projen's JSII manifest (19 project types)
24
+ - **Component System**: Reusable components (Vitest, TypeDoc, Mise, Homebrew, Colima, LocalStack, Lambda bundling)
16
25
  - **Code Generation**: `ProjectGenerator` creates project classes with standard configuration
17
26
  - **ES Modules**: TypeScript and CDK App projects use ES modules (JSII uses CommonJS)
18
27
  - **Code Quality**: Biome for formatting and linting
@@ -25,11 +34,36 @@ pnpm add -D @nikovirtala/projen-constructs projen constructs
25
34
 
26
35
  - **Author**: Niko Virtala (niko.virtala@hey.com)
27
36
  - **Default Release Branch**: main
28
- - **Package Manager**: pnpm 10
29
- - **Node Version**: 22.21.1
30
- - **TypeScript**: 5.9.3
31
- - **CDK Version**: 2.223.0 (for CDK projects)
32
- - **JSII Version**: ~5.9.3 (for JSII projects)
37
+ - **Package Manager**: pnpm 11.20.0
38
+ - **Node Version**: 24.19.0
39
+ - **TypeScript**: 6.0.3
40
+ - **CDK Version**: 2.263.0 (for CDK projects)
41
+ - **JSII Version**: ~6.0.3 (for JSII projects)
42
+
43
+ The AWS CDK, Node.js and TypeScript versions live in `src/versions.json` and are refreshed by the
44
+ `update-versions` task, which the dependency upgrade workflow runs.
45
+
46
+ ### pnpm
47
+
48
+ pnpm reads its settings from `pnpm-workspace.yaml`, not `.npmrc`, since pnpm 11. Generated projects
49
+ get:
50
+
51
+ | Setting | Value | Reason |
52
+ | ---------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ |
53
+ | `nodeLinker` | `hoisted` | jsii tooling resolves dependencies from a flat `node_modules` |
54
+ | `allowBuilds` | `esbuild: true` | esbuild links its platform binary in a postinstall script, and pnpm 11 fails an install with ignored builds |
55
+ | `verifyDepsBeforeRun` | `false` | projen resolves the task `PATH` with `$(pnpm -c exec ...)`, which otherwise re-enters `pnpm install` and deadlocks |
56
+ | `minimumReleaseAge` | `0` | the pnpm 11 default of 1440 minutes makes pnpm write `minimumReleaseAgeExclude` entries into this generated file |
57
+
58
+ ### TypeScript configuration
59
+
60
+ Projen renders three configs, and none of them should be edited directly:
61
+
62
+ - `tsconfig.json` compiles `src` to `lib`. For JSII projects, jsii validates it against its `strict`
63
+ rule set, so it only carries compiler options jsii accepts.
64
+ - `test/tsconfig.json` extends it and is type-check only. This is the config Vitest type checking and
65
+ the editor use, and the one `tsconfigDev` points at.
66
+ - `projenrc/tsconfig.json` covers `.projenrc.ts`.
33
67
 
34
68
  ## Customization
35
69
 
@@ -39,7 +73,7 @@ Override any option by passing it to the constructor:
39
73
  const project = new JsiiProject({
40
74
  name: "my-project",
41
75
  repositoryUrl: "https://github.com/nikovirtala/my-project.git",
42
- minNodeVersion: "20.0.0",
76
+ minNodeVersion: "24.0.0",
43
77
  author: "Custom Author",
44
78
  authorAddress: "custom@example.com",
45
79
  mise: false,
@@ -59,6 +93,9 @@ const project = new JsiiProject({
59
93
  });
60
94
  ```
61
95
 
96
+ Every component is exposed as an enable flag (`mise`, `vitest`, ...) plus an options property
97
+ (`miseOptions`, `vitestOptions`, ...).
98
+
62
99
  ## Usage
63
100
 
64
101
  ### Projects
@@ -135,6 +172,9 @@ new Vitest(project, {
135
172
  });
136
173
  ```
137
174
 
175
+ Type checking runs against the project's development tsconfig (`test/tsconfig.json`) unless
176
+ `config.typecheckTsconfig` says otherwise.
177
+
138
178
  #### TypeDoc
139
179
 
140
180
  [TypeDoc](https://typedoc.org) documentation generation component.
@@ -160,13 +200,14 @@ new TypeDoc(project, {
160
200
  import { Mise } from "@nikovirtala/projen-constructs";
161
201
 
162
202
  new Mise(project, {
163
- nodeVersion: "22.21.1",
203
+ nodeVersion: "24.19.0",
164
204
  });
165
205
  ```
166
206
 
167
207
  #### Homebrew
168
208
 
169
- [Homebrew](https://brew.sh) package management component.
209
+ [Homebrew](https://brew.sh) package management component. Writes a `Brewfile` and adds an
210
+ `install:homebrew` task that bootstraps Homebrew and runs `brew bundle`.
170
211
 
171
212
  ```typescript
172
213
  import { Homebrew } from "@nikovirtala/projen-constructs";
@@ -250,7 +291,7 @@ import { ProjectGenerator, ProjectType } from "@nikovirtala/projen-constructs";
250
291
 
251
292
  new ProjectGenerator(project, {
252
293
  name: "TypeScriptProject",
253
- projectType: ProjectType.TYPESCRIPT,
294
+ projectType: ProjectType.TYPE_SCRIPT_PROJECT,
254
295
  filePath: "./src/projects/typescript.generated.ts",
255
296
  components: [
256
297
  { componentClass: Mise },
@@ -260,7 +301,99 @@ new ProjectGenerator(project, {
260
301
  ```
261
302
 
262
303
  Features:
304
+
263
305
  - Automatically generates the `ProjectType` enum from Projen's JSII manifest
264
306
  - Auto-detects component options types from JSII manifests
307
+ - Strips Projen's `@pjnew` annotation from `packageManager`, which `projen new` would otherwise
308
+ render into a generated `.projenrc.ts` as the package manager that ran the command
265
309
  - Validates paths to prevent directory traversal attacks
266
310
  - Structured error handling with custom error classes
311
+
312
+ ## Development
313
+
314
+ This project is managed by Projen and generates itself: `.projenrc.ts` defines the project using the
315
+ `JsiiProject` type from `src/`. Configuration changes belong in `.projenrc.ts`, never in the
316
+ generated files.
317
+
318
+ ```bash
319
+ pnpm projen # synthesize project files
320
+ pnpm build # synthesize, compile, test and package
321
+ pnpm test # biome, vitest, typedoc
322
+ pnpm test:watch # vitest in watch mode
323
+ pnpm test:update # update snapshots
324
+ pnpm biome # format and lint
325
+ pnpm docgen # regenerate API.md from the .jsii manifest
326
+ pnpm update-versions # refresh src/versions.json
327
+ pnpm upgrade # upgrade dependencies
328
+ ```
329
+
330
+ ### Build process
331
+
332
+ ```mermaid
333
+ flowchart TD
334
+ projenrc[".projenrc.ts"]
335
+
336
+ subgraph synthesize["default (synthesize)"]
337
+ direction TB
338
+ synth["tsx .projenrc.ts"]
339
+ generator["ProjectGenerator"]
340
+ generated["src/project-type.ts<br/>src/projects/*.generated.ts<br/>src/projects/*-options.generated.ts"]
341
+ projenfiles["package.json, tsconfig.json,<br/>pnpm-workspace.yaml, workflows, ..."]
342
+ brew["install:homebrew<br/>brew bundle"]
343
+ definecfg["bundle-vitest-define-config<br/>esbuild → lib/vitest-define-config.js"]
344
+
345
+ synth --> generator --> generated
346
+ synth --> projenfiles
347
+ synth --> brew
348
+ synth --> definecfg
349
+ end
350
+
351
+ subgraph compile["compile"]
352
+ direction TB
353
+ jsii["jsii<br/>validates tsconfig.json against the strict rule set"]
354
+ lib["lib/**"]
355
+ manifest[".jsii manifest"]
356
+
357
+ jsii --> lib
358
+ jsii --> manifest
359
+ end
360
+
361
+ subgraph test["test"]
362
+ direction TB
363
+ biome["biome check --write"]
364
+ vitest["vitest run<br/>+ type checking"]
365
+ typedoc["typedoc → docs/api"]
366
+
367
+ biome --> vitest --> typedoc
368
+ end
369
+
370
+ subgraph package["package"]
371
+ direction TB
372
+ pacmak["jsii-pacmak<br/>--pack-command 'pnpm pack'"]
373
+ dist["dist/js/*.tgz"]
374
+
375
+ pacmak --> dist
376
+ end
377
+
378
+ projenrc --> synthesize
379
+ synthesize --> compile
380
+ compile --> test
381
+ test --> package
382
+
383
+ manifest -. "component options FQNs<br/>read on the next synthesis" .-> generator
384
+ docgen["docgen<br/>jsii-docgen → API.md"]
385
+ manifest --> docgen
386
+
387
+ classDef artifact fill:#eef,stroke:#88a
388
+ class generated,projenfiles,lib,manifest,dist artifact
389
+ ```
390
+
391
+ The dashed edge is the part worth knowing about: `ProjectGenerator` reads the committed `.jsii`
392
+ manifest to resolve component options types, so the manifest produced by `compile` feeds the *next*
393
+ synthesis. This is why `.jsii` is committed rather than ignored. A component options type that is
394
+ missing from the manifest is reported as a warning and its options property is left out of the
395
+ generated interface, which is expected only while a new component is being introduced: compile once,
396
+ then synthesize again.
397
+
398
+ `package` runs `package:js` on CI and `package-all` locally; both end up in `jsii-pacmak`.
399
+ `docgen` is not part of `build` and has to be run explicitly after the manifest changes.
@@ -14,7 +14,7 @@
14
14
  <div class="tsd-comment tsd-typography"><p>AwsCdkConstructLibraryProject with standard configuration and component integration</p>
15
15
  <p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
16
16
  </div></section>
17
- <section class="tsd-panel tsd-hierarchy" data-refl="806">
17
+ <section class="tsd-panel tsd-hierarchy" data-refl="809">
18
18
  <h4>Hierarchy</h4>
19
19
  <ul class="tsd-hierarchy">
20
20
  <li class="tsd-hierarchy-item"><span class="tsd-signature-type">AwsCdkConstructLibrary</span>
@@ -14,7 +14,7 @@
14
14
  <div class="tsd-comment tsd-typography"><p>AwsCdkTypeScriptAppProject with standard configuration and component integration</p>
15
15
  <p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
16
16
  </div></section>
17
- <section class="tsd-panel tsd-hierarchy" data-refl="986">
17
+ <section class="tsd-panel tsd-hierarchy" data-refl="989">
18
18
  <h4>Hierarchy</h4>
19
19
  <ul class="tsd-hierarchy">
20
20
  <li class="tsd-hierarchy-item"><span class="tsd-signature-type">AwsCdkTypeScriptApp</span>
@@ -14,7 +14,7 @@
14
14
  <div class="tsd-comment tsd-typography"><p>JsiiProject with standard configuration and component integration</p>
15
15
  <p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
16
16
  </div></section>
17
- <section class="tsd-panel tsd-hierarchy" data-refl="1169">
17
+ <section class="tsd-panel tsd-hierarchy" data-refl="1172">
18
18
  <h4>Hierarchy</h4>
19
19
  <ul class="tsd-hierarchy">
20
20
  <li class="tsd-hierarchy-item"><span class="tsd-signature-type">JsiiProject</span>
@@ -14,7 +14,7 @@
14
14
  <div class="tsd-comment tsd-typography"><p>TypeScriptProject with standard configuration and component integration</p>
15
15
  <p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
16
16
  </div></section>
17
- <section class="tsd-panel tsd-hierarchy" data-refl="1346">
17
+ <section class="tsd-panel tsd-hierarchy" data-refl="1349">
18
18
  <h4>Hierarchy</h4>
19
19
  <ul class="tsd-hierarchy">
20
20
  <li class="tsd-hierarchy-item"><span class="tsd-signature-type">TypeScriptProject</span>
@@ -14,11 +14,17 @@
14
14
  <pre><code class="bash"><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">add</span><span class="hl-1"> </span><span class="hl-3">-D</span><span class="hl-1"> </span><span class="hl-2">@nikovirtala/projen-constructs</span><span class="hl-1"> </span><span class="hl-2">projen</span><span class="hl-1"> </span><span class="hl-2">constructs</span>
15
15
  </code><button type="button">Copy</button></pre>
16
16
 
17
+ <p>Requires pnpm 11 and <code>projen</code> &gt;= 0.101.27. <code>@mrgrain/cdk-esbuild</code> and <code>constructs</code> are peer
18
+ dependencies as well.</p>
19
+ <p>To create a project from scratch:</p>
20
+ <pre><code class="bash"><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">dlx</span><span class="hl-1"> </span><span class="hl-2">projen</span><span class="hl-1"> </span><span class="hl-2">new</span><span class="hl-1"> </span><span class="hl-3">--from</span><span class="hl-1"> </span><span class="hl-2">@nikovirtala/projen-constructs</span><span class="hl-1"> </span><span class="hl-2">aws_cdk_construct_library</span>
21
+ </code><button type="button">Copy</button></pre>
22
+
17
23
  <h2 id="features" class="tsd-anchor-link">Features<a href="#features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2>
18
24
  <ul>
19
25
  <li><strong>Standard Configuration</strong>: Opinionated defaults for author, release branch, package manager, Node.js, TypeScript, and tooling</li>
20
- <li><strong>Automatic Project Type Discovery</strong>: Generates <code>ProjectType</code> enum from Projen's JSII manifest (18 project types)</li>
21
- <li><strong>Component System</strong>: Reusable components (Vitest, Mise, TypeDoc, LocalStack, etc.)</li>
26
+ <li><strong>Automatic Project Type Discovery</strong>: Generates the <code>ProjectType</code> enum from Projen's JSII manifest (19 project types)</li>
27
+ <li><strong>Component System</strong>: Reusable components (Vitest, TypeDoc, Mise, Homebrew, Colima, LocalStack, Lambda bundling)</li>
22
28
  <li><strong>Code Generation</strong>: <code>ProjectGenerator</code> creates project classes with standard configuration</li>
23
29
  <li><strong>ES Modules</strong>: TypeScript and CDK App projects use ES modules (JSII uses CommonJS)</li>
24
30
  <li><strong>Code Quality</strong>: Biome for formatting and linting</li>
@@ -31,17 +37,64 @@
31
37
  <ul>
32
38
  <li><strong>Author</strong>: Niko Virtala (<a href="mailto:niko.virtala@hey.com">niko.virtala@hey.com</a>)</li>
33
39
  <li><strong>Default Release Branch</strong>: main</li>
34
- <li><strong>Package Manager</strong>: pnpm 10</li>
35
- <li><strong>Node Version</strong>: 22.21.1</li>
36
- <li><strong>TypeScript</strong>: 5.9.3</li>
37
- <li><strong>CDK Version</strong>: 2.223.0 (for CDK projects)</li>
38
- <li><strong>JSII Version</strong>: ~5.9.3 (for JSII projects)</li>
40
+ <li><strong>Package Manager</strong>: pnpm 11.20.0</li>
41
+ <li><strong>Node Version</strong>: 24.19.0</li>
42
+ <li><strong>TypeScript</strong>: 6.0.3</li>
43
+ <li><strong>CDK Version</strong>: 2.263.0 (for CDK projects)</li>
44
+ <li><strong>JSII Version</strong>: ~6.0.3 (for JSII projects)</li>
45
+ </ul>
46
+ <p>The AWS CDK, Node.js and TypeScript versions live in <code>src/versions.json</code> and are refreshed by the
47
+ <code>update-versions</code> task, which the dependency upgrade workflow runs.</p>
48
+ <h3 id="pnpm" class="tsd-anchor-link">pnpm<a href="#pnpm" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3>
49
+ <p>pnpm reads its settings from <code>pnpm-workspace.yaml</code>, not <code>.npmrc</code>, since pnpm 11. Generated projects
50
+ get:</p>
51
+ <table>
52
+ <thead>
53
+ <tr>
54
+ <th>Setting</th>
55
+ <th>Value</th>
56
+ <th>Reason</th>
57
+ </tr>
58
+ </thead>
59
+ <tbody>
60
+ <tr>
61
+ <td><code>nodeLinker</code></td>
62
+ <td><code>hoisted</code></td>
63
+ <td>jsii tooling resolves dependencies from a flat <code>node_modules</code></td>
64
+ </tr>
65
+ <tr>
66
+ <td><code>allowBuilds</code></td>
67
+ <td><code>esbuild: true</code></td>
68
+ <td>esbuild links its platform binary in a postinstall script, and pnpm 11 fails an install with ignored builds</td>
69
+ </tr>
70
+ <tr>
71
+ <td><code>verifyDepsBeforeRun</code></td>
72
+ <td><code>false</code></td>
73
+ <td>projen resolves the task <code>PATH</code> with <code>$(pnpm -c exec ...)</code>, which otherwise re-enters <code>pnpm install</code> and deadlocks</td>
74
+ </tr>
75
+ <tr>
76
+ <td><code>minimumReleaseAge</code></td>
77
+ <td><code>0</code></td>
78
+ <td>the pnpm 11 default of 1440 minutes makes pnpm write <code>minimumReleaseAgeExclude</code> entries into this generated file</td>
79
+ </tr>
80
+ </tbody>
81
+ </table>
82
+ <h3 id="typescript-configuration" class="tsd-anchor-link">TypeScript configuration<a href="#typescript-configuration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3>
83
+ <p>Projen renders three configs, and none of them should be edited directly:</p>
84
+ <ul>
85
+ <li><code>tsconfig.json</code> compiles <code>src</code> to <code>lib</code>. For JSII projects, jsii validates it against its <code>strict</code>
86
+ rule set, so it only carries compiler options jsii accepts.</li>
87
+ <li><code>test/tsconfig.json</code> extends it and is type-check only. This is the config Vitest type checking and
88
+ the editor use, and the one <code>tsconfigDev</code> points at.</li>
89
+ <li><code>projenrc/tsconfig.json</code> covers <code>.projenrc.ts</code>.</li>
39
90
  </ul>
40
91
  <h2 id="customization" class="tsd-anchor-link">Customization<a href="#customization" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2>
41
92
  <p>Override any option by passing it to the constructor:</p>
42
- <pre><code class="typescript"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">project</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">JsiiProject</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&quot;my-project&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">repositoryUrl:</span><span class="hl-1"> </span><span class="hl-2">&quot;https://github.com/nikovirtala/my-project.git&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">minNodeVersion:</span><span class="hl-1"> </span><span class="hl-2">&quot;20.0.0&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">author:</span><span class="hl-1"> </span><span class="hl-2">&quot;Custom Author&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">authorAddress:</span><span class="hl-1"> </span><span class="hl-2">&quot;custom@example.com&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">mise:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">vitest:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">tsconfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">compilerOptions:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">noUnusedLocals:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">biomeOptions:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">biomeConfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">formatter:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-6">100</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
93
+ <pre><code class="typescript"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">project</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">JsiiProject</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&quot;my-project&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">repositoryUrl:</span><span class="hl-1"> </span><span class="hl-2">&quot;https://github.com/nikovirtala/my-project.git&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">minNodeVersion:</span><span class="hl-1"> </span><span class="hl-2">&quot;24.0.0&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">author:</span><span class="hl-1"> </span><span class="hl-2">&quot;Custom Author&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">authorAddress:</span><span class="hl-1"> </span><span class="hl-2">&quot;custom@example.com&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">mise:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">vitest:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">tsconfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">compilerOptions:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">noUnusedLocals:</span><span class="hl-1"> </span><span class="hl-3">false</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">biomeOptions:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">biomeConfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">formatter:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-6">100</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
43
94
  </code><button type="button">Copy</button></pre>
44
95
 
96
+ <p>Every component is exposed as an enable flag (<code>mise</code>, <code>vitest</code>, ...) plus an options property
97
+ (<code>miseOptions</code>, <code>vitestOptions</code>, ...).</p>
45
98
  <h2 id="usage" class="tsd-anchor-link">Usage<a href="#usage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2>
46
99
  <h3 id="projects" class="tsd-anchor-link">Projects<a href="#projects" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3>
47
100
  <h4 id="aws-cdk-construct-library-project" class="tsd-anchor-link">AWS CDK Construct Library Project<a href="#aws-cdk-construct-library-project" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4>
@@ -67,6 +120,8 @@
67
120
  <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">Vitest</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Vitest</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">vitestVersion:</span><span class="hl-1"> </span><span class="hl-2">&quot;^4&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">config:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">coverageProvider:</span><span class="hl-1"> </span><span class="hl-5">CoverageProvider</span><span class="hl-1">.</span><span class="hl-4">V8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">coverageReporters:</span><span class="hl-1"> [</span><span class="hl-5">CoverageReporter</span><span class="hl-1">.</span><span class="hl-4">TEXT</span><span class="hl-1">, </span><span class="hl-5">CoverageReporter</span><span class="hl-1">.</span><span class="hl-4">LCOV</span><span class="hl-1">],</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
68
121
  </code><button type="button">Copy</button></pre>
69
122
 
123
+ <p>Type checking runs against the project's development tsconfig (<code>test/tsconfig.json</code>) unless
124
+ <code>config.typecheckTsconfig</code> says otherwise.</p>
70
125
  <h4 id="typedoc" class="tsd-anchor-link">TypeDoc<a href="#typedoc" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4>
71
126
  <p><a href="https://typedoc.org">TypeDoc</a> documentation generation component.</p>
72
127
  <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">TypeDoc</span><span class="hl-1">, </span><span class="hl-5">EntryPointStrategy</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">TypeDoc</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">version:</span><span class="hl-1"> </span><span class="hl-2">&quot;^0.28&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">typeDocConfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">entryPointStrategy:</span><span class="hl-1"> </span><span class="hl-5">EntryPointStrategy</span><span class="hl-1">.</span><span class="hl-4">EXPAND</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">out:</span><span class="hl-1"> </span><span class="hl-2">&quot;docs/api&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">exclude:</span><span class="hl-1"> [</span><span class="hl-2">&quot;**/*.test.ts&quot;</span><span class="hl-1">],</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
@@ -74,11 +129,12 @@
74
129
 
75
130
  <h4 id="mise" class="tsd-anchor-link">Mise<a href="#mise" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4>
76
131
  <p><a href="https://mise.jdx.dev">Mise</a> dev tools/runtimes management component.</p>
77
- <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">Mise</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Mise</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">nodeVersion:</span><span class="hl-1"> </span><span class="hl-2">&quot;22.21.1&quot;</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
132
+ <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">Mise</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Mise</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">nodeVersion:</span><span class="hl-1"> </span><span class="hl-2">&quot;24.19.0&quot;</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
78
133
  </code><button type="button">Copy</button></pre>
79
134
 
80
135
  <h4 id="homebrew" class="tsd-anchor-link">Homebrew<a href="#homebrew" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4>
81
- <p><a href="https://brew.sh">Homebrew</a> package management component.</p>
136
+ <p><a href="https://brew.sh">Homebrew</a> package management component. Writes a <code>Brewfile</code> and adds an
137
+ <code>install:homebrew</code> task that bootstraps Homebrew and runs <code>brew bundle</code>.</p>
82
138
  <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">Homebrew</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">homebrew</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Homebrew</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">packages:</span><span class="hl-1"> [</span><span class="hl-2">&quot;jq&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;yq&quot;</span><span class="hl-1">],</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-5">homebrew</span><span class="hl-1">.</span><span class="hl-0">addPackage</span><span class="hl-1">(</span><span class="hl-2">&quot;gh&quot;</span><span class="hl-1">);</span>
83
139
  </code><button type="button">Copy</button></pre>
84
140
 
@@ -104,16 +160,92 @@
104
160
 
105
161
  <h4 id="projectgenerator" class="tsd-anchor-link">ProjectGenerator<a href="#projectgenerator" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4>
106
162
  <p>Generates TypeScript project classes with standard configuration.</p>
107
- <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">ProjectGenerator</span><span class="hl-1">, </span><span class="hl-5">ProjectType</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">ProjectGenerator</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&quot;TypeScriptProject&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">projectType:</span><span class="hl-1"> </span><span class="hl-5">ProjectType</span><span class="hl-1">.</span><span class="hl-4">TYPESCRIPT</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">filePath:</span><span class="hl-1"> </span><span class="hl-2">&quot;./src/projects/typescript.generated.ts&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">components:</span><span class="hl-1"> [</span><br/><span class="hl-1"> { </span><span class="hl-5">componentClass:</span><span class="hl-1"> </span><span class="hl-5">Mise</span><span class="hl-1"> },</span><br/><span class="hl-1"> { </span><span class="hl-5">componentClass:</span><span class="hl-1"> </span><span class="hl-5">Vitest</span><span class="hl-1"> }, </span><span class="hl-8">// Auto-detects VitestOptions from JSII manifest</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1">});</span>
163
+ <pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">ProjectGenerator</span><span class="hl-1">, </span><span class="hl-5">ProjectType</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">&quot;@nikovirtala/projen-constructs&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">ProjectGenerator</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&quot;TypeScriptProject&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">projectType:</span><span class="hl-1"> </span><span class="hl-5">ProjectType</span><span class="hl-1">.</span><span class="hl-4">TYPE_SCRIPT_PROJECT</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">filePath:</span><span class="hl-1"> </span><span class="hl-2">&quot;./src/projects/typescript.generated.ts&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">components:</span><span class="hl-1"> [</span><br/><span class="hl-1"> { </span><span class="hl-5">componentClass:</span><span class="hl-1"> </span><span class="hl-5">Mise</span><span class="hl-1"> },</span><br/><span class="hl-1"> { </span><span class="hl-5">componentClass:</span><span class="hl-1"> </span><span class="hl-5">Vitest</span><span class="hl-1"> }, </span><span class="hl-8">// Auto-detects VitestOptions from JSII manifest</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1">});</span>
108
164
  </code><button type="button">Copy</button></pre>
109
165
 
110
166
  <p>Features:</p>
111
167
  <ul>
112
168
  <li>Automatically generates the <code>ProjectType</code> enum from Projen's JSII manifest</li>
113
169
  <li>Auto-detects component options types from JSII manifests</li>
170
+ <li>Strips Projen's <code>@pjnew</code> annotation from <code>packageManager</code>, which <code>projen new</code> would otherwise
171
+ render into a generated <code>.projenrc.ts</code> as the package manager that ran the command</li>
114
172
  <li>Validates paths to prevent directory traversal attacks</li>
115
173
  <li>Structured error handling with custom error classes</li>
116
174
  </ul>
175
+ <h2 id="development" class="tsd-anchor-link">Development<a href="#development" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2>
176
+ <p>This project is managed by Projen and generates itself: <code>.projenrc.ts</code> defines the project using the
177
+ <code>JsiiProject</code> type from <code>src/</code>. Configuration changes belong in <code>.projenrc.ts</code>, never in the
178
+ generated files.</p>
179
+ <pre><code class="bash"><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">projen</span><span class="hl-1"> </span><span class="hl-8"># synthesize project files</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">build</span><span class="hl-1"> </span><span class="hl-8"># synthesize, compile, test and package</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">test</span><span class="hl-1"> </span><span class="hl-8"># biome, vitest, typedoc</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">test:watch</span><span class="hl-1"> </span><span class="hl-8"># vitest in watch mode</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">test:update</span><span class="hl-1"> </span><span class="hl-8"># update snapshots</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">biome</span><span class="hl-1"> </span><span class="hl-8"># format and lint</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">docgen</span><span class="hl-1"> </span><span class="hl-8"># regenerate API.md from the .jsii manifest</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">update-versions</span><span class="hl-1"> </span><span class="hl-8"># refresh src/versions.json</span><br/><span class="hl-0">pnpm</span><span class="hl-1"> </span><span class="hl-2">upgrade</span><span class="hl-1"> </span><span class="hl-8"># upgrade dependencies</span>
180
+ </code><button type="button">Copy</button></pre>
181
+
182
+ <h3 id="build-process" class="tsd-anchor-link">Build process<a href="#build-process" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3>
183
+ <pre><code class="mermaid">flowchart TD
184
+ projenrc[".projenrc.ts"]
185
+
186
+ subgraph synthesize["default (synthesize)"]
187
+ direction TB
188
+ synth["tsx .projenrc.ts"]
189
+ generator["ProjectGenerator"]
190
+ generated["src/project-type.ts<br/>src/projects/*.generated.ts<br/>src/projects/*-options.generated.ts"]
191
+ projenfiles["package.json, tsconfig.json,<br/>pnpm-workspace.yaml, workflows, ..."]
192
+ brew["install:homebrew<br/>brew bundle"]
193
+ definecfg["bundle-vitest-define-config<br/>esbuild → lib/vitest-define-config.js"]
194
+
195
+ synth --> generator --> generated
196
+ synth --> projenfiles
197
+ synth --> brew
198
+ synth --> definecfg
199
+ end
200
+
201
+ subgraph compile["compile"]
202
+ direction TB
203
+ jsii["jsii<br/>validates tsconfig.json against the strict rule set"]
204
+ lib["lib/**"]
205
+ manifest[".jsii manifest"]
206
+
207
+ jsii --> lib
208
+ jsii --> manifest
209
+ end
210
+
211
+ subgraph test["test"]
212
+ direction TB
213
+ biome["biome check --write"]
214
+ vitest["vitest run<br/>+ type checking"]
215
+ typedoc["typedoc → docs/api"]
216
+
217
+ biome --> vitest --> typedoc
218
+ end
219
+
220
+ subgraph package["package"]
221
+ direction TB
222
+ pacmak["jsii-pacmak<br/>--pack-command 'pnpm pack'"]
223
+ dist["dist/js/*.tgz"]
224
+
225
+ pacmak --> dist
226
+ end
227
+
228
+ projenrc --> synthesize
229
+ synthesize --> compile
230
+ compile --> test
231
+ test --> package
232
+
233
+ manifest -. "component options FQNs<br/>read on the next synthesis" .-> generator
234
+ docgen["docgen<br/>jsii-docgen → API.md"]
235
+ manifest --> docgen
236
+
237
+ classDef artifact fill:#eef,stroke:#88a
238
+ class generated,projenfiles,lib,manifest,dist artifact
239
+ </code><button type="button">Copy</button></pre>
240
+
241
+ <p>The dashed edge is the part worth knowing about: <code>ProjectGenerator</code> reads the committed <code>.jsii</code>
242
+ manifest to resolve component options types, so the manifest produced by <code>compile</code> feeds the <em>next</em>
243
+ synthesis. This is why <code>.jsii</code> is committed rather than ignored. A component options type that is
244
+ missing from the manifest is reported as a warning and its options property is left out of the
245
+ generated interface, which is expected only while a new component is being introduced: compile once,
246
+ then synthesize again.</p>
247
+ <p><code>package</code> runs <code>package:js</code> on CI and <code>package-all</code> locally; both end up in <code>jsii-pacmak</code>.
248
+ <code>docgen</code> is not part of <code>build</code> and has to be run explicitly after the manifest changes.</p>
117
249
  </div></div>
118
250
  <div class="col-sidebar">
119
251
  <div class="page-menu">
@@ -134,6 +266,10 @@
134
266
  <li><a href="#installation"><span>Installation</span></a></li>
135
267
  <li><a href="#features"><span>Features</span></a></li>
136
268
  <li><a href="#standard-configuration"><span>Standard <wbr/>Configuration</span></a></li>
269
+ <li>
270
+ <ul>
271
+ <li><a href="#pnpm"><span>pnpm</span></a></li>
272
+ <li><a href="#typescript-configuration"><span>Type<wbr/>Script configuration</span></a></li></ul></li>
137
273
  <li><a href="#customization"><span>Customization</span></a></li>
138
274
  <li><a href="#usage"><span>Usage</span></a></li>
139
275
  <li>
@@ -156,7 +292,11 @@
156
292
  <li><a href="#localstack"><span>Local<wbr/>Stack</span></a></li>
157
293
  <li><a href="#lambdafunctionconstructgenerator"><span>Lambda<wbr/>Function<wbr/>Construct<wbr/>Generator</span></a></li>
158
294
  <li><a href="#bundler"><span>Bundler</span></a></li>
159
- <li><a href="#projectgenerator"><span>Project<wbr/>Generator</span></a></li></ul></li></ul></li></ul></div></details></div>
295
+ <li><a href="#projectgenerator"><span>Project<wbr/>Generator</span></a></li></ul></li></ul></li>
296
+ <li><a href="#development"><span>Development</span></a></li>
297
+ <li>
298
+ <ul>
299
+ <li><a href="#build-process"><span>Build process</span></a></li></ul></li></ul></div></details></div>
160
300
  <div class="site-menu">
161
301
  <nav class="tsd-navigation"><a href="modules.html">@nikovirtala/projen-constructs</a>
162
302
  <ul class="tsd-small-nested-navigation" id="tsd-nav-container">
@@ -1740,15 +1740,12 @@ subprojects.</p>
1740
1740
  </div>
1741
1741
  <div class="tsd-comment tsd-typography">
1742
1742
  <div class="tsd-tag-default">
1743
- <h4 class="tsd-anchor-link" id="default-84">Default<a href="#default-84" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><ul>
1744
- <li>Detected from the calling process or <code>YARN_CLASSIC</code> if detection fails.</li>
1745
- </ul>
1743
+ <h4 class="tsd-anchor-link" id="default-84">Default<a href="#default-84" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">- </span><span class="hl-5">pnpm</span>
1744
+ </code><button type="button">Copy</button></pre>
1745
+
1746
1746
  </div>
1747
1747
  <div class="tsd-tag-stability">
1748
1748
  <h4 class="tsd-anchor-link" id="stability-101">Stability<a href="#stability-101" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>experimental</p>
1749
- </div>
1750
- <div class="tsd-tag-pjnew">
1751
- <h4 class="tsd-anchor-link" id="pjnew-1">Pjnew<a href="#pjnew-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>$PACKAGE_MANAGER</p>
1752
1749
  </div></div></section>
1753
1750
  <section class="tsd-panel tsd-member">
1754
1751
  <h3 class="tsd-anchor-link" id="packagename"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>package<wbr/>Name</span><a href="#packagename" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -1994,7 +1991,7 @@ Can be used to customize in special environments.</p>
1994
1991
  <h4 class="tsd-anchor-link" id="stability-118">Stability<a href="#stability-118" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>experimental</p>
1995
1992
  </div>
1996
1993
  <div class="tsd-tag-pjnew">
1997
- <h4 class="tsd-anchor-link" id="pjnew-2">Pjnew<a href="#pjnew-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>true</p>
1994
+ <h4 class="tsd-anchor-link" id="pjnew-1">Pjnew<a href="#pjnew-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>true</p>
1998
1995
  </div></div></section>
1999
1996
  <section class="tsd-panel tsd-member">
2000
1997
  <h3 class="tsd-anchor-link" id="projenrctsoptions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>projenrc<wbr/>Ts<wbr/>Options</span><a href="#projenrctsoptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -1675,15 +1675,12 @@ subprojects.</p>
1675
1675
  </div>
1676
1676
  <div class="tsd-comment tsd-typography">
1677
1677
  <div class="tsd-tag-default">
1678
- <h4 class="tsd-anchor-link" id="default-81">Default<a href="#default-81" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><ul>
1679
- <li>Detected from the calling process or <code>YARN_CLASSIC</code> if detection fails.</li>
1680
- </ul>
1678
+ <h4 class="tsd-anchor-link" id="default-81">Default<a href="#default-81" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">- </span><span class="hl-5">pnpm</span>
1679
+ </code><button type="button">Copy</button></pre>
1680
+
1681
1681
  </div>
1682
1682
  <div class="tsd-tag-stability">
1683
1683
  <h4 class="tsd-anchor-link" id="stability-98">Stability<a href="#stability-98" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>experimental</p>
1684
- </div>
1685
- <div class="tsd-tag-pjnew">
1686
- <h4 class="tsd-anchor-link" id="pjnew">Pjnew<a href="#pjnew" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>$PACKAGE_MANAGER</p>
1687
1684
  </div></div></section>
1688
1685
  <section class="tsd-panel tsd-member">
1689
1686
  <h3 class="tsd-anchor-link" id="packagename"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>package<wbr/>Name</span><a href="#packagename" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -1929,7 +1926,7 @@ Can be used to customize in special environments.</p>
1929
1926
  <h4 class="tsd-anchor-link" id="stability-115">Stability<a href="#stability-115" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>experimental</p>
1930
1927
  </div>
1931
1928
  <div class="tsd-tag-pjnew">
1932
- <h4 class="tsd-anchor-link" id="pjnew-1">Pjnew<a href="#pjnew-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>true</p>
1929
+ <h4 class="tsd-anchor-link" id="pjnew">Pjnew<a href="#pjnew" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p>true</p>
1933
1930
  </div></div></section>
1934
1931
  <section class="tsd-panel tsd-member">
1935
1932
  <h3 class="tsd-anchor-link" id="projenrctsoptions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>projenrc<wbr/>Ts<wbr/>Options</span><a href="#projenrctsoptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>