@deltabox/toolchain 0.0.0-stage → 1.1.21
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 +314 -0
- package/LICENSE +373 -0
- package/README.md +235 -2
- package/dist/_virtual/_rolldown/runtime.js +1 -0
- package/dist/biome.d.ts +4 -0
- package/dist/biome.js +1 -0
- package/dist/changelog.d.ts +17 -0
- package/dist/changelog.js +1 -0
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/projects.js +1 -0
- package/dist/cli/commands/providers.js +1 -0
- package/dist/cli/commands/reset.js +1 -0
- package/dist/cli/commands/shared.js +1 -0
- package/dist/cli/commands/sync.js +1 -0
- package/dist/cli/commands/watch.js +1 -0
- package/dist/cli/context.js +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/options.js +1 -0
- package/dist/cli/register.d.ts +14 -0
- package/dist/cli/register.js +1 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.js +1 -0
- package/dist/core.d.ts +13 -0
- package/dist/core.js +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +1 -0
- package/dist/migrate.d.ts +15 -0
- package/dist/migrate.js +1 -0
- package/dist/package.js +1 -0
- package/dist/packages/biome/src/config.js +1 -0
- package/dist/packages/biome/src/index.d.ts +34 -0
- package/dist/packages/biome/src/index.js +1 -0
- package/dist/packages/biome/src/vscode-settings.js +1 -0
- package/dist/packages/changelog/src/cli/index.d.ts +8 -0
- package/dist/packages/changelog/src/cli/index.js +1 -0
- package/dist/packages/changelog/src/index.d.ts +19 -0
- package/dist/packages/changelog/src/index.js +1 -0
- package/dist/packages/changelog/src/run-workflows.d.ts +35 -0
- package/dist/packages/changelog/src/run-workflows.js +1 -0
- package/dist/packages/changelog/src/run.d.ts +14 -0
- package/dist/packages/changelog/src/run.js +1 -0
- package/dist/packages/changelog/src/sync.d.ts +18 -0
- package/dist/packages/changelog/src/sync.js +1 -0
- package/dist/packages/changelog/src/templates.d.ts +27 -0
- package/dist/packages/changelog/src/templates.js +27 -0
- package/dist/packages/changelog/src/utils/args.d.ts +7 -0
- package/dist/packages/changelog/src/utils/args.js +1 -0
- package/dist/packages/changelog/src/utils/format.d.ts +27 -0
- package/dist/packages/changelog/src/utils/format.js +5 -0
- package/dist/packages/changelog/src/utils/git.d.ts +9 -0
- package/dist/packages/changelog/src/utils/git.js +1 -0
- package/dist/packages/changelog/src/utils/packages.js +4 -0
- package/dist/packages/changelog/src/utils/reformat.d.ts +9 -0
- package/dist/packages/changelog/src/utils/reformat.js +6 -0
- package/dist/packages/changelog/src/utils/repo.js +1 -0
- package/dist/packages/changelog/src/utils/summary.d.ts +7 -0
- package/dist/packages/changelog/src/utils/summary.js +1 -0
- package/dist/packages/changelog/src/utils/types.d.ts +58 -0
- package/dist/packages/changelog/src/utils/version.d.ts +6 -0
- package/dist/packages/changelog/src/utils/version.js +14 -0
- package/dist/packages/changelog/src/utils/write.js +1 -0
- package/dist/packages/changelog/src/workflows.d.ts +53 -0
- package/dist/packages/changelog/src/workflows.js +5 -0
- package/dist/packages/config/src/cli/index.d.ts +28 -0
- package/dist/packages/config/src/cli/index.js +1 -0
- package/dist/packages/config/src/collect.d.ts +19 -0
- package/dist/packages/config/src/collect.js +1 -0
- package/dist/packages/config/src/config-json.d.ts +33 -0
- package/dist/packages/config/src/config-json.js +1 -0
- package/dist/packages/config/src/engine.d.ts +56 -0
- package/dist/packages/config/src/engine.js +1 -0
- package/dist/packages/config/src/env-file.d.ts +33 -0
- package/dist/packages/config/src/env-file.js +3 -0
- package/dist/packages/config/src/env.d.ts +31 -0
- package/dist/packages/config/src/env.js +1 -0
- package/dist/packages/config/src/generators/cli.d.ts +78 -0
- package/dist/packages/config/src/generators/cli.js +1 -0
- package/dist/packages/config/src/generators/env.d.ts +42 -0
- package/dist/packages/config/src/generators/env.js +23 -0
- package/dist/packages/config/src/generators/index.d.ts +8 -0
- package/dist/packages/config/src/generators/index.js +1 -0
- package/dist/packages/config/src/generators/json.d.ts +24 -0
- package/dist/packages/config/src/generators/json.js +1 -0
- package/dist/packages/config/src/generators/markdown.d.ts +77 -0
- package/dist/packages/config/src/generators/markdown.js +27 -0
- package/dist/packages/config/src/generators/types.d.ts +32 -0
- package/dist/packages/config/src/generators/types.js +1 -0
- package/dist/packages/config/src/index.d.ts +21 -0
- package/dist/packages/config/src/index.js +1 -0
- package/dist/packages/config/src/root.d.ts +11 -0
- package/dist/packages/config/src/root.js +1 -0
- package/dist/packages/config/src/schema.d.ts +34 -0
- package/dist/packages/config/src/schema.js +1 -0
- package/dist/packages/config/src/types.d.ts +75 -0
- package/dist/packages/config/src/types.js +1 -0
- package/dist/packages/core/src/graph.d.ts +55 -0
- package/dist/packages/core/src/graph.js +1 -0
- package/dist/packages/core/src/index.d.ts +16 -0
- package/dist/packages/core/src/index.js +1 -0
- package/dist/packages/core/src/loader.d.ts +27 -0
- package/dist/packages/core/src/loader.js +1 -0
- package/dist/packages/core/src/manifest.d.ts +17 -0
- package/dist/packages/core/src/manifest.js +1 -0
- package/dist/packages/core/src/project-type.d.ts +14 -0
- package/dist/packages/core/src/project-type.js +1 -0
- package/dist/packages/core/src/reset.d.ts +51 -0
- package/dist/packages/core/src/reset.js +1 -0
- package/dist/packages/core/src/select.d.ts +32 -0
- package/dist/packages/core/src/select.js +1 -0
- package/dist/packages/core/src/sync.d.ts +42 -0
- package/dist/packages/core/src/sync.js +1 -0
- package/dist/packages/core/src/vscode.d.ts +27 -0
- package/dist/packages/core/src/vscode.js +1 -0
- package/dist/packages/core/src/watch.d.ts +17 -0
- package/dist/packages/core/src/watch.js +1 -0
- package/dist/packages/migrate/src/biome.d.ts +18 -0
- package/dist/packages/migrate/src/biome.js +2 -0
- package/dist/packages/migrate/src/check.d.ts +14 -0
- package/dist/packages/migrate/src/check.js +1 -0
- package/dist/packages/migrate/src/cli/index.d.ts +12 -0
- package/dist/packages/migrate/src/cli/index.js +1 -0
- package/dist/packages/migrate/src/dprint.d.ts +18 -0
- package/dist/packages/migrate/src/dprint.js +1 -0
- package/dist/packages/migrate/src/eslint.d.ts +24 -0
- package/dist/packages/migrate/src/eslint.js +1 -0
- package/dist/packages/migrate/src/index.d.ts +14 -0
- package/dist/packages/migrate/src/index.js +1 -0
- package/dist/packages/migrate/src/oxfmt-map.d.ts +28 -0
- package/dist/packages/migrate/src/oxfmt-map.js +1 -0
- package/dist/packages/migrate/src/oxlint-map.d.ts +22 -0
- package/dist/packages/migrate/src/oxlint-map.js +1 -0
- package/dist/packages/migrate/src/prettier.d.ts +20 -0
- package/dist/packages/migrate/src/prettier.js +2 -0
- package/dist/packages/migrate/src/registry.d.ts +26 -0
- package/dist/packages/migrate/src/registry.js +1 -0
- package/dist/packages/migrate/src/types.d.ts +75 -0
- package/dist/packages/migrate/src/vite-target.d.ts +31 -0
- package/dist/packages/migrate/src/vite-target.js +5 -0
- package/dist/packages/project/src/cli/index.d.ts +8 -0
- package/dist/packages/project/src/cli/index.js +1 -0
- package/dist/packages/project/src/config.d.ts +55 -0
- package/dist/packages/project/src/config.js +1 -0
- package/dist/packages/project/src/index.d.ts +10 -0
- package/dist/packages/project/src/index.js +1 -0
- package/dist/packages/project/src/typescript.d.ts +66 -0
- package/dist/packages/project/src/typescript.js +22 -0
- package/dist/packages/shared/src/config-schema.d.ts +2039 -0
- package/dist/packages/shared/src/config-schema.js +1 -0
- package/dist/packages/shared/src/fs-utils.d.ts +18 -0
- package/dist/packages/shared/src/fs-utils.js +1 -0
- package/dist/packages/shared/src/index.d.ts +17 -0
- package/dist/packages/shared/src/index.js +1 -0
- package/dist/packages/shared/src/object-utils.d.ts +15 -0
- package/dist/packages/shared/src/object-utils.js +1 -0
- package/dist/packages/shared/src/provider.d.ts +66 -0
- package/dist/packages/shared/src/provider.js +1 -0
- package/dist/packages/shared/src/run.d.ts +26 -0
- package/dist/packages/shared/src/run.js +1 -0
- package/dist/packages/shared/src/string-utils.d.ts +52 -0
- package/dist/packages/shared/src/string-utils.js +3 -0
- package/dist/packages/shared/src/template.d.ts +53 -0
- package/dist/packages/shared/src/template.js +1 -0
- package/dist/packages/shared/src/toolchain.d.ts +159 -0
- package/dist/packages/shared/src/toolchain.js +1 -0
- package/dist/packages/shared/src/types.d.ts +100 -0
- package/dist/packages/shared/src/yaml.d.ts +17 -0
- package/dist/packages/shared/src/yaml.js +5 -0
- package/dist/packages/template/src/builtin.d.ts +10 -0
- package/dist/packages/template/src/builtin.js +1 -0
- package/dist/packages/template/src/cli/index.d.ts +8 -0
- package/dist/packages/template/src/cli/index.js +1 -0
- package/dist/packages/template/src/index.d.ts +10 -0
- package/dist/packages/template/src/index.js +1 -0
- package/dist/packages/template/src/local.d.ts +20 -0
- package/dist/packages/template/src/local.js +1 -0
- package/dist/packages/template/src/online.d.ts +17 -0
- package/dist/packages/template/src/online.js +1 -0
- package/dist/packages/template/src/registry.d.ts +48 -0
- package/dist/packages/template/src/registry.js +1 -0
- package/dist/packages/template/src/scaffold.d.ts +25 -0
- package/dist/packages/template/src/scaffold.js +1 -0
- package/dist/packages/template/src/types.d.ts +59 -0
- package/dist/packages/tsconfig/src/cli/generate/index.d.ts +35 -0
- package/dist/packages/tsconfig/src/cli/generate/index.js +1 -0
- package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +43 -0
- package/dist/packages/tsconfig/src/cli/generate/utils.js +1 -0
- package/dist/packages/tsconfig/src/cli/index.d.ts +11 -0
- package/dist/packages/tsconfig/src/cli/index.js +1 -0
- package/dist/packages/tsconfig/src/index.d.ts +10 -0
- package/dist/packages/tsconfig/src/index.js +1 -0
- package/dist/packages/tsconfig/src/sync.d.ts +15 -0
- package/dist/packages/tsconfig/src/sync.js +1 -0
- package/dist/packages/tsconfig/src/templates/tsconfig.base.js +1 -0
- package/dist/packages/tsconfig/src/templates/tsconfig.build.js +1 -0
- package/dist/packages/tsconfig/src/templates/tsconfig.default.js +1 -0
- package/dist/packages/tsconfig/src/templates.d.ts +38 -0
- package/dist/packages/tsconfig/src/templates.js +1 -0
- package/dist/packages/tsdown/src/cleanup.d.ts +17 -0
- package/dist/packages/tsdown/src/cleanup.js +1 -0
- package/dist/packages/tsdown/src/cli/index.d.ts +11 -0
- package/dist/packages/tsdown/src/cli/index.js +1 -0
- package/dist/packages/tsdown/src/config/node.d.ts +37 -0
- package/dist/packages/tsdown/src/config/node.js +3 -0
- package/dist/packages/tsdown/src/index.d.ts +9 -0
- package/dist/packages/tsdown/src/index.js +1 -0
- package/dist/packages/vite/src/cli/index.d.ts +8 -0
- package/dist/packages/vite/src/cli/index.js +1 -0
- package/dist/packages/vite/src/commands.d.ts +29 -0
- package/dist/packages/vite/src/commands.js +1 -0
- package/dist/packages/vite/src/index.d.ts +9 -0
- package/dist/packages/vite/src/index.js +1 -0
- package/dist/packages/vite/src/plugin.d.ts +65 -0
- package/dist/packages/vite/src/plugin.js +1 -0
- package/dist/packages/vite/src/provider.d.ts +11 -0
- package/dist/packages/vite/src/provider.js +1 -0
- package/dist/packages/vite/src/sync.d.ts +25 -0
- package/dist/packages/vite/src/sync.js +2 -0
- package/dist/packages/vite/src/vp.d.ts +59 -0
- package/dist/packages/vite/src/vp.js +1 -0
- package/dist/project.d.ts +7 -0
- package/dist/project.js +1 -0
- package/dist/providers.d.ts +11 -0
- package/dist/providers.js +1 -0
- package/dist/shared.d.ts +14 -0
- package/dist/shared.js +1 -0
- package/dist/sync.d.ts +12 -0
- package/dist/sync.js +1 -0
- package/dist/template.d.ts +11 -0
- package/dist/template.js +1 -0
- package/dist/tsconfig.d.ts +8 -0
- package/dist/tsconfig.js +1 -0
- package/dist/tsdown.d.ts +7 -0
- package/dist/tsdown.js +1 -0
- package/dist/vite.d.ts +10 -0
- package/dist/vite.js +1 -0
- package/package.json +114 -3
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ConfigScopes } from "../types.js";
|
|
4
|
+
import { CollectEnvVarsOptions } from "../collect.js";
|
|
5
|
+
import { ZodType } from "zod";
|
|
6
|
+
import { Schema } from "untyped";
|
|
7
|
+
//#region packages/config/src/generators/markdown.d.ts
|
|
8
|
+
export interface RenderMarkdownOptions {
|
|
9
|
+
/** Output directory. When omitted, nothing is written. */
|
|
10
|
+
outDir?: string;
|
|
11
|
+
/** Page outline (defaults to `[2, 3, 4]`). */
|
|
12
|
+
outline?: number[];
|
|
13
|
+
/** The base group hoisted out of the nested groups (default `base`). */
|
|
14
|
+
baseGroup?: string;
|
|
15
|
+
/** The scope whose env vars render as CLI flags (default `cli`). */
|
|
16
|
+
cliScope?: string;
|
|
17
|
+
/** Env-var prefix (default `APP_`). */
|
|
18
|
+
envPrefix?: string;
|
|
19
|
+
/** Label overrides for the index page. */
|
|
20
|
+
labels?: {
|
|
21
|
+
required?: string;
|
|
22
|
+
core?: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
};
|
|
25
|
+
/** A raw intro paragraph for the index page (replaces the default one). */
|
|
26
|
+
intro?: string;
|
|
27
|
+
/** A note shown above the required table (default: the standard sentence). */
|
|
28
|
+
requiredNote?: string;
|
|
29
|
+
/** A note shown above the core table (default: the standard sentence). */
|
|
30
|
+
coreNote?: string;
|
|
31
|
+
/** A "References" list appended to the index page. */
|
|
32
|
+
references?: {
|
|
33
|
+
label: string;
|
|
34
|
+
href: string;
|
|
35
|
+
}[];
|
|
36
|
+
/** Shorthand flags keyed by env var name (for the CLI scope). */
|
|
37
|
+
shortFlags?: Record<string, string>;
|
|
38
|
+
/** Custom env-name -> dotted-path derivation. */
|
|
39
|
+
envPathOf?: CollectEnvVarsOptions['envPathOf'];
|
|
40
|
+
}
|
|
41
|
+
export interface GenerateMarkdownOptions extends RenderMarkdownOptions {
|
|
42
|
+
/** Index file name (defaults to `index.md`). */
|
|
43
|
+
indexFilename?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Render the markdown reference for a single scope (base + grouped configs). */
|
|
46
|
+
export declare function renderScopeMarkdown(scope: string, schema: Schema, options?: RenderMarkdownOptions): string;
|
|
47
|
+
/** Render the index file: explains the env convention + lists required/core. */
|
|
48
|
+
export declare function renderConfigIndex(scopes: ConfigScopes, options?: RenderMarkdownOptions): string;
|
|
49
|
+
/** Generate the markdown reference (per-scope files + index) into `outDir`. */
|
|
50
|
+
export declare function generateConfigMarkdown(scopes: ConfigScopes, options: GenerateMarkdownOptions & {
|
|
51
|
+
outDir: string;
|
|
52
|
+
}): string[];
|
|
53
|
+
/** A section of a config-file reference (its key + options schema). */
|
|
54
|
+
export interface ConfigFileSection {
|
|
55
|
+
/** The config key, eg. `project`. */
|
|
56
|
+
key: string;
|
|
57
|
+
/** A short description shown under the heading. */
|
|
58
|
+
description?: string;
|
|
59
|
+
/** The section's options-object schema. */
|
|
60
|
+
schema: ZodType;
|
|
61
|
+
}
|
|
62
|
+
export interface RenderConfigFileOptions {
|
|
63
|
+
/** Document title (default `Configuration`). */
|
|
64
|
+
title?: string;
|
|
65
|
+
/** Intro paragraph under the title. */
|
|
66
|
+
intro?: string;
|
|
67
|
+
/** Page outline (default `[2, 3, 4]`). */
|
|
68
|
+
outline?: number[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Render a single markdown reference for a config **file** (no environment-var
|
|
72
|
+
* language): one `## \`key\`` section per schema, with its fields, types,
|
|
73
|
+
* defaults and descriptions. This is what a `dbx.config.ts`-style
|
|
74
|
+
* reference is generated from.
|
|
75
|
+
*/
|
|
76
|
+
export declare function renderConfigFileMarkdown(sections: ConfigFileSection[], options?: RenderConfigFileOptions): string;
|
|
77
|
+
//#endregion
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{titleCase as t}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{splitBaseSchema as n,zodToJsonSchema as r}from"../schema.js";import{collectEnvVars as i}from"../collect.js";import{cliFlagLabel as a}from"./cli.js";import o from"node:fs";function s(e,t,n,r){let i=[`${n} ${t}`];return e.type===`object`&&e.properties?(i.push(...c(e,`${n}#`,r)),i):(e.env&&i.push(`- **Env**: \`${e.env}\``),i.push(`- **Type**: \`${e.tsType??(Array.isArray(e.type)?e.type.join(` | `):e.type)??`any`}\``),e.default!==void 0&&i.push(`- **Default**: \`${JSON.stringify(e.default)}\``),e.description&&i.push(``,e.description),i)}function c(e,t,n){let r=[];for(let[i,o]of Object.entries(e.properties??{})){let e=n.useFlags&&o.env?a(o.env,n):`\`${i}\``;r.push(``,...s(o,e,t,n))}return r}function l(e,r,i={}){let a=i.outline??[2,3,4],o={useFlags:e===(i.cliScope??`cli`),baseGroup:i.baseGroup??`base`,...i.envPrefix?{envPrefix:i.envPrefix}:{},...i.shortFlags?{shortFlags:i.shortFlags}:{}},{base:s,groups:l}=n(r,o.baseGroup),u=[`---`,`title: ${t(e)} Configuration`,`outline: ${JSON.stringify(a)}`,`---`,``,`# ${t(e)} Configuration`,``,`Every setting below is configured through an environment variable.`,``,`## Base`,``,...c(s,`###`,o)];for(let[e,n]of Object.entries(l.properties??{}))u.push(``,`## ${t(e)}`,``,...c(n,`###`,o));return`${u.join(`
|
|
2
|
+
`).trim()}\n`}function u(e){return e===void 0?`—`:Array.isArray(e)?`\`${e.join(`,`)}\``:typeof e==`object`?`\`${JSON.stringify(e)}\``:`\`${String(e)}\``}function d(e,t,n){for(let r of Object.values(e.properties??{})){let e=r;if(e.type===`object`&&e.properties)d(r,t,n);else if(e.env){let r=e.envDefault??e.default;n.push({name:e.env,scope:t,...e.description?{description:e.description}:{},...r===void 0?{}:{default:r},...e.required===!0?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}})}}}function f(e,t={}){let a=t.outline??[2,3,4],o=t.baseGroup??`base`,s=t.labels??{},c=[],l=[];for(let[t,i]of Object.entries(e)){let e=i.jsonSchema??r(i.zodSchema);d(n(e,o).base,t,l)}for(let n of i(e,t.envPrefix??`APP_`,{envPathOf:t.envPathOf}))n.required&&c.push({name:n.name,scope:n.scope,...n.description?{description:n.description}:{},...n.default===void 0?{}:{default:n.default}});let f=e=>[`| Variable | Default | Description |`,`| -------- | ------- | ----------- |`,...e.map(e=>`| \`${e.name}\` | ${u(e.default)} | ${(e.description??``).replace(/\n/g,` `).replace(/\|/g,`\\|`)} |`)].join(`
|
|
3
|
+
`),p=s.title??`Environment variables`,m=t.intro??`Environment variables are prefixed with \`${t.envPrefix??`APP_`}\`.
|
|
4
|
+
The underscore is a path separator, so every config value has an environment
|
|
5
|
+
variable equivalent.`,h=t.requiredNote??`These variables have no safe default and **must** be set:`,g=t.coreNote??`The core (base) config values:`,_=t.references&&t.references.length?`\n## References\n\n${t.references.map(e=>`- [${e.label}](${e.href})`).join(`
|
|
6
|
+
`)}\n`:``;return`---
|
|
7
|
+
title: ${p}
|
|
8
|
+
outline: ${JSON.stringify(a)}
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ${p}
|
|
12
|
+
|
|
13
|
+
${m}
|
|
14
|
+
|
|
15
|
+
## ${s.required??`Required`}
|
|
16
|
+
|
|
17
|
+
${h}
|
|
18
|
+
|
|
19
|
+
${f(c)}
|
|
20
|
+
|
|
21
|
+
## ${s.core??`Core`}
|
|
22
|
+
|
|
23
|
+
${g}
|
|
24
|
+
|
|
25
|
+
${f(l)}
|
|
26
|
+
${_}`}function p(t,n){let i=n.outline??[2,3,4],a=Object.entries(t).map(([t,a])=>[e.resolve(n.outDir,`${t}.md`),l(t,a.jsonSchema??r(a.zodSchema),{...n,outline:i})]);a.push([e.resolve(n.outDir,n.indexFilename??`index.md`),f(t,{...n,outline:i})]);for(let[t,n]of a)o.mkdirSync(e.dirname(t),{recursive:!0}),o.writeFileSync(t,n,`utf-8`);return a.map(([e])=>e)}function m(e,t={}){let n={baseGroup:`base`},i=t.title??`Configuration`,a=[`---`,`title: ${i}`,`outline: ${JSON.stringify(t.outline??[2,3,4])}`,`---`,``,`# ${i}`,``];t.intro&&a.push(t.intro,``);for(let t of e){a.push(`## \`${t.key}\``,``),t.description&&a.push(t.description,``);let e=r(t.schema);a.push(...c(e,`###`,n),``)}return`${a.join(`
|
|
27
|
+
`).trim()}\n`}export{p as generateConfigMarkdown,m as renderConfigFileMarkdown,f as renderConfigIndex,l as renderScopeMarkdown};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ConfigScopes } from "../types.js";
|
|
4
|
+
import { Schema } from "untyped";
|
|
5
|
+
//#region packages/config/src/generators/types.d.ts
|
|
6
|
+
export interface GenerateTypesOptions {
|
|
7
|
+
/** Output directory. When omitted, nothing is written. */
|
|
8
|
+
outputDir?: string;
|
|
9
|
+
/** The base group hoisted into `<Name>Base` (default `base`). */
|
|
10
|
+
baseGroup?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Per-scope main interface name. Defaults to `<PascalScope>Config`.
|
|
13
|
+
*/
|
|
14
|
+
interfaceNames?: Record<string, string>;
|
|
15
|
+
/** Per-scope extra aliases appended after the generated interface. */
|
|
16
|
+
aliases?: Record<string, string>;
|
|
17
|
+
/** File extension for generated files (default `ts`). */
|
|
18
|
+
extension?: string;
|
|
19
|
+
/** A raw (verbatim) header prepended to every generated file. */
|
|
20
|
+
header?: string;
|
|
21
|
+
}
|
|
22
|
+
/** The resolved schema for a scope (from a precomputed schema or the Zod one). */
|
|
23
|
+
export declare function resolveScopeSchema(schema: Schema | undefined, zodSchema: unknown): Schema;
|
|
24
|
+
/** Render the generated type file content for one scope. */
|
|
25
|
+
export declare function renderConfigTypes(scopeName: string, schema: Schema, options?: GenerateTypesOptions): string;
|
|
26
|
+
/** Render every config type file, keyed by scope name. */
|
|
27
|
+
export declare function renderAllConfigTypes(scopes: ConfigScopes, options?: GenerateTypesOptions): Record<string, string>;
|
|
28
|
+
/** Generate the config type files into `outputDir`. Returns the paths written. */
|
|
29
|
+
export declare function generateConfigTypes(scopes: ConfigScopes, options: GenerateTypesOptions & {
|
|
30
|
+
outputDir: string;
|
|
31
|
+
}): string[];
|
|
32
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
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{splitBaseSchema as n,zodToJsonSchema as r}from"../schema.js";import i from"node:fs";import{generateTypes as a}from"untyped";const o={addExport:!0,partial:!0};function s(e,t){return e??r(t)}function c(e,r,i={}){let s=i.baseGroup??`base`,c=i.interfaceNames?.[e]??`${t(e)}Config`,l=i.aliases?.[e]??``,{base:u,groups:d,hasBase:f}=n(r,s),p=Object.keys(d.properties??{}),m=a(u,{...o,interfaceName:`${c}Base`}),h;h=f&&p.length>0?a(d,{...o,interfaceName:c}).replace(`export interface ${c} {`,`export interface ${c} extends ${c}Base {`):f?`export interface ${c} extends ${c}Base {}\n`:a(d,{...o,interfaceName:c});let g=`${m}\n${h}\n${l}`;return i.header?`${i.header}\n\n${g}`:g}function l(e,t={}){return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,c(e,s(n.jsonSchema,n.zodSchema),t)]))}function u(t,n){let r=n.extension??`ts`,a=[];for(let[o,s]of Object.entries(l(t,n))){let t=e.join(n.outputDir,`${o}.${r}`);i.mkdirSync(e.dirname(t),{recursive:!0}),i.writeFileSync(t,s,`utf-8`),a.push(t)}return a}export{u as generateConfigTypes,l as renderAllConfigTypes,c as renderConfigTypes,s as resolveScopeSchema};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ConfigEngineOptions, ConfigScopeDef, ConfigScopes, EnvValueType, EnvVarDef, EnvVarMeta, envPathOf } from "./types.js";
|
|
4
|
+
import { CollectEnvVarsOptions, DEFAULT_ENV_PREFIX, collectEnvVars, collectRequiredEnvVars } from "./collect.js";
|
|
5
|
+
import { BuildConfigJsonOptions, ConfigJsonDoc, ConfigJsonEntry, buildConfigJson } from "./config-json.js";
|
|
6
|
+
import { EnvFileOptions, generateEnvFile } from "./env-file.js";
|
|
7
|
+
import { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, GenerateCliOptionsOptions, cliFlagLabel, cliFlagOf, cliShortOf, createCliArgsParser, flagOf, generateCliArgsOptions, generateCliOptions } from "./generators/cli.js";
|
|
8
|
+
import { GenerateEnvTypesOptions, generateEnv, generateEnvDts, generateEnvTypes } from "./generators/env.js";
|
|
9
|
+
import { GenerateJsonSchemaOptions, generateConfigJsonSchema, generateJsonSchemaFile } from "./generators/json.js";
|
|
10
|
+
import { ConfigFileSection, GenerateMarkdownOptions, RenderConfigFileOptions, RenderMarkdownOptions, generateConfigMarkdown, renderConfigFileMarkdown, renderConfigIndex, renderScopeMarkdown } from "./generators/markdown.js";
|
|
11
|
+
import { GenerateTypesOptions, generateConfigTypes, renderAllConfigTypes, renderConfigTypes, resolveScopeSchema } from "./generators/types.js";
|
|
12
|
+
import { ConfigEngine, createConfigEngine } from "./engine.js";
|
|
13
|
+
import { EnvSource, EnvTree, applyOverrides, envBool, envInt, envList, envMap, envString, parseEnvTree, readEnvPath, trimTrailingSlashes } from "./env.js";
|
|
14
|
+
import "./generators/index.js";
|
|
15
|
+
import { findProjectRoot, monorepoRoot } from "./root.js";
|
|
16
|
+
import { SplitSchema, compileZodSchema, envMetaOf, flattenBaseSchema, resolveUntypedSchema, splitBaseSchema, zodToJsonSchema, zodToUntypedDefinition } from "./schema.js";
|
|
17
|
+
declare namespace index_d_exports {
|
|
18
|
+
export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectEnvVarsOptions, ConfigEngine, ConfigEngineOptions, ConfigFileSection, ConfigJsonDoc, ConfigJsonEntry, ConfigScopeDef, ConfigScopes, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, EnvValueType, EnvVarDef, EnvVarMeta, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownOptions, SplitSchema, applyOverrides, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectEnvVars, collectRequiredEnvVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envMetaOf, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, monorepoRoot, parseEnvTree, readEnvPath, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, resolveScopeSchema, resolveUntypedSchema, splitBaseSchema, trimTrailingSlashes, zodToJsonSchema, zodToUntypedDefinition };
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { BuildConfigJsonOptions, CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, CollectEnvVarsOptions, ConfigEngine, ConfigEngineOptions, ConfigFileSection, ConfigJsonDoc, ConfigJsonEntry, ConfigScopeDef, ConfigScopes, DEFAULT_ENV_PREFIX, EnvFileOptions, EnvSource, EnvTree, EnvValueType, EnvVarDef, EnvVarMeta, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownOptions, SplitSchema, applyOverrides, buildConfigJson, cliFlagLabel, cliFlagOf, cliShortOf, collectEnvVars, collectRequiredEnvVars, compileZodSchema, createCliArgsParser, createConfigEngine, envBool, envInt, envList, envMap, envMetaOf, envPathOf, envString, findProjectRoot, flagOf, flattenBaseSchema, generateCliArgsOptions, generateCliOptions, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvFile, generateEnvTypes, generateJsonSchemaFile, index_d_exports, monorepoRoot, parseEnvTree, readEnvPath, renderAllConfigTypes, renderConfigFileMarkdown, renderConfigIndex, renderConfigTypes, renderScopeMarkdown, resolveScopeSchema, resolveUntypedSchema, splitBaseSchema, trimTrailingSlashes, zodToJsonSchema, zodToUntypedDefinition };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{compileZodSchema as t,envMetaOf as n,flattenBaseSchema as r,resolveUntypedSchema as i,splitBaseSchema as a,zodToJsonSchema as o,zodToUntypedDefinition as s}from"./schema.js";import{envPathOf as c}from"./types.js";import{DEFAULT_ENV_PREFIX as l,collectEnvVars as u,collectRequiredEnvVars as d}from"./collect.js";import{buildConfigJson as f}from"./config-json.js";import{generateEnvFile as p}from"./env-file.js";import{cliFlagLabel as m,cliFlagOf as h,cliShortOf as g,createCliArgsParser as _,flagOf as v,generateCliArgsOptions as y,generateCliOptions as b}from"./generators/cli.js";import{generateEnv as x,generateEnvDts as S,generateEnvTypes as C}from"./generators/env.js";import{generateConfigJsonSchema as w,generateJsonSchemaFile as T}from"./generators/json.js";import{generateConfigMarkdown as E,renderConfigFileMarkdown as D,renderConfigIndex as O,renderScopeMarkdown as k}from"./generators/markdown.js";import{generateConfigTypes as A,renderAllConfigTypes as j,renderConfigTypes as M,resolveScopeSchema as N}from"./generators/types.js";import{findProjectRoot as P,monorepoRoot as F}from"./root.js";import{createConfigEngine as I}from"./engine.js";import{applyOverrides as L,envBool as R,envInt as z,envList as B,envMap as V,envString as H,parseEnvTree as U,readEnvPath as W,trimTrailingSlashes as G}from"./env.js";import"./generators/index.js";var K=/* @__PURE__ */ e({DEFAULT_ENV_PREFIX:()=>l,applyOverrides:()=>L,buildConfigJson:()=>f,cliFlagLabel:()=>m,cliFlagOf:()=>h,cliShortOf:()=>g,collectEnvVars:()=>u,collectRequiredEnvVars:()=>d,compileZodSchema:()=>t,createCliArgsParser:()=>_,createConfigEngine:()=>I,envBool:()=>R,envInt:()=>z,envList:()=>B,envMap:()=>V,envMetaOf:()=>n,envPathOf:()=>c,envString:()=>H,findProjectRoot:()=>P,flagOf:()=>v,flattenBaseSchema:()=>r,generateCliArgsOptions:()=>y,generateCliOptions:()=>b,generateConfigJsonSchema:()=>w,generateConfigMarkdown:()=>E,generateConfigTypes:()=>A,generateEnv:()=>x,generateEnvDts:()=>S,generateEnvFile:()=>p,generateEnvTypes:()=>C,generateJsonSchemaFile:()=>T,monorepoRoot:()=>F,parseEnvTree:()=>U,readEnvPath:()=>W,renderAllConfigTypes:()=>j,renderConfigFileMarkdown:()=>D,renderConfigIndex:()=>O,renderConfigTypes:()=>M,renderScopeMarkdown:()=>k,resolveScopeSchema:()=>N,resolveUntypedSchema:()=>i,splitBaseSchema:()=>a,trimTrailingSlashes:()=>G,zodToJsonSchema:()=>o,zodToUntypedDefinition:()=>s});export{l as DEFAULT_ENV_PREFIX,L as applyOverrides,f as buildConfigJson,m as cliFlagLabel,h as cliFlagOf,g as cliShortOf,u as collectEnvVars,d as collectRequiredEnvVars,t as compileZodSchema,_ as createCliArgsParser,I as createConfigEngine,R as envBool,z as envInt,B as envList,V as envMap,n as envMetaOf,c as envPathOf,H as envString,P as findProjectRoot,v as flagOf,r as flattenBaseSchema,y as generateCliArgsOptions,b as generateCliOptions,w as generateConfigJsonSchema,E as generateConfigMarkdown,A as generateConfigTypes,x as generateEnv,S as generateEnvDts,p as generateEnvFile,C as generateEnvTypes,T as generateJsonSchemaFile,F as monorepoRoot,U as parseEnvTree,W as readEnvPath,j as renderAllConfigTypes,D as renderConfigFileMarkdown,O as renderConfigIndex,M as renderConfigTypes,k as renderScopeMarkdown,N as resolveScopeSchema,i as resolveUntypedSchema,a as splitBaseSchema,K as src_exports,G as trimTrailingSlashes,o as zodToJsonSchema,s as zodToUntypedDefinition};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
//#region packages/config/src/root.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Walk up from a starting directory until a `package.json` is found. Falls back
|
|
6
|
+
* to the module's own directory when nothing matches.
|
|
7
|
+
*/
|
|
8
|
+
export declare function findProjectRoot(start?: string): string;
|
|
9
|
+
/** Resolve the monorepo root from a module location by walking up. */
|
|
10
|
+
export declare function monorepoRoot(from?: string): string;
|
|
11
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import{fileURLToPath as t}from"node:url";import.meta.url;import n from"node:fs";function r(r){let i=r??e.dirname(t(import.meta.url));for(let t=0;t<12;t++){if(n.existsSync(e.join(i,`package.json`)))return i;let t=e.resolve(i,`..`);if(t===i)break;i=t}return r??e.dirname(t(import.meta.url))}function i(e){return r(e)}export{r as findProjectRoot,i as monorepoRoot};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { EnvVarMeta } from "./types.js";
|
|
4
|
+
import { ZodType } from "zod";
|
|
5
|
+
import { Schema } from "untyped";
|
|
6
|
+
//#region packages/config/src/schema.d.ts
|
|
7
|
+
/** Read the env metadata attached to a Zod leaf via `.meta()`. */
|
|
8
|
+
export declare function envMetaOf(schema: ZodType): EnvVarMeta | undefined;
|
|
9
|
+
/** Lower a Zod config schema into an untyped definition object. */
|
|
10
|
+
export declare function zodToUntypedDefinition(zodSchema: ZodType): Record<string, unknown>;
|
|
11
|
+
/** Compile a Zod schema to a fast native parse function, falling back on error. */
|
|
12
|
+
export declare function compileZodSchema<T extends ZodType>(schema: T): T;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve an untyped definition into a `Schema`, mirroring untyped's
|
|
15
|
+
* `resolveSchema` synchronously.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveUntypedSchema(input: Record<string, unknown>): Schema;
|
|
18
|
+
/** Build the resolved untyped JSON Schema directly from a Zod config schema. */
|
|
19
|
+
export declare function zodToJsonSchema(zodSchema: ZodType): Schema;
|
|
20
|
+
/** A resolved untyped schema split into its base group and the remaining groups. */
|
|
21
|
+
export interface SplitSchema {
|
|
22
|
+
base: Schema;
|
|
23
|
+
groups: Schema;
|
|
24
|
+
hasBase: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Split a resolved untyped schema into its base group (flat config fields) and
|
|
28
|
+
* the remaining nested groups. Schemas without the base property treat the whole
|
|
29
|
+
* schema as the base group.
|
|
30
|
+
*/
|
|
31
|
+
export declare function splitBaseSchema(schema: Schema, baseGroup?: string): SplitSchema;
|
|
32
|
+
/** Flatten the base group of a resolved schema into the top level. */
|
|
33
|
+
export declare function flattenBaseSchema(schema: Schema, baseGroup?: string): Schema;
|
|
34
|
+
//#endregion
|
|
@@ -0,0 +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){let t=e.meta?.();return t&&typeof t==`object`&&`env`in t?t:void 0}function r(e){return e.enum?`string`:Array.isArray(e.type)?e.type.find(e=>e!==`null`)??`string`:e.type??`string`}function i(e){let n=typeof e?.type==`string`?e.type:`string`;return t[n]??`string`}function a(e){if(e.enum&&Array.isArray(e.enum))return`'${e.enum.join(`' | '`)}'`;let n=Array.isArray(e.type)?e.type:[e.type??`string`];return n.includes(`array`)?`Array<${i(e.items)}>`:n.includes(`object`)?`Record<string, ${i(e.additionalProperties)}>`:n.map(e=>t[e]??e).join(` | `)}function o(e,t=!1){if(e.properties){let n=t?{$schema:{tags:[`@required`]}}:{};for(let[t,r]of Object.entries(e.properties))n[t]=o(r,e.required?.includes(t)??!1);return n}let n={};return e.defaultValue===void 0?e.default!==void 0&&(n.$default=e.default):n.$default=e.defaultValue,n.$schema={type:r(e),tsType:a(e),...r(e)===`array`?{items:{type:i(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}:{},...e.required===!0?{required:!0}:{},...e.defaultValue!==void 0&&e.default!==void 0?{envDefault:e.default}:{}},n}function s(e){return o(e.toJSONSchema())}function c(t){try{return e.compile(t)}catch{return t}}function l(e){return e!==null&&!Array.isArray(e)&&typeof e==`object`}function u(e){let t=typeof e;if(t!==`undefined`&&e!==null)return Array.isArray(e)?`array`:t}function d(e,t,n=`.`){return e?`${e}${n}${t}`:t}function f(e){return[...new Set(e.filter(e=>!!e))]}function p(e){if(e.type===`array`&&!(`items`in e)){let t=f((e.default??[]).map(e=>u(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 m(e,t,n){if(n.cache.has(t))return n.cache.get(t);let r=`#${t.replace(/\./g,`/`)}`;if(!l(e)){let i=Array.isArray(e)?[...e]:e,a={type:u(e),id:r,default:i};return p(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]=m(e[o],d(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||=u(i.default)||(i.properties?`object`:`any`),p(i),i}function h(e){return m(e,``,{root:e,cache:/* @__PURE__ */ new Map})}function g(e){return h(s(e))}function _(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 v(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{c as compileZodSchema,n as envMetaOf,v as flattenBaseSchema,h as resolveUntypedSchema,_ as splitBaseSchema,g as zodToJsonSchema,s as zodToUntypedDefinition};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ZodType } from "zod";
|
|
4
|
+
import { Schema } from "untyped";
|
|
5
|
+
//#region packages/config/src/types.d.ts
|
|
6
|
+
/** The value type an env var resolves to. */
|
|
7
|
+
export type EnvValueType = 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
8
|
+
/**
|
|
9
|
+
* The metadata a consumer attaches to a Zod leaf via `.meta()` to describe the
|
|
10
|
+
* environment variable that backs a configuration value.
|
|
11
|
+
*/
|
|
12
|
+
export interface EnvVarMeta {
|
|
13
|
+
/** The env var name, e.g. `MYAPP_AUTH_PASSWORD`. */
|
|
14
|
+
env: string;
|
|
15
|
+
/** The dotted config path, e.g. `auth.password`. */
|
|
16
|
+
path?: string;
|
|
17
|
+
/** Human-readable description (used by `.env.example` + the docs). */
|
|
18
|
+
description?: string;
|
|
19
|
+
/** Whether the var has no safe default and must be set. */
|
|
20
|
+
required?: boolean;
|
|
21
|
+
/** Whether the value is a secret (never emitted/logged). */
|
|
22
|
+
secret?: boolean;
|
|
23
|
+
/** The scope the variable belongs to. */
|
|
24
|
+
scope?: string;
|
|
25
|
+
/** Whether the variable is safe to expose to the browser (frontend). */
|
|
26
|
+
public?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* The resolved-config default, when it differs from the raw env default
|
|
29
|
+
* (e.g. the positive field behind a negative-named env flag).
|
|
30
|
+
*/
|
|
31
|
+
defaultValue?: unknown;
|
|
32
|
+
}
|
|
33
|
+
/** A collected env-var definition. */
|
|
34
|
+
export interface EnvVarDef {
|
|
35
|
+
name: string;
|
|
36
|
+
path: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
default?: unknown;
|
|
39
|
+
required?: boolean;
|
|
40
|
+
secret?: boolean;
|
|
41
|
+
public?: boolean;
|
|
42
|
+
scope: string;
|
|
43
|
+
envType?: EnvValueType;
|
|
44
|
+
}
|
|
45
|
+
/** One configuration scope: its Zod schema and an optional resolved schema. */
|
|
46
|
+
export interface ConfigScopeDef {
|
|
47
|
+
/** The Zod schema (the single source of truth). */
|
|
48
|
+
zodSchema: ZodType;
|
|
49
|
+
/** A pre-resolved untyped schema (resolved from the Zod schema if omitted). */
|
|
50
|
+
jsonSchema?: Schema;
|
|
51
|
+
}
|
|
52
|
+
/** The scopes registered with an engine, keyed by scope name. */
|
|
53
|
+
export type ConfigScopes = Record<string, ConfigScopeDef>;
|
|
54
|
+
/** Options shared by every generator. */
|
|
55
|
+
export interface ConfigEngineOptions {
|
|
56
|
+
/** The scopes to walk, keyed by scope name (eg. `{ server, frontend, cli }`). */
|
|
57
|
+
scopes: ConfigScopes;
|
|
58
|
+
/** The env-var prefix (eg. `MYAPP_`). Kept as a replacement token in code. */
|
|
59
|
+
envPrefix?: string;
|
|
60
|
+
/**
|
|
61
|
+
* The object key that holds the "flat" base config fields, hoisted out of
|
|
62
|
+
* the nested groups in the generated types/docs (default `base`).
|
|
63
|
+
*/
|
|
64
|
+
baseGroup?: string;
|
|
65
|
+
/** The monorepo/project root used for default output paths. */
|
|
66
|
+
root?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Custom env-name -> dotted-path derivation for leaves without an explicit
|
|
69
|
+
* `path` (eg. to handle dual `PREFIX_`/`VITE_` prefixes).
|
|
70
|
+
*/
|
|
71
|
+
envPathOf?: (env: string) => string;
|
|
72
|
+
}
|
|
73
|
+
/** Derive the dotted config path from an env var name + prefix. */
|
|
74
|
+
export declare function envPathOf(env: string, prefix?: string): string;
|
|
75
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;function e(e,t=`APP_`){return e.slice(e.startsWith(t)?t.length:0).toLowerCase().replace(/_/g,`.`)}export{e as envPathOf};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
//#region packages/core/src/graph.d.ts
|
|
4
|
+
/** Directory names never descended into during discovery. */
|
|
5
|
+
export declare const IGNORED_DIRS: Set<string>;
|
|
6
|
+
/** The package managers a lock file can indicate. */
|
|
7
|
+
export type PackageManager = 'yarn' | 'npm' | 'pnpm' | 'bun';
|
|
8
|
+
/** One discovered package (a `package.json` and/or a dbx config directory). */
|
|
9
|
+
export interface ProjectNode {
|
|
10
|
+
/** The package name (from `package.json`). */
|
|
11
|
+
name?: string;
|
|
12
|
+
/** Directory relative to the graph root (posix). */
|
|
13
|
+
dir: string;
|
|
14
|
+
/** Whether the directory contains a `dbx.config.*` file. */
|
|
15
|
+
hasConfig: boolean;
|
|
16
|
+
/** The dbx config path relative to the root (when present). */
|
|
17
|
+
config?: string;
|
|
18
|
+
/** Names of the other discovered projects this one depends on. */
|
|
19
|
+
dependencies: string[];
|
|
20
|
+
}
|
|
21
|
+
/** The project dependency graph written to `.dbx/toolchain/projects.json`. */
|
|
22
|
+
export interface ProjectGraph {
|
|
23
|
+
root: string;
|
|
24
|
+
packageManager?: PackageManager;
|
|
25
|
+
generatedAt: string;
|
|
26
|
+
/** Every discovered package. */
|
|
27
|
+
projects: ProjectNode[];
|
|
28
|
+
/** The subset with a dbx config (what the tooling syncs). */
|
|
29
|
+
dbxProjects: ProjectNode[];
|
|
30
|
+
/** Dbx project dirs (relative) in dependency order (dependencies first). */
|
|
31
|
+
order: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface BuildProjectGraphOptions {
|
|
34
|
+
/** Maximum directory depth to descend (default 5). */
|
|
35
|
+
maxDepth?: number;
|
|
36
|
+
}
|
|
37
|
+
/** Detect the package manager from the lock file present at the root. */
|
|
38
|
+
export declare function detectPackageManager(root: string): PackageManager | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Recursively discover projects under `root` and build their dependency graph.
|
|
41
|
+
* Skips `node_modules`, `.dbx/toolchain` and other common/generated directories.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildProjectGraph(root: string, options?: BuildProjectGraphOptions): ProjectGraph;
|
|
44
|
+
/**
|
|
45
|
+
* Topologically order dbx projects so a dependency is always synced before its
|
|
46
|
+
* dependents. Cycles (or missing edges) fall back to the input order.
|
|
47
|
+
*/
|
|
48
|
+
export declare function orderProjects(dbxProjects: ProjectNode[]): string[];
|
|
49
|
+
/** The path of the generated project graph for a root. */
|
|
50
|
+
export declare function projectGraphPath(root: string): string;
|
|
51
|
+
/** Write the project graph to `<root>/.dbx/toolchain/projects.json`. */
|
|
52
|
+
export declare function writeProjectGraph(root: string, graph?: ProjectGraph): string;
|
|
53
|
+
/** Read the project graph for a root, or `undefined` when it does not exist. */
|
|
54
|
+
export declare function readProjectGraph(root: string): ProjectGraph | undefined;
|
|
55
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{readJsonAt as t,toJson as n}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import{findConfigFile as r}from"./loader.js";import i from"node:fs";const a=/* @__PURE__ */ new Set([`node_modules`,`dist`,`build`,`out`,`coverage`,`tmp`,`temp`,`vendor`,`jspm_packages`,`web_modules`]);function o(e){return e.startsWith(`.`)||a.has(e)}function s(t){try{return i.readdirSync(t,{withFileTypes:!0}).filter(e=>e.isDirectory()&&!o(e.name)).map(n=>e.join(t,n.name))}catch{return[]}}function c(t,n){return e.relative(t,n).replace(/\\/g,`/`)||`.`}function l(t){let n=n=>i.existsSync(e.join(t,n));if(n(`yarn.lock`))return`yarn`;if(n(`pnpm-lock.yaml`))return`pnpm`;if(n(`package-lock.json`))return`npm`;if(n(`bun.lock`)||n(`bun.lockb`))return`bun`}const u=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function d(e,n={}){let i=n.maxDepth??5,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,d=(n,l)=>{let u=t(n,`package.json`),f=r(n);if(u||f){let t={...u?.name?{name:u.name}:{},dir:c(e,n),hasConfig:!!f,...f?{config:c(e,f)}:{},dependencies:[]};a.set(n,t),u?.name&&o.set(u.name,n)}if(!(l>=i))for(let e of s(n))d(e,l+1)};d(e,0);for(let[e,n]of a){let r=t(e,`package.json`);if(!r)continue;let i=/* @__PURE__ */ new Set;for(let t of u){let n=r[t];if(n&&typeof n==`object`)for(let t of Object.keys(n)){let n=o.get(t);n&&n!==e&&i.add(t)}}n.dependencies=[...i].sort()}let p=[...a.values()].sort((e,t)=>e.dir.localeCompare(t.dir)),m=p.filter(e=>e.hasConfig);return{root:e,packageManager:l(e),generatedAt:(/* @__PURE__ */ new Date()).toISOString(),projects:p,dbxProjects:m,order:f(m)}}function f(e){let t=/* @__PURE__ */ new Map;for(let n of e)n.name&&t.set(n.name,n.dir);let n=new Map(e.map(e=>[e.dir,e])),r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set,a=[],o=e=>{if(r.has(e)||i.has(e))return;i.add(e);let s=n.get(e);for(let e of s?.dependencies??[]){let r=t.get(e);r&&n.has(r)&&o(r)}i.delete(e),r.add(e),a.push(e)};for(let t of e)o(t.dir);return a}function p(t){return e.join(t,`.dbx`,`toolchain`,`projects.json`)}function m(t,r){let a=p(t);return i.mkdirSync(e.dirname(a),{recursive:!0}),i.writeFileSync(a,n(r??d(t)),`utf-8`),a}function h(e){try{return JSON.parse(i.readFileSync(p(e),`utf-8`))}catch{return}}export{a as IGNORED_DIRS,d as buildProjectGraph,l as detectPackageManager,f as orderProjects,p as projectGraphPath,h as readProjectGraph,m as writeProjectGraph};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { BuildProjectGraphOptions, IGNORED_DIRS, PackageManager, ProjectGraph, ProjectNode, buildProjectGraph, detectPackageManager, orderProjects, projectGraphPath, readProjectGraph, writeProjectGraph } from "./graph.js";
|
|
4
|
+
import { LoadedConfig, findConfigFile, loadToolingConfig } from "./loader.js";
|
|
5
|
+
import { MANIFEST_DIR, MANIFEST_FILE, Manifest, readManifest, writeManifest } from "./manifest.js";
|
|
6
|
+
import { detectProjectType, resolveProjectType } from "./project-type.js";
|
|
7
|
+
import { SelectProjectsOptions, SelectedProject, selectProjects } from "./select.js";
|
|
8
|
+
import { ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolingOptions, ResetToolingResult, resetProjects, resetTooling } from "./reset.js";
|
|
9
|
+
import { RunSyncOptions, SyncResult, runSync } from "./sync.js";
|
|
10
|
+
import { VscodeSyncOptions, vscodeSyncTask } from "./vscode.js";
|
|
11
|
+
import { RunWatchOptions, runWatch } from "./watch.js";
|
|
12
|
+
declare namespace index_d_exports {
|
|
13
|
+
export { BuildProjectGraphOptions, IGNORED_DIRS, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolingOptions, ResetToolingResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, findConfigFile, loadToolingConfig, orderProjects, projectGraphPath, readManifest, readProjectGraph, resetProjects, resetTooling, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph };
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { BuildProjectGraphOptions, IGNORED_DIRS, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolingOptions, ResetToolingResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, findConfigFile, index_d_exports, loadToolingConfig, orderProjects, projectGraphPath, readManifest, readProjectGraph, resetProjects, resetTooling, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{detectProjectType as t,resolveProjectType as n}from"./project-type.js";import{findConfigFile as r,loadToolingConfig as i}from"./loader.js";import{IGNORED_DIRS as a,buildProjectGraph as o,detectPackageManager as s,orderProjects as c,projectGraphPath as l,readProjectGraph as u,writeProjectGraph as d}from"./graph.js";import{MANIFEST_DIR as f,MANIFEST_FILE as p,readManifest as m,writeManifest as h}from"./manifest.js";import{selectProjects as g}from"./select.js";import{resetProjects as _,resetTooling as v}from"./reset.js";import{runSync as y}from"./sync.js";import{vscodeSyncTask as b}from"./vscode.js";import{runWatch as x}from"./watch.js";var S=/* @__PURE__ */ e({IGNORED_DIRS:()=>a,MANIFEST_DIR:()=>f,MANIFEST_FILE:()=>p,buildProjectGraph:()=>o,detectPackageManager:()=>s,detectProjectType:()=>t,findConfigFile:()=>r,loadToolingConfig:()=>i,orderProjects:()=>c,projectGraphPath:()=>l,readManifest:()=>m,readProjectGraph:()=>u,resetProjects:()=>_,resetTooling:()=>v,resolveProjectType:()=>n,runSync:()=>y,runWatch:()=>x,selectProjects:()=>g,vscodeSyncTask:()=>b,writeManifest:()=>h,writeProjectGraph:()=>d});export{a as IGNORED_DIRS,f as MANIFEST_DIR,p as MANIFEST_FILE,o as buildProjectGraph,s as detectPackageManager,t as detectProjectType,r as findConfigFile,i as loadToolingConfig,c as orderProjects,l as projectGraphPath,m as readManifest,u as readProjectGraph,_ as resetProjects,v as resetTooling,n as resolveProjectType,y as runSync,x as runWatch,g as selectProjects,S as src_exports,b as vscodeSyncTask,h as writeManifest,d as writeProjectGraph};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { Replacements } from "../../shared/src/template.js";
|
|
4
|
+
import { ProjectType } from "../../shared/src/config-schema.js";
|
|
5
|
+
import { ToolingConfig } from "../../shared/src/toolchain.js";
|
|
6
|
+
import "../../shared/src/index.js";
|
|
7
|
+
//#region packages/core/src/loader.d.ts
|
|
8
|
+
/** A loaded tooling config plus its resolved path + replacement tokens. */
|
|
9
|
+
export interface LoadedConfig {
|
|
10
|
+
config: ToolingConfig;
|
|
11
|
+
/** The config file that was loaded (undefined when none was found). */
|
|
12
|
+
path?: string;
|
|
13
|
+
tokens: Replacements;
|
|
14
|
+
/** The resolved project kind. */
|
|
15
|
+
projectType: ProjectType;
|
|
16
|
+
}
|
|
17
|
+
/** Find the first `dbx.config.*` file at `cwd`, if any. */
|
|
18
|
+
export declare function findConfigFile(cwd?: string): string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Load the tooling config for a project. A `dbx.config.*` file exports
|
|
21
|
+
* `{ toolchain: { ...sections } }`; the `toolchain` value is unwrapped here so
|
|
22
|
+
* the rest of the toolchain works with flat sections. When no config file (or no
|
|
23
|
+
* `toolchain` key) exists an empty config is returned (so every task falls back
|
|
24
|
+
* to its defaults).
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadToolingConfig(cwd?: string): Promise<LoadedConfig>;
|
|
27
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{CONFIG_FILE_NAMES as n,resolveTokens as r}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as i}from"./project-type.js";import a from"node:fs";function o(t=process.cwd()){for(let r of n){let n=e.resolve(t,r);if(a.existsSync(n))return n}}async function s(e){if(e.endsWith(`.json`))return JSON.parse(a.readFileSync(e,`utf-8`));let n=t(e).href;try{let e=await import(n);return e.default??e}catch(e){try{let{tsImport:e}=await import(`/home/runner/work/toolchain/toolchain/node_modules/tsx/dist/esm/api/index.mjs`),t=await e(n,import.meta.url);return t.default??t}catch{throw e}}}async function c(e=process.cwd()){let t=o(e),n={};if(t){let e=await s(t),r=e&&typeof e==`object`?e.toolchain:void 0;r&&typeof r==`object`&&(n=r)}let a=r(n);return await n.hooks?.afterLoad?.({cwd:e,config:n,tokens:a,...t?{path:t}:{}}),{config:n,...t?{path:t}:{},tokens:a,projectType:i(e,n)}}export{o as findConfigFile,c as loadToolingConfig};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
//#region packages/core/src/manifest.d.ts
|
|
4
|
+
/** The manifest directory + file recording every file the tooling manages. */
|
|
5
|
+
export declare const MANIFEST_DIR = ".dbx/toolchain";
|
|
6
|
+
export declare const MANIFEST_FILE = "manifest.json";
|
|
7
|
+
export interface Manifest {
|
|
8
|
+
/** Repo-relative paths of every generated/managed file. */
|
|
9
|
+
files: string[];
|
|
10
|
+
/** ISO timestamp of the last successful sync (absent when never synced). */
|
|
11
|
+
syncedAt?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Read the manifest (`{ files: [] }` when missing/invalid). */
|
|
14
|
+
export declare function readManifest(cwd: string): Manifest;
|
|
15
|
+
/** Write the manifest, creating the directory as needed. */
|
|
16
|
+
export declare function writeManifest(cwd: string, files: string[], syncedAt?: string): void;
|
|
17
|
+
//#endregion
|
|
@@ -0,0 +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`;function a(t){let a=e.resolve(t,r,i);try{let e=JSON.parse(n.readFileSync(a,`utf-8`));return{files:Array.isArray(e.files)?e.files:[],...typeof e.syncedAt==`string`?{syncedAt:e.syncedAt}:{}}}catch{return{files:[]}}}function o(a,o,s){let c=e.resolve(a,r,i);n.mkdirSync(e.dirname(c),{recursive:!0}),n.writeFileSync(c,t({files:[...new Set(o)].sort(),syncedAt:s??(/* @__PURE__ */ new Date()).toISOString()}),`utf-8`)}export{r as MANIFEST_DIR,i as MANIFEST_FILE,a as readManifest,o as writeManifest};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ProjectType } from "../../shared/src/config-schema.js";
|
|
4
|
+
import { ToolingConfig } from "../../shared/src/toolchain.js";
|
|
5
|
+
import "../../shared/src/index.js";
|
|
6
|
+
//#region packages/core/src/project-type.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the project kind: an explicit `project.type` in the config wins,
|
|
9
|
+
* otherwise it is detected from the filesystem.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveProjectType(cwd: string, config?: ToolingConfig): ProjectType;
|
|
12
|
+
/** Detect the project kind from `cwd` (workspaces / monorepo file heuristics). */
|
|
13
|
+
export declare function detectProjectType(cwd: string): ProjectType;
|
|
14
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{readJsonAt as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import n from"node:fs";function r(e,t={}){return t.project?.type?t.project.type:i(e)}function i(r){let i=t(r,`package.json`)?.workspaces;return(Array.isArray(i)?i.length>0:i&&Array.isArray(i.packages)&&i.packages.length>0)||n.existsSync(e.join(r,`tsconfig.monorepo.json`))?`monorepo-root`:n.existsSync(e.join(r,`tsconfig.default.json`))?`monorepo-workspace`:`project`}export{i as detectProjectType,r as resolveProjectType};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { SelectProjectsOptions } from "./select.js";
|
|
4
|
+
//#region packages/core/src/reset.d.ts
|
|
5
|
+
/** What parts of the tooling to remove for a project. */
|
|
6
|
+
export interface ResetSelectors {
|
|
7
|
+
/** Remove the generated/managed files listed in the manifest. */
|
|
8
|
+
generated?: boolean;
|
|
9
|
+
/** Remove the `.dbx/toolchain` directory (manifest + graph). */
|
|
10
|
+
manifest?: boolean;
|
|
11
|
+
/** Remove the `dbx.config.*` file(s). */
|
|
12
|
+
config?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ResetToolingOptions extends ResetSelectors {
|
|
15
|
+
/** The project directory to reset. */
|
|
16
|
+
cwd: string;
|
|
17
|
+
/** Report what would be removed without deleting anything. */
|
|
18
|
+
dryRun?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ResetToolingResult {
|
|
21
|
+
/** Repo-relative paths removed (or that would be removed). */
|
|
22
|
+
removed: string[];
|
|
23
|
+
/** Whether this was a dry run. */
|
|
24
|
+
dryRun: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Remove the tooling artifacts from a single project: the generated files
|
|
28
|
+
* recorded in `.dbx/toolchain/manifest.json`, the `.dbx/toolchain` directory and/or
|
|
29
|
+
* the `dbx.config.*` file. With no selectors the generated files + the
|
|
30
|
+
* manifest directory are removed (the config is kept).
|
|
31
|
+
*/
|
|
32
|
+
export declare function resetTooling(options: ResetToolingOptions): ResetToolingResult;
|
|
33
|
+
export interface ResetProjectsOptions extends ResetSelectors, Omit<SelectProjectsOptions, 'kind'> {
|
|
34
|
+
/** Apply to every discovered project under `root` (not just `root`). */
|
|
35
|
+
recursive?: boolean;
|
|
36
|
+
dryRun?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface ResetProjectsResult {
|
|
39
|
+
results: {
|
|
40
|
+
dir: string;
|
|
41
|
+
rel: string;
|
|
42
|
+
removed: string[];
|
|
43
|
+
}[];
|
|
44
|
+
dryRun: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Reset one or many projects. When `recursive` is set every discovered project
|
|
48
|
+
* (optionally filtered by `include`/`exclude`) is reset; otherwise only `root`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function resetProjects(options: ResetProjectsOptions): ResetProjectsResult;
|
|
51
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{selectProjects as i}from"./select.js";import a from"node:fs";function o(e){return e.replace(/\\/g,`/`)}function s(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function c(i){let{cwd:c}=i,l=i.dryRun??!1,u=s(i),d=[],f=(e,t)=>{a.existsSync(e)&&(l||a.rmSync(e,{force:!0}),d.push(t))};if(u.generated)for(let t of r(c).files)f(e.resolve(c,t),t);if(u.config){let n=t(c);n&&f(n,o(e.relative(c,n)))}if(u.manifest){let t=e.resolve(c,n);a.existsSync(t)&&(l||a.rmSync(t,{recursive:!0,force:!0}),d.push(`${n}/`))}return{removed:d,dryRun:l}}function l(e){let n=e.dryRun??!1;return{results:(e.recursive?i({root:e.root,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}}):[{dir:e.root,rel:`.`,hasConfig:!!t(e.root)}]).map(t=>({dir:t.dir,rel:t.rel,removed:c({cwd:t.dir,...e.generated===void 0?{}:{generated:e.generated},...e.manifest===void 0?{}:{manifest:e.manifest},...e.config===void 0?{}:{config:e.config},dryRun:n}).removed})),dryRun:n}}export{l as resetProjects,c as resetTooling};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
//#region packages/core/src/select.d.ts
|
|
4
|
+
/** A project selected by {@link selectProjects}. */
|
|
5
|
+
export interface SelectedProject {
|
|
6
|
+
/** Absolute project directory. */
|
|
7
|
+
dir: string;
|
|
8
|
+
/** Directory relative to the root (posix). */
|
|
9
|
+
rel: string;
|
|
10
|
+
/** Package name when available. */
|
|
11
|
+
name?: string;
|
|
12
|
+
/** Whether the directory has a `dbx.config.*`. */
|
|
13
|
+
hasConfig: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface SelectProjectsOptions {
|
|
16
|
+
/** Root to scan. */
|
|
17
|
+
root: string;
|
|
18
|
+
/** Keep only projects matching one of these patterns (glob or substring). */
|
|
19
|
+
include?: string[];
|
|
20
|
+
/** Drop projects matching any of these patterns (glob or substring). */
|
|
21
|
+
exclude?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* What to keep: `all` (default), `configured` (has a dbx config) or
|
|
24
|
+
* `unconfigured` (missing a dbx config).
|
|
25
|
+
*/
|
|
26
|
+
kind?: 'all' | 'configured' | 'unconfigured';
|
|
27
|
+
/** Maximum directory depth to scan (default 5). */
|
|
28
|
+
maxDepth?: number;
|
|
29
|
+
}
|
|
30
|
+
/** Discover projects under a root, applying include/exclude + kind filters. */
|
|
31
|
+
export declare function selectProjects(options: SelectProjectsOptions): SelectedProject[];
|
|
32
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{buildProjectGraph as t}from"./graph.js";const n=/[*?[\]{}]/,r=`<<dbx-globstar>>`;function i(e){let t=e.replace(/[.+^${}()|\\]/g,`\\$&`).replace(/\*\*/g,r).replace(/\*/g,`[^/]*`).replaceAll(r,`.*`).replace(/\?/g,`.`);return RegExp(`^${t}$`,`i`)}function a(t,r){let a=[t.rel,t.name??``,e.basename(t.rel)];if(n.test(r)){let e=i(r);return a.some(t=>e.test(t))}let o=r.toLowerCase();return a.some(e=>e.toLowerCase().includes(o))}function o(n){let r=t(n.root,n.maxDepth===void 0?{}:{maxDepth:n.maxDepth}).projects.map(t=>({dir:e.resolve(n.root,t.dir),rel:t.dir,...t.name?{name:t.name}:{},hasConfig:t.hasConfig})),i=n.kind??`all`,o=n.include?.filter(Boolean)??[],s=n.exclude?.filter(Boolean)??[];return r.filter(e=>!(i===`configured`&&!e.hasConfig||i===`unconfigured`&&e.hasConfig||o.length>0&&!o.some(t=>a(e,t))||s.some(t=>a(e,t))))}export{o as selectProjects};
|