@dbx-tools/projen 0.9.129 → 0.9.132

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 (3) hide show
  1. package/README.md +143 -89
  2. package/index.ts +1 -1
  3. package/package.json +5 -5
package/README.md CHANGED
@@ -1,11 +1,10 @@
1
1
  # @dbx-tools/projen
2
2
 
3
- Projen engine for Bun-first dbx-tools workspaces.
3
+ Use this Projen engine from `.projenrc.ts` to discover packages and generate
4
+ manifests, tsconfigs, barrels, schemas, and release tasks for Bun-first
5
+ dbx-tools workspaces.
4
6
 
5
- Use it from `.projenrc.ts` to discover packages from the filesystem and generate
6
- manifests, tsconfigs, barrels, code generation, and release tasks.
7
-
8
- ## Define A Workspace Root
7
+ ## Define a workspace root
9
8
 
10
9
  ```ts
11
10
  import { project } from "@dbx-tools/projen";
@@ -49,7 +48,7 @@ Repository policy stays in the consuming `.projenrc.ts`:
49
48
  - `releaseDocs` supplies repository-defined preparation and build steps plus
50
49
  the Pages artifact path. The engine adds release checkout, artifact upload,
51
50
  and deployment without naming a docs script or output tree.
52
- - `releasePythonRoot` passes the actual Python package root to local release
51
+ - `releasePythonRoot` passes the configured Python package root to local release
53
52
  preparation. Omit it when the workspace has no standard Python packages.
54
53
  - `releaseValidationTasks` names repository tasks that must pass in tag CI
55
54
  before release artifacts are built and published.
@@ -71,7 +70,7 @@ The engine treats generated barrels, tests, declaration files, and folders
71
70
  without exported source modules as implementation details. They do not create
72
71
  new package membership.
73
72
 
74
- ## Add A Python uv Workspace
73
+ ## Add a Python uv workspace
75
74
 
76
75
  `DBXToolsPythonWorkspace` attaches Python packaging to an existing projen root
77
76
  without turning Python packages into JavaScript workspace projects. It generates
@@ -108,11 +107,11 @@ Distribution names and modules come from the parent scope plus each package
108
107
  directory. The repository comes from the parent project metadata or Git remote.
109
108
  `internalDependencies` renders standalone Git `#subdirectory=` requirements
110
109
  without repeating repository coordinates. Pass `repository`, `name`, or
111
- `module` only to override those conventions. `root.vscode` is projen's existing
112
- VS Code component; dbx-tools reuses it rather than constructing a second
110
+ `module` only to override those conventions. `root.vscode` is Projen's existing
111
+ VS Code component. dbx-tools reuses it rather than constructing a second
113
112
  `.vscode/settings.json` owner.
114
113
 
115
- ### Bundle Node Code For PythonMonkey
114
+ ### Bundle Node code for PythonMonkey
116
115
 
117
116
  Add `nodeBindings` to any `DBXToolsPythonWorkspace` package to generate
118
117
  committed CommonJS runtimes and Python wrappers from public Node packages. Pass
@@ -122,7 +121,11 @@ one binding object or an array. Projen writes one
122
121
  in consuming repositories after `@dbx-tools/projen` is installed.
123
122
 
