@deltabox/toolchain 2.1.1 → 2.3.2

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 (140) hide show
  1. package/CHANGELOG.md +398 -628
  2. package/README.md +6 -0
  3. package/dist/changelog.d.ts +6 -5
  4. package/dist/changelog.js +1 -1
  5. package/dist/cli/commands/providers.js +1 -1
  6. package/dist/cli/commands/reset.js +1 -1
  7. package/dist/cli/config-selection.js +1 -1
  8. package/dist/cli/index.d.ts +2 -2
  9. package/dist/cli/index.js +1 -1
  10. package/dist/cli/update-check.js +1 -1
  11. package/dist/config.d.ts +2 -2
  12. package/dist/config.js +1 -1
  13. package/dist/index.d.ts +38 -30
  14. package/dist/index.js +1 -1
  15. package/dist/migrate.d.ts +2 -2
  16. package/dist/migrate.js +1 -1
  17. package/dist/package.js +1 -1
  18. package/dist/packages/changelog/src/cli/index.js +1 -1
  19. package/dist/packages/changelog/src/index.d.ts +7 -6
  20. package/dist/packages/changelog/src/index.js +1 -1
  21. package/dist/packages/changelog/src/run-workflows.d.ts +39 -2
  22. package/dist/packages/changelog/src/run-workflows.js +1 -1
  23. package/dist/packages/changelog/src/run.d.ts +1 -1
  24. package/dist/packages/changelog/src/run.js +1 -1
  25. package/dist/packages/changelog/src/sync.js +1 -1
  26. package/dist/packages/changelog/src/templates.js +1 -1
  27. package/dist/packages/changelog/src/utils/format.d.ts +5 -3
  28. package/dist/packages/changelog/src/utils/format.js +5 -5
  29. package/dist/packages/changelog/src/utils/git.d.ts +1 -1
  30. package/dist/packages/changelog/src/utils/git.js +1 -1
  31. package/dist/packages/changelog/src/utils/reformat.d.ts +7 -2
  32. package/dist/packages/changelog/src/utils/reformat.js +5 -4
  33. package/dist/packages/changelog/src/utils/release-notes.js +1 -1
  34. package/dist/packages/changelog/src/utils/repo.js +1 -1
  35. package/dist/packages/changelog/src/utils/summary.d.ts +1 -1
  36. package/dist/packages/changelog/src/utils/types.d.ts +9 -46
  37. package/dist/packages/changelog/src/utils/versioning.d.ts +11 -14
  38. package/dist/packages/changelog/src/utils/write.js +1 -1
  39. package/dist/packages/changelog/src/workflows.d.ts +11 -3
  40. package/dist/packages/changelog/src/workflows.js +5 -5
  41. package/dist/packages/config/src/cli/index.d.ts +1 -1
  42. package/dist/packages/config/src/collect.js +1 -1
  43. package/dist/packages/config/src/config-json.js +1 -1
  44. package/dist/packages/config/src/generators/env.js +2 -2
  45. package/dist/packages/config/src/generators/markdown.js +8 -8
  46. package/dist/packages/config/src/generators/output.js +1 -0
  47. package/dist/packages/config/src/generators/types.js +3 -3
  48. package/dist/packages/config/src/index.d.ts +3 -3
  49. package/dist/packages/config/src/index.js +1 -1
  50. package/dist/packages/config/src/schema.d.ts +16 -0
  51. package/dist/packages/config/src/schema.js +1 -1
  52. package/dist/packages/config/src/types.d.ts +5 -0
  53. package/dist/packages/core/src/editor-config.js +1 -1
  54. package/dist/packages/core/src/loader.js +1 -1
  55. package/dist/packages/core/src/manifest.js +1 -1
  56. package/dist/packages/core/src/paths.js +1 -0
  57. package/dist/packages/core/src/provider-registry.js +1 -1
  58. package/dist/packages/core/src/reset.d.ts +3 -0
  59. package/dist/packages/core/src/reset.js +1 -1
  60. package/dist/packages/core/src/sync.js +1 -1
  61. package/dist/packages/core/src/vscode.js +1 -1
  62. package/dist/packages/core/src/watch.d.ts +1 -1
  63. package/dist/packages/core/src/watch.js +1 -1
  64. package/dist/packages/migrate/src/cli/index.js +1 -1
  65. package/dist/packages/migrate/src/eslint.js +1 -1
  66. package/dist/packages/migrate/src/index.d.ts +2 -2
  67. package/dist/packages/migrate/src/index.js +1 -1
  68. package/dist/packages/migrate/src/prettier.d.ts +2 -0
  69. package/dist/packages/migrate/src/prettier.js +2 -2
  70. package/dist/packages/migrate/src/vite-target.js +1 -1
  71. package/dist/packages/project/src/cli/index.js +1 -1
  72. package/dist/packages/project/src/index.d.ts +4 -4
  73. package/dist/packages/project/src/index.js +1 -1
  74. package/dist/packages/project/src/typescript.d.ts +4 -2
  75. package/dist/packages/project/src/typescript.js +2 -2
  76. package/dist/packages/shared/src/changelog-callbacks.d.ts +72 -0
  77. package/dist/packages/shared/src/config-schema/biome.d.ts +8 -1
  78. package/dist/packages/shared/src/config-schema/biome.js +1 -1
  79. package/dist/packages/shared/src/config-schema/changelog.d.ts +3049 -30
  80. package/dist/packages/shared/src/config-schema/changelog.js +1 -1
  81. package/dist/packages/shared/src/config-schema/ci.d.ts +1163 -23
  82. package/dist/packages/shared/src/config-schema/external.js +1 -0
  83. package/dist/packages/shared/src/config-schema/format.d.ts +16 -10
  84. package/dist/packages/shared/src/config-schema/format.js +1 -1
  85. package/dist/packages/shared/src/config-schema/generated/azure-pipelines.d.ts +10501 -0
  86. package/dist/packages/shared/src/config-schema/generated/biome-config.d.ts +5962 -0
  87. package/dist/packages/shared/src/config-schema/generated/github-workflow.d.ts +179 -0
  88. package/dist/packages/shared/src/config-schema/generated/gitlab-ci.d.ts +296 -0
  89. package/dist/packages/shared/src/config-schema/generated/oxfmt-config.d.ts +411 -0
  90. package/dist/packages/shared/src/config-schema/generated/oxlint-config.d.ts +2218 -0
  91. package/dist/packages/shared/src/config-schema/index.d.ts +5355 -142
  92. package/dist/packages/shared/src/config-schema/index.js +1 -1
  93. package/dist/packages/shared/src/config-schema/json.d.ts +18 -0
  94. package/dist/packages/shared/src/config-schema/json.js +1 -0
  95. package/dist/packages/shared/src/config-schema/logger.d.ts +10 -1
  96. package/dist/packages/shared/src/config-schema/logger.js +1 -1
  97. package/dist/packages/shared/src/config-schema/tsconfig.d.ts +5 -4
  98. package/dist/packages/shared/src/config-schema/tsconfig.js +1 -1
  99. package/dist/packages/shared/src/config-schema/vite.d.ts +5 -3
  100. package/dist/packages/shared/src/config-schema/vite.js +1 -1
  101. package/dist/packages/shared/src/config-schema/workflow.d.ts +946 -31
  102. package/dist/packages/shared/src/config-schema/workflow.js +1 -1
  103. package/dist/packages/shared/src/config-types.d.ts +257 -33
  104. package/dist/packages/shared/src/fs-utils.d.ts +12 -0
  105. package/dist/packages/shared/src/fs-utils.js +8 -1
  106. package/dist/packages/shared/src/index.d.ts +19 -11
  107. package/dist/packages/shared/src/index.js +1 -1
  108. package/dist/packages/shared/src/object-utils.d.ts +2 -0
  109. package/dist/packages/shared/src/object-utils.js +1 -1
  110. package/dist/packages/shared/src/registry-policy.d.ts +3 -2
  111. package/dist/packages/shared/src/registry-policy.js +1 -1
  112. package/dist/packages/shared/src/run.d.ts +2 -0
  113. package/dist/packages/shared/src/run.js +1 -1
  114. package/dist/packages/shared/src/string-utils.d.ts +7 -5
  115. package/dist/packages/shared/src/string-utils.js +2 -2
  116. package/dist/packages/shared/src/template.d.ts +2 -1
  117. package/dist/packages/shared/src/template.js +1 -1
  118. package/dist/packages/shared/src/toolchain.d.ts +14 -7
  119. package/dist/packages/shared/src/toolchain.js +1 -1
  120. package/dist/packages/shared/src/types.d.ts +5 -0
  121. package/dist/packages/shared/src/vite-defaults.d.ts +4 -3
  122. package/dist/packages/shared/src/vite-defaults.js +1 -1
  123. package/dist/packages/shared/src/yaml.js +5 -5
  124. package/dist/packages/template/src/scaffold.js +1 -1
  125. package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
  126. package/dist/packages/tsconfig/src/overrides.d.ts +5 -5
  127. package/dist/packages/tsdown/src/config/node.d.ts +5 -0
  128. package/dist/packages/tsdown/src/config/node.js +2 -2
  129. package/dist/packages/tsdown/src/index.d.ts +3 -3
  130. package/dist/packages/tsdown/src/index.js +1 -1
  131. package/dist/packages/vite/src/plugin.js +1 -1
  132. package/dist/packages/vite/src/vp.js +1 -1
  133. package/dist/project.d.ts +3 -3
  134. package/dist/project.js +1 -1
  135. package/dist/shared.d.ts +18 -10
  136. package/dist/shared.js +1 -1
  137. package/dist/tooling.js +1 -1
  138. package/dist/tsdown.d.ts +2 -2
  139. package/dist/tsdown.js +1 -1
  140. package/package.json +25 -13
@@ -1,5 +1,5 @@
1
- import"node:path";import"node:url";import.meta.url;import{applyReplacementsDeep as e}from"../../shared/src/template.js";import{DEFAULT_PACKAGE_MANAGER_VERSIONS as t}from"../../shared/src/toolchain.js";import{toYaml as n}from"../../shared/src/yaml.js";import"../../shared/src/index.js";const r={nodeVersion:`22`,yarnVersion:`4.17.1`,packageManager:`yarn`,mainBranch:`main`,devBranch:`main`,tooling:`dbx`,commitlintConfig:`commitlint.config.mjs`},i={ci:`ci.yml`,changelog:`changelog.yml`,release:`release.yml`,sync:`sync.yml`,issues:`issues.yml`},a=`.github/workflows`;function o(e){let t=(e??`.github/workflows`).replace(/\\/g,`/`).replace(/^\.?\//,``).replace(/\/+$/,``);if(/^[a-zA-Z]:/.test(t)||t.split(`/`).includes(`..`))throw Error(`invalid workflow directory "${e}" (must stay inside the project).`);return t}function s(e,t){let n=(e??t).trim();if(!n||/[\\/]/.test(n)||n===`.`||n===`..`)throw Error(`invalid workflow filename "${e}" (expected a file name).`);return n}function c(e,t,n=`${e}.yml`){let r=t&&typeof t==`object`?t:void 0,i=o(r?.dir),a=s(r?.filename,n);return i?`${i}/${a}`:a}function l(e){return e===void 0?!1:typeof e==`boolean`?e:typeof e==`string`?e.trim().length>0:e.enabled!==!1}function u(e){let n=String(e.packageManager??`yarn`);return String(e.packageManagerVersion??e.yarnVersion??t[n]??`4.17.1`)}function d(e){let t=e.config?.tokens??{},n={...r,...e.tokens,...t},i=t.packageManager;return i!==void 0&&i!==e.tokens.packageManager&&t.packageManagerVersion===void 0&&t.yarnVersion===void 0&&(delete n.packageManagerVersion,delete n.yarnVersion),t.packageManagerVersion===void 0&&t.yarnVersion!==void 0&&(n.packageManagerVersion=t.yarnVersion),n}function f(e){let t=String(e.tooling??`dbx`);switch(String(e.packageManager??`yarn`)){case`pnpm`:return`pnpm exec ${t}`;case`npm`:return`npx ${t}`;case`bun`:return`bunx ${t}`;default:return`${e.packageManager??`yarn`} ${t}`}}function p(e){let t=String(e.packageManager??`yarn`),n=u(e),r=[{name:`Checkout`,uses:`actions/checkout@v4`,with:{"fetch-depth":0,token:"${{ secrets.GITHUB_TOKEN }}"}},{name:`Setup Node`,uses:`actions/setup-node@v4`,with:{"node-version":String(e.nodeVersion)}}];return t===`bun`?[...r,{name:`Setup Bun`,uses:`oven-sh/setup-bun@v2`,with:{"bun-version":n}},{name:`Install dependencies`,run:`bun install --frozen-lockfile`}]:t===`npm`?[...r,{name:`Install dependencies`,run:`npm install -g npm@${n}\nnpm ci`}]:[...r,{name:`Enable Corepack`,run:`corepack enable\ncorepack prepare ${t}@${n} --activate`},{name:`Install dependencies`,run:t===`pnpm`?`pnpm install --frozen-lockfile`:`yarn install --immutable`}]}function m(e,t={}){let n=f(e),r=String(e.mainBranch),i=String(e.devBranch),a=t.commitlint!==!1;return{ci:{name:`CI`,on:{push:{branches:[r]},pull_request:{branches:[`release/**`,`feat/**`,`feature/**`,`fix/**`,`chore/**`]}},jobs:{ci:{"runs-on":`ubuntu-latest`,steps:[...p(e),...a?[{name:`Commitlint (Conventional Commits)`,if:"${{ github.event_name == 'pull_request' || github.event.before != '0000000000000000000000000000000000000000' }}",run:`set -euo pipefail\nbase="\${{ github.event.pull_request.base.sha || github.event.before }}"\nhead="\${{ github.event.pull_request.head.sha || github.event.after }}"\n${e.packageManager} commitlint --from "$base" --to "$head" --config ${e.commitlintConfig}`}]:[],{name:`Verify generated files are in sync`,run:`${n} sync --check`},{name:`Build`,run:`${e.packageManager} build`}]}}},changelog:{name:`Changelog (dev)`,on:{push:{branches:[i]}},permissions:{contents:`write`},concurrency:{group:`changelog-dev`,"cancel-in-progress":!1},jobs:{"generate-changelog":{"runs-on":`ubuntu-latest`,if:`!startsWith(github.event.head_commit.message, 'chore: version packages ') && !startsWith(github.event.head_commit.message, 'release: ')`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},steps:[...p(e),{name:`Generate changelog + bump versions`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,'after="${{ github.event.after }}"; [ -n "$after" ] || after="HEAD"',`boundary="$(git log --format=%H --grep='^chore: version packages ' -1 || true)"`,`if [ -n "$boundary" ]; then range="$boundary..$after"; else range="$after"; fi`,`${n} changelog --range "$range"`].join(`
2
- `)},{name:`Commit + push changelog updates`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`git diff --quiet && { echo "No changelog changes."; exit 0; }`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git add -u -- "*package.json" "*CHANGELOG.md"`,`git commit -m "chore: version packages ($(node -p "require('./package.json').version"))"`,`git push origin ${i}`].join(`
3
- `)}]}}},release:{name:`Release`,on:{push:{branches:[r]},workflow_dispatch:null},permissions:{contents:`write`,"pull-requests":`write`},concurrency:{group:`release`,"cancel-in-progress":!1},jobs:{"create-release-pr":{"runs-on":`ubuntu-latest`,if:`(github.event_name == 'push' || github.event_name == 'workflow_dispatch') && !startsWith(github.event.head_commit.message, 'chore: version packages ') && !startsWith(github.event.head_commit.message, 'release: ')`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},steps:[...p(e),{name:`Open release PR`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`version="$(node -p "require('./package.json').version")"`,`branch="release/$version"`,`if git ls-remote --exit-code --heads origin "$branch" >/dev/null 2>&1; then`,` echo "Release PR already open for $version."; exit 0`,`fi`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git checkout -b "$branch"`,`git add -A`,`git commit -m "chore: version packages ($version)" || true`,`git push origin "$branch"`,`notes="$(${n} changelog --release-notes "$version")"`,`[ -n "$notes" ] || notes="Release $version"`,`gh pr create --base ${r} --head "$branch" --title "release: $version" --body "$notes"`].join(`
4
- `)}]}}},sync:{name:`Toolchain sync`,on:{push:{branches:[.../* @__PURE__ */ new Set([r,i])]},pull_request:null},jobs:{sync:{"runs-on":`ubuntu-latest`,steps:[...p(e),{name:`Verify generated files are in sync`,run:`${n} sync --check`}]}}},issues:{name:`Issues`,on:{issues:{types:[`opened`]}},permissions:{issues:`write`},jobs:{"enforce-title":{"runs-on":`ubuntu-latest`,steps:[{name:`Check and rename issue title`,env:{GH_TOKEN:"${{ github.token }}",ISSUE_NUMBER:"${{ github.event.issue.number }}"},run:[`set -euo pipefail`,`labels=$(gh issue view "$ISSUE_NUMBER" --json labels -q '.labels[].name' || true)`,`title=$(gh issue view "$ISSUE_NUMBER" --json title -q '.title')`,`type=""`,`for label in $labels; do case "$label" in *bug*) type="bug" ;; esac; done`,`if [ -z "$type" ]; then for label in $labels; do case "$label" in *enhancement*|*feature*|*feat*) type="feat" ;; esac; done; fi`,`if [ -z "$type" ]; then echo "No bug/enhancement label on issue #$ISSUE_NUMBER; skipping."; exit 0; fi`,`prefix="[bug]"; [ "$type" = "feat" ] && prefix="[feat]"`,`stripped=$(printf '%s' "$title" | sed -E 's/^\\[(bug|feat)\\] *//i')`,`new_title="$prefix $stripped"`,`if [ "$new_title" = "$title" ]; then echo "Issue #$ISSUE_NUMBER title already conforms."; exit 0; fi`,`gh issue edit "$ISSUE_NUMBER" --title "$new_title"`].join(`
5
- `)}]}}}}}function h(e){return e.steps?Array.isArray(e.steps)?e.steps:[e.steps]:[]}function g(e,t={}){let n=structuredClone(e);if(t.pushBranches){let e=n.on.push??{};n.on.push={...e,branches:t.pushBranches}}if(t.pullRequestBranches){let e=n.on.pull_request??{};n.on.pull_request={...e,branches:t.pullRequestBranches}}t.triggers&&(n.on={...n.on,...t.triggers}),t.extra&&Object.assign(n,t.extra),t.jobs&&(n.jobs={...n.jobs,...t.jobs});let r=Object.keys(n.jobs)[0];for(let e of h(t)){let t=e.job??r;if(!t)continue;let i=n.jobs[t];i&&(i.steps=[...e.before??[],...i.steps,...e.after??[]])}return n}function _(t,r){let i=r.config??{};if(i.enabled===!1)return;let a=d(r),o=m(a,{commitlint:r.commitlint!==!1})[t],s=e(g(o,i),a);return n(s)}function v(t,r){let i=r.config??{};if(i.enabled===!1)return;let a=d(r),o=e(g({name:t,on:{},jobs:{}},i),a),s=o.on&&typeof o.on==`object`&&Object.keys(o.on).length>0,c=o.jobs&&typeof o.jobs==`object`&&Object.keys(o.jobs).length>0;if(!s||!c)throw Error(`custom workflow "${t}" must define at least one trigger and one job (use \`triggers\` and \`jobs\`, or \`extra\`).`);return n(o)}function y(e,t={},n={}){let r={};for(let a of Object.keys(i)){let o=t[a];if(!l(o))continue;let s=c(a,o,i[a]),u=s.split(`/`).pop()??s;if(typeof o==`string`){r[u]=o;continue}let d=_(a,{tokens:e,config:typeof o==`object`?o:{},...n});d&&(r[u]=d)}for(let[t,i]of Object.entries(n.custom??{})){if(!l(i))continue;let a=c(t,i),o=a.split(`/`).pop()??a;if(typeof i==`string`){r[o]=i;continue}let s=v(t,{tokens:e,config:i,...n});s&&(r[o]=s)}return r}export{a as DEFAULT_WORKFLOW_DIR,r as DEFAULT_WORKFLOW_TOKENS,i as WORKFLOW_FILENAMES,g as applyWorkflowConfig,m as defaultWorkflows,l as isEnabled,v as renderCustomWorkflow,_ as renderWorkflow,y as renderWorkflows,c as workflowFilePath};
1
+ import"node:path";import"node:url";import.meta.url;import{applyReplacementsDeep as e}from"../../shared/src/template.js";import{isVendorWorkflowConfig as t}from"../../shared/src/config-schema/workflow.js";import{DEFAULT_PACKAGE_MANAGER_VERSIONS as n}from"../../shared/src/toolchain.js";import{toYaml as r}from"../../shared/src/yaml.js";import"../../shared/src/index.js";const i={nodeVersion:`22`,yarnVersion:`4.17.1`,packageManager:`yarn`,mainBranch:`main`,devBranch:`main`,tooling:`dbx`,commitlintConfig:`commitlint.config.mjs`},a={ci:`ci.yml`,changelog:`changelog.yml`,release:`release.yml`,sync:`sync.yml`,issues:`issues.yml`},o=`.github/workflows`,s=t;function c(e,t=o){let n=(e??t).replace(/\\/g,`/`).replace(/^\.?\//,``).replace(/\/+$/,``);if(/^[a-zA-Z]:/.test(n)||n.split(`/`).includes(`..`))throw Error(`invalid workflow directory "${e}" (must stay inside the project).`);return n}function l(e,t){let n=(e??t).trim();if(!n||/[\\/]/.test(n)||n===`.`||n===`..`)throw Error(`invalid workflow filename "${e}" (expected a file name).`);return n}function u(e,t,n){switch(e){case`gitlab`:return{dir:``,filename:`.gitlab-ci.yml`};case`azure`:return{dir:``,filename:`azure-pipelines.yml`};default:return{dir:o,filename:n??`${t}.yml`}}}function d(e,t,n=`${e}.yml`){let r=t&&typeof t==`object`?t:void 0,i=u(s(r)?r.provider:`github`,e,n),a=c(r?.dir,i.dir),o=l(r?.filename,i.filename);return a?`${a}/${o}`:o}function f(e){return e===void 0?!1:typeof e==`boolean`?e:typeof e==`string`?e.trim().length>0:e.enabled!==!1}function p(e){let t=String(e.packageManager??`yarn`);return String(e.packageManagerVersion??e.yarnVersion??n[t]??`4.17.1`)}function m(e){let t=e.config?.tokens??{},n={...i,...e.tokens,...t},r=t.packageManager;return r!==void 0&&r!==e.tokens.packageManager&&t.packageManagerVersion===void 0&&t.yarnVersion===void 0&&(delete n.packageManagerVersion,delete n.yarnVersion),t.packageManagerVersion===void 0&&t.yarnVersion!==void 0&&(n.packageManagerVersion=t.yarnVersion),n}function h(e,t){let n=t??String(e.tooling??`dbx`);switch(String(e.packageManager??`yarn`)){case`pnpm`:return`pnpm exec ${n}`;case`npm`:return`npx ${n}`;case`bun`:return`bunx ${n}`;default:return`${e.packageManager??`yarn`} ${n}`}}function g(e){let t=String(e.packageManager??`yarn`),n=p(e),r=[{name:`Checkout`,uses:`actions/checkout@v4`,with:{"fetch-depth":0,token:"${{ secrets.GITHUB_TOKEN }}"}},{name:`Setup Node`,uses:`actions/setup-node@v4`,with:{"node-version":String(e.nodeVersion)}}];return t===`bun`?[...r,{name:`Setup Bun`,uses:`oven-sh/setup-bun@v2`,with:{"bun-version":n}},{name:`Install dependencies`,run:`bun install --frozen-lockfile`}]:t===`npm`?[...r,{name:`Install dependencies`,run:`npm install -g npm@${n}\nnpm ci`}]:[...r,{name:`Enable Corepack`,run:`corepack enable\ncorepack prepare ${t}@${n} --activate`},{name:`Install dependencies`,run:t===`pnpm`?`pnpm install --frozen-lockfile`:`yarn install --immutable`}]}function _(e,t={}){let n=h(e),r=String(e.mainBranch),i=String(e.devBranch),a=t.commitlint!==!1;return{ci:{name:`CI`,on:{push:{branches:[r]},pull_request:{branches:[`release/**`,`feat/**`,`feature/**`,`fix/**`,`chore/**`]}},jobs:{ci:{"runs-on":`ubuntu-latest`,steps:[...g(e),...a?[{name:`Commitlint (Conventional Commits)`,if:"${{ github.event_name == 'pull_request' || github.event.before != '0000000000000000000000000000000000000000' }}",run:`set -euo pipefail\nbase="\${{ github.event.pull_request.base.sha || github.event.before }}"\nhead="\${{ github.event.pull_request.head.sha || github.event.after }}"\n${h(e,`commitlint`)} --from "$base" --to "$head" --config "${e.commitlintConfig}"`}]:[],{name:`Verify generated files are in sync`,run:`${n} sync --check --recursive`},{name:`Build`,run:`${e.packageManager} build`}]}}},changelog:{name:`Changelog (dev)`,on:{push:{branches:[i]}},permissions:{contents:`write`},concurrency:{group:`changelog-dev`,"cancel-in-progress":!1},jobs:{"generate-changelog":{"runs-on":`ubuntu-latest`,if:`!startsWith(github.event.head_commit.message, 'chore: version packages ') && !startsWith(github.event.head_commit.message, 'release: ')`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},steps:[...g(e),{name:`Generate changelog + bump versions`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,'after="${{ github.event.after }}"; [ -n "$after" ] || after="HEAD"',`boundary="$(git log --format=%H --grep='^chore: version packages ' -1 || true)"`,`if [ -n "$boundary" ]; then range="$boundary..$after"; else range="$after"; fi`,`${n} changelog --range "$range"`].join(`
2
+ `)},{name:`Commit + push changelog updates`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`git diff --quiet && { echo "No changelog changes."; exit 0; }`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git add -- "*package.json" "*CHANGELOG.md"`,`git commit -m "chore: version packages ($(node -p "require('./package.json').version"))"`,`git push origin ${i}`].join(`
3
+ `)}]}}},release:{name:`Release`,on:{push:{branches:[r]},workflow_dispatch:null},permissions:{contents:`write`,"pull-requests":`write`},concurrency:{group:`release`,"cancel-in-progress":!1},jobs:{"create-release-pr":{"runs-on":`ubuntu-latest`,if:`(github.event_name == 'push' || github.event_name == 'workflow_dispatch') && !startsWith(github.event.head_commit.message, 'chore: version packages ') && !startsWith(github.event.head_commit.message, 'release: ')`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},steps:[...g(e),{name:`Open release PR`,env:{GITHUB_TOKEN:"${{ secrets.GITHUB_TOKEN }}"},run:[`set -euo pipefail`,`version="$(node -p "require('./package.json').version")"`,`branch="release/$version"`,`if git ls-remote --exit-code --heads origin "$branch" >/dev/null 2>&1; then`,` echo "Release PR already open for $version."; exit 0`,`fi`,`git config user.name "github-actions[bot]"`,`git config user.email "41898282+github-actions[bot]@users.noreply.github.com"`,`git checkout -b "$branch"`,`git add -A`,`git commit -m "chore: version packages ($version)" || true`,`git push origin "$branch"`,`notes="$(${n} changelog --release-notes "$version")"`,`[ -n "$notes" ] || notes="Release $version"`,`gh pr create --base ${r} --head "$branch" --title "release: $version" --body "$notes"`].join(`
4
+ `)}]}}},sync:{name:`Toolchain sync`,on:{push:{branches:[.../* @__PURE__ */ new Set([r,i])]},pull_request:null},jobs:{sync:{"runs-on":`ubuntu-latest`,steps:[...g(e),{name:`Verify generated files are in sync`,run:`${n} sync --check --recursive`}]}}},issues:{name:`Issues`,on:{issues:{types:[`opened`]}},permissions:{issues:`write`},jobs:{"enforce-title":{"runs-on":`ubuntu-latest`,steps:[{name:`Check and rename issue title`,env:{GH_TOKEN:"${{ github.token }}",ISSUE_NUMBER:"${{ github.event.issue.number }}"},run:[`set -euo pipefail`,`labels=$(gh issue view "$ISSUE_NUMBER" --json labels -q '.labels[].name' || true)`,`title=$(gh issue view "$ISSUE_NUMBER" --json title -q '.title')`,`type=""`,`for label in $labels; do case "$label" in *bug*) type="bug" ;; esac; done`,`if [ -z "$type" ]; then for label in $labels; do case "$label" in *enhancement*|*feature*|*feat*) type="feat" ;; esac; done; fi`,`if [ -z "$type" ]; then echo "No bug/enhancement label on issue #$ISSUE_NUMBER; skipping."; exit 0; fi`,`prefix="[bug]"; [ "$type" = "feat" ] && prefix="[feat]"`,`stripped=$(printf '%s' "$title" | sed -E 's/^\\[(bug|feat)\\] *//i')`,`new_title="$prefix $stripped"`,`if [ "$new_title" = "$title" ]; then echo "Issue #$ISSUE_NUMBER title already conforms."; exit 0; fi`,`gh issue edit "$ISSUE_NUMBER" --title "$new_title"`].join(`
5
+ `)}]}}}}}function v(e){return e.steps?Array.isArray(e.steps)?e.steps:[e.steps]:[]}function y(e,t={}){let n=structuredClone(e);if(t.pushBranches){let e=n.on.push??{};n.on.push={...e,branches:t.pushBranches}}if(t.pullRequestBranches){let e=n.on.pull_request??{};n.on.pull_request={...e,branches:t.pullRequestBranches}}t.triggers&&(n.on={...n.on,...t.triggers}),t.extra&&Object.assign(n,t.extra),t.jobs&&(n.jobs={...n.jobs,...t.jobs});let r=Object.keys(n.jobs)[0];for(let e of v(t)){let t=e.job??r;if(!t)continue;let i=n.jobs[t];i&&(i.steps=[...e.before??[],...i.steps,...e.after??[]])}return n}function b(t,n){let i=n.config??{};if(i.enabled===!1)return;let a=m(n),o=_(a,{commitlint:n.commitlint!==!1})[t],s=e(y(o,i),a);return r(s)}function x(t,n){let i=n.config??{};if(i.enabled===!1)return;let a=m(n),o=e(y({name:t,on:{},jobs:{}},i),a),s=o.on&&typeof o.on==`object`&&Object.keys(o.on).length>0,c=o.jobs&&typeof o.jobs==`object`&&Object.keys(o.jobs).length>0;if(!s||!c)throw Error(`custom workflow "${t}" must define at least one trigger and one job (use \`triggers\` and \`jobs\`, or \`extra\`).`);return r(o)}function S(t,n){let i=e(t.workflow,n);return r(i)}function C(e,t={},n={}){let r={};for(let i of Object.keys(a)){let o=t[i];if(!f(o))continue;let c=d(i,o,a[i]),l=c.split(`/`).pop()??c;if(typeof o==`string`){r[l]=o;continue}if(s(o)){r[l]=S(o,e);continue}let u=b(i,{tokens:e,config:typeof o==`object`?o:{},...n});u&&(r[l]=u)}for(let[t,i]of Object.entries(n.custom??{})){if(!f(i))continue;let a=d(t,i),o=a.split(`/`).pop()??a;if(typeof i==`string`){r[o]=i;continue}if(s(i)){r[o]=S(i,e);continue}let c=x(t,{tokens:e,config:i,...n});c&&(r[o]=c)}return r}export{o as DEFAULT_WORKFLOW_DIR,i as DEFAULT_WORKFLOW_TOKENS,a as WORKFLOW_FILENAMES,y as applyWorkflowConfig,_ as defaultWorkflows,f as isEnabled,s as isVendorWorkflowSetting,x as renderCustomWorkflow,S as renderVendorWorkflow,b as renderWorkflow,C as renderWorkflows,d as workflowFilePath};
@@ -1,8 +1,8 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
+ import { ConfigEngine } from "../engine.js";
3
4
  import { ToolchainCommand } from "../../../shared/src/types.js";
