@ykdz/template 0.0.35 → 0.0.37

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 (720) hide show
  1. package/dist/application.d.ts +131 -14
  2. package/dist/application.js +307 -206
  3. package/dist/command-result.d.ts +9 -0
  4. package/dist/command-result.js +231 -0
  5. package/dist/main.d.ts +4 -1
  6. package/dist/main.js +321 -49
  7. package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.d.ts +159 -45
  8. package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.js +2816 -535
  9. package/node_modules/@ykdz/template-builtin-presets/dist/src/generation-record.d.ts +39 -0
  10. package/node_modules/@ykdz/template-builtin-presets/dist/src/generation-record.js +178 -0
  11. package/node_modules/@ykdz/template-builtin-presets/dist/src/index.d.ts +2 -2
  12. package/node_modules/@ykdz/template-builtin-presets/dist/src/index.js +1 -1
  13. package/node_modules/@ykdz/template-builtin-presets/dist/src/rust-bin/definition.d.ts +31 -2
  14. package/node_modules/@ykdz/template-builtin-presets/dist/src/rust-bin/definition.js +44 -47
  15. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/development-container.d.ts +1 -1
  16. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/development-container.js +1 -1
  17. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/typescript.d.ts +10 -7
  18. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/typescript.js +11 -7
  19. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.d.ts +6 -4
  20. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.js +8 -7
  21. package/node_modules/@ykdz/template-builtin-presets/dist/src/template-sources.d.ts +1 -1
  22. package/node_modules/@ykdz/template-builtin-presets/dist/src/template-sources.js +1 -1
  23. package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-cli/definition.d.ts +31 -2
  24. package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-cli/definition.js +111 -64
  25. package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-lib/definition.d.ts +31 -2
  26. package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-lib/definition.js +37 -29
  27. package/node_modules/@ykdz/template-builtin-presets/dist/src/vike-app/definition.d.ts +48 -2
  28. package/node_modules/@ykdz/template-builtin-presets/dist/src/vike-app/definition.js +203 -155
  29. package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-app/definition.d.ts +26 -2
  30. package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-app/definition.js +21 -9
  31. package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-hono-app/definition.d.ts +22 -2
  32. package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-hono-app/definition.js +48 -38
  33. package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/bin/semver.js +0 -0
  34. package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/README.md +1 -1
  35. package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/dist/index.cjs +427 -504
  36. package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/dist/index.d.cts +427 -32
  37. package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/dist/index.d.mts +427 -32
  38. package/node_modules/@ykdz/template-builtin-presets/node_modules/valibot/dist/index.min.cjs +2 -0
  39. package/node_modules/@ykdz/template-builtin-presets/node_modules/valibot/dist/index.min.mjs +2 -0
  40. package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/dist/index.mjs +418 -504
  41. package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/package.json +7 -2
  42. package/node_modules/@ykdz/template-builtin-presets/package.json +30 -16
  43. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check-deployment-diagnostics.yml +5 -5
  44. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check-deployment.yml +4 -4
  45. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check-diagnostics.yml +4 -4
  46. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check.yml +3 -3
  47. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.pnpmfile.mjs +19 -0
  48. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/AGENTS.md.template +11 -0
  49. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/devcontainer.json +1 -2
  50. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.dynamic.txt +1 -0
  51. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.yaml +5 -5
  52. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/scripts/check-toolchain-versions.ts +556 -0
  53. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/tsconfig.json +4 -6
  54. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/tsconfig.packing-hook.json +7 -0
  55. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/turbo.json +1 -1
  56. package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/turbo.json +19 -1
  57. package/node_modules/@ykdz/template-builtin-presets/templates/shared/devcontainer/node-pnpm.Dockerfile +4 -6
  58. package/node_modules/@ykdz/template-builtin-presets/templates/shared/oxc/tsconfig.config.json +2 -1
  59. package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/tsconfig.app.json +1 -1
  60. package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/tsconfig.node.json +2 -2
  61. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/CHANGELOG.md.template +17 -0
  62. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/RELEASING.md +17 -0
  63. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/artifact.ts +1271 -0
  64. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/changelog.ts +283 -0
  65. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/check-artifact.ts +99 -0
  66. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/check-readiness.ts +66 -0
  67. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/cli-command-identity.ts +4 -0
  68. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/handoff.ts +450 -0
  69. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/publish.ts +483 -0
  70. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/readiness.ts +1146 -0
  71. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/release.ts +819 -0
  72. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/release.yml +119 -0
  73. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/root-tsconfig.json +8 -0
  74. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/tsconfig.json +4 -0
  75. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication/turbo.json +6 -0
  76. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/README.md +48 -0
  77. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/assets/CHANGELOG.md.template +17 -0
  78. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/assets/LICENSE-APACHE-2.0.txt +202 -0
  79. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/assets/LICENSE-MIT.txt +21 -0
  80. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/assets/README.md.template +5 -0
  81. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/bridge.ts +3336 -0
  82. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/publication-setup/setup.sh +221 -0
  83. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/src/cli-command-identity.ts +133 -0
  84. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/src/cli.ts +4 -3
  85. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/src/main.ts +5 -4
  86. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/test/integration/command.test.ts +14 -13
  87. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/test/unit/cli-command-identity.test.ts +76 -0
  88. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/tsconfig.build.json +2 -0
  89. package/node_modules/@ykdz/template-builtin-presets/templates/ts-cli/tsconfig.json +2 -2
  90. package/node_modules/@ykdz/template-builtin-presets/templates/ts-lib/tsconfig.build.json +2 -1
  91. package/node_modules/@ykdz/template-builtin-presets/templates/ts-lib/tsconfig.json +2 -2
  92. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/scripts/reset.ts +3 -0
  93. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/src/db.ts +3 -4
  94. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/src/readiness.ts +6 -5
  95. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/src/storage.ts +93 -0
  96. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/tsconfig.build.json +8 -2
  97. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/tsconfig.json +3 -7
  98. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/turbo.json +1 -1
  99. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/drizzle.config.ts +5 -5
  100. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/tsconfig.build.json +2 -1
  101. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/tsconfig.json +2 -2
  102. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/.env.example +2 -1
  103. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/Dockerfile +25 -17
  104. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/Dockerfile.dockerignore +4 -4
  105. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/playwright.config.ts +5 -25
  106. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/scripts/check-standalone-deployment.ts +17 -15
  107. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/test/playwright-teardown.ts +6 -7
  108. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.app.json +1 -2
  109. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.json +0 -1
  110. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.node.json +2 -3
  111. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.test.json +0 -1
  112. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/turbo.json +0 -8
  113. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/vite.config.ts +3 -39
  114. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/api/tsconfig.json +7 -2
  115. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/root/playwright.config.ts +34 -0
  116. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/{web → root}/test/e2e/app.spec.ts +3 -3
  117. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/root/test/e2e/fixtures.ts +15 -0
  118. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/root/tsconfig.json +3 -0
  119. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/web/src/api.ts +1 -3
  120. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/web/turbo.json +0 -4
  121. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/web/vite.config.ts +2 -0
  122. package/node_modules/@ykdz/template-core/dist/ci-diagnostic-artifact.d.ts +2 -2
  123. package/node_modules/@ykdz/template-core/dist/ci-diagnostic-artifact.js +10 -5
  124. package/node_modules/@ykdz/template-core/dist/module-graph.d.ts +16 -54
  125. package/node_modules/@ykdz/template-core/dist/module-graph.js +140 -105
  126. package/node_modules/@ykdz/template-core/dist/package-contribution.d.ts +47 -11
  127. package/node_modules/@ykdz/template-core/dist/package-contribution.js +92 -0
  128. package/node_modules/@ykdz/template-core/dist/pnpm-workspace.yaml +21 -16
  129. package/node_modules/@ykdz/template-core/dist/preset-definition.d.ts +82 -13
  130. package/node_modules/@ykdz/template-core/dist/preset-definition.js +16 -1
  131. package/node_modules/@ykdz/template-core/dist/project-blueprint.d.ts +56 -0
  132. package/node_modules/@ykdz/template-core/dist/project-blueprint.js +271 -0
  133. package/node_modules/@ykdz/template-core/dist/project-github.d.ts +6 -4
  134. package/node_modules/@ykdz/template-core/dist/project-github.js +4 -4
  135. package/node_modules/@ykdz/template-core/dist/project-linking-v2.d.ts +4 -4
  136. package/node_modules/@ykdz/template-core/dist/project-linking-v2.js +14 -8
  137. package/node_modules/@ykdz/template-core/dist/project-projection.d.ts +29 -1
  138. package/node_modules/@ykdz/template-core/dist/project-projection.js +501 -29
  139. package/node_modules/@ykdz/template-core/dist/release-toolchain-snapshot.d.ts +10 -0
  140. package/node_modules/@ykdz/template-core/dist/release-toolchain-snapshot.js +9 -0
  141. package/node_modules/@ykdz/template-core/dist/renderer.d.ts +0 -2
  142. package/node_modules/@ykdz/template-core/dist/renderer.js +17 -38
  143. package/node_modules/@ykdz/template-core/dist/template-boundary-check.d.ts +2 -2
  144. package/node_modules/@ykdz/template-core/dist/template-boundary-check.js +21 -9
  145. package/node_modules/@ykdz/template-core/node_modules/valibot/LICENSE.md +9 -0
  146. package/node_modules/@ykdz/template-core/node_modules/valibot/README.md +94 -0
  147. package/node_modules/@ykdz/template-core/node_modules/valibot/dist/index.cjs +7897 -0
  148. package/node_modules/@ykdz/template-core/node_modules/valibot/dist/index.d.cts +16579 -0
  149. package/node_modules/@ykdz/template-core/node_modules/valibot/dist/index.d.mts +16579 -0
  150. package/node_modules/@ykdz/template-core/node_modules/valibot/dist/index.min.cjs +2 -0
  151. package/node_modules/@ykdz/template-core/node_modules/valibot/dist/index.min.mjs +2 -0
  152. package/node_modules/@ykdz/template-core/node_modules/valibot/dist/index.mjs +7577 -0
  153. package/node_modules/@ykdz/template-core/node_modules/valibot/package.json +84 -0
  154. package/node_modules/@ykdz/template-core/package.json +0 -2
  155. package/node_modules/hosted-git-info/LICENSE +13 -0
  156. package/node_modules/hosted-git-info/README.md +138 -0
  157. package/node_modules/hosted-git-info/lib/from-url.js +122 -0
  158. package/node_modules/hosted-git-info/lib/hosts.js +229 -0
  159. package/node_modules/hosted-git-info/lib/index.js +227 -0
  160. package/node_modules/hosted-git-info/lib/parse-url.js +79 -0
  161. package/node_modules/hosted-git-info/package.json +57 -0
  162. package/node_modules/jsonc-parser/CHANGELOG.md +76 -0
  163. package/node_modules/jsonc-parser/LICENSE.md +21 -0
  164. package/node_modules/jsonc-parser/README.md +364 -0
  165. package/node_modules/jsonc-parser/SECURITY.md +41 -0
  166. package/node_modules/jsonc-parser/lib/esm/impl/edit.js +185 -0
  167. package/node_modules/jsonc-parser/lib/esm/impl/format.js +261 -0
  168. package/node_modules/jsonc-parser/lib/esm/impl/parser.js +659 -0
  169. package/node_modules/jsonc-parser/lib/esm/impl/scanner.js +443 -0
  170. package/node_modules/jsonc-parser/lib/esm/impl/string-intern.js +29 -0
  171. package/node_modules/jsonc-parser/lib/esm/main.d.ts +351 -0
  172. package/node_modules/jsonc-parser/lib/esm/main.js +178 -0
  173. package/node_modules/jsonc-parser/lib/umd/impl/edit.js +201 -0
  174. package/node_modules/jsonc-parser/lib/umd/impl/format.js +275 -0
  175. package/node_modules/jsonc-parser/lib/umd/impl/parser.js +682 -0
  176. package/node_modules/jsonc-parser/lib/umd/impl/scanner.js +456 -0
  177. package/node_modules/jsonc-parser/lib/umd/impl/string-intern.js +42 -0
  178. package/node_modules/jsonc-parser/lib/umd/main.d.ts +351 -0
  179. package/node_modules/jsonc-parser/lib/umd/main.js +194 -0
  180. package/node_modules/jsonc-parser/package.json +37 -0
  181. package/node_modules/lru-cache/LICENSE.md +55 -0
  182. package/node_modules/lru-cache/README.md +469 -0
  183. package/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel-browser.d.ts.map +1 -0
  184. package/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel-browser.js.map +1 -0
  185. package/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel.d.ts +5 -0
  186. package/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel.js +7 -0
  187. package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts +1400 -0
  188. package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts.map +1 -0
  189. package/node_modules/lru-cache/dist/commonjs/browser/index.js +1733 -0
  190. package/node_modules/lru-cache/dist/commonjs/browser/index.js.map +1 -0
  191. package/node_modules/lru-cache/dist/commonjs/browser/index.min.js +2 -0
  192. package/node_modules/lru-cache/dist/commonjs/browser/index.min.js.map +7 -0
  193. package/node_modules/lru-cache/dist/commonjs/browser/perf.d.ts +12 -0
  194. package/node_modules/lru-cache/dist/commonjs/browser/perf.d.ts.map +1 -0
  195. package/node_modules/lru-cache/dist/commonjs/browser/perf.js +10 -0
  196. package/node_modules/lru-cache/dist/commonjs/browser/perf.js.map +1 -0
  197. package/node_modules/lru-cache/dist/commonjs/diagnostics-channel-cjs.cjs.map +1 -0
  198. package/node_modules/lru-cache/dist/commonjs/diagnostics-channel-cjs.d.cts.map +1 -0
  199. package/node_modules/lru-cache/dist/commonjs/diagnostics-channel.d.ts +5 -0
  200. package/node_modules/lru-cache/dist/commonjs/diagnostics-channel.js +7 -0
  201. package/node_modules/lru-cache/dist/commonjs/index.d.ts +1400 -0
  202. package/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -0
  203. package/node_modules/lru-cache/dist/commonjs/index.js +1733 -0
  204. package/node_modules/lru-cache/dist/commonjs/index.js.map +1 -0
  205. package/node_modules/lru-cache/dist/commonjs/index.min.js +2 -0
  206. package/node_modules/lru-cache/dist/commonjs/index.min.js.map +7 -0
  207. package/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel-node.d.ts.map +1 -0
  208. package/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel-node.js.map +1 -0
  209. package/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel.d.ts +5 -0
  210. package/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel.js +9 -0
  211. package/node_modules/lru-cache/dist/commonjs/node/index.d.ts +1400 -0
  212. package/node_modules/lru-cache/dist/commonjs/node/index.d.ts.map +1 -0
  213. package/node_modules/lru-cache/dist/commonjs/node/index.js +1733 -0
  214. package/node_modules/lru-cache/dist/commonjs/node/index.js.map +1 -0
  215. package/node_modules/lru-cache/dist/commonjs/node/index.min.js +2 -0
  216. package/node_modules/lru-cache/dist/commonjs/node/index.min.js.map +7 -0
  217. package/node_modules/lru-cache/dist/commonjs/node/perf.d.ts +12 -0
  218. package/node_modules/lru-cache/dist/commonjs/node/perf.d.ts.map +1 -0
  219. package/node_modules/lru-cache/dist/commonjs/node/perf.js +10 -0
  220. package/node_modules/lru-cache/dist/commonjs/node/perf.js.map +1 -0
  221. package/node_modules/lru-cache/dist/commonjs/package.json +3 -0
  222. package/node_modules/lru-cache/dist/commonjs/perf.d.ts +12 -0
  223. package/node_modules/lru-cache/dist/commonjs/perf.d.ts.map +1 -0
  224. package/node_modules/lru-cache/dist/commonjs/perf.js +10 -0
  225. package/node_modules/lru-cache/dist/commonjs/perf.js.map +1 -0
  226. package/node_modules/lru-cache/dist/commonjs/react-native/diagnostics-channel-react-native.d.ts.map +1 -0
  227. package/node_modules/lru-cache/dist/commonjs/react-native/diagnostics-channel-react-native.js.map +1 -0
  228. package/node_modules/lru-cache/dist/commonjs/react-native/diagnostics-channel.d.ts +5 -0
  229. package/node_modules/lru-cache/dist/commonjs/react-native/diagnostics-channel.js +7 -0
  230. package/node_modules/lru-cache/dist/commonjs/react-native/index.d.ts +1400 -0
  231. package/node_modules/lru-cache/dist/commonjs/react-native/index.d.ts.map +1 -0
  232. package/node_modules/lru-cache/dist/commonjs/react-native/index.js +1733 -0
  233. package/node_modules/lru-cache/dist/commonjs/react-native/index.js.map +1 -0
  234. package/node_modules/lru-cache/dist/commonjs/react-native/perf.d.ts +12 -0
  235. package/node_modules/lru-cache/dist/commonjs/react-native/perf.d.ts.map +1 -0
  236. package/node_modules/lru-cache/dist/commonjs/react-native/perf.js +10 -0
  237. package/node_modules/lru-cache/dist/commonjs/react-native/perf.js.map +1 -0
  238. package/node_modules/lru-cache/dist/esm/browser/diagnostics-channel-browser.d.ts.map +1 -0
  239. package/node_modules/lru-cache/dist/esm/browser/diagnostics-channel-browser.js.map +1 -0
  240. package/node_modules/lru-cache/dist/esm/browser/diagnostics-channel.d.ts +5 -0
  241. package/node_modules/lru-cache/dist/esm/browser/diagnostics-channel.js +4 -0
  242. package/node_modules/lru-cache/dist/esm/browser/index.d.ts +1400 -0
  243. package/node_modules/lru-cache/dist/esm/browser/index.d.ts.map +1 -0
  244. package/node_modules/lru-cache/dist/esm/browser/index.js +1729 -0
  245. package/node_modules/lru-cache/dist/esm/browser/index.js.map +1 -0
  246. package/node_modules/lru-cache/dist/esm/browser/index.min.js +2 -0
  247. package/node_modules/lru-cache/dist/esm/browser/index.min.js.map +7 -0
  248. package/node_modules/lru-cache/dist/esm/browser/perf.d.ts +12 -0
  249. package/node_modules/lru-cache/dist/esm/browser/perf.d.ts.map +1 -0
  250. package/node_modules/lru-cache/dist/esm/browser/perf.js +7 -0
  251. package/node_modules/lru-cache/dist/esm/browser/perf.js.map +1 -0
  252. package/node_modules/lru-cache/dist/esm/diagnostics-channel-esm.d.mts.map +1 -0
  253. package/node_modules/lru-cache/dist/esm/diagnostics-channel-esm.mjs.map +1 -0
  254. package/node_modules/lru-cache/dist/esm/diagnostics-channel.d.ts +5 -0
  255. package/node_modules/lru-cache/dist/esm/diagnostics-channel.js +19 -0
  256. package/node_modules/lru-cache/dist/esm/index.d.ts +1400 -0
  257. package/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -0
  258. package/node_modules/lru-cache/dist/esm/index.js +1729 -0
  259. package/node_modules/lru-cache/dist/esm/index.js.map +1 -0
  260. package/node_modules/lru-cache/dist/esm/index.min.js +2 -0
  261. package/node_modules/lru-cache/dist/esm/index.min.js.map +7 -0
  262. package/node_modules/lru-cache/dist/esm/node/diagnostics-channel-node.d.ts.map +1 -0
  263. package/node_modules/lru-cache/dist/esm/node/diagnostics-channel-node.js.map +1 -0
  264. package/node_modules/lru-cache/dist/esm/node/diagnostics-channel.d.ts +5 -0
  265. package/node_modules/lru-cache/dist/esm/node/diagnostics-channel.js +6 -0
  266. package/node_modules/lru-cache/dist/esm/node/index.d.ts +1400 -0
  267. package/node_modules/lru-cache/dist/esm/node/index.d.ts.map +1 -0
  268. package/node_modules/lru-cache/dist/esm/node/index.js +1729 -0
  269. package/node_modules/lru-cache/dist/esm/node/index.js.map +1 -0
  270. package/node_modules/lru-cache/dist/esm/node/index.min.js +2 -0
  271. package/node_modules/lru-cache/dist/esm/node/index.min.js.map +7 -0
  272. package/node_modules/lru-cache/dist/esm/node/perf.d.ts +12 -0
  273. package/node_modules/lru-cache/dist/esm/node/perf.d.ts.map +1 -0
  274. package/node_modules/lru-cache/dist/esm/node/perf.js +7 -0
  275. package/node_modules/lru-cache/dist/esm/node/perf.js.map +1 -0
  276. package/node_modules/lru-cache/dist/esm/package.json +3 -0
  277. package/node_modules/lru-cache/dist/esm/perf.d.ts +12 -0
  278. package/node_modules/lru-cache/dist/esm/perf.d.ts.map +1 -0
  279. package/node_modules/lru-cache/dist/esm/perf.js +7 -0
  280. package/node_modules/lru-cache/dist/esm/perf.js.map +1 -0
  281. package/node_modules/lru-cache/dist/esm/react-native/diagnostics-channel-react-native.d.ts.map +1 -0
  282. package/node_modules/lru-cache/dist/esm/react-native/diagnostics-channel-react-native.js.map +1 -0
  283. package/node_modules/lru-cache/dist/esm/react-native/diagnostics-channel.d.ts +5 -0
  284. package/node_modules/lru-cache/dist/esm/react-native/diagnostics-channel.js +4 -0
  285. package/node_modules/lru-cache/dist/esm/react-native/index.d.ts +1400 -0
  286. package/node_modules/lru-cache/dist/esm/react-native/index.d.ts.map +1 -0
  287. package/node_modules/lru-cache/dist/esm/react-native/index.js +1729 -0
  288. package/node_modules/lru-cache/dist/esm/react-native/index.js.map +1 -0
  289. package/node_modules/lru-cache/dist/esm/react-native/perf.d.ts +12 -0
  290. package/node_modules/lru-cache/dist/esm/react-native/perf.d.ts.map +1 -0
  291. package/node_modules/lru-cache/dist/esm/react-native/perf.js +7 -0
  292. package/node_modules/lru-cache/dist/esm/react-native/perf.js.map +1 -0
  293. package/node_modules/lru-cache/package.json +180 -0
  294. package/node_modules/npm-package-arg/LICENSE +15 -0
  295. package/node_modules/npm-package-arg/README.md +104 -0
  296. package/node_modules/npm-package-arg/lib/npa.js +479 -0
  297. package/node_modules/npm-package-arg/node_modules/semver/LICENSE +15 -0
  298. package/node_modules/npm-package-arg/node_modules/semver/README.md +680 -0
  299. package/node_modules/npm-package-arg/node_modules/semver/bin/semver.js +195 -0
  300. package/node_modules/npm-package-arg/node_modules/semver/classes/comparator.js +143 -0
  301. package/node_modules/npm-package-arg/node_modules/semver/classes/index.js +7 -0
  302. package/node_modules/npm-package-arg/node_modules/semver/classes/range.js +577 -0
  303. package/node_modules/npm-package-arg/node_modules/semver/classes/semver.js +350 -0
  304. package/node_modules/npm-package-arg/node_modules/semver/functions/clean.js +8 -0
  305. package/node_modules/npm-package-arg/node_modules/semver/functions/cmp.js +54 -0
  306. package/node_modules/npm-package-arg/node_modules/semver/functions/coerce.js +62 -0
  307. package/node_modules/npm-package-arg/node_modules/semver/functions/compare-build.js +9 -0
  308. package/node_modules/npm-package-arg/node_modules/semver/functions/compare-loose.js +5 -0
  309. package/node_modules/npm-package-arg/node_modules/semver/functions/compare.js +7 -0
  310. package/node_modules/npm-package-arg/node_modules/semver/functions/diff.js +60 -0
  311. package/node_modules/npm-package-arg/node_modules/semver/functions/eq.js +5 -0
  312. package/node_modules/npm-package-arg/node_modules/semver/functions/gt.js +5 -0
  313. package/node_modules/npm-package-arg/node_modules/semver/functions/gte.js +5 -0
  314. package/node_modules/npm-package-arg/node_modules/semver/functions/inc.js +21 -0
  315. package/node_modules/npm-package-arg/node_modules/semver/functions/lt.js +5 -0
  316. package/node_modules/npm-package-arg/node_modules/semver/functions/lte.js +5 -0
  317. package/node_modules/npm-package-arg/node_modules/semver/functions/major.js +5 -0
  318. package/node_modules/npm-package-arg/node_modules/semver/functions/minor.js +5 -0
  319. package/node_modules/npm-package-arg/node_modules/semver/functions/neq.js +5 -0
  320. package/node_modules/npm-package-arg/node_modules/semver/functions/parse.js +18 -0
  321. package/node_modules/npm-package-arg/node_modules/semver/functions/patch.js +5 -0
  322. package/node_modules/npm-package-arg/node_modules/semver/functions/prerelease.js +8 -0
  323. package/node_modules/npm-package-arg/node_modules/semver/functions/rcompare.js +5 -0
  324. package/node_modules/npm-package-arg/node_modules/semver/functions/rsort.js +5 -0
  325. package/node_modules/npm-package-arg/node_modules/semver/functions/satisfies.js +12 -0
  326. package/node_modules/npm-package-arg/node_modules/semver/functions/sort.js +5 -0
  327. package/node_modules/npm-package-arg/node_modules/semver/functions/truncate.js +48 -0
  328. package/node_modules/npm-package-arg/node_modules/semver/functions/valid.js +8 -0
  329. package/node_modules/npm-package-arg/node_modules/semver/index.js +93 -0
  330. package/node_modules/npm-package-arg/node_modules/semver/internal/constants.js +37 -0
  331. package/node_modules/npm-package-arg/node_modules/semver/internal/debug.js +11 -0
  332. package/node_modules/npm-package-arg/node_modules/semver/internal/identifiers.js +29 -0
  333. package/node_modules/npm-package-arg/node_modules/semver/internal/lrucache.js +42 -0
  334. package/node_modules/npm-package-arg/node_modules/semver/internal/parse-options.js +17 -0
  335. package/node_modules/npm-package-arg/node_modules/semver/internal/re.js +223 -0
  336. package/node_modules/npm-package-arg/node_modules/semver/package.json +78 -0
  337. package/node_modules/npm-package-arg/node_modules/semver/preload.js +4 -0
  338. package/node_modules/npm-package-arg/node_modules/semver/range.bnf +17 -0
  339. package/node_modules/npm-package-arg/node_modules/semver/ranges/gtr.js +6 -0
  340. package/node_modules/npm-package-arg/node_modules/semver/ranges/intersects.js +9 -0
  341. package/node_modules/npm-package-arg/node_modules/semver/ranges/ltr.js +6 -0
  342. package/node_modules/npm-package-arg/node_modules/semver/ranges/max-satisfying.js +27 -0
  343. package/node_modules/npm-package-arg/node_modules/semver/ranges/min-satisfying.js +26 -0
  344. package/node_modules/npm-package-arg/node_modules/semver/ranges/min-version.js +63 -0
  345. package/node_modules/npm-package-arg/node_modules/semver/ranges/outside.js +82 -0
  346. package/node_modules/npm-package-arg/node_modules/semver/ranges/simplify.js +49 -0
  347. package/node_modules/npm-package-arg/node_modules/semver/ranges/subset.js +249 -0
  348. package/node_modules/npm-package-arg/node_modules/semver/ranges/to-comparators.js +10 -0
  349. package/node_modules/npm-package-arg/node_modules/semver/ranges/valid.js +13 -0
  350. package/node_modules/npm-package-arg/package.json +60 -0
  351. package/node_modules/picomatch/LICENSE +21 -0
  352. package/node_modules/picomatch/README.md +743 -0
  353. package/node_modules/picomatch/index.js +17 -0
  354. package/node_modules/picomatch/lib/constants.js +184 -0
  355. package/node_modules/picomatch/lib/parse.js +1425 -0
  356. package/node_modules/picomatch/lib/picomatch.js +361 -0
  357. package/node_modules/picomatch/lib/scan.js +403 -0
  358. package/node_modules/picomatch/lib/utils.js +72 -0
  359. package/node_modules/picomatch/package.json +83 -0
  360. package/node_modules/picomatch/posix.js +3 -0
  361. package/node_modules/proc-log/LICENSE +15 -0
  362. package/node_modules/proc-log/README.md +226 -0
  363. package/node_modules/proc-log/lib/index.js +158 -0
  364. package/node_modules/proc-log/package.json +46 -0
  365. package/node_modules/smol-toml/LICENSE +24 -0
  366. package/node_modules/smol-toml/README.md +605 -0
  367. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  368. package/node_modules/smol-toml/dist/date.js +156 -0
  369. package/node_modules/smol-toml/dist/error.d.ts +37 -0
  370. package/node_modules/smol-toml/dist/error.js +67 -0
  371. package/node_modules/smol-toml/dist/extract.js +289 -0
  372. package/node_modules/smol-toml/dist/index.cjs +770 -0
  373. package/node_modules/smol-toml/dist/index.d.ts +44 -0
  374. package/node_modules/smol-toml/dist/index.js +34 -0
  375. package/node_modules/smol-toml/dist/parse.d.ts +73 -0
  376. package/node_modules/smol-toml/dist/parse.js +164 -0
  377. package/node_modules/smol-toml/dist/primitive.js +151 -0
  378. package/node_modules/smol-toml/dist/stringify.d.ts +32 -0
  379. package/node_modules/smol-toml/dist/stringify.js +219 -0
  380. package/node_modules/smol-toml/dist/struct.js +156 -0
  381. package/node_modules/smol-toml/dist/util.d.ts +43 -0
  382. package/node_modules/smol-toml/dist/util.js +57 -0
  383. package/node_modules/smol-toml/package.json +68 -0
  384. package/node_modules/typescript/bin/tsc +0 -0
  385. package/node_modules/typescript/bin/tsserver +0 -0
  386. package/node_modules/unbash/LICENSE +15 -0
  387. package/node_modules/unbash/README.md +289 -0
  388. package/node_modules/unbash/dist/ansi-c.d.ts +5 -0
  389. package/node_modules/unbash/dist/ansi-c.js +130 -0
  390. package/node_modules/unbash/dist/arithmetic.d.ts +11 -0
  391. package/node_modules/unbash/dist/arithmetic.js +530 -0
  392. package/node_modules/unbash/dist/assignment.d.ts +15 -0
  393. package/node_modules/unbash/dist/assignment.js +118 -0
  394. package/node_modules/unbash/dist/chars.d.ts +41 -0
  395. package/node_modules/unbash/dist/chars.js +41 -0
  396. package/node_modules/unbash/dist/command.d.ts +14 -0
  397. package/node_modules/unbash/dist/command.js +41 -0
  398. package/node_modules/unbash/dist/heredoc.d.ts +18 -0
  399. package/node_modules/unbash/dist/heredoc.js +25 -0
  400. package/node_modules/unbash/dist/internal-types.d.ts +87 -0
  401. package/node_modules/unbash/dist/internal-types.js +1 -0
  402. package/node_modules/unbash/dist/lexer.d.ts +202 -0
  403. package/node_modules/unbash/dist/lexer.js +3930 -0
  404. package/node_modules/unbash/dist/parser.d.ts +4 -0
  405. package/node_modules/unbash/dist/parser.js +1295 -0
  406. package/node_modules/unbash/dist/parts.d.ts +17 -0
  407. package/node_modules/unbash/dist/parts.js +82 -0
  408. package/node_modules/unbash/dist/printer.d.ts +2 -0
  409. package/node_modules/unbash/dist/printer.js +536 -0
  410. package/node_modules/unbash/dist/types.d.ts +494 -0
  411. package/node_modules/unbash/dist/types.js +1 -0
  412. package/node_modules/unbash/dist/word.d.ts +22 -0
  413. package/node_modules/unbash/dist/word.js +102 -0
  414. package/node_modules/unbash/package.json +80 -0
  415. package/node_modules/validate-npm-package-name/LICENSE +6 -0
  416. package/node_modules/validate-npm-package-name/README.md +120 -0
  417. package/node_modules/validate-npm-package-name/lib/builtin-modules.json +1 -0
  418. package/node_modules/validate-npm-package-name/lib/index.js +114 -0
  419. package/node_modules/validate-npm-package-name/package.json +59 -0
  420. package/node_modules/yaml/LICENSE +13 -0
  421. package/node_modules/yaml/README.md +172 -0
  422. package/node_modules/yaml/bin.mjs +11 -0
  423. package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  424. package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  425. package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  426. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  427. package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  428. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  429. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  430. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  431. package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  432. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  433. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +226 -0
  434. package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  435. package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  436. package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  437. package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  438. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  439. package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  440. package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  441. package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  442. package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  443. package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  444. package/node_modules/yaml/browser/dist/errors.js +57 -0
  445. package/node_modules/yaml/browser/dist/index.js +17 -0
  446. package/node_modules/yaml/browser/dist/log.js +11 -0
  447. package/node_modules/yaml/browser/dist/nodes/Alias.js +118 -0
  448. package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  449. package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  450. package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  451. package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  452. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  453. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  454. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  455. package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  456. package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  457. package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  458. package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  459. package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  460. package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  461. package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  462. package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  463. package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  464. package/node_modules/yaml/browser/dist/public-api.js +102 -0
  465. package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  466. package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  467. package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  468. package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  469. package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  470. package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  471. package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  472. package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  473. package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  474. package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  475. package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  476. package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  477. package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  478. package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  479. package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  480. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  481. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  482. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  483. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  484. package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  485. package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  486. package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  487. package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  488. package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  489. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  490. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  491. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  492. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  493. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  494. package/node_modules/yaml/browser/dist/util.js +11 -0
  495. package/node_modules/yaml/browser/dist/visit.js +233 -0
  496. package/node_modules/yaml/browser/index.js +5 -0
  497. package/node_modules/yaml/browser/package.json +3 -0
  498. package/node_modules/yaml/dist/cli.d.ts +8 -0
  499. package/node_modules/yaml/dist/cli.mjs +201 -0
  500. package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  501. package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  502. package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  503. package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  504. package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  505. package/node_modules/yaml/dist/compose/compose-node.js +112 -0
  506. package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  507. package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  508. package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  509. package/node_modules/yaml/dist/compose/composer.js +224 -0
  510. package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  511. package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  512. package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  513. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  514. package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  515. package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  516. package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  517. package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  518. package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  519. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  520. package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  521. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +228 -0
  522. package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  523. package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  524. package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  525. package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  526. package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  527. package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  528. package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  529. package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  530. package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  531. package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  532. package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  533. package/node_modules/yaml/dist/doc/Document.js +337 -0
  534. package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  535. package/node_modules/yaml/dist/doc/anchors.js +76 -0
  536. package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  537. package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  538. package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  539. package/node_modules/yaml/dist/doc/createNode.js +90 -0
  540. package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  541. package/node_modules/yaml/dist/doc/directives.js +178 -0
  542. package/node_modules/yaml/dist/errors.d.ts +21 -0
  543. package/node_modules/yaml/dist/errors.js +62 -0
  544. package/node_modules/yaml/dist/index.d.ts +25 -0
  545. package/node_modules/yaml/dist/index.js +50 -0
  546. package/node_modules/yaml/dist/log.d.ts +3 -0
  547. package/node_modules/yaml/dist/log.js +19 -0
  548. package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  549. package/node_modules/yaml/dist/nodes/Alias.js +120 -0
  550. package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  551. package/node_modules/yaml/dist/nodes/Collection.js +151 -0
  552. package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  553. package/node_modules/yaml/dist/nodes/Node.js +40 -0
  554. package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  555. package/node_modules/yaml/dist/nodes/Pair.js +39 -0
  556. package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  557. package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  558. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  559. package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  560. package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  561. package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  562. package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  563. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  564. package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  565. package/node_modules/yaml/dist/nodes/identity.js +53 -0
  566. package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  567. package/node_modules/yaml/dist/nodes/toJS.js +39 -0
  568. package/node_modules/yaml/dist/options.d.ts +350 -0
  569. package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  570. package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  571. package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  572. package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  573. package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  574. package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  575. package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  576. package/node_modules/yaml/dist/parse/cst.js +112 -0
  577. package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  578. package/node_modules/yaml/dist/parse/lexer.js +723 -0
  579. package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  580. package/node_modules/yaml/dist/parse/line-counter.js +41 -0
  581. package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  582. package/node_modules/yaml/dist/parse/parser.js +980 -0
  583. package/node_modules/yaml/dist/public-api.d.ts +44 -0
  584. package/node_modules/yaml/dist/public-api.js +107 -0
  585. package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  586. package/node_modules/yaml/dist/schema/Schema.js +39 -0
  587. package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  588. package/node_modules/yaml/dist/schema/common/map.js +19 -0
  589. package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  590. package/node_modules/yaml/dist/schema/common/null.js +17 -0
  591. package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  592. package/node_modules/yaml/dist/schema/common/seq.js +19 -0
  593. package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  594. package/node_modules/yaml/dist/schema/common/string.js +16 -0
  595. package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  596. package/node_modules/yaml/dist/schema/core/bool.js +21 -0
  597. package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  598. package/node_modules/yaml/dist/schema/core/float.js +47 -0
  599. package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  600. package/node_modules/yaml/dist/schema/core/int.js +42 -0
  601. package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  602. package/node_modules/yaml/dist/schema/core/schema.js +25 -0
  603. package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  604. package/node_modules/yaml/dist/schema/json/schema.js +64 -0
  605. package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  606. package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  607. package/node_modules/yaml/dist/schema/tags.js +99 -0
  608. package/node_modules/yaml/dist/schema/types.d.ts +92 -0
  609. package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  610. package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  611. package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  612. package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  613. package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  614. package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  615. package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  616. package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  617. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  618. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  619. package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  620. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  621. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  622. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  623. package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  624. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  625. package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  626. package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  627. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  628. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  629. package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  630. package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  631. package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  632. package/node_modules/yaml/dist/stringify/stringify.js +132 -0
  633. package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  634. package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  635. package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  636. package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  637. package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  638. package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  639. package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  640. package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  641. package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  642. package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  643. package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  644. package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  645. package/node_modules/yaml/dist/test-events.d.ts +4 -0
  646. package/node_modules/yaml/dist/test-events.js +134 -0
  647. package/node_modules/yaml/dist/util.d.ts +16 -0
  648. package/node_modules/yaml/dist/util.js +28 -0
  649. package/node_modules/yaml/dist/visit.d.ts +102 -0
  650. package/node_modules/yaml/dist/visit.js +236 -0
  651. package/node_modules/yaml/package.json +97 -0
  652. package/node_modules/yaml/util.js +2 -0
  653. package/package.json +23 -21
  654. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/scripts/check-boundaries.ts +0 -12
  655. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/scripts/run-root-owned-task.ts +0 -69
  656. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/test/global-setup.ts +0 -21
  657. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/vitest.config.ts +0 -7
  658. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/web/playwright.config.ts +0 -90
  659. package/node_modules/@ykdz/template-core/dist/project-blueprint-v2.d.ts +0 -33
  660. package/node_modules/@ykdz/template-core/dist/project-blueprint-v2.js +0 -182
  661. package/node_modules/@ykdz/template-core/dist/toolchain-baseline-update.d.ts +0 -45
  662. package/node_modules/@ykdz/template-core/dist/toolchain-baseline-update.js +0 -27
  663. package/node_modules/@ykdz/template-core/dist/toolchain-resolution.d.ts +0 -35
  664. package/node_modules/@ykdz/template-core/dist/toolchain-resolution.js +0 -189
  665. package/node_modules/valibot/dist/index.min.cjs +0 -2
  666. package/node_modules/valibot/dist/index.min.mjs +0 -2
  667. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/LICENSE +0 -0
  668. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/README.md +0 -0
  669. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/classes/comparator.js +0 -0
  670. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/classes/index.js +0 -0
  671. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/classes/range.js +0 -0
  672. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/classes/semver.js +0 -0
  673. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/clean.js +0 -0
  674. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/cmp.js +0 -0
  675. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/coerce.js +0 -0
  676. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/compare-build.js +0 -0
  677. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/compare-loose.js +0 -0
  678. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/compare.js +0 -0
  679. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/diff.js +0 -0
  680. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/eq.js +0 -0
  681. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/gt.js +0 -0
  682. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/gte.js +0 -0
  683. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/inc.js +0 -0
  684. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/lt.js +0 -0
  685. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/lte.js +0 -0
  686. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/major.js +0 -0
  687. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/minor.js +0 -0
  688. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/neq.js +0 -0
  689. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/parse.js +0 -0
  690. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/patch.js +0 -0
  691. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/prerelease.js +0 -0
  692. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/rcompare.js +0 -0
  693. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/rsort.js +0 -0
  694. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/satisfies.js +0 -0
  695. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/sort.js +0 -0
  696. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/truncate.js +0 -0
  697. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/functions/valid.js +0 -0
  698. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/index.js +0 -0
  699. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/internal/constants.js +0 -0
  700. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/internal/debug.js +0 -0
  701. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/internal/identifiers.js +0 -0
  702. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/internal/lrucache.js +0 -0
  703. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/internal/parse-options.js +0 -0
  704. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/internal/re.js +0 -0
  705. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/package.json +0 -0
  706. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/preload.js +0 -0
  707. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/range.bnf +0 -0
  708. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/gtr.js +0 -0
  709. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/intersects.js +0 -0
  710. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/ltr.js +0 -0
  711. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/max-satisfying.js +0 -0
  712. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/min-satisfying.js +0 -0
  713. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/min-version.js +0 -0
  714. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/outside.js +0 -0
  715. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/simplify.js +0 -0
  716. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/subset.js +0 -0
  717. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/to-comparators.js +0 -0
  718. /package/node_modules/{semver → @ykdz/template-builtin-presets/node_modules/semver}/ranges/valid.js +0 -0
  719. /package/node_modules/{valibot → @ykdz/template-builtin-presets/node_modules/valibot}/LICENSE.md +0 -0
  720. /package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/src/{types.d.ts → types.ts} +0 -0