124
123
  ```ts
125
- new project.DBXToolsPythonWorkspace(root, {
124
+ import { project, projectPy } from "@dbx-tools/projen";
125
+
126
+ const root = new project.DBXToolsNodeProject({ name: "my-apps" });
127
+
128
+ new projectPy.DBXToolsPythonWorkspace(root, {
126
129
  root: "packages/py",
127
130
  packages: [
128
131
  {
@@ -152,7 +155,7 @@ new project.DBXToolsPythonWorkspace(root, {
152
155
 
153
156
  Bindings always live under
154
157
  `<python-module>/_generated/node/`. Each Python package receives one shared
155
- `_runtime.js`; typed wrappers live under `<node-package>/<module>.py`. This
158
+ `_runtime.js`. Typed wrappers live under `<node-package>/<module>.py`. This
156
159
  preserves Node module singleton identity across all bindings in the Python
157
160
  process. The intermediate directories remain implicit namespace packages with
158
161
  no generated `__init__.py`. Omit `modules` to discover every exported package
@@ -216,31 +219,42 @@ created. Full synthesis regenerates every binding and reconciles stale
216
219
  Built-in shims can make ordinary Node imports work under PythonMonkey.
217
220
  `functionOverrides` replaces named exports only in the generated runtime, so the
218
221
  Node package does not gain Python callbacks or alternate source files. A
219
- replacement may use a different export name through `handlerExport`; every
222
+ replacement may use a different export name through `handlerExport`. Every
220
223
  other export continues to come from the original module.
221
224
 
222
- ### Synchronize Pinned Python Sources
225
+ ### Synchronize pinned Python sources
223
226
 
224
227
  Use a package's `sync` field when published Python code must include a reviewed
225
228
  subset of a Git repository instead of exposing a direct URL dependency:
226
229
 
227
230
  ```ts
