@deltabox/toolchain 2.1.0 → 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.
- package/CHANGELOG.md +404 -627
- package/README.md +6 -0
- package/dist/changelog.d.ts +6 -5
- package/dist/changelog.js +1 -1
- package/dist/cli/commands/providers.js +1 -1
- package/dist/cli/commands/reset.js +1 -1
- package/dist/cli/config-selection.js +1 -1
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +1 -1
- package/dist/cli/register.js +1 -1
- package/dist/cli/update-check.js +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +1 -1
- package/dist/index.d.ts +38 -30
- package/dist/index.js +1 -1
- package/dist/migrate.d.ts +2 -2
- package/dist/migrate.js +1 -1
- package/dist/package.js +1 -1
- package/dist/packages/changelog/src/cli/index.js +1 -1
- package/dist/packages/changelog/src/index.d.ts +7 -6
- package/dist/packages/changelog/src/index.js +1 -1
- package/dist/packages/changelog/src/run-workflows.d.ts +39 -2
- package/dist/packages/changelog/src/run-workflows.js +1 -1
- package/dist/packages/changelog/src/run.d.ts +1 -1
- package/dist/packages/changelog/src/run.js +1 -1
- package/dist/packages/changelog/src/sync.js +1 -1
- package/dist/packages/changelog/src/templates.js +1 -1
- package/dist/packages/changelog/src/utils/format.d.ts +5 -3
- package/dist/packages/changelog/src/utils/format.js +5 -5
- package/dist/packages/changelog/src/utils/git.d.ts +1 -1
- package/dist/packages/changelog/src/utils/git.js +1 -1
- package/dist/packages/changelog/src/utils/reformat.d.ts +7 -2
- package/dist/packages/changelog/src/utils/reformat.js +5 -4
- package/dist/packages/changelog/src/utils/release-notes.js +1 -1
- package/dist/packages/changelog/src/utils/repo.js +1 -1
- package/dist/packages/changelog/src/utils/summary.d.ts +1 -1
- package/dist/packages/changelog/src/utils/types.d.ts +9 -46
- package/dist/packages/changelog/src/utils/versioning.d.ts +11 -14
- package/dist/packages/changelog/src/utils/write.js +1 -1
- package/dist/packages/changelog/src/workflows.d.ts +11 -3
- package/dist/packages/changelog/src/workflows.js +5 -5
- package/dist/packages/config/src/cli/index.d.ts +1 -1
- package/dist/packages/config/src/collect.js +1 -1
- package/dist/packages/config/src/config-json.js +1 -1
- package/dist/packages/config/src/generators/env.js +2 -2
- package/dist/packages/config/src/generators/markdown.js +8 -8
- package/dist/packages/config/src/generators/output.js +1 -0
- package/dist/packages/config/src/generators/types.js +3 -3
- package/dist/packages/config/src/index.d.ts +3 -3
- package/dist/packages/config/src/index.js +1 -1
- package/dist/packages/config/src/schema.d.ts +16 -0
- package/dist/packages/config/src/schema.js +1 -1
- package/dist/packages/config/src/types.d.ts +5 -0
- package/dist/packages/core/src/editor-config.js +1 -1
- package/dist/packages/core/src/loader.js +1 -1
- package/dist/packages/core/src/manifest.js +1 -1
- package/dist/packages/core/src/paths.js +1 -0
- package/dist/packages/core/src/provider-registry.js +1 -1
- package/dist/packages/core/src/reset.d.ts +3 -0
- package/dist/packages/core/src/reset.js +1 -1
- package/dist/packages/core/src/sync.js +1 -1
- package/dist/packages/core/src/vscode.js +1 -1
- package/dist/packages/core/src/watch.d.ts +1 -1
- package/dist/packages/core/src/watch.js +1 -1
- package/dist/packages/migrate/src/cli/index.js +1 -1
- package/dist/packages/migrate/src/eslint.js +1 -1
- package/dist/packages/migrate/src/index.d.ts +2 -2
- package/dist/packages/migrate/src/index.js +1 -1
- package/dist/packages/migrate/src/prettier.d.ts +2 -0
- package/dist/packages/migrate/src/prettier.js +2 -2
- package/dist/packages/migrate/src/vite-target.js +1 -1
- package/dist/packages/project/src/cli/index.js +1 -1
- package/dist/packages/project/src/index.d.ts +4 -4
- package/dist/packages/project/src/index.js +1 -1
- package/dist/packages/project/src/typescript.d.ts +4 -2
- package/dist/packages/project/src/typescript.js +2 -2
- package/dist/packages/shared/src/changelog-callbacks.d.ts +72 -0
- package/dist/packages/shared/src/config-schema/biome.d.ts +8 -1
- package/dist/packages/shared/src/config-schema/biome.js +1 -1
- package/dist/packages/shared/src/config-schema/changelog.d.ts +3049 -30
- package/dist/packages/shared/src/config-schema/changelog.js +1 -1
- package/dist/packages/shared/src/config-schema/ci.d.ts +1163 -23
- package/dist/packages/shared/src/config-schema/external.js +1 -0
- package/dist/packages/shared/src/config-schema/format.d.ts +16 -10
- package/dist/packages/shared/src/config-schema/format.js +1 -1
- package/dist/packages/shared/src/config-schema/generated/azure-pipelines.d.ts +10501 -0
- package/dist/packages/shared/src/config-schema/generated/biome-config.d.ts +5962 -0
- package/dist/packages/shared/src/config-schema/generated/github-workflow.d.ts +179 -0
- package/dist/packages/shared/src/config-schema/generated/gitlab-ci.d.ts +296 -0
- package/dist/packages/shared/src/config-schema/generated/oxfmt-config.d.ts +411 -0
- package/dist/packages/shared/src/config-schema/generated/oxlint-config.d.ts +2218 -0
- package/dist/packages/shared/src/config-schema/index.d.ts +5355 -142
- package/dist/packages/shared/src/config-schema/index.js +1 -1
- package/dist/packages/shared/src/config-schema/json.d.ts +18 -0
- package/dist/packages/shared/src/config-schema/json.js +1 -0
- package/dist/packages/shared/src/config-schema/logger.d.ts +10 -1
- package/dist/packages/shared/src/config-schema/logger.js +1 -1
- package/dist/packages/shared/src/config-schema/tsconfig.d.ts +5 -4
- package/dist/packages/shared/src/config-schema/tsconfig.js +1 -1
- package/dist/packages/shared/src/config-schema/vite.d.ts +5 -3
- package/dist/packages/shared/src/config-schema/vite.js +1 -1
- package/dist/packages/shared/src/config-schema/workflow.d.ts +946 -31
- package/dist/packages/shared/src/config-schema/workflow.js +1 -1
- package/dist/packages/shared/src/config-types.d.ts +257 -33
- package/dist/packages/shared/src/fs-utils.d.ts +12 -0
- package/dist/packages/shared/src/fs-utils.js +8 -1
- package/dist/packages/shared/src/index.d.ts +19 -11
- package/dist/packages/shared/src/index.js +1 -1
- package/dist/packages/shared/src/object-utils.d.ts +2 -0
- package/dist/packages/shared/src/object-utils.js +1 -1
- package/dist/packages/shared/src/registry-policy.d.ts +3 -2
- package/dist/packages/shared/src/registry-policy.js +1 -1
- package/dist/packages/shared/src/run.d.ts +2 -0
- package/dist/packages/shared/src/run.js +1 -1
- package/dist/packages/shared/src/string-utils.d.ts +7 -5
- package/dist/packages/shared/src/string-utils.js +2 -2
- package/dist/packages/shared/src/template.d.ts +2 -1
- package/dist/packages/shared/src/template.js +1 -1
- package/dist/packages/shared/src/toolchain.d.ts +14 -7
- package/dist/packages/shared/src/toolchain.js +1 -1
- package/dist/packages/shared/src/types.d.ts +5 -0
- package/dist/packages/shared/src/vite-defaults.d.ts +4 -3
- package/dist/packages/shared/src/vite-defaults.js +1 -1
- package/dist/packages/shared/src/yaml.js +5 -5
- package/dist/packages/template/src/scaffold.js +1 -1
- package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
- package/dist/packages/tsconfig/src/overrides.d.ts +5 -5
- package/dist/packages/tsdown/src/config/node.d.ts +5 -0
- package/dist/packages/tsdown/src/config/node.js +2 -2
- package/dist/packages/tsdown/src/index.d.ts +3 -3
- package/dist/packages/tsdown/src/index.js +1 -1
- package/dist/packages/vite/src/plugin.js +1 -1
- package/dist/packages/vite/src/vp.js +1 -1
- package/dist/project.d.ts +3 -3
- package/dist/project.js +1 -1
- package/dist/shared.d.ts +18 -10
- package/dist/shared.js +1 -1
- package/dist/tooling.js +1 -1
- package/dist/tsdown.d.ts +2 -2
- package/dist/tsdown.js +1 -1
- 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{
|
|
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
|
|
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:[...
|
|
4
|
-
`)}]}}},sync:{name:`Toolchain sync`,on:{push:{branches:[.../* @__PURE__ */ new Set([r,i])]},pull_request:null},jobs:{sync:{"runs-on":`ubuntu-latest`,steps:[...
|
|
5
|
-
`)}]}}}}}function
|
|
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(`.`),
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
2
|
-
`)]:[]}function
|
|
3
|
-
`),`---`,``]}function
|
|
4
|
-
`).trim()}\n`}function
|
|
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`${
|
|
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(
|
|
18
|
+
${d(s)}
|
|
19
19
|
|
|
20
20
|
## ${i.core??`Core`}
|
|
21
21
|
|
|
22
22
|
${h}
|
|
23
23
|
|
|
24
24
|
${d(l)}
|
|
25
|
-
${g}`}function
|
|
26
|
-
`).trim()}\n`}export{
|
|
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
|
|
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
|
|
4
|
-
`)}\n${e}`}function
|
|
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,
|
|
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
|
|
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{
|
|
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,
|
|
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`)&&
|
|
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{
|
|
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
|
|
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,
|
|
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};
|