4
5
  import "../../../shared/src/index.js";
5
- import { ConfigEngine } from "../engine.js";
6
6
  //#region packages/config/src/cli/index.d.ts
7
7
  /** Default output locations for the config commands. */
8
8
  export interface ConfigCommandDefaults {
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{isZodSchema as e,metaOf as t,normalizeConfigSchema as n}from"./schema.js";const r=`APP_`;function i(e){let t=Array.isArray(e)?e:[e];if(t.includes(`array`))return`array`;if(t.includes(`object`))return`object`;if(t.includes(`boolean`))return`boolean`;if(t.includes(`number`)||t.includes(`integer`))return`number`;if(t.includes(`string`))return`string`}function a(t){return e(t)?t.shape:t.properties}function o(t){if(e(t))try{return i(t.toJSONSchema().type)}catch{return}return i(t.type)}function s(t){if(e(t))try{return t.toJSONSchema().default}catch{return}return t.default}function c(e){let t=Object.entries(e).map(([e,t])=>[e,s(t)]).filter(([,e])=>e!==void 0);return t.length>0?Object.fromEntries(t):void 0}function l(e,n,r,i,u,d=[]){let f=t(e),p=a(e),m=f?.envPath??f?.path??d.join(`.`),h=f?.envName??f?.env,g=f?.cliFlag??(h?`--${h.slice(h.startsWith(i)?i.length:0).toLowerCase().replace(/_/g,`-`)}`:void 0),_=p?c(p):void 0,v=p?`object`:o(e);if((!p||h||f?.cliFlag)&&n.push({path:m||(f?.id??`config`),...h?{name:h}:{},...g?{cliFlag:g}:{},...f?.description?{description:f.description}:{},...s(e)===void 0?_===void 0?{}:{default:_}:{default:s(e)},...f?.required?{required:!0}:{},...f?.secret?{secret:!0}:{},...f?.public?{public:!0}:{},...f?.scope?{scope:f.scope}:{scope:r},...v?{type:v}:{},...f?{meta:f}:{}}),p)for(let[e,t]of Object.entries(p))l(t,n,r,i,u,[...d,e])}function u(e,t=r,i={}){let a=n(e),o=[];for(let[e,n]of Object.entries(a)){let r=o.length;l(n,o,e,t,i);for(let t=r;t<o.length;t++)(!o[t].scope||o[t].scope==="default")&&(o[t].scope=e)}return o}function d(e,t,n=r,i={}){return u(e,n,i).filter(e=>e.required&&(t===void 0||e.scope===t))}function f(e){return e.meta?.envPath??e.meta?.path??e.path}export{r as DEFAULT_ENV_PREFIX,d as collectRequired,u as collectVars,f as pathOf};
1
+ import"node:path";import"node:url";import.meta.url;import{isZodSchema as e,metaOf as t,normalizeConfigSchema as n}from"./schema.js";const r=`APP_`;function i(e){let t=Array.isArray(e)?e:[e];if(t.includes(`array`))return`array`;if(t.includes(`object`))return`object`;if(t.includes(`boolean`))return`boolean`;if(t.includes(`number`)||t.includes(`integer`))return`number`;if(t.includes(`string`))return`string`}function a(t){return e(t)?t.shape:t.properties}function o(t){if(e(t))try{return i(t.toJSONSchema().type)}catch{return}return i(t.type)}function s(t){if(e(t))try{return t.toJSONSchema().default}catch{return}return t.default}function c(e){let t=Object.entries(e).map(([e,t])=>[e,s(t)]).filter(([,e])=>e!==void 0);return t.length>0?Object.fromEntries(t):void 0}function l(e,n,r,i,u,d=[]){let f=t(e),p=a(e),m=f?.envName??f?.env,h=f?.envPath??f?.path??(m?u.envPathOf?.(m):void 0)??d.join(`.`),g=f?.cliFlag??(m?`--${m.slice(m.startsWith(i)?i.length:0).toLowerCase().replace(/_/g,`-`)}`:void 0),_=p?c(p):void 0,v=p?`object`:o(e);if((!p||m||f?.cliFlag)&&n.push({path:h||(f?.id??`config`),...m?{name:m}:{},...g?{cliFlag:g}:{},...f?.description?{description:f.description}:{},...s(e)===void 0?_===void 0?{}:{default:_}:{default:s(e)},...f?.required?{required:!0}:{},...f?.secret?{secret:!0}:{},...f?.public?{public:!0}:{},...f?.scope?{scope:f.scope}:{scope:r},...v?{type:v}:{},...f?{meta:f}:{}}),p)for(let[e,t]of Object.entries(p))l(t,n,r,i,u,[...d,e])}function u(e,t=r,i={}){let a=n(e),o=[];for(let[e,n]of Object.entries(a)){let r=o.length;l(n,o,e,t,i);for(let t=r;t<o.length;t++)(!o[t].scope||o[t].scope==="default")&&(o[t].scope=e)}let s=/* @__PURE__ */ new Set;return o.filter(e=>!e.name||!s.has(e.name)&&(s.add(e.name),!0))}function d(e,t,n=r,i={}){return u(e,n,i).filter(e=>e.required&&(t===void 0||e.scope===t))}function f(e){return e.meta?.envPath??e.meta?.path??e.path}export{r as DEFAULT_ENV_PREFIX,d as collectRequired,u as collectVars,f as pathOf};
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{collectVars as e}from"./collect.js";function t(t,n={}){let r=e(t,n.envPrefix,{envPathOf:n.envPathOf}).filter(e=>e.name);return{$comment:n.comment??`Generated from the config engine — edit the config schemas instead.`,version:1,env:r.map(e=>({name:e.name??``,path:e.path,scope:e.scope,...e.description?{description:e.description}:{},...e.default===void 0?{}:{default:e.default},...e.required?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}}))}}export{t as buildConfigJson};
1
+ import"node:path";import"node:url";import.meta.url;import{collectVars as e}from"./collect.js";function t(t,n={}){let r=e(t,n.envPrefix,{envPathOf:n.envPathOf}).filter(e=>e.name);return{$comment:n.comment??`Generated from the config engine — edit the config schemas instead.`,version:1,env:r.map(e=>({name:e.name??``,path:e.path,scope:e.scope,...e.description?{description:e.description}:{},...e.default!==void 0&&!e.secret?{default:e.default}:{},...e.required?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}}))}}export{t as buildConfigJson};
@@ -1,4 +1,4 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{collectVars as t}from"../collect.js";import n from"node:fs";function r(e){return e??`Generated env typing — DO NOT EDIT.`}function i(e,n={}){let i=n.envPrefix??`APP_`,a=n.envInterfaceName??`AppEnv`,o=n.viteEnvInterfaceName??`AppViteEnv`,s=t(e,i,{envPathOf:n.envPathOf}).filter(e=>e.name),c=s.filter(e=>e.scope!==`frontend`),l=s.filter(e=>e.public),u=n.envHeader?[n.envHeader,``]:[`/**`,` * ${r(n.header)}`,` */`,``];u.push(`/** ${n.envComment??"Environment variables typed on `process.env`."} */`,`export interface ${a} {`);for(let e of c)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);u.push(`}`),u.push(``),u.push("/** Public frontend environment variables typed on `import.meta.env`. */"),u.push(`export interface ${o} {`);for(let e of l)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);return u.push(`}`),`${u.join(`
1
+ import"node:path";import"node:url";import.meta.url;import{collectVars as e}from"../collect.js";import{resolveGeneratedFile as t}from"./output.js";import n from"node:fs";function r(e){return e??`Generated env typing — DO NOT EDIT.`}function i(t,n={}){let i=n.envPrefix??`APP_`,a=n.envInterfaceName??`AppEnv`,o=n.viteEnvInterfaceName??`AppViteEnv`,s=e(t,i,{envPathOf:n.envPathOf}).filter(e=>e.name),c=s.filter(e=>e.scope!==`frontend`),l=s.filter(e=>e.public),u=n.envHeader?[n.envHeader,``]:[`/**`,` * ${r(n.header)}`,` */`,``];u.push(`/** ${n.envComment??"Environment variables typed on `process.env`."} */`,`export interface ${a} {`);for(let e of c)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);u.push(`}`),u.push(``),u.push("/** Public frontend environment variables typed on `import.meta.env`. */"),u.push(`export interface ${o} {`);for(let e of l)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);return u.push(`}`),`${u.join(`
2
2
  `).trimEnd()}\n`}function a(e={}){let t=e.envInterfaceName??`AppEnv`,n=e.viteEnvInterfaceName??`AppViteEnv`,i=e.importPath??`./env.js`;return`${e.dtsHeader?`${e.dtsHeader}\n`:`/**
3
3
  * ${r(e.header)}
4
4
  *
@@ -20,4 +20,4 @@ declare module 'vite' {
20
20
  }`:``}
21
21
 
22
22
  export {};
23
- `}function o(t,r={}){let o=r.envFile??`env.ts`,s=r.dtsFile??`env.d.ts`,c={[o]:i(t,r),[s]:a(r)};if(typeof r.outputDir==`string`){n.mkdirSync(r.outputDir,{recursive:!0});for(let[t,i]of Object.entries(c))n.writeFileSync(e.join(r.outputDir,t),i,`utf-8`)}return c}const s=o;export{o as generateConfigEnv,i as generateEnv,a as generateEnvDts,s as generateEnvTypes};
23
+ `}function o(e,r={}){let o=r.envFile??`env.ts`,s=r.dtsFile??`env.d.ts`,c={[o]:i(e,r),[s]:a(r)};if(typeof r.outputDir==`string`){n.mkdirSync(r.outputDir,{recursive:!0});for(let[e,i]of Object.entries(c))n.writeFileSync(t(r.outputDir,e),i,`utf-8`)}return c}const s=o;export{o as generateConfigEnv,i as generateEnv,a as generateEnvDts,s as generateEnvTypes};
@@ -1,11 +1,11 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{sanitizeText as t,titleCase as n}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{isSchemaType as r,isZodSchema as i,metaOf as a,normalizeConfigSchema as o,splitBaseSchema as s}from"../schema.js";import{collectVars as c}from"../collect.js";import{cliFlagLabel as l}from"./cli.js";import u from"node:fs";function d(e){return e==null?[]:(Array.isArray(e)?e:[e]).map(e=>t(String(e))).filter(Boolean)}function f(e,n){if(e===void 0||e===!1)return;let r=typeof n==`string`?t(n.trim()):``;return r?`- **Deprecated**: ${r}`:`- **Deprecated**`}function p(e){let t=d(e);return t.length===0?[]:[``,`**Example(s):**`,``,...t.flatMap((e,t)=>t?[``,e]:[e])]}function m(e,t){return t.includeRequired!==!1&&e?`- **Required**`:void 0}function h(e,n){let r=[];if(n.includeDeprecated!==!1){let t=f(e.deprecated,e.deprecationMessage);t&&r.push(t)}if(n.includeSince!==!1&&typeof e.since==`string`&&e.since.trim()&&r.push(`- **Since**: ${t(e.since.trim())}`),n.includeSee!==!1)for(let t of d(e.see))r.push(`- **See**: ${t}`);return n.includeExperimental!==!1&&e.experimental&&r.push(`- **Experimental**`),n.includeAlpha!==!1&&e.alpha&&r.push(`- **Alpha**`),n.includeBeta!==!1&&e.beta&&r.push(`- **Beta**`),r}function g(e,n){if(n.includeRemarks===!1)return[];let r=typeof e==`string`?t(e.trim()):``;return r?[``,`**Remarks:**`,``,...r.split(`
2
- `)]:[]}function _(e,n,r,i){let a=[`${r} ${n}`];if(e.type===`object`&&e.properties)return a.push(...v(e,`${r}#`,i)),a;let o=typeof e.envName==`string`?e.envName:typeof e.env==`string`?e.env:void 0;i.includeEnv!==!1&&o&&a.push(`- **Env**: \`${o}\``),i.includeCli!==!1&&typeof e.cliFlag==`string`&&a.push(`- **CLI**: \`${e.cliFlag}\``);let s=m(e.required===!0,i);return s&&a.push(s),a.push(`- **Type**: \`${e.tsType??(Array.isArray(e.type)?e.type.join(` | `):e.type)??`any`}\``),a.push(...h(e,i)),e.default!==void 0&&a.push(`- **Default**: \`${JSON.stringify(e.default)}\``),e.description&&a.push(``,t(e.description)),a.push(...g(e.remarks,i)),i.includeExamples!==!1&&a.push(...p(e.example)),a}function v(e,t,n){let r=[];for(let[i,a]of Object.entries(e.properties??{})){let e=a.cliFlag??a.envName??a.env,o=n.useFlags&&e?l(e,n):`\`${i}\``;r.push(``,..._(a,o,t,n))}return r}function y(e,t,n){let r=e.frontmatter;return r===!1?[]:[`---`,...(typeof r==`function`?r({options:e}):typeof r==`string`?r:`title: ${t}\noutline: ${JSON.stringify(n)}`).split(`
3
- `),`---`,``]}function b(e,t,r={}){let i=r.outline??[2,3,4],a={useFlags:e===(r.cliScope??`cli`),baseGroup:Array.isArray(r.baseGroup)?String(r.baseGroup[0]??`base`):String(r.baseGroup??`base`),...r.envPrefix?{envPrefix:r.envPrefix}:{},...r.shortFlags?{shortFlags:r.shortFlags}:{},...r.includeRequired===void 0?{}:{includeRequired:r.includeRequired},...r.includeDeprecated===void 0?{}:{includeDeprecated:r.includeDeprecated},...r.includeExamples===void 0?{}:{includeExamples:r.includeExamples},...r.includeSince===void 0?{}:{includeSince:r.includeSince},...r.includeSee===void 0?{}:{includeSee:r.includeSee},...r.includeRemarks===void 0?{}:{includeRemarks:r.includeRemarks},...r.includeExperimental===void 0?{}:{includeExperimental:r.includeExperimental},...r.includeAlpha===void 0?{}:{includeAlpha:r.includeAlpha},...r.includeBeta===void 0?{}:{includeBeta:r.includeBeta}},{base:o,groups:c}=s(t,a.baseGroup),l=`${n(e)} Configuration`,u=[...y(r,l,i),`# ${l}`,``,`Every setting below is configured through a config value.`,``,`## Base`,``,...v(o,`###`,a)];for(let[e,t]of Object.entries(c.properties??{}))u.push(``,`## ${n(e)}`,``,...v(t,`###`,a));return`${u.join(`
4
- `).trim()}\n`}function x(e){return e===void 0?`—`:Array.isArray(e)?`\`${e.join(`,`)}\``:typeof e==`object`?`\`${JSON.stringify(e)}\``:`\`${String(e)}\``}function S(e,t,n){for(let r of Object.values(e.properties??{})){let e=r;if(e.type===`object`&&e.properties)S(r,t,n);else if(e.env){let r=e.envDefault??e.default;n.push({name:e.env,scope:t,...e.description?{description:e.description}:{},...r===void 0?{}:{default:r},...e.required===!0?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}})}}}function C(e,t={}){let n=t.outline??[2,3,4],r=Array.isArray(t.baseGroup)?String(t.baseGroup[0]??`base`):String(t.baseGroup??`base`),i=t.labels??{},a=[],l=[],u=o(e);for(let[e,t]of Object.entries(u))S(s(t,r).base,e,l);for(let n of c(e,t.envPrefix??`APP_`,{envPathOf:t.envPathOf}))n.required&&n.name&&a.push({name:n.name,scope:n.scope,...n.description?{description:n.description}:{},...n.default===void 0?{}:{default:n.default}});let d=e=>[`| Variable | Default | Description |`,`| -------- | ------- | ----------- |`,...e.map(e=>`| \`${e.name}\` | ${x(e.default)} | ${(e.description??``).replace(/\n/g,` `).replace(/\|/g,`\\|`)} |`)].join(`
1
+ import"node:path";import"node:url";import.meta.url;import{sanitizeText as e,titleCase as t}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{isSchemaType as n,isZodSchema as r,metaOf as i,normalizeConfigSchema as a,splitBaseSchema as o,toJsonSchemaSafe as s}from"../schema.js";import{collectVars as c}from"../collect.js";import{cliFlagLabel as l}from"./cli.js";import{resolveGeneratedFile as u}from"./output.js";import d from"node:fs";function f(t){return t==null?[]:(Array.isArray(t)?t:[t]).map(t=>e(String(t))).filter(Boolean)}function p(t,n){if(t===void 0||t===!1)return;let r=typeof n==`string`?e(n.trim()):``;return r?`- **Deprecated**: ${r}`:`- **Deprecated**`}function m(e){let t=f(e);return t.length===0?[]:[``,`**Example(s):**`,``,...t.flatMap((e,t)=>t?[``,e]:[e])]}function h(e,t){return t.includeRequired!==!1&&e?`- **Required**`:void 0}function g(t,n){let r=[];if(n.includeDeprecated!==!1){let e=p(t.deprecated,t.deprecationMessage);e&&r.push(e)}if(n.includeSince!==!1&&typeof t.since==`string`&&t.since.trim()&&r.push(`- **Since**: ${e(t.since.trim())}`),n.includeSee!==!1)for(let e of f(t.see))r.push(`- **See**: ${e}`);return n.includeExperimental!==!1&&t.experimental&&r.push(`- **Experimental**`),n.includeAlpha!==!1&&t.alpha&&r.push(`- **Alpha**`),n.includeBeta!==!1&&t.beta&&r.push(`- **Beta**`),r}function _(t,n){if(n.includeRemarks===!1)return[];let r=typeof t==`string`?e(t.trim()):``;return r?[``,`**Remarks:**`,``,...r.split(`
2
+ `)]:[]}function v(t,n,r,i){let a=[`${r} ${n}`],o=typeof t.envName==`string`?t.envName:typeof t.env==`string`?t.env:void 0;i.includeEnv!==!1&&o&&a.push(`- **Env**: \`${o}\``),i.includeCli!==!1&&typeof t.cliFlag==`string`&&a.push(`- **CLI**: \`${t.cliFlag}\``);let s=h(t.required===!0,i);return s&&a.push(s),a.push(`- **Type**: \`${t.tsType??(Array.isArray(t.type)?t.type.join(` | `):t.type)??`any`}\``),a.push(...g(t,i)),t.default!==void 0&&!t.secret&&a.push(`- **Default**: \`${JSON.stringify(t.default)}\``),t.description&&a.push(``,e(t.description)),a.push(..._(t.remarks,i)),i.includeExamples!==!1&&a.push(...m(t.example)),t.type===`object`&&t.properties&&a.push(...y(t,`${r}#`,i)),a}function y(e,t,n){let r=[];for(let[i,a]of Object.entries(e.properties??{})){let e=a.cliFlag??a.envName??a.env,o=n.useFlags&&e?l(e,n):`\`${i}\``;r.push(``,...v(a,o,t,n))}return r}function b(e,t,n){let r=e.frontmatter;return r===!1?[]:[`---`,...(typeof r==`function`?r({options:e}):typeof r==`string`?r:`title: ${t}\noutline: ${JSON.stringify(n)}`).split(`
3
+ `),`---`,``]}function x(e,n,r={}){let i=r.outline??[2,3,4],a={useFlags:e===(r.cliScope??`cli`),baseGroup:Array.isArray(r.baseGroup)?String(r.baseGroup[0]??`base`):String(r.baseGroup??`base`),...r.envPrefix?{envPrefix:r.envPrefix}:{},...r.shortFlags?{shortFlags:r.shortFlags}:{},...r.includeRequired===void 0?{}:{includeRequired:r.includeRequired},...r.includeDeprecated===void 0?{}:{includeDeprecated:r.includeDeprecated},...r.includeExamples===void 0?{}:{includeExamples:r.includeExamples},...r.includeSince===void 0?{}:{includeSince:r.includeSince},...r.includeSee===void 0?{}:{includeSee:r.includeSee},...r.includeRemarks===void 0?{}:{includeRemarks:r.includeRemarks},...r.includeExperimental===void 0?{}:{includeExperimental:r.includeExperimental},...r.includeAlpha===void 0?{}:{includeAlpha:r.includeAlpha},...r.includeBeta===void 0?{}:{includeBeta:r.includeBeta}},{base:s,groups:c}=o(n,a.baseGroup),l=`${t(e)} Configuration`,u=[...b(r,l,i),`# ${l}`,``,`Every setting below is configured through a config value.`,``,`## Base`,``,...y(s,`###`,a)];for(let[e,n]of Object.entries(c.properties??{}))u.push(``,`## ${t(e)}`,``,...y(n,`###`,a));return`${u.join(`
4
+ `).trim()}\n`}function S(e){return e===void 0?`—`:Array.isArray(e)?`\`${e.join(`,`)}\``:typeof e==`object`?`\`${JSON.stringify(e)}\``:`\`${String(e)}\``}function C(e,t,n){for(let r of Object.values(e.properties??{})){let e=r;if(e.type===`object`&&e.properties){C(r,t,n);continue}let i=e.envName??e.env;if(i){let r=e.envDefault??e.default;n.push({name:i,scope:t,...e.description?{description:e.description}:{},...r!==void 0&&!e.secret?{default:r}:{},...e.required===!0?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}})}}}function w(e,t={}){let n=t.outline??[2,3,4],r=Array.isArray(t.baseGroup)?String(t.baseGroup[0]??`base`):String(t.baseGroup??`base`),i=t.labels??{},s=[],l=[],u=a(e);for(let[e,t]of Object.entries(u))C(o(t,r).base,e,l);for(let n of c(e,t.envPrefix??`APP_`,{envPathOf:t.envPathOf}))n.required&&n.name&&s.push({name:n.name,scope:n.scope,...n.description?{description:n.description}:{},...n.default!==void 0&&!n.secret?{default:n.default}:{}});let d=e=>[`| Variable | Default | Description |`,`| -------- | ------- | ----------- |`,...e.map(e=>`| \`${e.name}\` | ${S(e.default)} | ${(e.description??``).replace(/\n/g,` `).replace(/\|/g,`\\|`)} |`)].join(`
5
5
  `),f=i.title??`Environment variables`,p=t.intro??`Environment variables are prefixed with \`${t.envPrefix??`APP_`}\`.
6
6
  The underscore is a path separator, so every config value has an environment
7
7
  variable equivalent.`,m=t.requiredNote??`These variables have no safe default and **must** be set:`,h=t.coreNote??`The core (base) config values:`,g=t.references&&t.references.length?`\n## References\n\n${t.references.map(e=>`- [${e.label}](${e.href})`).join(`
8
- `)}\n`:``;return`${y(t,f,n).join(`
8
+ `)}\n`:``;return`${b(t,f,n).join(`
9
9
  `)}
10
10
  # ${f}
11
11
 
@@ -15,12 +15,12 @@ ${p}
15
15
 
16
16
  ${m}
17
17
 
18
- ${d(a)}
18
+ ${d(s)}
19
19
 
20
20
  ## ${i.core??`Core`}
21
21
 
22
22
  ${h}
23
23
 
24
24
  ${d(l)}
25
- ${g}`}function w(e,t){let n=e=>i(e)?e.toJSONSchema({target:`draft-2020-12`}):void 0;if(Array.isArray(e))return t;let a=n(e);if(a){let[e]=Object.keys(t);return e?{[e]:a}:t}if(r(e))return t;let o={};for(let[r,i]of Object.entries(t)){let t=e[r];o[r]=!Array.isArray(t)&&n(t)||i}return o}function T(t,n={}){let r=n.outline??[2,3,4],i=o(t),a={};if(n.combined){let e=n.indexFilename??`index.md`;a[e]=P(w(t,i),{...n,outline:r})}else{for(let[e,t]of Object.entries(i))a[`${e}.md`]=b(e,t,{...n,outline:r});a[n.indexFilename??`index.md`]=C(t,{...n,outline:r})}if(typeof n.outputDir==`string`){u.mkdirSync(n.outputDir,{recursive:!0});for(let[t,r]of Object.entries(a))u.writeFileSync(e.resolve(n.outputDir,t),r,`utf-8`)}return a}function E(e){return e.$ref?e.$ref.split(`/`).pop()??void 0:void 0}function D(e,t){let n=E(e);return n&&t[n]?t[n]:e}function O(e){return typeof e==`string`?`'${e}'`:String(e)}function k(e,t){let n=D(e,t),r=e.required===!0||n.required===!0||void 0,i=e.deprecated??n.deprecated,a=e.deprecationMessage??n.deprecationMessage,o=e.example??n.example,s=e.since??n.since,c=e.see??n.see,l=e.remarks??n.remarks,u=e.experimental??n.experimental,d=e.alpha??n.alpha,f=e.beta??n.beta,p=[...n.anyOf??e.anyOf??[],...n.oneOf??e.oneOf??[]];for(let e of p){let n=D(e,t);r??=e.required===!0||n.required===!0||void 0,i??=e.deprecated??n.deprecated,a??=e.deprecationMessage??n.deprecationMessage,o??=e.example??n.example,s??=e.since??n.since,c??=e.see??n.see,l??=e.remarks??n.remarks,u??=e.experimental??n.experimental,d??=e.alpha??n.alpha,f??=e.beta??n.beta}return{...r===void 0?{}:{required:r},...i===void 0?{}:{deprecated:i},...a===void 0?{}:{deprecationMessage:a},...o===void 0?{}:{example:o},...s===void 0?{}:{since:s},...c===void 0?{}:{see:c},...l===void 0?{}:{remarks:l},...u===void 0?{}:{experimental:u},...d===void 0?{}:{alpha:d},...f===void 0?{}:{beta:f}}}function A(e,t){if(e.$ref){let n=D(e,t);return n.properties||n.anyOf||n.oneOf?E(e):A(n,t)}if(e.const!==void 0)return O(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(O).join(` | `);let n=e.anyOf??e.oneOf;if(n&&n.length>0)return n.map(e=>A(e,t)).join(` | `);if(e.properties)return`object`;let r=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(r.includes(`array`))return`Array<${A(e.items??{},t)}>`;if(r.includes(`object`)){let n=e.additionalProperties;return n&&n!==!0?`Record<string, ${A(n,t)}>`:`Record<string, unknown>`}return r.length===0?`unknown`:r.map(e=>e===`integer`?`number`:e).join(` | `)}function j(e,t,n){let r=E(e);if(r){if(n.has(r))return{properties:{},required:[]};n.add(r)}let i=D(e,t);if(i.properties)return{properties:i.properties,required:Array.isArray(i.required)?i.required:[]};let a=i.anyOf??i.oneOf;if(a){let e={},r=/* @__PURE__ */ new Set;for(let i of a){let a=j(i,t,n);Object.assign(e,a.properties);for(let e of a.required)r.add(e)}return{properties:e,required:[...r]}}return(Array.isArray(i.type)?i.type:i.type?[i.type]:[]).includes(`array`)&&i.items?j(i.items,t,n):{properties:{},required:[]}}function M(e,n,r,i,a,o,s){let c=D(n,i),l=k(n,i),u=[`${r} \`${e}\``],d=m(o||l.required===!0,s);d&&u.push(d),u.push(`- **Type**: \`${A(n,i)}\``),u.push(...h(l,s));let f=n.default??c.default;f!==void 0&&u.push(`- **Default**: \`${JSON.stringify(f)}\``);let _=t(n.description??c.description??``);_&&u.push(``,_),u.push(...g(l.remarks,s)),s.includeExamples!==!1&&u.push(...p(l.example));let v=j(n,i,a),y=r.length<6?`${r}#`:r;for(let[e,t]of Object.entries(v.properties))u.push(``,...M(e,t,y,i,a,v.required.includes(e),s));return u}function N(e,t,n,r,i){let a=[],o=Array.isArray(e.required)?e.required:[];for(let[s,c]of Object.entries(e.properties??{}))a.push(``,...M(s,c,t,n,r,o.includes(s),i));return a}function P(e,t={}){let n=t.title??`Configuration`,r=[...y(t,n,t.outline??[2,3,4]),`# ${n}`,``];t.intro&&r.push(t.intro,``);for(let[n,i]of Object.entries(e)){let e=i,o=e.$defs??{},s=D(e,o),c=a(s);r.push(`## \`${n}\``,``),c?.description&&r.push(c.description,``);let l=m(c?.required===!0,t);l&&r.push(l,``);let u=h(c??{},t);u.length>0&&r.push(...u,``);let d=g(c?.remarks,t);if(d.length>0&&r.push(...d,``),t.includeExamples!==!1){let e=p(c?.example);e.length>0&&r.push(...e,``)}r.push(...N(s,`###`,o,/* @__PURE__ */ new Set,t),``)}return`${r.join(`
26
- `).trim()}\n`}export{T as generateConfigMarkdown};
25
+ ${g}`}function T(e,t){let i=e=>r(e)?s(e,{target:`draft-2020-12`}):void 0;if(Array.isArray(e))return t;let a=i(e);if(a){let[e]=Object.keys(t);return e?{[e]:a}:t}if(n(e))return t;let o={};for(let[n,r]of Object.entries(t)){let t=e[n];o[n]=!Array.isArray(t)&&i(t)||r}return o}function E(e,t={}){let n=t.outline??[2,3,4],r=a(e),i={};if(t.combined){let a=t.indexFilename??`index.md`;i[a]=F(T(e,r),{...t,outline:n})}else{for(let[e,a]of Object.entries(r))i[`${e}.md`]=x(e,a,{...t,outline:n});i[t.indexFilename??`index.md`]=w(e,{...t,outline:n})}if(typeof t.outputDir==`string`){d.mkdirSync(t.outputDir,{recursive:!0});for(let[e,n]of Object.entries(i))d.writeFileSync(u(t.outputDir,e),n,`utf-8`)}return i}function D(e){return e.$ref?e.$ref.split(`/`).pop()??void 0:void 0}function O(e,t){let n=D(e);return n&&t[n]?t[n]:e}function k(e){return typeof e==`string`?`'${e}'`:String(e)}function A(e,t){let n=O(e,t),r=e.required===!0||n.required===!0||void 0,i=e.deprecated??n.deprecated,a=e.deprecationMessage??n.deprecationMessage,o=e.example??n.example,s=e.since??n.since,c=e.see??n.see,l=e.remarks??n.remarks,u=e.experimental??n.experimental,d=e.alpha??n.alpha,f=e.beta??n.beta,p=[...n.anyOf??e.anyOf??[],...n.oneOf??e.oneOf??[]];for(let e of p){let n=O(e,t);r??=e.required===!0||n.required===!0||void 0,i??=e.deprecated??n.deprecated,a??=e.deprecationMessage??n.deprecationMessage,o??=e.example??n.example,s??=e.since??n.since,c??=e.see??n.see,l??=e.remarks??n.remarks,u??=e.experimental??n.experimental,d??=e.alpha??n.alpha,f??=e.beta??n.beta}return{...r===void 0?{}:{required:r},...i===void 0?{}:{deprecated:i},...a===void 0?{}:{deprecationMessage:a},...o===void 0?{}:{example:o},...s===void 0?{}:{since:s},...c===void 0?{}:{see:c},...l===void 0?{}:{remarks:l},...u===void 0?{}:{experimental:u},...d===void 0?{}:{alpha:d},...f===void 0?{}:{beta:f}}}function j(e,t){if(typeof e.tsType==`string`&&e.tsType.trim())return e.tsType;if(e.$ref){let n=O(e,t);return n.properties||n.anyOf||n.oneOf?D(e):j(n,t)}if(e.const!==void 0)return k(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(k).join(` | `);let n=e.anyOf??e.oneOf;if(n&&n.length>0)return n.map(e=>j(e,t)).join(` | `);if(e.properties)return`object`;let r=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(r.includes(`array`))return`Array<${j(e.items??{},t)}>`;if(r.includes(`object`)){let n=e.additionalProperties;return n&&n!==!0?`Record<string, ${j(n,t)}>`:`Record<string, unknown>`}return r.length===0?`unknown`:r.map(e=>e===`integer`?`number`:e).join(` | `)}function M(e,t,n){let r=D(e);if(r){if(n.has(r))return{properties:{},required:[]};n.add(r)}let i=O(e,t);if(e.tsType||i.tsType)return{properties:{},required:[]};if(i.properties)return{properties:i.properties,required:Array.isArray(i.required)?i.required:[]};let a=i.anyOf??i.oneOf;if(a){let e={},r=/* @__PURE__ */ new Set;for(let i of a){let a=M(i,t,n);Object.assign(e,a.properties);for(let e of a.required)r.add(e)}return{properties:e,required:[...r]}}return(Array.isArray(i.type)?i.type:i.type?[i.type]:[]).includes(`array`)&&i.items?M(i.items,t,n):{properties:{},required:[]}}function N(t,n,r,i,a,o,s){let c=O(n,i),l=A(n,i),u=[`${r} \`${t}\``],d=h(o||l.required===!0,s);d&&u.push(d),u.push(`- **Type**: \`${j(n,i)}\``),u.push(...g(l,s));let f=n.default??c.default;f!==void 0&&u.push(`- **Default**: \`${JSON.stringify(f)}\``);let p=e(n.description??c.description??``);p&&u.push(``,p),u.push(..._(l.remarks,s)),s.includeExamples!==!1&&u.push(...m(l.example));let v=M(n,i,a),y=r.length<6?`${r}#`:r;for(let[e,t]of Object.entries(v.properties))u.push(``,...N(e,t,y,i,a,v.required.includes(e),s));return u}function P(e,t,n,r,i){let a=[],o=Array.isArray(e.required)?e.required:[];for(let[s,c]of Object.entries(e.properties??{}))a.push(``,...N(s,c,t,n,r,o.includes(s),i));return a}function F(e,t={}){let n=t.title??`Configuration`,r=[...b(t,n,t.outline??[2,3,4]),`# ${n}`,``];t.intro&&r.push(t.intro,``);for(let[n,a]of Object.entries(e)){let e=a,o=e.$defs??{},s=O(e,o),c=i(s);r.push(`## \`${n}\``,``),c?.description&&r.push(c.description,``);let l=h(c?.required===!0,t);l&&r.push(l,``);let u=g(c??{},t);u.length>0&&r.push(...u,``);let d=_(c?.remarks,t);if(d.length>0&&r.push(...d,``),t.includeExamples!==!1){let e=m(c?.example);e.length>0&&r.push(...e,``)}r.push(...P(s,`###`,o,/* @__PURE__ */ new Set,t),``)}return`${r.join(`
26
+ `).trim()}\n`}export{E as generateConfigMarkdown};
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;function t(t,n){let r=e.resolve(t),i=e.resolve(r,n),a=e.relative(r,i);if(!a||a.startsWith(`..`)||e.isAbsolute(a))throw Error(`generated file "${n}" resolves outside the output directory.`);return i}export{t as resolveGeneratedFile};
@@ -1,4 +1,4 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{pascalCase as t}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{isZodSchema as n,metaOf as r,normalizeConfigSchema as i,splitBaseSchema as a,zodToSchemaMap as o}from"../schema.js";import s from"node:fs";import{generateTypes as c}from"untyped";const l={addExport:!0,partial:!0};function u(e){let t=[],n=0,r=!1;for(let i of e.split(`
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{pascalCase as t}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{isZodSchema as n,metaOf as r,normalizeConfigSchema as i,splitBaseSchema as a,zodToSchemaMap as o}from"../schema.js";import{resolveGeneratedFile as s}from"./output.js";import c from"node:fs";import{generateTypes as l}from"untyped";const u={addExport:!0,partial:!0};function d(e){let t=[],n=0,r=!1;for(let i of e.split(`
2
2
  `)){let e=i.trim();if(r)t.push(i),e.endsWith(`*/`)&&(r=!1);else if(e.startsWith(`/*`))t.push(i),e.endsWith(`*/`)||(r=!0);else if(!(e===``&&n>0)){t.push(i);for(let e of i)e===`{`||e===`(`||e===`[`?n++:(e===`}`||e===`)`||e===`]`)&&n>0&&n--}}return t.join(`
3
- `)}function d(e,t){return u(c(e,{...l,interfaceName:t}))}function f(e){let t=e.lastIndexOf(`}`);return t===-1?e:`${e.slice(0,t)} [key: string]: unknown;\n${e.slice(t)}`}function p(e){return e==null?[]:(Array.isArray(e)?e:[e]).map(e=>String(e)).filter(Boolean)}function m(e,t){let n=[];if(t.includeRequired!==!1&&e.required===!0&&n.push(`@required`),t.includeDeprecated!==!1&&e.deprecated!==void 0&&e.deprecated!==!1){let t=typeof e.deprecationMessage==`string`?e.deprecationMessage.trim():``;n.push(t?`@deprecated ${t}`:`@deprecated`)}if(t.includeExamples!==!1)for(let t of p(e.example))n.push(`@example ${t}`);if(t.includeSince!==!1&&typeof e.since==`string`&&e.since.trim()&&n.push(`@since ${e.since.trim()}`),t.includeSee!==!1)for(let t of p(e.see))n.push(`@see ${t}`);return t.includeRemarks!==!1&&typeof e.remarks==`string`&&e.remarks.trim()&&n.push(`@remarks ${e.remarks.trim()}`),t.includeExperimental!==!1&&e.experimental===!0&&n.push(`@experimental`),t.includeAlpha!==!1&&e.alpha===!0&&n.push(`@alpha`),t.includeBeta!==!1&&e.beta===!0&&n.push(`@beta`),n}function h(e,t){let n=e,{deprecated:r,deprecationMessage:i,example:a,since:o,see:s,remarks:c,experimental:l,alpha:u,beta:d,tags:f,...p}=n,g=n.required===!0,_=(Array.isArray(f)?f:[]).filter(e=>!(t.includeRequired===!1&&e===`@required`||t.includeDeprecated===!1&&e.startsWith(`@deprecated`)||t.includeExamples===!1&&e.startsWith(`@example`)||t.includeSince===!1&&e.startsWith(`@since`)||t.includeSee===!1&&e.startsWith(`@see`)||t.includeRemarks===!1&&e.startsWith(`@remarks`)||t.includeExperimental===!1&&e.startsWith(`@experimental`)||t.includeAlpha===!1&&e.startsWith(`@alpha`)||t.includeBeta===!1&&e.startsWith(`@beta`))),v=[.../* @__PURE__ */ new Set([..._,...m({required:g,deprecated:r,deprecationMessage:i,example:a,since:o,see:s,remarks:c,experimental:l,alpha:u,beta:d},t)])],y=typeof n.envName==`string`?n.envName:typeof n.env==`string`?n.env:``;t.includeEnv!==!1&&y&&v.push(`@env ${y}`),t.includeCli!==!1&&typeof n.cliFlag==`string`&&v.push(`@cli ${n.cliFlag}`);let b={...p};return g&&delete b.required,v.length>0&&(b.tags=v),b.properties&&typeof b.properties==`object`&&(b.properties=Object.fromEntries(Object.entries(b.properties).map(([e,n])=>[e,h(n,t)]))),b.items&&typeof b.items==`object`&&(b.items=h(b.items,t)),b}function g(e,t,n){let r=t,i=m({required:r.required,deprecated:r.deprecated,deprecationMessage:r.deprecationMessage,example:r.example,since:r.since,see:r.see,remarks:r.remarks,experimental:r.experimental,alpha:r.alpha,beta:r.beta},n);return i.length===0?e:`${[`/**`,...i.map(e=>` * ${e}`),` */`].join(`
4
- `)}\n${e}`}function _(e,n,i={}){let o=Array.isArray(i.baseGroup)?String(i.baseGroup[0]??`base`):String(i.baseGroup??`base`),s=r(n),c=i.interfaceNames?.[e]??s?.typeName??s?.id??`${t(e)}Config`,l=i.aliases?.[e]??``,u=e=>i.header?`${i.header}\n\n${e}`:e,p=i.overrides?.[e];if(p!==void 0)return u(`${p.trimEnd()}\n${l}`.trimEnd());let m=n.allowExtraKeys===!0;if(!n.properties)return u(`${g(`export type ${c} = ${n.tsType??`unknown`};`,n,i)}\n${l}`);let _=h(n,i),{base:v,groups:y,hasBase:b}=a(_,o),x=Object.keys(y.properties??{});if(!b){let e=g(d(_,c),n,i);return m&&(e=f(e)),u(`${e}\n${l}`)}let S=d(v,`${c}Base`),C;return C=x.length>0?d(y,c).replace(`export interface ${c} {`,`export interface ${c} extends ${c}Base {`):`export interface ${c} extends ${c}Base {}\n`,C=g(C,n,i),m&&(C=f(C)),u(`${S}\n${C}\n${l}`)}function v(e,t={}){return n(e)?Object.fromEntries(Object.entries(o(e)).map(([e,n])=>[e,_(e,n,{...t,interfaceNames:{[e]:e,...t.interfaceNames}})])):Object.fromEntries(Object.entries(i(e)).map(([e,n])=>[e,_(e,n,t)]))}function y(t,n={}){let r=n.extension??`ts`,i=v(t,n);if(typeof n.outputDir==`string`)for(let[t,a]of Object.entries(i)){let i=e.join(n.outputDir,`${t}.${r}`);s.mkdirSync(e.dirname(i),{recursive:!0}),s.writeFileSync(i,a,`utf-8`)}return i}export{y as generateConfigTypes};
3
+ `)}function f(e,t){return d(l(e,{...u,interfaceName:t}))}function p(e){let t=e.lastIndexOf(`}`);return t===-1?e:`${e.slice(0,t)} [key: string]: unknown;\n${e.slice(t)}`}function m(e){return e==null?[]:(Array.isArray(e)?e:[e]).map(e=>String(e)).filter(Boolean)}function h(e,t){let n=[];if(t.includeRequired!==!1&&e.required===!0&&n.push(`@required`),t.includeDeprecated!==!1&&e.deprecated!==void 0&&e.deprecated!==!1){let t=typeof e.deprecationMessage==`string`?e.deprecationMessage.trim():``;n.push(t?`@deprecated ${t}`:`@deprecated`)}if(t.includeExamples!==!1)for(let t of m(e.example))n.push(`@example ${t}`);if(t.includeSince!==!1&&typeof e.since==`string`&&e.since.trim()&&n.push(`@since ${e.since.trim()}`),t.includeSee!==!1)for(let t of m(e.see))n.push(`@see ${t}`);return t.includeRemarks!==!1&&typeof e.remarks==`string`&&e.remarks.trim()&&n.push(`@remarks ${e.remarks.trim()}`),t.includeExperimental!==!1&&e.experimental===!0&&n.push(`@experimental`),t.includeAlpha!==!1&&e.alpha===!0&&n.push(`@alpha`),t.includeBeta!==!1&&e.beta===!0&&n.push(`@beta`),n}function g(e,t){let n=e,{deprecated:r,deprecationMessage:i,example:a,since:o,see:s,remarks:c,experimental:l,alpha:u,beta:d,tags:f,...p}=n,m=n.required===!0,_=(Array.isArray(f)?f:[]).filter(e=>!(t.includeRequired===!1&&e===`@required`||t.includeDeprecated===!1&&e.startsWith(`@deprecated`)||t.includeExamples===!1&&e.startsWith(`@example`)||t.includeSince===!1&&e.startsWith(`@since`)||t.includeSee===!1&&e.startsWith(`@see`)||t.includeRemarks===!1&&e.startsWith(`@remarks`)||t.includeExperimental===!1&&e.startsWith(`@experimental`)||t.includeAlpha===!1&&e.startsWith(`@alpha`)||t.includeBeta===!1&&e.startsWith(`@beta`))),v=[.../* @__PURE__ */ new Set([..._,...h({required:m,deprecated:r,deprecationMessage:i,example:a,since:o,see:s,remarks:c,experimental:l,alpha:u,beta:d},t)])],y=typeof n.envName==`string`?n.envName:typeof n.env==`string`?n.env:``;t.includeEnv!==!1&&y&&v.push(`@env ${y}`),t.includeCli!==!1&&typeof n.cliFlag==`string`&&v.push(`@cli ${n.cliFlag}`);let b={...p};return m&&delete b.required,v.length>0&&(b.tags=v),b.properties&&typeof b.properties==`object`&&(b.properties=Object.fromEntries(Object.entries(b.properties).map(([e,n])=>[e,g(n,t)]))),b.items&&typeof b.items==`object`&&(b.items=g(b.items,t)),b}function _(e,t,n){let r=t,i=h({required:r.required,deprecated:r.deprecated,deprecationMessage:r.deprecationMessage,example:r.example,since:r.since,see:r.see,remarks:r.remarks,experimental:r.experimental,alpha:r.alpha,beta:r.beta},n);return i.length===0?e:`${[`/**`,...i.map(e=>` * ${e}`),` */`].join(`
4
+ `)}\n${e}`}function v(e,n,i={}){let o=Array.isArray(i.baseGroup)?String(i.baseGroup[0]??`base`):String(i.baseGroup??`base`),s=r(n),c=i.interfaceNames?.[e]??s?.typeName??s?.id??`${t(e)}Config`,l=i.aliases?.[e]??``,u=e=>i.header?`${i.header}\n\n${e}`:e,d=i.overrides?.[e];if(d!==void 0)return u(`${d.trimEnd()}\n${l}`.trimEnd());let m=n.allowExtraKeys===!0;if(!n.properties)return u(`${_(`export type ${c} = ${n.tsType??`unknown`};`,n,i)}\n${l}`);let h=g(n,i),{base:v,groups:y,hasBase:b}=a(h,o),x=Object.keys(y.properties??{});if(!b){let e=_(f(h,c),n,i);return m&&(e=p(e)),u(`${e}\n${l}`)}let S=f(v,`${c}Base`),C;return C=x.length>0?f(y,c).replace(`export interface ${c} {`,`export interface ${c} extends ${c}Base {`):`export interface ${c} extends ${c}Base {}\n`,C=_(C,n,i),m&&(C=p(C)),u(`${S}\n${C}\n${l}`)}function y(e,t={}){return n(e)?Object.fromEntries(Object.entries(o(e)).map(([e,n])=>[e,v(e,n,{...t,interfaceNames:{[e]:e,...t.interfaceNames}})])):Object.fromEntries(Object.entries(i(e)).map(([e,n])=>[e,v(e,n,t)]))}function b(t,n={}){let r=n.extension??`ts`,i=y(t,n);if(typeof n.outputDir==`string`)for(let[t,a]of Object.entries(i)){let i=s(n.outputDir,`${t}.${r}`);c.mkdirSync(e.dirname(i),{recursive:!0}),c.writeFileSync(i,a,`utf-8`)}return i}export{b as generateConfigTypes};
@@ -14,9 +14,9 @@ import { EnvSource, EnvTree, envBool, envInt, envList, envMap, envPathOf, envStr
14
14
  import { FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, formatGenerated } from "./generated-format.js";
15
15
  import "./generators/index.js";
16
16
  import { findProjectRoot, monorepoRoot } from "./root.js";
17
- import { SplitSchema, compileZodSchema, flattenBaseSchema, isSchemaType, isZodSchema, metaOf, normalizeConfigSchema, normalizeJsonSchemaMetadata, renderTsType, resolveUntypedSchema, splitBaseSchema, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition } from "./schema.js";
17
+ import { SplitSchema, ToJsonSchemaSafeOptions, compileZodSchema, flattenBaseSchema, isSchemaType, isZodFunctionSchema, isZodSchema, metaOf, normalizeConfigSchema, normalizeJsonSchemaMetadata, renderTsType, resolveUntypedSchema, splitBaseSchema, toJsonSchemaSafe, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition } from "./schema.js";
18
18
  declare namespace index_d_exports {
19
- export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectVarsOptions, ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngine, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigJsonDoc, ConfigJsonEntry, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, SplitSchema, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectRequired, collectVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, isSchemaType, isZodSchema, metaOf, monorepoRoot, normalizeConfigSchema, normalizeJsonSchemaMetadata, parseEnvTree, pathOf, readEnvPath, renderTsType, resolveUntypedSchema, splitBaseSchema, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition };
19
+ export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectVarsOptions, ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngine, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigJsonDoc, ConfigJsonEntry, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, SplitSchema, ToJsonSchemaSafeOptions, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectRequired, collectVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, isSchemaType, isZodFunctionSchema, isZodSchema, metaOf, monorepoRoot, normalizeConfigSchema, normalizeJsonSchemaMetadata, parseEnvTree, pathOf, readEnvPath, renderTsType, resolveUntypedSchema, splitBaseSchema, toJsonSchemaSafe, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition };
20
20
  }
21
21
  //#endregion
22
- export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectVarsOptions, ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngine, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigJsonDoc, ConfigJsonEntry, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, SplitSchema, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectRequired, collectVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, index_d_exports, isSchemaType, isZodSchema, metaOf, monorepoRoot, normalizeConfigSchema, normalizeJsonSchemaMetadata, parseEnvTree, pathOf, readEnvPath, renderTsType, resolveUntypedSchema, splitBaseSchema, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition };
22
+ export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectVarsOptions, ConfigBaseMeta, ConfigCliMeta, ConfigDef, ConfigEngine, ConfigEngineFlatten, ConfigEngineOptions, ConfigEnvMeta, ConfigGroup, ConfigJsonDoc, ConfigJsonEntry, ConfigMeta, ConfigSchema, ConfigSchemaInput, ConfigSchemaMap, ConfigSchemaType, ConfigScope, ConfigScopes, ConfigTypeMeta, ConfigValueType, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, FormatGeneratedOptions, GENERATED_FORMAT_OPTIONS, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, SplitSchema, ToJsonSchemaSafeOptions, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectRequired, collectVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, formatGenerated, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, index_d_exports, isSchemaType, isZodFunctionSchema, isZodSchema, metaOf, monorepoRoot, normalizeConfigSchema, normalizeJsonSchemaMetadata, parseEnvTree, pathOf, readEnvPath, renderTsType, resolveUntypedSchema, splitBaseSchema, toJsonSchemaSafe, toSchemaType, zodToJsonSchema, zodToSchemaMap, zodToUntypedDefinition };
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{compileZodSchema as t,flattenBaseSchema as n,isSchemaType as r,isZodSchema as i,metaOf as a,normalizeConfigSchema as o,normalizeJsonSchemaMetadata as s,renderTsType as c,resolveUntypedSchema as l,splitBaseSchema as u,toSchemaType as d,zodToJsonSchema as f,zodToSchemaMap as p,zodToUntypedDefinition as m}from"./schema.js";import{DEFAULT_ENV_PREFIX as h,collectRequired as g,collectVars as _,pathOf as v}from"./collect.js";import{buildConfigJson as y}from"./config-json.js";import{generateEnvFile as b}from"./env-file.js";import{cliFlagLabel as x,cliFlagOf as S,cliShortOf as C,createCliArgsParser as w,flagOf as T,generateCliArgsOptions as E,generateCliOptions as D}from"./generators/cli.js";import{generateConfigEnv as O,generateEnv as k,generateEnvDts as A,generateEnvTypes as j}from"./generators/env.js";import{generateConfigJsonSchema as M,generateJsonSchemaFile as N}from"./generators/json.js";import{generateConfigMarkdown as P}from"./generators/markdown.js";import{generateConfigTypes as F}from"./generators/types.js";import{findProjectRoot as I,monorepoRoot as L}from"./root.js";import{createConfigEngine as R}from"./engine.js";import{envBool as z,envInt as B,envList as V,envMap as H,envPathOf as U,envString as W,parseEnvTree as G,readEnvPath as K}from"./env.js";import{GENERATED_FORMAT_OPTIONS as q,formatGenerated as J}from"./generated-format.js";import"./generators/index.js";var Y=/* @__PURE__ */ e({DEFAULT_ENV_PREFIX:()=>h,GENERATED_FORMAT_OPTIONS:()=>q,buildConfigJson:()=>y,cliFlagLabel:()=>x,cliFlagOf:()=>S,cliShortOf:()=>C,collectRequired:()=>g,collectVars:()=>_,compileZodSchema:()=>t,createCliArgsParser:()=>w,createConfigEngine:()=>R,envBool:()=>z,envInt:()=>B,envList:()=>V,envMap:()=>H,envPathOf:()=>U,envString:()=>W,findProjectRoot:()=>I,flagOf:()=>T,flattenBaseSchema:()=>n,formatGenerated:()=>J,generateCliArgsOptions:()=>E,generateCliOptions:()=>D,generateConfigEnv:()=>O,generateConfigJsonSchema:()=>M,generateConfigMarkdown:()=>P,generateConfigTypes:()=>F,generateEnv:()=>k,generateEnvDts:()=>A,generateEnvFile:()=>b,generateEnvTypes:()=>j,generateJsonSchemaFile:()=>N,isSchemaType:()=>r,isZodSchema:()=>i,metaOf:()=>a,monorepoRoot:()=>L,normalizeConfigSchema:()=>o,normalizeJsonSchemaMetadata:()=>s,parseEnvTree:()=>G,pathOf:()=>v,readEnvPath:()=>K,renderTsType:()=>c,resolveUntypedSchema:()=>l,splitBaseSchema:()=>u,toSchemaType:()=>d,zodToJsonSchema:()=>f,zodToSchemaMap:()=>p,zodToUntypedDefinition:()=>m});export{h as DEFAULT_ENV_PREFIX,q as GENERATED_FORMAT_OPTIONS,y as buildConfigJson,x as cliFlagLabel,S as cliFlagOf,C as cliShortOf,g as collectRequired,_ as collectVars,t as compileZodSchema,w as createCliArgsParser,R as createConfigEngine,z as envBool,B as envInt,V as envList,H as envMap,U as envPathOf,W as envString,I as findProjectRoot,T as flagOf,n as flattenBaseSchema,J as formatGenerated,E as generateCliArgsOptions,D as generateCliOptions,O as generateConfigEnv,M as generateConfigJsonSchema,P as generateConfigMarkdown,F as generateConfigTypes,k as generateEnv,A as generateEnvDts,b as generateEnvFile,j as generateEnvTypes,N as generateJsonSchemaFile,r as isSchemaType,i as isZodSchema,a as metaOf,L as monorepoRoot,o as normalizeConfigSchema,s as normalizeJsonSchemaMetadata,G as parseEnvTree,v as pathOf,K as readEnvPath,c as renderTsType,l as resolveUntypedSchema,u as splitBaseSchema,Y as src_exports,d as toSchemaType,f as zodToJsonSchema,p as zodToSchemaMap,m as zodToUntypedDefinition};
1
+ import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{compileZodSchema as t,flattenBaseSchema as n,isSchemaType as r,isZodFunctionSchema as i,isZodSchema as a,metaOf as o,normalizeConfigSchema as s,normalizeJsonSchemaMetadata as c,renderTsType as l,resolveUntypedSchema as u,splitBaseSchema as d,toJsonSchemaSafe as f,toSchemaType as p,zodToJsonSchema as m,zodToSchemaMap as h,zodToUntypedDefinition as g}from"./schema.js";import{DEFAULT_ENV_PREFIX as _,collectRequired as v,collectVars as y,pathOf as b}from"./collect.js";import{buildConfigJson as x}from"./config-json.js";import{generateEnvFile as S}from"./env-file.js";import{cliFlagLabel as C,cliFlagOf as w,cliShortOf as T,createCliArgsParser as E,flagOf as D,generateCliArgsOptions as O,generateCliOptions as k}from"./generators/cli.js";import{generateConfigEnv as A,generateEnv as j,generateEnvDts as M,generateEnvTypes as N}from"./generators/env.js";import{generateConfigJsonSchema as P,generateJsonSchemaFile as F}from"./generators/json.js";import{generateConfigMarkdown as I}from"./generators/markdown.js";import{generateConfigTypes as L}from"./generators/types.js";import{findProjectRoot as R,monorepoRoot as z}from"./root.js";import{createConfigEngine as B}from"./engine.js";import{envBool as V,envInt as H,envList as U,envMap as W,envPathOf as G,envString as K,parseEnvTree as q,readEnvPath as J}from"./env.js";import{GENERATED_FORMAT_OPTIONS as Y,formatGenerated as X}from"./generated-format.js";import"./generators/index.js";var Z=/* @__PURE__ */ e({DEFAULT_ENV_PREFIX:()=>_,GENERATED_FORMAT_OPTIONS:()=>Y,buildConfigJson:()=>x,cliFlagLabel:()=>C,cliFlagOf:()=>w,cliShortOf:()=>T,collectRequired:()=>v,collectVars:()=>y,compileZodSchema:()=>t,createCliArgsParser:()=>E,createConfigEngine:()=>B,envBool:()=>V,envInt:()=>H,envList:()=>U,envMap:()=>W,envPathOf:()=>G,envString:()=>K,findProjectRoot:()=>R,flagOf:()=>D,flattenBaseSchema:()=>n,formatGenerated:()=>X,generateCliArgsOptions:()=>O,generateCliOptions:()=>k,generateConfigEnv:()=>A,generateConfigJsonSchema:()=>P,generateConfigMarkdown:()=>I,generateConfigTypes:()=>L,generateEnv:()=>j,generateEnvDts:()=>M,generateEnvFile:()=>S,generateEnvTypes:()=>N,generateJsonSchemaFile:()=>F,isSchemaType:()=>r,isZodFunctionSchema:()=>i,isZodSchema:()=>a,metaOf:()=>o,monorepoRoot:()=>z,normalizeConfigSchema:()=>s,normalizeJsonSchemaMetadata:()=>c,parseEnvTree:()=>q,pathOf:()=>b,readEnvPath:()=>J,renderTsType:()=>l,resolveUntypedSchema:()=>u,splitBaseSchema:()=>d,toJsonSchemaSafe:()=>f,toSchemaType:()=>p,zodToJsonSchema:()=>m,zodToSchemaMap:()=>h,zodToUntypedDefinition:()=>g});export{_ as DEFAULT_ENV_PREFIX,Y as GENERATED_FORMAT_OPTIONS,x as buildConfigJson,C as cliFlagLabel,w as cliFlagOf,T as cliShortOf,v as collectRequired,y as collectVars,t as compileZodSchema,E as createCliArgsParser,B as createConfigEngine,V as envBool,H as envInt,U as envList,W as envMap,G as envPathOf,K as envString,R as findProjectRoot,D as flagOf,n as flattenBaseSchema,X as formatGenerated,O as generateCliArgsOptions,k as generateCliOptions,A as generateConfigEnv,P as generateConfigJsonSchema,I as generateConfigMarkdown,L as generateConfigTypes,j as generateEnv,M as generateEnvDts,S as generateEnvFile,N as generateEnvTypes,F as generateJsonSchemaFile,r as isSchemaType,i as isZodFunctionSchema,a as isZodSchema,o as metaOf,z as monorepoRoot,s as normalizeConfigSchema,c as normalizeJsonSchemaMetadata,q as parseEnvTree,b as pathOf,J as readEnvPath,l as renderTsType,u as resolveUntypedSchema,d as splitBaseSchema,Z as src_exports,f as toJsonSchemaSafe,p as toSchemaType,m as zodToJsonSchema,h as zodToSchemaMap,g as zodToUntypedDefinition};
@@ -41,11 +41,27 @@ interface JsonSchemaNode {
41
41
  experimental?: boolean;
42
42
  alpha?: boolean;
43
43
  beta?: boolean;
44
+ /** A hand-written TypeScript type for values JSON Schema cannot express. */
45
+ tsType?: string;
44
46
  }