228
- {
229
- directory: "service",
230
- description: "Python service with synchronized upstream code",
231
- sync: [
231
+ import { project, projectPy } from "@dbx-tools/projen";
232
+
233
+ const root = new project.DBXToolsNodeProject({ name: "my-apps" });
234
+
235
+ new projectPy.DBXToolsPythonWorkspace(root, {
236
+ root: "packages/py",
237
+ packages: [
232
238
  {
233
- name: "upstream_driver",
234
- source:
235
- "driver @ git+https://github.com/example/project.git@0123456789abcdef0123456789abcdef01234567#subdirectory=src/driver",
236
- include: ["driver.py", "operations/**/*.py"],
237
- exclude: ["**/test_*.py"],
238
- replace: {
239
- "DEFAULT_TIMEOUT = 30": "DEFAULT_TIMEOUT = 120",
240
- },
239
+ directory: "service",
240
+ description: "Python service with synchronized upstream code",
241
+ sync: [
242
+ {
243
+ name: "upstream_driver",
244
+ source:
245
+ "driver @ git+https://github.com/example/project.git@0123456789abcdef0123456789abcdef01234567#subdirectory=src/driver",
246
+ include: ["driver.py", "operations/**/*.py"],
247
+ exclude: ["**/test_*.py"],
248
+ replace: {
249
+ "DEFAULT_TIMEOUT = 30": "DEFAULT_TIMEOUT = 120",
250
+ },
251
+ },
252
+ ],
241
253
  },
242
254
  ],
243
- }
255
+ });
256
+
257
+ root.synth();
244
258
  ```
245
259
 
246
260
  Each source is written beneath
@@ -263,9 +277,9 @@ Synchronization uses a check-lock-check sequence and an atomic directory
263
277
  replacement. A current pinned commit performs no network request. Branches and
264
278
  tags use `git ls-remote` to detect upstream movement. Run the generated
265
279
  `<package>:python-sync:check` task in validation, or pass `--force` to refresh a
266
- current source intentionally.
280
+ pinned source intentionally.
267
281
 
268
- ## Customize Packages With Mixins
282
+ ## Customize packages with mixins
269
283
 
270
284
  ```ts
271
285
  import { project } from "@dbx-tools/projen";
@@ -283,9 +297,10 @@ Use `projectJs.addOptionalPeer(pkg, specifier)` for an optional peer that must
283
297
  also resolve during local development. It writes the peer metadata and matching
284
298
  development dependency without turning the peer into a runtime dependency.
285
299
 
286
- `applyToProjects` AND-s its globs (prefix a glob with `!` to negate) into one
287
- predicate over the DBXTools child packages, then applies it as a `constructs`
288
- mixin across the subtree. Filter on the folder (`path`), the tags (`tags`), or
300
+ `applyToProjects` combines its globs with AND logic. Prefix a glob with `!` to
301
+ negate it. The resulting predicate selects DBXTools child packages and applies
302
+ the callback as a `constructs` mixin across the subtree. Filter on the folder
303
+ (`path`), the tags (`tags`), or
289
304
  the name from whichever angle fits: `name` matches the raw projen name verbatim,
290
305
  while `identifierPackageName`, `identifierScope`, and `identifierName` match the
291
306
  parsed `@scope/name`, its scope, and its unscoped half. Two flags widen the
@@ -300,33 +315,34 @@ scripts, and generated files on top.
300
315
 
301
316
  Every workspace root exposes a generic development watcher:
302
317
 
303
- ```sh
318
+ ```bash
304
319
  bun run dev:watch [--debounce-ms 15000] [--restart-key r] <command> [args...]
305
320
  ```
306
321
 
307
322
  It restarts after watched writes have been quiet for 15 seconds. Command paths,
308
- `--cwd`, and `--filter` identify the owning package; its transitive workspace
323
+ `--cwd`, and `--filter` identify the owning package. Its transitive workspace
309
324
  dependencies are watched with the shared generated/dependency/test/temp ignores.
310
325
  Press the configured key for an immediate restart. The demo uses this task to
311
- run its concrete server entrypoint; the `server` tag does not assume one.
326
+ run its concrete server entrypoint. The `server` tag does not assume one.
312
327
 
313
328
  AppKit 0.81's `appkitServerConfig()` is the preferred tsdown preset for a
314
329
  consumer app using conventional compiled `server/agents/*/agent.ts` entries. It
315
330
  does not replace this engine's package discovery, Bun browser build, source-run
316
331
  server, publication, or Databricks deployment staging.
317
332
 
318
- A tag layers over a shared compiler floor every package gets at construction:
319
- ES2022 plus the web-platform globals available in every runtime, and deliberately
320
- no DOM lib and no Node types, so agnostic code stays isomorphic. The tags are what
321
- add an environment on top - `node` adds Node types, `ui` adds the DOM lib. That
322
- floor is also where `jsx` lives, for a reason worth knowing before moving it:
323
- packages resolve each other to SOURCE, so a consumer type-checks its dependency's
324
- files under its own tsconfig. The moment any package re-exports a `.tsx` module,
325
- every package that imports it - however far down the graph, whatever its tag -
326
- fails with `TS6142: ... but '--jsx' is not set`. Setting `jsx` per consumer is the
327
- wrong fix, since the consumer authors no JSX and cannot know a transitive
328
- dependency started to. The option is inert without JSX in the graph: it selects
329
- how JSX syntax compiles and adds no lib, global, or type dependency.
333
+ A tag layers over a shared compiler floor that every package receives at
334
+ construction: ES2022 plus the web-platform globals available in every runtime,
335
+ with no DOM library and no Node types. The tags add an environment on top.
336
+ `node` adds Node types, and `ui` adds the DOM library. The shared floor also
337
+ sets `jsx`.
338
+
339
+ Packages resolve each other to source, so a consumer type-checks its
340
+ dependency's files under its own tsconfig. If any package re-exports a `.tsx`
341
+ module, every transitive importer fails with
342
+ `TS6142: ... but '--jsx' is not set`. The consumer doesn't author that JSX and
343
+ can't track when a dependency starts exporting it, so the compiler floor owns
344
+ the setting. The option is inert without JSX in the graph. It selects how JSX
345
+ syntax compiles without adding a library, global, or type dependency.
330
346
 
331
347
  Keep the generated tsconfigs package-local. Each package build config owns its
332
348
  `rootDir`, declaration output, package-specific globals, and publish boundary.
@@ -344,7 +360,7 @@ installation runs only when the generated root manifest changes or
344
360
  `node_modules` is absent. Repository discovery is process-cached so every child
345
361
  package reuses the root probe instead of invoking `git`, `ssh`, and `gh` again.
346
362
 
347
- ## Work With Package Discovery
363
+ ## Work with package discovery
348
364
 
349
365
  ```ts
350
366
  import { packages } from "@dbx-tools/projen";
@@ -358,7 +374,7 @@ the generated `pnpm-workspace.yaml` plus package manifests for post-synth tools.
358
374
  Use the latter for docs, linting, and release checks that should match the
359
375
  recorded workspace.
360
376
 
361
- ## Generate Barrels And Codegen
377
+ ## Generate barrels and code generation
362
378
 
363
379
  ```ts
364
380
  import { barrels, codegen } from "@dbx-tools/projen";
@@ -370,13 +386,19 @@ barrels.generateBarrels();
370
386
  Add declaration inputs through the owning package's typed config:
371
387
 
372
388
  ```ts
373
- pkg.dbxToolsConfig.codegenInputs.push("node_modules/example/model.d.ts");
389
+ import { project } from "@dbx-tools/projen";
390
+
391
+ const rootProject = new project.DBXToolsNodeProject({ name: "my-apps" });
392
+ project.applyToProjects(rootProject, { path: "packages/shared/generated" }, (pkg) => {
393
+ pkg.dbxToolsConfig.codegenInputs.push("node_modules/example/model.d.ts");
394
+ });
395
+ rootProject.synth();
374
396
  ```
375
397
 
376
398
  `generateCodegen()` reads the serialized `dbxToolsConfig.codegenInputs` and
377
399
  writes generated schema modules. They are written read-only, and the root
378
400
  ESLint task runs with an explicit separate fix task, so each generated module is
379
- added to `ignorePatterns` at synth - named individually via
401
+ added to `ignorePatterns` at synth - named individually using
380
402
  `codegen.codegenModulePaths()`, never as a blanket `<package>/src/**`. A codegen
381
403
  package may hold hand-written modules beside its generated ones, and those must
382
404
  stay linted.
@@ -389,56 +411,88 @@ source directories. For example, `src/example/one.ts` becomes importable through
389
411
  generated surface at the package root or any nested level. Existing hand-written
390
412
  `index.ts` entrypoints remain authoritative.
391
413
 
392
- Generated barrels include module namespaces and flat unique type/value exports;
393
- the package root additionally exposes `PACKAGE_IDENTIFIER`. A name two modules
414
+ Generated barrels include module namespaces and flat unique type/value exports.
415
+ The package root additionally exposes `PACKAGE_IDENTIFIER`. A name two modules
394
416
  both declare is ambiguous and stays namespace-only, except when one is generated:
395
417
  the hand-written module is the curated view of the generated shape
396
418
  (`shared-genie`'s `genie-model.ts` extends its own codegen'd `dashboards.ts`), so
397
419
  it owns the name and stays hoisted. An unchanged barrel remains untouched,
398
420
  including its read-only bit, so concurrent writers do not collide. Every package
399
- is attempted even if one fails; failures are re-thrown together as an
421
+ is attempted even if one fails. Failures are re-thrown together as an
400
422
  `AggregateError` naming each package.
401
423
 
402
- ## Configure pnpm Catalogs
424
+ ## Configure pnpm catalogs
403
425
 
404
426
  ```ts
405
- project.pnpmWorkspace?.addCatalog("react", "^19");
406
- project.pnpmWorkspace?.allowBuild("esbuild");
427
+ import { project } from "@dbx-tools/projen";
428
+
429
+ const rootProject = new project.DBXToolsNodeProject({ name: "my-apps" });
430
+ rootProject.pnpmWorkspace?.addCatalog("react", "^19");
431
+ rootProject.pnpmWorkspace?.allowBuild("esbuild");
407
432
  ```
408
433
 
409
- projen's native `javascript.PnpmWorkspaceYaml` writes `pnpm-workspace.yaml`;
434
+ Projen's native `javascript.PnpmWorkspaceYaml` writes `pnpm-workspace.yaml`.
410
435
  `pnpmWorkspace.PnpmWorkspaceState` supplies the options it renders and tracks
411
436
  package members, catalog entries, and build-script allowances. Any other pnpm
412
437
  setting goes through the root's `workspaceYaml` option, which is projen's typed
413
438
  `PnpmWorkspaceYamlOptions`:
414
439
 
415
440
  ```ts
416
- new DBXToolsNodeProject({ workspaceYaml: { overrides: { glob: "^13.0.0" } } });
441
+ import { project } from "@dbx-tools/projen";
442
+
443
+ const rootProject = new project.DBXToolsNodeProject({
444
+ name: "my-apps",
445
+ pnpmOptions: {
446
+ workspaceYamlOptions: {
447
+ overrides: { glob: "^13.0.0" },
448
+ },
449
+ },
450
+ });
451
+ rootProject.synth();
417
452
  ```
418
453
 
419
454
  `allowBuild` writes pnpm's `allowBuilds` map rather than projen's own
420
455
  `allowScripts` option, which for pnpm renders `onlyBuiltDependencies` - a key
421
- current pnpm does not read, so the list would leave every build script skipped.
422
- Only allowances are declared; a dependency that is never allowed needs no entry,
456
+ pnpm does not read, so the list would leave every build script skipped.
457
+ Only allowances are declared. A dependency that is never allowed needs no entry
423
458
  because pnpm warns and moves on.
424
459
 
425
- The engine also applies `catalogMode: manual` (keeps `pnpm add` out of the
426
- generated catalog) and `verifyDepsBeforeRun: warn`. The file is emitted for the
427
- tree ROOT only; a member package never gets a nested one.
460
+ The engine also applies `catalogMode: manual`, which keeps `pnpm add` out of the
461
+ generated catalog, and `verifyDepsBeforeRun: warn`. The file is emitted for the
462
+ tree root only. A member package never gets a nested one.
428
463
 
429
- ## Clean And Watch Generated Files
464
+ ## Clean and watch generated files
430
465
 
431
466
  ```ts
432
467
  import { clean, watch } from "@dbx-tools/projen";
433
468
 
434
- const generated = clean.listGeneratedFiles();
435
- watch.watchLoop("workspace", watch.watchRoots(), async (files) => refresh(files));
469
+ const generated = await clean.listGeneratedFiles();
470
+ const roots = watch.watchRoots();
436
471
  ```
437
472
 
438
473
  Use these modules for maintenance tasks that should follow the same generated
439
- file contract as the CLI.
440
-
441
- ## Modules
474
+ file contract as the CLI. `watch.watchLoop()` accepts these roots and an
475
+ application-specific callback.
476
+
477
+ ## Understand generation limits
478
+
479
+ - Change `.projenrc.ts` or another owning configuration source, then run
480
+ `bun run sync` from the workspace root. Don't hand-edit generated files.
481
+ - Synthesis is a whole-tree operation. Don't run `bunx projen` or
482
+ `projen default` from a member package.
483
+ - `packageRoots` discovery creates a package for each source-bearing directory.
484
+ Generated folders, tests, and declaration-only folders don't create members.
485
+ - A single workspace version comes from `VERSION`. JavaScript and Python
486
+ manifests reproduce it during synthesis.
487
+ - Python Node bindings support public functions and representable TypeScript
488
+ types. Generation fails with a property path when a type can't be converted
489
+ safely.
490
+ - Source synchronization requires a pinned Git source for reproducible
491
+ publication. Branches and tags require a network lookup to detect movement.
492
+ - Release commands commit and push changes, tags, and selected publication
493
+ artifacts. Review release options before you run `bun run release`.
494
+
495
+ ## Use package modules
442
496
 
443
497
  - `project` - `DBXToolsNodeProject`, `DBXToolsTypeScriptProject`, package naming,
444
498
  compiler/task helpers.
@@ -455,17 +509,17 @@ file contract as the CLI.
455
509
  - `publish` - packaging and tag-based release helpers.
456
510
  - `engineRoot` - engine package root resolution for bootstrapped repos.
457
511
 
458
- The engine registers its commands as projen tasks on the workspace root, so run
459
- them with `bun run <task>` - `sync` (add `--watch`), `barrels`, `clean`, and the
512
+ The engine registers its commands as Projen tasks on the workspace root, so run
513
+ them with `bun run <task>`, including `sync` (add `--watch`), `barrels`, `clean`, and the
460
514
  configured `python-node-bindings:*` and `python-node-runtime:*` lifecycles.
461
- [`@dbx-tools/cli`](../packages/js/cli/dbx-tools) is only needed to
515
+ [@dbx-tools/cli](../packages/js/cli/dbx-tools/README.md) is only needed to
462
516
  bootstrap a folder that has no `.projenrc.ts` or toolchain yet.
463
517
 
464
- ## Run Tasks From The ROOT
518
+ ## Run tasks from the root
465
519
 
466
520
  Every repo-wide task lives on the root. `compile` batches package tsconfigs in
467
521
  up to four `tsc --build` processes and runs package-owned compile lifecycles
468
- alongside them; `test` delegates with `bun run --filter '*'`. Both read the
522
+ alongside them. `test` delegates with `bun run --filter '*'`. Both read the
469
523
  current workspace list, so a new package is covered without a re-synth. Work
470
524
  from the root:
471
525
 
@@ -482,14 +536,14 @@ from the root:
482
536
 
483
537
  Run `bun run release` from any branch. Pending changes are committed and
484
538
  the current branch is pushed first. A non-`main` branch then fast-forwards
485
- `main`; the command fails without creating a merge commit if either branch has
539
+ `main`. The command fails without creating a merge commit if either branch has
486
540
  diverged. From `main`, it calls the existing `bump` task, commits the generated
487
541
  version changes, pushes `main`, and pushes the matching annotated `vX.Y.Z` tag.
488
542
  Pass `--no-bump` only to release an existing synchronized local bump. The tag
489
543
  workflow verifies that the tag points at the exact `origin/main` commit. One
490
544
  `build-release` job installs workspace dependencies, runs validation, packs the
491
545
  npm archives, builds all Python distributions, and builds the documentation
492
- site. Install validation prerequisites through `releaseSetupSteps`;
546
+ site. Install validation prerequisites through `releaseSetupSteps`.
493
547
  `releaseDocs.prepareSteps` runs after validation.
494
548
 
495
549
  Publication jobs download the resulting artifacts rather than rebuilding the
@@ -503,12 +557,12 @@ The default release still publishes npm, Python, and docs, then publishes to
503
557
  configured local registries automatically. Select a scope or disable individual
504
558
  steps for one run without changing the Projen definition:
505
559
 
506
- ```sh
560
+ ```bash
507
561
  bun run release --publish pypi --no-docs
508
562
  bun run release --no-npm --no-local-publish
509
563
  bun run release --publish local --install never
510
564
  bun run release --local-registry false --local-pypi auto
511
- bun run release --demo-deploy --profile FEVM-REGGIE-PIERCE-AWS
565
+ bun run release --demo-deploy --profile <profile>
512
566
  bun run release --no-release-notes
513
567
  bun run release --release-notes-text "# Release 1.2.3"
514
568
  bun run release --release-notes-file ./notes.md
@@ -541,11 +595,11 @@ Genie prompt. Notes are committed with the version bump and are not recorded in
541
595
  the annotated tag. They are skipped on `--no-bump` because that path requires an
542
596
  already committed tree.
543
597
 
544
- `--install auto` keeps Projen's normal local dependency-install behavior;
598
+ `--install auto` keeps Projen's normal local dependency-install behavior.
545
599
  `always` performs a manifest-resolved install first, and `never` uses dependencies already
546
600
  installed while still regenerating versioned sources. Local release validation
547
601
  runs `eslint:fix` before branch preparation and bump, then runs the selected
548
- fail-closed tasks; CI remains check-only.
602
+ fail-closed tasks. CI remains check-only.
549
603
  CI rebuilds the selected release artifacts instead of checking generated-source fingerprints.
550
604
  `--no-validation` skips optional task checks locally and in CI, not workspace-version or immutable-source checks.
551
605
  `--no-docs` skips building and deploying the site, not package README validation.
@@ -553,12 +607,12 @@ Scopes select artifacts, not the normal commit and tag-push transaction.
553
607
  The annotated tag records CI step selections, so publishing a selected scope does
554
608
  not change the next release's defaults. Local registry URLs stay local.
555
609
 
556
- Members intentionally keep only the tasks that something OTHER than a human
557
- invokes, so there is no second place to run the same thing:
610
+ Members keep only tasks that repository automation invokes, so there is no
611
+ second place for a contributor to run the same operation:
558
612
 
559
613
  - `compile` / `test` - what the root's `--filter '*'` delegation calls.
560
614
  - `prepack` - standalone-publish safety that compiles one package before packing
561
- when that package has a compiled publication surface; the workspace release
615
+ when that package has a compiled publication surface. The workspace release
562
616
  driver compiles from the root and publishes with lifecycle scripts disabled.
563
617
  - `watch` - a single-package `tsc --build -w`, for narrowing a long
564
618
  edit/compile loop to one package.
@@ -566,18 +620,18 @@ invokes, so there is no second place to run the same thing:
566
620
  one package. Release preparation validates through the root's filtered tasks,
567
621
  and publication uploads archives that were each packed and
568
622
  validated once with lifecycle scripts disabled. The package phase also packs
569
- with `--ignore-scripts` because its build already compiled; `prepack` remains
623
+ with `--ignore-scripts` because its build already compiled. `prepack` remains
570
624
  available for a standalone publish that did not run `build` first.
571
625
  - `install` / `install:ci` / `default` / `pre-compile` / `post-compile` -
572
626
  projen's lifecycle scaffolding, emitted for every member because its task model
573
627
  expects them.
574
628
 
575
- Do NOT run `projen default` (or `bunx projen`) from inside a member. Synth is a
576
- whole-tree operation driven by the ROOT `.projenrc.ts`, so a member-level run
629
+ Don't run `projen default` or `bunx projen` from inside a member. Synthesis is a
630
+ whole-tree operation driven by the root `.projenrc.ts`, so a member-level run
577
631
  re-synths the entire workspace from the member's directory. Run `bun run sync`
578
632
  from the root instead.
579
633
 
580
- ## Versioning
634
+ ## Manage workspace versions
581
635
 
582
636
  `VERSION` is the language-neutral version seam. Real package manifests remain
583
637
  Projen-owned and reproduce it exactly across JavaScript and Python packages.
@@ -586,7 +640,7 @@ workflow order without introducing another version owner.
586
640
 
587
641
  <!-- cli-reference:start -->
588
642
 
589
- ## Command Reference
643
+ ## Command reference
590
644
 
591
645
  ### `release`
592
646
 
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/projen";
6
- export const PACKAGE_VERSION = "0.9.129";
6
+ export const PACKAGE_VERSION = "0.9.132";
7
7
  export * as barrels from "./src/barrels.ts";
8
8
  export * as bunApp from "./src/bun-app.ts";
9
9
  export * as bunWorkflow from "./src/bun-workflow.ts";
package/package.json CHANGED
@@ -30,10 +30,10 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@clack/prompts": "^1.7.0",
33
- "@dbx-tools/cli-args": "^0.9.129",
34
- "@dbx-tools/core": "^0.9.129",
35
- "@dbx-tools/path": "^0.9.129",
36
- "@dbx-tools/shared-core": "^0.9.129",
33
+ "@dbx-tools/cli-args": "^0.9.132",
34
+ "@dbx-tools/core": "^0.9.132",
35
+ "@dbx-tools/path": "^0.9.132",
36
+ "@dbx-tools/shared-core": "^0.9.132",
37
37
  "commander": "^15.0.0",
38
38
  "concurrently": "^10.0.3",
39
39
  "constructs": "^10.6.0",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "main": "index.ts",
57
57
  "license": "Apache-2.0",
58
- "version": "0.9.129",
58
+ "version": "0.9.132",
59
59
  "types": "index.ts",
60
60
  "type": "module",
61
61
  "exports": {