@smoothbricks/cli 0.10.3 → 0.10.4

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 (111) hide show
  1. package/README.md +9 -13
  2. package/dist/bun/preload.d.ts +13 -0
  3. package/dist/bun/preload.d.ts.map +1 -0
  4. package/dist/bun/preload.js +12 -0
  5. package/dist/cli.js +12 -4
  6. package/dist/generate/index.d.ts.map +1 -1
  7. package/dist/generate/index.js +0 -6
  8. package/dist/github-ci/index.d.ts.map +1 -1
  9. package/dist/github-ci/index.js +52 -16
  10. package/dist/github-ci/outputs.d.ts.map +1 -1
  11. package/dist/github-ci/outputs.js +1 -2
  12. package/dist/lib/cli-package.js +2 -2
  13. package/dist/lib/json.d.ts +118 -11
  14. package/dist/lib/json.d.ts.map +1 -1
  15. package/dist/lib/json.js +317 -29
  16. package/dist/lib/workspace.d.ts +7 -14
  17. package/dist/lib/workspace.d.ts.map +1 -1
  18. package/dist/lib/workspace.js +76 -82
  19. package/dist/monorepo/ci-workflow.d.ts +2 -0
  20. package/dist/monorepo/ci-workflow.d.ts.map +1 -1
  21. package/dist/monorepo/ci-workflow.js +27 -1
  22. package/dist/monorepo/git-config.js +2 -2
  23. package/dist/monorepo/index.d.ts +3 -1
  24. package/dist/monorepo/index.d.ts.map +1 -1
  25. package/dist/monorepo/index.js +6 -2
  26. package/dist/monorepo/lockfile.d.ts +13 -1
  27. package/dist/monorepo/lockfile.d.ts.map +1 -1
  28. package/dist/monorepo/lockfile.js +33 -21
  29. package/dist/monorepo/managed-files.d.ts +11 -0
  30. package/dist/monorepo/managed-files.d.ts.map +1 -1
  31. package/dist/monorepo/managed-files.js +52 -32
  32. package/dist/monorepo/package-policy.d.ts.map +1 -1
  33. package/dist/monorepo/package-policy.js +52 -45
  34. package/dist/monorepo/packed-manifest.d.ts +5 -2
  35. package/dist/monorepo/packed-manifest.d.ts.map +1 -1
  36. package/dist/monorepo/packed-manifest.js +16 -47
  37. package/dist/monorepo/packed-package.d.ts.map +1 -1
  38. package/dist/monorepo/packed-package.js +28 -16
  39. package/dist/monorepo/packs/index.d.ts.map +1 -1
  40. package/dist/monorepo/packs/index.js +13 -4
  41. package/dist/monorepo/publish-workflow.js +3 -1
  42. package/dist/monorepo/runtime.d.ts +15 -0
  43. package/dist/monorepo/runtime.d.ts.map +1 -1
  44. package/dist/monorepo/runtime.js +66 -12
  45. package/dist/monorepo/tool-validation.d.ts.map +1 -1
  46. package/dist/monorepo/tool-validation.js +32 -23
  47. package/dist/monorepo/wrangler.d.ts.map +1 -1
  48. package/dist/monorepo/wrangler.js +13 -13
  49. package/dist/nx/index.d.ts +9 -7
  50. package/dist/nx/index.d.ts.map +1 -1
  51. package/dist/nx/index.js +48 -31
  52. package/dist/pr/index.d.ts.map +1 -1
  53. package/dist/pr/index.js +28 -32
  54. package/dist/release/candidates.d.ts +3 -2
  55. package/dist/release/candidates.d.ts.map +1 -1
  56. package/dist/release/candidates.js +4 -5
  57. package/dist/release/index.d.ts +1 -0
  58. package/dist/release/index.d.ts.map +1 -1
  59. package/dist/release/index.js +82 -59
  60. package/dist/wrangler/prepare-env.d.ts +0 -1
  61. package/dist/wrangler/prepare-env.d.ts.map +1 -1
  62. package/dist/wrangler/prepare-env.js +100 -51
  63. package/dist/wrangler/scaffold.d.ts.map +1 -1
  64. package/dist/wrangler/scaffold.js +12 -12
  65. package/managed/raw/git-format-staged.yml +19 -1
  66. package/managed/raw/tooling/direnv/github-actions-bootstrap.sh +2 -1
  67. package/managed/raw/tooling/direnv/merge-newer-pins.sh +3 -3
  68. package/managed/raw/tooling/direnv/setup-environment.ts +150 -19
  69. package/managed/raw/tooling/git-hooks/pre-commit.sh +0 -6
  70. package/managed/templates/github/actions/cache-node-modules/action.yml +5 -2
  71. package/managed/templates/github/actions/cache-ttsc-plugins/action.yml +19 -0
  72. package/managed/templates/github/actions/setup-devenv/action.yml +5 -0
  73. package/managed/templates/github/workflows/managed-files.yml +80 -0
  74. package/package.json +15 -4
  75. package/src/bun/preload.ts +12 -0
  76. package/src/cli.ts +19 -7
  77. package/src/generate/index.ts +0 -6
  78. package/src/github-ci/index.ts +49 -18
  79. package/src/github-ci/outputs.ts +1 -2
  80. package/src/lib/cli-package.ts +2 -2
  81. package/src/lib/json.ts +291 -32
  82. package/src/lib/workspace.ts +88 -100
  83. package/src/monorepo/__tests__/ci-workflow.test.ts +3 -3
  84. package/src/monorepo/ci-workflow.ts +27 -1
  85. package/src/monorepo/git-config.ts +2 -2
  86. package/src/monorepo/index.ts +6 -2
  87. package/src/monorepo/lockfile.test.ts +35 -36
  88. package/src/monorepo/lockfile.ts +48 -24
  89. package/src/monorepo/managed-files.test.ts +1 -0
  90. package/src/monorepo/managed-files.ts +57 -38
  91. package/src/monorepo/package-policy.test.ts +20 -50
  92. package/src/monorepo/package-policy.ts +76 -59
  93. package/src/monorepo/packed-manifest.ts +18 -52
  94. package/src/monorepo/packed-package.ts +43 -22
  95. package/src/monorepo/packs/index.ts +13 -4
  96. package/src/monorepo/publish-workflow.ts +3 -1
  97. package/src/monorepo/runtime.test.ts +42 -3
  98. package/src/monorepo/runtime.ts +90 -12
  99. package/src/monorepo/tool-validation.ts +35 -25
  100. package/src/monorepo/wrangler.test.ts +11 -15
  101. package/src/monorepo/wrangler.ts +15 -15
  102. package/src/nx/index.test.ts +9 -5
  103. package/src/nx/index.ts +69 -42
  104. package/src/pr/index.ts +42 -36
  105. package/src/release/__tests__/candidates.test.ts +5 -4
  106. package/src/release/__tests__/trust-publisher.test.ts +7 -0
  107. package/src/release/candidates.ts +10 -17
  108. package/src/release/index.ts +104 -73
  109. package/src/wrangler/prepare-env.ts +75 -54
  110. package/src/wrangler/scaffold.test.ts +9 -12
  111. package/src/wrangler/scaffold.ts +13 -13
