@deltabox/toolchain 1.11.4 → 2.1.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 +336 -4
- package/README.md +21 -14
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- package/dist/changelog.d.ts +10 -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 +33 -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 +11 -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 +4 -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/args.js +1 -1
- package/dist/packages/changelog/src/utils/breaking.d.ts +16 -0
- package/dist/packages/changelog/src/utils/breaking.js +1 -0
- 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.d.ts +3 -1
- package/dist/packages/changelog/src/utils/git.js +1 -1
- package/dist/packages/changelog/src/utils/reformat.d.ts +4 -1
- package/dist/packages/changelog/src/utils/reformat.js +4 -4
- package/dist/packages/changelog/src/utils/release-notes.d.ts +18 -0
- package/dist/packages/changelog/src/utils/release-notes.js +1 -0
- package/dist/packages/changelog/src/utils/summary.d.ts +29 -2
- package/dist/packages/changelog/src/utils/summary.js +3 -1
- package/dist/packages/changelog/src/utils/types.d.ts +39 -2
- package/dist/packages/changelog/src/utils/version.d.ts +1 -0
- package/dist/packages/changelog/src/utils/versioning.d.ts +30 -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-breaking.d.ts +31 -0
- 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 +248 -0
- package/dist/packages/shared/src/config-schema/changelog.js +1 -0
- package/dist/packages/shared/src/config-schema/ci.d.ts +390 -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 +1654 -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 +295 -90
- package/dist/packages/shared/src/fs-utils.js +1 -1
- package/dist/packages/shared/src/index.d.ts +27 -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 +26 -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
|
@@ -3,21 +3,36 @@ import __tsdown_shims_url from 'node:url';
|
|
|
3
3
|
import { ZodType } from "zod";
|
|
4
4
|
import { Schema } from "untyped";
|
|
5
5
|
//#region packages/config/src/types.d.ts
|
|
6
|
-
|
|
7
|
-
export type EnvValueType = 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
6
|
+
export type ConfigMeta = ConfigBaseMeta & ConfigEnvMeta & ConfigTypeMeta & ConfigCliMeta;
|
|
8
7
|
/**
|
|
9
|
-
* The metadata
|
|
10
|
-
*
|
|
8
|
+
* The metadata attached to a Zod leaf via `.meta()` to describe the
|
|
9
|
+
* generated config that backs the config value.
|
|
11
10
|
*/
|
|
12
|
-
export interface
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
path?: string;
|
|
17
|
-
/** Human-readable description (used by `.env.example` + the docs). */
|
|
11
|
+
export interface ConfigBaseMeta {
|
|
12
|
+
/** Identifier for this config eg. `ToolchainLoggerConfig`. */
|
|
13
|
+
id?: string;
|
|
14
|
+
/** Human-readable description (added to the generated types' JSDocs, generated .env and markdown files). */
|
|
18
15
|
description?: string;
|
|
19
16
|
/** Whether the var has no safe default and must be set. */
|
|
20
17
|
required?: boolean;
|
|
18
|
+
/** Mark this config as deprecated (`@deprecated` in the generated types). */
|
|
19
|
+
deprecated?: boolean;
|
|
20
|
+
/** Optional deprecation message shown after `@deprecated` / `**Deprecated**`. */
|
|
21
|
+
deprecationMessage?: string;
|
|
22
|
+
/** Add custom example(s) that will be added to the generated documentation. */
|
|
23
|
+
example?: string[] | string;
|
|
24
|
+
/** Version or date this option was introduced (`@since`). */
|
|
25
|
+
since?: string;
|
|
26
|
+
/** Related link(s) for the option (`@see`). */
|
|
27
|
+
see?: string[] | string;
|
|
28
|
+
/** Extra notes shown after the description (`@remarks`). */
|
|
29
|
+
remarks?: string;
|
|
30
|
+
/** Mark the option as experimental (`@experimental`). */
|
|
31
|
+
experimental?: boolean;
|
|
32
|
+
/** Mark the option as alpha (`@alpha`). */
|
|
33
|
+
alpha?: boolean;
|
|
34
|
+
/** Mark the option as beta (`@beta`). */
|
|
35
|
+
beta?: boolean;
|
|
21
36
|
/** Whether the value is a secret (never emitted/logged). */
|
|
22
37
|
secret?: boolean;
|
|
23
38
|
/** The scope the variable belongs to. */
|
|
@@ -26,42 +41,135 @@ export interface EnvVarMeta {
|
|
|
26
41
|
public?: boolean;
|
|
27
42
|
/**
|
|
28
43
|
* The resolved-config default, when it differs from the raw env default
|
|
29
|
-
* (e.g. the positive field behind a negative-named
|
|
44
|
+
* (e.g. the positive field behind a negative-named CLI flag).
|
|
30
45
|
*/
|
|
31
46
|
defaultValue?: unknown;
|
|
32
47
|
}
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
48
|
+
/**
|
|
49
|
+
* The metadata attached to a Zod leaf via `.meta()` to describe the
|
|
50
|
+
* generated environment variable that backs the config value.
|
|
51
|
+
*/
|
|
52
|
+
export interface ConfigEnvMeta {
|
|
53
|
+
/** The env var name, e.g. `MYAPP_AUTH_PASSWORD` (optional for non-env configs). */
|
|
54
|
+
envName?: string;
|
|
55
|
+
/**
|
|
56
|
+
* The env var name, e.g. `MYAPP_AUTH_PASSWORD` (optional for non-env configs).
|
|
57
|
+
* @deprecated use `envName` instead.
|
|
58
|
+
*/
|
|
59
|
+
env?: string;
|
|
60
|
+
/** Use a different dotted config path, e.g. `auth.password` instead of the resolved one. */
|
|
61
|
+
envPath?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Use a different dotted config path, e.g. `auth.password` instead of the resolved one.
|
|
64
|
+
* @deprecated use `envPath` instead.
|
|
65
|
+
*/
|
|
66
|
+
path?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The metadata attached to a Zod leaf via `.meta()` to describe the
|
|
70
|
+
* generated type that backs the config value.
|
|
71
|
+
*/
|
|
72
|
+
export interface ConfigTypeMeta {
|
|
73
|
+
/**
|
|
74
|
+
* The generated type/interface name eg. `ToolchainTsconfigConfig`.
|
|
75
|
+
*
|
|
76
|
+
* Defaults to the zod schema's `.meta({ id: <value> })` ({@link ConfigBaseMeta.id})
|
|
77
|
+
* and falls back to `<PascalScope>Config`.
|
|
78
|
+
*/
|
|
79
|
+
typeName?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The metadata attached to a Zod leaf via `.meta()` to describe the
|
|
83
|
+
* generated cli flag that backs the config value.
|
|
84
|
+
*/
|
|
85
|
+
export interface ConfigCliMeta {
|
|
86
|
+
/** Use a different CLI flag, e.g. CLI flag, e.g. `--base-url` instead of the resolved one. */
|
|
87
|
+
cliFlag?: string;
|
|
88
|
+
/** Shorthand CLI flag, e.g. `-u`. */
|
|
89
|
+
cliFlagShort?: string;
|
|
90
|
+
}
|
|
91
|
+
/** The value type a config value resolves to. */
|
|
92
|
+
export type ConfigValueType = 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
93
|
+
/** A collected config definition (env/cli metadata is optional). */
|
|
94
|
+
export interface ConfigDef {
|
|
95
|
+
/** The env var name, when the value is env-backed. */
|
|
96
|
+
name?: string;
|
|
97
|
+
/** The dotted config path. */
|
|
36
98
|
path: string;
|
|
99
|
+
/** The CLI flag, when the value is CLI-backed or derives from an env var. */
|
|
100
|
+
cliFlag?: string;
|
|
37
101
|
description?: string;
|
|
38
102
|
default?: unknown;
|
|
39
103
|
required?: boolean;
|
|
40
104
|
secret?: boolean;
|
|
41
105
|
public?: boolean;
|
|
42
106
|
scope: string;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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;
|
|
107
|
+
type?: ConfigValueType;
|
|
108
|
+
/** The raw config metadata attached to the schema leaf. */
|
|
109
|
+
meta?: ConfigMeta;
|
|
51
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* The schema's object key that holds the config fields.
|
|
113
|
+
*/
|
|
114
|
+
export type ConfigGroup = 'base' | (string & {}) | ConfigGroup[];
|
|
115
|
+
/** A config scope. */
|
|
116
|
+
export type ConfigScope = string;
|
|
117
|
+
/** A resolved untyped schema carrying the toolchain's config metadata. */
|
|
118
|
+
export type ConfigSchemaType = Schema & ConfigMeta;
|
|
119
|
+
/** A Zod schema or a resolved untyped schema. */
|
|
120
|
+
export type ConfigSchemaInput = ZodType | ConfigSchemaType;
|
|
121
|
+
/** A single schema, a list of schemas, or scoped schemas keyed by scope name. */
|
|
122
|
+
export type ConfigSchema<Scope extends ConfigScope = ConfigScope> = ConfigSchemaInput | ConfigSchemaInput[] | Record<Scope, ConfigSchemaInput | ConfigSchemaInput[]>;
|
|
123
|
+
/** Normalized schemas, keyed by scope name. */
|
|
124
|
+
export type ConfigSchemaMap = Record<string, ConfigSchemaType>;
|
|
52
125
|
/** The scopes registered with an engine, keyed by scope name. */
|
|
53
|
-
export type ConfigScopes = Record<string,
|
|
126
|
+
export type ConfigScopes = Record<string, ConfigSchema | ConfigSchema[]>;
|
|
127
|
+
/**
|
|
128
|
+
* Flatten the schema by `n` levels.
|
|
129
|
+
*
|
|
130
|
+
* - When `true` the `baseGroup` will be ignored
|
|
131
|
+
* and the schema will flatten all top-level keys (for objects).
|
|
132
|
+
*
|
|
133
|
+
* - When defined as `{ level: <number> }` the `baseGroup` will be ignored
|
|
134
|
+
* and the schema will flatten keys `n` levels deep (for objects).
|
|
135
|
+
*
|
|
136
|
+
* - When defined as `{ maxDepth: <number> }` the `baseGroup` will be ignored
|
|
137
|
+
* and the schema will flatten keys `n` levels deep and stops at `maxDepth` (for objects).
|
|
138
|
+
*/
|
|
139
|
+
export type ConfigEngineFlatten = boolean | {
|
|
140
|
+
level: number;
|
|
141
|
+
maxDepth?: never;
|
|
142
|
+
} | {
|
|
143
|
+
maxDepth: number;
|
|
144
|
+
level?: never;
|
|
145
|
+
};
|
|
54
146
|
/** Options shared by every generator. */
|
|
55
147
|
export interface ConfigEngineOptions {
|
|
56
148
|
/** The scopes to walk, keyed by scope name (eg. `{ server, frontend, cli }`). */
|
|
57
|
-
|
|
149
|
+
schema: ConfigSchema;
|
|
58
150
|
/** The env-var prefix (eg. `MYAPP_`). Kept as a replacement token in code. */
|
|
59
151
|
envPrefix?: string;
|
|
60
152
|
/**
|
|
61
|
-
* The object key that holds the "flat" base config fields, hoisted out of
|
|
153
|
+
* The schema's object key that holds the "flat" base config fields, hoisted out of
|
|
62
154
|
* the nested groups in the generated types/docs (default `base`).
|
|
63
155
|
*/
|
|
64
|
-
baseGroup?:
|
|
156
|
+
baseGroup?: ConfigGroup;
|
|
157
|
+
/**
|
|
158
|
+
* Flattens the schema by `n` levels.
|
|
159
|
+
*
|
|
160
|
+
* - When `true` the `baseGroup` will be ignored
|
|
161
|
+
* and the schema will flatten all top-level keys (for objects).
|
|
162
|
+
*
|
|
163
|
+
* - When defined as `{ level: <number> }` the `baseGroup` will be ignored
|
|
164
|
+
* and the schema will flatten keys `n` levels deep (for objects).
|
|
165
|
+
*/
|
|
166
|
+
flatten?: boolean | {
|
|
167
|
+
level: number;
|
|
168
|
+
maxLevel?: never;
|
|
169
|
+
} | {
|
|
170
|
+
maxLevel: number;
|
|
171
|
+
level?: never;
|
|
172
|
+
};
|
|
65
173
|
/** The monorepo/project root used for default output paths. */
|
|
66
174
|
root?: string;
|
|
67
175
|
/**
|
|
@@ -70,6 +178,4 @@ export interface ConfigEngineOptions {
|
|
|
70
178
|
*/
|
|
71
179
|
envPathOf?: (env: string) => string;
|
|
72
180
|
}
|
|
73
|
-
/** Derive the dotted config path from an env var name + prefix. */
|
|
74
|
-
export declare function envPathOf(env: string, prefix?: string): string;
|
|
75
181
|
//#endregion
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { SyncTask } from "../../shared/src/toolchain.js";
|
|
4
|
+
import "../../shared/src/index.js";
|
|
5
|
+
//#region packages/core/src/editor-config.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Emit centralized config warnings: tool precedence conflicts and deprecated
|
|
8
|
+
* sections. Runs even when editor defaults are off so CLI/extension users still
|
|
9
|
+
* see the notices.
|
|
10
|
+
*/
|
|
11
|
+
export declare function toolingConfigTask(): SyncTask;
|
|
12
|
+
/** Add project-scoped VS Code defaults when `fmt.vscode` / `lint.vscode` is on. */
|
|
13
|
+
export declare function editorConfigSyncTask(): SyncTask;
|
|
14
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{deepMerge as t,isPlainObject as n}from"../../shared/src/object-utils.js";import{errorMessage as r,warningMessage as i}from"../../shared/src/messages.js";import{FORMATTER_PRECEDENCE as a,LINTER_PRECEDENCE as o,resolveFmtTool as s,resolveFmtTools as c,resolveLintTool as l,resolveLintTools as u,sectionConfig as d,sectionEnabled as f}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import p from"node:fs";const m={oxc:`oxc.oxc-vscode`,biome:`biomejs.biome`,prettier:`esbenp.prettier-vscode`,dprint:`dprint.dprint`},h={oxc:{"source.fixAll.oxc":`explicit`},biome:{"quickfix.biome":`explicit`,"source.organizeImports.biome":`explicit`},eslint:{"source.fixAll.eslint":`explicit`}},g=[`javascript`,`javascriptreact`,`typescript`,`typescriptreact`];function _(e){let t=m[e];return t?{"editor.defaultFormatter":t,...Object.fromEntries(g.map(e=>[`[${e}]`,{"editor.defaultFormatter":t}]))}:{}}function v(e,t){for(let[r,i]of Object.entries(t)){let t=e[r];t===void 0?e[r]=i:n(t)&&n(i)&&v(t,i)}}function y(e){return e===!0||n(e)}function b(e,r){if(!n(r))return e;let i=r,a=i.overrides?t(e,i.overrides):e;for(let e of i.exclude??[]){let{[e]:t,...n}=a;a=n}return a}function x(){return{name:`tooling`,enabled:e=>f(e.fmt)||f(e.lint)||f(e.biome),run:e=>{let t=f(e.config.biome),n=c(e.config),s=u(e.config),l=t?a.filter(e=>e===`biome`||n.includes(e)):n,d=t?o.filter(e=>e===`biome`||s.includes(e)):s;return l.length>1&&e.warn(i(`fmt.conflict`,{tools:l.join(`, `),winner:l[0]}),`fmt.conflict`),d.length>1&&e.warn(i(`lint.conflict`,{tools:d.join(`, `),winner:d[0]}),`lint.conflict`),t&&e.warn(r(`deprecated.section.biome`),`deprecated.section.biome`),[]}}}function S(){return{name:`editor-config`,projectTypes:[`monorepo-root`,`project`],enabled:e=>y(f(e.fmt)?d(e.fmt)?.vscode:void 0)||y(f(e.lint)?d(e.lint)?.vscode:void 0),run:t=>{let r=s(t.config),i=l(t.config),a=f(t.config.fmt)?d(t.config.fmt)?.vscode:void 0,o=f(t.config.lint)?d(t.config.lint)?.vscode:void 0,c={};if(y(a)&&r&&Object.assign(c,b(_(r),a)),y(o)&&i&&Object.assign(c,b({"editor.codeActionsOnSave":h[i]??{}},o)),Object.keys(c).length===0)return[];let u=e.join(t.cwd,`.vscode`,`settings.json`),m={};if(p.existsSync(u))try{let e=JSON.parse(p.readFileSync(u,`utf-8`).replace(/^\uFEFF/,``));if(!n(e))return t.warn(`cannot add editor defaults: ${u} is not a JSON object.`,`vscode.settings-invalid`),[];m=e}catch{return t.warn(`cannot add editor defaults: ${u} is not valid JSON.`,`vscode.settings-invalid`),[]}if(t.check)return[];let g=JSON.stringify(m);return v(m,c),JSON.stringify(m)!==g&&(p.mkdirSync(e.dirname(u),{recursive:!0}),p.writeFileSync(u,`${JSON.stringify(m,null,4)}\n`,`utf-8`)),[]}}}export{S as editorConfigSyncTask,x as toolingConfigTask};
|
|
@@ -1 +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()&&!e.isSymbolicLink()&&!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};
|
|
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()&&!e.isSymbolicLink()&&!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`).replace(/^\uFEFF/,``))}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};
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { editorConfigSyncTask, toolingConfigTask } from "./editor-config.js";
|
|
3
4
|
import { DBX_GITIGNORE_BLOCK, ensureDbxGitignore } from "./gitignore.js";
|
|
4
5
|
import { BuildProjectGraphOptions, IGNORED_DIRS, PackageManager, ProjectGraph, ProjectNode, buildProjectGraph, detectPackageManager, orderProjects, projectGraphPath, readProjectGraph, writeProjectGraph } from "./graph.js";
|
|
5
6
|
import { LoadToolchainConfigOptions, LoadedConfig, findConfigFile, findParentConfigFile, loadToolchainConfig, mergeToolchainConfig } from "./loader.js";
|
|
6
|
-
import { MANIFEST_DIR, MANIFEST_FILE, Manifest, TIMESTAMPS_FILE, readManifest, readSyncedAt, writeManifest } from "./manifest.js";
|
|
7
|
+
import { FileOrigin, MANIFEST_DIR, MANIFEST_FILE, Manifest, TIMESTAMPS_FILE, readManifest, readSyncedAt, writeManifest } from "./manifest.js";
|
|
7
8
|
import { TsconfigFileNames, detectProjectType, resolveProjectType } from "./project-type.js";
|
|
8
|
-
import { providerRegistryPath, readProviderRegistry, writeProviderRegistry } from "./provider-registry.js";
|
|
9
|
+
import { ProviderRegistryPath, addGlobalProviderRegistry, addProjectProviderRegistry, defaultGlobalProvidersDir, globalProviderRegistryPath, legacyProviderRegistryPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readProviderRegistry, removeGlobalProviderRegistry, removeProjectProviderRegistry, setGlobalProviderRegistries, setProjectProviderRegistries, writeGlobalProviders, writeProviderRegistry } from "./provider-registry.js";
|
|
9
10
|
import { SelectProjectsOptions, SelectedProject, selectProjects } from "./select.js";
|
|
10
|
-
import { ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, resetProjects, resetToolchain } from "./reset.js";
|
|
11
|
-
import { RunSyncOptions, SyncResult, runSync } from "./sync.js";
|
|
11
|
+
import { ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, resetProjects, resetToolchain } from "./reset.js";
|
|
12
|
+
import { RemovedFile, RunSyncOptions, SyncResult, runSync } from "./sync.js";
|
|
12
13
|
import { VscodeSyncOptions, vscodeSyncTask } from "./vscode.js";
|
|
13
|
-
import { RunWatchOptions, runWatch } from "./watch.js";
|
|
14
|
+
import { RunWatchOptions, resolveWatchGlobs, runWatch } from "./watch.js";
|
|
14
15
|
declare namespace index_d_exports {
|
|
15
|
-
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, ensureDbxGitignore, findConfigFile, findParentConfigFile, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, resetProjects, resetToolchain, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
16
|
+
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveProjectType, resolveWatchGlobs, runSync, runWatch, selectProjects, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
16
17
|
}
|
|
17
18
|
//#endregion
|
|
18
|
-
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, ensureDbxGitignore, findConfigFile, findParentConfigFile, index_d_exports, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, resetProjects, resetToolchain, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
19
|
+
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, index_d_exports, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveProjectType, resolveWatchGlobs, runSync, runWatch, selectProjects, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{editorConfigSyncTask as t,toolingConfigTask as n}from"./editor-config.js";import{DBX_GITIGNORE_BLOCK as r,ensureDbxGitignore as i}from"./gitignore.js";import{detectProjectType as a,resolveProjectType as o}from"./project-type.js";import{findConfigFile as s,findParentConfigFile as c,loadToolchainConfig as l,mergeToolchainConfig as u}from"./loader.js";import{IGNORED_DIRS as d,buildProjectGraph as f,detectPackageManager as p,orderProjects as m,projectGraphPath as h,readProjectGraph as g,writeProjectGraph as _}from"./graph.js";import{MANIFEST_DIR as v,MANIFEST_FILE as y,TIMESTAMPS_FILE as b,readManifest as x,readSyncedAt as S,writeManifest as C}from"./manifest.js";import{addGlobalProviderRegistry as w,addProjectProviderRegistry as T,defaultGlobalProvidersDir as E,globalProviderRegistryPath as D,legacyProviderRegistryPath as O,providerRegistryPath as k,providerRegistryPaths as A,readAllProviders as j,readAllProvidersSync as M,readGlobalProviders as N,readProviderRegistry as P,removeGlobalProviderRegistry as F,removeProjectProviderRegistry as I,setGlobalProviderRegistries as L,setProjectProviderRegistries as R,writeGlobalProviders as z,writeProviderRegistry as B}from"./provider-registry.js";import{selectProjects as V}from"./select.js";import{resetProjects as H,resetToolchain as U}from"./reset.js";import{runSync as W}from"./sync.js";import{vscodeSyncTask as G}from"./vscode.js";import{resolveWatchGlobs as K,runWatch as q}from"./watch.js";var J=/* @__PURE__ */ e({DBX_GITIGNORE_BLOCK:()=>r,IGNORED_DIRS:()=>d,MANIFEST_DIR:()=>v,MANIFEST_FILE:()=>y,TIMESTAMPS_FILE:()=>b,addGlobalProviderRegistry:()=>w,addProjectProviderRegistry:()=>T,buildProjectGraph:()=>f,defaultGlobalProvidersDir:()=>E,detectPackageManager:()=>p,detectProjectType:()=>a,editorConfigSyncTask:()=>t,ensureDbxGitignore:()=>i,findConfigFile:()=>s,findParentConfigFile:()=>c,globalProviderRegistryPath:()=>D,legacyProviderRegistryPath:()=>O,loadToolchainConfig:()=>l,mergeToolchainConfig:()=>u,orderProjects:()=>m,projectGraphPath:()=>h,providerRegistryPath:()=>k,providerRegistryPaths:()=>A,readAllProviders:()=>j,readAllProvidersSync:()=>M,readGlobalProviders:()=>N,readManifest:()=>x,readProjectGraph:()=>g,readProviderRegistry:()=>P,readSyncedAt:()=>S,removeGlobalProviderRegistry:()=>F,removeProjectProviderRegistry:()=>I,resetProjects:()=>H,resetToolchain:()=>U,resolveProjectType:()=>o,resolveWatchGlobs:()=>K,runSync:()=>W,runWatch:()=>q,selectProjects:()=>V,setGlobalProviderRegistries:()=>L,setProjectProviderRegistries:()=>R,toolingConfigTask:()=>n,vscodeSyncTask:()=>G,writeGlobalProviders:()=>z,writeManifest:()=>C,writeProjectGraph:()=>_,writeProviderRegistry:()=>B});export{r as DBX_GITIGNORE_BLOCK,d as IGNORED_DIRS,v as MANIFEST_DIR,y as MANIFEST_FILE,b as TIMESTAMPS_FILE,w as addGlobalProviderRegistry,T as addProjectProviderRegistry,f as buildProjectGraph,E as defaultGlobalProvidersDir,p as detectPackageManager,a as detectProjectType,t as editorConfigSyncTask,i as ensureDbxGitignore,s as findConfigFile,c as findParentConfigFile,D as globalProviderRegistryPath,O as legacyProviderRegistryPath,l as loadToolchainConfig,u as mergeToolchainConfig,m as orderProjects,h as projectGraphPath,k as providerRegistryPath,A as providerRegistryPaths,j as readAllProviders,M as readAllProvidersSync,N as readGlobalProviders,x as readManifest,g as readProjectGraph,P as readProviderRegistry,S as readSyncedAt,F as removeGlobalProviderRegistry,I as removeProjectProviderRegistry,H as resetProjects,U as resetToolchain,o as resolveProjectType,K as resolveWatchGlobs,W as runSync,q as runWatch,V as selectProjects,L as setGlobalProviderRegistries,R as setProjectProviderRegistries,J as src_exports,n as toolingConfigTask,G as vscodeSyncTask,z as writeGlobalProviders,C as writeManifest,_ as writeProjectGraph,B as writeProviderRegistry};
|
|
@@ -8,6 +8,8 @@ import "../../shared/src/index.js";
|
|
|
8
8
|
/** A loaded tooling config plus its resolved path + replacement tokens. */
|
|
9
9
|
export interface LoadedConfig {
|
|
10
10
|
config: ToolchainConfig;
|
|
11
|
+
/** The config from this project's own file (not the inherited parent). */
|
|
12
|
+
ownConfig: ToolchainConfig;
|
|
11
13
|
/** The config file that was loaded (undefined when none was found). */
|
|
12
14
|
path?: string;
|
|
13
15
|
/** The inherited ancestor config, when the loaded config overrides one. */
|
|
@@ -30,6 +32,17 @@ export interface LoadToolchainConfigOptions {
|
|
|
30
32
|
* VS Code tree views that drive them). Default: `false` (throw).
|
|
31
33
|
*/
|
|
32
34
|
tolerant?: boolean;
|
|
35
|
+
/** Load this config file instead of discovering `dbx.config.*`. */
|
|
36
|
+
config?: string;
|
|
37
|
+
/** Ignore every config file and use defaults / CLI flags only. */
|
|
38
|
+
noConfig?: boolean;
|
|
39
|
+
/** Skip the config's `hooks.afterLoad` callback (metadata-only loads). */
|
|
40
|
+
skipHooks?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Bypass the ESM/CJS module cache. Long-running callers (eg. `dbx watch`)
|
|
43
|
+
* must set this so an edited config is actually re-evaluated.
|
|
44
|
+
*/
|
|
45
|
+
fresh?: boolean;
|
|
33
46
|
}
|
|
34
47
|
/** Find the first `dbx.config.*` file at `cwd`, if any. */
|
|
35
48
|
export declare function findConfigFile(cwd?: string): string | undefined;
|
|
@@ -46,13 +59,18 @@ export declare function findParentConfigFile(cwd?: string): string | undefined;
|
|
|
46
59
|
* **replace** the ancestor's value — so a non-root `dbx.config` can override
|
|
47
60
|
* individual options of the root config (and keep the rest).
|
|
48
61
|
*
|
|
62
|
+
* Some sections are workspace-scoped and are **never inherited**:
|
|
63
|
+
* - `ci` / the `changelog` section: workflows are repository-level;
|
|
64
|
+
* - `tsconfig`: the root task expands every workspace tsconfig;
|
|
65
|
+
* - `vite.test` and `vite.run`: they describe how that workspace runs;
|
|
66
|
+
* - `hooks`: a parent's hooks are code and must not run for a nested sync.
|
|
67
|
+
*
|
|
49
68
|
* `project` is inherited **except the identity fields** (`name`, `scope`,
|
|
50
69
|
* `description`, `type`): a workspace keeps its own name/description (or falls
|
|
51
70
|
* back to its `package.json`), and is still detected from its own files — so a
|
|
52
71
|
* root `project` never renames a workspace. The shared fields (author, license,
|
|
53
72
|
* homepage, `repo`, `packageManager`, ...) flow down. `project.inherit: false`
|
|
54
|
-
* disables project inheritance entirely.
|
|
55
|
-
* a parent's hooks are code and must not run for a nested project's sync.
|
|
73
|
+
* disables project inheritance entirely.
|
|
56
74
|
*/
|
|
57
75
|
export declare function mergeToolchainConfig(parent: ToolchainConfig, child: ToolchainConfig): ToolchainConfig;
|
|
58
76
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{deepMerge as n}from"../../shared/src/object-utils.js";import{readJsonAt as
|
|
1
|
+
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{deepMerge as n,isPlainObject as r}from"../../shared/src/object-utils.js";import{readJsonAt as i}from"../../shared/src/fs-utils.js";import{projectFromPackageJson as a}from"../../shared/src/project.js";import{CONFIG_FILE_NAMES as o,resolveTokens as s}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as c}from"./project-type.js";import{createRequire as l}from"node:module";import u from"node:fs";function d(e){return e instanceof Error?e.message:String(e)}function f(t=process.cwd()){for(let n of o){let r=e.resolve(t,n);if(u.existsSync(r))return r}}function p(t=process.cwd()){let n=e.resolve(t);if(u.existsSync(e.join(n,`.git`)))return;let r=e.dirname(n);for(;;){let t=f(r);if(t)return t;if(u.existsSync(e.join(r,`.git`)))return;let n=e.dirname(r);if(n===r)return;r=n}}function m(e){let t=e?.code;return t===`ERR_UNKNOWN_FILE_EXTENSION`||t===`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`}function h(e){let t=e;for(let e=0;e<2&&t&&typeof t==`object`&&`default`in t&&Object.keys(t).every(e=>e==="default"||e==="__esModule");e++)t=t.default;return t}const g=l(import.meta.url);let _=0;async function v(e,n=!1){if(e.endsWith(`.json`))return JSON.parse(u.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));if(n)try{delete g.cache[e]}catch{}let r=t(e).href,i=n?`${r}?dbx=${Date.now()}-${++_}`:r;try{let e=await import(i);return e.default??e}catch(e){if(!m(e))throw e;let{tsImport:t}=await import(`tsx/esm/api`);return h(await t(i,import.meta.url))}}async function y(e,t=!1){let n=await b(await v(e,t)),r=n&&typeof n==`object`?n.toolchain:void 0;return r&&typeof r==`object`?r:{}}async function b(e){let t=await e;return typeof t==`function`&&(t=await t()),t}const x=/* @__PURE__ */ new Set([`name`,`scope`,`description`,`type`]),S=/* @__PURE__ */ new Set([`test`,`run`]);function C(e){if(!r(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>!S.has(e)));return Object.keys(t).length>0?t:void 0}function w(e,t){let{hooks:r,project:i,ci:a,changelog:o,catalogs:s,tsconfig:c,vite:l,...u}=e,d=u,f=C(l);if(f!==void 0&&(d={...d,vite:f}),t.project?.inherit!==!1&&i){let e=Object.fromEntries(Object.entries(i).filter(([e])=>!x.has(e)));Object.keys(e).length>0&&(d={...d,project:e})}return n(d,t)}async function T(t=process.cwd(),n={}){let r=n.noConfig?void 0:n.config?e.isAbsolute(n.config)?n.config:e.resolve(t,n.config):f(t),o=n.noConfig?void 0:p(t),l=n.tolerant??!1,u=n.fresh??!1,m={},h={},g,_;if(o)try{g=await y(o,u),m=g}catch(e){if(!l)throw e;_=`failed to load ${o}: ${d(e)}`}if(r)try{let e=await y(r,u);h=e,m=o&&!_?w(m,e):e}catch(e){if(!l)throw e;_=`failed to load ${r}: ${d(e)}`}let v=i(t,`package.json`),b={...v?a(v):void 0,...m.project??void 0},x=s({...m,project:b});n.skipHooks||await m.hooks?.afterLoad?.({cwd:t,config:m,tokens:x,...r?{path:r}:{}});let S=m.tsconfig===void 0&&g?.tsconfig!==void 0?{...m,tsconfig:g.tsconfig}:m;return{config:m,ownConfig:h,...r?{path:r}:{},...o?{parentPath:o}:{},..._?{error:_}:{},tokens:x,projectType:c(t,S)}}export{f as findConfigFile,p as findParentConfigFile,T as loadToolchainConfig,w as mergeToolchainConfig};
|
|
@@ -9,15 +9,34 @@ export declare const MANIFEST_FILE = "manifest.json";
|
|
|
9
9
|
* dirties the committed `manifest.json`, which tracks only the file list.
|
|
10
10
|
*/
|
|
11
11
|
export declare const TIMESTAMPS_FILE = "timestamps.json";
|
|
12
|
+
/** Whether dbx created a managed file or adopted a pre-existing one. */
|
|
13
|
+
export type FileOrigin = 'created' | 'adopted';
|
|
12
14
|
export interface Manifest {
|
|
13
15
|
/** Repo-relative paths of every generated/managed file. */
|
|
14
16
|
files: string[];
|
|
17
|
+
/** Per-file origin, so a sync only deletes files that dbx created. */
|
|
18
|
+
origins?: Record<string, FileOrigin>;
|
|
15
19
|
/**
|
|
16
20
|
* ISO timestamp of the last successful sync (absent when never synced).
|
|
17
21
|
* Read from {@link TIMESTAMPS_FILE}, falling back to a legacy inline
|
|
18
22
|
* `syncedAt` in the manifest until the next sync migrates it.
|
|
19
23
|
*/
|
|
20
24
|
syncedAt?: string;
|
|
25
|
+
/**
|
|
26
|
+
* The `tsconfig.overrides` currently applied, keyed by the repo-relative
|
|
27
|
+
* target file (`{ kind, override }`), so a removed override can be reverted.
|
|
28
|
+
*/
|
|
29
|
+
tsconfigOverrides?: Record<string, unknown>;
|
|
30
|
+
/**
|
|
31
|
+
* The original (pre-override) tsconfig contents, nested by repo-relative
|
|
32
|
+
* path (`{ packages: { core: { "tsconfig.build.json": { ... } } } }`).
|
|
33
|
+
*/
|
|
34
|
+
snapshots?: Record<string, unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* Task-defined metadata persisted across syncs (everything a task writes to
|
|
37
|
+
* `SyncContext.manifest` that is not one of the reserved keys).
|
|
38
|
+
*/
|
|
39
|
+
extras?: Record<string, unknown>;
|
|
21
40
|
}
|
|
22
41
|
/**
|
|
23
42
|
* The last-sync timestamp for a project: {@link TIMESTAMPS_FILE} first, then a
|
|
@@ -32,5 +51,5 @@ export declare function readManifest(cwd: string): Manifest;
|
|
|
32
51
|
* creating the directory as needed. Rewriting `manifest.json` without
|
|
33
52
|
* `syncedAt` is what migrates a legacy inline timestamp on the next sync.
|
|
34
53
|
*/
|
|
35
|
-
export declare function writeManifest(cwd: string, files: string[], syncedAt?: string): void;
|
|
54
|
+
export declare function writeManifest(cwd: string, files: string[], syncedAt?: string, origins?: Record<string, FileOrigin>, extras?: Record<string, unknown>): void;
|
|
36
55
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{toJson as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import n from"node:fs";const r=`.dbx/toolchain`,i=`manifest.json`,a=`timestamps.json`;function o(t){return e.resolve(t,r)}function s(t,r){try{return JSON.parse(n.readFileSync(e.join(o(t),r),`utf-8`))}catch{return}}function c(e){let t=s(e,a);if(typeof t?.syncedAt==`string`)return t.syncedAt;let n=s(e,i);return typeof n?.syncedAt==`string`?n.syncedAt:void 0}function l(e){let t=s(e,i),n=c(e);return{files:Array.isArray(t?.files)?t.files:[],...n?{syncedAt:n}:{}}}function u(r,s,c){let
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{toJson as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import n from"node:fs";const r=`.dbx/toolchain`,i=`manifest.json`,a=`timestamps.json`;function o(t){return e.resolve(t,r)}function s(t,r){try{return JSON.parse(n.readFileSync(e.join(o(t),r),`utf-8`).replace(/^\uFEFF/,``))}catch{return}}function c(e){let t=s(e,a);if(typeof t?.syncedAt==`string`)return t.syncedAt;let n=s(e,i);return typeof n?.syncedAt==`string`?n.syncedAt:void 0}function l(e){let t=s(e,i),n=c(e),r=t?.origins&&typeof t.origins==`object`?t.origins:void 0,a=t?.tsconfigOverrides&&typeof t.tsconfigOverrides==`object`?t.tsconfigOverrides:void 0,o=t?.snapshots&&typeof t.snapshots==`object`?t.snapshots:void 0,l=/* @__PURE__ */ new Set([`files`,`origins`,`syncedAt`,`tsconfigOverrides`,`snapshots`]),u=Object.fromEntries(Object.entries(t??{}).filter(([e])=>!l.has(e)));return{files:Array.isArray(t?.files)?t.files:[],...r?{origins:r}:{},...a?{tsconfigOverrides:a}:{},...o?{snapshots:o}:{},...Object.keys(u).length>0?{extras:u}:{},...n?{syncedAt:n}:{}}}function u(r,s,c,l,u){let d=o(r);n.mkdirSync(d,{recursive:!0});let f=[...new Set(s)].sort();n.writeFileSync(e.join(d,i),t({...u,files:f,...l?{origins:Object.fromEntries(f.filter(e=>l[e]!==void 0).map(e=>[e,l[e]]))}:{}}),`utf-8`),n.writeFileSync(e.join(d,a),t({syncedAt:c??(/* @__PURE__ */ new Date()).toISOString()}),`utf-8`)}export{r as MANIFEST_DIR,i as MANIFEST_FILE,a as TIMESTAMPS_FILE,l as readManifest,c as readSyncedAt,u as writeManifest};
|
|
@@ -1,12 +1,57 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { ToolchainProvider } from "../../shared/src/provider.js";
|
|
4
|
+
import { RegistryPolicy } from "../../shared/src/registry-policy.js";
|
|
4
5
|
import "../../shared/src/index.js";
|
|
5
6
|
//#region packages/core/src/provider-registry.d.ts
|
|
6
|
-
/** The absolute path of
|
|
7
|
+
/** The absolute path of the legacy project provider file. */
|
|
8
|
+
export declare function legacyProviderRegistryPath(cwd?: string): string;
|
|
9
|
+
/** The default project provider registry file. */
|
|
7
10
|
export declare function providerRegistryPath(cwd?: string): string;
|
|
8
|
-
/**
|
|
11
|
+
/** The `~/.dbx/toolchain/.registry/providers` default global directory. */
|
|
12
|
+
export declare function defaultGlobalProvidersDir(): string;
|
|
13
|
+
/** The legacy global provider file. */
|
|
14
|
+
export declare function globalProviderRegistryPath(): string;
|
|
15
|
+
/** Add a project-scoped provider registry path (or remote URL). */
|
|
16
|
+
export declare function addProjectProviderRegistry(cwd: string, entry: string): void;
|
|
17
|
+
/** Remove a project-scoped provider registry path (never the implicit default). */
|
|
18
|
+
export declare function removeProjectProviderRegistry(cwd: string, entry: string): void;
|
|
19
|
+
/** Add a global provider registry path (or remote URL). */
|
|
20
|
+
export declare function addGlobalProviderRegistry(entry: string): void;
|
|
21
|
+
/** Remove a global provider registry path. */
|
|
22
|
+
export declare function removeGlobalProviderRegistry(entry: string): void;
|
|
23
|
+
/** Replace the global provider search paths. */
|
|
24
|
+
export declare function setGlobalProviderRegistries(paths: string[]): void;
|
|
25
|
+
/** Replace the project-scoped provider search paths. */
|
|
26
|
+
export declare function setProjectProviderRegistries(cwd: string, paths: string[]): void;
|
|
27
|
+
export interface ProviderRegistryPath {
|
|
28
|
+
path: string;
|
|
29
|
+
scope: 'project' | 'global';
|
|
30
|
+
remote: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Every provider registry path, project first (implicit dir + project entries +
|
|
34
|
+
* the legacy project file), then global (CLI config paths or the default dir,
|
|
35
|
+
* plus the legacy global file). Duplicates are removed.
|
|
36
|
+
*/
|
|
37
|
+
export declare function providerRegistryPaths(cwd?: string, policy?: RegistryPolicy): ProviderRegistryPath[];
|
|
38
|
+
/** Read a project's custom providers from its provider search paths. */
|
|
9
39
|
export declare function readProviderRegistry(cwd?: string): ToolchainProvider[];
|
|
10
|
-
/** Write a project's custom providers
|
|
40
|
+
/** Write a project's custom providers to the default project registry file. */
|
|
11
41
|
export declare function writeProviderRegistry(cwd: string, providers: ToolchainProvider[]): void;
|
|
42
|
+
/** Read the global providers from the global search paths. */
|
|
43
|
+
export declare function readGlobalProviders(): ToolchainProvider[];
|
|
44
|
+
/** Write the global providers to the default global providers file. */
|
|
45
|
+
export declare function writeGlobalProviders(providers: ToolchainProvider[]): void;
|
|
46
|
+
/**
|
|
47
|
+
* The project + global providers from local registries, deduped by id (a
|
|
48
|
+
* project provider wins). Remote registries are skipped; use
|
|
49
|
+
* {@link readAllProviders} for those.
|
|
50
|
+
*/
|
|
51
|
+
export declare function readAllProvidersSync(cwd?: string, policy?: RegistryPolicy): ToolchainProvider[];
|
|
52
|
+
/**
|
|
53
|
+
* The project + global providers from every search path, including remote
|
|
54
|
+
* registries, deduped by id (a project provider wins).
|
|
55
|
+
*/
|
|
56
|
+
export declare function readAllProviders(cwd?: string, policy?: RegistryPolicy): Promise<ToolchainProvider[]>;
|
|
12
57
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import t from"node:fs";const
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{registrySourceAllowed as t}from"../../shared/src/registry-policy.js";import"../../shared/src/index.js";import n from"node:fs";import r from"node:os";const i=e.join(`.dbx`,`toolchain`),a=`providers.json`;function o(t){return t===`~`?r.homedir():t.startsWith(`~/`)||t.startsWith(`~\\`)?e.join(r.homedir(),t.slice(2)):t}function s(e){return/^https?:\/\//i.test(e)}function c(e){return e?(Array.isArray(e)?e:[e]).map(e=>o(String(e))).filter(Boolean):[]}function l(t=process.cwd()){return e.join(t,i,`providers.json`)}function u(t=process.cwd()){return e.join(t,i,`.registry`,`providers`,a)}function d(){return e.join(r.homedir(),`.dbx`,`toolchain`,`.registry`,`providers`)}function f(){return e.join(r.homedir(),`.dbx`,`toolchain`,`.registry`,a)}function p(){return e.join(r.homedir(),`.dbx`,`toolchain`,`cli`,`config.json`)}function m(){try{let e=n.readFileSync(p(),`utf-8`).replace(/^\uFEFF/,``),t=JSON.parse(e);return t&&typeof t==`object`?t:{}}catch{return{}}}function h(e=m()){if(e.providerRegistrySearchPaths!==void 0)return c(e.providerRegistrySearchPaths);let t=e.registrySearchPaths;return t&&typeof t==`object`&&!Array.isArray(t)?c(t.providers):[]}function g(t){return e.join(t,i,`registries.json`)}function _(e){try{let t=n.readFileSync(g(e),`utf-8`).replace(/^\uFEFF/,``),r=JSON.parse(t);return{templates:c(r.templates),providers:c(r.providers)}}catch{return{}}}function v(t,r){let i=g(t),a={...r.templates&&r.templates.length>0?{templates:r.templates}:{},...r.providers&&r.providers.length>0?{providers:r.providers}:{}};Object.keys(a).length===0?n.rmSync(i,{force:!0}):(n.mkdirSync(e.dirname(i),{recursive:!0}),n.writeFileSync(i,`${JSON.stringify(a,null,4)}\n`,`utf-8`))}function y(t){let r={...m(),...t},i=p();return n.mkdirSync(e.dirname(i),{recursive:!0}),n.writeFileSync(i,`${JSON.stringify(r,null,4)}\n`,`utf-8`),r}function b(t,n,r){let i=n=>s(n)?n:e.resolve(t,o(n));return i(n)===i(r)}function x(e,t){let n=_(e),r=n.providers??[];r.some(n=>b(e,n,t))||v(e,{...n.templates?{templates:n.templates}:{},providers:[...r,t]})}function S(e,t){let n=_(e);v(e,{...n.templates?{templates:n.templates}:{},...n.providers?{providers:n.providers.filter(n=>!b(e,n,t))}:{}})}function C(e){let t=h(m()),n=o(e);t.some(e=>b(process.cwd(),e,n))||y({providerRegistrySearchPaths:[...t,n]})}function w(e){let t=m(),n=o(e);y({providerRegistrySearchPaths:h(t).filter(e=>!b(process.cwd(),e,n))})}function T(e){y({providerRegistrySearchPaths:e.map(o)})}function E(e,t){let n=_(e);v(e,{...n.templates?{templates:n.templates}:{},providers:t})}function D(t){return(_(t).providers??[]).map(n=>s(n)?n:e.resolve(t,n))}function O(r=process.cwd(),a){let o=m(),c=[],u=e.join(r,i,`.registry`,`providers`);n.existsSync(u)&&c.push(u),c.push(...D(r)),n.existsSync(l(r))&&c.push(l(r));let p=[...h(o)],g=d();n.existsSync(g)&&p.push(g),n.existsSync(f())&&p.push(f());let _=/* @__PURE__ */ new Set,v=[];for(let[n,r]of[[`project`,c],[`global`,p]])for(let i of r){let r=s(i)?i:e.resolve(i);_.has(r)||t(r,a)&&(_.add(r),v.push({path:i,scope:n,remote:s(i)}))}return v}function k(e){return!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.name==`string`&&Array.isArray(e.commands)}function A(e){return(Array.isArray(e)?e:e&&typeof e==`object`&&Array.isArray(e.providers)?e.providers:[]).filter(k)}function j(t){try{if(n.statSync(t).isDirectory()){let r=[];for(let i of n.readdirSync(t))i.toLowerCase().endsWith(`.json`)&&r.push(...j(e.join(t,i)));return r}return A(JSON.parse(n.readFileSync(t,`utf-8`)))}catch{return[]}}function M(t,r){r.length===0?n.rmSync(t,{force:!0}):(n.mkdirSync(e.dirname(t),{recursive:!0}),n.writeFileSync(t,`${JSON.stringify(r,null,4)}\n`,`utf-8`))}function N(e=process.cwd()){let t=/* @__PURE__ */ new Set,n=[];for(let r of O(e))if(!(r.scope!==`project`||r.remote))for(let e of j(r.path))t.has(e.id)||(t.add(e.id),n.push(e));return n}function P(e,t){M(u(e),t)}function F(){let e=/* @__PURE__ */ new Set,t=[];for(let n of O())if(!(n.scope!==`global`||n.remote))for(let r of j(n.path))e.has(r.id)||(e.add(r.id),t.push(r));return t}function I(t){M(e.join(d(),a),t)}function L(e){let t=/* @__PURE__ */ new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));return n}function R(e=process.cwd(),t){let n=O(e,t),r=n.filter(e=>e.scope===`project`&&!e.remote),i=n.filter(e=>e.scope===`global`&&!e.remote);return L([...r.flatMap(e=>j(e.path)),...i.flatMap(e=>j(e.path))])}async function z(e){try{let t=await fetch(e,{headers:{accept:`application/json`}});return t.ok?A(await t.json()):[]}catch{return[]}}async function B(e=process.cwd(),t){let n=O(e,t),r=[];for(let e of n)e.remote?r.push(...await z(e.path)):r.push(...j(e.path));return L(r)}export{C as addGlobalProviderRegistry,x as addProjectProviderRegistry,d as defaultGlobalProvidersDir,f as globalProviderRegistryPath,l as legacyProviderRegistryPath,u as providerRegistryPath,O as providerRegistryPaths,B as readAllProviders,R as readAllProvidersSync,F as readGlobalProviders,N as readProviderRegistry,w as removeGlobalProviderRegistry,S as removeProjectProviderRegistry,T as setGlobalProviderRegistries,E as setProjectProviderRegistries,I as writeGlobalProviders,P as writeProviderRegistry};
|
|
@@ -11,15 +11,27 @@ export interface ResetSelectors {
|
|
|
11
11
|
/** Remove the `dbx.config.*` file(s). */
|
|
12
12
|
config?: boolean;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Undo the state a sync applied to user-owned files before the manifest that
|
|
16
|
+
* records it is removed (eg. `tsconfig.overrides`). Returns the repo-relative
|
|
17
|
+
* files it restored (or would restore on a dry run).
|
|
18
|
+
*/
|
|
19
|
+
export type ResetRestore = (cwd: string, options: {
|
|
20
|
+
dryRun: boolean;
|
|
21
|
+
}) => string[];
|
|
14
22
|
export interface ResetToolchainOptions extends ResetSelectors {
|
|
15
23
|
/** The project directory to reset. */
|
|
16
24
|
cwd: string;
|
|
17
25
|
/** Report what would be removed without deleting anything. */
|
|
18
26
|
dryRun?: boolean;
|
|
27
|
+
/** Run before the manifest is removed, while its recorded state still exists. */
|
|
28
|
+
restore?: ResetRestore;
|
|
19
29
|
}
|
|
20
30
|
export interface ResetToolchainResult {
|
|
21
31
|
/** Repo-relative paths removed (or that would be removed). */
|
|
22
32
|
removed: string[];
|
|
33
|
+
/** User-owned files restored before the manifest was removed. */
|
|
34
|
+
restored: string[];
|
|
23
35
|
/** Whether this was a dry run. */
|
|
24
36
|
dryRun: boolean;
|
|
25
37
|
}
|
|
@@ -34,12 +46,15 @@ export interface ResetProjectsOptions extends ResetSelectors, Omit<SelectProject
|
|
|
34
46
|
/** Apply to every discovered project under `root` (not just `root`). */
|
|
35
47
|
recursive?: boolean;
|
|
36
48
|
dryRun?: boolean;
|
|
49
|
+
/** Run per project before its manifest is removed (see {@link ResetRestore}). */
|
|
50
|
+
restore?: ResetRestore;
|
|
37
51
|
}
|
|
38
52
|
export interface ResetProjectsResult {
|
|
39
53
|
results: {
|
|
40
54
|
dir: string;
|
|
41
55
|
rel: string;
|
|
42
56
|
removed: string[];
|
|
57
|
+
restored: string[];
|
|
43
58
|
}[];
|
|
44
59
|
dryRun: boolean;
|
|
45
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{selectProjects as i}from"./select.js";import a from"node:fs";function o(e){return e.replace(/\\/g,`/`)}function s(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function c(i){let{cwd:c}=i,l=i.dryRun??!1,u=s(i),d=[],f=(e,t)=>{a.existsSync(e)&&(l||a.rmSync(e,{force:!0}),d.push(t))};if(u.generated)for(let
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{selectProjects as i}from"./select.js";import a from"node:fs";function o(e){return e.replace(/\\/g,`/`)}function s(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function c(i){let{cwd:c}=i,l=i.dryRun??!1,u=s(i),d=[],f=(e,t)=>{a.existsSync(e)&&(l||a.rmSync(e,{force:!0}),d.push(t))};if(u.generated){let t=r(c);for(let n of t.files)t.origins?.[n]!==`adopted`&&f(e.resolve(c,n),n)}if(u.config){let n=t(c);n&&f(n,o(e.relative(c,n)))}let p=[];if(u.manifest&&i.restore&&p.push(...i.restore(c,{dryRun:l})),u.manifest){let t=e.resolve(c,n);a.existsSync(t)&&(l||a.rmSync(t,{recursive:!0,force:!0}),d.push(`${n}/`))}return{removed:d,restored:p,dryRun:l}}function l(e){let n=e.dryRun??!1;return{results:(e.recursive?i({root:e.root,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}}):[{dir:e.root,rel:`.`,hasConfig:!!t(e.root)}]).map(t=>{let{removed:r,restored:i}=c({cwd:t.dir,...e.generated===void 0?{}:{generated:e.generated},...e.manifest===void 0?{}:{manifest:e.manifest},...e.config===void 0?{}:{config:e.config},...e.restore?{restore:e.restore}:{},dryRun:n});return{dir:t.dir,rel:t.rel,removed:r,restored:i}}),dryRun:n}}export{l as resetProjects,c as resetToolchain};
|
|
@@ -12,6 +12,8 @@ export interface RunSyncOptions {
|
|
|
12
12
|
cwd: string;
|
|
13
13
|
/** The loaded config. */
|
|
14
14
|
config: ToolchainConfig;
|
|
15
|
+
/** The project's own (unmerged) config, when known. */
|
|
16
|
+
ownConfig?: ToolchainConfig;
|
|
15
17
|
/** The resolved replacement tokens. */
|
|
16
18
|
tokens: Replacements;
|
|
17
19
|
/** The project kind (resolved from the config/cwd when omitted). */
|
|
@@ -23,6 +25,12 @@ export interface RunSyncOptions {
|
|
|
23
25
|
/** Custom logger (default `logger.info`). */
|
|
24
26
|
log?: (message: string) => void;
|
|
25
27
|
}
|
|
28
|
+
export interface RemovedFile {
|
|
29
|
+
/** Repo-relative path. */
|
|
30
|
+
path: string;
|
|
31
|
+
/** The content before removal, so an editor can offer "Restore". */
|
|
32
|
+
content: string;
|
|
33
|
+
}
|
|
26
34
|
export interface SyncResult {
|
|
27
35
|
/** Paths written (empty in check mode). */
|
|
28
36
|
written: string[];
|
|
@@ -30,6 +38,8 @@ export interface SyncResult {
|
|
|
30
38
|
changed: string[];
|
|
31
39
|
/** Previously-managed paths removed because they are no longer generated. */
|
|
32
40
|
removed: string[];
|
|
41
|
+
/** The removed files' previous content (for a Restore action). */
|
|
42
|
+
removedFiles: RemovedFile[];
|
|
33
43
|
/** Whether disk already matched the generated output. */
|
|
34
44
|
upToDate: boolean;
|
|
35
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../shared/src/logger.js";import"../../shared/src/index.js";import{ensureDbxGitignore as n}from"./gitignore.js";import{resolveProjectType as r}from"./project-type.js";import{readManifest as i,writeManifest as a}from"./manifest.js";import o from"node:fs";function s(e){return e.replace(/\\/g,`/`)}async function c(c){let{tasks:l,cwd:u,config:d,tokens:
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../shared/src/logger.js";import"../../shared/src/index.js";import{ensureDbxGitignore as n}from"./gitignore.js";import{resolveProjectType as r}from"./project-type.js";import{readManifest as i,writeManifest as a}from"./manifest.js";import o from"node:fs";function s(e){return e.replace(/\\/g,`/`)}async function c(c){let{tasks:l,cwd:u,config:d,ownConfig:f,tokens:p}=c,m=c.quiet?()=>{}:c.log??(e=>t.info(e)),h=c.quiet?()=>{}:(e,n)=>t.warn(e,n),g=c.projectType??r(u,d),_=i(u),v={cwd:u,projectType:g,config:d,ownConfig:f??d,tokens:p,log:m,warn:h,check:c.check===!0,managedFiles:_.files,manifest:{..._.extras,..._.tsconfigOverrides?{tsconfigOverrides:_.tsconfigOverrides}:{},..._.snapshots?{snapshots:_.snapshots}:{}}},y=d.hooks??{};await y.beforeSync?.(v);let b=l.filter(e=>(!e.projectTypes||e.projectTypes.includes(g))&&(!e.enabled||e.enabled(d)));m(`running ${b.length} task(s)${c.check?` (check)`:``} [${g}]`);let x=[];for(let e of b){m(` - ${e.name}`),await y.beforeTask?.({task:e,ctx:v});let t=await e.run(v),n=Array.isArray(t)?t:void 0;n&&x.push(...n),await y.afterTask?.({task:e,ctx:v,...n?{files:n}:{}})}let S=new Map(x.map(e=>[s(e.path),e.content])),C=new Set(x.filter(e=>e.track===!1).map(e=>s(e.path))),w=/* @__PURE__ */ new Set;for(let e of b){let t=typeof e.keep==`function`?e.keep(d):e.keep??[];for(let e of t)w.add(e)}let T=e=>{for(let t of w)if(e===t||e.endsWith(`/${t}`)||e.endsWith(t))return!0;return!1},E=[];for(let[t,n]of S){let r=e.resolve(u,t);(o.existsSync(r)?o.readFileSync(r,`utf-8`):void 0)!==n&&E.push(t)}let D=new Map([...S.keys()].map(t=>[t,o.existsSync(e.resolve(u,t))])),O=e=>_.origins?.[e]??(_.files.includes(e)?`created`:D.get(e)?`adopted`:`created`),k=_.files.filter(t=>!S.has(t)&&!C.has(t)&&!T(t)&&o.existsSync(e.resolve(u,t))&&O(t)===`created`),A=k.map(t=>({path:t,content:o.readFileSync(e.resolve(u,t),`utf-8`)})),j=E.length===0&&k.length===0;if(c.check){if(j)m(`generated files are in sync.`);else{m(`generated files are out of date:`);for(let e of E)m(` M ${e}`);for(let e of k)m(` D ${e}`);m("Run `dbx sync` to regenerate them.")}let e={written:[],changed:E,removed:k,removedFiles:A,upToDate:j};return await y.afterSync?.({cwd:u,config:d,result:e}),e}let M=[];for(let[t,n]of S){let r=e.resolve(u,t);o.mkdirSync(e.dirname(r),{recursive:!0}),o.writeFileSync(r,n,`utf-8`),M.push(t)}for(let t of k)o.rmSync(e.resolve(u,t),{force:!0});let N=[...S.keys()].filter(e=>!C.has(e)),P={};for(let e of N)P[e]=O(e);a(u,N,void 0,P,v.manifest),n(u)&&m(` I .gitignore (added the .dbx ignore block)`),m(`wrote ${M.length}, removed ${k.length} file(s)${E.length?`, updated ${E.length}`:``}.`);let F={written:M,changed:E,removed:k,removedFiles:A,upToDate:j};return await y.afterSync?.({cwd:u,config:d,result:F}),F}export{c as runSync};
|