@vltpkg/cli-sdk 0.0.0-8 → 1.0.0-rc.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.
Files changed (164) hide show
  1. package/dist/esm/commands/build.d.ts +25 -0
  2. package/dist/esm/commands/build.d.ts.map +1 -0
  3. package/dist/esm/commands/build.js +102 -0
  4. package/dist/esm/commands/build.js.map +1 -0
  5. package/dist/esm/commands/cache.d.ts +65 -0
  6. package/dist/esm/commands/cache.d.ts.map +1 -0
  7. package/dist/esm/commands/cache.js +257 -0
  8. package/dist/esm/commands/cache.js.map +1 -0
  9. package/dist/esm/commands/ci.d.ts +11 -0
  10. package/dist/esm/commands/ci.d.ts.map +1 -0
  11. package/dist/esm/commands/ci.js +32 -0
  12. package/dist/esm/commands/ci.js.map +1 -0
  13. package/dist/esm/commands/config.d.ts +3 -2
  14. package/dist/esm/commands/config.d.ts.map +1 -1
  15. package/dist/esm/commands/config.js +372 -101
  16. package/dist/esm/commands/config.js.map +1 -1
  17. package/dist/esm/commands/docs.d.ts +18 -0
  18. package/dist/esm/commands/docs.d.ts.map +1 -0
  19. package/dist/esm/commands/docs.js +154 -0
  20. package/dist/esm/commands/docs.js.map +1 -0
  21. package/dist/esm/commands/exec-cache.d.ts +49 -0
  22. package/dist/esm/commands/exec-cache.d.ts.map +1 -0
  23. package/dist/esm/commands/exec-cache.js +146 -0
  24. package/dist/esm/commands/exec-cache.js.map +1 -0
  25. package/dist/esm/commands/exec-local.d.ts +6 -0
  26. package/dist/esm/commands/exec-local.d.ts.map +1 -0
  27. package/dist/esm/commands/exec-local.js +24 -0
  28. package/dist/esm/commands/exec-local.js.map +1 -0
  29. package/dist/esm/commands/exec.d.ts +4 -0
  30. package/dist/esm/commands/exec.d.ts.map +1 -1
  31. package/dist/esm/commands/exec.js +75 -10
  32. package/dist/esm/commands/exec.js.map +1 -1
  33. package/dist/esm/commands/help.d.ts +1 -1
  34. package/dist/esm/commands/help.d.ts.map +1 -1
  35. package/dist/esm/commands/help.js +32 -3
  36. package/dist/esm/commands/help.js.map +1 -1
  37. package/dist/esm/commands/init.d.ts +4 -5
  38. package/dist/esm/commands/init.d.ts.map +1 -1
  39. package/dist/esm/commands/init.js +95 -9
  40. package/dist/esm/commands/init.js.map +1 -1
  41. package/dist/esm/commands/install/reporter.d.ts +3 -2
  42. package/dist/esm/commands/install/reporter.d.ts.map +1 -1
  43. package/dist/esm/commands/install/reporter.js +43 -15
  44. package/dist/esm/commands/install/reporter.js.map +1 -1
  45. package/dist/esm/commands/install.d.ts +24 -3
  46. package/dist/esm/commands/install.d.ts.map +1 -1
  47. package/dist/esm/commands/install.js +27 -3
  48. package/dist/esm/commands/install.js.map +1 -1
  49. package/dist/esm/commands/list.d.ts +2 -2
  50. package/dist/esm/commands/list.d.ts.map +1 -1
  51. package/dist/esm/commands/list.js +149 -49
  52. package/dist/esm/commands/list.js.map +1 -1
  53. package/dist/esm/commands/pack.d.ts +32 -0
  54. package/dist/esm/commands/pack.d.ts.map +1 -0
  55. package/dist/esm/commands/pack.js +147 -0
  56. package/dist/esm/commands/pack.js.map +1 -0
  57. package/dist/esm/commands/pkg.d.ts +2 -3
  58. package/dist/esm/commands/pkg.d.ts.map +1 -1
  59. package/dist/esm/commands/pkg.js +123 -38
  60. package/dist/esm/commands/pkg.js.map +1 -1
  61. package/dist/esm/commands/publish.d.ts +22 -0
  62. package/dist/esm/commands/publish.d.ts.map +1 -0
  63. package/dist/esm/commands/publish.js +245 -0
  64. package/dist/esm/commands/publish.js.map +1 -0
  65. package/dist/esm/commands/query.d.ts +2 -2
  66. package/dist/esm/commands/query.d.ts.map +1 -1
  67. package/dist/esm/commands/query.js +170 -39
  68. package/dist/esm/commands/query.js.map +1 -1
  69. package/dist/esm/commands/run-exec.d.ts +1 -0
  70. package/dist/esm/commands/run-exec.d.ts.map +1 -1
  71. package/dist/esm/commands/run-exec.js +1 -0
  72. package/dist/esm/commands/run-exec.js.map +1 -1
  73. package/dist/esm/commands/run.d.ts +1 -0
  74. package/dist/esm/commands/run.d.ts.map +1 -1
  75. package/dist/esm/commands/run.js +13 -16
  76. package/dist/esm/commands/run.js.map +1 -1
  77. package/dist/esm/commands/serve.d.ts +14 -0
  78. package/dist/esm/commands/serve.d.ts.map +1 -0
  79. package/dist/esm/commands/serve.js +103 -0
  80. package/dist/esm/commands/serve.js.map +1 -0
  81. package/dist/esm/commands/uninstall.d.ts +12 -3
  82. package/dist/esm/commands/uninstall.d.ts.map +1 -1
  83. package/dist/esm/commands/uninstall.js +8 -3
  84. package/dist/esm/commands/uninstall.js.map +1 -1
  85. package/dist/esm/commands/update.d.ts +14 -0
  86. package/dist/esm/commands/update.d.ts.map +1 -0
  87. package/dist/esm/commands/update.js +41 -0
  88. package/dist/esm/commands/update.js.map +1 -0
  89. package/dist/esm/commands/version.d.ts +26 -0
  90. package/dist/esm/commands/version.d.ts.map +1 -0
  91. package/dist/esm/commands/version.js +226 -0
  92. package/dist/esm/commands/version.js.map +1 -0
  93. package/dist/esm/commands/whoami.d.ts +4 -2
  94. package/dist/esm/commands/whoami.d.ts.map +1 -1
  95. package/dist/esm/commands/whoami.js +1 -1
  96. package/dist/esm/commands/whoami.js.map +1 -1
  97. package/dist/esm/config/definition.d.ts +123 -11
  98. package/dist/esm/config/definition.d.ts.map +1 -1
  99. package/dist/esm/config/definition.js +197 -34
  100. package/dist/esm/config/definition.js.map +1 -1
  101. package/dist/esm/config/index.d.ts +42 -37
  102. package/dist/esm/config/index.d.ts.map +1 -1
  103. package/dist/esm/config/index.js +116 -172
  104. package/dist/esm/config/index.js.map +1 -1
  105. package/dist/esm/config/merge.d.ts +3 -1
  106. package/dist/esm/config/merge.d.ts.map +1 -1
  107. package/dist/esm/config/merge.js +11 -6
  108. package/dist/esm/config/merge.js.map +1 -1
  109. package/dist/esm/config/usage.d.ts +3 -2
  110. package/dist/esm/config/usage.d.ts.map +1 -1
  111. package/dist/esm/config/usage.js.map +1 -1
  112. package/dist/esm/custom-help.d.ts +9 -0
  113. package/dist/esm/custom-help.d.ts.map +1 -0
  114. package/dist/esm/custom-help.js +400 -0
  115. package/dist/esm/custom-help.js.map +1 -0
  116. package/dist/esm/exec-command.d.ts +33 -14
  117. package/dist/esm/exec-command.d.ts.map +1 -1
  118. package/dist/esm/exec-command.js +214 -65
  119. package/dist/esm/exec-command.js.map +1 -1
  120. package/dist/esm/index.d.ts +1 -14
  121. package/dist/esm/index.d.ts.map +1 -1
  122. package/dist/esm/index.js +46 -20
  123. package/dist/esm/index.js.map +1 -1
  124. package/dist/esm/load-command.d.ts +16 -0
  125. package/dist/esm/load-command.d.ts.map +1 -0
  126. package/dist/esm/load-command.js +21 -0
  127. package/dist/esm/load-command.js.map +1 -0
  128. package/dist/esm/output.d.ts +6 -10
  129. package/dist/esm/output.d.ts.map +1 -1
  130. package/dist/esm/output.js +73 -35
  131. package/dist/esm/output.js.map +1 -1
  132. package/dist/esm/pack-tarball.d.ts +22 -0
  133. package/dist/esm/pack-tarball.d.ts.map +1 -0
  134. package/dist/esm/pack-tarball.js +249 -0
  135. package/dist/esm/pack-tarball.js.map +1 -0
  136. package/dist/esm/parse-add-remove-args.d.ts +1 -1
  137. package/dist/esm/parse-add-remove-args.d.ts.map +1 -1
  138. package/dist/esm/parse-add-remove-args.js +1 -1
  139. package/dist/esm/parse-add-remove-args.js.map +1 -1
  140. package/dist/esm/print-err.d.ts +12 -1
  141. package/dist/esm/print-err.d.ts.map +1 -1
  142. package/dist/esm/print-err.js +157 -26
  143. package/dist/esm/print-err.js.map +1 -1
  144. package/dist/esm/query-host-contexts.d.ts +16 -0
  145. package/dist/esm/query-host-contexts.d.ts.map +1 -0
  146. package/dist/esm/query-host-contexts.js +135 -0
  147. package/dist/esm/query-host-contexts.js.map +1 -0
  148. package/dist/esm/start-gui.d.ts +1 -0
  149. package/dist/esm/start-gui.d.ts.map +1 -1
  150. package/dist/esm/start-gui.js +25 -6
  151. package/dist/esm/start-gui.js.map +1 -1
  152. package/dist/esm/view.d.ts +2 -3
  153. package/dist/esm/view.d.ts.map +1 -1
  154. package/dist/esm/view.js +1 -1
  155. package/dist/esm/view.js.map +1 -1
  156. package/package.json +51 -35
  157. package/dist/esm/commands/gui.d.ts +0 -6
  158. package/dist/esm/commands/gui.d.ts.map +0 -1
  159. package/dist/esm/commands/gui.js +0 -13
  160. package/dist/esm/commands/gui.js.map +0 -1
  161. package/dist/esm/commands/install-exec.d.ts +0 -4
  162. package/dist/esm/commands/install-exec.d.ts.map +0 -1
  163. package/dist/esm/commands/install-exec.js +0 -13
  164. package/dist/esm/commands/install-exec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -23,18 +23,17 @@