package/README.md CHANGED
@@ -231,7 +231,7 @@ candidates to downstream dependents because that would duplicate Nx's dependency
231
231
  `@smoothbricks/nx-plugin` owns transformer-aware TypeScript targets because this workspace compiles through `ttsc`.
232
232
  Configuring `@nx/js/typescript` would run `tsc`/`tsgo` directly and bypass the Typia and LMAO transformers. A package
233
233
  `tsconfig.lib.json` therefore produces the concrete `tsc-js` target from the SmoothBricks plugin. The same plugin also
234
- infers Bun test typechecking, non-TypeScript build-tool steps, and aggregate targets.
234
+ infers Bun test typechecking, Cargo workspace targets, and aggregate targets.
235
235
 
236
236
  Concrete targets use `{tool}-{output}` names and describe the tool that runs and the artifact or purpose it produces:
237
237
 
@@ -242,8 +242,8 @@ Concrete targets use `{tool}-{output}` names and describe the tool that runs and
242
242
  - Test tsconfigs are validation configs, not TypeScript build-mode projects. They must use `noEmit`, must not set
243
243
  `composite: true`, and package root `tsconfig.json` must not reference `./tsconfig.test.json`. The inferred
244
244
  `typecheck-tests` target runs `ttsc --noEmit -p tsconfig.test.json` after `build` instead.