45
47
  /** Whether a value is a Zod schema. */
46
48
  export declare function isZodSchema(value: unknown): value is ZodType;
47
49
  /** Whether a value is a resolved untyped schema. */
48
50
  export declare function isSchemaType(value: unknown): value is ConfigSchemaType;
51
+ /** Whether a schema validates a function value. */
52
+ export declare function isZodFunctionSchema(value: unknown): boolean;
53
+ /** Options for {@link toJsonSchemaSafe}. */
54
+ export interface ToJsonSchemaSafeOptions {
55
+ target?: 'draft-2020-12' | 'draft-07' | 'draft-04' | 'openapi-3.0' | (string & {});
56
+ /** Use `'any'`/`'throw'` to skip the function-aware default handler. */
57
+ unrepresentable?: 'throw' | 'any';
58
+ }
59
+ /**
60
+ * `z.toJSONSchema` with the function-aware `unrepresentable` handler. Zod
61
+ * functions cannot be represented in JSON Schema, so their `.meta({ tsType })`
62
+ * is emitted instead of throwing.
63
+ */
64
+ export declare function toJsonSchemaSafe(schema: ZodType, options?: ToJsonSchemaSafeOptions): JsonSchemaNode;
49
65
  /** Read the config metadata attached to a Zod leaf or an untyped schema node. */
