@deltabox/toolchain 1.11.4 → 2.0.0
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 +308 -4
- package/README.md +21 -14
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- package/dist/changelog.d.ts +7 -6
- package/dist/changelog.js +1 -1
- package/dist/cli/commands/index.js +1 -1
- package/dist/cli/commands/providers.js +1 -1
- package/dist/cli/commands/reset.js +1 -1
- package/dist/cli/commands/shared.js +1 -1
- package/dist/cli/commands/sync.js +1 -1
- package/dist/cli/commands/watch.js +1 -1
- package/dist/cli/config-selection.d.ts +23 -0
- package/dist/cli/config-selection.js +1 -0
- package/dist/cli/context.js +1 -1
- package/dist/cli/index.d.ts +5 -3
- package/dist/cli/index.js +1 -1
- package/dist/cli/register.js +1 -1
- package/dist/config.d.ts +8 -8
- package/dist/config.js +1 -1
- package/dist/core.d.ts +7 -6
- package/dist/core.js +1 -1
- package/dist/globals.d.ts +31 -0
- package/dist/globals.js +1 -0
- package/dist/index.d.ts +32 -11
- package/dist/index.js +1 -1
- package/dist/migrate.d.ts +3 -2
- package/dist/migrate.js +1 -1
- package/dist/package.js +1 -1
- package/dist/packages/biome/src/index.d.ts +2 -1
- package/dist/packages/biome/src/index.js +1 -1
- package/dist/packages/changelog/src/cli/index.js +1 -1
- package/dist/packages/changelog/src/index.d.ts +8 -7
- package/dist/packages/changelog/src/index.js +1 -1
- package/dist/packages/changelog/src/run-workflows.d.ts +19 -4
- package/dist/packages/changelog/src/run-workflows.js +1 -1
- package/dist/packages/changelog/src/run.d.ts +3 -3
- package/dist/packages/changelog/src/run.js +1 -1
- package/dist/packages/changelog/src/sync.d.ts +7 -4
- package/dist/packages/changelog/src/sync.js +1 -1
- package/dist/packages/changelog/src/utils/format.d.ts +2 -1
- package/dist/packages/changelog/src/utils/format.js +5 -5
- package/dist/packages/changelog/src/utils/git.js +1 -1
- package/dist/packages/changelog/src/utils/reformat.d.ts +2 -1
- package/dist/packages/changelog/src/utils/reformat.js +3 -3
- package/dist/packages/changelog/src/utils/summary.d.ts +25 -2
- package/dist/packages/changelog/src/utils/summary.js +3 -1
- package/dist/packages/changelog/src/utils/types.d.ts +34 -2
- package/dist/packages/changelog/src/utils/version.d.ts +1 -0
- package/dist/packages/changelog/src/utils/versioning.d.ts +25 -4
- package/dist/packages/changelog/src/utils/versioning.js +1 -1
- package/dist/packages/changelog/src/utils/write.js +1 -1
- package/dist/packages/changelog/src/workflows.d.ts +27 -7
- package/dist/packages/changelog/src/workflows.js +5 -5
- package/dist/packages/config/src/cli/index.js +1 -1
- package/dist/packages/config/src/collect.d.ts +10 -8
- package/dist/packages/config/src/collect.js +1 -1
- package/dist/packages/config/src/config-json.d.ts +4 -4
- package/dist/packages/config/src/config-json.js +1 -1
- package/dist/packages/config/src/engine.d.ts +14 -25
- package/dist/packages/config/src/engine.js +1 -1
- package/dist/packages/config/src/env-file.d.ts +4 -4
- package/dist/packages/config/src/env-file.js +2 -2
- package/dist/packages/config/src/env.d.ts +4 -6
- package/dist/packages/config/src/env.js +1 -1
- package/dist/packages/config/src/generators/cli.d.ts +6 -6
- package/dist/packages/config/src/generators/cli.js +1 -1
- package/dist/packages/config/src/generators/env.d.ts +9 -9
- package/dist/packages/config/src/generators/env.js +2 -2
- package/dist/packages/config/src/generators/index.d.ts +4 -4
- package/dist/packages/config/src/generators/index.js +1 -1
- package/dist/packages/config/src/generators/json.d.ts +5 -7
- package/dist/packages/config/src/generators/json.js +1 -1
- package/dist/packages/config/src/generators/markdown.d.ts +57 -35
- package/dist/packages/config/src/generators/markdown.js +18 -19
- package/dist/packages/config/src/generators/types.d.ts +28 -23
- package/dist/packages/config/src/generators/types.js +3 -3
- package/dist/packages/config/src/index.d.ts +9 -9
- package/dist/packages/config/src/index.js +1 -1
- package/dist/packages/config/src/schema.d.ts +31 -3
- package/dist/packages/config/src/schema.js +1 -1
- package/dist/packages/config/src/types.d.ts +134 -28
- package/dist/packages/core/src/editor-config.d.ts +14 -0
- package/dist/packages/core/src/editor-config.js +1 -0
- package/dist/packages/core/src/graph.js +1 -1
- package/dist/packages/core/src/index.d.ts +8 -7
- package/dist/packages/core/src/index.js +1 -1
- package/dist/packages/core/src/loader.d.ts +20 -2
- package/dist/packages/core/src/loader.js +1 -1
- package/dist/packages/core/src/manifest.d.ts +20 -1
- package/dist/packages/core/src/manifest.js +1 -1
- package/dist/packages/core/src/provider-registry.d.ts +48 -3
- package/dist/packages/core/src/provider-registry.js +1 -1
- package/dist/packages/core/src/reset.d.ts +15 -0
- package/dist/packages/core/src/reset.js +1 -1
- package/dist/packages/core/src/sync.d.ts +10 -0
- package/dist/packages/core/src/sync.js +1 -1
- package/dist/packages/core/src/watch.d.ts +9 -0
- package/dist/packages/core/src/watch.js +1 -1
- package/dist/packages/migrate/src/cli/index.js +1 -1
- package/dist/packages/migrate/src/index.d.ts +3 -2
- package/dist/packages/migrate/src/index.js +1 -1
- package/dist/packages/migrate/src/oxc.d.ts +13 -0
- package/dist/packages/migrate/src/oxc.js +1 -0
- package/dist/packages/migrate/src/registry.js +1 -1
- package/dist/packages/migrate/src/vite-target.js +1 -1
- package/dist/packages/migrate/src/vite.d.ts +25 -3
- package/dist/packages/migrate/src/vite.js +7 -2
- package/dist/packages/project/src/catalogs.d.ts +7 -0
- package/dist/packages/project/src/catalogs.js +1 -1
- package/dist/packages/project/src/cli/index.js +1 -1
- package/dist/packages/project/src/config.d.ts +6 -0
- package/dist/packages/project/src/config.js +1 -1
- package/dist/packages/project/src/index.d.ts +5 -4
- package/dist/packages/project/src/index.js +1 -1
- package/dist/packages/project/src/sync.js +1 -1
- package/dist/packages/project/src/typescript.d.ts +64 -12
- package/dist/packages/project/src/typescript.js +12 -7
- package/dist/packages/shared/src/changelog-groups.d.ts +59 -0
- package/dist/packages/shared/src/config-schema/biome.d.ts +10 -0
- package/dist/packages/shared/src/config-schema/biome.js +1 -0
- package/dist/packages/shared/src/config-schema/catalogs.d.ts +14 -0
- package/dist/packages/shared/src/config-schema/catalogs.js +1 -0
- package/dist/packages/shared/src/config-schema/changelog.d.ts +245 -0
- package/dist/packages/shared/src/config-schema/changelog.js +1 -0
- package/dist/packages/shared/src/config-schema/ci.d.ts +389 -0
- package/dist/packages/shared/src/config-schema/ci.js +1 -0
- package/dist/packages/shared/src/config-schema/format.d.ts +38 -0
- package/dist/packages/shared/src/config-schema/format.js +1 -0
- package/dist/packages/shared/src/config-schema/index.d.ts +1648 -0
- package/dist/packages/shared/src/config-schema/index.js +1 -0
- package/dist/packages/shared/src/config-schema/logger.d.ts +19 -0
- package/dist/packages/shared/src/config-schema/logger.js +1 -0
- package/dist/packages/shared/src/config-schema/meta.d.ts +16 -0
- package/dist/packages/shared/src/config-schema/meta.js +1 -0
- package/dist/packages/shared/src/config-schema/project.d.ts +35 -0
- package/dist/packages/shared/src/config-schema/project.js +1 -0
- package/dist/packages/shared/src/config-schema/providers.d.ts +9 -0
- package/dist/packages/shared/src/config-schema/providers.js +1 -0
- package/dist/packages/shared/src/config-schema/registry.d.ts +21 -0
- package/dist/packages/shared/src/config-schema/registry.js +1 -0
- package/dist/packages/shared/src/config-schema/templates.d.ts +81 -0
- package/dist/packages/shared/src/config-schema/templates.js +1 -0
- package/dist/packages/shared/src/config-schema/tsconfig.d.ts +30 -0
- package/dist/packages/shared/src/config-schema/tsconfig.js +1 -0
- package/dist/packages/shared/src/config-schema/vite.d.ts +26 -0
- package/dist/packages/shared/src/config-schema/vite.js +1 -0
- package/dist/packages/shared/src/config-schema/watch.d.ts +11 -0
- package/dist/packages/shared/src/config-schema/watch.js +1 -0
- package/dist/packages/shared/src/config-schema/workflow.d.ts +590 -0
- package/dist/packages/shared/src/config-schema/workflow.js +1 -0
- package/dist/packages/shared/src/config-types.d.ts +290 -90
- package/dist/packages/shared/src/fs-utils.js +1 -1
- package/dist/packages/shared/src/index.d.ts +26 -7
- package/dist/packages/shared/src/index.js +1 -1
- package/dist/packages/shared/src/logger.d.ts +26 -3
- package/dist/packages/shared/src/logger.js +1 -1
- package/dist/packages/shared/src/messages.d.ts +36 -0
- package/dist/packages/shared/src/messages.js +1 -0
- package/dist/packages/shared/src/object-utils.d.ts +5 -0
- package/dist/packages/shared/src/object-utils.js +1 -1
- package/dist/packages/shared/src/registry-policy.d.ts +17 -0
- package/dist/packages/shared/src/registry-policy.js +1 -0
- package/dist/packages/shared/src/toolchain.d.ts +90 -11
- package/dist/packages/shared/src/toolchain.js +1 -1
- package/dist/packages/shared/src/types.d.ts +6 -0
- package/dist/packages/shared/src/vite-defaults.d.ts +29 -0
- package/dist/packages/shared/src/vite-defaults.js +1 -0
- package/dist/packages/template/src/builtin.js +1 -1
- package/dist/packages/template/src/cli/index.js +1 -1
- package/dist/packages/template/src/global.d.ts +130 -0
- package/dist/packages/template/src/global.js +3 -0
- package/dist/packages/template/src/index.d.ts +3 -2
- package/dist/packages/template/src/index.js +1 -1
- package/dist/packages/template/src/online.d.ts +13 -4
- package/dist/packages/template/src/online.js +1 -1
- package/dist/packages/template/src/registry.d.ts +2 -1
- package/dist/packages/template/src/registry.js +1 -1
- package/dist/packages/template/src/scaffold.d.ts +5 -1
- package/dist/packages/template/src/scaffold.js +1 -1
- package/dist/packages/tsconfig/src/cli/generate/index.d.ts +3 -0
- package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
- package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +10 -1
- package/dist/packages/tsconfig/src/cli/generate/utils.js +1 -1
- package/dist/packages/tsconfig/src/cli/index.js +1 -1
- package/dist/packages/tsconfig/src/index.d.ts +7 -4
- package/dist/packages/tsconfig/src/index.js +1 -1
- package/dist/packages/tsconfig/src/overrides.d.ts +74 -0
- package/dist/packages/tsconfig/src/overrides.js +1 -0
- package/dist/packages/tsconfig/src/resolve.d.ts +62 -0
- package/dist/packages/tsconfig/src/resolve.js +3 -0
- package/dist/packages/tsconfig/src/snapshots.d.ts +50 -0
- package/dist/packages/tsconfig/src/snapshots.js +1 -0
- package/dist/packages/tsconfig/src/sync.d.ts +14 -5
- package/dist/packages/tsconfig/src/sync.js +1 -1
- package/dist/packages/tsconfig/src/templates/tsconfig.default.js +1 -1
- package/dist/packages/tsconfig/src/templates.d.ts +12 -4
- package/dist/packages/tsconfig/src/templates.js +1 -1
- package/dist/packages/vite/src/index.d.ts +2 -2
- package/dist/packages/vite/src/index.js +1 -1
- package/dist/packages/vite/src/resolve.d.ts +13 -3
- package/dist/packages/vite/src/resolve.js +1 -1
- package/dist/packages/vite/src/sync.d.ts +46 -5
- package/dist/packages/vite/src/sync.js +5 -2
- package/dist/project.d.ts +4 -3
- package/dist/project.js +1 -1
- package/dist/providers.d.ts +11 -4
- package/dist/providers.js +1 -1
- package/dist/shared.d.ts +25 -6
- package/dist/shared.js +1 -1
- package/dist/sync.js +1 -1
- package/dist/template.d.ts +3 -2
- package/dist/template.js +1 -1
- package/dist/tooling.d.ts +21 -0
- package/dist/tooling.js +1 -0
- package/dist/tsconfig.d.ts +6 -3
- package/dist/tsconfig.js +1 -1
- package/dist/vite.d.ts +2 -2
- package/dist/vite.js +1 -1
- package/package.json +28 -23
- package/dist/packages/config/src/types.js +0 -1
- package/dist/packages/shared/src/config-schema.d.ts +0 -3928
- package/dist/packages/shared/src/config-schema.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ConfigSchema } from "./types.js";
|
|
4
|
+
import { CollectVarsOptions } from "./collect.js";
|
|
5
5
|
//#region packages/config/src/config-json.d.ts
|
|
6
6
|
/** A serialized env var entry in `config.json`. */
|
|
7
7
|
export interface ConfigJsonEntry {
|
|
@@ -26,8 +26,8 @@ export interface BuildConfigJsonOptions {
|
|
|
26
26
|
/** Override the `$comment` banner. */
|
|
27
27
|
comment?: string;
|
|
28
28
|
/** Custom env-name -> dotted-path derivation. */
|
|
29
|
-
envPathOf?:
|
|
29
|
+
envPathOf?: CollectVarsOptions['envPathOf'];
|
|
30
30
|
}
|
|
31
31
|
/** Build the config metadata JSON document. */
|
|
32
|
-
export declare function buildConfigJson(
|
|
32
|
+
export declare function buildConfigJson(schema: ConfigSchema, options?: BuildConfigJsonOptions): ConfigJsonDoc;
|
|
33
33
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{collectVars as e}from"./collect.js";function t(t,n={}){let r=e(t,n.envPrefix,{envPathOf:n.envPathOf}).filter(e=>e.name);return{$comment:n.comment??`Generated from the config engine — edit the config schemas instead.`,version:1,env:r.map(e=>({name:e.name??``,path:e.path,scope:e.scope,...e.description?{description:e.description}:{},...e.default===void 0?{}:{default:e.default},...e.required?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}}))}}export{t as buildConfigJson};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ConfigDef, ConfigEngineOptions, ConfigSchema } from "./types.js";
|
|
4
4
|
import { BuildConfigJsonOptions, ConfigJsonDoc } from "./config-json.js";
|
|
5
5
|
import { EnvFileOptions } from "./env-file.js";
|
|
6
6
|
import { CliOptionDef, GenerateCliOptionsOptions } from "./generators/cli.js";
|
|
@@ -9,48 +9,37 @@ import { GenerateJsonSchemaOptions } from "./generators/json.js";
|
|
|
9
9
|
import { GenerateMarkdownOptions } from "./generators/markdown.js";
|
|
10
10
|
import { GenerateTypesOptions } from "./generators/types.js";
|
|
11
11
|
//#region packages/config/src/engine.d.ts
|
|
12
|
-
/** The bound, reusable config engine. */
|
|
13
12
|
export interface ConfigEngine {
|
|
14
|
-
readonly
|
|
13
|
+
readonly schema: ConfigSchema;
|
|
15
14
|
readonly envPrefix: string;
|
|
16
15
|
readonly baseGroup: string;
|
|
17
16
|
readonly root: string;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
requiredEnvVars(scope: string): string[];
|
|
22
|
-
/** Render `.env` content. */
|
|
23
|
-
renderEnvFile(options?: EnvFileOptions): string;
|
|
24
|
-
/** Write a `.env` file. Returns the path written. */
|
|
25
|
-
writeEnvFile(options: EnvFileOptions & {
|
|
26
|
-
output: string;
|
|
27
|
-
}): string;
|
|
28
|
-
/** Build the config metadata JSON document. */
|
|
17
|
+
collectVars(): ConfigDef[];
|
|
18
|
+
requiredVars(scope?: string): ConfigDef[];
|
|
19
|
+
generateEnvFile(options?: EnvFileOptions): string;
|
|
29
20
|
buildConfigJson(options?: BuildConfigJsonOptions): ConfigJsonDoc;
|
|
30
|
-
/** Build (and optionally write) the untyped JSON Schema document. */
|
|
31
21
|
generateJsonSchema(options?: GenerateJsonSchemaOptions): Promise<Record<string, unknown>>;
|
|
32
|
-
/** Write the JSON Schema document. Returns the path written. */
|
|
33
22
|
writeJsonSchema(options: GenerateJsonSchemaOptions & {
|
|
34
23
|
output: string;
|
|
35
24
|
}): Promise<string>;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
generateConfigTypes(options?: GenerateTypesOptions): Record<string, string>;
|
|
26
|
+
generateConfigEnv(options?: GenerateEnvTypesOptions): Record<string, string>;
|
|
27
|
+
generateConfigMarkdown(options?: GenerateMarkdownOptions): Record<string, string>;
|
|
28
|
+
generateConfigCli(options?: GenerateCliOptionsOptions): CliOptionDef[];
|
|
29
|
+
writeEnvFile(options: EnvFileOptions & {
|
|
30
|
+
output: string;
|
|
31
|
+
}): string;
|
|
39
32
|
writeConfigTypes(options: GenerateTypesOptions & {
|
|
40
33
|
outputDir: string;
|
|
41
34
|
}): string[];
|
|
42
|
-
/** Write the env type files into `outputDir`. */
|
|
43
35
|
writeEnvTypes(options: GenerateEnvTypesOptions & {
|
|
44
36
|
outputDir: string;
|
|
45
37
|
}): string[];
|
|
46
|
-
/** Write the markdown reference into `outDir`. */
|
|
47
38
|
writeMarkdown(options: GenerateMarkdownOptions & {
|
|
48
|
-
|
|
39
|
+
outputDir: string;
|
|
49
40
|
}): string[];
|
|
50
|
-
/** Generate (and optionally write) the CLI option definitions. */
|
|
51
41
|
generateCliOptions(options?: GenerateCliOptionsOptions): CliOptionDef[];
|
|
52
42
|
}
|
|
53
|
-
/** Create a reusable config engine. */
|
|
54
43
|
export declare function createConfigEngine(options: ConfigEngineOptions): ConfigEngine;
|
|
55
44
|
//#endregion
|
|
56
|
-
export type { ConfigEngineOptions
|
|
45
|
+
export type { ConfigEngineOptions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{collectVars as t}from"./collect.js";import{buildConfigJson as n}from"./config-json.js";import{generateEnvFile as r}from"./env-file.js";import{generateCliOptions as i}from"./generators/cli.js";import{generateConfigEnv as a}from"./generators/env.js";import{generateConfigJsonSchema as o,generateJsonSchemaFile as s}from"./generators/json.js";import{generateConfigMarkdown as c}from"./generators/markdown.js";import{generateConfigTypes as l}from"./generators/types.js";import{findProjectRoot as u}from"./root.js";import d from"node:fs";function f(f){let p=f.schema,m=f.envPrefix??`APP_`,h=f.baseGroup??`base`,g=f.root??u(),_=f.envPathOf,v=String(Array.isArray(h)?h[0]??`base`:h);return{schema:p,envPrefix:m,baseGroup:v,root:g,collectVars:()=>t(p,m,{envPathOf:_}),requiredVars:e=>t(p,m,{envPathOf:_}).filter(t=>t.required&&(e===void 0||t.scope===e)),generateEnvFile:(e={})=>r(p,{envPrefix:m,envPathOf:_,...e}),buildConfigJson:(e={})=>n(p,{envPrefix:m,envPathOf:_,...e}),generateJsonSchema:(e={})=>o(p,{baseGroup:v,...e}),writeJsonSchema:e=>s(p,{baseGroup:v,...e}),generateConfigTypes:(e={})=>l(p,{baseGroup:v,...e}),generateConfigEnv:(e={})=>a(p,{envPrefix:m,envPathOf:_,...e}),generateConfigMarkdown:(e={})=>c(p,{baseGroup:v,envPrefix:m,envPathOf:_,...e}),generateConfigCli:(e={})=>i(p,{envPrefix:m,envPathOf:_,...e}),writeEnvFile:t=>{let n=r(p,{envPrefix:m,envPathOf:_,...t});return d.mkdirSync(e.dirname(t.output),{recursive:!0}),d.writeFileSync(t.output,n,`utf-8`),t.output},writeConfigTypes:t=>{let n=l(p,{baseGroup:v,...t});return Object.keys(n).map(n=>e.join(t.outputDir,`${n}.ts`))},writeEnvTypes:t=>{let n=a(p,{envPrefix:m,envPathOf:_,...t});return Object.keys(n).map(n=>e.join(t.outputDir,n))},writeMarkdown:t=>{let n=c(p,{baseGroup:v,envPrefix:m,envPathOf:_,...t});return Object.keys(n).map(n=>e.join(t.outputDir,n))},generateCliOptions:(e={})=>i(p,{envPrefix:m,envPathOf:_,...e})}}export{f as createConfigEngine};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ConfigSchema } from "./types.js";
|
|
4
|
+
import { CollectVarsOptions } from "./collect.js";
|
|
5
5
|
//#region packages/config/src/env-file.d.ts
|
|
6
6
|
export interface EnvFileOptions {
|
|
7
7
|
/** Env vars to include (defaults to all). */
|
|
@@ -23,11 +23,11 @@ export interface EnvFileOptions {
|
|
|
23
23
|
/** The characters wrapping a scope's section header (default `----`). */
|
|
24
24
|
scopeSeparator?: string;
|
|
25
25
|
/** Custom env-name -> dotted-path derivation. */
|
|
26
|
-
envPathOf?:
|
|
26
|
+
envPathOf?: CollectVarsOptions['envPathOf'];
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Generate `.env` content from the config schemas. Secrets and required-without-
|
|
30
30
|
* default vars are emitted blank so operators fill them in.
|
|
31
31
|
*/
|
|
32
|
-
export declare function generateEnvFile(
|
|
32
|
+
export declare function generateEnvFile(schema: ConfigSchema, options?: EnvFileOptions): string;
|
|
33
33
|
//#endregion
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{
|
|
2
|
-
`))l.push(`# ${t}`);let
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{collectVars as e}from"./collect.js";function t(e){let t=e.default;return Array.isArray(t)?t.join(`,`):typeof t==`boolean`?t?`true`:`false`:typeof t==`number`?String(t):typeof t==`object`&&t?JSON.stringify(t):t===void 0?``:String(t)}function n(n,r={}){let i=r.envPrefix??`APP_`,a=r.scopeSeparator??`----`,o=e(n,i,{envPathOf:r.envPathOf}).filter(e=>e.name!==void 0),s=r.scopes??[...new Set(o.map(e=>e.scope))],c=o.filter(e=>s.includes(e.scope)&&(!r.include||r.include.includes(e.name))&&!r.exclude?.includes(e.name)),l=[];r.header&&l.push(r.header,``);let u;for(let e of c){let n=e.name;if(e.scope!==u&&(u!==void 0&&l.push(``),l.push(`# ${a} ${e.scope.toUpperCase()} ${a}`),u=e.scope),!r.bare&&e.description)for(let t of e.description.split(`
|
|
2
|
+
`))l.push(`# ${t}`);let i=r.values?.[n];e.secret&&i===void 0?l.push(`# ${n}=`):l.push(`${n}=${i??t(e)}`)}if(r.extra){let e=Object.entries(r.extra).filter(([e])=>!c.some(t=>t.name===e)).map(([e,t])=>`${e}=${t}`);e.length&&l.push(``,`# ${a} EXTRA ${a}`,...e)}return`${l.join(`
|
|
3
3
|
`)}\n`}export{n as generateEnvFile};
|
|
@@ -3,8 +3,8 @@ import __tsdown_shims_url from 'node:url';
|
|
|
3
3
|
//#region packages/config/src/env.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Low-level configuration helpers: env-tree parsing, typed accessors and
|
|
6
|
-
*
|
|
7
|
-
* frontend resolver without pulling `node:path` / `node:url` into a bundle.
|
|
6
|
+
* dotted-path derivation. Free of Node builtins so browser consumers can import
|
|
7
|
+
* the frontend resolver without pulling `node:path` / `node:url` into a bundle.
|
|
8
8
|
*/
|
|
9
9
|
/** A flat env source (process.env, import.meta.env or a plain object). */
|
|
10
10
|
export type EnvSource = Record<string, string | undefined>;
|
|
@@ -24,8 +24,6 @@ export declare function envBool(tree: EnvTree, path: string, fallback: boolean):
|
|
|
24
24
|
export declare function envList(tree: EnvTree, path: string, fallback?: string[]): string[];
|
|
25
25
|
/** Read `Header=value,...` into a lowercase-keyed record. */
|
|
26
26
|
export declare function envMap(tree: EnvTree, path: string): Record<string, string>;
|
|
27
|
-
/**
|
|
28
|
-
export declare function
|
|
29
|
-
/** Trim trailing slashes from a URL-ish string. */
|
|
30
|
-
export declare function trimTrailingSlashes(value: string): string;
|
|
27
|
+
/** Derive the dotted config path from an env var name + prefix. */
|
|
28
|
+
export declare function envPathOf(env: string, prefix?: string): string;
|
|
31
29
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;function e(e={},t=`APP_`){let n={};for(let[r,i]of Object.entries(e)){if(!r.startsWith(t)||i===void 0)continue;let e=r.slice(t.length).toLowerCase().split(`_`),a=n;for(let t=0;t<e.length-1;t+=1){let n=e[t]??``;(typeof a[n]!=`object`||a[n]===null)&&(a[n]={}),a=a[n]}a[e[e.length-1]??``]=i}return n}function t(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n)return;n=n[e]}return n}function n(e,n,r=``){let i=t(e,n);return typeof i==`string`&&i.trim()!==``?i:r}function r(e,n,r){let i=t(e,n);if(typeof i!=`string`||i.trim()===``)return r;let a=Number.parseInt(i,10);return Number.isFinite(a)?a:r}function i(e,n,r){let i=t(e,n);if(typeof i!=`string`||i.trim()===``)return r;let a=i.trim().toLowerCase();return[`true`,`1`,`yes`,`on`].includes(a)?!0:![`false`,`0`,`no`,`off`].includes(a)&&r}function a(e,n,r=[]){let i=t(e,n);return typeof i!=`string`||i.trim()===``?r:i.split(`,`).map(e=>e.trim()).filter(Boolean)}function o(e,t){let n={};for(let r of a(e,t,[])){let e=r.indexOf(`=`);e!==-1&&(n[r.slice(0,e).trim().toLowerCase()]=r.slice(e+1).trim())}return n}function s(e,t){
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;function e(e={},t=`APP_`){let n={};for(let[r,i]of Object.entries(e)){if(!r.startsWith(t)||i===void 0)continue;let e=r.slice(t.length).toLowerCase().split(`_`),a=n;for(let t=0;t<e.length-1;t+=1){let n=e[t]??``;(typeof a[n]!=`object`||a[n]===null)&&(a[n]={}),a=a[n]}a[e[e.length-1]??``]=i}return n}function t(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n)return;n=n[e]}return n}function n(e,n,r=``){let i=t(e,n);return typeof i==`string`&&i.trim()!==``?i:r}function r(e,n,r){let i=t(e,n);if(typeof i!=`string`||i.trim()===``)return r;let a=Number.parseInt(i,10);return Number.isFinite(a)?a:r}function i(e,n,r){let i=t(e,n);if(typeof i!=`string`||i.trim()===``)return r;let a=i.trim().toLowerCase();return[`true`,`1`,`yes`,`on`].includes(a)?!0:![`false`,`0`,`no`,`off`].includes(a)&&r}function a(e,n,r=[]){let i=t(e,n);return typeof i!=`string`||i.trim()===``?r:i.split(`,`).map(e=>e.trim()).filter(Boolean)}function o(e,t){let n={};for(let r of a(e,t,[])){let e=r.indexOf(`=`);e!==-1&&(n[r.slice(0,e).trim().toLowerCase()]=r.slice(e+1).trim())}return n}function s(e,t=`APP_`){return e.slice(e.startsWith(t)?t.length:0).toLowerCase().replace(/_/g,`.`)}export{i as envBool,r as envInt,a as envList,o as envMap,s as envPathOf,n as envString,e as parseEnvTree,t as readEnvPath};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ConfigSchema } from "../types.js";
|
|
4
|
+
import { CollectVarsOptions } from "../collect.js";
|
|
5
5
|
import { ParseArgsOptionsConfig } from "node:util";
|
|
6
6
|
//#region packages/config/src/generators/cli.d.ts
|
|
7
7
|
/** Flag-shaping options shared by every CLI helper. */
|
|
@@ -11,9 +11,9 @@ export interface CliFlagOptions {
|
|
|
11
11
|
/** Shorthand flags keyed by env var name (eg. `{ APP_TOKEN: 't' }`). */
|
|
12
12
|
shortFlags?: Record<string, string>;
|
|
13
13
|
/** Custom env-name -> dotted-path derivation. */
|
|
14
|
-
envPathOf?:
|
|
14
|
+
envPathOf?: CollectVarsOptions['envPathOf'];
|
|
15
15
|
}
|
|
16
|
-
/** A generated CLI option definition
|
|
16
|
+
/** A generated CLI option definition. */
|
|
17
17
|
export interface CliOptionDef {
|
|
18
18
|
/** CLI flag, e.g. `--base-url`. */
|
|
19
19
|
flag: string;
|
|
@@ -42,10 +42,10 @@ export interface GenerateCliOptionsOptions extends CliFlagOptions {
|
|
|
42
42
|
/** The scope whose env vars become flags (default `cli`). */
|
|
43
43
|
scope?: string;
|
|
44
44
|
/** Output file path to write the options as JSON. */
|
|
45
|
-
output?: string;
|
|
45
|
+
output?: string | false;
|
|
46
46
|
}
|
|
47
47
|
/** Generate the CLI option definitions for a scope's env vars. */
|
|
48
|
-
export declare function generateCliOptions(
|
|
48
|
+
export declare function generateCliOptions(schema: ConfigSchema, options?: GenerateCliOptionsOptions): CliOptionDef[];
|
|
49
49
|
/** The typed `values` of a parsed CLI args result. */
|
|
50
50
|
export type CliArgsValues = Record<string, string | undefined>;
|
|
51
51
|
/** A parsed CLI args result (node `parseArgs` output). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{formatCliFlag as e}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{formatCliFlag as e}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{collectVars as t}from"../collect.js";import n from"node:fs";import{parseArgs as r}from"node:util";function i(t,n={}){return e(t,n.envPrefix??`APP_`)}function a(e,t={}){return`--${i(e,t)}`}function o(e,t={}){let n=t.shortFlags?.[e];return n?`-${n}`:void 0}function s(e,t={}){let n=a(e,t),r=o(e,t);return r?`${r}, ${n}`:n}function c(e,r={}){let i=r.scope??`cli`,s=[];for(let n of t(e,r.envPrefix,{envPathOf:r.envPathOf}).filter(e=>e.scope===i&&(e.name||e.cliFlag))){let e=n.meta?.cliFlagShort?`-${n.meta.cliFlagShort.replace(/^-/,``)}`:o(n.name??``,r);s.push({flag:n.cliFlag??a(n.name??``,r),env:n.name??``,type:n.type??`string`,...e?{short:e}:{},...n.description?{description:n.description}:{},...n.secret?{secret:!0}:{},...n.default!==void 0&&!n.secret?{default:String(n.default)}:{}})}return typeof r.output==`string`&&n.writeFileSync(r.output,`${JSON.stringify(s,null,4)}\n`,`utf-8`),s}function l(e){return Object.fromEntries(e.map(e=>[e.flag.replace(/^--/,``),{type:`string`,...e.short?{short:e.short.replace(/^-/,``)}:{},...e.default?{default:e.default}:{}}]))}function u(e,t){let n=l(e);return{options:n,parse:(e=process.argv.slice(2))=>r({args:e,options:n,strict:t?.strict??!0}),toConfig:e=>{let t=e?.values??{},n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);return n}}}export{s as cliFlagLabel,a as cliFlagOf,o as cliShortOf,u as createCliArgsParser,i as flagOf,l as generateCliArgsOptions,c as generateCliOptions};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ConfigSchema } from "../types.js";
|
|
4
|
+
import { CollectVarsOptions } from "../collect.js";
|
|
5
5
|
//#region packages/config/src/generators/env.d.ts
|
|
6
6
|
export interface GenerateEnvTypesOptions {
|
|
7
7
|
/** Output directory. When omitted, nothing is written. */
|
|
8
|
-
outputDir?: string;
|
|
8
|
+
outputDir?: string | false;
|
|
9
9
|
/** The env-var prefix (default `APP_`). */
|
|
10
10
|
envPrefix?: string;
|
|
11
11
|
/** The `process.env` interface name (default `AppEnv`). */
|
|
@@ -29,14 +29,14 @@ export interface GenerateEnvTypesOptions {
|
|
|
29
29
|
/** Add a `declare module 'vite'` augmentation to the `.d.ts`. */
|
|
30
30
|
augmentVite?: boolean;
|
|
31
31
|
/** Custom env-name -> dotted-path derivation. */
|
|
32
|
-
envPathOf?:
|
|
32
|
+
envPathOf?: CollectVarsOptions['envPathOf'];
|
|
33
33
|
}
|
|
34
34
|
/** Render the `env.ts` content (the env + vite-env interfaces). */
|
|
35
|
-
export declare function generateEnv(
|
|
35
|
+
export declare function generateEnv(schema: ConfigSchema, options?: GenerateEnvTypesOptions): string;
|
|
36
36
|
/** Render the ambient `.d.ts` content. */
|
|
37
37
|
export declare function generateEnvDts(options?: GenerateEnvTypesOptions): string;
|
|
38
|
-
/** Generate
|
|
39
|
-
export declare function
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
/** Generate env type file contents (and optionally write them). */
|
|
39
|
+
export declare function generateConfigEnv(schema: ConfigSchema, options?: GenerateEnvTypesOptions): Record<string, string>;
|
|
40
|
+
/** @deprecated Use {@link generateConfigEnv}. */
|
|
41
|
+
export declare const generateEnvTypes: typeof generateConfigEnv;
|
|
42
42
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{collectVars as t}from"../collect.js";import n from"node:fs";function r(e){return e??`Generated env typing — DO NOT EDIT.`}function i(e,n={}){let i=n.envPrefix??`APP_`,a=n.envInterfaceName??`AppEnv`,o=n.viteEnvInterfaceName??`AppViteEnv`,s=t(e,i,{envPathOf:n.envPathOf}).filter(e=>e.name),c=s.filter(e=>e.scope!==`frontend`),l=s.filter(e=>e.public),u=n.envHeader?[n.envHeader,``]:[`/**`,` * ${r(n.header)}`,` */`,``];u.push(`/** ${n.envComment??"Environment variables typed on `process.env`."} */`,`export interface ${a} {`);for(let e of c)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);u.push(`}`),u.push(``),u.push("/** Public frontend environment variables typed on `import.meta.env`. */"),u.push(`export interface ${o} {`);for(let e of l)u.push(` /** ${(e.description??``).replace(/\n/g,` `)} */`),u.push(` ${e.name}?: string;`);return u.push(`}`),`${u.join(`
|
|
2
2
|
`).trimEnd()}\n`}function a(e={}){let t=e.envInterfaceName??`AppEnv`,n=e.viteEnvInterfaceName??`AppViteEnv`,i=e.importPath??`./env.js`;return`${e.dtsHeader?`${e.dtsHeader}\n`:`/**
|
|
3
3
|
* ${r(e.header)}
|
|
4
4
|
*
|
|
@@ -20,4 +20,4 @@ declare module 'vite' {
|
|
|
20
20
|
}`:``}
|
|
21
21
|
|
|
22
22
|
export {};
|
|
23
|
-
`}function o(t,r){let o=
|
|
23
|
+
`}function o(t,r={}){let o=r.envFile??`env.ts`,s=r.dtsFile??`env.d.ts`,c={[o]:i(t,r),[s]:a(r)};if(typeof r.outputDir==`string`){n.mkdirSync(r.outputDir,{recursive:!0});for(let[t,i]of Object.entries(c))n.writeFileSync(e.join(r.outputDir,t),i,`utf-8`)}return c}const s=o;export{o as generateConfigEnv,i as generateEnv,a as generateEnvDts,s as generateEnvTypes};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, GenerateCliOptionsOptions, cliFlagLabel, cliFlagOf, cliShortOf, createCliArgsParser, flagOf, generateCliArgsOptions, generateCliOptions } from "./cli.js";
|
|
4
|
-
import { GenerateEnvTypesOptions, generateEnv, generateEnvDts, generateEnvTypes } from "./env.js";
|
|
4
|
+
import { GenerateEnvTypesOptions, generateConfigEnv, generateEnv, generateEnvDts, generateEnvTypes } from "./env.js";
|
|
5
5
|
import { GenerateJsonSchemaOptions, generateConfigJsonSchema, generateJsonSchemaFile } from "./json.js";
|
|
6
|
-
import {
|
|
7
|
-
import { GenerateTypesOptions, generateConfigTypes
|
|
8
|
-
export { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef,
|
|
6
|
+
import { GenerateMarkdownOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, generateConfigMarkdown } from "./markdown.js";
|
|
7
|
+
import { GenerateTypesOptions, generateConfigTypes } from "./types.js";
|
|
8
|
+
export { CliArgsOptionConfig, CliArgsParser, CliArgsResult, CliArgsValues, CliFlagOptions, CliOptionDef, GenerateCliOptionsOptions, GenerateEnvTypesOptions, GenerateJsonSchemaOptions, GenerateMarkdownOptions, GenerateTypesOptions, RenderConfigFileOptions, RenderMarkdownFrontmatter, RenderMarkdownOptions, cliFlagLabel, cliFlagOf, cliShortOf, createCliArgsParser, flagOf, generateCliArgsOptions, generateCliOptions, generateConfigEnv, generateConfigJsonSchema, generateConfigMarkdown, generateConfigTypes, generateEnv, generateEnvDts, generateEnvTypes, generateJsonSchemaFile };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{cliFlagLabel as e,cliFlagOf as t,cliShortOf as n,createCliArgsParser as r,flagOf as i,generateCliArgsOptions as a,generateCliOptions as o}from"./cli.js";import{
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{cliFlagLabel as e,cliFlagOf as t,cliShortOf as n,createCliArgsParser as r,flagOf as i,generateCliArgsOptions as a,generateCliOptions as o}from"./cli.js";import{generateConfigEnv as s,generateEnv as c,generateEnvDts as l,generateEnvTypes as u}from"./env.js";import{generateConfigJsonSchema as d,generateJsonSchemaFile as f}from"./json.js";import{generateConfigMarkdown as p}from"./markdown.js";import{generateConfigTypes as m}from"./types.js";export{e as cliFlagLabel,t as cliFlagOf,n as cliShortOf,r as createCliArgsParser,i as flagOf,a as generateCliArgsOptions,o as generateCliOptions,s as generateConfigEnv,d as generateConfigJsonSchema,p as generateConfigMarkdown,m as generateConfigTypes,c as generateEnv,l as generateEnvDts,u as generateEnvTypes,f as generateJsonSchemaFile};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ConfigEngineOptions, ConfigSchema } from "../types.js";
|
|
4
4
|
//#region packages/config/src/generators/json.d.ts
|
|
5
|
-
export interface GenerateJsonSchemaOptions {
|
|
5
|
+
export interface GenerateJsonSchemaOptions extends Pick<ConfigEngineOptions, 'baseGroup'> {
|
|
6
6
|
/** Output file path. When omitted, nothing is written. */
|
|
7
|
-
output?: string;
|
|
8
|
-
/** The base group hoisted to the top level (default `base`). */
|
|
9
|
-
baseGroup?: string;
|
|
7
|
+
output?: string | false;
|
|
10
8
|
/** Document metadata overrides. */
|
|
11
9
|
id?: string;
|
|
12
10
|
title?: string;
|
|
@@ -16,9 +14,9 @@ export interface GenerateJsonSchemaOptions {
|
|
|
16
14
|
* Build the combined untyped JSON Schema document covering every scope, using
|
|
17
15
|
* untyped's `resolveSchema` on the definitions lowered from the Zod schemas.
|
|
18
16
|
*/
|
|
19
|
-
export declare function generateConfigJsonSchema(
|
|
17
|
+
export declare function generateConfigJsonSchema(schema: ConfigSchema, options?: GenerateJsonSchemaOptions): Promise<Record<string, unknown>>;
|
|
20
18
|
/** Generate the JSON Schema document into `output`. Returns the path written. */
|
|
21
|
-
export declare function generateJsonSchemaFile(
|
|
19
|
+
export declare function generateJsonSchemaFile(schema: ConfigSchema, options: GenerateJsonSchemaOptions & {
|
|
22
20
|
output: string;
|
|
23
21
|
}): Promise<string>;
|
|
24
22
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{flattenBaseSchema as t,
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{flattenBaseSchema as t,normalizeConfigSchema as n}from"../schema.js";import r from"node:fs";async function i(i,a={}){let o=n(i),s={};for(let[e]of Object.entries(o))s[e]=t(o[e],Array.isArray(a.baseGroup)?String(a.baseGroup[0]??`base`):String(a.baseGroup??`base`));let c={$schema:`https://json-schema.org/draft/2020-12/schema`,$id:a.id??`https://example.com/schemas/config.json`,title:a.title??`Configuration`,description:a.description??`Every env-var-backed configuration value across all scopes.`,type:`object`,properties:s,required:Object.keys(o)};return typeof a.output==`string`&&(r.mkdirSync(e.dirname(a.output),{recursive:!0}),r.writeFileSync(a.output,`${JSON.stringify(c,null,4)}\n`,`utf-8`)),c}async function a(e,t){return await i(e,t),t.output}export{i as generateConfigJsonSchema,a as generateJsonSchemaFile};
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { ZodType } from "zod";
|
|
6
|
-
import { Schema } from "untyped";
|
|
3
|
+
import { ConfigEngineOptions, ConfigSchema } from "../types.js";
|
|
4
|
+
import { CollectVarsOptions } from "../collect.js";
|
|
7
5
|
//#region packages/config/src/generators/markdown.d.ts
|
|
8
|
-
export interface
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
export interface RenderMarkdownFrontmatter {
|
|
7
|
+
options: GenerateMarkdownOptions;
|
|
8
|
+
}
|
|
9
|
+
export interface RenderMarkdownOptions extends Pick<ConfigEngineOptions, 'baseGroup'> {
|
|
10
|
+
/** Output directory. Set false (or omit it) to disable writing. */
|
|
11
|
+
outputDir?: string | false;
|
|
12
|
+
/** Frontmatter toggle, raw body, or callback. */
|
|
13
|
+
frontmatter?: boolean | string | ((ctx: RenderMarkdownFrontmatter) => string);
|
|
14
|
+
/** Render every scope into one file instead of one file per scope. */
|
|
15
|
+
combined?: boolean;
|
|
16
|
+
/** Show env var equivalents (default true). */
|
|
17
|
+
includeEnv?: boolean;
|
|
18
|
+
/** Show CLI flag equivalents (default true). */
|
|
19
|
+
includeCli?: boolean;
|
|
11
20
|
/** Page outline (defaults to `[2, 3, 4]`). */
|
|
12
21
|
outline?: number[];
|
|
13
|
-
/** The base group hoisted out of the nested groups (default `base`). */
|
|
14
|
-
baseGroup?: string;
|
|
15
22
|
/** The scope whose env vars render as CLI flags (default `cli`). */
|
|
16
23
|
cliScope?: string;
|
|
17
24
|
/** Env-var prefix (default `APP_`). */
|
|
@@ -36,29 +43,34 @@ export interface RenderMarkdownOptions {
|
|
|
36
43
|
/** Shorthand flags keyed by env var name (for the CLI scope). */
|
|
37
44
|
shortFlags?: Record<string, string>;
|
|
38
45
|
/** Custom env-name -> dotted-path derivation. */
|
|
39
|
-
envPathOf?:
|
|
46
|
+
envPathOf?: CollectVarsOptions['envPathOf'];
|
|
47
|
+
/** Emit `- **Required**` lines (default true). */
|
|
48
|
+
includeRequired?: boolean;
|
|
49
|
+
/** Emit `- **Deprecated**` lines (default true). */
|
|
50
|
+
includeDeprecated?: boolean;
|
|
51
|
+
/** Emit `**Example(s):**` blocks (default true). */
|
|
52
|
+
includeExamples?: boolean;
|
|
53
|
+
/** Emit `- **Since**` lines (default true). */
|
|
54
|
+
includeSince?: boolean;
|
|
55
|
+
/** Emit `- **See**` lines (default true). */
|
|
56
|
+
includeSee?: boolean;
|
|
57
|
+
/** Emit `**Remarks:**` blocks (default true). */
|
|
58
|
+
includeRemarks?: boolean;
|
|
59
|
+
/** Emit `- **Experimental**` lines (default true). */
|
|
60
|
+
includeExperimental?: boolean;
|
|
61
|
+
/** Emit `- **Alpha**` lines (default true). */
|
|
62
|
+
includeAlpha?: boolean;
|
|
63
|
+
/** Emit `- **Beta**` lines (default true). */
|
|
64
|
+
includeBeta?: boolean;
|
|
40
65
|
}
|
|
41
66
|
export interface GenerateMarkdownOptions extends RenderMarkdownOptions {
|
|
67
|
+
/** Document title (default `Configuration`). */
|
|
68
|
+
title?: string;
|
|
42
69
|
/** Index file name (defaults to `index.md`). */
|
|
43
70
|
indexFilename?: string;
|
|
44
71
|
}
|
|
45
|
-
/**
|
|
46
|
-
export declare function
|
|
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
|
-
}
|
|
72
|
+
/** Generate markdown file contents (and optionally write them). */
|
|
73
|
+
export declare function generateConfigMarkdown(schema: ConfigSchema, options?: GenerateMarkdownOptions): Record<string, string>;
|
|
62
74
|
export interface RenderConfigFileOptions {
|
|
63
75
|
/** Document title (default `Configuration`). */
|
|
64
76
|
title?: string;
|
|
@@ -66,13 +78,23 @@ export interface RenderConfigFileOptions {
|
|
|
66
78
|
intro?: string;
|
|
67
79
|
/** Page outline (default `[2, 3, 4]`). */
|
|
68
80
|
outline?: number[];
|
|
81
|
+
/** Emit `- **Required**` lines (default true). */
|
|
82
|
+
includeRequired?: boolean;
|
|
83
|
+
/** Emit `- **Deprecated**` lines (default true). */
|
|
84
|
+
includeDeprecated?: boolean;
|
|
85
|
+
/** Emit `**Example(s):**` blocks (default true). */
|
|
86
|
+
includeExamples?: boolean;
|
|
87
|
+
/** Emit `- **Since**` lines (default true). */
|
|
88
|
+
includeSince?: boolean;
|
|
89
|
+
/** Emit `- **See**` lines (default true). */
|
|
90
|
+
includeSee?: boolean;
|
|
91
|
+
/** Emit `**Remarks:**` blocks (default true). */
|
|
92
|
+
includeRemarks?: boolean;
|
|
93
|
+
/** Emit `- **Experimental**` lines (default true). */
|
|
94
|
+
includeExperimental?: boolean;
|
|
95
|
+
/** Emit `- **Alpha**` lines (default true). */
|
|
96
|
+
includeAlpha?: boolean;
|
|
97
|
+
/** Emit `- **Beta**` lines (default true). */
|
|
98
|
+
includeBeta?: boolean;
|
|
69
99
|
}
|
|
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. Named sub-schemas (`$defs`) are resolved and
|
|
74
|
-
* expanded inline, so nested options (`changelog.versioning.target`, ...) are
|
|
75
|
-
* documented too. This is what a `dbx.config.ts`-style reference is generated from.
|
|
76
|
-
*/
|
|
77
|
-
export declare function renderConfigFileMarkdown(sections: ConfigFileSection[], options?: RenderConfigFileOptions): string;
|
|
78
100
|
//#endregion
|
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{sanitizeText as t,titleCase as n}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{
|
|
2
|
-
`)
|
|
3
|
-
`),
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{sanitizeText as t,titleCase as n}from"../../../shared/src/string-utils.js";import"../../../shared/src/index.js";import{isSchemaType as r,isZodSchema as i,metaOf as a,normalizeConfigSchema as o,splitBaseSchema as s}from"../schema.js";import{collectVars as c}from"../collect.js";import{cliFlagLabel as l}from"./cli.js";import u from"node:fs";function d(e){return e==null?[]:(Array.isArray(e)?e:[e]).map(e=>t(String(e))).filter(Boolean)}function f(e,n){if(e===void 0||e===!1)return;let r=typeof n==`string`?t(n.trim()):``;return r?`- **Deprecated**: ${r}`:`- **Deprecated**`}function p(e){let t=d(e);return t.length===0?[]:[``,`**Example(s):**`,``,...t.flatMap((e,t)=>t?[``,e]:[e])]}function m(e,t){return t.includeRequired!==!1&&e?`- **Required**`:void 0}function h(e,n){let r=[];if(n.includeDeprecated!==!1){let t=f(e.deprecated,e.deprecationMessage);t&&r.push(t)}if(n.includeSince!==!1&&typeof e.since==`string`&&e.since.trim()&&r.push(`- **Since**: ${t(e.since.trim())}`),n.includeSee!==!1)for(let t of d(e.see))r.push(`- **See**: ${t}`);return n.includeExperimental!==!1&&e.experimental&&r.push(`- **Experimental**`),n.includeAlpha!==!1&&e.alpha&&r.push(`- **Alpha**`),n.includeBeta!==!1&&e.beta&&r.push(`- **Beta**`),r}function g(e,n){if(n.includeRemarks===!1)return[];let r=typeof e==`string`?t(e.trim()):``;return r?[``,`**Remarks:**`,``,...r.split(`
|
|
2
|
+
`)]:[]}function _(e,n,r,i){let a=[`${r} ${n}`];if(e.type===`object`&&e.properties)return a.push(...v(e,`${r}#`,i)),a;let o=typeof e.envName==`string`?e.envName:typeof e.env==`string`?e.env:void 0;i.includeEnv!==!1&&o&&a.push(`- **Env**: \`${o}\``),i.includeCli!==!1&&typeof e.cliFlag==`string`&&a.push(`- **CLI**: \`${e.cliFlag}\``);let s=m(e.required===!0,i);return s&&a.push(s),a.push(`- **Type**: \`${e.tsType??(Array.isArray(e.type)?e.type.join(` | `):e.type)??`any`}\``),a.push(...h(e,i)),e.default!==void 0&&a.push(`- **Default**: \`${JSON.stringify(e.default)}\``),e.description&&a.push(``,t(e.description)),a.push(...g(e.remarks,i)),i.includeExamples!==!1&&a.push(...p(e.example)),a}function v(e,t,n){let r=[];for(let[i,a]of Object.entries(e.properties??{})){let e=a.cliFlag??a.envName??a.env,o=n.useFlags&&e?l(e,n):`\`${i}\``;r.push(``,..._(a,o,t,n))}return r}function y(e,t,n){let r=e.frontmatter;return r===!1?[]:[`---`,...(typeof r==`function`?r({options:e}):typeof r==`string`?r:`title: ${t}\noutline: ${JSON.stringify(n)}`).split(`
|
|
3
|
+
`),`---`,``]}function b(e,t,r={}){let i=r.outline??[2,3,4],a={useFlags:e===(r.cliScope??`cli`),baseGroup:Array.isArray(r.baseGroup)?String(r.baseGroup[0]??`base`):String(r.baseGroup??`base`),...r.envPrefix?{envPrefix:r.envPrefix}:{},...r.shortFlags?{shortFlags:r.shortFlags}:{},...r.includeRequired===void 0?{}:{includeRequired:r.includeRequired},...r.includeDeprecated===void 0?{}:{includeDeprecated:r.includeDeprecated},...r.includeExamples===void 0?{}:{includeExamples:r.includeExamples},...r.includeSince===void 0?{}:{includeSince:r.includeSince},...r.includeSee===void 0?{}:{includeSee:r.includeSee},...r.includeRemarks===void 0?{}:{includeRemarks:r.includeRemarks},...r.includeExperimental===void 0?{}:{includeExperimental:r.includeExperimental},...r.includeAlpha===void 0?{}:{includeAlpha:r.includeAlpha},...r.includeBeta===void 0?{}:{includeBeta:r.includeBeta}},{base:o,groups:c}=s(t,a.baseGroup),l=`${n(e)} Configuration`,u=[...y(r,l,i),`# ${l}`,``,`Every setting below is configured through a config value.`,``,`## Base`,``,...v(o,`###`,a)];for(let[e,t]of Object.entries(c.properties??{}))u.push(``,`## ${n(e)}`,``,...v(t,`###`,a));return`${u.join(`
|
|
4
|
+
`).trim()}\n`}function x(e){return e===void 0?`—`:Array.isArray(e)?`\`${e.join(`,`)}\``:typeof e==`object`?`\`${JSON.stringify(e)}\``:`\`${String(e)}\``}function S(e,t,n){for(let r of Object.values(e.properties??{})){let e=r;if(e.type===`object`&&e.properties)S(r,t,n);else if(e.env){let r=e.envDefault??e.default;n.push({name:e.env,scope:t,...e.description?{description:e.description}:{},...r===void 0?{}:{default:r},...e.required===!0?{required:!0}:{},...e.secret?{secret:!0}:{},...e.public?{public:!0}:{}})}}}function C(e,t={}){let n=t.outline??[2,3,4],r=Array.isArray(t.baseGroup)?String(t.baseGroup[0]??`base`):String(t.baseGroup??`base`),i=t.labels??{},a=[],l=[],u=o(e);for(let[e,t]of Object.entries(u))S(s(t,r).base,e,l);for(let n of c(e,t.envPrefix??`APP_`,{envPathOf:t.envPathOf}))n.required&&n.name&&a.push({name:n.name,scope:n.scope,...n.description?{description:n.description}:{},...n.default===void 0?{}:{default:n.default}});let d=e=>[`| Variable | Default | Description |`,`| -------- | ------- | ----------- |`,...e.map(e=>`| \`${e.name}\` | ${x(e.default)} | ${(e.description??``).replace(/\n/g,` `).replace(/\|/g,`\\|`)} |`)].join(`
|
|
5
|
+
`),f=i.title??`Environment variables`,p=t.intro??`Environment variables are prefixed with \`${t.envPrefix??`APP_`}\`.
|
|
4
6
|
The underscore is a path separator, so every config value has an environment
|
|
5
|
-
variable equivalent.`,
|
|
6
|
-
`)}\n`:``;return
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
---
|
|
7
|
+
variable equivalent.`,m=t.requiredNote??`These variables have no safe default and **must** be set:`,h=t.coreNote??`The core (base) config values:`,g=t.references&&t.references.length?`\n## References\n\n${t.references.map(e=>`- [${e.label}](${e.href})`).join(`
|
|
8
|
+
`)}\n`:``;return`${y(t,f,n).join(`
|
|
9
|
+
`)}
|
|
10
|
+
# ${f}
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
${p}
|
|
12
13
|
|
|
13
|
-
${
|
|
14
|
-
|
|
15
|
-
## ${s.required??`Required`}
|
|
14
|
+
## ${i.required??`Required`}
|
|
16
15
|
|
|
17
|
-
${
|
|
16
|
+
${m}
|
|
18
17
|
|
|
19
|
-
${
|
|
18
|
+
${d(a)}
|
|
20
19
|
|
|
21
|
-
## ${
|
|
20
|
+
## ${i.core??`Core`}
|
|
22
21
|
|
|
23
|
-
${
|
|
22
|
+
${h}
|
|
24
23
|
|
|
25
|
-
${
|
|
26
|
-
${
|
|
27
|
-
`).trim()}\n`}export{
|
|
24
|
+
${d(l)}
|
|
25
|
+
${g}`}function w(e,t){let n=e=>i(e)?e.toJSONSchema({target:`draft-2020-12`}):void 0;if(Array.isArray(e))return t;let a=n(e);if(a){let[e]=Object.keys(t);return e?{[e]:a}:t}if(r(e))return t;let o={};for(let[r,i]of Object.entries(t)){let t=e[r];o[r]=!Array.isArray(t)&&n(t)||i}return o}function T(t,n={}){let r=n.outline??[2,3,4],i=o(t),a={};if(n.combined){let e=n.indexFilename??`index.md`;a[e]=P(w(t,i),{...n,outline:r})}else{for(let[e,t]of Object.entries(i))a[`${e}.md`]=b(e,t,{...n,outline:r});a[n.indexFilename??`index.md`]=C(t,{...n,outline:r})}if(typeof n.outputDir==`string`){u.mkdirSync(n.outputDir,{recursive:!0});for(let[t,r]of Object.entries(a))u.writeFileSync(e.resolve(n.outputDir,t),r,`utf-8`)}return a}function E(e){return e.$ref?e.$ref.split(`/`).pop()??void 0:void 0}function D(e,t){let n=E(e);return n&&t[n]?t[n]:e}function O(e){return typeof e==`string`?`'${e}'`:String(e)}function k(e,t){let n=D(e,t),r=e.required===!0||n.required===!0||void 0,i=e.deprecated??n.deprecated,a=e.deprecationMessage??n.deprecationMessage,o=e.example??n.example,s=e.since??n.since,c=e.see??n.see,l=e.remarks??n.remarks,u=e.experimental??n.experimental,d=e.alpha??n.alpha,f=e.beta??n.beta,p=[...n.anyOf??e.anyOf??[],...n.oneOf??e.oneOf??[]];for(let e of p){let n=D(e,t);r??=e.required===!0||n.required===!0||void 0,i??=e.deprecated??n.deprecated,a??=e.deprecationMessage??n.deprecationMessage,o??=e.example??n.example,s??=e.since??n.since,c??=e.see??n.see,l??=e.remarks??n.remarks,u??=e.experimental??n.experimental,d??=e.alpha??n.alpha,f??=e.beta??n.beta}return{...r===void 0?{}:{required:r},...i===void 0?{}:{deprecated:i},...a===void 0?{}:{deprecationMessage:a},...o===void 0?{}:{example:o},...s===void 0?{}:{since:s},...c===void 0?{}:{see:c},...l===void 0?{}:{remarks:l},...u===void 0?{}:{experimental:u},...d===void 0?{}:{alpha:d},...f===void 0?{}:{beta:f}}}function A(e,t){if(e.$ref){let n=D(e,t);return n.properties||n.anyOf||n.oneOf?E(e):A(n,t)}if(e.const!==void 0)return O(e.const);if(Array.isArray(e.enum)&&e.enum.length>0)return e.enum.map(O).join(` | `);let n=e.anyOf??e.oneOf;if(n&&n.length>0)return n.map(e=>A(e,t)).join(` | `);if(e.properties)return`object`;let r=Array.isArray(e.type)?e.type:e.type?[e.type]:[];if(r.includes(`array`))return`Array<${A(e.items??{},t)}>`;if(r.includes(`object`)){let n=e.additionalProperties;return n&&n!==!0?`Record<string, ${A(n,t)}>`:`Record<string, unknown>`}return r.length===0?`unknown`:r.map(e=>e===`integer`?`number`:e).join(` | `)}function j(e,t,n){let r=E(e);if(r){if(n.has(r))return{properties:{},required:[]};n.add(r)}let i=D(e,t);if(i.properties)return{properties:i.properties,required:Array.isArray(i.required)?i.required:[]};let a=i.anyOf??i.oneOf;if(a){let e={},r=/* @__PURE__ */ new Set;for(let i of a){let a=j(i,t,n);Object.assign(e,a.properties);for(let e of a.required)r.add(e)}return{properties:e,required:[...r]}}return(Array.isArray(i.type)?i.type:i.type?[i.type]:[]).includes(`array`)&&i.items?j(i.items,t,n):{properties:{},required:[]}}function M(e,n,r,i,a,o,s){let c=D(n,i),l=k(n,i),u=[`${r} \`${e}\``],d=m(o||l.required===!0,s);d&&u.push(d),u.push(`- **Type**: \`${A(n,i)}\``),u.push(...h(l,s));let f=n.default??c.default;f!==void 0&&u.push(`- **Default**: \`${JSON.stringify(f)}\``);let _=t(n.description??c.description??``);_&&u.push(``,_),u.push(...g(l.remarks,s)),s.includeExamples!==!1&&u.push(...p(l.example));let v=j(n,i,a),y=r.length<6?`${r}#`:r;for(let[e,t]of Object.entries(v.properties))u.push(``,...M(e,t,y,i,a,v.required.includes(e),s));return u}function N(e,t,n,r,i){let a=[],o=Array.isArray(e.required)?e.required:[];for(let[s,c]of Object.entries(e.properties??{}))a.push(``,...M(s,c,t,n,r,o.includes(s),i));return a}function P(e,t={}){let n=t.title??`Configuration`,r=[...y(t,n,t.outline??[2,3,4]),`# ${n}`,``];t.intro&&r.push(t.intro,``);for(let[n,i]of Object.entries(e)){let e=i,o=e.$defs??{},s=D(e,o),c=a(s);r.push(`## \`${n}\``,``),c?.description&&r.push(c.description,``);let l=m(c?.required===!0,t);l&&r.push(l,``);let u=h(c??{},t);u.length>0&&r.push(...u,``);let d=g(c?.remarks,t);if(d.length>0&&r.push(...d,``),t.includeExamples!==!1){let e=p(c?.example);e.length>0&&r.push(...e,``)}r.push(...N(s,`###`,o,/* @__PURE__ */ new Set,t),``)}return`${r.join(`
|
|
26
|
+
`).trim()}\n`}export{T as generateConfigMarkdown};
|