@@ -0,0 +1,1146 @@
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
+ import { isBuiltin } from "node:module";
3
+ import path from "node:path";
4
+
5
+ import { parse as parseSemver, valid as validSemver } from "semver";
6
+ import parseSpdxExpression from "spdx-expression-parse";
7
+
8
+ import {
9
+ inspectPackageReleaseChangelog,
10
+ type ChangelogBlockerCode,
11
+ } from "./changelog.ts";
12
+ import { cliCommandIdentity } from "./cli-command-identity.ts";
13
+
14
+ export type NpmPublicationReadinessBlockerCode =
15
+ | "package-name"
16
+ | "cli-bin"
17
+ | "description"
18
+ | "version"
19
+ | "private"
20
+ | "manifest-contract"
21
+ | "license-id"
22
+ | "license-content"
23
+ | "repository"
24
+ | "homepage"
25
+ | "bugs"
26
+ | "readme-missing"
27
+ | "readme-content"
28
+ | "license-missing"
29
+ | "license-mismatch"
30
+ | "changelog-missing"
31
+ | ChangelogBlockerCode
32
+ | "local-template-metadata-missing"
33
+ | "local-template-metadata-invalid"
34
+ | "local-template-metadata-mismatch"
35
+ | "private-runtime-dependency";
36
+
37
+ export type NpmPublicationReadinessBlocker = {
38
+ readonly code: NpmPublicationReadinessBlockerCode;
39
+ readonly owner: {
40
+ readonly path: string;
41
+ readonly pointer?: string;
42
+ };
43
+ readonly observed: string;
44
+ readonly expected: string;
45
+ readonly nextAction: string;
46
+ };
47
+
48
+ export type NpmPublicationReadiness =
49
+ | {
50
+ readonly kind: "blocked";
51
+ readonly mode: "safe-unconfigured" | "public-intent";
52
+ readonly target: { readonly packagePath: string };
53
+ readonly blockers: readonly [
54
+ NpmPublicationReadinessBlocker,
55
+ ...NpmPublicationReadinessBlocker[],
56
+ ];
57
+ }
58
+ | {
59
+ readonly kind: "ready";
60
+ readonly target: { readonly packagePath: string };
61
+ readonly blockers: readonly [];
62
+ readonly publication: {
63
+ readonly packagePath: string;
64
+ readonly packageName: string;
65
+ readonly commandName: string;
66
+ readonly version: string;
67
+ readonly repository: string;
68
+ readonly releaseDate: string;
69
+ readonly releaseNotes: string;
70
+ };
71
+ };
72
+
73
+ type JsonObject = Record<string, unknown>;
74
+
75
+ type TextFact =
76
+ | { readonly kind: "present"; readonly source: string }
77
+ | { readonly kind: "missing" }
78
+ | { readonly kind: "unreadable"; readonly reason: string };
79
+
80
+ const publicationFiles = [
81
+ "dist",
82
+ "README.md",
83
+ "LICENSE",
84
+ "CHANGELOG.md",
85
+ ] as const;
86
+
87
+ const canonicalPublicationPrepack = "pnpm exec turbo run build --filter=.";
88
+
89
+ // 私有根 engines.node 允许两种形态:旧仓库的纯大版本("24")与初始化投影发版快照
90
+ // 的精确三段版本("24.16.0"),两者都能派生大版本;范围表达式、两段版本与 v 前缀
91
+ // 等未声明形态一律拒绝。
92
+ const nodeMajorOrExactVersionPattern = /^(\d+)(?:\.(\d+\.\d+))?$/u;
93
+
94
+ // 公开候选范围与根声明形态配对:精确根只接受同一精确值的 caret 范围,旧大版本根
95
+ // 只接受原有 `>=major`;精确根不得回退到无上界范围。
96
+ function expectedPublicNodeRange(
97
+ rootNodeDeclaration: string,
98
+ ): string | undefined {
99
+ const parsed = nodeMajorOrExactVersionPattern.exec(rootNodeDeclaration);
100
+ if (parsed === null) return undefined;
101
+ const [, major, exactRemainder] = parsed;
102
+ return exactRemainder === undefined
103
+ ? `>=${major}`
104
+ : `^${major}.${exactRemainder}`;
105
+ }
106
+
107
+ function isObject(value: unknown): value is JsonObject {
108
+ return typeof value === "object" && value !== null && !Array.isArray(value);
109
+ }
110
+
111
+ function display(value: unknown): string {
112
+ if (value === undefined) return "missing";
113
+ try {
114
+ return JSON.stringify(value);
115
+ } catch {
116
+ return `[unserializable ${typeof value}]`;
117
+ }
118
+ }
119
+
120
+ function blocker(options: {
121
+ readonly code: NpmPublicationReadinessBlockerCode;
122
+ readonly path: string;
123
+ readonly pointer?: string;
124
+ readonly observed: string;
125
+ readonly expected: string;
126
+ readonly nextAction: string;
127
+ }): NpmPublicationReadinessBlocker {
128
+ return {
129
+ code: options.code,
130
+ owner: {
131
+ path: options.path,
132
+ ...(options.pointer === undefined ? {} : { pointer: options.pointer }),
133
+ },
134
+ observed: options.observed,
135
+ expected: options.expected,
136
+ nextAction: options.nextAction,
137
+ };
138
+ }
139
+
140
+ function compareBlockers(
141
+ left: NpmPublicationReadinessBlocker,
142
+ right: NpmPublicationReadinessBlocker,
143
+ ): number {
144
+ const leftKey = `${left.owner.path}\u0000${left.owner.pointer ?? ""}\u0000${left.code}`;
145
+ const rightKey = `${right.owner.path}\u0000${right.owner.pointer ?? ""}\u0000${right.code}`;
146
+ return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0;
147
+ }
148
+
149
+ async function textFact(filePath: string): Promise<TextFact> {
150
+ try {
151
+ return { kind: "present", source: await readFile(filePath, "utf8") };
152
+ } catch (error) {
153
+ if (
154
+ isObject(error) &&
155
+ (error.code === "ENOENT" || error.code === "ENOTDIR")
156
+ ) {
157
+ return { kind: "missing" };
158
+ }
159
+ return {
160
+ kind: "unreadable",
161
+ reason: error instanceof Error ? error.message : String(error),
162
+ };
163
+ }
164
+ }
165
+
166
+ function parseJsonFact(fact: TextFact): JsonObject | undefined {
167
+ if (fact.kind !== "present") return undefined;
168
+ try {
169
+ const value: unknown = JSON.parse(fact.source);
170
+ return isObject(value) ? value : undefined;
171
+ } catch {
172
+ return undefined;
173
+ }
174
+ }
175
+
176
+ function validNpmPackageName(value: string): boolean {
177
+ if (
178
+ value.length === 0 ||
179
+ value.length > 214 ||
180
+ value !== value.trim() ||
181
+ value !== value.toLowerCase() ||
182
+ value === "." ||
183
+ value === ".." ||
184
+ value === "node_modules" ||
185
+ value === "favicon.ico" ||
186
+ isBuiltin(value)
187
+ ) {
188
+ return false;
189
+ }
190
+
191
+ const scoped = /^@([^/]+)\/([^/]+)$/u.exec(value);
192
+ if (value.startsWith("@") && scoped === null) return false;
193
+ const scope = scoped?.[1];
194
+ const leaf = scoped?.[2] ?? value;
195
+ if (scope === undefined && /^[._-]/u.test(leaf)) return false;
196
+ if (scope !== undefined && leaf.startsWith(".")) return false;
197
+ if (/[~'!()*]/u.test(leaf)) return false;
198
+ return (
199
+ encodeURIComponent(leaf) === leaf &&
200
+ (scope === undefined || encodeURIComponent(scope) === scope)
201
+ );
202
+ }
203
+
204
+ function stableVersion(value: unknown): value is string {
205
+ if (typeof value !== "string" || validSemver(value) !== value) return false;
206
+ const parsed = parseSemver(value);
207
+ return (
208
+ parsed !== null &&
209
+ parsed.prerelease.length === 0 &&
210
+ parsed.build.length === 0
211
+ );
212
+ }
213
+
214
+ function validSpdx(value: unknown): value is string {
215
+ if (typeof value !== "string" || value.length === 0) return false;
216
+ try {
217
+ parseSpdxExpression(value);
218
+ return true;
219
+ } catch {
220
+ return false;
221
+ }
222
+ }
223
+
224
+ function exactStringSet(value: unknown, expected: readonly string[]): boolean {
225
+ return (
226
+ Array.isArray(value) &&
227
+ value.every((item): item is string => typeof item === "string") &&
228
+ value.length === expected.length &&
229
+ new Set(value).size === value.length &&
230
+ expected.every((item) => value.includes(item))
231
+ );
232
+ }
233
+
234
+ function nonPlaceholderText(source: string): boolean {
235
+ const normalized = source.trim();
236
+ return (
237
+ normalized.length > 0 &&
238
+ !/\bTODO\b/iu.test(normalized) &&
239
+ !/^(?:your name|name of copyright owner|copyright holder|\{\{[A-Z][A-Z0-9_]*\}\}|\[(?:yyyy|name of copyright owner|copyright holder)\])$/iu.test(
240
+ normalized,
241
+ )
242
+ );
243
+ }
244
+
245
+ function hasNonPlaceholderCopyrightHolder(source: string): boolean {
246
+ return [
247
+ ...source.matchAll(
248
+ /^Copyright(?: \(c\))?\s+(?:\d{4}(?:-\d{4})?\s+)?([^\r\n]+)$/gimu,
249
+ ),
250
+ ].some(
251
+ (match) =>
252
+ nonPlaceholderText(match[1]!) &&
253
+ !/\[(?:yyyy|name of copyright owner|copyright holder)\]/iu.test(
254
+ match[1]!,
255
+ ),
256
+ );
257
+ }
258
+
259
+ function githubRepository(
260
+ value: unknown,
261
+ packagePath: string,
262
+ ):
263
+ | {
264
+ readonly canonicalUrl: string;
265
+ readonly webUrl: string;
266
+ }
267
+ | undefined {
268
+ if (!isObject(value)) return undefined;
269
+ if (
270
+ Object.keys(value).toSorted().join("\u0000") !==
271
+ ["directory", "type", "url"].toSorted().join("\u0000") ||
272
+ value.type !== "git" ||
273
+ value.directory !== packagePath ||
274
+ typeof value.url !== "string"
275
+ ) {
276
+ return undefined;
277
+ }
278
+ const match =
279
+ /^git\+https:\/\/github\.com\/([A-Za-z0-9](?:[A-Za-z0-9-]{0,38}))\/([A-Za-z0-9._-]+)\.git$/u.exec(
280
+ value.url,
281
+ );
282
+ if (match === null || match[2]!.endsWith(".")) return undefined;
283
+ return {
284
+ canonicalUrl: value.url,
285
+ webUrl: `https://github.com/${match[1]}/${match[2]}`,
286
+ };
287
+ }
288
+
289
+ function validRecordOfStrings(value: unknown): value is JsonObject {
290
+ return (
291
+ isObject(value) &&
292
+ Object.values(value).every((item) => typeof item === "string")
293
+ );
294
+ }
295
+
296
+ function jsonPointerSegment(value: string): string {
297
+ return value.replaceAll("~", "~0").replaceAll("/", "~1");
298
+ }
299
+
300
+ function runtimeDependencyNames(manifest: JsonObject): readonly string[] {
301
+ return [manifest.dependencies, manifest.optionalDependencies].flatMap(
302
+ (value) => (isObject(value) ? Object.keys(value) : []),
303
+ );
304
+ }
305
+
306
+ function workspacePatterns(source: string): readonly string[] {
307
+ const lines = source.split(/\r?\n/u);
308
+ const patterns: string[] = [];
309
+ let inPackages = false;
310
+ for (const line of lines) {
311
+ if (/^packages:\s*$/u.test(line)) {
312
+ inPackages = true;
313
+ continue;
314
+ }
315
+ if (inPackages && /^\S/u.test(line)) break;
316
+ const item = /^\s+-\s+["']?([^"']+?)["']?\s*$/u.exec(line)?.[1];
317
+ if (inPackages && item !== undefined) patterns.push(item);
318
+ }
319
+ return patterns;
320
+ }
321
+
322
+ async function actualWorkspaceManifests(repositoryRoot: string): Promise<{
323
+ readonly manifests: readonly {
324
+ readonly path: string;
325
+ readonly manifest: JsonObject;
326
+ }[];
327
+ readonly failures: readonly {
328
+ readonly path: string;
329
+ readonly reason: string;
330
+ }[];
331
+ }> {
332
+ const workspace = await textFact(
333
+ path.join(repositoryRoot, "pnpm-workspace.yaml"),
334
+ );
335
+ if (workspace.kind !== "present") {
336
+ return {
337
+ manifests: [],
338
+ failures: [
339
+ {
340
+ path: "pnpm-workspace.yaml",
341
+ reason: workspace.kind === "missing" ? "missing" : workspace.reason,
342
+ },
343
+ ],
344
+ };
345
+ }
346
+ const manifests: { path: string; manifest: JsonObject }[] = [];
347
+ const failures: { path: string; reason: string }[] = [];
348
+ const patterns = workspacePatterns(workspace.source);
349
+ if (patterns.length === 0) {
350
+ failures.push({
351
+ path: "pnpm-workspace.yaml",
352
+ reason: "No workspace package patterns were found",
353
+ });
354
+ }
355
+ for (const pattern of patterns) {
356
+ const match = /^([a-z0-9][a-z0-9-]*)\/\*$/u.exec(pattern);
357
+ if (match === null) {
358
+ failures.push({
359
+ path: "pnpm-workspace.yaml",
360
+ reason: `Unsupported workspace package pattern ${JSON.stringify(pattern)}`,
361
+ });
362
+ continue;
363
+ }
364
+ const collection = match[1]!;
365
+ let entries;
366
+ try {
367
+ entries = await readdir(path.join(repositoryRoot, collection), {
368
+ withFileTypes: true,
369
+ });
370
+ } catch (error) {
371
+ if (isObject(error) && error.code === "ENOENT") continue;
372
+ failures.push({
373
+ path: collection,
374
+ reason: error instanceof Error ? error.message : String(error),
375
+ });
376
+ continue;
377
+ }
378
+ for (const entry of entries) {
379
+ if (!entry.isDirectory()) continue;
380
+ const packagePath = `${collection}/${entry.name}`;
381
+ const manifestFact = await textFact(
382
+ path.join(repositoryRoot, packagePath, "package.json"),
383
+ );
384
+ if (manifestFact.kind === "missing") continue;
385
+ const manifest = parseJsonFact(manifestFact);
386
+ if (manifest === undefined) {
387
+ failures.push({
388
+ path: `${packagePath}/package.json`,
389
+ reason:
390
+ manifestFact.kind === "unreadable"
391
+ ? manifestFact.reason
392
+ : "Invalid JSON object",
393
+ });
394
+ continue;
395
+ }
396
+ if (manifest !== undefined)
397
+ manifests.push({ path: packagePath, manifest });
398
+ }
399
+ }
400
+ return { manifests, failures };
401
+ }
402
+
403
+ function addManifestBlockers(options: {
404
+ readonly manifest: JsonObject;
405
+ readonly manifestPath: string;
406
+ readonly packagePath: string;
407
+ readonly rootManifest: JsonObject | undefined;
408
+ readonly blockers: NpmPublicationReadinessBlocker[];
409
+ }): {
410
+ readonly packageName?: string;
411
+ readonly commandName?: string;
412
+ readonly version?: string;
413
+ readonly repository?: {
414
+ readonly canonicalUrl: string;
415
+ readonly webUrl: string;
416
+ };
417
+ readonly license?: string;
418
+ } {
419
+ const { blockers, manifest, manifestPath, packagePath, rootManifest } =
420
+ options;
421
+ const packageName =
422
+ typeof manifest.name === "string" && validNpmPackageName(manifest.name)
423
+ ? manifest.name
424
+ : undefined;
425
+ if (packageName === undefined) {
426
+ blockers.push(
427
+ blocker({
428
+ code: "package-name",
429
+ path: manifestPath,
430
+ pointer: "/name",
431
+ observed: display(manifest.name),
432
+ expected: "A valid scoped or unscoped npm package name",
433
+ nextAction: "Set the final public npm package name.",
434
+ }),
435
+ );
436
+ }
437
+
438
+ let commandName: string | undefined;
439
+ try {
440
+ commandName = cliCommandIdentity(manifest).commandName;
441
+ } catch (error) {
442
+ blockers.push(
443
+ blocker({
444
+ code: "cli-bin",
445
+ path: manifestPath,
446
+ pointer: "/bin",
447
+ observed: error instanceof Error ? error.message : String(error),
448
+ expected: 'Exactly one safe bin that executes "./dist/cli.js"',
449
+ nextAction: "Correct the public CLI bin declaration.",
450
+ }),
451
+ );
452
+ }
453
+
454
+ if (
455
+ typeof manifest.description !== "string" ||
456
+ manifest.description.trim().length === 0
457
+ ) {
458
+ blockers.push(
459
+ blocker({
460
+ code: "description",
461
+ path: manifestPath,
462
+ pointer: "/description",
463
+ observed: display(manifest.description),
464
+ expected: "A non-empty public package description",
465
+ nextAction: "Describe the CLI for npm consumers.",
466
+ }),
467
+ );
468
+ }
469
+
470
+ const version = stableVersion(manifest.version)
471
+ ? manifest.version
472
+ : undefined;
473
+ if (version === undefined) {
474
+ blockers.push(
475
+ blocker({
476
+ code: "version",
477
+ path: manifestPath,
478
+ pointer: "/version",
479
+ observed: display(manifest.version),
480
+ expected: "A stable exact SemVer version",
481
+ nextAction: "Set the reviewed public package version.",
482
+ }),
483
+ );
484
+ }
485
+
486
+ if (Object.hasOwn(manifest, "private")) {
487
+ blockers.push(
488
+ blocker({
489
+ code: "private",
490
+ path: manifestPath,
491
+ pointer: "/private",
492
+ observed: display(manifest.private),
493
+ expected: "The private field to be absent",
494
+ nextAction:
495
+ "Remove private only after every publication fact is ready.",
496
+ }),
497
+ );
498
+ }
499
+
500
+ const license = validSpdx(manifest.license) ? manifest.license : undefined;
501
+ if (license === undefined) {
502
+ blockers.push(
503
+ blocker({
504
+ code: "license-id",
505
+ path: manifestPath,
506
+ pointer: "/license",
507
+ observed: display(manifest.license),
508
+ expected: "A valid SPDX license expression",
509
+ nextAction: "Set the reviewed SPDX license identifier.",
510
+ }),
511
+ );
512
+ }
513
+
514
+ const repository = githubRepository(manifest.repository, packagePath);
515
+ if (repository === undefined) {
516
+ blockers.push(
517
+ blocker({
518
+ code: "repository",
519
+ path: manifestPath,
520
+ pointer: "/repository",
521
+ observed: display(manifest.repository),
522
+ expected:
523
+ "A canonical public GitHub repository object with the Package Path directory",
524
+ nextAction: "Set the exact public GitHub repository metadata.",
525
+ }),
526
+ );
527
+ }
528
+ if (
529
+ repository === undefined ||
530
+ manifest.homepage !== `${repository.webUrl}#readme`
531
+ ) {
532
+ blockers.push(
533
+ blocker({
534
+ code: "homepage",
535
+ path: manifestPath,
536
+ pointer: "/homepage",
537
+ observed: display(manifest.homepage),
538
+ expected:
539
+ repository === undefined
540
+ ? "A homepage derived from the canonical GitHub repository"
541
+ : `${repository.webUrl}#readme`,
542
+ nextAction: "Set the package homepage from the public repository.",
543
+ }),
544
+ );
545
+ }
546
+ const expectedBugs =
547
+ repository === undefined ? undefined : `${repository.webUrl}/issues`;
548
+ if (
549
+ expectedBugs === undefined ||
550
+ !isObject(manifest.bugs) ||
551
+ Object.keys(manifest.bugs).length !== 1 ||
552
+ manifest.bugs.url !== expectedBugs
553
+ ) {
554
+ blockers.push(
555
+ blocker({
556
+ code: "bugs",
557
+ path: manifestPath,
558
+ pointer: "/bugs",
559
+ observed: display(manifest.bugs),
560
+ expected:
561
+ expectedBugs === undefined
562
+ ? "An issues URL derived from the canonical GitHub repository"
563
+ : display({ url: expectedBugs }),
564
+ nextAction: "Set the package issues URL from the public repository.",
565
+ }),
566
+ );
567
+ }
568
+
569
+ const rootNodeDeclaration =
570
+ isObject(rootManifest?.engines) &&
571
+ typeof rootManifest.engines.node === "string"
572
+ ? rootManifest.engines.node
573
+ : undefined;
574
+ const expectedPublicNodeRangeFromRoot =
575
+ rootNodeDeclaration === undefined
576
+ ? undefined
577
+ : expectedPublicNodeRange(rootNodeDeclaration);
578
+ const publishConfig = manifest.publishConfig;
579
+ const scripts = manifest.scripts;
580
+ const forbiddenFields = [
581
+ "main",
582
+ "types",
583
+ "exports",
584
+ "imports",
585
+ "provenance",
586
+ ].filter((field) => Object.hasOwn(manifest, field));
587
+ const manifestContractValid =
588
+ manifest.type === "module" &&
589
+ exactStringSet(manifest.files, publicationFiles) &&
590
+ expectedPublicNodeRangeFromRoot !== undefined &&
591
+ isObject(manifest.engines) &&
592
+ manifest.engines.node === expectedPublicNodeRangeFromRoot &&
593
+ validRecordOfStrings(manifest.dependencies) &&
594
+ typeof manifest.dependencies.commander === "string" &&
595
+ manifest.dependencies.commander.trim().length > 0 &&
596
+ isObject(scripts) &&
597
+ typeof scripts.build === "string" &&
598
+ scripts.build.length > 0 &&
599
+ scripts.prepack === canonicalPublicationPrepack &&
600
+ isObject(publishConfig) &&
601
+ Object.keys(publishConfig).toSorted().join("\u0000") ===
602
+ ["access", "registry"].join("\u0000") &&
603
+ publishConfig.access === "public" &&
604
+ publishConfig.registry === "https://registry.npmjs.org/" &&
605
+ forbiddenFields.length === 0;
606
+ if (!manifestContractValid) {
607
+ blockers.push(
608
+ blocker({
609
+ code: "manifest-contract",
610
+ path: manifestPath,
611
+ observed: display({
612
+ type: manifest.type,
613
+ files: manifest.files,
614
+ engines: manifest.engines,
615
+ scripts: manifest.scripts,
616
+ dependencies: manifest.dependencies,
617
+ publishConfig: manifest.publishConfig,
618
+ forbiddenFields,
619
+ }),
620
+ expected:
621
+ "The minimal public CLI manifest contract derived from the root Node baseline",
622
+ nextAction:
623
+ "Restore the minimal CLI files, engines, scripts, dependencies, and public publish configuration.",
624
+ }),
625
+ );
626
+ }
627
+
628
+ return {
629
+ ...(packageName === undefined ? {} : { packageName }),
630
+ ...(commandName === undefined ? {} : { commandName }),
631
+ ...(version === undefined ? {} : { version }),
632
+ ...(repository === undefined ? {} : { repository }),
633
+ ...(license === undefined ? {} : { license }),
634
+ };
635
+ }
636
+
637
+ async function addDocumentBlockers(options: {
638
+ readonly repositoryRoot: string;
639
+ readonly packagePath: string;
640
+ readonly version?: string;
641
+ readonly license?: string;
642
+ readonly blockers: NpmPublicationReadinessBlocker[];
643
+ }): Promise<{
644
+ readonly releaseDate?: string;
645
+ readonly releaseNotes?: string;
646
+ }> {
647
+ const { blockers, packagePath, repositoryRoot } = options;
648
+ const readmePath = `${packagePath}/README.md`;
649
+ const readme = await textFact(path.join(repositoryRoot, readmePath));
650
+ if (readme.kind === "missing") {
651
+ blockers.push(
652
+ blocker({
653
+ code: "readme-missing",
654
+ path: readmePath,
655
+ observed: "missing",
656
+ expected: "An independent package README",
657
+ nextAction: "Create the public package README.",
658
+ }),
659
+ );
660
+ } else if (
661
+ readme.kind === "unreadable" ||
662
+ !nonPlaceholderText(readme.source)
663
+ ) {
664
+ blockers.push(
665
+ blocker({
666
+ code: "readme-content",
667
+ path: readmePath,
668
+ observed:
669
+ readme.kind === "unreadable"
670
+ ? readme.reason
671
+ : "empty or placeholder text",
672
+ expected: "Non-placeholder documentation for npm consumers",
673
+ nextAction: "Write the public package README.",
674
+ }),
675
+ );
676
+ }
677
+
678
+ const rootLicensePath = "LICENSE";
679
+ const packageLicensePath = `${packagePath}/LICENSE`;
680
+ const [rootLicense, packageLicense] = await Promise.all([
681
+ textFact(path.join(repositoryRoot, rootLicensePath)),
682
+ textFact(path.join(repositoryRoot, packageLicensePath)),
683
+ ]);
684
+ for (const [licensePath, fact] of [
685
+ [rootLicensePath, rootLicense],
686
+ [packageLicensePath, packageLicense],
687
+ ] as const) {
688
+ if (fact.kind === "missing") {
689
+ blockers.push(
690
+ blocker({
691
+ code: "license-missing",
692
+ path: licensePath,
693
+ observed: "missing",
694
+ expected: "The reviewed public package license text",
695
+ nextAction: "Create matching root and package LICENSE files.",
696
+ }),
697
+ );
698
+ } else if (fact.kind === "unreadable" || !nonPlaceholderText(fact.source)) {
699
+ blockers.push(
700
+ blocker({
701
+ code: "license-content",
702
+ path: licensePath,
703
+ observed:
704
+ fact.kind === "unreadable"
705
+ ? fact.reason
706
+ : "empty or placeholder text",
707
+ expected: "Non-placeholder reviewed license text",
708
+ nextAction: "Write the selected license text and real holder facts.",
709
+ }),
710
+ );
711
+ }
712
+ }
713
+ if (
714
+ rootLicense.kind === "present" &&
715
+ packageLicense.kind === "present" &&
716
+ rootLicense.source !== packageLicense.source
717
+ ) {
718
+ blockers.push(
719
+ blocker({
720
+ code: "license-mismatch",
721
+ path: packageLicensePath,
722
+ observed: "Package LICENSE bytes differ from root LICENSE",
723
+ expected: "Byte-identical root and package LICENSE files",
724
+ nextAction: "Copy the reviewed license bytes to both owners.",
725
+ }),
726
+ );
727
+ }
728
+ if (
729
+ options.license !== undefined &&
730
+ (options.license === "MIT" || options.license === "Apache-2.0") &&
731
+ packageLicense.kind === "present" &&
732
+ !hasNonPlaceholderCopyrightHolder(packageLicense.source)
733
+ ) {
734
+ blockers.push(
735
+ blocker({
736
+ code: "license-content",
737
+ path: packageLicensePath,
738
+ observed: "LICENSE does not contain a non-placeholder copyright holder",
739
+ expected: `${options.license} license text with a non-placeholder copyright holder`,
740
+ nextAction:
741
+ "Write the selected license with the real copyright holder.",
742
+ }),
743
+ );
744
+ }
745
+
746
+ const changelogPath = `${packagePath}/CHANGELOG.md`;
747
+ const changelog = await textFact(path.join(repositoryRoot, changelogPath));
748
+ if (changelog.kind !== "present") {
749
+ blockers.push(
750
+ blocker({
751
+ code: "changelog-missing",
752
+ path: changelogPath,
753
+ observed: changelog.kind === "missing" ? "missing" : changelog.reason,
754
+ expected: "A package-local Keep a Changelog document",
755
+ nextAction: "Create the reviewed package changelog.",
756
+ }),
757
+ );
758
+ return {};
759
+ }
760
+ if (options.version === undefined) return {};
761
+ const inspected = inspectPackageReleaseChangelog(
762
+ changelog.source,
763
+ options.version,
764
+ );
765
+ if (inspected.blockers.length > 0) {
766
+ blockers.push(
767
+ ...inspected.blockers.map((item) => ({
768
+ ...item,
769
+ owner: { path: changelogPath },
770
+ })),
771
+ );
772
+ return {};
773
+ }
774
+ return {
775
+ ...(inspected.releaseDate === undefined
776
+ ? {}
777
+ : { releaseDate: inspected.releaseDate }),
778
+ ...(inspected.releaseNotes === undefined
779
+ ? {}
780
+ : { releaseNotes: inspected.releaseNotes }),
781
+ };
782
+ }
783
+
784
+ async function addMetadataBlockers(options: {
785
+ readonly repositoryRoot: string;
786
+ readonly packagePath: string;
787
+ readonly packageName?: string;
788
+ readonly rootManifest?: JsonObject;
789
+ readonly blockers: NpmPublicationReadinessBlocker[];
790
+ }): Promise<void> {
791
+ const metadataRoot = path.join(options.repositoryRoot, ".template");
792
+ let metadataRootState: "absent" | "directory" | "invalid";
793
+ let metadataRootReason: string | undefined;
794
+ try {
795
+ metadataRootState = (await stat(metadataRoot)).isDirectory()
796
+ ? "directory"
797
+ : "invalid";
798
+ if (metadataRootState === "invalid") {
799
+ metadataRootReason = "Local Template Metadata root is not a directory";
800
+ }
801
+ } catch (error) {
802
+ if (isObject(error) && error.code === "ENOENT") {
803
+ metadataRootState = "absent";
804
+ } else {
805
+ metadataRootState = "invalid";
806
+ metadataRootReason =
807
+ error instanceof Error ? error.message : String(error);
808
+ }
809
+ }
810
+ const blueprintPath = ".template/blueprint.json";
811
+ const generationPath = ".template/generation.json";
812
+ const [blueprintFact, generationFact] = await Promise.all([
813
+ textFact(path.join(options.repositoryRoot, blueprintPath)),
814
+ textFact(path.join(options.repositoryRoot, generationPath)),
815
+ ]);
816
+ if (
817
+ metadataRootState === "absent" &&
818
+ blueprintFact.kind === "missing" &&
819
+ generationFact.kind === "missing"
820
+ ) {
821
+ return;
822
+ }
823
+ if (metadataRootState === "invalid") {
824
+ options.blockers.push(
825
+ blocker({
826
+ code: "local-template-metadata-invalid",
827
+ path: ".template",
828
+ observed:
829
+ metadataRootReason ?? "Unreadable Local Template Metadata root",
830
+ expected: "A readable Local Template Metadata directory",
831
+ nextAction:
832
+ "Restore the .template directory before checking publication readiness.",
833
+ }),
834
+ );
835
+ }
836
+ for (const [metadataPath, fact] of [
837
+ [blueprintPath, blueprintFact],
838
+ [generationPath, generationFact],
839
+ ] as const) {
840
+ if (fact.kind === "missing") {
841
+ options.blockers.push(
842
+ blocker({
843
+ code: "local-template-metadata-missing",
844
+ path: metadataPath,
845
+ observed: "missing",
846
+ expected: "Complete Local Template Metadata when .template exists",
847
+ nextAction: "Restore both supported Local Template Metadata files.",
848
+ }),
849
+ );
850
+ } else if (fact.kind === "unreadable") {
851
+ options.blockers.push(
852
+ blocker({
853
+ code: "local-template-metadata-invalid",
854
+ path: metadataPath,
855
+ observed: fact.reason,
856
+ expected: "Readable Local Template Metadata JSON",
857
+ nextAction: "Restore the supported Local Template Metadata file.",
858
+ }),
859
+ );
860
+ }
861
+ }
862
+ const blueprint = parseJsonFact(blueprintFact);
863
+ const generation = parseJsonFact(generationFact);
864
+ const blueprintPackages =
865
+ blueprint?.schemaVersion === 3 && Array.isArray(blueprint.packages)
866
+ ? blueprint.packages
867
+ : undefined;
868
+ if (blueprintFact.kind === "present" && blueprintPackages === undefined) {
869
+ options.blockers.push(
870
+ blocker({
871
+ code: "local-template-metadata-invalid",
872
+ path: blueprintPath,
873
+ observed: "Unreadable Blueprint publication facts",
874
+ expected: "Blueprint schema version 3 with package facts",
875
+ nextAction: "Restore the canonical Blueprint.",
876
+ }),
877
+ );
878
+ }
879
+ const generationPackages =
880
+ generation?.schemaVersion === 2 &&
881
+ typeof generation.repositoryName === "string" &&
882
+ generation.repositoryName.trim().length > 0 &&
883
+ typeof generation.defaultPackageScope === "string" &&
884
+ generation.defaultPackageScope.trim().length > 0 &&
885
+ Array.isArray(generation.packages)
886
+ ? generation.packages
887
+ : undefined;
888
+ if (generationFact.kind === "present" && generationPackages === undefined) {
889
+ options.blockers.push(
890
+ blocker({
891
+ code: "local-template-metadata-invalid",
892
+ path: generationPath,
893
+ observed: "Unreadable Generation Record publication facts",
894
+ expected:
895
+ "Generation Record schema version 2 with repository, default scope, and package facts",
896
+ nextAction: "Restore the canonical Generation Record.",
897
+ }),
898
+ );
899
+ }
900
+ if (
901
+ blueprintPackages === undefined ||
902
+ generationPackages === undefined ||
903
+ generation === undefined
904
+ ) {
905
+ return;
906
+ }
907
+ const definitions = blueprintPackages.filter(
908
+ (item): item is JsonObject =>
909
+ isObject(item) && item.path === options.packagePath,
910
+ );
911
+ const records = generationPackages.filter(
912
+ (item): item is JsonObject =>
913
+ isObject(item) && item.path === options.packagePath,
914
+ );
915
+ const definition = definitions[0];
916
+ const record = records[0];
917
+ const targetId =
918
+ definition !== undefined &&
919
+ typeof definition.packageDefinitionId === "string"
920
+ ? definition.packageDefinitionId
921
+ : undefined;
922
+ const definitionsWithTargetId =
923
+ targetId === undefined
924
+ ? []
925
+ : blueprintPackages.filter(
926
+ (item): item is JsonObject =>
927
+ isObject(item) && item.packageDefinitionId === targetId,
928
+ );
929
+ const recordsWithTargetId =
930
+ targetId === undefined
931
+ ? []
932
+ : generationPackages.filter(
933
+ (item): item is JsonObject =>
934
+ isObject(item) && item.packageDefinitionId === targetId,
935
+ );
936
+ const candidateProvenance = generationPackages.filter(
937
+ (item): item is JsonObject =>
938
+ isObject(item) &&
939
+ item.definitionName === "ts-cli" &&
940
+ item.contributionIdentity === "cli-publication-candidate",
941
+ );
942
+ const initCandidates = candidateProvenance.filter(
943
+ (item) => item.planningContribution === "planInitialization",
944
+ );
945
+ const definitionMatches =
946
+ definitions.length === 1 &&
947
+ definition !== undefined &&
948
+ targetId !== undefined &&
949
+ targetId.length > 0 &&
950
+ definitionsWithTargetId.length === 1 &&
951
+ definition.name === options.packageName &&
952
+ definition.role === "cli-tool";
953
+ const recordMatches =
954
+ records.length === 1 &&
955
+ record !== undefined &&
956
+ definition !== undefined &&
957
+ recordsWithTargetId.length === 1 &&
958
+ record.packageDefinitionId === definition.packageDefinitionId &&
959
+ candidateProvenance.length === 1 &&
960
+ initCandidates.length === 1 &&
961
+ initCandidates[0] === record;
962
+ const repositoryMatches =
963
+ generation.repositoryName === options.rootManifest?.name;
964
+ if (!definitionMatches || !recordMatches || !repositoryMatches) {
965
+ options.blockers.push(
966
+ blocker({
967
+ code: "local-template-metadata-mismatch",
968
+ path: !definitionMatches ? blueprintPath : generationPath,
969
+ observed: display({
970
+ definitions,
971
+ records,
972
+ definitionsWithTargetId,
973
+ recordsWithTargetId,
974
+ candidateProvenance,
975
+ repositoryName: generation.repositoryName,
976
+ }),
977
+ expected:
978
+ "Exactly one matching public CLI target with stable ID and candidate provenance",
979
+ nextAction:
980
+ "Restore the matching Blueprint name and unchanged candidate planning facts.",
981
+ }),
982
+ );
983
+ }
984
+ }
985
+
986
+ export async function inspectNpmPublicationReadiness(options: {
987
+ readonly repositoryRoot: string;
988
+ readonly packagePath: string;
989
+ }): Promise<NpmPublicationReadiness> {
990
+ const repositoryRoot = path.resolve(options.repositoryRoot);
991
+ const packagePath = options.packagePath.split(path.sep).join("/");
992
+ const targetRoot = path.resolve(repositoryRoot, packagePath);
993
+ const safePackagePath =
994
+ /^[a-z0-9][a-z0-9-]*\/[a-z0-9][a-z0-9-]*$/u.test(packagePath) &&
995
+ targetRoot.startsWith(`${repositoryRoot}${path.sep}`);
996
+ const manifestPath = `${packagePath}/package.json`;
997
+ const blockers: NpmPublicationReadinessBlocker[] = [];
998
+ if (!safePackagePath) {
999
+ blockers.push(
1000
+ blocker({
1001
+ code: "manifest-contract",
1002
+ path: manifestPath,
1003
+ observed: options.packagePath,
1004
+ expected: "A safe two-segment Package Path inside the repository",
1005
+ nextAction:
1006
+ "Use the candidate Package Path projected by the repository.",
1007
+ }),
1008
+ );
1009
+ return {
1010
+ kind: "blocked",
1011
+ mode: "public-intent",
1012
+ target: { packagePath },
1013
+ blockers: blockers as [
1014
+ NpmPublicationReadinessBlocker,
1015
+ ...NpmPublicationReadinessBlocker[],
1016
+ ],
1017
+ };
1018
+ }
1019
+
1020
+ const [manifestFact, rootManifestFact] = await Promise.all([
1021
+ textFact(path.join(repositoryRoot, manifestPath)),
1022
+ textFact(path.join(repositoryRoot, "package.json")),
1023
+ ]);
1024
+ const manifest = parseJsonFact(manifestFact);
1025
+ const rootManifest = parseJsonFact(rootManifestFact);
1026
+ if (manifest === undefined) {
1027
+ blockers.push(
1028
+ blocker({
1029
+ code: "manifest-contract",
1030
+ path: manifestPath,
1031
+ observed:
1032
+ manifestFact.kind === "missing"
1033
+ ? "missing"
1034
+ : manifestFact.kind === "unreadable"
1035
+ ? manifestFact.reason
1036
+ : "Invalid JSON object",
1037
+ expected: "A readable public CLI package manifest",
1038
+ nextAction: "Restore the candidate package manifest.",
1039
+ }),
1040
+ );
1041
+ return {
1042
+ kind: "blocked",
1043
+ mode: "public-intent",
1044
+ target: { packagePath },
1045
+ blockers: blockers as [
1046
+ NpmPublicationReadinessBlocker,
1047
+ ...NpmPublicationReadinessBlocker[],
1048
+ ],
1049
+ };
1050
+ }
1051
+
1052
+ const mode =
1053
+ manifest.private === true && manifest.version === undefined
1054
+ ? "safe-unconfigured"
1055
+ : "public-intent";
1056
+ const identity = addManifestBlockers({
1057
+ manifest,
1058
+ manifestPath,
1059
+ packagePath,
1060
+ rootManifest,
1061
+ blockers,
1062
+ });
1063
+ const documents = await addDocumentBlockers({
1064
+ repositoryRoot,
1065
+ packagePath,
1066
+ ...(identity.version === undefined ? {} : { version: identity.version }),
1067
+ ...(identity.license === undefined ? {} : { license: identity.license }),
1068
+ blockers,
1069
+ });
1070
+ await addMetadataBlockers({
1071
+ repositoryRoot,
1072
+ packagePath,
1073
+ ...(rootManifest === undefined ? {} : { rootManifest }),
1074
+ ...(identity.packageName === undefined
1075
+ ? {}
1076
+ : { packageName: identity.packageName }),
1077
+ blockers,
1078
+ });
1079
+
1080
+ const workspaceFacts = await actualWorkspaceManifests(repositoryRoot);
1081
+ for (const failure of workspaceFacts.failures) {
1082
+ blockers.push(
1083
+ blocker({
1084
+ code: "manifest-contract",
1085
+ path: failure.path,
1086
+ observed: failure.reason,
1087
+ expected: "Readable actual workspace package manifests",
1088
+ nextAction: "Restore the generated workspace membership and manifests.",
1089
+ }),
1090
+ );
1091
+ }
1092
+ for (const dependencyName of runtimeDependencyNames(manifest)) {
1093
+ const dependencyField =
1094
+ isObject(manifest.dependencies) &&
1095
+ Object.hasOwn(manifest.dependencies, dependencyName)
1096
+ ? "dependencies"
1097
+ : "optionalDependencies";
1098
+ for (const dependency of workspaceFacts.manifests) {
1099
+ if (
1100
+ dependency.manifest.name !== dependencyName ||
1101
+ dependency.manifest.private !== true
1102
+ ) {
1103
+ continue;
1104
+ }
1105
+ blockers.push(
1106
+ blocker({
1107
+ code: "private-runtime-dependency",
1108
+ path: manifestPath,
1109
+ pointer: `/${dependencyField}/${jsonPointerSegment(dependencyName)}`,
1110
+ observed: `${dependencyName} resolves to private workspace package ${dependency.path}`,
1111
+ expected: "Every direct public runtime dependency to be installable",
1112
+ nextAction:
1113
+ "Publish the dependency separately or remove the private runtime edge.",
1114
+ }),
1115
+ );
1116
+ }
1117
+ }
1118
+
1119
+ blockers.sort(compareBlockers);
1120
+ if (blockers.length > 0) {
1121
+ return {
1122
+ kind: "blocked",
1123
+ mode,
1124
+ target: { packagePath },
1125
+ blockers: blockers as [
1126
+ NpmPublicationReadinessBlocker,
1127
+ ...NpmPublicationReadinessBlocker[],
1128
+ ],
1129
+ };
1130
+ }
1131
+
1132
+ return {
1133
+ kind: "ready",
1134
+ target: { packagePath },
1135
+ blockers: [],
1136
+ publication: {
1137
+ packagePath,
1138
+ packageName: identity.packageName!,
1139
+ commandName: identity.commandName!,
1140
+ version: identity.version!,
1141
+ repository: identity.repository!.canonicalUrl,
1142
+ releaseDate: documents.releaseDate!,
1143
+ releaseNotes: documents.releaseNotes!,
1144
+ },
1145
+ };
1146
+ }