@vltpkg/cli-sdk 0.0.0-29 → 0.0.0-30

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 (44) hide show
  1. package/dist/esm/commands/list.d.ts +1 -1
  2. package/dist/esm/commands/list.d.ts.map +1 -1
  3. package/dist/esm/commands/list.js +67 -36
  4. package/dist/esm/commands/list.js.map +1 -1
  5. package/dist/esm/commands/pack.d.ts.map +1 -1
  6. package/dist/esm/commands/pack.js +17 -8
  7. package/dist/esm/commands/pack.js.map +1 -1
  8. package/dist/esm/commands/pkg.d.ts.map +1 -1
  9. package/dist/esm/commands/pkg.js +39 -23
  10. package/dist/esm/commands/pkg.js.map +1 -1
  11. package/dist/esm/commands/publish.d.ts.map +1 -1
  12. package/dist/esm/commands/publish.js +17 -8
  13. package/dist/esm/commands/publish.js.map +1 -1
  14. package/dist/esm/commands/query.d.ts +1 -1
  15. package/dist/esm/commands/query.d.ts.map +1 -1
  16. package/dist/esm/commands/query.js +62 -36
  17. package/dist/esm/commands/query.js.map +1 -1
  18. package/dist/esm/commands/serve.d.ts +14 -0
  19. package/dist/esm/commands/serve.d.ts.map +1 -0
  20. package/dist/esm/commands/serve.js +97 -0
  21. package/dist/esm/commands/serve.js.map +1 -0
  22. package/dist/esm/commands/version.d.ts.map +1 -1
  23. package/dist/esm/commands/version.js +21 -15
  24. package/dist/esm/commands/version.js.map +1 -1
  25. package/dist/esm/config/definition.d.ts +11 -1
  26. package/dist/esm/config/definition.d.ts.map +1 -1
  27. package/dist/esm/config/definition.js +10 -2
  28. package/dist/esm/config/definition.js.map +1 -1
  29. package/dist/esm/exec-command.d.ts +1 -0
  30. package/dist/esm/exec-command.d.ts.map +1 -1
  31. package/dist/esm/exec-command.js +21 -8
  32. package/dist/esm/exec-command.js.map +1 -1
  33. package/dist/esm/query-host-contexts.d.ts +16 -0
  34. package/dist/esm/query-host-contexts.d.ts.map +1 -0
  35. package/dist/esm/query-host-contexts.js +135 -0
  36. package/dist/esm/query-host-contexts.js.map +1 -0
  37. package/dist/esm/start-gui.d.ts.map +1 -1
  38. package/dist/esm/start-gui.js +10 -3
  39. package/dist/esm/start-gui.js.map +1 -1
  40. package/package.json +26 -25
  41. package/dist/esm/commands/gui.d.ts +0 -6
  42. package/dist/esm/commands/gui.d.ts.map +0 -1
  43. package/dist/esm/commands/gui.js +0 -13
  44. package/dist/esm/commands/gui.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { RegistryClient } from '@vltpkg/registry-client'\nimport type { CacheEntry } from '@vltpkg/registry-client'\nimport { run } from '@vltpkg/run'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { packTarball } from '../pack-tarball.ts'\nimport type { Views } from '../view.ts'\nimport assert from 'node:assert'\nimport { asError } from '@vltpkg/types'\nimport { dirname, resolve } from 'node:path'\nimport prettyBytes from 'pretty-bytes'\nimport { actual } from '@vltpkg/graph'\nimport { Query } from '@vltpkg/query'\nimport type { LoadedConfig } from '../config/index.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'publish',\n usage: '',\n description: `Create a tarball from a package and publish it to the configured registry.\n \n This command will pack the package in the current directory or specified folder,\n and then upload it to the configured registry.`,\n options: {\n tag: {\n description: 'Publish the package with the given tag',\n value: '<tag>',\n },\n access: {\n description: 'Set access level (public or restricted)',\n value: '<level>',\n },\n otp: {\n description: `Provide an OTP to use when publishing a package.`,\n value: '<otp>',\n },\n 'publish-directory': {\n description: `Directory to use for pack and publish operations instead of the current directory.\n The directory must exist and nothing will be copied to it.`,\n value: '<path>',\n },\n },\n })\n\nexport type CommandResultSingle = {\n id: string\n name: string\n version: string\n tag: string\n registry: string\n shasum?: string\n integrity?: string\n size: number\n access: string\n unpackedSize: number\n files: string[]\n}\n\nexport type CommandResult =\n | CommandResultSingle\n | CommandResultSingle[]\n\nexport const views = {\n human: results => {\n const item = (r: CommandResultSingle) => {\n const lines = [\n `📦 Package: ${r.id}`,\n `🏷️ Tag: ${r.tag}`,\n `📡 Registry: ${r.registry}`,\n `📁 ${r.files.length} Files`,\n ...r.files.map(f => ` - ${f}`),\n `📊 Package Size: ${prettyBytes(r.size)}`,\n `📂 Unpacked Size: ${prettyBytes(r.unpackedSize)}`,\n ]\n if (r.shasum) lines.push(`🔒 Shasum: ${r.shasum}`)\n if (r.integrity) lines.push(`🔐 Integrity: ${r.integrity}`)\n return lines.join('\\n')\n }\n return Array.isArray(results) ?\n results.map(item).join('\\n\\n')\n : item(results)\n },\n json: r => r,\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const { options, projectRoot } = conf\n const queryString = conf.get('scope')\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n\n const locations: string[] = []\n let single: string | null = null\n\n if (queryString) {\n const graph = actual.load({\n ...options,\n mainManifest: options.packageJson.read(projectRoot),\n monorepo: options.monorepo,\n loadManifests: false,\n })\n const query = new Query({\n graph,\n specOptions: conf.options,\n securityArchive: undefined,\n })\n const { nodes } = await query.search(queryString, {\n signal: new AbortController().signal,\n })\n for (const node of nodes) {\n const { location } = node.toJSON()\n assert(\n location,\n error(`node ${node.id} has no location`, {\n found: node,\n }),\n )\n locations.push(resolve(projectRoot, location))\n }\n } else if (paths?.length || groups?.length || recursive) {\n for (const workspace of options.monorepo ?? []) {\n locations.push(workspace.fullpath)\n }\n } else {\n single = options.packageJson.find(process.cwd()) ?? projectRoot\n }\n\n if (single) {\n return commandSingle(single, conf)\n }\n\n assert(\n locations.length > 0,\n error('No workspaces or query results found'),\n )\n\n const results: CommandResultSingle[] = []\n for (const location of locations) {\n results.push(await commandSingle(location, conf))\n }\n return results\n}\n\nconst commandSingle = async (\n location: string,\n conf: LoadedConfig,\n) => {\n const manifestPath = conf.options.packageJson.find(location)\n assert(manifestPath, 'No package.json found')\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n assert(\n !manifest.private,\n error('Package has been marked as private'),\n )\n\n const {\n tag = 'latest',\n access,\n registry,\n 'dry-run': dry = false,\n otp,\n } = conf.options\n const registryUrl = new URL(registry)\n\n const runOptions = {\n cwd: manifestDir,\n projectRoot: conf.projectRoot,\n packageJson: conf.options.packageJson,\n manifest,\n ignoreMissing: true,\n ignorePrePost: true,\n }\n\n await run({\n ...runOptions,\n arg0: 'prepublishOnly',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepublish',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepack',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepare',\n })\n\n const {\n name,\n version,\n tarballName,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n } = await packTarball(manifest, manifestDir, conf)\n\n await run({\n ...runOptions,\n arg0: 'postpack',\n })\n\n await run({\n ...runOptions,\n arg0: 'publish',\n })\n\n const publishMetadata = {\n _id: name,\n name,\n description: manifest.description || '',\n 'dist-tags': {\n [tag]: version,\n },\n versions: {\n [version]: {\n ...manifest,\n _id: `${name}@${version}`,\n _nodeVersion: process.versions.node,\n dist: {\n ...manifest.dist,\n integrity,\n shasum,\n tarball: new URL(`${name}/-/${tarballName}`, registryUrl)\n .href,\n },\n },\n },\n access,\n _attachments: {\n [tarballName]: {\n content_type: 'application/octet-stream',\n data: tarballData.toString('base64'),\n length: tarballData.length,\n },\n },\n }\n\n const rc = new RegistryClient(conf.options)\n const publishUrl = new URL(\n name.startsWith('@') ? name.replace('/', '%2F') : name,\n registryUrl,\n )\n\n if (!dry) {\n let response: CacheEntry\n try {\n response = await rc.request(publishUrl, {\n method: 'PUT',\n headers: {\n 'content-type': 'application/json',\n // These control what type of OTP auth flow is used\n 'npm-auth-type': 'web',\n 'npm-command': 'publish',\n },\n body: JSON.stringify(publishMetadata),\n otp,\n })\n } catch (err) {\n throw error('Failed to publish package', {\n cause: asError(err),\n })\n }\n\n if (response.statusCode !== 200 && response.statusCode !== 201) {\n throw error('Failed to publish package', {\n url: publishUrl,\n response,\n })\n }\n }\n\n await run({\n ...runOptions,\n arg0: 'postpublish',\n })\n\n return {\n id: `${name}@${version}`,\n name,\n version,\n tag,\n access,\n registry: registryUrl.origin,\n integrity,\n shasum,\n size: tarballData.length,\n unpackedSize,\n files,\n }\n}\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { RegistryClient } from '@vltpkg/registry-client'\nimport type { CacheEntry } from '@vltpkg/registry-client'\nimport { run } from '@vltpkg/run'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { packTarball } from '../pack-tarball.ts'\nimport type { Views } from '../view.ts'\nimport assert from 'node:assert'\nimport { asError } from '@vltpkg/types'\nimport { dirname, resolve } from 'node:path'\nimport prettyBytes from 'pretty-bytes'\nimport { actual } from '@vltpkg/graph'\nimport { Query } from '@vltpkg/query'\nimport type { LoadedConfig } from '../config/index.ts'\nimport { createHostContextsMap } from '../query-host-contexts.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'publish',\n usage: '',\n description: `Create a tarball from a package and publish it to the configured registry.\n \n This command will pack the package in the current directory or specified folder,\n and then upload it to the configured registry.`,\n options: {\n tag: {\n description: 'Publish the package with the given tag',\n value: '<tag>',\n },\n access: {\n description: 'Set access level (public or restricted)',\n value: '<level>',\n },\n otp: {\n description: `Provide an OTP to use when publishing a package.`,\n value: '<otp>',\n },\n 'publish-directory': {\n description: `Directory to use for pack and publish operations instead of the current directory.\n The directory must exist and nothing will be copied to it.`,\n value: '<path>',\n },\n },\n })\n\nexport type CommandResultSingle = {\n id: string\n name: string\n version: string\n tag: string\n registry: string\n shasum?: string\n integrity?: string\n size: number\n access: string\n unpackedSize: number\n files: string[]\n}\n\nexport type CommandResult =\n | CommandResultSingle\n | CommandResultSingle[]\n\nexport const views = {\n human: results => {\n const item = (r: CommandResultSingle) => {\n const lines = [\n `📦 Package: ${r.id}`,\n `🏷️ Tag: ${r.tag}`,\n `📡 Registry: ${r.registry}`,\n `📁 ${r.files.length} Files`,\n ...r.files.map(f => ` - ${f}`),\n `📊 Package Size: ${prettyBytes(r.size)}`,\n `📂 Unpacked Size: ${prettyBytes(r.unpackedSize)}`,\n ]\n if (r.shasum) lines.push(`🔒 Shasum: ${r.shasum}`)\n if (r.integrity) lines.push(`🔐 Integrity: ${r.integrity}`)\n return lines.join('\\n')\n }\n return Array.isArray(results) ?\n results.map(item).join('\\n\\n')\n : item(results)\n },\n json: r => r,\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const { options, projectRoot } = conf\n const queryString = conf.get('scope')\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n\n const locations: string[] = []\n let single: string | null = null\n\n if (queryString) {\n const mainManifest = options.packageJson.maybeRead(projectRoot)\n let graph\n if (mainManifest) {\n graph = actual.load({\n ...options,\n mainManifest,\n monorepo: options.monorepo,\n loadManifests: false,\n })\n }\n const hostContexts = await createHostContextsMap(conf)\n const query = new Query({\n /* c8 ignore next */\n nodes: graph ? new Set(graph.nodes.values()) : new Set(),\n edges: graph?.edges ?? new Set(),\n importers: graph?.importers ?? new Set(),\n securityArchive: undefined,\n hostContexts,\n })\n const { nodes } = await query.search(queryString, {\n signal: new AbortController().signal,\n })\n for (const node of nodes) {\n const { location } = node.toJSON()\n assert(\n location,\n error(`node ${node.id} has no location`, {\n found: node,\n }),\n )\n locations.push(resolve(projectRoot, location))\n }\n } else if (paths?.length || groups?.length || recursive) {\n for (const workspace of options.monorepo ?? []) {\n locations.push(workspace.fullpath)\n }\n } else {\n single = options.packageJson.find(process.cwd()) ?? projectRoot\n }\n\n if (single) {\n return commandSingle(single, conf)\n }\n\n assert(\n locations.length > 0,\n error('No workspaces or query results found'),\n )\n\n const results: CommandResultSingle[] = []\n for (const location of locations) {\n results.push(await commandSingle(location, conf))\n }\n return results\n}\n\nconst commandSingle = async (\n location: string,\n conf: LoadedConfig,\n) => {\n const manifestPath = conf.options.packageJson.find(location)\n assert(manifestPath, 'No package.json found')\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n assert(\n !manifest.private,\n error('Package has been marked as private'),\n )\n\n const {\n tag = 'latest',\n access,\n registry,\n 'dry-run': dry = false,\n otp,\n } = conf.options\n const registryUrl = new URL(registry)\n\n const runOptions = {\n cwd: manifestDir,\n projectRoot: conf.projectRoot,\n packageJson: conf.options.packageJson,\n manifest,\n ignoreMissing: true,\n ignorePrePost: true,\n }\n\n await run({\n ...runOptions,\n arg0: 'prepublishOnly',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepublish',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepack',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepare',\n })\n\n const {\n name,\n version,\n tarballName,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n } = await packTarball(manifest, manifestDir, conf)\n\n await run({\n ...runOptions,\n arg0: 'postpack',\n })\n\n await run({\n ...runOptions,\n arg0: 'publish',\n })\n\n const publishMetadata = {\n _id: name,\n name,\n description: manifest.description || '',\n 'dist-tags': {\n [tag]: version,\n },\n versions: {\n [version]: {\n ...manifest,\n _id: `${name}@${version}`,\n _nodeVersion: process.versions.node,\n dist: {\n ...manifest.dist,\n integrity,\n shasum,\n tarball: new URL(`${name}/-/${tarballName}`, registryUrl)\n .href,\n },\n },\n },\n access,\n _attachments: {\n [tarballName]: {\n content_type: 'application/octet-stream',\n data: tarballData.toString('base64'),\n length: tarballData.length,\n },\n },\n }\n\n const rc = new RegistryClient(conf.options)\n const publishUrl = new URL(\n name.startsWith('@') ? name.replace('/', '%2F') : name,\n registryUrl,\n )\n\n if (!dry) {\n let response: CacheEntry\n try {\n response = await rc.request(publishUrl, {\n method: 'PUT',\n headers: {\n 'content-type': 'application/json',\n // These control what type of OTP auth flow is used\n 'npm-auth-type': 'web',\n 'npm-command': 'publish',\n },\n body: JSON.stringify(publishMetadata),\n otp,\n })\n } catch (err) {\n throw error('Failed to publish package', {\n cause: asError(err),\n })\n }\n\n if (response.statusCode !== 200 && response.statusCode !== 201) {\n throw error('Failed to publish package', {\n url: publishUrl,\n response,\n })\n }\n }\n\n await run({\n ...runOptions,\n arg0: 'postpublish',\n })\n\n return {\n id: `${name}@${version}`,\n name,\n version,\n tag,\n access,\n registry: registryUrl.origin,\n integrity,\n shasum,\n size: tarballData.length,\n unpackedSize,\n files,\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { HumanReadableOutputGraph, JSONOutputGraph, MermaidOutputGraph } from '@vltpkg/graph';
2
1
  import { humanReadableOutput, jsonOutput, mermaidOutput } from '@vltpkg/graph';
2
+ import type { HumanReadableOutputGraph, JSONOutputGraph, MermaidOutputGraph } from '@vltpkg/graph';
3
3
  import type { CommandFn, CommandUsage } from '../index.ts';
4
4
  export declare const usage: CommandUsage;
5
5
  type QueryResult = JSONOutputGraph & MermaidOutputGraph & HumanReadableOutputGraph & {
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAEnB,MAAM,eAAe,CAAA;AACtB,OAAO,EAGL,mBAAmB,EACnB,UAAU,EACV,aAAa,EAEd,MAAM,eAAe,CAAA;AAOtB,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK1D,eAAO,MAAM,KAAK,EAAE,YA4EhB,CAAA;AAEJ,KAAK,WAAW,GAAG,eAAe,GAChC,kBAAkB,GAClB,wBAAwB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAA;AAqBpD,eAAO,MAAM,KAAK;;;;;CAUqB,CAAA;AAEvC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAkG1C,CAAA"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EACnB,UAAU,EACV,aAAa,EAEd,MAAM,eAAe,CAAA;AAQtB,OAAO,KAAK,EACV,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAGnB,MAAM,eAAe,CAAA;AAGtB,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1D,eAAO,MAAM,KAAK,EAAE,YA4EhB,CAAA;AAEJ,KAAK,WAAW,GAAG,eAAe,GAChC,kBAAkB,GAClB,wBAAwB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAA;AAqBpD,eAAO,MAAM,KAAK;;;;;CAUqB,CAAA;AAEvC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAqI1C,CAAA"}
@@ -3,8 +3,9 @@ import { error } from '@vltpkg/error-cause';
3
3
  import LZString from 'lz-string';
4
4
  import { Query } from '@vltpkg/query';
5
5
  import { SecurityArchive } from '@vltpkg/security-archive';
6
- import { commandUsage } from "../config/usage.js";
7
6
  import { startGUI } from "../start-gui.js";
7
+ import { commandUsage } from "../config/usage.js";
8
+ import { createHostContextsMap } from "../query-host-contexts.js";
8
9
  export const usage = () => commandUsage({
9
10
  command: 'query',
10
11
  usage: [
@@ -102,43 +103,54 @@ export const views = {
102
103
  export const command = async (conf) => {
103
104
  const modifiers = GraphModifier.maybeLoad(conf.options);
104
105
  const monorepo = conf.options.monorepo;
105
- const mainManifest = conf.options.packageJson.read(conf.options.projectRoot);
106
- const graph = actual.load({
107
- ...conf.options,
108
- mainManifest,
109
- modifiers,
110
- monorepo,
111
- loadManifests: true,
112
- });
113
- const defaultQueryString = '*';
106
+ const mainManifest = conf.options.packageJson.maybeRead(conf.options.projectRoot);
107
+ let graph;
108
+ let securityArchive;
109
+ // optionally load the cwd graph if we found a package.json file
110
+ if (mainManifest) {
111
+ graph = actual.load({
112
+ ...conf.options,
113
+ mainManifest,
114
+ modifiers,
115
+ monorepo,
116
+ loadManifests: true,
117
+ });
118
+ securityArchive = await SecurityArchive.start({
119
+ nodes: [...graph.nodes.values()],
120
+ });
121
+ }
122
+ // retrieve default values and set up host contexts
123
+ const defaultProjectQueryString = '*';
124
+ const defaultLocalScopeQueryString = ':host(local) *';
114
125
  const positionalQueryString = conf.positionals[0];
115
126
  const targetQueryString = conf.get('target');
127
+ const scopeQueryString = conf.get('scope');
116
128
  const queryString = targetQueryString || positionalQueryString;
117
- const securityArchive = await SecurityArchive.start({
118
- graph,
119
- specOptions: conf.options,
120
- });
121
- const query = new Query({
122
- graph,
123
- specOptions: conf.options,
124
- securityArchive,
125
- });
129
+ const hostContexts = await createHostContextsMap(conf);
126
130
  const importers = new Set();
127
131
  const scopeIDs = [];
128
132
  // Handle --scope option to add scope nodes as importers
129
- const scopeQueryString = conf.get('scope');
130
133
  let scopeNodes;
131
134
  if (scopeQueryString) {
132
135
  // Run scope query to get all matching nodes
136
+ /* c8 ignore start */
137
+ const edges = graph?.edges ?? new Set();
138
+ const nodes = graph?.nodes ?
139
+ new Set(graph.nodes.values())
140
+ : new Set();
141
+ const importers = graph?.importers ?? new Set();
142
+ /* c8 ignore stop */
133
143
  const scopeQuery = new Query({
134
- graph,
135
- specOptions: conf.options,
144
+ edges,
145
+ nodes,
146
+ importers,
136
147
  securityArchive,
148
+ hostContexts,
137
149
  });
138
- const { nodes } = await scopeQuery.search(scopeQueryString, {
150
+ const { nodes: resultNodes } = await scopeQuery.search(scopeQueryString, {
139
151
  signal: new AbortController().signal,
140
152
  });
141
- scopeNodes = nodes;
153
+ scopeNodes = resultNodes;
142
154
  }
143
155
  if (scopeQueryString && scopeNodes) {
144
156
  // Add all scope nodes to importers Set (treat them as top-level items)
@@ -146,10 +158,10 @@ export const command = async (conf) => {
146
158
  importers.add(asNode(queryNode));
147
159
  }
148
160
  }
149
- else {
161
+ else if ('workspace' in conf.values) {
150
162
  // if in a workspace environment, select only the specified
151
163
  // workspaces as top-level items
152
- if (monorepo) {
164
+ if (monorepo && graph) {
153
165
  for (const workspace of monorepo.filter(conf.values)) {
154
166
  const w = graph.nodes.get(workspace.id);
155
167
  if (w) {
@@ -158,16 +170,25 @@ export const command = async (conf) => {
158
170
  }
159
171
  }
160
172
  }
161
- // if no top-level item was set then by default
162
- // we just set all importers as top-level items
163
- if (importers.size === 0) {
164
- for (const importer of graph.importers) {
165
- importers.add(importer);
166
- }
167
- }
168
173
  }
169
174
  // retrieve the selected nodes and edges
170
- const { edges, nodes } = await query.search(queryString || defaultQueryString, {
175
+ const edges_ = graph?.edges ?? new Set();
176
+ const nodes_ = graph?.nodes ?
177
+ new Set(graph.nodes.values())
178
+ : new Set();
179
+ const importers_ = importers.size === 0 && graph ?
180
+ new Set([graph.mainImporter])
181
+ : importers;
182
+ const q = new Query({
183
+ edges: edges_,
184
+ nodes: nodes_,
185
+ importers: importers_,
186
+ securityArchive,
187
+ hostContexts,
188
+ });
189
+ const query = queryString ||
190
+ (graph ? defaultProjectQueryString : defaultLocalScopeQueryString);
191
+ const { edges, nodes, importers: queryResultImporters, } = await q.search(query, {
171
192
  signal: new AbortController().signal,
172
193
  scopeIDs: scopeIDs.length > 0 ? scopeIDs : undefined,
173
194
  });
@@ -178,11 +199,16 @@ export const command = async (conf) => {
178
199
  });
179
200
  }
180
201
  return {
181
- importers,
202
+ importers: importers.size === 0 ?
203
+ new Set(queryResultImporters)
204
+ : importers,
182
205
  edges,
183
206
  nodes,
184
207
  highlightSelection: !!(targetQueryString || positionalQueryString),
185
- queryString: queryString || defaultQueryString,
208
+ queryString: queryString ||
209
+ (graph ?
210
+ defaultProjectQueryString
211
+ : defaultLocalScopeQueryString),
186
212
  };
187
213
  };
188
214
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/commands/query.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EdgeLike,\n HumanReadableOutputGraph,\n JSONOutputGraph,\n MermaidOutputGraph,\n Node,\n} from '@vltpkg/graph'\nimport {\n actual,\n asNode,\n humanReadableOutput,\n jsonOutput,\n mermaidOutput,\n GraphModifier,\n} from '@vltpkg/graph'\nimport { error } from '@vltpkg/error-cause'\nimport LZString from 'lz-string'\nimport { Query } from '@vltpkg/query'\nimport { SecurityArchive } from '@vltpkg/security-archive'\nimport type { DepID } from '@vltpkg/dep-id'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { startGUI } from '../start-gui.ts'\nimport type { Views } from '../view.ts'\nimport type { LoadedConfig } from '../config/index.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'query',\n usage: [\n '',\n '<query> --view=<human | json | mermaid | gui>',\n '<query> --expect-results=<comparison string>',\n '--target=<query> --view=<human | json | mermaid | gui>',\n ],\n description: `List installed dependencies matching the provided query.\n\n The vlt Dependency Selector Syntax is a CSS-like query language that\n allows you to filter installed dependencies using a variety of metadata\n in the form of CSS-like attributes, pseudo selectors & combinators.\n\n The --scope and --target options accepts DSS query selectors to filter\n packages. Using --scope, you can specify which packages to treat as the\n top-level items in the output graph. The --target option can be used as\n an alternative to positional arguments, it allows you to filter what\n dependencies to include in the output. Using both options allows you to\n render subgraphs of the dependency graph.\n\n Defaults to listing all dependencies of the project root and workspaces.`,\n\n examples: {\n [`'#foo'`]: {\n description: 'Query dependencies declared as \"foo\"',\n },\n [`'*:workspace > *:peer'`]: {\n description: 'Query all peer dependencies of workspaces',\n },\n [`':project > *:attr(scripts, [build])'`]: {\n description:\n 'Query all direct project dependencies with a \"build\" script',\n },\n [`'[name^=\"@vltpkg\"]'`]: {\n description:\n 'Query packages with names starting with \"@vltpkg\"',\n },\n [`'*:license(copyleft) --expect-results=0'`]: {\n description: 'Errors if a copyleft licensed package is found',\n },\n '--scope=\":root > #dependency-name\"': {\n description:\n 'Defines a direct dependency as the output top-level scope',\n },\n [`'--target=\"*\"'`]: {\n description: 'Query all dependencies using the target option',\n },\n [`'--target=\":workspace > *:peer\"'`]: {\n description:\n 'Query all peer dependencies of workspaces using target option',\n },\n },\n options: {\n 'expect-results': {\n value: '[number | string]',\n description:\n 'Sets an expected number of resulting items. Errors if the number of resulting items does not match the set value. Accepts a specific numeric value or a string value starting with either \">\", \"<\", \">=\" or \"<=\" followed by a numeric value to be compared.',\n },\n scope: {\n value: '<query>',\n description:\n 'Query selector to select top-level packages using the DSS query language syntax.',\n },\n target: {\n value: '<query>',\n description:\n 'Query selector to filter packages using DSS syntax.',\n },\n view: {\n value: '[human | json | mermaid | gui]',\n description:\n 'Output format. Defaults to human-readable or json if no tty.',\n },\n },\n })\n\ntype QueryResult = JSONOutputGraph &\n MermaidOutputGraph &\n HumanReadableOutputGraph & { queryString: string }\n\nconst validateExpectedResult = (\n conf: LoadedConfig,\n edges: EdgeLike[],\n): boolean => {\n const expectResults = conf.values['expect-results']\n if (expectResults?.startsWith('>=')) {\n return edges.length >= parseInt(expectResults.slice(2).trim(), 10)\n } else if (expectResults?.startsWith('<=')) {\n return edges.length <= parseInt(expectResults.slice(2).trim(), 10)\n } else if (expectResults?.startsWith('>')) {\n return edges.length > parseInt(expectResults.slice(1).trim(), 10)\n } else if (expectResults?.startsWith('<')) {\n return edges.length < parseInt(expectResults.slice(1).trim(), 10)\n } else if (expectResults) {\n return edges.length === parseInt(expectResults.trim(), 10)\n }\n return true\n}\n\nexport const views = {\n json: jsonOutput,\n mermaid: mermaidOutput,\n human: humanReadableOutput,\n gui: async ({ queryString }, _, conf) => {\n await startGUI(\n conf,\n `/explore/${LZString.compressToEncodedURIComponent(queryString)}/overview`,\n )\n },\n} as const satisfies Views<QueryResult>\n\nexport const command: CommandFn<QueryResult> = async conf => {\n const modifiers = GraphModifier.maybeLoad(conf.options)\n const monorepo = conf.options.monorepo\n const mainManifest = conf.options.packageJson.read(\n conf.options.projectRoot,\n )\n const graph = actual.load({\n ...conf.options,\n mainManifest,\n modifiers,\n monorepo,\n loadManifests: true,\n })\n\n const defaultQueryString = '*'\n const positionalQueryString = conf.positionals[0]\n const targetQueryString = conf.get('target')\n const queryString = targetQueryString || positionalQueryString\n const securityArchive = await SecurityArchive.start({\n graph,\n specOptions: conf.options,\n })\n const query = new Query({\n graph,\n specOptions: conf.options,\n securityArchive,\n })\n\n const importers = new Set<Node>()\n const scopeIDs: DepID[] = []\n\n // Handle --scope option to add scope nodes as importers\n const scopeQueryString = conf.get('scope')\n let scopeNodes\n if (scopeQueryString) {\n // Run scope query to get all matching nodes\n const scopeQuery = new Query({\n graph,\n specOptions: conf.options,\n securityArchive,\n })\n const { nodes } = await scopeQuery.search(scopeQueryString, {\n signal: new AbortController().signal,\n })\n scopeNodes = nodes\n }\n\n if (scopeQueryString && scopeNodes) {\n // Add all scope nodes to importers Set (treat them as top-level items)\n for (const queryNode of scopeNodes) {\n importers.add(asNode(queryNode))\n }\n } else {\n // if in a workspace environment, select only the specified\n // workspaces as top-level items\n if (monorepo) {\n for (const workspace of monorepo.filter(conf.values)) {\n const w: Node | undefined = graph.nodes.get(workspace.id)\n if (w) {\n importers.add(w)\n scopeIDs.push(workspace.id)\n }\n }\n }\n // if no top-level item was set then by default\n // we just set all importers as top-level items\n if (importers.size === 0) {\n for (const importer of graph.importers) {\n importers.add(importer)\n }\n }\n }\n\n // retrieve the selected nodes and edges\n const { edges, nodes } = await query.search(\n queryString || defaultQueryString,\n {\n signal: new AbortController().signal,\n scopeIDs: scopeIDs.length > 0 ? scopeIDs : undefined,\n },\n )\n\n if (!validateExpectedResult(conf, edges)) {\n throw error('Unexpected number of items', {\n found: edges.length,\n wanted: conf.values['expect-results'],\n })\n }\n\n return {\n importers,\n edges,\n nodes,\n highlightSelection: !!(\n targetQueryString || positionalQueryString\n ),\n queryString: queryString || defaultQueryString,\n }\n}\n"]}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/commands/query.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n actual,\n asNode,\n humanReadableOutput,\n jsonOutput,\n mermaidOutput,\n GraphModifier,\n} from '@vltpkg/graph'\nimport { error } from '@vltpkg/error-cause'\nimport LZString from 'lz-string'\nimport { Query } from '@vltpkg/query'\nimport { SecurityArchive } from '@vltpkg/security-archive'\nimport { startGUI } from '../start-gui.ts'\nimport { commandUsage } from '../config/usage.ts'\nimport { createHostContextsMap } from '../query-host-contexts.ts'\nimport type {\n HumanReadableOutputGraph,\n JSONOutputGraph,\n MermaidOutputGraph,\n Node,\n Graph,\n} from '@vltpkg/graph'\nimport type { DepID } from '@vltpkg/dep-id'\nimport type { EdgeLike, NodeLike } from '@vltpkg/types'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport type { Views } from '../view.ts'\nimport type { LoadedConfig } from '../config/index.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'query',\n usage: [\n '',\n '<query> --view=<human | json | mermaid | gui>',\n '<query> --expect-results=<comparison string>',\n '--target=<query> --view=<human | json | mermaid | gui>',\n ],\n description: `List installed dependencies matching the provided query.\n\n The vlt Dependency Selector Syntax is a CSS-like query language that\n allows you to filter installed dependencies using a variety of metadata\n in the form of CSS-like attributes, pseudo selectors & combinators.\n\n The --scope and --target options accepts DSS query selectors to filter\n packages. Using --scope, you can specify which packages to treat as the\n top-level items in the output graph. The --target option can be used as\n an alternative to positional arguments, it allows you to filter what\n dependencies to include in the output. Using both options allows you to\n render subgraphs of the dependency graph.\n\n Defaults to listing all dependencies of the project root and workspaces.`,\n\n examples: {\n [`'#foo'`]: {\n description: 'Query dependencies declared as \"foo\"',\n },\n [`'*:workspace > *:peer'`]: {\n description: 'Query all peer dependencies of workspaces',\n },\n [`':project > *:attr(scripts, [build])'`]: {\n description:\n 'Query all direct project dependencies with a \"build\" script',\n },\n [`'[name^=\"@vltpkg\"]'`]: {\n description:\n 'Query packages with names starting with \"@vltpkg\"',\n },\n [`'*:license(copyleft) --expect-results=0'`]: {\n description: 'Errors if a copyleft licensed package is found',\n },\n '--scope=\":root > #dependency-name\"': {\n description:\n 'Defines a direct dependency as the output top-level scope',\n },\n [`'--target=\"*\"'`]: {\n description: 'Query all dependencies using the target option',\n },\n [`'--target=\":workspace > *:peer\"'`]: {\n description:\n 'Query all peer dependencies of workspaces using target option',\n },\n },\n options: {\n 'expect-results': {\n value: '[number | string]',\n description:\n 'Sets an expected number of resulting items. Errors if the number of resulting items does not match the set value. Accepts a specific numeric value or a string value starting with either \">\", \"<\", \">=\" or \"<=\" followed by a numeric value to be compared.',\n },\n scope: {\n value: '<query>',\n description:\n 'Query selector to select top-level packages using the DSS query language syntax.',\n },\n target: {\n value: '<query>',\n description:\n 'Query selector to filter packages using DSS syntax.',\n },\n view: {\n value: '[human | json | mermaid | gui]',\n description:\n 'Output format. Defaults to human-readable or json if no tty.',\n },\n },\n })\n\ntype QueryResult = JSONOutputGraph &\n MermaidOutputGraph &\n HumanReadableOutputGraph & { queryString: string }\n\nconst validateExpectedResult = (\n conf: LoadedConfig,\n edges: EdgeLike[],\n): boolean => {\n const expectResults = conf.values['expect-results']\n if (expectResults?.startsWith('>=')) {\n return edges.length >= parseInt(expectResults.slice(2).trim(), 10)\n } else if (expectResults?.startsWith('<=')) {\n return edges.length <= parseInt(expectResults.slice(2).trim(), 10)\n } else if (expectResults?.startsWith('>')) {\n return edges.length > parseInt(expectResults.slice(1).trim(), 10)\n } else if (expectResults?.startsWith('<')) {\n return edges.length < parseInt(expectResults.slice(1).trim(), 10)\n } else if (expectResults) {\n return edges.length === parseInt(expectResults.trim(), 10)\n }\n return true\n}\n\nexport const views = {\n json: jsonOutput,\n mermaid: mermaidOutput,\n human: humanReadableOutput,\n gui: async ({ queryString }, _, conf) => {\n await startGUI(\n conf,\n `/explore/${LZString.compressToEncodedURIComponent(queryString)}/overview`,\n )\n },\n} as const satisfies Views<QueryResult>\n\nexport const command: CommandFn<QueryResult> = async conf => {\n const modifiers = GraphModifier.maybeLoad(conf.options)\n const monorepo = conf.options.monorepo\n const mainManifest = conf.options.packageJson.maybeRead(\n conf.options.projectRoot,\n )\n let graph: Graph | undefined\n let securityArchive: SecurityArchive | undefined\n\n // optionally load the cwd graph if we found a package.json file\n if (mainManifest) {\n graph = actual.load({\n ...conf.options,\n mainManifest,\n modifiers,\n monorepo,\n loadManifests: true,\n })\n securityArchive = await SecurityArchive.start({\n nodes: [...graph.nodes.values()],\n })\n }\n\n // retrieve default values and set up host contexts\n const defaultProjectQueryString = '*'\n const defaultLocalScopeQueryString = ':host(local) *'\n const positionalQueryString = conf.positionals[0]\n const targetQueryString = conf.get('target')\n const scopeQueryString = conf.get('scope')\n const queryString = targetQueryString || positionalQueryString\n const hostContexts = await createHostContextsMap(conf)\n const importers = new Set<Node>()\n const scopeIDs: DepID[] = []\n\n // Handle --scope option to add scope nodes as importers\n let scopeNodes\n if (scopeQueryString) {\n // Run scope query to get all matching nodes\n /* c8 ignore start */\n const edges = graph?.edges ?? new Set()\n const nodes =\n graph?.nodes ?\n new Set<NodeLike>(graph.nodes.values())\n : new Set<NodeLike>()\n const importers = graph?.importers ?? new Set()\n /* c8 ignore stop */\n const scopeQuery = new Query({\n edges,\n nodes,\n importers,\n securityArchive,\n hostContexts,\n })\n const { nodes: resultNodes } = await scopeQuery.search(\n scopeQueryString,\n {\n signal: new AbortController().signal,\n },\n )\n scopeNodes = resultNodes\n }\n\n if (scopeQueryString && scopeNodes) {\n // Add all scope nodes to importers Set (treat them as top-level items)\n for (const queryNode of scopeNodes) {\n importers.add(asNode(queryNode))\n }\n } else if ('workspace' in conf.values) {\n // if in a workspace environment, select only the specified\n // workspaces as top-level items\n if (monorepo && graph) {\n for (const workspace of monorepo.filter(conf.values)) {\n const w: Node | undefined = graph.nodes.get(workspace.id)\n if (w) {\n importers.add(w)\n scopeIDs.push(workspace.id)\n }\n }\n }\n }\n\n // retrieve the selected nodes and edges\n const edges_ = graph?.edges ?? new Set()\n const nodes_ =\n graph?.nodes ?\n new Set<NodeLike>(graph.nodes.values())\n : new Set<NodeLike>()\n const importers_ =\n importers.size === 0 && graph ?\n new Set([graph.mainImporter])\n : importers\n const q = new Query({\n edges: edges_,\n nodes: nodes_,\n importers: importers_,\n securityArchive,\n hostContexts,\n })\n const query =\n queryString ||\n (graph ? defaultProjectQueryString : defaultLocalScopeQueryString)\n const {\n edges,\n nodes,\n importers: queryResultImporters,\n } = await q.search(query, {\n signal: new AbortController().signal,\n scopeIDs: scopeIDs.length > 0 ? scopeIDs : undefined,\n })\n\n if (!validateExpectedResult(conf, edges)) {\n throw error('Unexpected number of items', {\n found: edges.length,\n wanted: conf.values['expect-results'],\n })\n }\n\n return {\n importers:\n importers.size === 0 ?\n new Set(queryResultImporters)\n : importers,\n edges,\n nodes,\n highlightSelection: !!(\n targetQueryString || positionalQueryString\n ),\n queryString:\n queryString ||\n (graph ?\n defaultProjectQueryString\n : defaultLocalScopeQueryString),\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import type { CommandFn, CommandUsage } from '../index.ts';
2
+ export declare const usage: CommandUsage;
3
+ export type ServeResult = {
4
+ guiPort: number;
5
+ registryPort: number;
6
+ uiURL: string;
7
+ registryURL: string;
8
+ };
9
+ export declare const views: {
10
+ readonly human: (result: ServeResult) => void;
11
+ readonly json: (result: ServeResult) => ServeResult;
12
+ };
13
+ export declare const command: CommandFn<ServeResult>;
14
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1D,eAAO,MAAM,KAAK,EAAE,YAyBhB,CAAA;AAEJ,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,KAAK;6BACA,WAAW;4BAcZ,WAAW;CACW,CAAA;AAEvC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAgE1C,CAAA"}
@@ -0,0 +1,97 @@
1
+ import { onExit } from 'signal-exit';
2
+ import { error } from '@vltpkg/error-cause';
3
+ import { exec, execFG } from '@vltpkg/run';
4
+ import * as vlx from '@vltpkg/vlx';
5
+ import { ExecCommand } from "../exec-command.js";
6
+ import { commandUsage } from "../config/usage.js";
7
+ import { stdout, styleTextStdout } from "../output.js";
8
+ import { startGUI } from "../start-gui.js";
9
+ export const usage = () => commandUsage({
10
+ command: 'serve',
11
+ usage: '',
12
+ description: `Start a local development server that runs both the browser-based
13
+ UI server and the VSR (vlt serverless registry) registry instance.
14
+
15
+ The UI server will start first on port 8000 (or the next
16
+ available port), and then the VSR registry will start on
17
+ port 1337.
18
+
19
+ This allows you to develop and test the full vlt ecosystem
20
+ locally, including package publishing and installation from
21
+ your local registry.`,
22
+ options: {
23
+ port: {
24
+ value: '<number>',
25
+ description: 'Port for the broser-based UI server (default: 8000)',
26
+ },
27
+ 'registry-port': {
28
+ value: '<number>',
29
+ description: 'Port for the VSR registry (default: 1337)',
30
+ },
31
+ },
32
+ });
33
+ export const views = {
34
+ human: (result) => {
35
+ stdout('');
36
+ stdout(styleTextStdout(['bgWhiteBright', 'black', 'bold'], ' vlt serve running '));
37
+ stdout('');
38
+ stdout(`UI Server: ${result.uiURL}`);
39
+ stdout(`VSR Registry: ${result.registryURL}`);
40
+ stdout('');
41
+ stdout('Press Ctrl+C to stop both servers');
42
+ },
43
+ json: (result) => result,
44
+ };
45
+ export const command = async (conf) => {
46
+ const registryPort = Number(conf.get('registry-port') ?? 1337);
47
+ // Start the GUI server first
48
+ stdout('Starting UI server...');
49
+ const server = await startGUI(conf, '/');
50
+ const actualGuiPort = server.port;
51
+ if (!actualGuiPort) {
52
+ throw error('missing ui server port');
53
+ }
54
+ // Start the VSR registry with the GUI server port
55
+ stdout('Starting VSR registry...');
56
+ // Prepare environment for VSR registry
57
+ const registryEnv = {
58
+ ARG_DAEMON: 'true',
59
+ DAEMON_START_SERVER: 'false',
60
+ DAEMON_PORT: String(actualGuiPort),
61
+ DAEMON_URL: `http://localhost:${actualGuiPort}`,
62
+ };
63
+ // runs the exec command internally
64
+ const arg0 = await vlx.resolve(['@vltpkg/vsr'], {
65
+ ...conf.options,
66
+ query: undefined,
67
+ }, async () => 'y');
68
+ if (arg0) {
69
+ conf.positionals[0] = arg0;
70
+ }
71
+ delete conf.options['script-shell'];
72
+ const ex = new ExecCommand(conf, exec, execFG);
73
+ ex.env = registryEnv;
74
+ await ex.run();
75
+ // Handle process termination
76
+ /* c8 ignore start */
77
+ const cleanup = () => {
78
+ stdout('\nShutting down servers...');
79
+ try {
80
+ void server.close();
81
+ stdout('UI server stopped');
82
+ }
83
+ catch { }
84
+ };
85
+ onExit(cleanup);
86
+ /* c8 ignore stop */
87
+ // Return the server information
88
+ const result = {
89
+ guiPort: actualGuiPort,
90
+ registryPort,
91
+ uiURL: `http://localhost:${actualGuiPort}`,
92
+ registryURL: `http://localhost:${registryPort}`,
93
+ };
94
+ // This return will never be reached due to the infinite promise above
95
+ return result;
96
+ };
97
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":"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","sourcesContent":["import { onExit } from 'signal-exit'\nimport { error } from '@vltpkg/error-cause'\nimport { exec, execFG } from '@vltpkg/run'\nimport * as vlx from '@vltpkg/vlx'\nimport { ExecCommand } from '../exec-command.ts'\nimport { commandUsage } from '../config/usage.ts'\nimport { stdout, styleTextStdout } from '../output.ts'\nimport { startGUI } from '../start-gui.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport type { LoadedConfig } from '../config/index.ts'\nimport type { Views } from '../view.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'serve',\n usage: '',\n description: `Start a local development server that runs both the browser-based\n UI server and the VSR (vlt serverless registry) registry instance.\n\n The UI server will start first on port 8000 (or the next\n available port), and then the VSR registry will start on\n port 1337.\n\n This allows you to develop and test the full vlt ecosystem\n locally, including package publishing and installation from\n your local registry.`,\n options: {\n port: {\n value: '<number>',\n description:\n 'Port for the broser-based UI server (default: 8000)',\n },\n 'registry-port': {\n value: '<number>',\n description: 'Port for the VSR registry (default: 1337)',\n },\n },\n })\n\nexport type ServeResult = {\n guiPort: number\n registryPort: number\n uiURL: string\n registryURL: string\n}\n\nexport const views = {\n human: (result: ServeResult) => {\n stdout('')\n stdout(\n styleTextStdout(\n ['bgWhiteBright', 'black', 'bold'],\n ' vlt serve running ',\n ),\n )\n stdout('')\n stdout(`UI Server: ${result.uiURL}`)\n stdout(`VSR Registry: ${result.registryURL}`)\n stdout('')\n stdout('Press Ctrl+C to stop both servers')\n },\n json: (result: ServeResult) => result,\n} as const satisfies Views<ServeResult>\n\nexport const command: CommandFn<ServeResult> = async (\n conf: LoadedConfig,\n) => {\n const registryPort = Number(conf.get('registry-port') ?? 1337)\n\n // Start the GUI server first\n stdout('Starting UI server...')\n const server = await startGUI(conf, '/')\n const actualGuiPort = server.port\n\n if (!actualGuiPort) {\n throw error('missing ui server port')\n }\n\n // Start the VSR registry with the GUI server port\n stdout('Starting VSR registry...')\n\n // Prepare environment for VSR registry\n const registryEnv = {\n ARG_DAEMON: 'true',\n DAEMON_START_SERVER: 'false',\n DAEMON_PORT: String(actualGuiPort),\n DAEMON_URL: `http://localhost:${actualGuiPort}`,\n }\n\n // runs the exec command internally\n const arg0 = await vlx.resolve(\n ['@vltpkg/vsr'],\n {\n ...conf.options,\n query: undefined,\n },\n async () => 'y',\n )\n if (arg0) {\n conf.positionals[0] = arg0\n }\n delete conf.options['script-shell']\n const ex = new ExecCommand(conf, exec, execFG)\n ex.env = registryEnv\n await ex.run()\n\n // Handle process termination\n /* c8 ignore start */\n const cleanup = () => {\n stdout('\\nShutting down servers...')\n try {\n void server.close()\n stdout('UI server stopped')\n } catch {}\n }\n onExit(cleanup)\n /* c8 ignore stop */\n\n // Return the server information\n const result: ServeResult = {\n guiPort: actualGuiPort,\n registryPort,\n uiURL: `http://localhost:${actualGuiPort}`,\n registryURL: `http://localhost:${registryPort}`,\n }\n\n // This return will never be reached due to the infinite promise above\n return result\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/commands/version.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQ1D,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GACrB,mBAAmB,GACnB,mBAAmB,EAAE,CAAA;AA2LzB,eAAO,MAAM,KAAK,EAAE,YAanB,CAAA;AAED,eAAO,MAAM,KAAK;;;CAiBuB,CAAA;AAEzC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,aAAa,CA8D5C,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/commands/version.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAS1D,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GACrB,mBAAmB,GACnB,mBAAmB,EAAE,CAAA;AA2LzB,eAAO,MAAM,KAAK,EAAE,YAanB,CAAA;AAED,eAAO,MAAM,KAAK;;;CAiBuB,CAAA;AAEzC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,aAAa,CAkE5C,CAAA"}
@@ -7,6 +7,7 @@ import { dirname, resolve } from 'node:path';
7
7
  import assert from 'node:assert';
8
8
  import { actual } from '@vltpkg/graph';
9
9
  import { Query } from '@vltpkg/query';
10
+ import { createHostContextsMap } from "../query-host-contexts.js";
10
11
  const isValidVersionIncrement = (value) => versionIncrements.includes(value);
11
12
  const version = async (conf, increment, cwd, {
12
13
  // Hardcode happy path options for now.
@@ -172,28 +173,35 @@ export const command = async (conf) => {
172
173
  const groups = conf.get('workspace-group');
173
174
  const recursive = conf.get('recursive');
174
175
  const locations = [];
175
- let single = null;
176
176
  if (queryString) {
177
- const graph = actual.load({
178
- ...options,
179
- mainManifest: options.packageJson.read(projectRoot),
180
- monorepo: options.monorepo,
181
- loadManifests: false,
182
- });
177
+ const mainManifest = options.packageJson.maybeRead(projectRoot);
178
+ let graph;
179
+ if (mainManifest) {
180
+ graph = actual.load({
181
+ ...options,
182
+ mainManifest,
183
+ monorepo: options.monorepo,
184
+ loadManifests: false,
185
+ });
186
+ }
187
+ const hostContexts = await createHostContextsMap(conf);
183
188
  const query = new Query({
184
- graph,
185
- specOptions: conf.options,
189
+ /* c8 ignore next */
190
+ nodes: graph ? new Set(graph.nodes.values()) : new Set(),
191
+ edges: graph?.edges ?? new Set(),
192
+ importers: graph?.importers ?? new Set(),
186
193
  securityArchive: undefined,
194
+ hostContexts,
187
195
  });
188
196
  const { nodes } = await query.search(queryString, {
189
197
  signal: new AbortController().signal,
190
198
  });
191
199
  for (const node of nodes) {
192
- const { location } = node.toJSON();
200
+ const location = node.location;
193
201
  assert(location, error(`node ${node.id} has no location`, {
194
202
  found: node,
195
203
  }));
196
- locations.push(resolve(projectRoot, location));
204
+ locations.push(resolve(node.projectRoot, location));
197
205
  }
198
206
  }
199
207
  else if (paths?.length || groups?.length || recursive) {
@@ -202,10 +210,8 @@ export const command = async (conf) => {
202
210
  }
203
211
  }
204
212
  else {
205
- single = options.packageJson.find(process.cwd()) ?? projectRoot;
206
- }
207
- if (single) {
208
- return version(conf, positionals[0], single);
213
+ const cwd = options.packageJson.find(process.cwd()) ?? projectRoot;
214
+ return version(conf, positionals[0], cwd);
209
215
  }
210
216
  assert(locations.length > 0, error('No workspaces or query results found'));
211
217
  const results = [];
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/commands/version.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n inc,\n parse as parseVersion,\n versionIncrements,\n} from '@vltpkg/semver'\nimport type { IncrementType } from '@vltpkg/semver'\nimport { is as isGit, spawn as spawn_, isClean } from '@vltpkg/git'\nimport type { GitOptions } from '@vltpkg/git'\nimport { error } from '@vltpkg/error-cause'\nimport { asError } from '@vltpkg/types'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport type { Views } from '../view.ts'\nimport type { ParsedConfig } from '../config/index.ts'\nimport { dirname, resolve } from 'node:path'\nimport assert from 'node:assert'\nimport { actual } from '@vltpkg/graph'\nimport { Query } from '@vltpkg/query'\n\nexport type VersionOptions = {\n prereleaseId?: string\n commit?: boolean\n tag?: boolean\n message?: string\n tagMessage?: string\n includeNameInCommit?: boolean\n includeNameInTag?: boolean\n}\n\nexport type CommandResultSingle = {\n name: string\n oldVersion: string\n newVersion: string\n dir: string\n committed?: string[]\n tag?: string\n}\n\nexport type CommandResult =\n | CommandResultSingle\n | CommandResultSingle[]\n\nconst isValidVersionIncrement = (\n value: string,\n): value is IncrementType =>\n versionIncrements.includes(value as IncrementType)\n\nconst version = async (\n conf: ParsedConfig,\n increment: string | undefined,\n cwd: string,\n {\n // Hardcode happy path options for now.\n // TODO: make these config definitions\n prereleaseId = 'pre',\n commit = true,\n tag = true,\n message = 'v%s',\n tagMessage = 'v%s',\n includeNameInCommit = false,\n includeNameInTag = false,\n }: VersionOptions = {},\n): Promise<CommandResultSingle> => {\n assert(\n increment,\n error('Version increment argument is required', {\n code: 'EUSAGE',\n validOptions: versionIncrements,\n }),\n )\n\n const manifestPath = conf.options.packageJson.find(cwd)\n assert(\n manifestPath,\n error('No package.json found', {\n code: 'ENOENT',\n path: cwd,\n }),\n )\n\n const spawn = (args: string[], opts?: GitOptions) =>\n spawn_(args, { cwd: manifestDir, ...opts })\n\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n assert(\n manifest.name,\n error('No name field found in package.json', {\n path: manifestPath,\n }),\n )\n assert(\n manifest.version,\n error('No version field found in package.json', {\n path: manifestPath,\n }),\n )\n\n const oldVersion = manifest.version\n let newVersion: string\n\n // Check if increment is a valid semver version string\n const parsedIncrement = parseVersion(increment)\n if (parsedIncrement) {\n newVersion = parsedIncrement.toString()\n } else if (isValidVersionIncrement(increment)) {\n // Use semver increment\n const incrementType = increment\n try {\n const result = inc(oldVersion, incrementType, prereleaseId)\n newVersion = result.toString()\n } catch (err) {\n throw error(\n `Failed to increment version from ${oldVersion} with ${increment}`,\n { version: oldVersion, wanted: increment, cause: err },\n )\n }\n } else {\n throw error(\n `Invalid version increment: ${increment}. Must be a valid semver version or one of: major, minor, patch, premajor, preminor, prepatch, prerelease`,\n {\n found: increment,\n validOptions: versionIncrements,\n },\n )\n }\n\n // Update the manifest\n manifest.version = newVersion\n conf.options.packageJson.write(manifestDir, manifest)\n\n const result: CommandResultSingle = {\n name: manifest.name,\n oldVersion,\n newVersion,\n dir: manifestDir,\n }\n\n // Handle git operations if we're in a git repository\n if (\n /* c8 ignore next -- commit and tag are always true for now */\n (commit || tag) &&\n (await isGit({ cwd: conf.options.projectRoot }))\n ) {\n // Check for uncommitted changes (excluding package.json since we just modified it)\n if (!(await isClean({ cwd: conf.options.projectRoot }))) {\n try {\n // Check if there are changes other than package.json\n const gitResult = await spawn([\n 'diff',\n '--name-only',\n 'HEAD',\n '--',\n '.',\n ])\n const changedFiles = gitResult.stdout\n .trim()\n .split('\\n')\n .filter(Boolean)\n .map(f => resolve(conf.options.projectRoot, f))\n const nonPackageJsonChanges = changedFiles.filter(\n file => file !== resolve(manifestDir, 'package.json'),\n )\n assert(\n nonPackageJsonChanges.length === 0,\n error(\n 'Git working directory not clean. Please commit or stash your changes first.',\n { found: nonPackageJsonChanges },\n ),\n )\n } catch (err) {\n throw error(\n 'Git working directory not clean. Please commit or stash your changes first.',\n asError(err),\n )\n }\n }\n\n if (commit) {\n try {\n // Stage package.json\n const files = ['package.json']\n await spawn(['add', ...files])\n await spawn([\n 'commit',\n '-m',\n `${includeNameInCommit ? `${manifest.name}: ` : ''}${message.replace(\n '%s',\n newVersion,\n )}`,\n ])\n result.committed = files.map(f => resolve(manifestDir, f))\n } catch (err) {\n throw error('Failed to commit version changes', {\n version: newVersion,\n cause: err,\n })\n }\n }\n\n if (tag) {\n try {\n const tagName =\n (includeNameInTag ?\n `${manifest.name.replace('/', '-').replace('@', '')}-`\n : '') + `v${newVersion}`\n await spawn([\n 'tag',\n tagName,\n '-m',\n (includeNameInTag ? `${manifest.name}: ` : '') +\n tagMessage.replace('%s', newVersion),\n ])\n result.tag = tagName\n } catch (err) {\n throw error('Failed to create git tag', {\n version: newVersion,\n cause: err,\n })\n }\n }\n }\n\n return result\n}\n\nexport const usage: CommandUsage = () => {\n return commandUsage({\n command: 'version',\n usage:\n '[<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease]',\n description: `Bump a package's version.\n\n Run in a package directory to bump the version and write the new data back to package.json.\n\n The \\`<newversion>\\` argument should be a valid semver string or a valid increment type (one of patch, minor, major, prepatch, preminor, premajor, prerelease).\n\n If run in a git repository, it will also create a version commit and tag.`,\n })\n}\n\nexport const views = {\n json: result => result,\n human: results => {\n const item = (result: CommandResultSingle) => {\n let output = `${result.name}: v${result.newVersion}`\n if (result.committed) {\n output += ` +commit`\n }\n if (result.tag) {\n output += ` +tag`\n }\n return output\n }\n return Array.isArray(results) ?\n results.map(item).join('\\n')\n : item(results)\n },\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const { positionals, options, projectRoot } = conf\n const queryString = conf.get('scope')\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n\n const locations: string[] = []\n let single: string | null = null\n\n if (queryString) {\n const graph = actual.load({\n ...options,\n mainManifest: options.packageJson.read(projectRoot),\n monorepo: options.monorepo,\n loadManifests: false,\n })\n const query = new Query({\n graph,\n specOptions: conf.options,\n securityArchive: undefined,\n })\n const { nodes } = await query.search(queryString, {\n signal: new AbortController().signal,\n })\n for (const node of nodes) {\n const { location } = node.toJSON()\n assert(\n location,\n error(`node ${node.id} has no location`, {\n found: node,\n }),\n )\n locations.push(resolve(projectRoot, location))\n }\n } else if (paths?.length || groups?.length || recursive) {\n for (const workspace of options.monorepo ?? []) {\n locations.push(workspace.fullpath)\n }\n } else {\n single = options.packageJson.find(process.cwd()) ?? projectRoot\n }\n\n if (single) {\n return version(conf, positionals[0], single)\n }\n\n assert(\n locations.length > 0,\n error('No workspaces or query results found'),\n )\n\n const results: CommandResultSingle[] = []\n for (const location of locations) {\n results.push(\n await version(conf, positionals[0], location, {\n includeNameInCommit: true,\n includeNameInTag: true,\n }),\n )\n }\n return results\n}\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/commands/version.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n inc,\n parse as parseVersion,\n versionIncrements,\n} from '@vltpkg/semver'\nimport type { IncrementType } from '@vltpkg/semver'\nimport { is as isGit, spawn as spawn_, isClean } from '@vltpkg/git'\nimport type { GitOptions } from '@vltpkg/git'\nimport { error } from '@vltpkg/error-cause'\nimport { asError } from '@vltpkg/types'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport type { Views } from '../view.ts'\nimport type { ParsedConfig } from '../config/index.ts'\nimport { dirname, resolve } from 'node:path'\nimport assert from 'node:assert'\nimport { actual } from '@vltpkg/graph'\nimport { Query } from '@vltpkg/query'\nimport { createHostContextsMap } from '../query-host-contexts.ts'\n\nexport type VersionOptions = {\n prereleaseId?: string\n commit?: boolean\n tag?: boolean\n message?: string\n tagMessage?: string\n includeNameInCommit?: boolean\n includeNameInTag?: boolean\n}\n\nexport type CommandResultSingle = {\n name: string\n oldVersion: string\n newVersion: string\n dir: string\n committed?: string[]\n tag?: string\n}\n\nexport type CommandResult =\n | CommandResultSingle\n | CommandResultSingle[]\n\nconst isValidVersionIncrement = (\n value: string,\n): value is IncrementType =>\n versionIncrements.includes(value as IncrementType)\n\nconst version = async (\n conf: ParsedConfig,\n increment: string | undefined,\n cwd: string,\n {\n // Hardcode happy path options for now.\n // TODO: make these config definitions\n prereleaseId = 'pre',\n commit = true,\n tag = true,\n message = 'v%s',\n tagMessage = 'v%s',\n includeNameInCommit = false,\n includeNameInTag = false,\n }: VersionOptions = {},\n): Promise<CommandResultSingle> => {\n assert(\n increment,\n error('Version increment argument is required', {\n code: 'EUSAGE',\n validOptions: versionIncrements,\n }),\n )\n\n const manifestPath = conf.options.packageJson.find(cwd)\n assert(\n manifestPath,\n error('No package.json found', {\n code: 'ENOENT',\n path: cwd,\n }),\n )\n\n const spawn = (args: string[], opts?: GitOptions) =>\n spawn_(args, { cwd: manifestDir, ...opts })\n\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n assert(\n manifest.name,\n error('No name field found in package.json', {\n path: manifestPath,\n }),\n )\n assert(\n manifest.version,\n error('No version field found in package.json', {\n path: manifestPath,\n }),\n )\n\n const oldVersion = manifest.version\n let newVersion: string\n\n // Check if increment is a valid semver version string\n const parsedIncrement = parseVersion(increment)\n if (parsedIncrement) {\n newVersion = parsedIncrement.toString()\n } else if (isValidVersionIncrement(increment)) {\n // Use semver increment\n const incrementType = increment\n try {\n const result = inc(oldVersion, incrementType, prereleaseId)\n newVersion = result.toString()\n } catch (err) {\n throw error(\n `Failed to increment version from ${oldVersion} with ${increment}`,\n { version: oldVersion, wanted: increment, cause: err },\n )\n }\n } else {\n throw error(\n `Invalid version increment: ${increment}. Must be a valid semver version or one of: major, minor, patch, premajor, preminor, prepatch, prerelease`,\n {\n found: increment,\n validOptions: versionIncrements,\n },\n )\n }\n\n // Update the manifest\n manifest.version = newVersion\n conf.options.packageJson.write(manifestDir, manifest)\n\n const result: CommandResultSingle = {\n name: manifest.name,\n oldVersion,\n newVersion,\n dir: manifestDir,\n }\n\n // Handle git operations if we're in a git repository\n if (\n /* c8 ignore next -- commit and tag are always true for now */\n (commit || tag) &&\n (await isGit({ cwd: conf.options.projectRoot }))\n ) {\n // Check for uncommitted changes (excluding package.json since we just modified it)\n if (!(await isClean({ cwd: conf.options.projectRoot }))) {\n try {\n // Check if there are changes other than package.json\n const gitResult = await spawn([\n 'diff',\n '--name-only',\n 'HEAD',\n '--',\n '.',\n ])\n const changedFiles = gitResult.stdout\n .trim()\n .split('\\n')\n .filter(Boolean)\n .map(f => resolve(conf.options.projectRoot, f))\n const nonPackageJsonChanges = changedFiles.filter(\n file => file !== resolve(manifestDir, 'package.json'),\n )\n assert(\n nonPackageJsonChanges.length === 0,\n error(\n 'Git working directory not clean. Please commit or stash your changes first.',\n { found: nonPackageJsonChanges },\n ),\n )\n } catch (err) {\n throw error(\n 'Git working directory not clean. Please commit or stash your changes first.',\n asError(err),\n )\n }\n }\n\n if (commit) {\n try {\n // Stage package.json\n const files = ['package.json']\n await spawn(['add', ...files])\n await spawn([\n 'commit',\n '-m',\n `${includeNameInCommit ? `${manifest.name}: ` : ''}${message.replace(\n '%s',\n newVersion,\n )}`,\n ])\n result.committed = files.map(f => resolve(manifestDir, f))\n } catch (err) {\n throw error('Failed to commit version changes', {\n version: newVersion,\n cause: err,\n })\n }\n }\n\n if (tag) {\n try {\n const tagName =\n (includeNameInTag ?\n `${manifest.name.replace('/', '-').replace('@', '')}-`\n : '') + `v${newVersion}`\n await spawn([\n 'tag',\n tagName,\n '-m',\n (includeNameInTag ? `${manifest.name}: ` : '') +\n tagMessage.replace('%s', newVersion),\n ])\n result.tag = tagName\n } catch (err) {\n throw error('Failed to create git tag', {\n version: newVersion,\n cause: err,\n })\n }\n }\n }\n\n return result\n}\n\nexport const usage: CommandUsage = () => {\n return commandUsage({\n command: 'version',\n usage:\n '[<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease]',\n description: `Bump a package's version.\n\n Run in a package directory to bump the version and write the new data back to package.json.\n\n The \\`<newversion>\\` argument should be a valid semver string or a valid increment type (one of patch, minor, major, prepatch, preminor, premajor, prerelease).\n\n If run in a git repository, it will also create a version commit and tag.`,\n })\n}\n\nexport const views = {\n json: result => result,\n human: results => {\n const item = (result: CommandResultSingle) => {\n let output = `${result.name}: v${result.newVersion}`\n if (result.committed) {\n output += ` +commit`\n }\n if (result.tag) {\n output += ` +tag`\n }\n return output\n }\n return Array.isArray(results) ?\n results.map(item).join('\\n')\n : item(results)\n },\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const { positionals, options, projectRoot } = conf\n const queryString = conf.get('scope')\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n\n const locations: string[] = []\n\n if (queryString) {\n const mainManifest = options.packageJson.maybeRead(projectRoot)\n let graph\n if (mainManifest) {\n graph = actual.load({\n ...options,\n mainManifest,\n monorepo: options.monorepo,\n loadManifests: false,\n })\n }\n const hostContexts = await createHostContextsMap(conf)\n const query = new Query({\n /* c8 ignore next */\n nodes: graph ? new Set(graph.nodes.values()) : new Set(),\n edges: graph?.edges ?? new Set(),\n importers: graph?.importers ?? new Set(),\n securityArchive: undefined,\n hostContexts,\n })\n const { nodes } = await query.search(queryString, {\n signal: new AbortController().signal,\n })\n for (const node of nodes) {\n const location = node.location\n assert(\n location,\n error(`node ${node.id} has no location`, {\n found: node,\n }),\n )\n locations.push(resolve(node.projectRoot, location))\n }\n } else if (paths?.length || groups?.length || recursive) {\n for (const workspace of options.monorepo ?? []) {\n locations.push(workspace.fullpath)\n }\n } else {\n const cwd = options.packageJson.find(process.cwd()) ?? projectRoot\n return version(conf, positionals[0], cwd)\n }\n\n assert(\n locations.length > 0,\n error('No workspaces or query results found'),\n )\n\n const results: CommandResultSingle[] = []\n for (const location of locations) {\n results.push(\n await version(conf, positionals[0], location, {\n includeNameInCommit: true,\n includeNameInTag: true,\n }),\n )\n }\n return results\n}\n"]}