23
23
  import { error } from '@vltpkg/error-cause';
24
24
  import { PackageInfoClient } from '@vltpkg/package-info';
25
25
  import { PackageJson } from '@vltpkg/package-json';
26
+ import { resetCaches } from '@vltpkg/dep-id';
27
+ import { assertRecordStringString, assertRecordStringT, isRecordStringString, } from '@vltpkg/types';
28
+ import { find, load, reload, save } from '@vltpkg/vlt-json';
26
29
  import { Monorepo } from '@vltpkg/workspaces';
27
- import { XDG } from '@vltpkg/xdg';
28
- import { readFileSync, rmSync, writeFileSync } from 'node:fs';
29
- import { lstat, mkdir, readFile, writeFile } from 'node:fs/promises';
30
- import { homedir } from 'node:os';
31
- import { dirname, resolve } from 'node:path';
30
+ import { readFile, rm, writeFile } from 'node:fs/promises';
31
+ import { dirname } from 'node:path';
32
32
  import { PathScurry } from 'path-scurry';
33
- import { parse as jsonParse, stringify as jsonStringify, kIndent, kNewline, } from 'polite-json';
34
- import { walkUp } from 'walk-up-path';
35
33
  import { commands, definition, getCommand, isRecordField, recordFields, } from "./definition.js";
36
34
  import { merge } from "./merge.js";
37
35
  export { commands, definition, isRecordField, recordFields, };
36
+ export const kCustomInspect = Symbol.for('nodejs.util.inspect.custom');
38
37
  // turn a set of pairs into a Record object.
39
38
  // if a kv pair doesn't have a = character, set to `''`
40
39
  const reducePairs = (pairs) => {
@@ -85,9 +84,6 @@ export const recordsToPairs = (obj) => {
85
84
  ]));
86
85
  };
87
86
  const kRecord = Symbol('parsed key=value record');
88
- const exists = (f) => lstat(f).then(() => true, () => false);
89
- const home = homedir();
90
- const xdg = new XDG('vlt');
91
87
  /**
92
88
  * Class that handles configuration for vlt.
93
89
  *
@@ -99,8 +95,6 @@ export class Config {
99
95
  * representing vlt's configuration
100
96
  */
101
97
  jack;
102
- stringifyOptions = { [kIndent]: ' ', [kNewline]: '\n' };
103
- configFiles = {};
104
98
  /**
105
99
  * Parsed values in effect
106
100
  */
@@ -125,11 +119,23 @@ export class Config {
125
119
  monorepo: Monorepo.maybeLoad(this.projectRoot, {
126
120
  scurry,
127
121
  packageJson,
122
+ load: {
123
+ paths: asRecords.workspace,
124
+ groups: asRecords['workspace-group'],
125
+ },
128
126
  }),
127
+ catalog: load('catalog', assertRecordStringString),
128
+ catalogs: load('catalogs', o => assertRecordStringT(o, isRecordStringString, 'Record<string, Record<string, string>>')),
129
129
  };
130
130
  const options = Object.assign(asRecords, extras);
131
131
  this.#options = Object.assign(options, {
132
132
  packageInfo: new PackageInfoClient(options),
133
+ [kCustomInspect]() {
134
+ return Object.fromEntries(Object.entries(options).filter(([k]) => k !== 'monorepo' &&
135
+ k !== 'scurry' &&
136
+ k !== 'packageJson' &&
137
+ k !== 'packageInfo'));
138
+ },
133
139
  });
134
140
  return this.#options;
135
141
  }
