@zaowu-labs/config 1.0.1

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/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @zaowu-labs/config
2
+
3
+ Configuration lifecycle package for ZaoWu.
4
+
5
+ This package resolves `zw.yml`, validates supported config keys, previews safe
6
+ config writes, and owns config migration behavior.
7
+
8
+ Safety:
9
+
10
+ - Config writes preview by default.
11
+ - Secret-like keys such as tokens, passwords, and API keys are rejected.
12
+ - Future migrations should preserve a preview path before writing files.
@@ -0,0 +1,91 @@
1
+ import { type DomainDefinition } from '@zaowu-labs/core';
2
+ export declare const CONFIG_FILE_NAMES: readonly ["zw.yml", "zw.yaml", "zaowu.config.json", ".zaowurc"];
3
+ export interface FindConfigFileOptions {
4
+ cwd?: string;
5
+ names?: readonly string[];
6
+ }
7
+ export interface LoadedConfig {
8
+ filePath: string;
9
+ content: string;
10
+ }
11
+ export interface ZaoWuConfig {
12
+ version: 1;
13
+ project: {
14
+ name: string;
15
+ };
16
+ ai: {
17
+ provider: string | null;
18
+ };
19
+ defaults: {
20
+ output: 'human' | 'json';
21
+ };
22
+ paths: {
23
+ workspace: string;
24
+ cache: string;
25
+ };
26
+ }
27
+ export interface ResolvedConfig {
28
+ schemaVersion: 1;
29
+ filePath: string;
30
+ config: ZaoWuConfig;
31
+ }
32
+ export type ConfigKey = 'version' | 'project.name' | 'ai.provider' | 'defaults.output' | 'paths.workspace' | 'paths.cache';
33
+ export interface ConfigValidationResult {
34
+ schemaVersion: 1;
35
+ status: 'ok' | 'warning';
36
+ filePath: string;
37
+ config: ZaoWuConfig;
38
+ warnings: string[];
39
+ }
40
+ export interface ConfigGetResult {
41
+ schemaVersion: 1;
42
+ status: 'ok';
43
+ filePath: string;
44
+ key: ConfigKey;
45
+ value: string | null;
46
+ }
47
+ export interface ConfigSetResult {
48
+ schemaVersion: 1;
49
+ status: 'ok' | 'preview';
50
+ filePath: string;
51
+ key: ConfigKey;
52
+ oldValue: string | null;
53
+ newValue: string | null;
54
+ content: string;
55
+ wroteFile: boolean;
56
+ }
57
+ export interface ConfigMigrationResult {
58
+ schemaVersion: 1;
59
+ status: 'ok' | 'preview';
60
+ filePath: string;
61
+ fromVersion: number | null;
62
+ toVersion: 1;
63
+ changed: boolean;
64
+ content: string;
65
+ wroteFile: boolean;
66
+ }
67
+ export declare const CONFIG_DOMAIN: DomainDefinition;
68
+ export declare const createDefaultConfig: () => ZaoWuConfig;
69
+ export declare const getGlobalConfigPath: () => string;
70
+ export declare const loadGlobalConfig: () => Promise<ZaoWuConfig | null>;
71
+ export declare const mergeConfigs: (global: ZaoWuConfig, project: ZaoWuConfig) => ZaoWuConfig;
72
+ export declare const modifyYamlContent: (content: string, key: ConfigKey, value: string | null) => string;
73
+ export declare const findConfigFile: (options?: FindConfigFileOptions) => Promise<string | null>;
74
+ export declare const loadConfig: (filePath: string) => Promise<LoadedConfig>;
75
+ export declare const serializeConfig: (config: ZaoWuConfig, filePath: string) => string;
76
+ export declare const getDefaultConfigContent: (filePath?: string) => string;
77
+ export declare const parseConfig: (content: string, filePath?: string) => ZaoWuConfig;
78
+ export declare const findConfigPathOrThrow: (cwd?: string) => Promise<string>;
79
+ export declare const loadResolvedConfig: (cwd?: string) => Promise<ResolvedConfig>;
80
+ export declare const validateResolvedConfig: (cwd?: string) => Promise<ConfigValidationResult>;
81
+ export declare const getResolvedConfigValue: (key: string, cwd?: string) => Promise<ConfigGetResult>;
82
+ export declare const setResolvedConfigValue: (key: string, value: string, options?: {
83
+ cwd?: string;
84
+ yes?: boolean;
85
+ global?: boolean;
86
+ }) => Promise<ConfigSetResult>;
87
+ export declare const migrateResolvedConfig: (options?: {
88
+ cwd?: string;
89
+ yes?: boolean;
90
+ }) => Promise<ConfigMigrationResult>;
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,589 @@
1
+ import { constants } from 'node:fs';
2
+ import { access, mkdir, readFile, stat, writeFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import YAML from 'yaml';
6
+ import { createCapabilityLedger, stripUtf8Bom, ZaoWuError, } from '@zaowu-labs/core';
7
+ export const CONFIG_FILE_NAMES = ['zw.yml', 'zw.yaml', 'zaowu.config.json', '.zaowurc'];
8
+ export const CONFIG_DOMAIN = {
9
+ name: 'config',
10
+ summary: 'Inspect and manage ZaoWu configuration',
11
+ capabilities: createCapabilityLedger({
12
+ readsFiles: true,
13
+ writesFiles: true,
14
+ }),
15
+ commands: [
16
+ {
17
+ name: 'show',
18
+ summary: 'Show resolved ZaoWu configuration',
19
+ status: 'available',
20
+ },
21
+ {
22
+ name: 'path',
23
+ summary: 'Print the resolved configuration file path',
24
+ status: 'available',
25
+ },
26
+ {
27
+ name: 'validate',
28
+ summary: 'Validate the resolved configuration file',
29
+ status: 'available',
30
+ },
31
+ {
32
+ name: 'get',
33
+ summary: 'Read one supported configuration key',
34
+ status: 'available',
35
+ },
36
+ {
37
+ name: 'set',
38
+ summary: 'Preview or write one supported configuration key',
39
+ status: 'available',
40
+ sensitive: true,
41
+ },
42
+ {
43
+ name: 'migrate',
44
+ summary: 'Preview or apply safe config migrations',
45
+ status: 'available',
46
+ sensitive: true,
47
+ },
48
+ ],
49
+ };
50
+ const SECRET_KEY_PATTERN = /(?:secret|token|password|api[_-]?key|private[_-]?key|recovery)/i;
51
+ const SECRET_VALUE_PATTERN = /(?:sk-[a-zA-Z0-9]{12,}|ghp_[a-zA-Z0-9]{12,})/i;
52
+ const assertNoSecretValues = (value) => {
53
+ if (SECRET_VALUE_PATTERN.test(value)) {
54
+ throw new ZaoWuError({
55
+ code: 'CONFIG_SECRET_KEY_NOT_ALLOWED',
56
+ message: 'Config value looks like a secret.',
57
+ why: 'You attempted to write a sensitive API token or key directly to configuration. This poses a severe security risk.',
58
+ fix: 'Set this key as an environment variable in your terminal instead (e.g. export OPENAI_API_KEY="your-token").',
59
+ });
60
+ }
61
+ };
62
+ const CONFIG_KEYS = [
63
+ 'version',
64
+ 'project.name',
65
+ 'ai.provider',
66
+ 'defaults.output',
67
+ 'paths.workspace',
68
+ 'paths.cache',
69
+ ];
70
+ const DEFAULT_CONFIG = {
71
+ version: 1,
72
+ project: {
73
+ name: 'zaowu-project',
74
+ },
75
+ ai: {
76
+ provider: 'echo',
77
+ },
78
+ defaults: {
79
+ output: 'human',
80
+ },
81
+ paths: {
82
+ workspace: '.',
83
+ cache: '.zaowu/cache',
84
+ },
85
+ };
86
+ export const createDefaultConfig = () => ({
87
+ version: DEFAULT_CONFIG.version,
88
+ project: {
89
+ ...DEFAULT_CONFIG.project,
90
+ },
91
+ ai: {
92
+ ...DEFAULT_CONFIG.ai,
93
+ },
94
+ defaults: {
95
+ ...DEFAULT_CONFIG.defaults,
96
+ },
97
+ paths: {
98
+ ...DEFAULT_CONFIG.paths,
99
+ },
100
+ });
101
+ const isReadableFile = async (filePath) => {
102
+ try {
103
+ await access(filePath, constants.R_OK);
104
+ return (await stat(filePath)).isFile();
105
+ }
106
+ catch {
107
+ return false;
108
+ }
109
+ };
110
+ export const getGlobalConfigPath = () => {
111
+ const home = os.homedir();
112
+ if (process.platform === 'win32') {
113
+ return path.join(process.env.APPDATA || path.join(home, 'AppData', 'Roaming'), 'zaowu', 'config.yml');
114
+ }
115
+ return path.join(home, '.config', 'zaowu', 'config.yml');
116
+ };
117
+ export const loadGlobalConfig = async () => {
118
+ const globalPath = getGlobalConfigPath();
119
+ if (await isReadableFile(globalPath)) {
120
+ try {
121
+ const content = await readFile(globalPath, 'utf8');
122
+ return parseConfig(content, globalPath);
123
+ }
124
+ catch {
125
+ // Global config is optional — silently ignore parse errors and fall back to defaults.
126
+ return null;
127
+ }
128
+ }
129
+ return null;
130
+ };
131
+ export const mergeConfigs = (global, project) => {
132
+ return {
133
+ version: project.version,
134
+ project: {
135
+ name: project.project.name || global.project.name,
136
+ },
137
+ ai: {
138
+ provider: project.ai.provider !== null ? project.ai.provider : global.ai.provider,
139
+ },
140
+ defaults: {
141
+ output: project.defaults.output || global.defaults.output,
142
+ },
143
+ paths: {
144
+ workspace: project.paths.workspace || global.paths.workspace,
145
+ cache: project.paths.cache || global.paths.cache,
146
+ },
147
+ };
148
+ };
149
+ const formatYamlConfigValue = (key, value) => {
150
+ if (key === 'version') {
151
+ return '1';
152
+ }
153
+ return value === null ? 'null' : JSON.stringify(value);
154
+ };
155
+ export const modifyYamlContent = (content, key, value) => {
156
+ const lines = content.split(/\r?\n/);
157
+ const parts = key.split('.');
158
+ if (parts.length === 1) {
159
+ const searchKey = parts[0];
160
+ const index = lines.findIndex((l) => new RegExp(`^${searchKey}:\\s*`).test(l.trim()));
161
+ const formattedValue = formatYamlConfigValue(key, value);
162
+ if (index !== -1) {
163
+ lines[index] = `${searchKey}: ${formattedValue}`;
164
+ return lines.join('\n');
165
+ }
166
+ }
167
+ else if (parts.length === 2) {
168
+ const section = parts[0];
169
+ const subKey = parts[1];
170
+ let inSection = false;
171
+ for (let i = 0; i < lines.length; i++) {
172
+ const line = lines[i];
173
+ const trimmed = line.trim();
174
+ const indent = line.length - line.trimStart().length;
175
+ if (indent === 0 && trimmed.startsWith(`${section}:`)) {
176
+ inSection = true;
177
+ continue;
178
+ }
179
+ if (inSection && indent === 0 && trimmed && !trimmed.startsWith('#')) {
180
+ break;
181
+ }
182
+ if (inSection && indent > 0 && trimmed.startsWith(`${subKey}:`)) {
183
+ const formattedValue = formatYamlConfigValue(key, value);
184
+ const leadingIndent = ' '.repeat(indent);
185
+ lines[i] = `${leadingIndent}${subKey}: ${formattedValue}`;
186
+ return lines.join('\n');
187
+ }
188
+ }
189
+ }
190
+ return '';
191
+ };
192
+ export const findConfigFile = async (options = {}) => {
193
+ const names = options.names ?? CONFIG_FILE_NAMES;
194
+ let currentDirectory = path.resolve(options.cwd ?? process.cwd());
195
+ while (true) {
196
+ for (const name of names) {
197
+ const candidate = path.join(currentDirectory, name);
198
+ if (await isReadableFile(candidate)) {
199
+ return candidate;
200
+ }
201
+ }
202
+ const parentDirectory = path.dirname(currentDirectory);
203
+ if (parentDirectory === currentDirectory) {
204
+ return null;
205
+ }
206
+ currentDirectory = parentDirectory;
207
+ }
208
+ };
209
+ export const loadConfig = async (filePath) => {
210
+ const resolvedPath = path.resolve(filePath);
211
+ const content = await readFile(resolvedPath, 'utf8');
212
+ return {
213
+ filePath: resolvedPath,
214
+ content,
215
+ };
216
+ };
217
+ const parseConfigObject = (content, filePath) => {
218
+ const normalizedContent = stripUtf8Bom(content);
219
+ const extension = path.extname(filePath).toLowerCase();
220
+ if (extension === '.json' || path.basename(filePath) === '.zaowurc') {
221
+ try {
222
+ return JSON.parse(normalizedContent);
223
+ }
224
+ catch (error) {
225
+ throw new ZaoWuError({
226
+ code: 'CONFIG_PARSE_FAILED',
227
+ message: 'Could not parse ZaoWu config.',
228
+ why: error instanceof Error ? error.message : 'The JSON parser rejected the file.',
229
+ fix: 'Fix the JSON syntax and run `zw config show` again.',
230
+ });
231
+ }
232
+ }
233
+ if (['.yml', '.yaml', ''].includes(extension)) {
234
+ try {
235
+ const parsed = YAML.parse(normalizedContent);
236
+ if (parsed === null || parsed === undefined) {
237
+ return {};
238
+ }
239
+ if (typeof parsed !== 'object' || Array.isArray(parsed)) {
240
+ throw new Error('Config must be a YAML object.');
241
+ }
242
+ return parsed;
243
+ }
244
+ catch (error) {
245
+ throw new ZaoWuError({
246
+ code: 'CONFIG_PARSE_FAILED',
247
+ message: 'Could not parse ZaoWu config.',
248
+ why: error instanceof Error ? error.message : 'The YAML parser rejected the file.',
249
+ fix: 'Use the supported simple subset (top-level keys + one level of 2-space indented sections) or switch to JSON (zaowu.config.json).',
250
+ });
251
+ }
252
+ }
253
+ throw new ZaoWuError({
254
+ code: 'CONFIG_FORMAT_UNSUPPORTED',
255
+ message: 'Config format is not supported yet.',
256
+ why: `ZaoWu can find ${path.basename(filePath)}, but this first version reads YAML and JSON only.`,
257
+ fix: 'Use `zw.yml`, `zw.yaml`, `zaowu.config.json`, or `.zaowurc` for now.',
258
+ });
259
+ };
260
+ const assertNoSecretKeys = (value, pathParts = []) => {
261
+ if (!value || typeof value !== 'object') {
262
+ return;
263
+ }
264
+ for (const [key, child] of Object.entries(value)) {
265
+ if (SECRET_KEY_PATTERN.test(key)) {
266
+ throw new ZaoWuError({
267
+ code: 'CONFIG_SECRET_KEY_NOT_ALLOWED',
268
+ message: 'Config contains a secret-like key.',
269
+ why: `The key \`${[...pathParts, key].join('.')}\` looks like a secret and should not be stored in ZaoWu config.`,
270
+ fix: 'Move secrets to environment variables or a future explicit secret provider.',
271
+ });
272
+ }
273
+ assertNoSecretKeys(child, [...pathParts, key]);
274
+ }
275
+ };
276
+ const getObject = (value) => value && typeof value === 'object' && !Array.isArray(value)
277
+ ? value
278
+ : {};
279
+ const getString = (value, fallback) => typeof value === 'string' && value.trim() ? value.trim() : fallback;
280
+ const getOutput = (value) => (value === 'json' ? 'json' : 'human');
281
+ const getVersion = (value) => {
282
+ if (value === undefined || value === null || value === '' || value === 1 || value === '1') {
283
+ return 1;
284
+ }
285
+ throw new ZaoWuError({
286
+ code: 'CONFIG_VERSION_UNSUPPORTED',
287
+ message: 'Config version is not supported.',
288
+ why: `ZaoWu supports config version 1, but this file declares \`${String(value)}\`.`,
289
+ fix: 'Run a newer ZaoWu version that supports this config, or migrate the file manually.',
290
+ });
291
+ };
292
+ const assertConfigKey = (key) => {
293
+ if (SECRET_KEY_PATTERN.test(key)) {
294
+ throw new ZaoWuError({
295
+ code: 'CONFIG_SECRET_KEY_NOT_ALLOWED',
296
+ message: 'Config key looks like a secret.',
297
+ why: `The key \`${key}\` looks like a secret and should not be stored in ZaoWu config.`,
298
+ fix: 'Use environment variables or a future explicit secret provider for sensitive values.',
299
+ });
300
+ }
301
+ if (!CONFIG_KEYS.includes(key)) {
302
+ throw new ZaoWuError({
303
+ code: 'CONFIG_KEY_UNSUPPORTED',
304
+ message: 'Config key is not supported.',
305
+ why: `This version can manage these keys: ${CONFIG_KEYS.join(', ')}.`,
306
+ fix: 'Use one of the supported keys, or extend `packages/config` before adding a new key.',
307
+ });
308
+ }
309
+ return key;
310
+ };
311
+ const normalizeConfigValue = (key, value) => {
312
+ const trimmed = value.trim();
313
+ if (key === 'ai.provider' && ['none', 'null'].includes(trimmed.toLowerCase())) {
314
+ return null;
315
+ }
316
+ if (key === 'defaults.output' && !['human', 'json'].includes(trimmed)) {
317
+ throw new ZaoWuError({
318
+ code: 'CONFIG_VALUE_INVALID',
319
+ message: 'Config value is invalid.',
320
+ why: '`defaults.output` must be either `human` or `json`.',
321
+ fix: 'Run `zw config set defaults.output json --yes` or `zw config set defaults.output human --yes`.',
322
+ });
323
+ }
324
+ if (key === 'version' && trimmed !== '1') {
325
+ throw new ZaoWuError({
326
+ code: 'CONFIG_VALUE_INVALID',
327
+ message: 'Config value is invalid.',
328
+ why: '`version` must be `1` in this ZaoWu release.',
329
+ fix: 'Run `zw config migrate` to preview the supported config version.',
330
+ });
331
+ }
332
+ if (!trimmed) {
333
+ throw new ZaoWuError({
334
+ code: 'CONFIG_VALUE_INVALID',
335
+ message: 'Config value is invalid.',
336
+ why: `\`${key}\` cannot be empty.`,
337
+ fix: 'Provide a non-empty value.',
338
+ });
339
+ }
340
+ if (['paths.workspace', 'paths.cache'].includes(key)) {
341
+ return trimmed.replace(/\\/g, '/');
342
+ }
343
+ return trimmed;
344
+ };
345
+ const getConfigValue = (config, key) => {
346
+ switch (key) {
347
+ case 'version':
348
+ return String(config.version);
349
+ case 'project.name':
350
+ return config.project.name;
351
+ case 'ai.provider':
352
+ return config.ai.provider;
353
+ case 'defaults.output':
354
+ return config.defaults.output;
355
+ case 'paths.workspace':
356
+ return config.paths.workspace;
357
+ case 'paths.cache':
358
+ return config.paths.cache;
359
+ }
360
+ };
361
+ const withConfigValue = (config, key, value) => {
362
+ const next = {
363
+ version: config.version,
364
+ project: { ...config.project },
365
+ ai: { ...config.ai },
366
+ defaults: { ...config.defaults },
367
+ paths: { ...config.paths },
368
+ };
369
+ switch (key) {
370
+ case 'version':
371
+ next.version = 1;
372
+ break;
373
+ case 'project.name':
374
+ next.project.name = value ?? DEFAULT_CONFIG.project.name;
375
+ break;
376
+ case 'ai.provider':
377
+ next.ai.provider = value;
378
+ break;
379
+ case 'defaults.output':
380
+ next.defaults.output = value === 'json' ? 'json' : 'human';
381
+ break;
382
+ case 'paths.workspace':
383
+ next.paths.workspace = value ?? DEFAULT_CONFIG.paths.workspace;
384
+ break;
385
+ case 'paths.cache':
386
+ next.paths.cache = value ?? DEFAULT_CONFIG.paths.cache;
387
+ break;
388
+ }
389
+ return next;
390
+ };
391
+ export const serializeConfig = (config, filePath) => {
392
+ const extension = path.extname(filePath).toLowerCase();
393
+ if (extension === '.json' || path.basename(filePath) === '.zaowurc') {
394
+ return `${JSON.stringify(config, null, 2)}\n`;
395
+ }
396
+ return [
397
+ 'version: 1',
398
+ '',
399
+ 'project:',
400
+ ` name: ${formatYamlConfigValue('project.name', config.project.name)}`,
401
+ '',
402
+ 'ai:',
403
+ ` provider: ${formatYamlConfigValue('ai.provider', config.ai.provider)}`,
404
+ '',
405
+ 'defaults:',
406
+ ` output: ${formatYamlConfigValue('defaults.output', config.defaults.output)}`,
407
+ '',
408
+ 'paths:',
409
+ ` workspace: ${formatYamlConfigValue('paths.workspace', config.paths.workspace)}`,
410
+ ` cache: ${formatYamlConfigValue('paths.cache', config.paths.cache)}`,
411
+ '',
412
+ ].join('\n');
413
+ };
414
+ export const getDefaultConfigContent = (filePath = 'zw.yml') => serializeConfig(createDefaultConfig(), filePath);
415
+ const getValidationWarnings = (config) => {
416
+ const warnings = [];
417
+ if (!config.ai.provider) {
418
+ warnings.push('AI provider is not set; ZaoWu will use the local echo provider by default.');
419
+ }
420
+ if (!config.paths.workspace.trim()) {
421
+ warnings.push('Workspace path is empty.');
422
+ }
423
+ if (!config.paths.cache.trim()) {
424
+ warnings.push('Cache path is empty.');
425
+ }
426
+ return warnings;
427
+ };
428
+ export const parseConfig = (content, filePath = 'zw.yml') => {
429
+ const parsed = parseConfigObject(content, filePath);
430
+ assertNoSecretKeys(parsed);
431
+ const project = getObject(parsed.project);
432
+ const ai = getObject(parsed.ai);
433
+ const defaults = getObject(parsed.defaults);
434
+ const paths = getObject(parsed.paths);
435
+ const provider = ai.provider;
436
+ return {
437
+ version: getVersion(parsed.version),
438
+ project: {
439
+ name: getString(project.name, DEFAULT_CONFIG.project.name),
440
+ },
441
+ ai: {
442
+ provider: typeof provider === 'string' && provider.trim() ? provider.trim() : null,
443
+ },
444
+ defaults: {
445
+ output: getOutput(defaults.output),
446
+ },
447
+ paths: {
448
+ workspace: getString(paths.workspace, DEFAULT_CONFIG.paths.workspace),
449
+ cache: getString(paths.cache, DEFAULT_CONFIG.paths.cache),
450
+ },
451
+ };
452
+ };
453
+ export const findConfigPathOrThrow = async (cwd) => {
454
+ const filePath = await findConfigFile({ cwd });
455
+ if (!filePath) {
456
+ throw new ZaoWuError({
457
+ code: 'CONFIG_NOT_FOUND',
458
+ message: 'ZaoWu config not found.',
459
+ why: 'ZaoWu could not find `zw.yml` or another supported config file in this folder or its parents.',
460
+ fix: 'Run `zw init` to preview config creation, then `zw init --yes` to create it.',
461
+ });
462
+ }
463
+ return filePath;
464
+ };
465
+ export const loadResolvedConfig = async (cwd) => {
466
+ const filePath = await findConfigPathOrThrow(cwd);
467
+ const loaded = await loadConfig(filePath);
468
+ const projectConfig = parseConfig(loaded.content, loaded.filePath);
469
+ const globalConfig = await loadGlobalConfig();
470
+ const mergedConfig = globalConfig ? mergeConfigs(globalConfig, projectConfig) : projectConfig;
471
+ return {
472
+ schemaVersion: 1,
473
+ filePath,
474
+ config: mergedConfig,
475
+ };
476
+ };
477
+ const getRawConfigVersion = (content, filePath) => {
478
+ const parsed = parseConfigObject(content, filePath);
479
+ const rawVersion = parsed.version;
480
+ if (rawVersion === undefined || rawVersion === null || rawVersion === '') {
481
+ return null;
482
+ }
483
+ if (rawVersion === 1 || rawVersion === '1') {
484
+ return 1;
485
+ }
486
+ throw new ZaoWuError({
487
+ code: 'CONFIG_VERSION_UNSUPPORTED',
488
+ message: 'Config version is not supported.',
489
+ why: `ZaoWu supports config version 1, but this file declares \`${String(rawVersion)}\`.`,
490
+ fix: 'Run a newer ZaoWu version that supports this config, or migrate the file manually.',
491
+ });
492
+ };
493
+ export const validateResolvedConfig = async (cwd) => {
494
+ const resolved = await loadResolvedConfig(cwd);
495
+ const warnings = getValidationWarnings(resolved.config);
496
+ return {
497
+ schemaVersion: 1,
498
+ status: warnings.length > 0 ? 'warning' : 'ok',
499
+ filePath: resolved.filePath,
500
+ config: resolved.config,
501
+ warnings,
502
+ };
503
+ };
504
+ export const getResolvedConfigValue = async (key, cwd) => {
505
+ const configKey = assertConfigKey(key);
506
+ const resolved = await loadResolvedConfig(cwd);
507
+ return {
508
+ schemaVersion: 1,
509
+ status: 'ok',
510
+ filePath: resolved.filePath,
511
+ key: configKey,
512
+ value: getConfigValue(resolved.config, configKey),
513
+ };
514
+ };
515
+ export const setResolvedConfigValue = async (key, value, options = {}) => {
516
+ const configKey = assertConfigKey(key);
517
+ const normalizedValue = normalizeConfigValue(configKey, value);
518
+ assertNoSecretValues(normalizedValue ?? '');
519
+ const filePath = options.global
520
+ ? getGlobalConfigPath()
521
+ : await findConfigPathOrThrow(options.cwd);
522
+ let loadedContent = '';
523
+ let currentConfig = createDefaultConfig();
524
+ if (await isReadableFile(filePath)) {
525
+ const loaded = await loadConfig(filePath);
526
+ loadedContent = loaded.content;
527
+ currentConfig = parseConfig(loadedContent, filePath);
528
+ }
529
+ const nextConfig = withConfigValue(currentConfig, configKey, normalizedValue);
530
+ let content = '';
531
+ const extension = path.extname(filePath).toLowerCase();
532
+ if (loadedContent && ['.yml', '.yaml', ''].includes(extension)) {
533
+ const modified = modifyYamlContent(loadedContent, configKey, normalizedValue);
534
+ if (modified) {
535
+ content = modified;
536
+ }
537
+ }
538
+ if (!content) {
539
+ content = serializeConfig(nextConfig, filePath);
540
+ }
541
+ if (options.yes) {
542
+ await mkdir(path.dirname(filePath), { recursive: true });
543
+ await writeFile(filePath, content, 'utf8');
544
+ }
545
+ return {
546
+ schemaVersion: 1,
547
+ status: options.yes ? 'ok' : 'preview',
548
+ filePath,
549
+ key: configKey,
550
+ oldValue: getConfigValue(currentConfig, configKey),
551
+ newValue: getConfigValue(nextConfig, configKey),
552
+ content,
553
+ wroteFile: Boolean(options.yes),
554
+ };
555
+ };
556
+ export const migrateResolvedConfig = async (options = {}) => {
557
+ const filePath = await findConfigPathOrThrow(options.cwd);
558
+ const loaded = await loadConfig(filePath);
559
+ const fromVersion = getRawConfigVersion(loaded.content, loaded.filePath);
560
+ const config = parseConfig(loaded.content, loaded.filePath);
561
+ const content = serializeConfig(config, filePath);
562
+ const changed = fromVersion !== 1 || stripUtf8Bom(loaded.content) !== content;
563
+ if (!changed) {
564
+ return {
565
+ schemaVersion: 1,
566
+ status: 'ok',
567
+ filePath,
568
+ fromVersion,
569
+ toVersion: 1,
570
+ changed: false,
571
+ content,
572
+ wroteFile: false,
573
+ };
574
+ }
575
+ if (options.yes) {
576
+ await writeFile(filePath, content, 'utf8');
577
+ }
578
+ return {
579
+ schemaVersion: 1,
580
+ status: options.yes ? 'ok' : 'preview',
581
+ filePath,
582
+ fromVersion,
583
+ toVersion: 1,
584
+ changed,
585
+ content,
586
+ wroteFile: Boolean(options.yes),
587
+ };
588
+ };
589
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@zaowu-labs/config",
3
+ "version": "1.0.1",
4
+ "description": "ZaoWu configuration management",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "build": "tsc -b --pretty false",
24
+ "typecheck": "tsc -b --pretty false",
25
+ "dev": "tsc -b --watch"
26
+ },
27
+ "dependencies": {
28
+ "@zaowu-labs/core": "workspace:*",
29
+ "yaml": "^2.9.0"
30
+ },
31
+ "keywords": [
32
+ "zaowu",
33
+ "config"
34
+ ],
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/zaowu-labs/zaowu.git",
38
+ "directory": "packages/config"
39
+ },
40
+ "homepage": "https://github.com/zaowu-labs/zaowu",
41
+ "bugs": "https://github.com/zaowu-labs/zaowu/issues"
42
+ }