@vltpkg/cli-sdk 1.0.3 → 1.0.5

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.
@@ -2,6 +2,7 @@ import type { CommandFn, CommandUsage } from '../index.ts';
2
2
  import type { InstallResult } from './install.ts';
3
3
  export type CIResult = Omit<InstallResult, 'buildQueue'>;
4
4
  export declare const needsRegistry = true;
5
+ export declare const needsNpmRegistry = true;
5
6
  export declare const usage: CommandUsage;
6
7
  export declare const views: {
7
8
  readonly json: (i: CIResult) => import("@vltpkg/graph").LockfileData;
@@ -2,6 +2,7 @@ import { install } from '@vltpkg/graph';
2
2
  import { commandUsage } from "../config/usage.js";
3
3
  import { lazyView } from "../view.js";
4
4
  export const needsRegistry = true;
5
+ export const needsNpmRegistry = true;
5
6
  export const usage = () => commandUsage({
6
7
  command: 'ci',
7
8
  usage: '',
@@ -3,6 +3,7 @@ import type { ExecResult } from '../exec-command.ts';
3
3
  import type { CommandFn, CommandUsage } from '../index.ts';
4
4
  export { views } from '../exec-command.ts';
5
5
  export declare const needsRegistry = true;
6
+ export declare const needsNpmRegistry = true;
6
7
  export declare const usage: CommandUsage;
7
8
  export declare const prettyPath: (path: string) => string;
8
9
  export declare const promptFn: PromptFn;
@@ -8,6 +8,7 @@ import { ExecCommand } from "../exec-command.js";
8
8
  import { styleTextStdout } from "../output.js";
9
9
  export { views } from "../exec-command.js";
10
10
  export const needsRegistry = true;
11
+ export const needsNpmRegistry = true;
11
12
  export const usage = () => commandUsage({
12
13
  command: 'exec',
13
14
  usage: '[--package=<pkg>] [--call=<cmd>] [command...]',
@@ -19,6 +19,7 @@ export type InstallResult = {
19
19
  diff?: Diff;
20
20
  };
21
21
  export declare const needsRegistry = true;
22
+ export declare const needsNpmRegistry = true;
22
23
  export declare const usage: CommandUsage;
23
24
  export declare const views: {
24
25
  readonly json: (i: InstallResult) => {
@@ -4,6 +4,7 @@ import { parseAddArgs } from "../parse-add-remove-args.js";
4
4
  import { trackInstall } from "../telemetry.js";
5
5
  import { lazyView } from "../view.js";
6
6
  export const needsRegistry = true;
7
+ export const needsNpmRegistry = true;
7
8
  export const usage = () => commandUsage({
8
9
  command: 'install',
9
10
  usage: '[packages ...]',
@@ -7,6 +7,7 @@ export type UninstallResult = {
7
7
  graph: Graph;
8
8
  };
9
9
  export declare const needsRegistry = true;
10
+ export declare const needsNpmRegistry = true;
10
11
  export declare const usage: CommandUsage;
11
12
  export declare const views: {
12
13
  readonly json: (i: UninstallResult) => import("@vltpkg/graph").LockfileData;
@@ -3,6 +3,7 @@ import { commandUsage } from "../config/usage.js";
3
3
  import { parseRemoveArgs } from "../parse-add-remove-args.js";
4
4
  import { lazyView } from "../view.js";
5
5
  export const needsRegistry = true;
6
+ export const needsNpmRegistry = true;
6
7
  export const usage = () => commandUsage({
7
8
  command: 'uninstall',
8
9
  usage: '[package ...]',
@@ -1,6 +1,7 @@
1
1
  import type { CommandFn, CommandUsage } from '../index.ts';
2
2
  import type { InstallResult } from './install.ts';
3
3
  export declare const needsRegistry = true;
4
+ export declare const needsNpmRegistry = true;
4
5
  export declare const usage: CommandUsage;
5
6
  export declare const views: {
6
7
  readonly json: (i: InstallResult) => {
@@ -3,6 +3,7 @@ import { error } from '@vltpkg/error-cause';
3
3
  import { commandUsage } from "../config/usage.js";
4
4
  import { lazyView } from "../view.js";
5
5
  export const needsRegistry = true;
6
+ export const needsNpmRegistry = true;
6
7
  export const usage = () => commandUsage({
7
8
  command: 'update',
8
9
  usage: '',
@@ -1,9 +1,9 @@
1
1
  import * as dotProp from '@vltpkg/dot-prop';
2
2
  import { error } from '@vltpkg/error-cause';
3
+ import { getId } from '@vltpkg/dep-id';
3
4
  import { PackageInfoClient } from '@vltpkg/package-info';
4
5
  import { SecurityArchive } from '@vltpkg/security-archive';
5
6
  import { Spec } from '@vltpkg/spec';
6
- import { joinDepIDTuple } from '@vltpkg/dep-id';
7
7
  import { commandUsage } from "../config/usage.js";
8
8
  export const needsRegistry = true;
9
9
  export const usage = () => commandUsage({
@@ -231,8 +231,8 @@ export const views = {
231
231
  * Create a minimal NodeLike for SecurityArchive lookup.
232
232
  * Only the fields used by SecurityArchive.start() are needed.
233
233
  */
234
- const createFakeNode = (name, version) => ({
235
- id: joinDepIDTuple(['registry', '', `${name}@${version}`]),
234
+ const createFakeNode = (spec, name, version, options) => ({
235
+ id: getId(spec, { name, version }),
236
236
  name,
237
237
  version,
238
238
  confused: false,
@@ -245,7 +245,7 @@ const createFakeNode = (name, version) => ({
245
245
  dev: false,
246
246
  optional: false,
247
247
  graph: {},
248
- options: {},
248
+ options,
249
249
  /* c8 ignore next 5 - stub methods for NodeLike interface */
250
250
  toJSON: () => ({}),
251
251
  toString: () => `${name}@${version}`,
@@ -311,7 +311,7 @@ export const command = async (conf) => {
311
311
  const version = manifest.version;
312
312
  if (name && version) {
313
313
  try {
314
- const node = createFakeNode(name, version);
314
+ const node = createFakeNode(spec, name, version, conf.options);
315
315
  const archive = await SecurityArchive.start({
316
316
  nodes: [node],
317
317
  });
@@ -17,5 +17,13 @@ export type Command<T> = {
17
17
  * early with an `ECONFIG` error when one of these runs unconfigured.
18
18
  */
19
19
  needsRegistry?: boolean;
20
+ /**
21
+ * Set to `true` by commands that install packages (`install`,
22
+ * `update`, `uninstall`, `ci`, `exec`/`vlx`). `outputCommand()`
23
+ * fails early with an `ECONFIG` error when the alias bare specs
24
+ * resolve through (`registries.npm`, or the alias named by
25
+ * `default-registry-alias`) is not configured.
26
+ */
27
+ needsNpmRegistry?: boolean;
20
28
  };
21
29
  export declare const loadCommand: <T>(command: Commands[keyof Commands] | undefined) => Promise<Command<T>>;
package/dist/output.js CHANGED
@@ -2,7 +2,7 @@ import { formatWithOptions, styleText as utilStyleText, } from 'node:util';
2
2
  import { createSupportsColor } from 'supports-color';
3
3
  import { defaultView } from "./config/definition.js";
4
4
  import { printErr, formatOptions } from "./print-err.js";
5
- import { hasConfiguredRegistry, missingRegistryError, } from "./require-registry.js";
5
+ import { hasConfiguredRegistry, hasNpmRegistry, missingNpmRegistryError, missingRegistryError, } from "./require-registry.js";
6
6
  import { isLazyView, isViewClass, loadLazyView } from "./view.js";
7
7
  import { generateDefaultHelp, generateFullHelp, } from "./custom-help.js";
8
8
  import { flush as flushTelemetry, trackCommand, trackError, } from "./telemetry.js";
@@ -103,7 +103,7 @@ const startView = async (conf, opts, views, { start } = { start: Date.now() }) =
103
103
  export const outputCommand = async (cliCommand, conf, { start, vltVersion } = {
104
104
  start: Date.now(),
105
105
  }) => {
106
- const { usage, views, command, needsRegistry } = cliCommand;
106
+ const { usage, views, command, needsRegistry, needsNpmRegistry } = cliCommand;
107
107
  const stdoutColor = conf.values.color ?? supportsColor(process.stdout);
108
108
  const stderrColor = conf.values.color ?? supportsColor(process.stderr);
109
109
  if (conf.values.help) {
@@ -140,6 +140,9 @@ export const outputCommand = async (cliCommand, conf, { start, vltVersion } = {
140
140
  if (needsRegistry && !hasConfiguredRegistry(conf)) {
141
141
  throw missingRegistryError();
142
142
  }
143
+ if (needsNpmRegistry && !hasNpmRegistry(conf)) {
144
+ throw missingNpmRegistryError(conf.options['default-registry-alias']);
145
+ }
143
146
  const output = await onDone(await command(conf));
144
147
  stopRequestLog();
145
148
  const duration_ms = Date.now() - start;
@@ -5,6 +5,13 @@ import type { LoadedConfig } from './config/index.ts';
5
5
  * everywhere a registry is required but missing.
6
6
  */
7
7
  export declare const missingRegistryError: () => Error;
8
+ /**
9
+ * Install-related commands need the alias that bare specs resolve
10
+ * through (not merely some other configured registry) so packages and
11
+ * transitive deps get stable, alias-keyed DepIDs. That alias is
12
+ * `registries.npm` unless `default-registry-alias` points elsewhere.
13
+ */
14
+ export declare const missingNpmRegistryError: (alias?: string) => Error;
8
15
  /**
9
16
  * Multiple registries are configured and none was selected. Used in
10
17
  * non-interactive contexts where we cannot prompt and there is no
@@ -25,6 +32,15 @@ export declare const resolveRegistryAlias: (conf: LoadedConfig, alias: string) =
25
32
  * the resolver would otherwise accept or prompt for.
26
33
  */
27
34
  export declare const hasConfiguredRegistry: (conf: LoadedConfig) => boolean;
35
+ /**
36
+ * Whether the alias bare specs resolve through is configured:
37
+ * `registries.npm` by default, or whatever `default-registry-alias`
38
+ * points at. A scalar `--registry` or some unrelated alias is not
39
+ * enough: install-related commands need the default alias itself.
40
+ * Kept next to {@link hasConfiguredRegistry} so both pre-command
41
+ * gates share the same config surface.
42
+ */
43
+ export declare const hasNpmRegistry: (conf: LoadedConfig) => boolean;
28
44
  /**
29
45
  * Synchronous, non-interactive registry resolution used by
30
46
  * programmatic callers. Precedence: explicit alias > `--registry`
@@ -1,5 +1,5 @@
1
1
  import { error } from '@vltpkg/error-cause';
2
- import { defaultRegistries } from '@vltpkg/spec';
2
+ import { defaultRegistries, defaultRegistryName } from '@vltpkg/spec';
3
3
  import { selectRegistry } from "./select-registry.js";
4
4
  /**
5
5
  * There is no default registry. This is the single message used
@@ -12,6 +12,20 @@ export const missingRegistryError = () => error([
12
12
  '',
13
13
  'See https://docs.vlt.sh/cli for other ways to set a registry.',
14
14
  ].join('\n'), { code: 'ECONFIG' });
15
+ /**
16
+ * Install-related commands need the alias that bare specs resolve
17
+ * through (not merely some other configured registry) so packages and
18
+ * transitive deps get stable, alias-keyed DepIDs. That alias is
19
+ * `registries.npm` unless `default-registry-alias` points elsewhere.
20
+ */
21
+ export const missingNpmRegistryError = (alias = defaultRegistryName) => error([
22
+ `Missing ${alias} registry configuration.`,
23
+ '',
24
+ `Install commands require the \`registries.${alias}\` alias.`,
25
+ 'Run `vlt setup` to get configured.',
26
+ '',
27
+ 'See https://docs.vlt.sh/cli for other ways to set a registry.',
28
+ ].join('\n'), { code: 'ECONFIG' });
15
29
  /**
16
30
  * Multiple registries are configured and none was selected. Used in
17
31
  * non-interactive contexts where we cannot prompt and there is no
@@ -68,6 +82,15 @@ const gatherCandidates = (conf) => {
68
82
  * the resolver would otherwise accept or prompt for.
69
83
  */
70
84
  export const hasConfiguredRegistry = (conf) => !!conf.options.registry || gatherCandidates(conf).length > 0;
85
+ /**
86
+ * Whether the alias bare specs resolve through is configured:
87
+ * `registries.npm` by default, or whatever `default-registry-alias`
88
+ * points at. A scalar `--registry` or some unrelated alias is not
89
+ * enough: install-related commands need the default alias itself.
90
+ * Kept next to {@link hasConfiguredRegistry} so both pre-command
91
+ * gates share the same config surface.
92
+ */
93
+ export const hasNpmRegistry = (conf) => !!conf.options.registries[conf.options['default-registry-alias']];
71
94
  /**
72
95
  * Synchronous, non-interactive registry resolution used by
73
96
  * programmatic callers. Precedence: explicit alias > `--registry`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vltpkg/cli-sdk",
3
3
  "description": "The source for the vlt CLI",
4
- "version": "1.0.3",
4
+ "version": "1.0.5",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/vltpkg/vltpkg.git",
@@ -14,30 +14,30 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@resvg/resvg-wasm": "^2.6.2",
17
- "@vltpkg/config": "1.0.3",
18
- "@vltpkg/dep-id": "1.0.3",
19
- "@vltpkg/dot-prop": "1.0.3",
20
- "@vltpkg/error-cause": "1.0.3",
21
- "@vltpkg/git": "1.0.3",
22
- "@vltpkg/graph": "1.0.3",
23
- "@vltpkg/graph-run": "1.0.3",
24
- "@vltpkg/init": "1.0.3",
25
- "@vltpkg/output": "1.0.3",
26
- "@vltpkg/package-info": "1.0.3",
27
- "@vltpkg/package-json": "1.0.3",
28
- "@vltpkg/promise-spawn": "1.0.3",
29
- "@vltpkg/query": "1.0.3",
30
- "@vltpkg/registry-client": "1.0.3",
31
- "@vltpkg/rollback-remove": "1.0.3",
32
- "@vltpkg/run": "1.0.3",
33
- "@vltpkg/security-archive": "1.0.3",
34
- "@vltpkg/spec": "1.0.3",
35
- "@vltpkg/types": "1.0.3",
36
- "@vltpkg/url-open": "1.0.3",
37
- "@vltpkg/vlt-json": "1.0.3",
38
- "@vltpkg/vlx": "1.0.3",
39
- "@vltpkg/workspaces": "1.0.3",
40
- "@vltpkg/xdg": "1.0.3",
17
+ "@vltpkg/config": "1.0.5",
18
+ "@vltpkg/dep-id": "1.0.5",
19
+ "@vltpkg/dot-prop": "1.0.5",
20
+ "@vltpkg/error-cause": "1.0.5",
21
+ "@vltpkg/git": "1.0.5",
22
+ "@vltpkg/graph": "1.0.5",
23
+ "@vltpkg/graph-run": "1.0.5",
24
+ "@vltpkg/init": "1.0.5",
25
+ "@vltpkg/output": "1.0.5",
26
+ "@vltpkg/package-info": "1.0.5",
27
+ "@vltpkg/package-json": "1.0.5",
28
+ "@vltpkg/promise-spawn": "1.0.5",
29
+ "@vltpkg/query": "1.0.5",
30
+ "@vltpkg/registry-client": "1.0.5",
31
+ "@vltpkg/rollback-remove": "1.0.5",
32
+ "@vltpkg/run": "1.0.5",
33
+ "@vltpkg/security-archive": "1.0.5",
34
+ "@vltpkg/spec": "1.0.5",
35
+ "@vltpkg/types": "1.0.5",
36
+ "@vltpkg/url-open": "1.0.5",
37
+ "@vltpkg/vlt-json": "1.0.5",
38
+ "@vltpkg/vlx": "1.0.5",
39
+ "@vltpkg/workspaces": "1.0.5",
40
+ "@vltpkg/xdg": "1.0.5",
41
41
  "ansi-to-pre": "^1.0.6",
42
42
  "beautiful-mermaid": "^1.1.3",
43
43
  "chalk": "^5.6.2",