@@ -140,6 +146,7 @@ export class Config {
140
146
  resetOptions(projectRoot = process.cwd()) {
141
147
  this.projectRoot = projectRoot;
142
148
  this.#options = undefined;
149
+ resetCaches();
143
150
  }
144
151
  // memoized options() getter value
145
152
  #options;
@@ -148,7 +155,12 @@ export class Config {
148
155
  */
149
156
  positionals;
150
157
  /**
151
- * The root of the project where a vlt.json, vlt-workspaces.json,
158
+ * Original arguments used for parsing (stored for reload purposes)
159
+ * @internal
160
+ */
161
+ #originalArgs;
162
+ /**
163
+ * The root of the project where a vlt.json, vlt.json,
152
164
  * package.json, or .git was found. Not necessarily the `process.cwd()`,
153
165
  * though that is the default location.
154
166
  *
@@ -176,6 +188,8 @@ export class Config {
176
188
  parse(args = process.argv) {
177
189
  if (isParsed(this))
178
190
  return this;
191
+ // Store the original args for potential reload
192
+ this.#originalArgs = [...args];
179
193
  this.jack.loadEnvDefaults();
180
194
  const p = this.jack.parseRaw(args);
181
195
  const fallback = getCommand(p.values['fallback-command']);
@@ -243,86 +257,55 @@ export class Config {
243
257
  * Write the config values to the user or project config file.
244
258
  */
245
259
  async writeConfigFile(which, values) {
246
- const f = this.getFilename(which);
247
- await mkdir(dirname(f), { recursive: true });
248
- const vals = Object.assign(pairsToRecords(values), this.stringifyOptions);
249
- await writeFile(f, jsonStringify(vals));
250
- this.configFiles[f] = vals;
251
- return values;
260
+ save('config', pairsToRecords(values), which);
261
+ await this.#reloadConfig();
252
262
  }
253
263
  /**
254
264
  * Fold in the provided fields with the existing properties
255
265
  * in the config file.
256
266
  */
257
267
  async addConfigToFile(which, values) {
258
- const f = this.getFilename(which);
259
- return this.writeConfigFile(which, merge((await this.#maybeLoadConfigFile(f)) ?? {}, values));
260
- }
261
- /**
262
- * if the file exists, parse and load it. returns object if data was
263
- * loaded, or undefined if not.
264
- */
265
- async #maybeLoadConfigFile(file) {
266
- const result = await this.#readConfigFile(file);
267
- if (result) {
268
- try {
269
- const { command, ...values } = recordsToPairs(result);
270
- if (command) {
271
- for (const [c, opts] of Object.entries(command)) {
272
- const cmd = getCommand(c);
273
- if (cmd) {
274
- this.commandValues[cmd] = merge(this.commandValues[cmd] ?? {}, opts);
275
- }
276
- }
277
- }
278
- this.jack.setConfigValues(values, file);
279
- return result;
280
- }
281
- catch (er) {
282
- throw error('failed to load config values from file', {
283
- path: file,
284
- cause: er,
285
- });
286
- }
287
- }
268
+ return this.writeConfigFile(which, merge((await this.#maybeLoadConfigFile(which)) ?? {}, values));
288
269
  }
289
- async #readConfigFile(file) {
290
- if (this.configFiles[file])
291
- return this.configFiles[file];
292
- const data = await readFile(file, 'utf8').catch(() => { });
293
- if (!data)
294
- return undefined;
295
- let result;
296
- try {
297
- result = jsonParse(data);
298
- if (result && typeof result === 'object') {
299
- if (result[kIndent] !== undefined)
300
- this.stringifyOptions[kIndent] = result[kIndent];
301
- if (result[kNewline] !== undefined)
302
- this.stringifyOptions[kNewline] = result[kNewline];
303
- }
304
- }
305
- catch (er) {
306
- throw error('failed to parse vlt config file', {
270
+ // called in this weird bound way so that it can be used by the
271
+ // vlt-json config loading module.
272
+ #validator = function (c, file) {
273
+ this.#validateConfig(c, file);
274
+ }.bind(this);
275
+ #validateConfig(c, file) {
276
+ if (!c || typeof c !== 'object' || Array.isArray(c)) {
277
+ throw error('invalid config, expected object', {
307
278
  path: file,
308
- cause: er,
279
+ found: c,
280
+ wanted: 'ConfigFileData',
309
281
  });
310
282
  }
311
- this.configFiles[file] = result;
312
- return result;
283
+ const { command, ...values } = recordsToPairs(c);
284
+ if (command) {
285
+ for (const [c, opts] of Object.entries(command)) {
286
+ const cmd = getCommand(c);
287
+ if (cmd) {
288
+ this.commandValues[cmd] = merge(this.commandValues[cmd] ?? {}, opts);
289
+ }
290
+ }
291
+ }
292
+ this.jack.setConfigValues(values, file);
313
293
  }
314
- getFilename(which = 'project') {
315
- return which === 'user' ?
316
- xdg.config('vlt.json')
317
- : resolve(this.projectRoot, 'vlt.json');
294
+ /**
295
+ * if the file exists, parse and load it. returns object if data was
296
+ * loaded, or undefined if not.
297
+ */
298
+ async #maybeLoadConfigFile(whichConfig) {
299
+ return load('config', this.#validator, whichConfig);
318
300
  }
301
+ /**
302
+ * Deletes the specified config fields from the named file
303
+ * Returns `true` if anything was changed.
304
+ */
319
305
  async deleteConfigKeys(which, fields) {
320
- const file = this.getFilename(which);
321
- const data = await this.#maybeLoadConfigFile(file);
322
- if (!data) {
323
- rmSync(file, { force: true });
306
+ const data = await this.#maybeLoadConfigFile(which);
307
+ if (!data)
324
308
  return false;
325
- }
326
309
  let didSomething = false;
327
310
  for (const f of fields) {
328
311
  const [key, ...sk] = f.split('.');
@@ -335,9 +318,10 @@ export class Config {
335
318
  if (Array.isArray(v)) {
336
319
  const i = v.findIndex(subvalue => subvalue.startsWith(`${subs}=`));
337
320
  if (i !== -1) {
338
- v.splice(i, 1);
339
- if (v.length === 0)
321
+ if (v.length === 1)
340
322
  delete data[k];
323
+ else
324
+ v.splice(i, 1);
341
325
  didSomething = true;
342
326
  }
343
327
  }
@@ -355,13 +339,8 @@ export class Config {
355
339
  delete data[k];
356
340
  }
357
341
  }
358
- const d = jsonStringify(data);
359
- if (d.trim() === '{}') {
360
- rmSync(file, { force: true });
361
- }
362
- else {
363
- writeFileSync(file, jsonStringify(data));
364
- }
342
+ if (didSomething)
343
+ await this.writeConfigFile(which, data);
365
344
  return didSomething;
366
345
  }
367
346
  /**
@@ -375,39 +354,33 @@ export class Config {
375
354
  * mean deleting the file.
376
355
  */
377
356
  async editConfigFile(which, edit) {
378
- const file = this.getFilename(which);
379
- const backup = this.configFiles[file];
357
+ // load the file as a backup
358
+ // call the edit function
359
+ // reload it
360
+ const file = find(which);
361
+ const backup = await readFile(file, 'utf8').catch(() => undefined);
380
362
  if (!backup) {
381
- writeFileSync(file, '{\n\n}\n');
363
+ await writeFile(file, JSON.stringify({ config: {} }, null, 2) + '\n');
382
364
  }
383
365
  let valid = false;
384
366
  try {
385
367
  await edit(file);
386
- const res = jsonParse(readFileSync(file, 'utf8'));
387
- if (!res || typeof res !== 'object' || Array.isArray(res)) {
388
- throw error('Invalid configuration, expected object', {
389
- path: file,
390
- found: res,
391
- });
392
- }
393
- if (Object.keys(res).length === 0) {
394
- // nothing there, remove file
395
- delete this.configFiles[file];
396
- rmSync(file, { force: true });
397
- }
398
- else {
399
- this.jack.setConfigValues(recordsToPairs(res));
400
- this.configFiles[file] = res;
401
- }
368
+ // force it to reload the file and validate it again
369
+ // if this fails, we roll back.
370
+ const result = reload('config', which);
371
+ save('config', result ?? {}, which);
402
372
  valid = true;
403
373
  }
404
374
  finally {
405
375
  if (!valid) {
376
+ // TODO: maybe write the file to a re-edit backup location?
377
+ // then you could do `vlt config edit retry` or something.
406
378
  if (backup) {
407
- writeFileSync(file, jsonStringify(backup));
379
+ await writeFile(file, backup);
380
+ reload(which);
408
381
  }
409
382
  else {
410
- rmSync(file, { force: true });
383
+ await rm(file, { force: true });
411
384
  }
412
385
  }
413
386
  }
@@ -415,73 +388,45 @@ export class Config {
415
388
  /**
416
389
  * Find the local config file and load both it and the user-level config in
417
390
  * the XDG config home.
418
- *
419
- * Note: if working in a workspaces monorepo, then the vlt.json file MUST
420
- * be in the same folder as the vlt-workspaces.json file, because we stop
421
- * looking when we find either one.
422
391
  */
423
392
  async loadConfigFile() {
424
- const userConfig = xdg.config('vlt.json');
425
- await this.#maybeLoadConfigFile(userConfig);
426
- let lastKnownRoot = resolve(this.projectRoot);
427
- for (const dir of walkUp(this.projectRoot)) {
428
- // don't look in ~
429
- if (dir === home)
430
- break;
431
- // finding a project config file stops the search
432
- const projectConfig = resolve(dir, 'vlt.json');
433
- if (projectConfig === userConfig)
434
- break;
435
- if ((await exists(projectConfig)) &&
436
- (await this.#maybeLoadConfigFile(projectConfig))) {
437
- lastKnownRoot = dir;
438
- break;
439
- }
440
- // stat existence of these files
441
- const [hasPackage, hasModules, hasWorkspaces, hasGit] = await Promise.all([
442
- exists(resolve(dir, 'package.json')),
443
- exists(resolve(dir, 'node_modules')),
444
- exists(resolve(dir, 'vlt-workspaces.json')),
445
- exists(resolve(dir, '.git')),
446
- ]);
447
- // treat these as potential roots
448
- if (hasPackage || hasModules || hasWorkspaces) {
449
- lastKnownRoot = dir;
450
- }
451
- // define backstops
452
- if (hasWorkspaces || hasGit) {
453
- break;
454
- }
455
- }
456
- this.projectRoot = lastKnownRoot;
393
+ await this.#maybeLoadConfigFile('user');
394
+ this.projectRoot = dirname(find('project', this.projectRoot));
395
+ await this.#maybeLoadConfigFile('project');
457
396
  return this;
458
397
  }
459
398
  /**
460
- * Determine whether we should use colors in the output. Update
461
- * chalk appropriately.
462
- *
463
- * Implicitly calls this.parse() if it not parsed already.
399
+ * Clear cached config values to force re-reading from updated files.
400
+ * @internal
464
401
  */
465
- async loadColor() {
466
- const c = this.get('color');
467
- const chalk = (await import('chalk')).default;
468
- let color;
469
- if (process.env.NO_COLOR !== '1' &&
470
- (c === true || (c === undefined && chalk.level > 0))) {
471
- color = true;
472
- chalk.level = Math.max(chalk.level, 1);
473
- process.env.FORCE_COLOR = String(chalk.level);
474
- delete process.env.NO_COLOR;
475
- }
476
- else {
477
- color = false;
478
- chalk.level = 0;
479
- process.env.FORCE_COLOR = '0';
480
- process.env.NO_COLOR = '1';
481
- }
482
- const { values = this.parse().values } = this;
483
- values.color = color;
484
- return this;
402
+ async #reloadConfig() {
403
+ // Clear the memoized options to force recalculation
404
+ this.#options = undefined;
405
+ }
406
+ /**
407
+ * Force a complete reload of config files from disk.
408
+ * This clears all caches and re-reads config files.
409
+ * Useful for long-running processes that need to pick up config changes.
410
+ */
411
+ async reloadFromDisk() {
412
+ // Clear the memoized options to force recalculation
413
+ this.#options = undefined;
414
+ // Clear the parsed state to force re-parsing
415
+ // This is crucial because parse() returns early if already parsed
416
+ this.values = undefined;
417
+ this.positionals = undefined;
418
+ this.command = undefined;
419
+ // Clear vlt-json caches for both user and project configs
420
+ // This ensures that the next time config files are read, they'll be re-read from disk
421
+ const { unload } = await import('@vltpkg/vlt-json');
422
+ unload('user');
423
+ unload('project');
424
+ // Force reload of config files by calling the load methods again
425
+ // This will re-read the files and re-apply them to the jack parser
426
+ await this.#maybeLoadConfigFile('user');
427
+ await this.#maybeLoadConfigFile('project');
428
+ // Re-parse to pick up the updated config values using the original arguments
429
+ this.parse(this.#originalArgs);
485
430
  }
486
431
  /**
487
432
  * cache of the loaded config
@@ -501,8 +446,7 @@ export class Config {
501
446
  return this.#loaded;
502
447
  const a = new Config(definition, projectRoot);
503
448
  const b = await a.loadConfigFile();
504
- const c = await b.parse(argv).loadColor();
505
- this.#loaded = c;
449
+ this.#loaded = b.parse(argv);
506
450
  return this.#loaded;
507
451
  }
508
452
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Module that handles all vlt configuration needs\n *\n * Project-level configs are set in a `vlt.json` file in the local project\n * if present. This will override the user-level configs in the appropriate\n * XDG config path.\n *\n * Command-specific configuration can be specified by putting options in a\n * field in the `command` object. For example:\n *\n * ```json\n * {\n * \"registry\": \"https://registry.npmjs.org/\",\n * \"command\": {\n * \"publish\": {\n * \"registry\": \"http://registry.internal\"\n * }\n * }\n * }\n * ```\n * @module\n */\n\nimport { error } from '@vltpkg/error-cause'\nimport { PackageInfoClient } from '@vltpkg/package-info'\nimport { PackageJson } from '@vltpkg/package-json'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport { XDG } from '@vltpkg/xdg'\nimport { readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport { lstat, mkdir, readFile, writeFile } from 'node:fs/promises'\nimport type { Jack, OptionsResults, Unwrap } from 'jackspeak'\nimport { homedir } from 'node:os'\nimport { dirname, resolve } from 'node:path'\nimport { PathScurry } from 'path-scurry'\nimport type { JSONResult } from 'polite-json'\nimport {\n parse as jsonParse,\n stringify as jsonStringify,\n kIndent,\n kNewline,\n} from 'polite-json'\nimport { walkUp } from 'walk-up-path'\nimport type { Commands, RecordField } from './definition.ts'\nimport {\n commands,\n definition,\n getCommand,\n isRecordField,\n recordFields,\n} from './definition.ts'\nimport { merge } from './merge.ts'\nexport {\n commands,\n definition,\n isRecordField,\n recordFields,\n type Commands,\n}\n\nexport type RecordPairs = Record<string, unknown>\nexport type RecordString = Record<string, string>\nexport type ConfigFiles = Record<string, ConfigFileData>\n\n// turn a set of pairs into a Record object.\n// if a kv pair doesn't have a = character, set to `''`\nconst reducePairs = <T extends string[]>(\n pairs: T,\n): RecordString | T => {\n const record: RecordString = {}\n for (const kv of pairs) {\n const eq = kv.indexOf('=')\n if (eq === -1) record[kv] = ''\n else {\n const key = kv.substring(0, eq)\n const val = kv.substring(eq + 1)\n record[key] = val\n }\n }\n return record\n}\n\nconst isRecordFieldValue = (k: string, v: unknown): v is string[] =>\n Array.isArray(v) &&\n recordFields.includes(k as (typeof recordFields)[number])\n\nexport type PairsAsRecords = Omit<\n ConfigOptions,\n | 'projectRoot'\n | 'scurry'\n | 'packageJson'\n | 'monorepo'\n | 'packageInfo'\n> & {\n command?: Record<string, ConfigOptions>\n}\n\nexport const pairsToRecords = (\n obj: ConfigFileData,\n): PairsAsRecords => {\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [\n k,\n k === 'command' && v && typeof v === 'object' ?\n Object.fromEntries(\n Object.entries(v).map(([k, v]) => [\n k,\n pairsToRecords(v as ConfigFileData),\n ]),\n )\n : isRecordFieldValue(k, v) ? reducePairs(v)\n : v,\n ]),\n // hard cast because TS can't see through the entries/fromEntries\n ) as unknown as PairsAsRecords\n}\n\nexport const recordsToPairs = (obj: RecordPairs): RecordPairs => {\n return Object.fromEntries(\n Object.entries(obj)\n .filter(\n ([k]) =>\n !(\n k === 'scurry' ||\n k === 'packageJson' ||\n k === 'monorepo' ||\n k === 'projectRoot' ||\n k === 'packageInfo'\n ),\n )\n .map(([k, v]) => [\n k,\n k === 'command' && v && typeof v === 'object' ?\n recordsToPairs(v as RecordPairs)\n : (\n !v ||\n typeof v !== 'object' ||\n Array.isArray(v) ||\n !isRecordField(k)\n ) ?\n v\n : Object.entries(v).map(([k, v]) => `${k}=${v}`),\n ]),\n )\n}\n\nconst kRecord = Symbol('parsed key=value record')\nconst exists = (f: string) =>\n lstat(f).then(\n () => true,\n () => false,\n )\n\nconst home = homedir()\nconst xdg = new XDG('vlt')\n\n/**\n * Config data can be any options, and also a 'command' field which\n * contains command names and override options for that command.\n */\nexport type ConfigData = OptionsResults<ConfigDefinitions> & {\n command?: Record<string, OptionsResults<ConfigDefinitions>>\n}\n\n/**\n * Config data as it appears in config files, with kv pair lists\n * stored as `Record<string, string>`.\n */\nexport type ConfigFileData = {\n [k in keyof ConfigData]?: k extends OptListKeys<ConfigData> ?\n RecordString | string[]\n : k extends 'command' ? ConfigFiles\n : ConfigData[k]\n}\n\nexport type ConfigOptions = {\n [k in keyof ConfigData]: k extends RecordField ? RecordString\n : k extends 'command' ? never\n : ConfigData[k]\n} & {\n packageJson: PackageJson\n scurry: PathScurry\n projectRoot: string\n monorepo?: Monorepo\n packageInfo: PackageInfoClient\n}\n\n/**\n * The base config definition set as a type\n */\nexport type ConfigDefinitions = Unwrap<typeof definition>\n\nexport type StringListKeys<O> = {\n [k in keyof O]: O[k] extends string[] | undefined ? k : never\n}\nexport type OptListKeys<O> = Exclude<\n StringListKeys<O>[keyof StringListKeys<O>],\n undefined\n>\n\n/**\n * Class that handles configuration for vlt.\n *\n * Call {@link Config.load} to get one of these.\n */\nexport class Config {\n /**\n * The {@link https://npmjs.com/jackspeak | JackSpeak} object\n * representing vlt's configuration\n */\n jack: Jack<ConfigDefinitions>\n\n stringifyOptions: {\n [kIndent]: string\n [kNewline]: string\n } = { [kIndent]: ' ', [kNewline]: '\\n' }\n\n configFiles: ConfigFiles = {}\n\n /**\n * Parsed values in effect\n */\n values?: OptionsResults<ConfigDefinitions>\n\n /**\n * Command-specific config values\n */\n commandValues: {\n [cmd in Commands[keyof Commands]]?: ConfigData\n } = {}\n\n /**\n * A flattened object of the parsed configuration\n */\n get options(): ConfigOptions {\n if (this.#options) return this.#options\n const scurry = new PathScurry(this.projectRoot)\n const packageJson = new PackageJson()\n const asRecords = pairsToRecords(this.parse().values)\n const extras = {\n projectRoot: this.projectRoot,\n scurry,\n packageJson,\n monorepo: Monorepo.maybeLoad(this.projectRoot, {\n scurry,\n packageJson,\n }),\n }\n const options: Omit<ConfigOptions, 'packageInfo'> = Object.assign(\n asRecords,\n extras,\n )\n this.#options = Object.assign(options, {\n packageInfo: new PackageInfoClient(options),\n })\n return this.#options\n }\n\n /**\n * Reset the options value, optionally setting a new project root\n * to recalculate the options.\n */\n resetOptions(projectRoot: string = process.cwd()) {\n this.projectRoot = projectRoot\n this.#options = undefined\n }\n\n // memoized options() getter value\n #options?: ConfigOptions\n\n /**\n * positional arguments to the vlt process\n */\n positionals?: string[]\n\n /**\n * The root of the project where a vlt.json, vlt-workspaces.json,\n * package.json, or .git was found. Not necessarily the `process.cwd()`,\n * though that is the default location.\n *\n * Never walks up as far as `$HOME`. So for example, if a project is in\n * `~/projects/xyz`, then the highest dir it will check is `~/projects`\n */\n projectRoot: string\n\n /**\n * `Record<alias, canonical name>` to dereference command aliases.\n */\n commands: Commands\n\n /**\n * Which command name to use for overriding with command-specific values,\n * determined from the argv when parse() is called.\n */\n command?: Commands[keyof Commands]\n\n constructor(\n jack: Jack<ConfigDefinitions> = definition,\n projectRoot = process.cwd(),\n ) {\n this.projectRoot = projectRoot\n this.commands = commands\n this.jack = jack\n }\n\n /**\n * Parse the arguments and set configuration and positionals accordingly.\n */\n parse(args: string[] = process.argv): this & ParsedConfig {\n if (isParsed(this)) return this\n\n this.jack.loadEnvDefaults()\n const p = this.jack.parseRaw(args)\n\n const fallback = getCommand(p.values['fallback-command'])\n this.command = getCommand(p.positionals[0])\n\n const cmdOrFallback = this.command ?? fallback\n const cmdSpecific =\n cmdOrFallback && this.commandValues[cmdOrFallback]\n if (cmdSpecific) {\n this.jack.setConfigValues(recordsToPairs(cmdSpecific))\n }\n\n // ok, applied cmd-specific defaults, do rest of the parse\n this.jack.applyDefaults(p)\n this.jack.writeEnv(p)\n\n if (this.command) p.positionals.shift()\n else this.command = getCommand(p.values['fallback-command'])\n\n Object.assign(this, p)\n\n /* c8 ignore start - unpossible */\n if (!isParsed(this)) throw error('failed to parse config')\n /* c8 ignore stop */\n\n return this\n }\n\n /**\n * Get a `key=value` list option value as an object.\n *\n * For example, a list option with a vlaue of `['key=value', 'xyz=as=df' ]`\n * would be returned as `{key: 'value', xyz: 'as=df'}`\n *\n * Results are memoized, so subsequent calls for the same key will return the\n * same object. If new strings are added to the list, then the memoized value\n * is *not* updated, so only use once configurations have been fully loaded.\n *\n * If the config value is not set at all, an empty object is returned.\n */\n getRecord(k: OptListKeys<ConfigData>): RecordString {\n const pairs = this.get(k) as\n | (string[] & { [kRecord]?: RecordString })\n | undefined\n if (!pairs) return {}\n if (pairs[kRecord]) return pairs[kRecord]\n const kv = pairs.reduce((kv: RecordString, pair) => {\n const eq = pair.indexOf('=')\n if (eq === -1) return kv\n const key = pair.substring(0, eq)\n const val = pair.substring(eq + 1)\n kv[key] = val\n return kv\n }, {})\n Object.assign(pairs, { [kRecord]: kv })\n return kv\n }\n\n /**\n * Get a configuration value.\n *\n * Note: `key=value` pair configs are returned as a string array. To get them\n * as an object, use {@link Config#getRecord}.\n */\n get<K extends keyof OptionsResults<ConfigDefinitions>>(\n k: K,\n ): OptionsResults<ConfigDefinitions>[K] {\n /* c8 ignore next -- impossible but TS doesn't know that */\n return (this.values ?? this.parse().values)[k]\n }\n\n /**\n * Write the config values to the user or project config file.\n */\n async writeConfigFile(\n which: 'project' | 'user',\n values: ConfigFileData,\n ) {\n const f = this.getFilename(which)\n await mkdir(dirname(f), { recursive: true })\n const vals = Object.assign(\n pairsToRecords(values),\n this.stringifyOptions,\n )\n await writeFile(f, jsonStringify(vals))\n this.configFiles[f] = vals\n return values\n }\n\n /**\n * Fold in the provided fields with the existing properties\n * in the config file.\n */\n async addConfigToFile(\n which: 'project' | 'user',\n values: ConfigFileData,\n ) {\n const f = this.getFilename(which)\n return this.writeConfigFile(\n which,\n merge((await this.#maybeLoadConfigFile(f)) ?? {}, values),\n )\n }\n\n /**\n * if the file exists, parse and load it. returns object if data was\n * loaded, or undefined if not.\n */\n async #maybeLoadConfigFile(\n file: string,\n ): Promise<ConfigFileData | undefined> {\n const result = await this.#readConfigFile(file)\n\n if (result) {\n try {\n const { command, ...values } = recordsToPairs(result)\n if (command) {\n for (const [c, opts] of Object.entries(command)) {\n const cmd = getCommand(c)\n if (cmd) {\n this.commandValues[cmd] = merge<ConfigData>(\n this.commandValues[cmd] ?? ({} as ConfigData),\n opts as ConfigData,\n )\n }\n }\n }\n this.jack.setConfigValues(values, file)\n return result\n } catch (er) {\n throw error('failed to load config values from file', {\n path: file,\n cause: er,\n })\n }\n }\n }\n\n async #readConfigFile(\n file: string,\n ): Promise<ConfigFileData | undefined> {\n if (this.configFiles[file]) return this.configFiles[file]\n const data = await readFile(file, 'utf8').catch(() => {})\n if (!data) return undefined\n let result: JSONResult\n try {\n result = jsonParse(data)\n if (result && typeof result === 'object') {\n if (result[kIndent] !== undefined)\n this.stringifyOptions[kIndent] = result[kIndent]\n if (result[kNewline] !== undefined)\n this.stringifyOptions[kNewline] = result[kNewline]\n }\n } catch (er) {\n throw error('failed to parse vlt config file', {\n path: file,\n cause: er,\n })\n }\n this.configFiles[file] = result as ConfigFileData\n return result as ConfigFileData\n }\n\n getFilename(which: 'project' | 'user' = 'project'): string {\n return which === 'user' ?\n xdg.config('vlt.json')\n : resolve(this.projectRoot, 'vlt.json')\n }\n\n async deleteConfigKeys(\n which: 'project' | 'user',\n fields: string[],\n ) {\n const file = this.getFilename(which)\n const data = await this.#maybeLoadConfigFile(file)\n if (!data) {\n rmSync(file, { force: true })\n return false\n }\n let didSomething = false\n for (const f of fields) {\n const [key, ...sk] = f.split('.') as [\n h: string,\n ...rest: string[],\n ]\n const subs = sk.join('.')\n const k = key as keyof ConfigDefinitions\n const v = data[k]\n if (v === undefined) continue\n if (subs && v && typeof v === 'object') {\n if (Array.isArray(v)) {\n const i = v.findIndex(subvalue =>\n subvalue.startsWith(`${subs}=`),\n )\n if (i !== -1) {\n v.splice(i, 1)\n if (v.length === 0) delete data[k]\n didSomething = true\n }\n } else {\n if (v[subs] !== undefined) {\n delete v[subs]\n if (Object.keys(v).length === 0) delete data[k]\n didSomething = true\n }\n }\n } else {\n didSomething = true\n delete data[k]\n }\n }\n const d = jsonStringify(data)\n if (d.trim() === '{}') {\n rmSync(file, { force: true })\n } else {\n writeFileSync(file, jsonStringify(data))\n }\n return didSomething\n }\n\n /**\n * Edit the user or project configuration file.\n *\n * If the file isn't present, then it starts with `{}` so the user has\n * something to work with.\n *\n * If the result is not valid, or no config settings are contained in the\n * file after editing, then it's restored to what it was before, which might\n * mean deleting the file.\n */\n async editConfigFile(\n which: 'project' | 'user',\n edit: (file: string) => Promise<void> | void,\n ) {\n const file = this.getFilename(which)\n const backup = this.configFiles[file]\n if (!backup) {\n writeFileSync(file, '{\\n\\n}\\n')\n }\n let valid = false\n try {\n await edit(file)\n const res = jsonParse(readFileSync(file, 'utf8'))\n if (!res || typeof res !== 'object' || Array.isArray(res)) {\n throw error('Invalid configuration, expected object', {\n path: file,\n found: res,\n })\n }\n if (Object.keys(res).length === 0) {\n // nothing there, remove file\n delete this.configFiles[file]\n rmSync(file, { force: true })\n } else {\n this.jack.setConfigValues(recordsToPairs(res))\n this.configFiles[file] = res as ConfigFileData\n }\n valid = true\n } finally {\n if (!valid) {\n if (backup) {\n writeFileSync(file, jsonStringify(backup))\n } else {\n rmSync(file, { force: true })\n }\n }\n }\n }\n\n /**\n * Find the local config file and load both it and the user-level config in\n * the XDG config home.\n *\n * Note: if working in a workspaces monorepo, then the vlt.json file MUST\n * be in the same folder as the vlt-workspaces.json file, because we stop\n * looking when we find either one.\n */\n async loadConfigFile(): Promise<this> {\n const userConfig = xdg.config('vlt.json')\n await this.#maybeLoadConfigFile(userConfig)\n\n let lastKnownRoot = resolve(this.projectRoot)\n for (const dir of walkUp(this.projectRoot)) {\n // don't look in ~\n if (dir === home) break\n\n // finding a project config file stops the search\n const projectConfig = resolve(dir, 'vlt.json')\n if (projectConfig === userConfig) break\n if (\n (await exists(projectConfig)) &&\n (await this.#maybeLoadConfigFile(projectConfig))\n ) {\n lastKnownRoot = dir\n break\n }\n\n // stat existence of these files\n const [hasPackage, hasModules, hasWorkspaces, hasGit] =\n await Promise.all([\n exists(resolve(dir, 'package.json')),\n exists(resolve(dir, 'node_modules')),\n exists(resolve(dir, 'vlt-workspaces.json')),\n exists(resolve(dir, '.git')),\n ])\n\n // treat these as potential roots\n if (hasPackage || hasModules || hasWorkspaces) {\n lastKnownRoot = dir\n }\n\n // define backstops\n if (hasWorkspaces || hasGit) {\n break\n }\n }\n this.projectRoot = lastKnownRoot\n return this\n }\n\n /**\n * Determine whether we should use colors in the output. Update\n * chalk appropriately.\n *\n * Implicitly calls this.parse() if it not parsed already.\n */\n async loadColor(): Promise<this & LoadedConfig> {\n const c = this.get('color')\n const chalk = (await import('chalk')).default\n let color: boolean\n if (\n process.env.NO_COLOR !== '1' &&\n (c === true || (c === undefined && chalk.level > 0))\n ) {\n color = true\n chalk.level = Math.max(chalk.level, 1) as 0 | 1 | 2 | 3\n process.env.FORCE_COLOR = String(chalk.level)\n delete process.env.NO_COLOR\n } else {\n color = false\n chalk.level = 0\n process.env.FORCE_COLOR = '0'\n process.env.NO_COLOR = '1'\n }\n const { values = this.parse().values } = this\n ;(values as ConfigData & { color: boolean }).color = color\n return this as this & LoadedConfig\n }\n\n /**\n * cache of the loaded config\n */\n static #loaded: LoadedConfig | undefined\n\n /**\n * Load the configuration and return a Promise to a\n * {@link Config} object\n */\n static async load(\n projectRoot = process.cwd(),\n argv = process.argv,\n /**\n * only used in tests, resets the memoization\n * @internal\n */\n reload = false,\n ): Promise<LoadedConfig> {\n if (this.#loaded && !reload) return this.#loaded\n const a = new Config(definition, projectRoot)\n const b = await a.loadConfigFile()\n const c = await b.parse(argv).loadColor()\n this.#loaded = c as LoadedConfig\n return this.#loaded\n }\n}\n\nconst isParsed = (c: Config): c is ParsedConfig =>\n !!(c.values && c.positionals && c.command)\n\nexport type ParsedConfig = Config & {\n command: NonNullable<Config['command']>\n values: OptionsResults<ConfigDefinitions>\n positionals: string[]\n}\n\n/**\n * A fully loaded {@link Config} object\n */\nexport type LoadedConfig = ParsedConfig & {\n get(k: 'color'): boolean\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Module that handles all vlt configuration needs\n *\n * Project-level configs are set in a `vlt.json` file in the local project\n * if present. This will override the user-level configs in the appropriate\n * XDG config path.\n *\n * Command-specific configuration can be specified by putting options in a\n * field in the `command` object. For example:\n *\n * ```json\n * {\n * \"registry\": \"https://registry.npmjs.org/\",\n * \"command\": {\n * \"publish\": {\n * \"registry\": \"http://registry.internal\"\n * }\n * }\n * }\n * ```\n * @module\n */\n\nimport { error } from '@vltpkg/error-cause'\nimport { PackageInfoClient } from '@vltpkg/package-info'\nimport { PackageJson } from '@vltpkg/package-json'\nimport { resetCaches } from '@vltpkg/dep-id'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport {\n assertRecordStringString,\n assertRecordStringT,\n isRecordStringString,\n} from '@vltpkg/types'\nimport type { Validator, WhichConfig } from '@vltpkg/vlt-json'\nimport { find, load, reload, save } from '@vltpkg/vlt-json'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport type { Jack, OptionsResults, Unwrap } from 'jackspeak'\nimport { readFile, rm, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { PathScurry } from 'path-scurry'\nimport type { Commands, RecordField } from './definition.ts'\nimport {\n commands,\n definition,\n getCommand,\n isRecordField,\n recordFields,\n} from './definition.ts'\nimport { merge } from './merge.ts'\nexport {\n commands,\n definition,\n isRecordField,\n recordFields,\n type Commands,\n}\n\nexport const kCustomInspect = Symbol.for('nodejs.util.inspect.custom')\n\nexport type RecordPairs = Record<string, unknown>\nexport type RecordString = Record<string, string>\n\n// turn a set of pairs into a Record object.\n// if a kv pair doesn't have a = character, set to `''`\nconst reducePairs = <T extends string[]>(\n pairs: T,\n): RecordString | T => {\n const record: RecordString = {}\n for (const kv of pairs) {\n const eq = kv.indexOf('=')\n if (eq === -1) record[kv] = ''\n else {\n const key = kv.substring(0, eq)\n const val = kv.substring(eq + 1)\n record[key] = val\n }\n }\n return record\n}\n\nconst isRecordFieldValue = (k: string, v: unknown): v is string[] =>\n Array.isArray(v) &&\n recordFields.includes(k as (typeof recordFields)[number])\n\nexport type PairsAsRecords = ConfigOptionsNoExtras & {\n command?: {\n [k in keyof Commands]?: ConfigOptionsNoExtras\n }\n}\n\nexport const pairsToRecords = (\n obj:\n | NonNullable<ConfigFileData>\n | OptionsResults<ConfigDefinitions>,\n): PairsAsRecords => {\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [\n k,\n k === 'command' && v && typeof v === 'object' ?\n Object.fromEntries(\n Object.entries(v).map(([k, v]) => [\n k,\n pairsToRecords(v as NonNullable<ConfigFileData>),\n ]),\n )\n : isRecordFieldValue(k, v) ? reducePairs(v)\n : v,\n ]),\n // hard cast because TS can't see through the entries/fromEntries\n ) as unknown as PairsAsRecords\n}\n\nexport const recordsToPairs = (obj: RecordPairs): RecordPairs => {\n return Object.fromEntries(\n Object.entries(obj)\n .filter(\n ([k]) =>\n !(\n k === 'scurry' ||\n k === 'packageJson' ||\n k === 'monorepo' ||\n k === 'projectRoot' ||\n k === 'packageInfo'\n ),\n )\n .map(([k, v]) => [\n k,\n k === 'command' && v && typeof v === 'object' ?\n recordsToPairs(v as RecordPairs)\n : (\n !v ||\n typeof v !== 'object' ||\n Array.isArray(v) ||\n !isRecordField(k)\n ) ?\n v\n : Object.entries(v).map(([k, v]) => `${k}=${v}`),\n ]),\n )\n}\n\nconst kRecord = Symbol('parsed key=value record')\n\nexport type ConfigDataNoCommand = {\n [k in keyof OptionsResults<ConfigDefinitions>]?: OptionsResults<ConfigDefinitions>[k]\n}\n\n/**\n * Config data can be any options, and also a 'command' field which\n * contains command names and override options for that command.\n */\nexport type ConfigData = ConfigDataNoCommand & {\n command?: {\n [k in keyof Commands]?: ConfigDataNoCommand\n }\n}\n\nexport type ConfigFileDataNoCommand = {\n [k in keyof ConfigDataNoCommand]: k extends (\n OptListKeys<ConfigDataNoCommand>\n ) ?\n RecordString | string[]\n : ConfigDataNoCommand[k]\n}\n\n/**\n * Config data as it appears in the config field of the vlt.json, with kv pair\n * lists stored as `Record<string, string>` and\n */\nexport type ConfigFileData = ConfigFileDataNoCommand & {\n command?: {\n [k in keyof Commands]?: ConfigFileDataNoCommand\n }\n}\n\nexport type ConfigOptionsNoExtras = {\n [k in keyof OptionsResults<ConfigDefinitions>]: k extends (\n RecordField\n ) ?\n RecordString\n : k extends 'command' ? never\n : OptionsResults<ConfigDefinitions>[k]\n}\n\nexport type ConfigOptions = ConfigOptionsNoExtras &\n Pick<SpecOptions, 'catalog' | 'catalogs'> & {\n packageJson: PackageJson\n scurry: PathScurry\n projectRoot: string\n monorepo?: Monorepo\n packageInfo: PackageInfoClient\n }\n\n/**\n * The base config definition set as a type\n */\nexport type ConfigDefinitions = Unwrap<typeof definition>\n\nexport type StringListKeys<O> = {\n [k in keyof O]: O[k] extends string[] | undefined ? k : never\n}\nexport type OptListKeys<O> = Exclude<\n StringListKeys<O>[keyof StringListKeys<O>],\n undefined\n>\n\n/**\n * Class that handles configuration for vlt.\n *\n * Call {@link Config.load} to get one of these.\n */\nexport class Config {\n /**\n * The {@link https://npmjs.com/jackspeak | JackSpeak} object\n * representing vlt's configuration\n */\n jack: Jack<ConfigDefinitions>\n\n /**\n * Parsed values in effect\n */\n values?: OptionsResults<ConfigDefinitions>\n\n /**\n * Command-specific config values\n */\n commandValues: {\n [cmd in Commands[keyof Commands]]?: ConfigData\n } = {}\n\n /**\n * A flattened object of the parsed configuration\n */\n get options(): ConfigOptions {\n if (this.#options) return this.#options\n const scurry = new PathScurry(this.projectRoot)\n const packageJson = new PackageJson()\n const asRecords = pairsToRecords(this.parse().values)\n const extras = {\n projectRoot: this.projectRoot,\n scurry,\n packageJson,\n monorepo: Monorepo.maybeLoad(this.projectRoot, {\n scurry,\n packageJson,\n load: {\n paths: asRecords.workspace,\n groups: asRecords['workspace-group'],\n },\n }),\n catalog: load<Record<string, string>>(\n 'catalog',\n assertRecordStringString,\n ),\n catalogs: load<Record<string, Record<string, string>>>(\n 'catalogs',\n o =>\n assertRecordStringT(\n o,\n isRecordStringString,\n 'Record<string, Record<string, string>>',\n ),\n ),\n }\n\n const options: Omit<ConfigOptions, 'packageInfo'> = Object.assign(\n asRecords,\n extras,\n )\n\n this.#options = Object.assign(options, {\n packageInfo: new PackageInfoClient(options),\n [kCustomInspect]() {\n return Object.fromEntries(\n Object.entries(options).filter(\n ([k]) =>\n k !== 'monorepo' &&\n k !== 'scurry' &&\n k !== 'packageJson' &&\n k !== 'packageInfo',\n ),\n )\n },\n })\n return this.#options\n }\n\n /**\n * Reset the options value, optionally setting a new project root\n * to recalculate the options.\n */\n resetOptions(projectRoot: string = process.cwd()) {\n this.projectRoot = projectRoot\n this.#options = undefined\n resetCaches()\n }\n\n // memoized options() getter value\n #options?: ConfigOptions\n\n /**\n * positional arguments to the vlt process\n */\n positionals?: string[]\n\n /**\n * Original arguments used for parsing (stored for reload purposes)\n * @internal\n */\n #originalArgs?: string[]\n\n /**\n * The root of the project where a vlt.json, vlt.json,\n * package.json, or .git was found. Not necessarily the `process.cwd()`,\n * though that is the default location.\n *\n * Never walks up as far as `$HOME`. So for example, if a project is in\n * `~/projects/xyz`, then the highest dir it will check is `~/projects`\n */\n projectRoot: string\n\n /**\n * `Record<alias, canonical name>` to dereference command aliases.\n */\n commands: Commands\n\n /**\n * Which command name to use for overriding with command-specific values,\n * determined from the argv when parse() is called.\n */\n command?: Commands[keyof Commands]\n\n constructor(\n jack: Jack<ConfigDefinitions> = definition,\n projectRoot = process.cwd(),\n ) {\n this.projectRoot = projectRoot\n this.commands = commands\n this.jack = jack\n }\n\n /**\n * Parse the arguments and set configuration and positionals accordingly.\n */\n parse(args: string[] = process.argv): this & ParsedConfig {\n if (isParsed(this)) return this\n\n // Store the original args for potential reload\n this.#originalArgs = [...args]\n\n this.jack.loadEnvDefaults()\n const p = this.jack.parseRaw(args)\n\n const fallback = getCommand(p.values['fallback-command'])\n this.command = getCommand(p.positionals[0])\n\n const cmdOrFallback = this.command ?? fallback\n const cmdSpecific =\n cmdOrFallback && this.commandValues[cmdOrFallback]\n if (cmdSpecific) {\n this.jack.setConfigValues(recordsToPairs(cmdSpecific))\n }\n\n // ok, applied cmd-specific defaults, do rest of the parse\n this.jack.applyDefaults(p)\n this.jack.writeEnv(p)\n\n if (this.command) p.positionals.shift()\n else this.command = getCommand(p.values['fallback-command'])\n\n Object.assign(this, p)\n\n /* c8 ignore start - unpossible */\n if (!isParsed(this)) throw error('failed to parse config')\n /* c8 ignore stop */\n\n return this\n }\n\n /**\n * Get a `key=value` list option value as an object.\n *\n * For example, a list option with a vlaue of `['key=value', 'xyz=as=df' ]`\n * would be returned as `{key: 'value', xyz: 'as=df'}`\n *\n * Results are memoized, so subsequent calls for the same key will return the\n * same object. If new strings are added to the list, then the memoized value\n * is *not* updated, so only use once configurations have been fully loaded.\n *\n * If the config value is not set at all, an empty object is returned.\n */\n getRecord(k: OptListKeys<ConfigData>): RecordString {\n const pairs = this.get(k) as\n | (string[] & { [kRecord]?: RecordString })\n | undefined\n if (!pairs) return {}\n if (pairs[kRecord]) return pairs[kRecord]\n const kv = pairs.reduce((kv: RecordString, pair) => {\n const eq = pair.indexOf('=')\n if (eq === -1) return kv\n const key = pair.substring(0, eq)\n const val = pair.substring(eq + 1)\n kv[key] = val\n return kv\n }, {})\n Object.assign(pairs, { [kRecord]: kv })\n return kv\n }\n\n /**\n * Get a configuration value.\n *\n * Note: `key=value` pair configs are returned as a string array. To get them\n * as an object, use {@link Config#getRecord}.\n */\n get<K extends keyof OptionsResults<ConfigDefinitions>>(\n k: K,\n ): OptionsResults<ConfigDefinitions>[K] {\n /* c8 ignore next -- impossible but TS doesn't know that */\n return (this.values ?? this.parse().values)[k]\n }\n\n /**\n * Write the config values to the user or project config file.\n */\n async writeConfigFile(\n this: LoadedConfig,\n which: WhichConfig,\n values: NonNullable<ConfigFileData>,\n ) {\n save('config', pairsToRecords(values), which)\n await this.#reloadConfig()\n }\n\n /**\n * Fold in the provided fields with the existing properties\n * in the config file.\n */\n async addConfigToFile(\n this: LoadedConfig,\n which: WhichConfig,\n values: NonNullable<ConfigFileData>,\n ) {\n return this.writeConfigFile(\n which,\n merge((await this.#maybeLoadConfigFile(which)) ?? {}, values),\n )\n }\n\n // called in this weird bound way so that it can be used by the\n // vlt-json config loading module.\n #validator: Validator<ConfigFileData> = function (\n this: Config,\n c: unknown,\n file: string,\n ) {\n this.#validateConfig(c, file)\n }.bind(this)\n\n #validateConfig(\n c: unknown,\n file: string,\n ): asserts c is ConfigFileData {\n if (!c || typeof c !== 'object' || Array.isArray(c)) {\n throw error('invalid config, expected object', {\n path: file,\n found: c,\n wanted: 'ConfigFileData',\n })\n }\n\n const { command, ...values } = recordsToPairs(c as RecordPairs)\n if (command) {\n for (const [c, opts] of Object.entries(command)) {\n const cmd = getCommand(c)\n if (cmd) {\n this.commandValues[cmd] = merge<ConfigData>(\n this.commandValues[cmd] ?? ({} as ConfigData),\n opts as ConfigData,\n )\n }\n }\n }\n this.jack.setConfigValues(values, file)\n }\n\n /**\n * if the file exists, parse and load it. returns object if data was\n * loaded, or undefined if not.\n */\n async #maybeLoadConfigFile(whichConfig: WhichConfig) {\n return load('config', this.#validator, whichConfig)\n }\n\n /**\n * Deletes the specified config fields from the named file\n * Returns `true` if anything was changed.\n */\n async deleteConfigKeys(\n this: LoadedConfig,\n which: WhichConfig,\n fields: string[],\n ) {\n const data = await this.#maybeLoadConfigFile(which)\n if (!data) return false\n let didSomething = false\n for (const f of fields) {\n const [key, ...sk] = f.split('.') as [\n h: string,\n ...rest: string[],\n ]\n const subs = sk.join('.')\n const k = key as keyof ConfigDefinitions\n const v = data[k]\n if (v === undefined) continue\n if (subs && v && typeof v === 'object') {\n if (Array.isArray(v)) {\n const i = v.findIndex(subvalue =>\n subvalue.startsWith(`${subs}=`),\n )\n if (i !== -1) {\n if (v.length === 1) delete data[k]\n else v.splice(i, 1)\n didSomething = true\n }\n } else {\n if (v[subs] !== undefined) {\n delete v[subs]\n if (Object.keys(v).length === 0) delete data[k]\n didSomething = true\n }\n }\n } else {\n didSomething = true\n delete data[k]\n }\n }\n if (didSomething) await this.writeConfigFile(which, data)\n return didSomething\n }\n\n /**\n * Edit the user or project configuration file.\n *\n * If the file isn't present, then it starts with `{}` so the user has\n * something to work with.\n *\n * If the result is not valid, or no config settings are contained in the\n * file after editing, then it's restored to what it was before, which might\n * mean deleting the file.\n */\n async editConfigFile(\n this: LoadedConfig,\n which: WhichConfig,\n edit: (file: string) => Promise<void> | void,\n ) {\n // load the file as a backup\n // call the edit function\n // reload it\n const file = find(which)\n const backup = await readFile(file, 'utf8').catch(() => undefined)\n if (!backup) {\n await writeFile(\n file,\n JSON.stringify({ config: {} }, null, 2) + '\\n',\n )\n }\n let valid = false\n try {\n await edit(file)\n // force it to reload the file and validate it again\n // if this fails, we roll back.\n const result = reload('config', which)\n save('config', result ?? {}, which)\n valid = true\n } finally {\n if (!valid) {\n // TODO: maybe write the file to a re-edit backup location?\n // then you could do `vlt config edit retry` or something.\n if (backup) {\n await writeFile(file, backup)\n reload(which)\n } else {\n await rm(file, { force: true })\n }\n }\n }\n }\n\n /**\n * Find the local config file and load both it and the user-level config in\n * the XDG config home.\n */\n async loadConfigFile(): Promise<this> {\n await this.#maybeLoadConfigFile('user')\n this.projectRoot = dirname(find('project', this.projectRoot))\n await this.#maybeLoadConfigFile('project')\n return this\n }\n\n /**\n * Clear cached config values to force re-reading from updated files.\n * @internal\n */\n async #reloadConfig() {\n // Clear the memoized options to force recalculation\n this.#options = undefined\n }\n\n /**\n * Force a complete reload of config files from disk.\n * This clears all caches and re-reads config files.\n * Useful for long-running processes that need to pick up config changes.\n */\n async reloadFromDisk(): Promise<void> {\n // Clear the memoized options to force recalculation\n this.#options = undefined\n\n // Clear the parsed state to force re-parsing\n // This is crucial because parse() returns early if already parsed\n this.values = undefined\n this.positionals = undefined\n this.command = undefined\n\n // Clear vlt-json caches for both user and project configs\n // This ensures that the next time config files are read, they'll be re-read from disk\n const { unload } = await import('@vltpkg/vlt-json')\n unload('user')\n unload('project')\n\n // Force reload of config files by calling the load methods again\n // This will re-read the files and re-apply them to the jack parser\n await this.#maybeLoadConfigFile('user')\n await this.#maybeLoadConfigFile('project')\n\n // Re-parse to pick up the updated config values using the original arguments\n this.parse(this.#originalArgs)\n }\n\n /**\n * cache of the loaded config\n */\n static #loaded: LoadedConfig | undefined\n\n /**\n * Load the configuration and return a Promise to a\n * {@link Config} object\n */\n static async load(\n projectRoot = process.cwd(),\n argv = process.argv,\n /**\n * only used in tests, resets the memoization\n * @internal\n */\n reload = false,\n ): Promise<LoadedConfig> {\n if (this.#loaded && !reload) return this.#loaded\n const a = new Config(definition, projectRoot)\n const b = await a.loadConfigFile()\n this.#loaded = b.parse(argv) as LoadedConfig\n return this.#loaded\n }\n}\n\nconst isParsed = (c: Config): c is ParsedConfig =>\n !!(c.values && c.positionals && c.command)\n\nexport type ParsedConfig = Config & {\n command: NonNullable<Config['command']>\n values: OptionsResults<ConfigDefinitions>\n positionals: string[]\n}\n\n/**\n * A fully loaded {@link Config} object\n */\nexport type LoadedConfig = ParsedConfig\n"]}
@@ -1,2 +1,4 @@
1
- export declare const merge: <T extends Record<string, any>>(base: T, add: T) => T;
1
+ type MergeableObject = Record<string, unknown>;
2
+ export declare const merge: <T extends MergeableObject>(base: T, add: T) => T;
3
+ export {};
2
4
  //# sourceMappingURL=merge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/config/merge.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAC3C,CAAC,OACF,CAAC,KACL,CAsBK,CAAA"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/config/merge.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAQ9C,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,eAAe,QACvC,CAAC,OACF,CAAC,KACL,CA2BK,CAAA"}