245
- - Non-TypeScript build steps come from explicit tool configuration. For example, a package `build.zig` must expose named
246
- `b.step("name", ...)` entries; each non-reserved step becomes a `zig-name` target such as `zig-wasm`.
245
+ - A neighboring workspace-root `Cargo.toml` provides Cargo test, lint, mutation, and benchmark targets. Workspaces with
246
+ `cdylib` member crates also receive the cacheable `cargo-wasm` output target.
247
247
  - `build` is an aggregate. It exists only when there is at least one concrete build target such as `tsc-js`,
248
248
  `tsdown-js`, or another tool-output target, and it depends on output-family wildcards such as `*-js`, `*-web`,
249
249
  `*-html`, `*-css`, `*-ios`, `*-android`, `*-native`, `*-napi`, `*-bun`, and `*-wasm` instead of duplicating commands.
@@ -253,16 +253,18 @@ The root `@typescript/native` dependency follows TypeScript's documented side-by
253
253
  and supplies the native compiler used by `ttsc`. Because `ttsc` resolves only the unscoped package by default, the
254
254
  managed devenv shell sets `TTSC_TSGO_BINARY` to `node_modules/@typescript/native/bin/tsc`; the GitHub setup action
255
255
  persists that absolute path through `GITHUB_ENV`. Nx and other JavaScript tooling still require the full TypeScript