50
66
  export declare function metaOf(schema: ZodType | Schema): ConfigMeta | undefined;
51
67
  /** Convert a Zod schema or untyped schema to the untyped representation. */
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{z as e}from"zod";const t={string:`string`,number:`number`,integer:`number`,boolean:`boolean`,null:`null`};function n(e){return typeof e==`object`&&!!e&&`safeParse`in e}function r(e){return typeof e!=`object`||!e||Array.isArray(e)||n(e)?!1:`type`in e||`properties`in e||`tsType`in e||`id`in e}const i=[`id`,`description`,`required`,`deprecated`,`deprecationMessage`,`example`,`since`,`see`,`remarks`,`experimental`,`alpha`,`beta`,`secret`,`scope`,`public`,`defaultValue`,`envName`,`env`,`envPath`,`path`,`typeName`,`cliFlag`,`cliFlagShort`];function a(e){if(n(e)){let t=e.meta?.();return t&&typeof t==`object`?t:void 0}let t=e,r={};for(let e of i)e===`id`&&typeof t.id==`string`&&t.id.startsWith(`#`)||t[e]!==void 0&&(r[e]=t[e]);return Object.keys(r).length>0?r:void 0}function o(e){return n(e)?E(e):e}function s(e){let t={},n=/* @__PURE__ */ new Set,r={type:`object`,properties:t};for(let i of e){let a=i;if(a.properties&&Object.assign(t,a.properties),Array.isArray(a.required))for(let e of a.required)n.add(e);e.length===1&&(r=i)}return{...r,type:`object`,properties:t,...n.size>0?{required:[...n]}:{}}}function c(e){if(Array.isArray(e)){let t=s(e.map(o));return{[a(t)?.id??`config`]:t}}if(n(e)||r(e)){let t=o(e);return{[a(t)?.id??`config`]:t}}let t={};for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?s(r.map(o)):o(r);return t}function l(e){return!e||Object.keys(e).length===0}function u(e){return`'${String(e).replace(/\\/g,`\\\\`).replace(/'/g,`\\'`)}'`}function d(e,n={}){if(!e||l(e))return`unknown`;if(e.$ref){let t=e.$ref.split(`/`).pop()??`unknown`;return n[t]?t:`unknown`}if(e.const!==void 0)return typeof e.const==`string`?u(e.const):String(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(u).join(` | `);let r=e.anyOf??e.oneOf;if(Array.isArray(r)&&r.length>0)return r.map(e=>d(e,n)).join(` | `);if(e.properties){let t=Array.isArray(e.required)?e.required:[];return`{ ${Object.entries(e.properties).map(([e,r])=>`${e}${t.includes(e)?``:`?`}: ${d(r,n)}`).join(`; `)} }`}let i=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(i.includes(`array`))return`Array<${d(e.items,n)}>`;if(i.includes(`object`)){let t=e.additionalProperties;return t===void 0||t===!1?`Record<string, unknown>`:`Record<string, ${t===!0||l(t)?`unknown`:d(t,n)}>`}return i.length===0?`unknown`:i.map(e=>t[e]??`unknown`).join(` | `)}function f(e){return e.$ref?`any`:e.const===void 0?e.anyOf||e.oneOf?`any`:e.enum?`string`:Array.isArray(e.type)?e.type.find(e=>e!==`null`)??`string`:e.type??`string`:typeof e.const==`string`?`string`:typeof e.const}function p(e,t={}){if(!e)return{};let n=e.$ref?.split(`/`).pop(),r=n?t[n]:void 0,i=e.required===!0||r?.required===!0||void 0,a=e.env??r?.env,o=e.envName??r?.envName,s=e.envPath??r?.envPath,c=e.path??r?.path,l=e.cliFlag??r?.cliFlag,u=e.cliFlagShort??r?.cliFlagShort,d=e.typeName??r?.typeName,f=e.id??r?.id,p=e.deprecated??r?.deprecated,m=e.deprecationMessage??r?.deprecationMessage,h=e.example??r?.example,g=e.since??r?.since,_=e.see??r?.see,v=e.remarks??r?.remarks,y=e.experimental??r?.experimental,b=e.alpha??r?.alpha,x=e.beta??r?.beta;for(let n of[...e.anyOf??[],...e.oneOf??[]]){let e=n.$ref?.split(`/`).pop(),r=e?t[e]:void 0;i??=n.required===!0||r?.required===!0||void 0,a??=n.env??r?.env,o??=n.envName??r?.envName,s??=n.envPath??r?.envPath,c??=n.path??r?.path,l??=n.cliFlag??r?.cliFlag,u??=n.cliFlagShort??r?.cliFlagShort,d??=n.typeName??r?.typeName,f??=n.id??r?.id,p??=n.deprecated??r?.deprecated,m??=n.deprecationMessage??r?.deprecationMessage,h??=n.example??r?.example,g??=n.since??r?.since,_??=n.see??r?.see,v??=n.remarks??r?.remarks,y??=n.experimental??r?.experimental,b??=n.alpha??r?.alpha,x??=n.beta??r?.beta}return{...a===void 0?{}:{env:a},...o===void 0?{}:{envName:o},...s===void 0?{}:{envPath:s},...c===void 0?{}:{path:c},...l===void 0?{}:{cliFlag:l},...u===void 0?{}:{cliFlagShort:u},...d===void 0?{}:{typeName:d},...f===void 0?{}:{id:f},...i===void 0?{}:{required:i},...p===void 0?{}:{deprecated:p},...m===void 0?{}:{deprecationMessage:m},...h===void 0?{}:{example:h},...g===void 0?{}:{since:g},..._===void 0?{}:{see:_},...v===void 0?{}:{remarks:v},...y===void 0?{}:{experimental:y},...b===void 0?{}:{alpha:b},...x===void 0?{}:{beta:x}}}function m(e,t=!1,n={}){if(e.$ref){let r=e.$ref.split(`/`).pop()??`unknown`,i=n[r],a=e.description??i?.description;return{$schema:{type:`any`,tsType:r,...t?{tags:[`@required`]}:{},...a?{description:a}:{},...p(e,n)}}}if(e.properties){let r=t?{$schema:{tags:[`@required`]}}:{};e.description&&(r.$schema={...r.$schema,description:e.description});let i=p(e,n);(i.deprecated!==void 0||i.example!==void 0)&&(r.$schema={...r.$schema,...i});for(let[t,i]of Object.entries(e.properties))r[t]=m(i,e.required?.includes(t)??!1,n);return e.additionalProperties!==void 0&&e.additionalProperties!==!1&&(r.$schema={...r.$schema,allowExtraKeys:!0}),r}let r=f(e),i={};return e.defaultValue===void 0?e.default!==void 0&&(i.$default=e.default):i.$default=e.defaultValue,i.$schema={type:r,tsType:d(e,n),...r===`array`?{items:{type:f(e.items??{})}}:{},...t?{tags:[`@required`]}:{},...e.description?{description:e.description}:{},...e.env?{env:e.env}:{},...e.scope?{scope:e.scope}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{},...p(e,n),...e.defaultValue!==void 0&&e.default!==void 0?{envDefault:e.default}:{}},i}function h(e){let t=e.toJSONSchema();if(!t)return{};let n=t.$defs??{},r=t.$ref?.split(`/`).pop();return m(r&&n[r]?n[r]:t,!1,n)}function g(t){try{return e.compile(t)}catch{return t}}function _(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function v(e){let t=typeof e;if(t!==`undefined`&&e!==null)return Array.isArray(e)?`array`:t}function y(e,t,n=`.`){return e?`${e}${n}${t}`:t}function b(e){return[...new Set(e.filter(e=>!!e))]}function x(e){if(e.type===`array`&&!(`items`in e)){let t=b((e.default??[]).map(e=>v(e)));e.items={type:t.length===0?`any`:t.length===1?t[0]:t}}if(e.default===void 0&&(`properties`in e||e.type===`object`||e.type===`any`)){let t=e.properties??{};e.default=Object.fromEntries(Object.entries(t).filter(([,e])=>`default`in e).map(([e,t])=>[e,t.default]))}}function S(e,t,n){if(n.cache.has(t))return n.cache.get(t);let r=`#${t.replace(/\./g,`/`)}`;if(!_(e)){let i=Array.isArray(e)?[...e]:e,a={type:v(e),id:r,default:i};return x(a),n.cache.set(t,a),a}let i={...e.$schema,id:r};n.cache.set(t,i);let a=Object.keys(e).filter(e=>e!==`$resolve`&&e!==`$schema`&&e!==`$default`);if(a.length>0){let r={};i.properties=r;for(let o of a)if(!r[o]){let a=r[o]=S(e[o],y(t,o),n);Array.isArray(a.tags)&&a.tags.includes(`@required`)&&(i.required=i.required||[],i.required.includes(o)||i.required.push(o))}}return i.default===void 0&&`$default`in e&&(i.default=e.$default),i.type||=v(i.default)||(i.properties?`object`:`any`),x(i),i}function C(e){return S(e,``,{root:e,cache:/* @__PURE__ */ new Map})}function w(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(typeof t.deprecated==`string`&&(t.deprecationMessage=t.deprecated,t.deprecated=!0),`example`in t){let e=t.example;delete t.example,t.examples=Array.isArray(e)?e:[e]}for(let e of[`properties`,`$defs`]){let n=t[e];if(n&&typeof n==`object`&&!Array.isArray(n))for(let e of Object.values(n))w(e)}for(let e of[`items`,`additionalProperties`])w(t[e]);for(let e of[`anyOf`,`oneOf`,`allOf`]){let n=t[e];if(Array.isArray(n))for(let e of n)w(e)}}function T(e){let t=e.toJSONSchema();if(!t)return{};let n=t.$defs??{},r={};for(let[e,t]of Object.entries(n))r[e]=C(m(t,!1,n));let i=t.$ref?.split(`/`).pop()??t.id??a(e)?.id??`config`;return r[i]||(r[i]=C(m(t,!1,n))),r}function E(e){return C(h(e))}function D(e,t=`base`){let n=e.properties??{},r=n[t];if(r&&r.type===`object`&&r.properties){let{[t]:i,...a}=n,o=(e.required??[]).filter(e=>e!==t);return{base:r,groups:{...e,properties:a,...o.length>0?{required:o}:{}},hasBase:!0}}return{base:e,groups:{...e,properties:{}},hasBase:!1}}function O(e,t=`base`){let n=e.properties??{},r=n[t];if(r?.type!==`object`)return e;let i=r.properties;if(!i)return e;let{[t]:a,...o}=n;return{...e,properties:{...i,...o},required:[...(e.required??[]).filter(e=>e!==t),...r.required??[]]}}export{g as compileZodSchema,O as flattenBaseSchema,r as isSchemaType,n as isZodSchema,a as metaOf,c as normalizeConfigSchema,w as normalizeJsonSchemaMetadata,d as renderTsType,C as resolveUntypedSchema,D as splitBaseSchema,o as toSchemaType,E as zodToJsonSchema,T as zodToSchemaMap,h as zodToUntypedDefinition};
1
+ import"node:path";import"node:url";import.meta.url;import{z as e}from"zod";const t={string:`string`,number:`number`,integer:`number`,boolean:`boolean`,null:`null`};function n(e){return typeof e==`object`&&!!e&&`safeParse`in e}function r(e){return typeof e!=`object`||!e||Array.isArray(e)||n(e)?!1:`type`in e||`properties`in e||`tsType`in e||`id`in e}const i=[`id`,`description`,`required`,`deprecated`,`deprecationMessage`,`example`,`since`,`see`,`remarks`,`experimental`,`alpha`,`beta`,`secret`,`scope`,`public`,`defaultValue`,`envName`,`env`,`envPath`,`path`,`typeName`,`cliFlag`,`cliFlagShort`,`tsType`];function a(e){return n(e)&&e._zod?.def?.type===`function`}function o(e){if(a(e.zodSchema)){let t=c(e.zodSchema);if(typeof t?.tsType==`string`&&t.tsType.trim())return{tsType:t.tsType,...typeof t.description==`string`?{description:t.description}:{}}}return`any`}function s(t,n={}){let r={target:`draft-2020-12`,...n,...n.unrepresentable?{unrepresentable:n.unrepresentable}:{unrepresentable:o}};return e.toJSONSchema(t,r)}function c(e){if(n(e)){let t=e.meta?.();return t&&typeof t==`object`?t:void 0}let t=e,r={};for(let e of i)e===`id`&&typeof t.id==`string`&&t.id.startsWith(`#`)||t[e]!==void 0&&(r[e]=t[e]);return Object.keys(r).length>0?r:void 0}function l(e){return n(e)?k(e):e}function u(e){let t={},n=/* @__PURE__ */ new Set,r={type:`object`,properties:t};for(let i of e){let a=i;if(a.properties&&Object.assign(t,a.properties),Array.isArray(a.required))for(let e of a.required)n.add(e);e.length===1&&(r=i)}return{...r,type:`object`,properties:t,...n.size>0?{required:[...n]}:{}}}function d(e){if(Array.isArray(e)){let t=u(e.map(l));return{[c(t)?.id??`config`]:t}}if(n(e)||r(e)){let t=l(e);return{[c(t)?.id??`config`]:t}}let t={};for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?u(r.map(l)):l(r);return t}function f(e){return!e||Object.keys(e).length===0}function p(e){return`'${String(e).replace(/\\/g,`\\\\`).replace(/'/g,`\\'`)}'`}function m(e,n={}){if(!e||f(e))return`unknown`;if(typeof e.tsType==`string`&&e.tsType.trim())return e.tsType;if(e.$ref){let t=e.$ref.split(`/`).pop()??`unknown`;return n[t]?t:`unknown`}if(e.const!==void 0)return typeof e.const==`string`?p(e.const):String(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(p).join(` | `);let r=e.anyOf??e.oneOf;if(Array.isArray(r)&&r.length>0)return r.map(e=>m(e,n)).join(` | `);if(e.properties){let t=Array.isArray(e.required)?e.required:[];return`{ ${Object.entries(e.properties).map(([e,r])=>`${/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)?e:JSON.stringify(e)}${t.includes(e)?``:`?`}: ${m(r,n)}`).join(`; `)} }`}let i=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(i.includes(`array`))return`Array<${m(e.items,n)}>`;if(i.includes(`object`)){let t=e.additionalProperties;return t===void 0||t===!1?`Record<string, unknown>`:`Record<string, ${t===!0||f(t)?`unknown`:m(t,n)}>`}return i.length===0?`unknown`:i.map(e=>t[e]??`unknown`).join(` | `)}function h(e){return e.$ref?`any`:e.const===void 0?e.anyOf||e.oneOf?`any`:e.enum?`string`:Array.isArray(e.type)?e.type.find(e=>e!==`null`)??`string`:e.type??`string`:typeof e.const==`string`?`string`:typeof e.const}function g(e,t={}){if(!e)return{};let n=e.$ref?.split(`/`).pop(),r=n?t[n]:void 0,i=e.required===!0||r?.required===!0||void 0,a=e.env??r?.env,o=e.envName??r?.envName,s=e.envPath??r?.envPath,c=e.path??r?.path,l=e.cliFlag??r?.cliFlag,u=e.cliFlagShort??r?.cliFlagShort,d=e.typeName??r?.typeName,f=e.id??r?.id,p=e.deprecated??r?.deprecated,m=e.deprecationMessage??r?.deprecationMessage,h=e.example??r?.example,g=e.since??r?.since,_=e.see??r?.see,v=e.remarks??r?.remarks,y=e.experimental??r?.experimental,b=e.alpha??r?.alpha,x=e.beta??r?.beta;for(let n of[...e.anyOf??[],...e.oneOf??[]]){let e=n.$ref?.split(`/`).pop(),r=e?t[e]:void 0;i??=n.required===!0||r?.required===!0||void 0,a??=n.env??r?.env,o??=n.envName??r?.envName,s??=n.envPath??r?.envPath,c??=n.path??r?.path,l??=n.cliFlag??r?.cliFlag,u??=n.cliFlagShort??r?.cliFlagShort,d??=n.typeName??r?.typeName,f??=n.id??r?.id,p??=n.deprecated??r?.deprecated,m??=n.deprecationMessage??r?.deprecationMessage,h??=n.example??r?.example,g??=n.since??r?.since,_??=n.see??r?.see,v??=n.remarks??r?.remarks,y??=n.experimental??r?.experimental,b??=n.alpha??r?.alpha,x??=n.beta??r?.beta}return{...a===void 0?{}:{env:a},...o===void 0?{}:{envName:o},...s===void 0?{}:{envPath:s},...c===void 0?{}:{path:c},...l===void 0?{}:{cliFlag:l},...u===void 0?{}:{cliFlagShort:u},...d===void 0?{}:{typeName:d},...f===void 0?{}:{id:f},...i===void 0?{}:{required:i},...p===void 0?{}:{deprecated:p},...m===void 0?{}:{deprecationMessage:m},...h===void 0?{}:{example:h},...g===void 0?{}:{since:g},..._===void 0?{}:{see:_},...v===void 0?{}:{remarks:v},...y===void 0?{}:{experimental:y},...b===void 0?{}:{alpha:b},...x===void 0?{}:{beta:x}}}function _(e,t=!1,n={}){if(e.$ref){let r=e.$ref.split(`/`).pop()??`unknown`,i=n[r],a=e.description??i?.description;if(i?.properties){let o=_(i,t,n);return o.$schema={...o.$schema,type:`object`,tsType:typeof i.tsType==`string`&&i.tsType.trim()?i.tsType:r,...t?{tags:[`@required`]}:{},...a?{description:a}:{},...g(e,n)},o}return{$schema:{type:`any`,tsType:typeof i?.tsType==`string`&&i.tsType.trim()?i.tsType:r,...t?{tags:[`@required`]}:{},...a?{description:a}:{},...g(e,n)}}}if(typeof e.tsType==`string`&&e.tsType.trim()&&(!e.properties||Object.keys(e.properties).length===0))return{$schema:{type:`any`,tsType:e.tsType,...t?{tags:[`@required`]}:{},...e.description?{description:e.description}:{},...g(e,n)}};if(e.properties){let r=t?{$schema:{tags:[`@required`]}}:{};e.description&&(r.$schema={...r.$schema,description:e.description});let i=g(e,n);(i.deprecated!==void 0||i.example!==void 0)&&(r.$schema={...r.$schema,...i});for(let[t,i]of Object.entries(e.properties))r[t]=_(i,e.required?.includes(t)??!1,n);return e.additionalProperties!==void 0&&e.additionalProperties!==!1&&(r.$schema={...r.$schema,allowExtraKeys:!0}),r}let r=h(e),i={};return e.defaultValue===void 0?e.default!==void 0&&(i.$default=e.default):i.$default=e.defaultValue,i.$schema={type:r,tsType:m(e,n),...r===`array`?{items:{type:h(e.items??{})}}:{},...t?{tags:[`@required`]}:{},...e.description?{description:e.description}:{},...e.env?{env:e.env}:{},...e.scope?{scope:e.scope}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{},...g(e,n),...e.defaultValue!==void 0&&e.default!==void 0?{envDefault:e.default}:{}},i}function v(e){let t=s(e);if(!t)return{};let n=t.$defs??{},r=t.$ref?.split(`/`).pop();return _(r&&n[r]?n[r]:t,!1,n)}function y(t){try{return e.compile(t)}catch{return t}}function b(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function x(e){let t=typeof e;if(t!==`undefined`&&e!==null)return Array.isArray(e)?`array`:t}function S(e,t,n=`.`){return e?`${e}${n}${t}`:t}function C(e){return[...new Set(e.filter(e=>!!e))]}function w(e){if(e.type===`array`&&!(`items`in e)){let t=C((e.default??[]).map(e=>x(e)));e.items={type:t.length===0?`any`:t.length===1?t[0]:t}}if(e.default===void 0&&(`properties`in e||e.type===`object`||e.type===`any`)){let t=e.properties??{};e.default=Object.fromEntries(Object.entries(t).filter(([,e])=>`default`in e).map(([e,t])=>[e,t.default]))}}function T(e,t,n){if(n.cache.has(t))return n.cache.get(t);let r=`#${t.replace(/\./g,`/`)}`;if(!b(e)){let i=Array.isArray(e)?[...e]:e,a={type:x(e),id:r,default:i};return w(a),n.cache.set(t,a),a}let i={...e.$schema,id:r};n.cache.set(t,i);let a=Object.keys(e).filter(e=>e!==`$resolve`&&e!==`$schema`&&e!==`$default`);if(a.length>0){let r={};i.properties=r;for(let o of a)if(!r[o]){let a=r[o]=T(e[o],S(t,o),n);Array.isArray(a.tags)&&a.tags.includes(`@required`)&&(i.required=i.required||[],i.required.includes(o)||i.required.push(o))}}return i.default===void 0&&`$default`in e&&(i.default=e.$default),i.type||=x(i.default)||(i.properties?`object`:`any`),w(i),i}function E(e){return T(e,``,{root:e,cache:/* @__PURE__ */ new Map})}function D(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e;if(delete t.tsType,typeof t.deprecated==`string`&&(t.deprecationMessage=t.deprecated,t.deprecated=!0),`example`in t){let e=t.example;delete t.example,t.examples=Array.isArray(e)?e:[e]}for(let e of[`properties`,`$defs`]){let n=t[e];if(n&&typeof n==`object`&&!Array.isArray(n))for(let e of Object.values(n))D(e)}for(let e of[`items`,`additionalProperties`])D(t[e]);for(let e of[`anyOf`,`oneOf`,`allOf`]){let n=t[e];if(Array.isArray(n))for(let e of n)D(e)}}function O(e){let t=s(e);if(!t)return{};let n=t.$defs??{},r={};for(let[e,t]of Object.entries(n))r[e]=E(_(t,!1,n));let i=t.$ref?.split(`/`).pop()??t.id??c(e)?.id??`config`;return r[i]||(r[i]=E(_(t,!1,n))),r}function k(e){return E(v(e))}function A(e,t=`base`){let n=e.properties??{},r=n[t];if(r&&r.type===`object`&&r.properties){let{[t]:i,...a}=n,o=(e.required??[]).filter(e=>e!==t);return{base:r,groups:{...e,properties:a,...o.length>0?{required:o}:{}},hasBase:!0}}return{base:e,groups:{...e,properties:{}},hasBase:!1}}function j(e,t=`base`){let n=e.properties??{},r=n[t];if(r?.type!==`object`)return e;let i=r.properties;if(!i)return e;let{[t]:a,...o}=n;return{...e,properties:{...i,...o},required:[...(e.required??[]).filter(e=>e!==t),...r.required??[]]}}export{y as compileZodSchema,j as flattenBaseSchema,r as isSchemaType,a as isZodFunctionSchema,n as isZodSchema,c as metaOf,d as normalizeConfigSchema,D as normalizeJsonSchemaMetadata,m as renderTsType,E as resolveUntypedSchema,A as splitBaseSchema,s as toJsonSchemaSafe,l as toSchemaType,k as zodToJsonSchema,O as zodToSchemaMap,v as zodToUntypedDefinition};
@@ -23,6 +23,11 @@ export interface ConfigBaseMeta {
23
23
  example?: string[] | string;
24
24
  /** Version or date this option was introduced (`@since`). */
25
25
  since?: string;
26
+ /**
27
+ * A hand-written TypeScript type for values JSON Schema cannot express
28
+ * (functions/callbacks). Emitted in generated types and markdown.
29
+ */
30
+ tsType?: string;
26
31
  /** Related link(s) for the option (`@see`). */
27
32
  see?: string[] | string;
28
33
  /** Extra notes shown after the description (`@remarks`). */
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{deepMerge as t,isPlainObject as n}from"../../shared/src/object-utils.js";import{errorMessage as r,warningMessage as i}from"../../shared/src/messages.js";import{FORMATTER_PRECEDENCE as a,LINTER_PRECEDENCE as o,resolveFmtTool as s,resolveFmtTools as c,resolveLintTool as l,resolveLintTools as u,sectionConfig as d,sectionEnabled as f}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import p from"node:fs";const m={oxc:`oxc.oxc-vscode`,biome:`biomejs.biome`,prettier:`esbenp.prettier-vscode`,dprint:`dprint.dprint`},h={oxc:{"source.fixAll.oxc":`explicit`},biome:{"quickfix.biome":`explicit`,"source.organizeImports.biome":`explicit`},eslint:{"source.fixAll.eslint":`explicit`}},g=[`javascript`,`javascriptreact`,`typescript`,`typescriptreact`];function _(e){let t=m[e];return t?{"editor.defaultFormatter":t,...Object.fromEntries(g.map(e=>[`[${e}]`,{"editor.defaultFormatter":t}]))}:{}}function v(e,t){for(let[r,i]of Object.entries(t)){let t=e[r];t===void 0?e[r]=i:n(t)&&n(i)&&v(t,i)}}function y(e){return e===!0||n(e)}function b(e,r){if(!n(r))return e;let i=r,a=i.overrides?t(e,i.overrides):e;for(let e of i.exclude??[]){let{[e]:t,...n}=a;a=n}return a}function x(){return{name:`tooling`,enabled:e=>f(e.fmt)||f(e.lint)||f(e.biome),run:e=>{let t=f(e.config.biome),n=c(e.config),s=u(e.config),l=t?a.filter(e=>e===`biome`||n.includes(e)):n,d=t?o.filter(e=>e===`biome`||s.includes(e)):s;return l.length>1&&e.warn(i(`fmt.conflict`,{tools:l.join(`, `),winner:l[0]}),`fmt.conflict`),d.length>1&&e.warn(i(`lint.conflict`,{tools:d.join(`, `),winner:d[0]}),`lint.conflict`),t&&e.warn(r(`deprecated.section.biome`),`deprecated.section.biome`),[]}}}function S(){return{name:`editor-config`,projectTypes:[`monorepo-root`,`project`],enabled:e=>y(f(e.fmt)?d(e.fmt)?.vscode:void 0)||y(f(e.lint)?d(e.lint)?.vscode:void 0),run:t=>{let r=s(t.config),i=l(t.config),a=f(t.config.fmt)?d(t.config.fmt)?.vscode:void 0,o=f(t.config.lint)?d(t.config.lint)?.vscode:void 0,c={};if(y(a)&&r&&Object.assign(c,b(_(r),a)),y(o)&&i&&Object.assign(c,b({"editor.codeActionsOnSave":h[i]??{}},o)),Object.keys(c).length===0)return[];let u=e.join(t.cwd,`.vscode`,`settings.json`),m={};if(p.existsSync(u))try{let e=JSON.parse(p.readFileSync(u,`utf-8`).replace(/^\uFEFF/,``));if(!n(e))return t.warn(`cannot add editor defaults: ${u} is not a JSON object.`,`vscode.settings-invalid`),[];m=e}catch{return t.warn(`cannot add editor defaults: ${u} is not valid JSON.`,`vscode.settings-invalid`),[]}if(t.check)return[];let g=JSON.stringify(m);return v(m,c),JSON.stringify(m)!==g&&(p.mkdirSync(e.dirname(u),{recursive:!0}),p.writeFileSync(u,`${JSON.stringify(m,null,4)}\n`,`utf-8`)),[]}}}export{S as editorConfigSyncTask,x as toolingConfigTask};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{deepMerge as t,isPlainObject as n}from"../../shared/src/object-utils.js";import{insertMissingJsonc as r,readJsoncFile as i}from"../../shared/src/fs-utils.js";import{errorMessage as a,warningMessage as o}from"../../shared/src/messages.js";import{FORMATTER_PRECEDENCE as s,LINTER_PRECEDENCE as c,resolveFmtTool as l,resolveFmtTools as u,resolveLintTool as d,resolveLintTools as f,sectionConfig as p,sectionEnabled as m}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import h from"node:fs";const g={oxc:`oxc.oxc-vscode`,biome:`biomejs.biome`,prettier:`esbenp.prettier-vscode`,dprint:`dprint.dprint`},_={oxc:{"source.fixAll.oxc":`explicit`},biome:{"quickfix.biome":`explicit`,"source.organizeImports.biome":`explicit`},eslint:{"source.fixAll.eslint":`explicit`}},v=[`javascript`,`javascriptreact`,`typescript`,`typescriptreact`];function y(e){let t=g[e];return t?{"editor.defaultFormatter":t,...Object.fromEntries(v.map(e=>[`[${e}]`,{"editor.defaultFormatter":t}]))}:{}}function b(e,t){for(let[r,i]of Object.entries(t)){let t=e[r];t===void 0?e[r]=i:n(t)&&n(i)&&b(t,i)}}function x(e){return e===!0||n(e)}function S(e,r){if(!n(r))return e;let i=r,a=i.overrides?t(e,i.overrides):e;for(let e of i.exclude??[]){let{[e]:t,...n}=a;a=n}return a}function C(){return{name:`tooling`,enabled:e=>m(e.fmt)||m(e.lint)||m(e.biome),run:e=>{let t=m(e.config.biome),n=u(e.config),r=f(e.config),i=t?s.filter(e=>e===`biome`||n.includes(e)):n,l=t?c.filter(e=>e===`biome`||r.includes(e)):r;return i.length>1&&e.warn(o(`fmt.conflict`,{tools:i.join(`, `),winner:i[0]}),`fmt.conflict`),l.length>1&&e.warn(o(`lint.conflict`,{tools:l.join(`, `),winner:l[0]}),`lint.conflict`),t&&e.warn(a(`deprecated.section.biome`),`deprecated.section.biome`),[]}}}function w(){return{name:`editor-config`,projectTypes:[`monorepo-root`,`project`],enabled:e=>x(m(e.fmt)?p(e.fmt)?.vscode:void 0)||x(m(e.lint)?p(e.lint)?.vscode:void 0),run:t=>{let a=l(t.config),o=d(t.config),s=m(t.config.fmt)?p(t.config.fmt)?.vscode:void 0,c=m(t.config.lint)?p(t.config.lint)?.vscode:void 0,u={};if(x(s)&&a&&Object.assign(u,S(y(a),s)),x(c)&&o&&Object.assign(u,S({"editor.codeActionsOnSave":_[o]??{}},c)),Object.keys(u).length===0)return[];let f=e.join(t.cwd,`.vscode`,`settings.json`),g,v={};if(h.existsSync(f)){g=h.readFileSync(f,`utf-8`);let e=i(f);if(!n(e))return t.warn(`cannot add editor defaults: ${f} is not a JSON object.`,`vscode.settings-invalid`),[];v=e}if(t.check)return[];let C=g===void 0?void 0:r(g,v,u,{ignoreExisting:!0});if(C===void 0){let e=JSON.stringify(v);if(b(v,u),JSON.stringify(v)===e)return[];C=`${JSON.stringify(v,null,4)}\n`}return C!==g&&(h.mkdirSync(e.dirname(f),{recursive:!0}),h.writeFileSync(f,C,`utf-8`)),[]}}}export{w as editorConfigSyncTask,C as toolingConfigTask};
@@ -1 +1 @@
1
- import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{deepMerge as n,isPlainObject as r}from"../../shared/src/object-utils.js";import{readJsonAt as i}from"../../shared/src/fs-utils.js";import{projectFromPackageJson as a}from"../../shared/src/project.js";import{CONFIG_FILE_NAMES as o,resolveTokens as s}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as c}from"./project-type.js";import{createRequire as l}from"node:module";import u from"node:fs";function d(e){return e instanceof Error?e.message:String(e)}function f(t=process.cwd()){for(let n of o){let r=e.resolve(t,n);if(u.existsSync(r))return r}}function p(t=process.cwd()){let n=e.resolve(t);if(u.existsSync(e.join(n,`.git`)))return;let r=e.dirname(n);for(;;){let t=f(r);if(t)return t;if(u.existsSync(e.join(r,`.git`)))return;let n=e.dirname(r);if(n===r)return;r=n}}function m(e){let t=e?.code;return t===`ERR_UNKNOWN_FILE_EXTENSION`||t===`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`}function h(e){let t=e;for(let e=0;e<2&&t&&typeof t==`object`&&`default`in t&&Object.keys(t).every(e=>e==="default"||e==="__esModule");e++)t=t.default;return t}const g=l(import.meta.url);let _=0;async function v(e,n=!1){if(e.endsWith(`.json`))return JSON.parse(u.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));if(n)try{delete g.cache[e]}catch{}let r=t(e).href,i=n?`${r}?dbx=${Date.now()}-${++_}`:r;try{let e=await import(i);return e.default??e}catch(e){if(!m(e))throw e;let{tsImport:t}=await import(`tsx/esm/api`);return h(await t(i,import.meta.url))}}async function y(e,t=!1){let n=await b(await v(e,t)),r=n&&typeof n==`object`?n.toolchain:void 0;return r&&typeof r==`object`?r:{}}async function b(e){let t=await e;return typeof t==`function`&&(t=await t()),t}const x=/* @__PURE__ */ new Set([`name`,`scope`,`description`,`type`]),S=/* @__PURE__ */ new Set([`test`,`run`]);function C(e){if(!r(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>!S.has(e)));return Object.keys(t).length>0?t:void 0}function w(e,t){let{hooks:r,project:i,ci:a,changelog:o,catalogs:s,tsconfig:c,vite:l,...u}=e,d=u,f=C(l);if(f!==void 0&&(d={...d,vite:f}),t.project?.inherit!==!1&&i){let e=Object.fromEntries(Object.entries(i).filter(([e])=>!x.has(e)));Object.keys(e).length>0&&(d={...d,project:e})}return n(d,t)}async function T(t=process.cwd(),n={}){let r=n.noConfig?void 0:n.config?e.isAbsolute(n.config)?n.config:e.resolve(t,n.config):f(t),o=n.noConfig?void 0:p(t),l=n.tolerant??!1,u=n.fresh??!1,m={},h={},g,_;if(o)try{g=await y(o,u),m=g}catch(e){if(!l)throw e;_=`failed to load ${o}: ${d(e)}`}if(r)try{let e=await y(r,u);h=e,m=o&&!_?w(m,e):e}catch(e){if(!l)throw e;_=`failed to load ${r}: ${d(e)}`}let v=i(t,`package.json`),b={...v?a(v):void 0,...m.project??void 0},x=s({...m,project:b});n.skipHooks||await m.hooks?.afterLoad?.({cwd:t,config:m,tokens:x,...r?{path:r}:{}});let S=m.tsconfig===void 0&&g?.tsconfig!==void 0?{...m,tsconfig:g.tsconfig}:m;return{config:m,ownConfig:h,...r?{path:r}:{},...o?{parentPath:o}:{},..._?{error:_}:{},tokens:x,projectType:c(t,S)}}export{f as findConfigFile,p as findParentConfigFile,T as loadToolchainConfig,w as mergeToolchainConfig};
1
+ import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{deepMerge as n,isPlainObject as r}from"../../shared/src/object-utils.js";import{readJsonAt as i}from"../../shared/src/fs-utils.js";import{projectFromPackageJson as a}from"../../shared/src/project.js";import{CONFIG_FILE_NAMES as o,resolveTokens as s}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as c}from"./project-type.js";import{createRequire as l}from"node:module";import u from"node:fs";function d(e){return e instanceof Error?e.message:String(e)}function f(t=process.cwd()){for(let n of o){let r=e.resolve(t,n);if(u.existsSync(r))return r}}function p(t=process.cwd()){let n=e.resolve(t);if(u.existsSync(e.join(n,`.git`)))return;let r=e.dirname(n);for(;;){let t=f(r);if(t)return t;if(u.existsSync(e.join(r,`.git`)))return;let n=e.dirname(r);if(n===r)return;r=n}}function m(e){let t=e?.code;return t===`ERR_UNKNOWN_FILE_EXTENSION`||t===`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`}function h(e){let t=e;for(let e=0;e<2&&t&&typeof t==`object`&&`default`in t&&Object.keys(t).every(e=>e==="default"||e==="__esModule");e++)t=t.default;return t}const g=l(import.meta.url);let _=0;async function v(e,n=!1){if(e.endsWith(`.json`))return JSON.parse(u.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));if(n)try{delete g.cache[e]}catch{}let r=t(e).href,i=n?`${r}?dbx=${Date.now()}-${++_}`:r;try{let e=await import(i);return e.default??e}catch(e){if(!m(e))throw e;let{tsImport:t}=await import(`tsx/esm/api`);return h(await t(i,import.meta.url))}}async function y(e,t=!1){let n=await b(await v(e,t)),r=n&&typeof n==`object`?n.toolchain:void 0;return r&&typeof r==`object`?r:{}}async function b(e){let t=await e;return typeof t==`function`&&(t=await t()),t}const x=/* @__PURE__ */ new Set([`name`,`scope`,`description`,`type`]),S=/* @__PURE__ */ new Set([`test`,`run`]);function C(e){if(!r(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>!S.has(e)));return Object.keys(t).length>0?t:void 0}function w(e,t){let{hooks:r,project:i,ci:a,changelog:o,catalogs:s,tsconfig:c,vite:l,...u}=e,d=u,f=C(l);if(f!==void 0&&(d={...d,vite:f}),t.project?.inherit!==!1&&i){let e=Object.fromEntries(Object.entries(i).filter(([e])=>!x.has(e)));Object.keys(e).length>0&&(d={...d,project:e})}return n(d,t)}async function T(t=process.cwd(),n={}){if(n.config&&n.noConfig)throw Error("`--config` and `--no-config` cannot be used together.");let r=n.noConfig?void 0:n.config?e.isAbsolute(n.config)?n.config:e.resolve(t,n.config):f(t),o=n.noConfig?void 0:p(t),l=n.tolerant??!1,u=n.fresh??!1,m={},h={},g,_;if(o)try{g=await y(o,u),m=g}catch(e){if(!l)throw e;_=`failed to load ${o}: ${d(e)}`}if(r)try{let e=await y(r,u);h=e,m=o&&!_?w(m,e):e}catch(e){if(!l)throw e;_=`failed to load ${r}: ${d(e)}`}else if(g){let{hooks:e,...t}=m;m=t}let v=i(t,`package.json`),b={...v?a(v):void 0,...m.project??void 0},x=s({...m,project:b});n.skipHooks||await m.hooks?.afterLoad?.({cwd:t,config:m,tokens:x,...r?{path:r}:{}});let S=m.tsconfig===void 0&&g?.tsconfig!==void 0?{...m,tsconfig:g.tsconfig}:m;return{config:m,ownConfig:h,...r?{path:r}:{},...o?{parentPath:o}:{},..._?{error:_}:{},tokens:x,projectType:c(t,S)}}export{f as findConfigFile,p as findParentConfigFile,T as loadToolchainConfig,w as mergeToolchainConfig};
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{toJson as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import n from"node:fs";const r=`.dbx/toolchain`,i=`manifest.json`,a=`timestamps.json`;function o(t){return e.resolve(t,r)}function s(t,r){try{return JSON.parse(n.readFileSync(e.join(o(t),r),`utf-8`).replace(/^\uFEFF/,``))}catch{return}}function c(e){let t=s(e,a);if(typeof t?.syncedAt==`string`)return t.syncedAt;let n=s(e,i);return typeof n?.syncedAt==`string`?n.syncedAt:void 0}function l(e){let t=s(e,i),n=c(e),r=t?.origins&&typeof t.origins==`object`?t.origins:void 0,a=t?.tsconfigOverrides&&typeof t.tsconfigOverrides==`object`?t.tsconfigOverrides:void 0,o=t?.snapshots&&typeof t.snapshots==`object`?t.snapshots:void 0,l=/* @__PURE__ */ new Set([`files`,`origins`,`syncedAt`,`tsconfigOverrides`,`snapshots`]),u=Object.fromEntries(Object.entries(t??{}).filter(([e])=>!l.has(e)));return{files:Array.isArray(t?.files)?t.files:[],...r?{origins:r}:{},...a?{tsconfigOverrides:a}:{},...o?{snapshots:o}:{},...Object.keys(u).length>0?{extras:u}:{},...n?{syncedAt:n}:{}}}function u(r,s,c,l,u){let d=o(r);n.mkdirSync(d,{recursive:!0});let f=[...new Set(s)].sort();n.writeFileSync(e.join(d,i),t({...u,files:f,...l?{origins:Object.fromEntries(f.filter(e=>l[e]!==void 0).map(e=>[e,l[e]]))}:{}}),`utf-8`),n.writeFileSync(e.join(d,a),t({syncedAt:c??(/* @__PURE__ */ new Date()).toISOString()}),`utf-8`)}export{r as MANIFEST_DIR,i as MANIFEST_FILE,a as TIMESTAMPS_FILE,l as readManifest,c as readSyncedAt,u as writeManifest};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{toJson as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import n from"node:fs";const r=`.dbx/toolchain`,i=`manifest.json`,a=`timestamps.json`;function o(t){return e.resolve(t,r)}function s(t,r){try{return JSON.parse(n.readFileSync(e.join(o(t),r),`utf-8`).replace(/^\uFEFF/,``))}catch{return}}function c(e){let t=s(e,a);if(typeof t?.syncedAt==`string`)return t.syncedAt;let n=s(e,i);return typeof n?.syncedAt==`string`?n.syncedAt:void 0}function l(e){return e.replace(/\\/g,`/`)}function u(e){let t=s(e,i),n=c(e),r=t?.origins&&typeof t.origins==`object`?Object.fromEntries(Object.entries(t.origins).map(([e,t])=>[l(e),t])):void 0,a=t?.tsconfigOverrides&&typeof t.tsconfigOverrides==`object`?t.tsconfigOverrides:void 0,o=t?.snapshots&&typeof t.snapshots==`object`?t.snapshots:void 0,u=/* @__PURE__ */ new Set([`files`,`origins`,`syncedAt`,`tsconfigOverrides`,`snapshots`]),d=Object.fromEntries(Object.entries(t??{}).filter(([e])=>!u.has(e)));return{files:Array.isArray(t?.files)?t.files.map(l):[],...r?{origins:r}:{},...a?{tsconfigOverrides:a}:{},...o?{snapshots:o}:{},...Object.keys(d).length>0?{extras:d}:{},...n?{syncedAt:n}:{}}}function d(r,s,c,l,u){let d=o(r);n.mkdirSync(d,{recursive:!0});let f=[...new Set(s)].sort();n.writeFileSync(e.join(d,i),t({...u,files:f,...l?{origins:Object.fromEntries(f.filter(e=>l[e]!==void 0).map(e=>[e,l[e]]))}:{}}),`utf-8`),n.writeFileSync(e.join(d,a),t({syncedAt:c??(/* @__PURE__ */ new Date()).toISOString()}),`utf-8`)}export{r as MANIFEST_DIR,i as MANIFEST_FILE,a as TIMESTAMPS_FILE,u as readManifest,c as readSyncedAt,d as writeManifest};
@@ -0,0 +1 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;function t(t,n){let r=e.relative(e.resolve(t),e.resolve(n));return r===``||!r.startsWith(`..`)&&!e.isAbsolute(r)}function n(n,r){if(!r.trim()||r.trim()===`.`)throw Error(`managed path must name a file, not the project root.`);let i=e.isAbsolute(r)||/^[a-zA-Z]:/.test(r)?e.resolve(r):e.resolve(n,r);if(!t(n,i))throw Error(`managed path "${r}" resolves outside the project root.`);return i}export{t as isInsideRoot,n as resolveManagedPath};
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{registrySourceAllowed as t}from"../../shared/src/registry-policy.js";import"../../shared/src/index.js";import n from"node:fs";import r from"node:os";const i=e.join(`.dbx`,`toolchain`),a=`providers.json`;function o(t){return t===`~`?r.homedir():t.startsWith(`~/`)||t.startsWith(`~\\`)?e.join(r.homedir(),t.slice(2)):t}function s(e){return/^https?:\/\//i.test(e)}function c(e){return e?(Array.isArray(e)?e:[e]).map(e=>o(String(e))).filter(Boolean):[]}function l(t=process.cwd()){return e.join(t,i,`providers.json`)}function u(t=process.cwd()){return e.join(t,i,`.registry`,`providers`,a)}function d(){return e.join(r.homedir(),`.dbx`,`toolchain`,`.registry`,`providers`)}function f(){return e.join(r.homedir(),`.dbx`,`toolchain`,`.registry`,a)}function p(){return e.join(r.homedir(),`.dbx`,`toolchain`,`cli`,`config.json`)}function m(){try{let e=n.readFileSync(p(),`utf-8`).replace(/^\uFEFF/,``),t=JSON.parse(e);return t&&typeof t==`object`?t:{}}catch{return{}}}function h(e=m()){if(e.providerRegistrySearchPaths!==void 0)return c(e.providerRegistrySearchPaths);let t=e.registrySearchPaths;return t&&typeof t==`object`&&!Array.isArray(t)?c(t.providers):[]}function g(t){return e.join(t,i,`registries.json`)}function _(e){try{let t=n.readFileSync(g(e),`utf-8`).replace(/^\uFEFF/,``),r=JSON.parse(t);return{templates:c(r.templates),providers:c(r.providers)}}catch{return{}}}function v(t,r){let i=g(t),a={...r.templates&&r.templates.length>0?{templates:r.templates}:{},...r.providers&&r.providers.length>0?{providers:r.providers}:{}};Object.keys(a).length===0?n.rmSync(i,{force:!0}):(n.mkdirSync(e.dirname(i),{recursive:!0}),n.writeFileSync(i,`${JSON.stringify(a,null,4)}\n`,`utf-8`))}function y(t){let r={...m(),...t},i=p();return n.mkdirSync(e.dirname(i),{recursive:!0}),n.writeFileSync(i,`${JSON.stringify(r,null,4)}\n`,`utf-8`),r}function b(t,n,r){let i=n=>s(n)?n:e.resolve(t,o(n));return i(n)===i(r)}function x(e,t){let n=_(e),r=n.providers??[];r.some(n=>b(e,n,t))||v(e,{...n.templates?{templates:n.templates}:{},providers:[...r,t]})}function S(e,t){let n=_(e);v(e,{...n.templates?{templates:n.templates}:{},...n.providers?{providers:n.providers.filter(n=>!b(e,n,t))}:{}})}function C(e){let t=h(m()),n=o(e);t.some(e=>b(process.cwd(),e,n))||y({providerRegistrySearchPaths:[...t,n]})}function w(e){let t=m(),n=o(e);y({providerRegistrySearchPaths:h(t).filter(e=>!b(process.cwd(),e,n))})}function T(e){y({providerRegistrySearchPaths:e.map(o)})}function E(e,t){let n=_(e);v(e,{...n.templates?{templates:n.templates}:{},providers:t})}function D(t){return(_(t).providers??[]).map(n=>s(n)?n:e.resolve(t,n))}function O(r=process.cwd(),a){let o=m(),c=[],u=e.join(r,i,`.registry`,`providers`);n.existsSync(u)&&c.push(u),c.push(...D(r)),n.existsSync(l(r))&&c.push(l(r));let p=[...h(o)],g=d();n.existsSync(g)&&p.push(g),n.existsSync(f())&&p.push(f());let _=/* @__PURE__ */ new Set,v=[];for(let[n,r]of[[`project`,c],[`global`,p]])for(let i of r){let r=s(i)?i:e.resolve(i);_.has(r)||t(r,a)&&(_.add(r),v.push({path:i,scope:n,remote:s(i)}))}return v}function k(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.name==`string`&&Array.isArray(e.commands)}function A(e){return(Array.isArray(e)?e:e&&typeof e==`object`&&Array.isArray(e.providers)?e.providers:[]).filter(k)}function j(t){try{if(n.statSync(t).isDirectory()){let r=[];for(let i of n.readdirSync(t))i.toLowerCase().endsWith(`.json`)&&r.push(...j(e.join(t,i)));return r}return A(JSON.parse(n.readFileSync(t,`utf-8`)))}catch{return[]}}function M(t,r){r.length===0?n.rmSync(t,{force:!0}):(n.mkdirSync(e.dirname(t),{recursive:!0}),n.writeFileSync(t,`${JSON.stringify(r,null,4)}\n`,`utf-8`))}function N(e=process.cwd()){let t=/* @__PURE__ */ new Set,n=[];for(let r of O(e))if(!(r.scope!==`project`||r.remote))for(let e of j(r.path))t.has(e.id)||(t.add(e.id),n.push(e));return n}function P(e,t){M(u(e),t)}function F(){let e=/* @__PURE__ */ new Set,t=[];for(let n of O())if(!(n.scope!==`global`||n.remote))for(let r of j(n.path))e.has(r.id)||(e.add(r.id),t.push(r));return t}function I(t){M(e.join(d(),a),t)}function L(e){let t=/* @__PURE__ */ new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}function R(e=process.cwd(),t){let n=O(e,t),r=n.filter(e=>e.scope===`project`&&!e.remote),i=n.filter(e=>e.scope===`global`&&!e.remote);return L([...r.flatMap(e=>j(e.path)),...i.flatMap(e=>j(e.path))])}async function z(e){try{let t=await fetch(e,{headers:{accept:`application/json`}});return t.ok?A(await t.json()):[]}catch{return[]}}async function B(e=process.cwd(),t){let n=O(e,t),r=[];for(let e of n)e.remote?r.push(...await z(e.path)):r.push(...j(e.path));return L(r)}export{C as addGlobalProviderRegistry,x as addProjectProviderRegistry,d as defaultGlobalProvidersDir,f as globalProviderRegistryPath,l as legacyProviderRegistryPath,u as providerRegistryPath,O as providerRegistryPaths,B as readAllProviders,R as readAllProvidersSync,F as readGlobalProviders,N as readProviderRegistry,w as removeGlobalProviderRegistry,S as removeProjectProviderRegistry,T as setGlobalProviderRegistries,E as setProjectProviderRegistries,I as writeGlobalProviders,P as writeProviderRegistry};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{registrySourceAllowed as t}from"../../shared/src/registry-policy.js";import"../../shared/src/index.js";import n from"node:fs";import r from"node:os";const i=e.join(`.dbx`,`toolchain`),a=`providers.json`;function o(t){return t===`~`?r.homedir():t.startsWith(`~/`)||t.startsWith(`~\\`)?e.join(r.homedir(),t.slice(2)):t}function s(e){return/^https?:\/\//i.test(e)}function c(e){return e?(Array.isArray(e)?e:[e]).map(e=>o(String(e))).filter(Boolean):[]}function l(t=process.cwd()){return e.join(t,i,`providers.json`)}function u(t=process.cwd()){return e.join(t,i,`.registry`,`providers`,a)}function d(){return e.join(r.homedir(),`.dbx`,`toolchain`,`.registry`,`providers`)}function f(){return e.join(r.homedir(),`.dbx`,`toolchain`,`.registry`,a)}function p(){return e.join(r.homedir(),`.dbx`,`toolchain`,`cli`,`config.json`)}function m(){try{let e=n.readFileSync(p(),`utf-8`).replace(/^\uFEFF/,``),t=JSON.parse(e);return t&&typeof t==`object`?t:{}}catch{return{}}}function h(e=m()){if(e.providerRegistrySearchPaths!==void 0)return c(e.providerRegistrySearchPaths);let t=e.registrySearchPaths;return t&&typeof t==`object`&&!Array.isArray(t)?c(t.providers):[]}function g(t){return e.join(t,i,`registries.json`)}function _(e){try{let t=n.readFileSync(g(e),`utf-8`).replace(/^\uFEFF/,``),r=JSON.parse(t);return{templates:c(r.templates),providers:c(r.providers)}}catch{return{}}}function v(t,r){let i=g(t),a={...r.templates&&r.templates.length>0?{templates:r.templates}:{},...r.providers&&r.providers.length>0?{providers:r.providers}:{}};Object.keys(a).length===0?n.rmSync(i,{force:!0}):(n.mkdirSync(e.dirname(i),{recursive:!0}),n.writeFileSync(i,`${JSON.stringify(a,null,4)}\n`,`utf-8`))}function y(t){let r={...m(),...t},i=p();return n.mkdirSync(e.dirname(i),{recursive:!0}),n.writeFileSync(i,`${JSON.stringify(r,null,4)}\n`,`utf-8`),r}function b(t,n,r){let i=n=>s(n)?n:e.resolve(t,o(n));return i(n)===i(r)}function x(e,t){let n=_(e),r=n.providers??[];r.some(n=>b(e,n,t))||v(e,{...n.templates?{templates:n.templates}:{},providers:[...r,t]})}function S(e,t){let n=_(e);v(e,{...n.templates?{templates:n.templates}:{},...n.providers?{providers:n.providers.filter(n=>!b(e,n,t))}:{}})}function C(e){let t=h(m()),n=o(e);t.some(e=>b(process.cwd(),e,n))||y({providerRegistrySearchPaths:[...t,n]})}function w(e){let t=m(),n=o(e);y({providerRegistrySearchPaths:h(t).filter(e=>!b(process.cwd(),e,n))})}function T(e){y({providerRegistrySearchPaths:e.map(o)})}function E(e,t){let n=_(e);v(e,{...n.templates?{templates:n.templates}:{},providers:t})}function D(t){return(_(t).providers??[]).map(n=>s(n)?n:e.resolve(t,n))}function O(r=process.cwd(),a){let o=m(),c=[],u=e.join(r,i,`.registry`,`providers`);n.existsSync(u)&&c.push(u),c.push(...D(r)),n.existsSync(l(r))&&c.push(l(r));let p=[...h(o)],g=d();n.existsSync(g)&&p.push(g),n.existsSync(f())&&p.push(f());let _=/* @__PURE__ */ new Set,v=[];for(let[n,r]of[[`project`,c],[`global`,p]])for(let i of r){let r=s(i)?i:e.resolve(i);_.has(r)||t(r,a)&&(_.add(r),v.push({path:i,scope:n,remote:s(i)}))}return v}function k(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.name==`string`&&Array.isArray(e.commands)}function A(e){return(Array.isArray(e)?e:e&&typeof e==`object`&&Array.isArray(e.providers)?e.providers:[]).filter(k)}function j(t,r=/* @__PURE__ */ new Set){try{if(n.statSync(t).isDirectory()){let i=n.realpathSync(t);if(r.has(i))return[];r.add(i);let a=[];for(let i of n.readdirSync(t))i.toLowerCase().endsWith(`.json`)&&a.push(...j(e.join(t,i),r));return a}return A(JSON.parse(n.readFileSync(t,`utf-8`)))}catch{return[]}}function M(t,r){r.length===0?n.rmSync(t,{force:!0}):(n.mkdirSync(e.dirname(t),{recursive:!0}),n.writeFileSync(t,`${JSON.stringify(r,null,4)}\n`,`utf-8`))}function N(e=process.cwd()){let t=/* @__PURE__ */ new Set,n=[];for(let r of O(e))if(!(r.scope!==`project`||r.remote))for(let e of j(r.path))t.has(e.id)||(t.add(e.id),n.push(e));return n}function P(e,t){M(u(e),t)}function F(){let e=/* @__PURE__ */ new Set,t=[];for(let n of O())if(!(n.scope!==`global`||n.remote))for(let r of j(n.path))e.has(r.id)||(e.add(r.id),t.push(r));return t}function I(t){M(e.join(d(),a),t)}function L(e){let t=/* @__PURE__ */ new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}function R(e=process.cwd(),t){let n=O(e,t),r=n.filter(e=>e.scope===`project`&&!e.remote),i=n.filter(e=>e.scope===`global`&&!e.remote);return L([...r.flatMap(e=>j(e.path)),...i.flatMap(e=>j(e.path))])}async function z(e){try{let t=await fetch(e,{headers:{accept:`application/json`}});return t.ok?A(await t.json()):[]}catch{return[]}}async function B(e=process.cwd(),t){let n=O(e,t),r=[];for(let e of n)e.remote?r.push(...await z(e.path)):r.push(...j(e.path));return L(r)}export{C as addGlobalProviderRegistry,x as addProjectProviderRegistry,d as defaultGlobalProvidersDir,f as globalProviderRegistryPath,l as legacyProviderRegistryPath,u as providerRegistryPath,O as providerRegistryPaths,B as readAllProviders,R as readAllProvidersSync,F as readGlobalProviders,N as readProviderRegistry,w as removeGlobalProviderRegistry,S as removeProjectProviderRegistry,T as setGlobalProviderRegistries,E as setProjectProviderRegistries,I as writeGlobalProviders,P as writeProviderRegistry};
@@ -32,6 +32,8 @@ export interface ResetToolchainResult {
32
32
  removed: string[];
33
33
  /** User-owned files restored before the manifest was removed. */
34
34
  restored: string[];
35
+ /** Manifest paths ignored because they resolve outside the project root. */
36
+ skipped: string[];
35
37
  /** Whether this was a dry run. */
36
38
  dryRun: boolean;
37
39
  }
@@ -55,6 +57,7 @@ export interface ResetProjectsResult {
55
57
  rel: string;
56
58
  removed: string[];
57
59
  restored: string[];
60
+ skipped: string[];
58
61
  }[];
59
62
  dryRun: boolean;
60
63
  }
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{selectProjects as i}from"./select.js";import a from"node:fs";function o(e){return e.replace(/\\/g,`/`)}function s(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function c(i){let{cwd:c}=i,l=i.dryRun??!1,u=s(i),d=[],f=(e,t)=>{a.existsSync(e)&&(l||a.rmSync(e,{force:!0}),d.push(t))};if(u.generated){let t=r(c);for(let n of t.files)t.origins?.[n]!==`adopted`&&f(e.resolve(c,n),n)}if(u.config){let n=t(c);n&&f(n,o(e.relative(c,n)))}let p=[];if(u.manifest&&i.restore&&p.push(...i.restore(c,{dryRun:l})),u.manifest){let t=e.resolve(c,n);a.existsSync(t)&&(l||a.rmSync(t,{recursive:!0,force:!0}),d.push(`${n}/`))}return{removed:d,restored:p,dryRun:l}}function l(e){let n=e.dryRun??!1;return{results:(e.recursive?i({root:e.root,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}}):[{dir:e.root,rel:`.`,hasConfig:!!t(e.root)}]).map(t=>{let{removed:r,restored:i}=c({cwd:t.dir,...e.generated===void 0?{}:{generated:e.generated},...e.manifest===void 0?{}:{manifest:e.manifest},...e.config===void 0?{}:{config:e.config},...e.restore?{restore:e.restore}:{},dryRun:n});return{dir:t.dir,rel:t.rel,removed:r,restored:i}}),dryRun:n}}export{l as resetProjects,c as resetToolchain};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{resolveManagedPath as i}from"./paths.js";import{selectProjects as a}from"./select.js";import o from"node:fs";function s(e){return e.replace(/\\/g,`/`)}function c(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function l(a){let{cwd:l}=a,u=a.dryRun??!1,d=c(a),f=[],p=[],m=(e,t)=>{o.existsSync(e)&&(u||o.rmSync(e,{force:!0}),f.push(t))};if(d.generated){let e=r(l);for(let t of e.files){if(e.origins?.[t]!==`created`)continue;let n;try{n=i(l,t)}catch{p.push(t);continue}m(n,t)}}if(d.config){let n=t(l);n&&m(n,s(e.relative(l,n)))}let h=[];if(d.manifest&&a.restore&&h.push(...a.restore(l,{dryRun:u})),d.manifest){let t=e.resolve(l,n);if(o.existsSync(t)){let r=/* @__PURE__ */ new Set([`manifest.json`,`timestamps.json`,`projects.json`]),i=o.readdirSync(t),a=i.filter(e=>r.has(e)).sort(),s=i.filter(e=>!r.has(e));if(!u){for(let n of a)o.rmSync(e.join(t,n),{force:!0});s.length===0&&o.rmSync(t,{recursive:!0,force:!0})}s.length===0?f.push(`${n}/`):f.push(...a.map(e=>`${n}/${e}`))}}return{removed:f,restored:h,skipped:p,dryRun:u}}function u(e){let n=e.dryRun??!1;return{results:(e.recursive?a({root:e.root,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}}):[{dir:e.root,rel:`.`,hasConfig:!!t(e.root)}]).map(t=>{let{removed:r,restored:i,skipped:a}=l({cwd:t.dir,...e.generated===void 0?{}:{generated:e.generated},...e.manifest===void 0?{}:{manifest:e.manifest},...e.config===void 0?{}:{config:e.config},...e.restore?{restore:e.restore}:{},dryRun:n});return{dir:t.dir,rel:t.rel,removed:r,restored:i,skipped:a}}),dryRun:n}}export{u as resetProjects,l as resetToolchain};
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../shared/src/logger.js";import"../../shared/src/index.js";import{ensureDbxGitignore as n}from"./gitignore.js";import{resolveProjectType as r}from"./project-type.js";import{readManifest as i,writeManifest as a}from"./manifest.js";import o from"node:fs";function s(e){return e.replace(/\\/g,`/`)}async function c(c){let{tasks:l,cwd:u,config:d,ownConfig:f,tokens:p}=c,m=c.quiet?()=>{}:c.log??(e=>t.info(e)),h=c.quiet?()=>{}:(e,n)=>t.warn(e,n),g=c.projectType??r(u,d),_=i(u),v={cwd:u,projectType:g,config:d,ownConfig:f??d,tokens:p,log:m,warn:h,check:c.check===!0,managedFiles:_.files,manifest:{..._.extras,..._.tsconfigOverrides?{tsconfigOverrides:_.tsconfigOverrides}:{},..._.snapshots?{snapshots:_.snapshots}:{}}},y=d.hooks??{};await y.beforeSync?.(v);let b=l.filter(e=>(!e.projectTypes||e.projectTypes.includes(g))&&(!e.enabled||e.enabled(d)));m(`running ${b.length} task(s)${c.check?` (check)`:``} [${g}]`);let x=[];for(let e of b){m(` - ${e.name}`),await y.beforeTask?.({task:e,ctx:v});let t=await e.run(v),n=Array.isArray(t)?t:void 0;n&&x.push(...n),await y.afterTask?.({task:e,ctx:v,...n?{files:n}:{}})}let S=new Map(x.map(e=>[s(e.path),e.content])),C=new Set(x.filter(e=>e.track===!1).map(e=>s(e.path))),w=/* @__PURE__ */ new Set;for(let e of b){let t=typeof e.keep==`function`?e.keep(d):e.keep??[];for(let e of t)w.add(e)}let T=e=>{for(let t of w)if(e===t||e.endsWith(`/${t}`)||e.endsWith(t))return!0;return!1},E=[];for(let[t,n]of S){let r=e.resolve(u,t);(o.existsSync(r)?o.readFileSync(r,`utf-8`):void 0)!==n&&E.push(t)}let D=new Map([...S.keys()].map(t=>[t,o.existsSync(e.resolve(u,t))])),O=e=>_.origins?.[e]??(_.files.includes(e)?`created`:D.get(e)?`adopted`:`created`),k=_.files.filter(t=>!S.has(t)&&!C.has(t)&&!T(t)&&o.existsSync(e.resolve(u,t))&&O(t)===`created`),A=k.map(t=>({path:t,content:o.readFileSync(e.resolve(u,t),`utf-8`)})),j=E.length===0&&k.length===0;if(c.check){if(j)m(`generated files are in sync.`);else{m(`generated files are out of date:`);for(let e of E)m(` M ${e}`);for(let e of k)m(` D ${e}`);m("Run `dbx sync` to regenerate them.")}let e={written:[],changed:E,removed:k,removedFiles:A,upToDate:j};return await y.afterSync?.({cwd:u,config:d,result:e}),e}let M=[];for(let[t,n]of S){let r=e.resolve(u,t);o.mkdirSync(e.dirname(r),{recursive:!0}),o.writeFileSync(r,n,`utf-8`),M.push(t)}for(let t of k)o.rmSync(e.resolve(u,t),{force:!0});let N=[...S.keys()].filter(e=>!C.has(e)),P={};for(let e of N)P[e]=O(e);a(u,N,void 0,P,v.manifest),n(u)&&m(` I .gitignore (added the .dbx ignore block)`),m(`wrote ${M.length}, removed ${k.length} file(s)${E.length?`, updated ${E.length}`:``}.`);let F={written:M,changed:E,removed:k,removedFiles:A,upToDate:j};return await y.afterSync?.({cwd:u,config:d,result:F}),F}export{c as runSync};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../shared/src/logger.js";import"../../shared/src/index.js";import{ensureDbxGitignore as n}from"./gitignore.js";import{resolveProjectType as r}from"./project-type.js";import{readManifest as i,writeManifest as a}from"./manifest.js";import{resolveManagedPath as o}from"./paths.js";import s from"node:fs";function c(e){return e.replace(/\\/g,`/`)}async function l(l){let{tasks:u,cwd:d,config:f,ownConfig:p,tokens:m}=l,h=l.quiet?()=>{}:l.log??(e=>t.info(e)),g=l.quiet?()=>{}:(e,n)=>t.warn(e,n),_=l.projectType??r(d,f),v=i(d),y={cwd:d,projectType:_,config:f,ownConfig:p??f,tokens:m,log:h,warn:g,check:l.check===!0,managedFiles:v.files,manifest:{...v.extras,...v.tsconfigOverrides?{tsconfigOverrides:v.tsconfigOverrides}:{},...v.snapshots?{snapshots:v.snapshots}:{}}},b=f.hooks??{};await b.beforeSync?.(y);let x=u.filter(e=>(!e.projectTypes||e.projectTypes.includes(_))&&(!e.enabled||e.enabled(f)));h(`running ${x.length} task(s)${l.check?` (check)`:``} [${_}]`);let S=[];for(let e of x){h(` - ${e.name}`),await b.beforeTask?.({task:e,ctx:y});let t=await e.run(y),n=Array.isArray(t)?t:void 0;n&&S.push(...n),await b.afterTask?.({task:e,ctx:y,...n?{files:n}:{}})}for(let e of S)o(d,e.path);let C=new Map(S.map(t=>{let n=o(d,t.path);return[c(e.relative(d,n)),t.content]})),w=new Set(S.filter(e=>e.track===!1).map(e=>c(e.path))),T=/* @__PURE__ */ new Set;for(let e of u){if(e.projectTypes&&!e.projectTypes.includes(_))continue;let t=typeof e.keep==`function`?e.keep(f):e.keep??[];for(let e of t)T.add(e)}let E=e=>{for(let t of T)if(e===t||e.endsWith(`/${t}`)||e.endsWith(t))return!0;return!1},D=[];for(let[t,n]of C){let r=e.resolve(d,t);(s.existsSync(r)?s.readFileSync(r,`utf-8`):void 0)!==n&&D.push(t)}let O=new Map([...C.keys()].map(t=>[t,s.existsSync(e.resolve(d,t))])),k=e=>v.origins?.[e]||(v.files.includes(e)||O.get(e)?`adopted`:`created`),A=[],j=[];for(let e of v.files){if(C.has(e)||w.has(e)||E(e)||k(e)!==`created`)continue;let t;try{t=o(d,e)}catch(t){g(`sync: ignoring unsafe manifest path "${e}": ${t instanceof Error?t.message:String(t)}`);continue}s.existsSync(t)&&(A.push(e),j.push({path:e,content:s.readFileSync(t,`utf-8`)}))}let M=D.length===0&&A.length===0;if(l.check){if(M)h(`generated files are in sync.`);else{h(`generated files are out of date:`);for(let e of D)h(` M ${e}`);for(let e of A)h(` D ${e}`);h("Run `dbx sync` to regenerate them.")}let e={written:[],changed:D,removed:A,removedFiles:j,upToDate:M};return await b.afterSync?.({cwd:d,config:f,result:e}),e}let N=[];for(let[t,n]of C){let r=e.resolve(d,t);s.mkdirSync(e.dirname(r),{recursive:!0}),s.writeFileSync(r,n,`utf-8`),N.push(t)}for(let t of A)s.rmSync(e.resolve(d,t),{force:!0});let P=[...C.keys()].filter(e=>!w.has(e)),F={};for(let e of P)F[e]=k(e);a(d,P,void 0,F,y.manifest),n(d)&&h(` I .gitignore (added the .dbx ignore block)`),h(`wrote ${N.length}, removed ${A.length} file(s)${D.length?`, updated ${D.length}`:``}.`);let I={written:N,changed:D,removed:A,removedFiles:j,upToDate:M};return await b.afterSync?.({cwd:d,config:f,result:I}),I}export{l as runSync};
@@ -1 +1 @@
1
- import"node:path";import"node:url";import.meta.url;import{deepMerge as e}from"../../shared/src/object-utils.js";import{mergeJsonAt as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";function n(n={}){return{name:`vscode`,projectTypes:n.projectTypes??[`monorepo-root`,`project`],...n.enabled?{enabled:n.enabled}:{},run:r=>{let i=[],a=(typeof n.settings==`function`?n.settings(r.config):n.settings??[]).reduce((t,n)=>e(t,n),{});return Object.keys(a).length>0&&i.push({path:`.vscode/settings.json`,content:t(r.cwd,`.vscode/settings.json`,a)}),n.extensions?.length&&i.push({path:`.vscode/extensions.json`,content:t(r.cwd,`.vscode/extensions.json`,{recommendations:n.extensions})}),i}}}export{n as vscodeSyncTask};
1
+ import"node:path";import"node:url";import.meta.url;import{deepMerge as e}from"../../shared/src/object-utils.js";import{mergeJsonAt as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";function n(n={}){return{name:`vscode`,projectTypes:n.projectTypes??[`monorepo-root`,`project`],...n.enabled?{enabled:n.enabled}:{},run:r=>{let i=[],a=(typeof n.settings==`function`?n.settings(r.config):n.settings??[]).reduce((t,n)=>e(t,n),{});return Object.keys(a).length>0&&i.push({path:`.vscode/settings.json`,content:t(r.cwd,`.vscode/settings.json`,a),track:!1}),n.extensions?.length&&i.push({path:`.vscode/extensions.json`,content:t(r.cwd,`.vscode/extensions.json`,{recommendations:n.extensions}),track:!1}),i}}}export{n as vscodeSyncTask};
@@ -1,9 +1,9 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
3
  import { ProjectType } from "../../shared/src/config-types.js";
4
+ import { RunSyncOptions } from "./sync.js";
4
5
  import { SyncTask, ToolchainConfig } from "../../shared/src/toolchain.js";
5
6
  import "../../shared/src/index.js";
6
- import { RunSyncOptions } from "./sync.js";
7
7
  //#region packages/core/src/watch.d.ts
8
8
  export interface RunWatchOptions extends Omit<RunSyncOptions, 'check'> {
9
9
  /** The config file to watch (re-runs every task on change). */
@@ -1 +1 @@
1
- import{default as e}from"node:path";import"node:url";import.meta.url;import{isIgnoredPath as t,resolveIgnorePatterns as n}from"../../shared/src/ignore.js";import{logger as r}from"../../shared/src/logger.js";import{sectionConfig as i}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as a}from"./project-type.js";import{findConfigFile as o,loadToolchainConfig as s}from"./loader.js";import{runSync as c}from"./sync.js";import l from"node:fs";import{Glob as u}from"glob";function d(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e){if(n&&i.projectTypes&&!i.projectTypes.includes(n)||i.enabled&&!i.enabled(t))continue;let e=typeof i.watch==`function`?i.watch(t):i.watch??[];for(let t of e)r.add(t)}return[...r]}async function f(f){let{cwd:p,tasks:m}=f,h=f.configPath?e.resolve(p,f.configPath):void 0,g=f.quiet?()=>{}:f.log??(e=>r.info(e)),_={...f},v=[],y=[],b=0,x,S=!1,C=!1,w=!1,T=!1,E=()=>i(_.config.watch)?.debounce??f.debounce??150,D=()=>{for(let e of y)e.close();y=[]},O=async()=>{let e=f.configPath?o(p):void 0,t=h&&l.existsSync(h)?h:e;if(!t)return!1;h=t;try{let e=await s(p,{config:t,fresh:!0});return _={..._,config:e.config,ownConfig:e.ownConfig,tokens:e.tokens,projectType:e.projectType},!0}catch(e){return r.error(`failed to reload ${h}: ${e instanceof Error?e.message:String(e)}`),!1}},k=async()=>{if(S)C=!0;else{S=!0;try{w&&(w=!1,await O()&&(T=!0)),await c(_)}finally{S=!1,b=Date.now()+Math.max(E()*3,300),T&&(T=!1,M()),C&&(C=!1,A())}}},A=()=>{clearTimeout(x),x=setTimeout(k,E())},j=n=>{if(!(Date.now()<b)){if(n){let r=e.relative(p,n).replace(/\\/g,`/`);if(t(r,v))return;e.basename(n).startsWith(`dbx.config.`)&&(w=!0)}_.config?.hooks?.onChange?.(n?{path:n}:{}),A()}};function M(){D();let r=i(_.config.watch);v=n(p,{...(r?.exclude??f.exclude)===void 0?{}:{exclude:r?.exclude??f.exclude},...(r?.gitignore??f.gitignore)===void 0?{}:{gitignore:r?.gitignore??f.gitignore}});let o=/* @__PURE__ */ new Set([p]),s=_.projectType??a(p,_.config);for(let n of d(m,_.config,s))try{let r=new u(n,{cwd:p,dot:!0,ignore:v}).walkSync();for(let n of r){let r=e.resolve(p,n),i=e.relative(p,r).replace(/\\/g,`/`);t(i,v)||o.add(e.dirname(r))}}catch{}if(h)try{y.push(l.watch(h,()=>{g(`config changed; re-syncing`),w=!0,j(h)}))}catch{}for(let t of o){let n=n=>j(e.join(t,n??``));try{y.push(l.watch(t,{recursive:!0},(e,t)=>n(t)))}catch{try{y.push(l.watch(t,(e,t)=>n(t)))}catch{}}}}await k(),M(),g(`watching for changes (Ctrl+C to stop)`),await new Promise(e=>{let t=()=>{x&&clearTimeout(x),x=void 0,D(),process.off(`SIGINT`,t),process.off(`SIGTERM`,t),e()};process.on(`SIGINT`,t),process.on(`SIGTERM`,t)})}export{d as resolveWatchGlobs,f as runWatch};
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{isIgnoredPath as t,resolveIgnorePatterns as n}from"../../shared/src/ignore.js";import{logger as r}from"../../shared/src/logger.js";import{sectionConfig as i}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as a}from"./project-type.js";import{findConfigFile as o,loadToolchainConfig as s}from"./loader.js";import{runSync as c}from"./sync.js";import l from"node:fs";import{Glob as u}from"glob";function d(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e){if(n&&i.projectTypes&&!i.projectTypes.includes(n)||i.enabled&&!i.enabled(t))continue;let e=typeof i.watch==`function`?i.watch(t):i.watch??[];for(let t of e)r.add(t)}return[...r]}async function f(f){let{cwd:p,tasks:m}=f,h=f.configPath?e.resolve(p,f.configPath):void 0,g=f.quiet?()=>{}:f.log??(e=>r.info(e)),_={...f},v=[],y=[],b=0,x,S=!1,C=!1,w=!1,T=!1,E=()=>i(_.config.watch)?.debounce??f.debounce??150,D=()=>{for(let e of y)e.close();y=[]},O=async()=>{let e=f.configPath?o(p):void 0,t=h&&l.existsSync(h)?h:e;if(!t)return!1;h=t;try{let e=await s(p,{config:t,fresh:!0});return _={..._,config:e.config,ownConfig:e.ownConfig,tokens:e.tokens,projectType:e.projectType},!0}catch(e){return r.error(`failed to reload ${h}: ${e instanceof Error?e.message:String(e)}`),!1}},k=async()=>{if(S)C=!0;else{S=!0;try{w&&(w=!1,await O()&&(T=!0)),await c(_)}catch(e){r.error(`sync failed: ${e instanceof Error?e.message:String(e)}`)}finally{S=!1,b=Date.now()+Math.max(E()*3,300),T&&(T=!1,N()),C&&(C=!1,A())}}},A=()=>{clearTimeout(x),x=setTimeout(()=>{k()},E())},j=n=>{let r=!1;if(n){let i=e.relative(p,n).replace(/\\/g,`/`);if(t(i,v))return;r=e.basename(n).startsWith(`dbx.config.`),r&&(w=!0)}Date.now()<b&&!r||(_.config?.hooks?.onChange?.(n?{path:n}:{}),A())},M=e=>{e.on(`error`,e=>{r.error(`watch error: ${e instanceof Error?e.message:String(e)}`)}),y.push(e)};function N(){D();let r=i(_.config.watch);v=n(p,{...(r?.exclude??f.exclude)===void 0?{}:{exclude:r?.exclude??f.exclude},...(r?.gitignore??f.gitignore)===void 0?{}:{gitignore:r?.gitignore??f.gitignore}});let o=/* @__PURE__ */ new Set([p]),s=_.projectType??a(p,_.config);for(let n of d(m,_.config,s))try{let r=new u(n,{cwd:p,dot:!0,ignore:v}).walkSync();for(let n of r){let r=e.resolve(p,n),i=e.relative(p,r).replace(/\\/g,`/`);t(i,v)||o.add(e.dirname(r))}}catch{}if(h)try{M(l.watch(h,()=>{g(`config changed; re-syncing`),w=!0,j(h)}))}catch{}for(let t of o){let n=n=>j(e.join(t,n??``));try{M(l.watch(t,{recursive:!0},(e,t)=>n(t)))}catch{try{M(l.watch(t,(e,t)=>n(t)))}catch{}}}}await k(),N(),g(`watching for changes (Ctrl+C to stop)`),await new Promise(e=>{let t=()=>{x&&clearTimeout(x),x=void 0,D(),process.off(`SIGINT`,t),process.off(`SIGTERM`,t),e()};process.on(`SIGINT`,t),process.on(`SIGTERM`,t)})}export{d as resolveWatchGlobs,f as runWatch};