256
- compiler API, so workspace `typescript` dependencies stay on TypeScript 6. Both dependencies and the environment binding
257
- are required: TypeScript 7 under the unscoped name breaks Nx API calls such as `readConfigFile`.
256
+ compiler API, so workspace `typescript` stays on TypeScript 6. After install, setup-environment forces Bun's shared
257
+ `.bun/node_modules/typescript` hoist onto that API package so Nx does not load `@typescript/native` (TS7) via the store
258
+ ([oven-sh/bun#33834](https://github.com/oven-sh/bun/issues/33834)). Both dependencies and the environment binding are
259
+ required: TypeScript 7 under the unscoped name breaks Nx API calls such as `readConfigFile`.
258
260
 
259
261
  Explicit Nx target names must not contain `:`. Nx already uses colon syntax at the CLI boundary:
260
262
  `project:target:configuration`. Allowing target names like `build:wasm` makes command parsing and package-script aliases
261
263
  look like configurations, and it prevents a clean split between concrete tool-output targets and aggregate targets.
262
264
 
263
- Use tool-output names for concrete targets, such as `tsc-js`, `tsdown-js`, and `zig-wasm`. Use `build` and `lint` only
265
+ Use tool-output names for concrete targets, such as `tsc-js`, `tsdown-js`, and `cargo-wasm`. Use `build` and `lint` only
264
266
  as aggregate targets. Package scripts may still use developer-friendly colon names, for example `build:wasm`, but those
265
- scripts should delegate to unambiguous Nx targets such as `nx run pkg:zig-wasm`.
267
+ scripts should delegate to unambiguous Nx targets such as `nx run pkg:cargo-wasm`.
266
268
 
267
269
  ## Managed Files
268
270
 
@@ -526,12 +528,6 @@ nx lint @smoothbricks/cli
526
528
  smoo monorepo validate
527
529
  ```
528
530
 
529
- If validating packages with Zig build steps from outside the devenv shell, add Zig explicitly:
530
-
531
- ```bash
532
- nix shell nixpkgs#zig -c nx run-many -t build --projects=<public-projects>
533
- ```
534
-
535
531
  ## Links
536
532
 
537
533
  [are-the-types-wrong]: https://github.com/arethetypeswrong/arethetypeswrong.github.io/tree/main/packages/cli
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Bun runtime preload for consumers of `@smoothbricks/cli`.
3
+ *
4
+ * Re-exports the Typia/ttsc transform preload from `@smoothbricks/validation`.
5
+ * External repos depend on the CLI package only — they must not need a direct
6
+ * `@smoothbricks/validation` dependency just to run `smoo` against source.
7
+ *
8
+ * Usage:
9
+ * import '@smoothbricks/cli/bun/preload';
10
+ * // or bunfig.toml: preload = ["@smoothbricks/cli/bun/preload"]
11
+ */
12
+ import '@smoothbricks/validation/bun/preload';
13
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/bun/preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,sCAAsC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Bun runtime preload for consumers of `@smoothbricks/cli`.
3
+ *
4
+ * Re-exports the Typia/ttsc transform preload from `@smoothbricks/validation`.
5
+ * External repos depend on the CLI package only — they must not need a direct
6
+ * `@smoothbricks/validation` dependency just to run `smoo` against source.
7
+ *
8
+ * Usage:
9
+ * import '@smoothbricks/cli/bun/preload';
10
+ * // or bunfig.toml: preload = ["@smoothbricks/cli/bun/preload"]
11
+ */
12
+ import '@smoothbricks/validation/bun/preload';
package/dist/cli.js CHANGED
@@ -52,9 +52,12 @@ function buildProgram() {
52
52
  const { updateManagedFiles } = await import('./monorepo/index.js');
53
53
  updateManagedFiles(await findRepoRoot());
54
54
  });
55
- monorepo.command('check').action(async () => {
55
+ monorepo
56
+ .command('check')
57
+ .option('--warn', 'report drift as warnings (GitHub annotations) instead of failing')
58
+ .action(async (options) => {
56
59
  const { checkManagedFiles } = await import('./monorepo/index.js');
57
- checkManagedFiles(await findRepoRoot());
60
+ checkManagedFiles(await findRepoRoot(), { warn: options.warn });
58
61
  });
59
62
  monorepo.command('diff').action(async () => {
60
63
  const { diffManagedFiles } = await import('./monorepo/index.js');
@@ -69,10 +72,15 @@ function buildProgram() {
69
72
  });
70
73
  monorepo
71
74
  .command('sync-bun-lockfile-versions')
72
- .option('--stage', 'stage bun.lock when versions were resynced (pre-commit self-heal); quiet when clean')
75
+ .option('--stage', 'stage bun.lock when versions were resynced; quiet when clean')
76
+ .option('--mode <mode>', 'install: match package.json (CI); publish: map unpublished -next to last stable tag (pre-pack)', 'publish')
73
77
  .action(async (options) => {
74
78
  const { syncBunLockfileVersions } = await import('./monorepo/index.js');
75
- syncBunLockfileVersions(await findRepoRoot(), options.stage ? { log: false, stage: true } : {});
79
+ const mode = options.mode === 'install' ? 'install' : 'publish';
80
+ syncBunLockfileVersions(await findRepoRoot(), {
81
+ mode,
82
+ ...(options.stage ? { log: false, stage: true } : {}),
83
+ });
76
84
  });
77
85
  monorepo
78
86
  .command('list-release-packages')
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACpC;AAED,UAAU,aAAa;IACrB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAkBpD,CAAC;AAMF,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAyBf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACpC;AAED,UAAU,aAAa;IACrB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAYpD,CAAC;AAMF,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -7,12 +7,6 @@ export const variants = {
7
7
  args: (name) => ['--name', name, '--variant', 'ts-lib'],
8
8
  options: [{ flag: '--public', description: 'configure for npm publication' }],
9
9
  },
10
- 'ts-zig': {
11
- generator: 'create-package',
12
- description: 'Create a TypeScript + Zig/WASM hybrid package',
13
- args: (name) => ['--name', name, '--variant', 'ts-zig'],
14
- options: [{ flag: '--public', description: 'configure for npm publication' }],
15
- },
16
10
  'make-public': {
17
11
  generator: 'make-public',
18
12
  description: 'Promote a private package to npm publication',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github-ci/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtE;AAmFD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3G;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACpG,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,oBAAoB,CAiC9G;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAwC/E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAehF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9F;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAGf;AAgCD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACrG,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github-ci/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAmBhD,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtE;AAmFD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3G;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACpG,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,oBAAoB,CAiC9G;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAwC/E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAehF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9F;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAGf;AAgCD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACrG,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -1,9 +1,30 @@
1
- import { existsSync } from 'node:fs';
1
+ import { existsSync, readFileSync } from 'node:fs';
2
2
  import { appendFile, mkdtemp, realpath, rename, rm } from 'node:fs/promises';
3
3
  import { dirname, join } from 'node:path';
4
4
  import { $ } from 'bun';
5
+ import typia from 'typia';
6
+ import { parseStringArrayText } from '../lib/json.js';
5
7
  import { decode, run, runStatus } from '../lib/run.js';
6
8
  import { readProjectTargets } from '../nx/index.js';
9
+ const parseGithubActionsEvent = (() => {
10
+ const _io0 = input => undefined === input.repository || "object" === typeof input.repository && null !== input.repository && false === Array.isArray(input.repository) && _io1(input.repository);
11
+ const _io1 = input => undefined === input.default_branch || "string" === typeof input.default_branch;
12
+ const __is = input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input);
13
+ return input => { input = JSON.parse(input); return __is(input) ? input : null; };
14
+ })();
15
+ const parseNxProjectDeployConfigurations = (() => {
16
+ const _io0 = input => undefined === input.targets || "object" === typeof input.targets && null !== input.targets && false === Array.isArray(input.targets) && _io1(input.targets);
17
+ const _io1 = input => undefined === input.deploy || "object" === typeof input.deploy && null !== input.deploy && false === Array.isArray(input.deploy) && _io2(input.deploy);
18
+ const _io2 = input => undefined === input.configurations || "object" === typeof input.configurations && null !== input.configurations && false === Array.isArray(input.configurations) && _io3(input.configurations);
19
+ const _io3 = input => Object.keys(input).every(key => {
20
+ const value = input[key];
21
+ if (undefined === value)
22
+ return true;
23
+ return true;
24
+ });
25
+ const __is = input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input);
26
+ return input => { input = JSON.parse(input); return __is(input) ? input : null; };
27
+ })();
7
28
  export async function cleanupGithubCiCache(root) {
8
29
  const githubOutput = process.env.GITHUB_OUTPUT;
9
30
  const markCacheReady = async (ready) => {
@@ -233,7 +254,7 @@ export async function githubCiApplyOutputs(root, directories, expectedSourceSha)
233
254
  async function loadOutputBoundary() {
234
255
  if (import.meta.url.endsWith('/src/github-ci/index.ts')) {
235
256
  // The source self-hosting shim has no Typia transform; register it before loading manifest validators.
236
- await import('@smoothbricks/validation/bun/preload');
257
+ await import('@smoothbricks/cli/bun/preload');
237
258
  }
238
259
  // This boundary must stay lazy because the transformed dist and source self-hosting paths initialize Typia differently.
239
260
  return import('./outputs.js');
@@ -286,7 +307,32 @@ function resolveNxSmartMode(mode) {
286
307
  if (mode === 'affected' || mode === 'run-many') {
287
308
  return mode;
288
309
  }
289
- return process.env.GITHUB_EVENT_NAME === 'push' && process.env.GITHUB_REF_NAME === 'main' ? 'run-many' : 'affected';
310
+ const defaultBranch = eventDefaultBranch() ?? 'main';
311
+ if (process.env.GITHUB_EVENT_NAME === 'push') {
312
+ return process.env.GITHUB_REF_NAME === defaultBranch ? 'run-many' : 'affected';
313
+ }
314
+ // A PR into a NON-default branch is an integration surface (e.g. a mirror-sync
315
+ // review branch): its base moves outside the default-branch workflow that
316
+ // affected scoping is calibrated against, so under-selection can pass PR CI
317
+ // and only fail after merge. Validate those PRs in full.
318
+ if (process.env.GITHUB_EVENT_NAME === 'pull_request') {
319
+ const base = process.env.GITHUB_BASE_REF;
320
+ return base && base !== defaultBranch ? 'run-many' : 'affected';
321
+ }
322
+ return 'affected';
323
+ }
324
+ /** The repository default branch from the Actions event payload. */
325
+ function eventDefaultBranch() {
326
+ const eventPath = process.env.GITHUB_EVENT_PATH;
327
+ if (!eventPath)
328
+ return undefined;
329
+ try {
330
+ const payload = parseGithubActionsEvent(readFileSync(eventPath, 'utf8'));
331
+ return payload?.repository?.default_branch || undefined;
332
+ }
333
+ catch {
334
+ return undefined;
335
+ }
290
336
  }
291
337
  async function deployProjectsWithConfiguration(root, configuration, mode) {
292
338
  const listArgs = mode === 'affected'
@@ -304,21 +350,11 @@ async function deployProjectsWithConfiguration(root, configuration, mode) {
304
350
  }
305
351
  async function deployTargetHasConfiguration(root, project, configuration) {
306
352
  const result = await $ `nx show project ${project} --json`.cwd(root).quiet();
307
- const parsed = JSON.parse(decode(result.stdout));
308
- const targets = recordValue(parsed)?.targets;
309
- const deploy = recordValue(targets)?.deploy;
310
- const configurations = recordValue(deploy)?.configurations;
311
- return recordValue(configurations)?.[configuration] !== undefined;
353
+ const parsed = parseNxProjectDeployConfigurations(decode(result.stdout));
354
+ return parsed?.targets?.deploy?.configurations?.[configuration] !== undefined;
312
355
  }
313
356
  function nxProjectList(output) {
314
- const parsed = JSON.parse(output);
315
- return Array.isArray(parsed) ? parsed.filter((project) => typeof project === 'string') : [];
316
- }
317
- function recordValue(value) {
318
- return isRecord(value) ? value : undefined;
319
- }
320
- function isRecord(value) {
321
- return value !== null && typeof value === 'object' && !Array.isArray(value);
357
+ return parseStringArrayText(output) ?? [];
322
358
  }
323
359
  async function createGithubStatus(name, step) {
324
360
  await postGithubStatus(name, 'pending', `Running ${name}...`, step);
@@ -1 +1 @@
1
- {"version":3,"file":"outputs.d.ts","sourceRoot":"","sources":["../../src/github-ci/outputs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAWD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC,CAgEnC;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqGf;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAa7F"}
1
+ {"version":3,"file":"outputs.d.ts","sourceRoot":"","sources":["../../src/github-ci/outputs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAWD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC,CAgEnC;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqGf;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAa7F"}
@@ -4,7 +4,6 @@ import { createHash } from 'node:crypto';
4
4
  import { createReadStream } from 'node:fs';
5
5
  import { copyFile, lstat, mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
6
6
  import { isAbsolute, relative, resolve, sep } from 'node:path';
7
- import { isRecord } from '@smoothbricks/validation';
8
7
  import typia from 'typia';
9
8
  import { readProjectTargets } from '../nx/index.js';
10
9
  const parseManifest = (() => {
@@ -636,7 +635,7 @@ function assertGitSha(value, description) {
636
635
  }
637
636
  }
638
637
  function isMissingPathError(error) {
639
- return isRecord(error) && error.code === 'ENOENT';
638
+ return error instanceof Error && 'code' in error && error.code === 'ENOENT';
640
639
  }
641
640
  function sha256File(path) {
642
641
  return new Promise((resolveHash, reject) => {
@@ -1,10 +1,10 @@
1
1
  import { fileURLToPath } from 'node:url';
2
- import { readJsonObject, stringProperty } from './json.js';
2
+ import { readJsonObject } from './json.js';
3
3
  export const smoothBricksCodebasePackageName = '@smoothbricks/codebase';
4
4
  export const cliPackageVersion = readCliPackageVersion();
5
5
  function readCliPackageVersion() {
6
6
  const pkg = readJsonObject(fileURLToPath(new URL('../../package.json', import.meta.url)));
7
- const version = pkg ? stringProperty(pkg, 'version') : null;
7
+ const version = pkg?.version;
8
8
  if (!version) {
9
9
  throw new Error('Unable to read @smoothbricks/cli package version.');
10
10
  }
@@ -1,13 +1,120 @@
1
- import { hasOwn, hasOwnString, isRecord } from '@smoothbricks/validation';
2
- export { hasOwn, hasOwnString, isRecord };
3
- export declare function stringProperty(record: Record<string, unknown>, key: string): string | null;
4
- export declare function recordProperty(record: Record<string, unknown>, key: string): Record<string, unknown> | null;
5
- export declare function getOrCreateRecord(record: Record<string, unknown>, key: string): Record<string, unknown>;
6
- export declare function setStringProperty(record: Record<string, unknown>, key: string, value: string): boolean;
7
- export declare function setMissingStringProperty(record: Record<string, unknown>, key: string, value: string): boolean;
8
- export declare function requiredJsonObject(path: string): Record<string, unknown>;
9
- export declare function readJsonObject(path: string): Record<string, unknown> | null;
10
- export declare function writeJsonObject(path: string, value: Record<string, unknown>): void;
11
- export declare function jsonObjectText(value: Record<string, unknown>): string;
1
+ /** String-keyed dependency / script / engine maps. */
2
+ export type StringMap = Record<string, string>;
3
+ export interface PackageRepository {
4
+ type?: string;
5
+ url?: string;
6
+ directory?: string;
7
+ }
8
+ export interface PackageNxConfig {
9
+ name?: string;
10
+ tags?: string[];
11
+ includedScripts?: string[];
12
+ targets?: Record<string, NxTargetConfig>;
13
+ }
14
+ export interface PackagePublishConfig {
15
+ access?: string;
16
+ }
17
+ export interface PackageSmooGithub {
18
+ pushBranches?: string[];
19
+ }
20
+ export interface PackageSmooConfig {
21
+ github?: PackageSmooGithub;
22
+ }
23
+ export interface PackageWorkspacesObject {
24
+ packages?: string[];
25
+ }
26
+ /**
27
+ * package.json shape used by smoo. Optional fields stay optional so partial
28
+ * manifests parse; mutation helpers create nested objects on demand.
29
+ */
30
+ export interface PackageJson {
31
+ name?: string;
32
+ version?: string;
33
+ private?: boolean;
34
+ license?: string;
35
+ types?: string;
36
+ packageManager?: string;
37
+ files?: string[];
38
+ bin?: string | StringMap;
39
+ exports?: PackageExports;
40
+ workspaces?: string[] | PackageWorkspacesObject;
41
+ dependencies?: StringMap;
42
+ devDependencies?: StringMap;
43
+ peerDependencies?: StringMap;
44
+ optionalDependencies?: StringMap;
45
+ engines?: StringMap;
46
+ scripts?: StringMap;
47
+ publishConfig?: PackagePublishConfig;
48
+ repository?: string | PackageRepository;
49
+ nx?: PackageNxConfig;
50
+ smoo?: PackageSmooConfig;
51
+ }
52
+ /** Recursive package exports map (conditions nest arbitrarily). */
53
+ export type PackageExports = string | PackageExportMap | null | undefined;
54
+ export interface PackageExportMap {
55
+ [condition: string]: PackageExports;
56
+ }
57
+ export interface NxDependsOnObject {
58
+ target: string;
59
+ projects?: string | string[];
60
+ }
61
+ export type NxDependsOn = string | NxDependsOnObject;
62
+ /** Nx target options are executor-specific open bags. */
63
+ export type NxTargetOptions = Record<string, unknown>;
64
+ export type NxInput = string | Record<string, unknown>;
65
+ export interface NxTargetConfig {
66
+ executor?: string;
67
+ dependsOn?: NxDependsOn[];
68
+ outputs?: string[];
69
+ inputs?: NxInput[];
70
+ options?: NxTargetOptions;
71
+ configurations?: Record<string, NxTargetConfig>;
72
+ cache?: boolean;
73
+ command?: string;
74
+ parallelism?: boolean;
75
+ }
76
+ export interface NxProjectJson {
77
+ name?: string;
78
+ root?: string;
79
+ targets?: Record<string, NxTargetConfig>;
80
+ }
81
+ export interface NxJson {
82
+ namedInputs?: Record<string, Array<string | Record<string, unknown>> | string>;
83
+ }
84
+ /** Parse package.json text. Invalid JSON throws; wrong shape returns null. */
85
+ export declare const parsePackageJsonText: (input: string) => PackageJson | null;
86
+ /** Parse `nx show project --json` output. Invalid JSON throws; wrong shape returns null. */
87
+ export declare const parseNxProjectJsonText: (input: string) => NxProjectJson | null;
88
+ /** Parse nx.json text. Invalid JSON throws; wrong shape returns null. */
89
+ export declare const parseNxJsonText: (input: string) => NxJson | null;
90
+ /** Parse a JSON string array. Invalid JSON throws; non-arrays return null. */
91
+ export declare const parseStringArrayText: (input: string) => string[] | null;
92
+ export declare function readJsonObject(path: string): PackageJson | null;
93
+ export declare function requiredJsonObject(path: string): PackageJson;
94
+ export declare function writeJsonObject(path: string, value: object): void;
95
+ export declare function jsonObjectText(value: object): string;
12
96
  export declare function readJson(path: string): unknown;
97
+ export declare function isPackageJson(value: unknown): value is PackageJson;
98
+ /** Ensure package.json.scripts exists. */
99
+ export declare function ensureScripts(pkg: PackageJson): StringMap;
100
+ /** Ensure package.json.dependencies (or other string-map dep field) exists. */
101
+ export declare function ensureDependencyMap(pkg: PackageJson, key: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies'): StringMap;
102
+ /** Ensure package.json.engines exists. */
103
+ export declare function ensureEngines(pkg: PackageJson): StringMap;
104
+ /** Ensure package.json.nx exists. */
105
+ export declare function ensureNx(pkg: PackageJson): PackageNxConfig;
106
+ /** Ensure package.json.nx.targets exists. */
107
+ export declare function ensureNxTargets(nx: PackageNxConfig): Record<string, NxTargetConfig>;
108
+ /** Ensure package.json.publishConfig exists. */
109
+ export declare function ensurePublishConfig(pkg: PackageJson): PackagePublishConfig;
110
+ /** Ensure package.json.repository is an object (not a string URL). */
111
+ export declare function ensureRepositoryObject(pkg: PackageJson): PackageRepository;
112
+ export declare function setStringProperty(record: StringMap, key: string, value: string): boolean;
113
+ export declare function setMissingStringProperty(record: StringMap, key: string, value: string): boolean;
114
+ export declare function setPackageStringField(pkg: PackageJson, key: 'name' | 'version' | 'license' | 'types' | 'packageManager', value: string): boolean;
115
+ export declare function setMissingPackageStringField(pkg: PackageJson, key: 'name' | 'version' | 'license' | 'types' | 'packageManager', value: string): boolean;
116
+ export declare function setNxName(nx: PackageNxConfig, value: string): boolean;
117
+ export declare function setPublishAccess(publishConfig: PackagePublishConfig, value: string): boolean;
118
+ export declare function setRepositoryField(repository: PackageRepository, key: 'type' | 'url' | 'directory', value: string): boolean;
119
+ export declare function setMissingRepositoryField(repository: PackageRepository, key: 'type' | 'url' | 'directory', value: string): boolean;
13
120
  //# sourceMappingURL=json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/lib/json.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAE1C,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAG3G;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQvG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMtG;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAM7G;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMxE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAG3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAElF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK9C"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/lib/json.ts"],"names":[],"mappings":"AAGA,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,uBAAuB,CAAC;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACxC,EAAE,CAAC,EAAE,eAAe,CAAC;IACrB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAErD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;CAChF;AAED,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,uCAA0C,CAAC;AAE5E,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,yCAA4C,CAAC;AAEhF,yEAAyE;AACzE,eAAO,MAAM,eAAe,kCAAqC,CAAC;AAElE,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,oCAAuC,CAAC;AAIzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAS/D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAM5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAOzD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,sBAAsB,GACpF,SAAS,CAQX;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAOzD;AAED,qCAAqC;AACrC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,eAAe,CAO1D;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAOnF;AAED,gDAAgD;AAChD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,oBAAoB,CAO1E;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,iBAAiB,CAO1E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMxF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAM/F;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,EAChE,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,EAChE,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMrE;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAM5F;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,iBAAiB,EAC7B,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,EACjC,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,iBAAiB,EAC7B,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,EACjC,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT"}