@vltpkg/package-info 0.0.0-0.1730724342581 → 0.0.0-10

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.
@@ -1,9 +1,11 @@
1
1
  import { PackageJson } from '@vltpkg/package-json';
2
- import { type PickManifestOptions } from '@vltpkg/pick-manifest';
3
- import { RegistryClient, type RegistryClientOptions } from '@vltpkg/registry-client';
4
- import { Spec, type SpecOptions } from '@vltpkg/spec';
2
+ import type { PickManifestOptions } from '@vltpkg/pick-manifest';
3
+ import type { RegistryClientOptions, RegistryClientRequestOptions } from '@vltpkg/registry-client';
4
+ import { RegistryClient } from '@vltpkg/registry-client';
5
+ import type { SpecOptions } from '@vltpkg/spec';
6
+ import { Spec } from '@vltpkg/spec';
5
7
  import { Pool } from '@vltpkg/tar';
6
- import { type Integrity, type Manifest, type Packument } from '@vltpkg/types';
8
+ import type { Integrity, Manifest, Packument } from '@vltpkg/types';
7
9
  import { Monorepo } from '@vltpkg/workspaces';
8
10
  export type Resolution = {
9
11
  resolved: string;
@@ -22,16 +24,14 @@ export type PackageInfoClientOptions = RegistryClientOptions & SpecOptions & {
22
24
  /** workspace paths to load, irrelevant if Monorepo provided */
23
25
  workspace?: string[];
24
26
  };
25
- export type PackageInfoClientRequestOptions = PickManifestOptions & {
27
+ export type PackageInfoClientRequestOptions = PickManifestOptions & RegistryClientRequestOptions & {
26
28
  /** dir to resolve `file://` specifiers against. Defaults to projectRoot. */
27
29
  from?: string;
28
30
  };
29
- export type PackageInfoClientAllOptions = PackageInfoClientOptions & PackageInfoClientRequestOptions;
30
- export declare const packument: (spec: Spec | string, options?: PackageInfoClientAllOptions) => Promise<Packument>;
31
- export declare const manifest: (spec: Spec | string, options?: PackageInfoClientAllOptions) => Promise<Manifest>;
32
- export declare const resolve: (spec: Spec | string, options?: PackageInfoClientAllOptions) => Promise<Resolution>;
33
- export declare const tarball: (spec: Spec | string, options?: PackageInfoClientAllOptions) => Promise<Buffer>;
34
- export declare const extract: (spec: Spec | string, target: string, options?: PackageInfoClientAllOptions) => Promise<Resolution>;
31
+ export type PackageInfoClientExtractOptions = PackageInfoClientRequestOptions & {
32
+ integrity?: Integrity;
33
+ resolved?: string;
34
+ };
35
35
  export declare class PackageInfoClient {
36
36
  #private;
37
37
  options: PackageInfoClientOptions;
@@ -40,8 +40,8 @@ export declare class PackageInfoClient {
40
40
  get registryClient(): RegistryClient;
41
41
  get tarPool(): Pool;
42
42
  constructor(options?: PackageInfoClientOptions);
43
- extract(spec: Spec | string, target: string, options?: PackageInfoClientRequestOptions): Promise<Resolution>;
44
- tarball(spec: Spec | string, options?: PackageInfoClientRequestOptions): Promise<Buffer>;
43
+ extract(spec: Spec | string, target: string, options?: PackageInfoClientExtractOptions): Promise<Resolution>;
44
+ tarball(spec: Spec | string, options?: PackageInfoClientExtractOptions): Promise<Buffer>;
45
45
  manifest(spec: Spec | string, options?: PackageInfoClientRequestOptions): Promise<Manifest>;
46
46
  packument(spec: Spec | string, options?: PackageInfoClientRequestOptions): Promise<Packument>;
47
47
  resolve(spec: Spec | string, options?: PackageInfoClientRequestOptions): Promise<Resolution>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,KAAK,EACV,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAe7C,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/D,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAC1D,WAAW,GAAG;IACZ,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yBAAyB;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IAEzB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAEnB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE5B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAEH,MAAM,MAAM,+BAA+B,GAAG,mBAAmB,GAC/D,4BAA4B,GAAG;IAC7B,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAEH,MAAM,MAAM,+BAA+B,GACzC,+BAA+B,GAAG;IAChC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAEH,qBAAa,iBAAiB;;IAI5B,OAAO,EAAE,wBAAwB,CAAA;IAEjC,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAGnB,IAAI,cAAc,mBAKjB;IAED,IAAI,OAAO,SAGV;gBAEW,OAAO,GAAE,wBAA6B;IAkB5C,OAAO,CACX,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC;IAkKhB,OAAO,CACX,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,MAAM,CAAC;IAsIZ,QAAQ,CACZ,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,OAAO,GAAE,+BAAoC;IAoHzC,SAAS,CACb,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,SAAS,CAAC;IA8Df,OAAO,CACX,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,UAAU,CAAC;CAsJvB"}
package/dist/esm/index.js CHANGED
@@ -1,34 +1,19 @@
1
1
  import { error } from '@vltpkg/error-cause';
2
2
  import { clone, resolve as gitResolve, revs } from '@vltpkg/git';
3
3
  import { PackageJson } from '@vltpkg/package-json';
4
- import { pickManifest, } from '@vltpkg/pick-manifest';
5
- import { RegistryClient, } from '@vltpkg/registry-client';
4
+ import { pickManifest } from '@vltpkg/pick-manifest';
5
+ import { RegistryClient } from '@vltpkg/registry-client';
6
6
  import { Spec } from '@vltpkg/spec';
7
7
  import { Pool } from '@vltpkg/tar';
8
- import { asPackument, } from '@vltpkg/types';
8
+ import { asPackument, isIntegrity } from '@vltpkg/types';
9
9
  import { Monorepo } from '@vltpkg/workspaces';
10
10
  import { XDG } from '@vltpkg/xdg';
11
- import { randomBytes } from 'crypto';
12
- import { readFile, rm, stat, symlink } from 'fs/promises';
13
- import { basename, dirname, relative, resolve as pathResolve, } from 'path';
11
+ import { randomBytes } from 'node:crypto';
12
+ import { readFile, rm, stat, symlink } from 'node:fs/promises';
13
+ import { basename, dirname, resolve as pathResolve, relative, } from 'node:path';
14
14
  import { create as tarC } from 'tar';
15
- import { rename } from './rename.js';
15
+ import { rename } from "./rename.js";
16
16
  const xdg = new XDG('vlt');
17
- // provide some helper methods at the top level. Re-use the client if
18
- // the same options are provided.
19
- const clients = new Map();
20
- const client = (o = {}) => {
21
- const { from: _from, packageJson: _packageJson, workspace: _workspace, 'workspace-group': _workspaceGroup, ...opts } = o;
22
- const key = JSON.stringify(Object.entries(opts).sort(([a], [b]) => a.localeCompare(b, 'en')));
23
- const c = clients.get(key) ?? new PackageInfoClient(opts);
24
- clients.set(key, c);
25
- return c;
26
- };
27
- export const packument = async (spec, options = {}) => client(options).packument(spec, options);
28
- export const manifest = async (spec, options = {}) => client(options).manifest(spec, options);
29
- export const resolve = async (spec, options = {}) => client(options).resolve(spec, options);
30
- export const tarball = async (spec, options = {}) => client(options).tarball(spec, options);
31
- export const extract = async (spec, target, options = {}) => client(options).extract(spec, target, options);
32
17
  export class PackageInfoClient {
33
18
  #registryClient;
34
19
  #projectRoot;
@@ -37,6 +22,7 @@ export class PackageInfoClient {
37
22
  #resolutions = new Map();
38
23
  packageJson;
39
24
  monorepo;
25
+ #trustedIntegrities = new Map();
40
26
  get registryClient() {
41
27
  if (!this.#registryClient) {
42
28
  this.#registryClient = new RegistryClient(this.options);
@@ -68,9 +54,11 @@ export class PackageInfoClient {
68
54
  async extract(spec, target, options = {}) {
69
55
  if (typeof spec === 'string')
70
56
  spec = Spec.parse(spec, this.options);
57
+ const { from = this.#projectRoot, integrity, resolved } = options;
71
58
  const f = spec.final;
72
- const r = await this.resolve(spec, options);
73
- const { from = this.#projectRoot } = options;
59
+ const r = integrity && resolved ?
60
+ { resolved, integrity, spec }
61
+ : await this.resolve(spec, options);
74
62
  switch (f.type) {
75
63
  case 'git': {
76
64
  const { gitRemote, gitCommittish, remoteURL, gitSelectorParsed, } = f;
@@ -100,8 +88,10 @@ export class PackageInfoClient {
100
88
  }
101
89
  case 'registry':
102
90
  case 'remote': {
91
+ const trustIntegrity = this.#trustedIntegrities.get(r.resolved) === r.integrity;
103
92
  const response = await this.registryClient.request(r.resolved, {
104
93
  integrity: r.integrity,
94
+ trustIntegrity,
105
95
  });
106
96
  if (response.statusCode !== 200) {
107
97
  throw this.#resolveError(spec, options, 'failed to fetch tarball', {
@@ -109,6 +99,11 @@ export class PackageInfoClient {
109
99
  response,
110
100
  });
111
101
  }
102
+ // if it's not trusted already, but valid, start trusting
103
+ if (!trustIntegrity &&
104
+ response.checkIntegrity({ spec, url: resolved })) {
105
+ this.#trustedIntegrities.set(r.resolved, response.integrity);
106
+ }
112
107
  try {
113
108
  await this.tarPool.unpack(response.buffer(), target);
114
109
  }
@@ -179,16 +174,24 @@ export class PackageInfoClient {
179
174
  const { dist } = await this.manifest(spec, options);
180
175
  if (!dist)
181
176
  throw this.#resolveError(spec, options, 'no dist object found in manifest');
182
- //TODO: handle signatures as well as integrity
183
177
  const { tarball, integrity } = dist;
184
- if (!tarball)
178
+ if (!tarball) {
185
179
  throw this.#resolveError(spec, options, 'no tarball found in manifest.dist');
180
+ }
181
+ const trustIntegrity = this.#trustedIntegrities.get(tarball) === integrity;
186
182
  const response = await this.registryClient.request(tarball, {
183
+ ...options,
187
184
  integrity,
185
+ trustIntegrity,
188
186
  });
189
187
  if (response.statusCode !== 200) {
190
188
  throw this.#resolveError(spec, options, 'failed to fetch tarball', { response, url: tarball });
191
189
  }
190
+ // if we don't already trust it, but it's valid, start trusting it
191
+ if (!trustIntegrity &&
192
+ response.checkIntegrity({ spec, url: tarball })) {
193
+ this.#trustedIntegrities.set(tarball, response.integrity);
194
+ }
192
195
  return response.buffer();
193
196
  }
194
197
  case 'git': {
@@ -265,6 +268,15 @@ export class PackageInfoClient {
265
268
  const mani = pickManifest(await this.packument(f, options), spec, options);
266
269
  if (!mani)
267
270
  throw this.#resolveError(spec, options);
271
+ const { integrity, tarball } = mani.dist ?? {};
272
+ if (isIntegrity(integrity) && tarball) {
273
+ const registryOrigin = new URL(String(spec.registry)).origin;
274
+ const tgzOrigin = new URL(tarball).origin;
275
+ // if it comes from the same origin, trust the integrity
276
+ if (tgzOrigin === registryOrigin) {
277
+ this.#trustedIntegrities.set(tarball, integrity);
278
+ }
279
+ }
268
280
  return mani;
269
281
  }
270
282
  case 'git': {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { error, type ErrorCauseObject } from '@vltpkg/error-cause'\nimport { clone, resolve as gitResolve, revs } from '@vltpkg/git'\nimport { PackageJson } from '@vltpkg/package-json'\nimport {\n pickManifest,\n type PickManifestOptions,\n} from '@vltpkg/pick-manifest'\nimport {\n RegistryClient,\n type RegistryClientOptions,\n} from '@vltpkg/registry-client'\nimport { Spec, type SpecOptions } from '@vltpkg/spec'\nimport { Pool } from '@vltpkg/tar'\nimport {\n asPackument,\n type Integrity,\n type Manifest,\n type Packument,\n} from '@vltpkg/types'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport { XDG } from '@vltpkg/xdg'\nimport { randomBytes } from 'crypto'\nimport { readFile, rm, stat, symlink } from 'fs/promises'\nimport {\n basename,\n dirname,\n relative,\n resolve as pathResolve,\n} from 'path'\nimport { create as tarC } from 'tar'\nimport { rename } from './rename.js'\n\nconst xdg = new XDG('vlt')\n\nexport type Resolution = {\n resolved: string\n integrity?: Integrity\n signatures?: Exclude<Manifest['dist'], undefined>['signatures']\n spec: Spec\n}\n\nexport type PackageInfoClientOptions = RegistryClientOptions &\n SpecOptions & {\n /** root of the project. Defaults to process.cwd() */\n projectRoot?: string\n /** PackageJson object */\n packageJson?: PackageJson\n\n monorepo?: Monorepo\n\n /** workspace groups to load, irrelevant if Monorepo provided */\n 'workspace-group'?: string[]\n\n /** workspace paths to load, irrelevant if Monorepo provided */\n workspace?: string[]\n }\n\nexport type PackageInfoClientRequestOptions = PickManifestOptions & {\n /** dir to resolve `file://` specifiers against. Defaults to projectRoot. */\n from?: string\n}\n\nexport type PackageInfoClientAllOptions = PackageInfoClientOptions &\n PackageInfoClientRequestOptions\n\n// provide some helper methods at the top level. Re-use the client if\n// the same options are provided.\nconst clients = new Map<string, PackageInfoClient>()\nconst client = (o: PackageInfoClientAllOptions = {}) => {\n const {\n from: _from,\n packageJson: _packageJson,\n workspace: _workspace,\n 'workspace-group': _workspaceGroup,\n ...opts\n } = o\n const key = JSON.stringify(\n Object.entries(opts).sort(([a], [b]) => a.localeCompare(b, 'en')),\n )\n const c = clients.get(key) ?? new PackageInfoClient(opts)\n clients.set(key, c)\n return c\n}\n\nexport const packument = async (\n spec: Spec | string,\n options: PackageInfoClientAllOptions = {},\n): Promise<Packument> => client(options).packument(spec, options)\n\nexport const manifest = async (\n spec: Spec | string,\n options: PackageInfoClientAllOptions = {},\n): Promise<Manifest> => client(options).manifest(spec, options)\n\nexport const resolve = async (\n spec: Spec | string,\n options: PackageInfoClientAllOptions = {},\n): Promise<Resolution> => client(options).resolve(spec, options)\n\nexport const tarball = async (\n spec: Spec | string,\n options: PackageInfoClientAllOptions = {},\n): Promise<Buffer> => client(options).tarball(spec, options)\n\nexport const extract = async (\n spec: Spec | string,\n target: string,\n options: PackageInfoClientAllOptions = {},\n): Promise<Resolution> =>\n client(options).extract(spec, target, options)\n\nexport class PackageInfoClient {\n #registryClient?: RegistryClient\n #projectRoot: string\n #tarPool?: Pool\n options: PackageInfoClientOptions\n #resolutions = new Map<string, Resolution>()\n packageJson: PackageJson\n monorepo?: Monorepo\n\n get registryClient() {\n if (!this.#registryClient) {\n this.#registryClient = new RegistryClient(this.options)\n }\n return this.#registryClient\n }\n\n get tarPool() {\n if (!this.#tarPool) this.#tarPool = new Pool()\n return this.#tarPool\n }\n\n constructor(options: PackageInfoClientOptions = {}) {\n this.options = options\n this.#projectRoot = options.projectRoot || process.cwd()\n this.packageJson = options.packageJson ?? new PackageJson()\n const wsLoad = {\n ...(options.workspace?.length && { paths: options.workspace }),\n ...(options['workspace-group']?.length && {\n groups: options['workspace-group'],\n }),\n }\n this.monorepo =\n options.monorepo ??\n Monorepo.maybeLoad(this.#projectRoot, {\n load: wsLoad,\n packageJson: this.packageJson,\n })\n }\n\n async extract(\n spec: Spec | string,\n target: string,\n options: PackageInfoClientRequestOptions = {},\n ): Promise<Resolution> {\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n const r = await this.resolve(spec, options)\n const { from = this.#projectRoot } = options\n switch (f.type) {\n case 'git': {\n const {\n gitRemote,\n gitCommittish,\n remoteURL,\n gitSelectorParsed,\n } = f\n if (!remoteURL) {\n /* c8 ignore start - Impossible, would throw on the resolve */\n if (!gitRemote)\n throw this.#resolveError(\n spec,\n options,\n 'no remote on git: specifier',\n )\n /* c8 ignore stop */\n const { path } = gitSelectorParsed ?? {}\n if (path !== undefined) {\n // use obvious name because it's in node_modules\n const tmp = pathResolve(\n dirname(target),\n `.TEMP.${basename(target)}-${randomBytes(6).toString('hex')}`,\n )\n await clone(gitRemote, gitCommittish, tmp, { spec })\n const src = pathResolve(tmp, path)\n await rename(src, target)\n // intentionally not awaited\n void rm(tmp, { recursive: true, force: true })\n } else {\n await clone(gitRemote, gitCommittish, target, { spec })\n // intentionally not awaited\n void rm(target + '/.git', { recursive: true })\n }\n return r\n }\n // fallthrough if a remote tarball url present\n }\n case 'registry':\n case 'remote': {\n const response = await this.registryClient.request(\n r.resolved,\n {\n integrity: r.integrity,\n },\n )\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch tarball',\n {\n url: r.resolved,\n response,\n },\n )\n }\n try {\n await this.tarPool.unpack(response.buffer(), target)\n } catch (er) {\n throw this.#resolveError(\n spec,\n options,\n 'tar unpack failed',\n { cause: er as Error },\n )\n }\n return r\n }\n case 'file': {\n // if it's a directory, then \"extract\" means \"symlink\"\n const { file } = f\n /* c8 ignore start - asserted in resolve() */\n if (file === undefined)\n throw this.#resolveError(spec, options, 'no file path')\n /* c8 ignore stop */\n const path = pathResolve(from, file)\n const st = await stat(path)\n if (st.isFile()) {\n try {\n await this.tarPool.unpack(\n await this.tarball(spec, options),\n target,\n )\n } catch (er) {\n throw this.#resolveError(\n spec,\n options,\n 'tar unpack failed',\n { cause: er as Error },\n )\n }\n } else if (st.isDirectory()) {\n const rel = relative(dirname(target), path)\n await symlink(rel, target, 'dir')\n /* c8 ignore start */\n } else {\n throw this.#resolveError(\n spec,\n options,\n 'file: specifier does not resolve to directory or tarball',\n )\n }\n /* c8 ignore stop */\n return r\n }\n case 'workspace': {\n const ws = this.#getWS(spec, options)\n const rel = relative(dirname(target), ws.fullpath)\n await symlink(rel, target, 'dir')\n return r\n }\n }\n }\n\n #getWS(spec: Spec, options: PackageInfoClientRequestOptions) {\n const { workspace } = spec\n /* c8 ignore start - asserted in resolve() */\n if (workspace === undefined)\n throw this.#resolveError(spec, options, 'no workspace ID')\n /* c8 ignore stop */\n if (!this.monorepo) {\n throw this.#resolveError(\n spec,\n options,\n 'Not in a monorepo, cannot resolve workspace spec',\n )\n }\n const ws = this.monorepo.get(workspace)\n if (!ws) {\n throw this.#resolveError(spec, options, 'workspace not found', {\n wanted: workspace,\n })\n }\n return ws\n }\n\n async tarball(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ): Promise<Buffer> {\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n switch (f.type) {\n case 'registry': {\n const { dist } = await this.manifest(spec, options)\n if (!dist)\n throw this.#resolveError(\n spec,\n options,\n 'no dist object found in manifest',\n )\n //TODO: handle signatures as well as integrity\n const { tarball, integrity } = dist\n if (!tarball)\n throw this.#resolveError(\n spec,\n options,\n 'no tarball found in manifest.dist',\n )\n const response = await this.registryClient.request(tarball, {\n integrity,\n })\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch tarball',\n { response, url: tarball },\n )\n }\n return response.buffer()\n }\n case 'git': {\n const {\n remoteURL,\n gitRemote,\n gitCommittish,\n gitSelectorParsed,\n } = f\n const s: Spec = spec\n if (!remoteURL) {\n if (!gitRemote) {\n throw this.#resolveError(\n spec,\n options,\n 'no remote on git: specifier',\n )\n }\n const { path } = gitSelectorParsed ?? {}\n return await this.#tmpdir(async dir => {\n await clone(gitRemote, gitCommittish, dir + '/package', {\n spec: s,\n })\n let cwd = dir\n if (path !== undefined) {\n const src = pathResolve(dir, 'package', path)\n cwd = dirname(src)\n const pkg = pathResolve(cwd, 'package')\n if (src !== pkg) {\n const rand = randomBytes(6).toString('hex')\n // faster than deleting\n await rename(pkg, pkg + rand).catch(() => {})\n await rename(src, pkg)\n }\n }\n return tarC({ cwd, gzip: true }, ['package']).concat()\n })\n }\n // fallthrough if remoteURL set\n }\n case 'remote': {\n const { remoteURL } = f\n if (!remoteURL) {\n throw this.#resolveError(spec, options)\n }\n const response = await this.registryClient.request(remoteURL)\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch URL',\n { response, url: remoteURL },\n )\n }\n return response.buffer()\n }\n case 'file': {\n const { file } = f\n if (file === undefined)\n throw this.#resolveError(spec, options, 'no file path')\n const { from = this.#projectRoot } = options\n const path = pathResolve(from, file)\n const st = await stat(path)\n if (st.isDirectory()) {\n const p = dirname(path)\n const b = basename(path)\n // TODO: Pack properly, ignore stuff, bundleDeps, etc\n return tarC({ cwd: p, gzip: true }, [b]).concat()\n }\n return readFile(path)\n }\n case 'workspace': {\n // TODO: Pack properly, ignore stuff, bundleDeps, etc\n const ws = this.#getWS(spec, options)\n const p = dirname(ws.fullpath)\n const b = basename(ws.fullpath)\n return tarC({ cwd: p, gzip: true }, [b]).concat()\n }\n }\n }\n\n async manifest(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ) {\n const { from = this.#projectRoot } = options\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n\n switch (f.type) {\n case 'registry': {\n const mani = pickManifest(\n await this.packument(f, options),\n spec,\n options,\n )\n if (!mani) throw this.#resolveError(spec, options)\n return mani\n }\n case 'git': {\n const {\n gitRemote,\n gitCommittish,\n remoteURL,\n gitSelectorParsed,\n } = f\n if (!remoteURL) {\n const s = spec\n if (!gitRemote)\n throw this.#resolveError(spec, options, 'no git remote')\n return await this.#tmpdir(async dir => {\n await clone(gitRemote, gitCommittish, dir, { spec: s })\n const { path } = gitSelectorParsed ?? {}\n const pkgDir =\n path !== undefined ? pathResolve(dir, path) : dir\n return this.packageJson.read(pkgDir)\n })\n }\n // fallthrough to remote\n }\n case 'remote': {\n const { remoteURL } = f\n if (!remoteURL) {\n throw this.#resolveError(\n spec,\n options,\n 'no remoteURL on remote specifier',\n )\n }\n const s = spec\n return await this.#tmpdir(async dir => {\n const response =\n await this.registryClient.request(remoteURL)\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n s,\n options,\n 'failed to fetch URL',\n { response, url: remoteURL },\n )\n }\n const buf = response.buffer()\n try {\n await this.tarPool.unpack(buf, dir)\n } catch (er) {\n throw this.#resolveError(\n s,\n options,\n 'tar unpack failed',\n { cause: er as Error },\n )\n }\n return this.packageJson.read(dir)\n })\n }\n case 'file': {\n const { file } = f\n if (file === undefined)\n throw this.#resolveError(spec, options, 'no file path')\n const path = pathResolve(from, file)\n const st = await stat(path)\n if (st.isDirectory()) {\n return this.packageJson.read(path)\n }\n const s = spec\n return await this.#tmpdir(async dir => {\n try {\n await this.tarPool.unpack(await readFile(path), dir)\n } catch (er) {\n throw this.#resolveError(\n s,\n options,\n 'tar unpack failed',\n { cause: er as Error },\n )\n }\n return this.packageJson.read(dir)\n })\n }\n case 'workspace': {\n return this.#getWS(spec, options).manifest\n }\n }\n }\n\n async packument(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ): Promise<Packument> {\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n switch (f.type) {\n // RevDoc is the equivalent of a packument for a git repo\n case 'git': {\n const { gitRemote } = f\n if (!gitRemote) {\n throw this.#resolveError(\n spec,\n options,\n 'git remote could not be determined',\n )\n }\n const revDoc = await revs(gitRemote, {\n cwd: this.options.projectRoot,\n })\n if (!revDoc) throw this.#resolveError(spec, options)\n return asPackument(revDoc)\n }\n // these are all faked packuments\n case 'file':\n case 'workspace':\n case 'remote': {\n const manifest = await this.manifest(f, options)\n return {\n name: manifest.name ?? '',\n 'dist-tags': {\n latest: manifest.version ?? '',\n },\n versions: {\n [manifest.version ?? '']: manifest,\n },\n }\n }\n case 'registry': {\n const { registry, name } = f\n const pakuURL = new URL(name, registry)\n const response = await this.registryClient.request(pakuURL, {\n headers: {\n accept: 'application/json',\n },\n })\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch packument',\n {\n url: pakuURL,\n response,\n },\n )\n }\n return response.json() as Packument\n }\n }\n }\n\n async resolve(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ): Promise<Resolution> {\n const memoKey = String(spec)\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const memo = this.#resolutions.get(memoKey)\n if (memo) return memo\n const f = spec.final\n switch (f.type) {\n case 'file': {\n const { file } = f\n if (!file || !spec.file) {\n throw this.#resolveError(\n spec,\n options,\n 'no path on file: specifier',\n )\n }\n const { from = this.#projectRoot } = options\n const resolved = pathResolve(from, spec.file)\n const r = { resolved, spec }\n this.#resolutions.set(memoKey, r)\n return r\n }\n\n case 'remote': {\n const { remoteURL } = f\n if (!remoteURL)\n throw this.#resolveError(\n spec,\n options,\n 'no URL in remote specifier',\n )\n const r = { resolved: remoteURL, spec }\n this.#resolutions.set(memoKey, r)\n return r\n }\n\n case 'workspace': {\n const ws = this.#getWS(spec, options)\n return {\n resolved: ws.fullpath,\n spec,\n }\n }\n\n case 'registry': {\n const mani = await this.manifest(spec, options)\n if (mani.dist) {\n const { integrity, tarball, signatures } = mani.dist\n if (tarball) {\n const r = {\n resolved: tarball,\n integrity,\n signatures,\n spec,\n }\n this.#resolutions.set(memoKey, r)\n return r\n }\n }\n throw this.#resolveError(spec, options)\n }\n\n case 'git': {\n const { gitRemote, remoteURL, gitSelectorParsed } = f\n if (remoteURL && gitSelectorParsed?.path === undefined) {\n // known git host with a tarball download endpoint\n const r = { resolved: remoteURL, spec }\n this.#resolutions.set(memoKey, r)\n return r\n }\n if (!gitRemote) {\n throw this.#resolveError(\n spec,\n options,\n 'no remote on git specifier',\n )\n }\n const rev = await gitResolve(gitRemote, spec.gitCommittish, {\n spec,\n })\n if (rev) {\n const r = {\n resolved: `${gitRemote}#${rev.sha}`,\n spec,\n }\n if (gitSelectorParsed) {\n r.resolved += Object.entries(gitSelectorParsed)\n .filter(([_, v]) => v)\n .map(([k, v]) => `::${k}:${v}`)\n .join('')\n }\n this.#resolutions.set(memoKey, r)\n return r\n }\n // have to actually clone somewhere\n const s: Spec = spec\n return this.#tmpdir(async tmpdir => {\n const sha = await clone(\n gitRemote,\n s.gitCommittish,\n tmpdir,\n {\n spec: s,\n },\n )\n const r = {\n resolved: `${gitRemote}#${sha}`,\n spec: s,\n }\n this.#resolutions.set(memoKey, r)\n return r\n })\n }\n }\n }\n\n async #tmpdir<T>(fn: (dir: string) => Promise<T>): Promise<T> {\n const p = `package-info/${randomBytes(6).toString('hex')}`\n const dir = xdg.runtime(p)\n try {\n return await fn(dir)\n } finally {\n // intentionally do not await\n void rm(dir, { recursive: true, force: true })\n }\n }\n\n // error resolving\n #resolveError(\n spec?: Spec,\n options: PackageInfoClientRequestOptions = {},\n message = 'Could not resolve',\n extra: ErrorCauseObject = {},\n ) {\n const { from = this.#projectRoot } = options\n const er = error(\n message,\n {\n code: 'ERESOLVE',\n spec,\n from,\n ...extra,\n },\n this.#resolveError,\n )\n return er\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ErrorCauseOptions } from '@vltpkg/error-cause'\nimport { error } from '@vltpkg/error-cause'\nimport { clone, resolve as gitResolve, revs } from '@vltpkg/git'\nimport { PackageJson } from '@vltpkg/package-json'\nimport type { PickManifestOptions } from '@vltpkg/pick-manifest'\nimport { pickManifest } from '@vltpkg/pick-manifest'\nimport type {\n RegistryClientOptions,\n RegistryClientRequestOptions,\n} from '@vltpkg/registry-client'\nimport { RegistryClient } from '@vltpkg/registry-client'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport { Spec } from '@vltpkg/spec'\nimport { Pool } from '@vltpkg/tar'\nimport type { Integrity, Manifest, Packument } from '@vltpkg/types'\nimport { asPackument, isIntegrity } from '@vltpkg/types'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport { XDG } from '@vltpkg/xdg'\nimport { randomBytes } from 'node:crypto'\nimport { readFile, rm, stat, symlink } from 'node:fs/promises'\nimport {\n basename,\n dirname,\n resolve as pathResolve,\n relative,\n} from 'node:path'\nimport { create as tarC } from 'tar'\nimport { rename } from './rename.ts'\n\nconst xdg = new XDG('vlt')\n\nexport type Resolution = {\n resolved: string\n integrity?: Integrity\n signatures?: Exclude<Manifest['dist'], undefined>['signatures']\n spec: Spec\n}\n\nexport type PackageInfoClientOptions = RegistryClientOptions &\n SpecOptions & {\n /** root of the project. Defaults to process.cwd() */\n projectRoot?: string\n /** PackageJson object */\n packageJson?: PackageJson\n\n monorepo?: Monorepo\n\n /** workspace groups to load, irrelevant if Monorepo provided */\n 'workspace-group'?: string[]\n\n /** workspace paths to load, irrelevant if Monorepo provided */\n workspace?: string[]\n }\n\nexport type PackageInfoClientRequestOptions = PickManifestOptions &\n RegistryClientRequestOptions & {\n /** dir to resolve `file://` specifiers against. Defaults to projectRoot. */\n from?: string\n }\n\nexport type PackageInfoClientExtractOptions =\n PackageInfoClientRequestOptions & {\n integrity?: Integrity\n resolved?: string\n }\n\nexport class PackageInfoClient {\n #registryClient?: RegistryClient\n #projectRoot: string\n #tarPool?: Pool\n options: PackageInfoClientOptions\n #resolutions = new Map<string, Resolution>()\n packageJson: PackageJson\n monorepo?: Monorepo\n #trustedIntegrities = new Map<string, Integrity>()\n\n get registryClient() {\n if (!this.#registryClient) {\n this.#registryClient = new RegistryClient(this.options)\n }\n return this.#registryClient\n }\n\n get tarPool() {\n if (!this.#tarPool) this.#tarPool = new Pool()\n return this.#tarPool\n }\n\n constructor(options: PackageInfoClientOptions = {}) {\n this.options = options\n this.#projectRoot = options.projectRoot || process.cwd()\n this.packageJson = options.packageJson ?? new PackageJson()\n const wsLoad = {\n ...(options.workspace?.length && { paths: options.workspace }),\n ...(options['workspace-group']?.length && {\n groups: options['workspace-group'],\n }),\n }\n this.monorepo =\n options.monorepo ??\n Monorepo.maybeLoad(this.#projectRoot, {\n load: wsLoad,\n packageJson: this.packageJson,\n })\n }\n\n async extract(\n spec: Spec | string,\n target: string,\n options: PackageInfoClientExtractOptions = {},\n ): Promise<Resolution> {\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const { from = this.#projectRoot, integrity, resolved } = options\n const f = spec.final\n const r =\n integrity && resolved ?\n { resolved, integrity, spec }\n : await this.resolve(spec, options)\n\n switch (f.type) {\n case 'git': {\n const {\n gitRemote,\n gitCommittish,\n remoteURL,\n gitSelectorParsed,\n } = f\n if (!remoteURL) {\n /* c8 ignore start - Impossible, would throw on the resolve */\n if (!gitRemote)\n throw this.#resolveError(\n spec,\n options,\n 'no remote on git: specifier',\n )\n /* c8 ignore stop */\n const { path } = gitSelectorParsed ?? {}\n if (path !== undefined) {\n // use obvious name because it's in node_modules\n const tmp = pathResolve(\n dirname(target),\n `.TEMP.${basename(target)}-${randomBytes(6).toString('hex')}`,\n )\n await clone(gitRemote, gitCommittish, tmp, { spec })\n const src = pathResolve(tmp, path)\n await rename(src, target)\n // intentionally not awaited\n void rm(tmp, { recursive: true, force: true })\n } else {\n await clone(gitRemote, gitCommittish, target, { spec })\n // intentionally not awaited\n void rm(target + '/.git', { recursive: true })\n }\n return r\n }\n // fallthrough if a remote tarball url present\n }\n\n case 'registry':\n case 'remote': {\n const trustIntegrity =\n this.#trustedIntegrities.get(r.resolved) === r.integrity\n\n const response = await this.registryClient.request(\n r.resolved,\n {\n integrity: r.integrity,\n trustIntegrity,\n },\n )\n\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch tarball',\n {\n url: r.resolved,\n response,\n },\n )\n }\n\n // if it's not trusted already, but valid, start trusting\n if (\n !trustIntegrity &&\n response.checkIntegrity({ spec, url: resolved })\n ) {\n this.#trustedIntegrities.set(r.resolved, response.integrity)\n }\n\n try {\n await this.tarPool.unpack(response.buffer(), target)\n } catch (er) {\n throw this.#resolveError(\n spec,\n options,\n 'tar unpack failed',\n { cause: er },\n )\n }\n return r\n }\n case 'file': {\n // if it's a directory, then \"extract\" means \"symlink\"\n const { file } = f\n /* c8 ignore start - asserted in resolve() */\n if (file === undefined)\n throw this.#resolveError(spec, options, 'no file path')\n /* c8 ignore stop */\n const path = pathResolve(from, file)\n const st = await stat(path)\n if (st.isFile()) {\n try {\n await this.tarPool.unpack(\n await this.tarball(spec, options),\n target,\n )\n } catch (er) {\n throw this.#resolveError(\n spec,\n options,\n 'tar unpack failed',\n { cause: er },\n )\n }\n } else if (st.isDirectory()) {\n const rel = relative(dirname(target), path)\n await symlink(rel, target, 'dir')\n /* c8 ignore start */\n } else {\n throw this.#resolveError(\n spec,\n options,\n 'file: specifier does not resolve to directory or tarball',\n )\n }\n /* c8 ignore stop */\n return r\n }\n case 'workspace': {\n const ws = this.#getWS(spec, options)\n const rel = relative(dirname(target), ws.fullpath)\n await symlink(rel, target, 'dir')\n return r\n }\n }\n }\n\n #getWS(spec: Spec, options: PackageInfoClientRequestOptions) {\n const { workspace } = spec\n /* c8 ignore start - asserted in resolve() */\n if (workspace === undefined)\n throw this.#resolveError(spec, options, 'no workspace ID')\n /* c8 ignore stop */\n if (!this.monorepo) {\n throw this.#resolveError(\n spec,\n options,\n 'Not in a monorepo, cannot resolve workspace spec',\n )\n }\n const ws = this.monorepo.get(workspace)\n if (!ws) {\n throw this.#resolveError(spec, options, 'workspace not found', {\n wanted: workspace,\n })\n }\n return ws\n }\n\n async tarball(\n spec: Spec | string,\n options: PackageInfoClientExtractOptions = {},\n ): Promise<Buffer> {\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n\n switch (f.type) {\n case 'registry': {\n const { dist } = await this.manifest(spec, options)\n if (!dist)\n throw this.#resolveError(\n spec,\n options,\n 'no dist object found in manifest',\n )\n\n const { tarball, integrity } = dist\n if (!tarball) {\n throw this.#resolveError(\n spec,\n options,\n 'no tarball found in manifest.dist',\n )\n }\n\n const trustIntegrity =\n this.#trustedIntegrities.get(tarball) === integrity\n\n const response = await this.registryClient.request(tarball, {\n ...options,\n integrity,\n trustIntegrity,\n })\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch tarball',\n { response, url: tarball },\n )\n }\n\n // if we don't already trust it, but it's valid, start trusting it\n if (\n !trustIntegrity &&\n response.checkIntegrity({ spec, url: tarball })\n ) {\n this.#trustedIntegrities.set(tarball, response.integrity)\n }\n\n return response.buffer()\n }\n\n case 'git': {\n const {\n remoteURL,\n gitRemote,\n gitCommittish,\n gitSelectorParsed,\n } = f\n const s: Spec = spec\n if (!remoteURL) {\n if (!gitRemote) {\n throw this.#resolveError(\n spec,\n options,\n 'no remote on git: specifier',\n )\n }\n const { path } = gitSelectorParsed ?? {}\n return await this.#tmpdir(async dir => {\n await clone(gitRemote, gitCommittish, dir + '/package', {\n spec: s,\n })\n let cwd = dir\n if (path !== undefined) {\n const src = pathResolve(dir, 'package', path)\n cwd = dirname(src)\n const pkg = pathResolve(cwd, 'package')\n if (src !== pkg) {\n const rand = randomBytes(6).toString('hex')\n // faster than deleting\n await rename(pkg, pkg + rand).catch(() => {})\n await rename(src, pkg)\n }\n }\n return tarC({ cwd, gzip: true }, ['package']).concat()\n })\n }\n // fallthrough if remoteURL set\n }\n\n case 'remote': {\n const { remoteURL } = f\n if (!remoteURL) {\n throw this.#resolveError(spec, options)\n }\n const response = await this.registryClient.request(remoteURL)\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch URL',\n { response, url: remoteURL },\n )\n }\n return response.buffer()\n }\n\n case 'file': {\n const { file } = f\n if (file === undefined)\n throw this.#resolveError(spec, options, 'no file path')\n const { from = this.#projectRoot } = options\n const path = pathResolve(from, file)\n const st = await stat(path)\n if (st.isDirectory()) {\n const p = dirname(path)\n const b = basename(path)\n // TODO: Pack properly, ignore stuff, bundleDeps, etc\n return tarC({ cwd: p, gzip: true }, [b]).concat()\n }\n return readFile(path)\n }\n\n case 'workspace': {\n // TODO: Pack properly, ignore stuff, bundleDeps, etc\n const ws = this.#getWS(spec, options)\n const p = dirname(ws.fullpath)\n const b = basename(ws.fullpath)\n return tarC({ cwd: p, gzip: true }, [b]).concat()\n }\n }\n }\n\n async manifest(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ) {\n const { from = this.#projectRoot } = options\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n\n switch (f.type) {\n case 'registry': {\n const mani = pickManifest(\n await this.packument(f, options),\n spec,\n options,\n )\n if (!mani) throw this.#resolveError(spec, options)\n const { integrity, tarball } = mani.dist ?? {}\n if (isIntegrity(integrity) && tarball) {\n const registryOrigin = new URL(String(spec.registry)).origin\n const tgzOrigin = new URL(tarball).origin\n // if it comes from the same origin, trust the integrity\n if (tgzOrigin === registryOrigin) {\n this.#trustedIntegrities.set(tarball, integrity)\n }\n }\n return mani\n }\n\n case 'git': {\n const {\n gitRemote,\n gitCommittish,\n remoteURL,\n gitSelectorParsed,\n } = f\n if (!remoteURL) {\n const s = spec\n if (!gitRemote)\n throw this.#resolveError(spec, options, 'no git remote')\n return await this.#tmpdir(async dir => {\n await clone(gitRemote, gitCommittish, dir, { spec: s })\n const { path } = gitSelectorParsed ?? {}\n const pkgDir =\n path !== undefined ? pathResolve(dir, path) : dir\n return this.packageJson.read(pkgDir)\n })\n }\n // fallthrough to remote\n }\n\n case 'remote': {\n const { remoteURL } = f\n if (!remoteURL) {\n throw this.#resolveError(\n spec,\n options,\n 'no remoteURL on remote specifier',\n )\n }\n const s = spec\n return await this.#tmpdir(async dir => {\n const response =\n await this.registryClient.request(remoteURL)\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n s,\n options,\n 'failed to fetch URL',\n { response, url: remoteURL },\n )\n }\n const buf = response.buffer()\n try {\n await this.tarPool.unpack(buf, dir)\n } catch (er) {\n throw this.#resolveError(\n s,\n options,\n 'tar unpack failed',\n { cause: er },\n )\n }\n return this.packageJson.read(dir)\n })\n }\n\n case 'file': {\n const { file } = f\n if (file === undefined)\n throw this.#resolveError(spec, options, 'no file path')\n const path = pathResolve(from, file)\n const st = await stat(path)\n if (st.isDirectory()) {\n return this.packageJson.read(path)\n }\n const s = spec\n return await this.#tmpdir(async dir => {\n try {\n await this.tarPool.unpack(await readFile(path), dir)\n } catch (er) {\n throw this.#resolveError(\n s,\n options,\n 'tar unpack failed',\n { cause: er },\n )\n }\n return this.packageJson.read(dir)\n })\n }\n\n case 'workspace': {\n return this.#getWS(spec, options).manifest\n }\n }\n }\n\n async packument(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ): Promise<Packument> {\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n const f = spec.final\n switch (f.type) {\n // RevDoc is the equivalent of a packument for a git repo\n case 'git': {\n const { gitRemote } = f\n if (!gitRemote) {\n throw this.#resolveError(\n spec,\n options,\n 'git remote could not be determined',\n )\n }\n const revDoc = await revs(gitRemote, {\n cwd: this.options.projectRoot,\n })\n if (!revDoc) throw this.#resolveError(spec, options)\n return asPackument(revDoc)\n }\n\n // these are all faked packuments\n case 'file':\n case 'workspace':\n case 'remote': {\n const manifest = await this.manifest(f, options)\n return {\n name: manifest.name ?? '',\n 'dist-tags': {\n latest: manifest.version ?? '',\n },\n versions: {\n [manifest.version ?? '']: manifest,\n },\n }\n }\n\n case 'registry': {\n const { registry, name } = f\n const pakuURL = new URL(name, registry)\n const response = await this.registryClient.request(pakuURL, {\n headers: {\n accept: 'application/json',\n },\n })\n if (response.statusCode !== 200) {\n throw this.#resolveError(\n spec,\n options,\n 'failed to fetch packument',\n {\n url: pakuURL,\n response,\n },\n )\n }\n return response.json() as Packument\n }\n }\n }\n\n async resolve(\n spec: Spec | string,\n options: PackageInfoClientRequestOptions = {},\n ): Promise<Resolution> {\n const memoKey = String(spec)\n if (typeof spec === 'string')\n spec = Spec.parse(spec, this.options)\n\n const memo = this.#resolutions.get(memoKey)\n if (memo) return memo\n const f = spec.final\n\n switch (f.type) {\n case 'file': {\n const { file } = f\n if (!file || !spec.file) {\n throw this.#resolveError(\n spec,\n options,\n 'no path on file: specifier',\n )\n }\n const { from = this.#projectRoot } = options\n const resolved = pathResolve(from, spec.file)\n const r = { resolved, spec }\n this.#resolutions.set(memoKey, r)\n return r\n }\n\n case 'remote': {\n const { remoteURL } = f\n if (!remoteURL)\n throw this.#resolveError(\n spec,\n options,\n 'no URL in remote specifier',\n )\n const r = { resolved: remoteURL, spec }\n this.#resolutions.set(memoKey, r)\n return r\n }\n\n case 'workspace': {\n const ws = this.#getWS(spec, options)\n return {\n resolved: ws.fullpath,\n spec,\n }\n }\n\n case 'registry': {\n const mani = await this.manifest(spec, options)\n if (mani.dist) {\n const { integrity, tarball, signatures } = mani.dist\n if (tarball) {\n const r = {\n resolved: tarball,\n integrity,\n signatures,\n spec,\n }\n this.#resolutions.set(memoKey, r)\n return r\n }\n }\n throw this.#resolveError(spec, options)\n }\n\n case 'git': {\n const { gitRemote, remoteURL, gitSelectorParsed } = f\n if (remoteURL && gitSelectorParsed?.path === undefined) {\n // known git host with a tarball download endpoint\n const r = { resolved: remoteURL, spec }\n this.#resolutions.set(memoKey, r)\n return r\n }\n if (!gitRemote) {\n throw this.#resolveError(\n spec,\n options,\n 'no remote on git specifier',\n )\n }\n const rev = await gitResolve(gitRemote, spec.gitCommittish, {\n spec,\n })\n if (rev) {\n const r = {\n resolved: `${gitRemote}#${rev.sha}`,\n spec,\n }\n if (gitSelectorParsed) {\n r.resolved += Object.entries(gitSelectorParsed)\n .filter(([_, v]) => v)\n .map(([k, v]) => `::${k}:${v}`)\n .join('')\n }\n this.#resolutions.set(memoKey, r)\n return r\n }\n // have to actually clone somewhere\n const s: Spec = spec\n return this.#tmpdir(async tmpdir => {\n const sha = await clone(\n gitRemote,\n s.gitCommittish,\n tmpdir,\n {\n spec: s,\n },\n )\n const r = {\n resolved: `${gitRemote}#${sha}`,\n spec: s,\n }\n this.#resolutions.set(memoKey, r)\n return r\n })\n }\n }\n }\n\n async #tmpdir<T>(fn: (dir: string) => Promise<T>): Promise<T> {\n const p = `package-info/${randomBytes(6).toString('hex')}`\n const dir = xdg.runtime(p)\n try {\n return await fn(dir)\n } finally {\n // intentionally do not await\n void rm(dir, { recursive: true, force: true })\n }\n }\n\n // error resolving\n #resolveError(\n spec?: Spec,\n options: PackageInfoClientRequestOptions = {},\n message = 'Could not resolve',\n extra: ErrorCauseOptions = {},\n ) {\n const { from = this.#projectRoot } = options\n const er = error(\n message,\n {\n code: 'ERESOLVE',\n spec,\n from,\n ...extra,\n },\n this.#resolveError,\n )\n return er\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/rename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;AAE5B,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACzD,MAAM,CAAC,MAAM,MAAM,GACjB,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChC,KAAK,WACH,OAAiB,EACjB,OAAiB;IAEjB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,KAAK,GAAG,KAAK,EAAE,EAAW,EAAiB,EAAE;QACjD,IACE,OAAO,GAAG,CAAC;YACV,EAA4B,CAAC,IAAI,KAAK,OAAO,EAC9C,CAAC;YACD,OAAO,EAAE,CAAA;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,CAAC,CAAA;QACzD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAA;QACV,CAAC;IACH,CAAC,CAAA;IACD,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC,CACF,CAAA","sourcesContent":["/**\n * On posix systems, rename is atomic and will clobber anything in its way\n * However, on Windows, it can fail with the rather unhelpful EPERM error if\n * the target directory is not removed in time or is currently in use.\n *\n * While true atomic semantics is not available on Windows in this case, we can\n * at least implement the posix overwrite semantics by explicitly removing the\n * target when this error occurs.\n *\n * This is only relevant when renaming *directories*, since files will\n * generally not raise problems. When/if we rename directories outside of\n * package-info, this can be moved to its own shared module.\n * @module\n */\nconst { platform } = process\nimport { type PathLike } from 'node:fs'\nimport { rename as fsRename, rm } from 'node:fs/promises'\nexport const rename =\n platform !== 'win32' ? fsRename : (\n async function (\n oldPath: PathLike,\n newPath: PathLike,\n ): Promise<void> {\n let retries = 3\n const retry = async (er: unknown): Promise<void> => {\n if (\n retries > 0 &&\n (er as NodeJS.ErrnoException).code === 'EPERM'\n ) {\n retries--\n await rm(newPath, { recursive: true, force: true })\n return fsRename(oldPath, newPath).then(() => {}, retry)\n } else {\n throw er\n }\n }\n return fsRename(oldPath, newPath).then(() => {}, retry)\n }\n )\n"]}
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/rename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;AAE5B,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACzD,MAAM,CAAC,MAAM,MAAM,GACjB,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChC,KAAK,WACH,OAAiB,EACjB,OAAiB;IAEjB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,KAAK,GAAG,KAAK,EAAE,EAAW,EAAiB,EAAE;QACjD,IACE,OAAO,GAAG,CAAC;YACV,EAA4B,CAAC,IAAI,KAAK,OAAO,EAC9C,CAAC;YACD,OAAO,EAAE,CAAA;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,CAAC,CAAA;QACzD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAA;QACV,CAAC;IACH,CAAC,CAAA;IACD,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC,CACF,CAAA","sourcesContent":["/**\n * On posix systems, rename is atomic and will clobber anything in its way\n * However, on Windows, it can fail with the rather unhelpful EPERM error if\n * the target directory is not removed in time or is currently in use.\n *\n * While true atomic semantics is not available on Windows in this case, we can\n * at least implement the posix overwrite semantics by explicitly removing the\n * target when this error occurs.\n *\n * This is only relevant when renaming *directories*, since files will\n * generally not raise problems. When/if we rename directories outside of\n * package-info, this can be moved to its own shared module.\n * @module\n */\nconst { platform } = process\nimport type { PathLike } from 'node:fs'\nimport { rename as fsRename, rm } from 'node:fs/promises'\nexport const rename =\n platform !== 'win32' ? fsRename : (\n async function (\n oldPath: PathLike,\n newPath: PathLike,\n ): Promise<void> {\n let retries = 3\n const retry = async (er: unknown): Promise<void> => {\n if (\n retries > 0 &&\n (er as NodeJS.ErrnoException).code === 'EPERM'\n ) {\n retries--\n await rm(newPath, { recursive: true, force: true })\n return fsRename(oldPath, newPath).then(() => {}, retry)\n } else {\n throw er\n }\n }\n return fsRename(oldPath, newPath).then(() => {}, retry)\n }\n )\n"]}
package/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@vltpkg/package-info",
3
3
  "description": "Resolve and fetch package metadata and tarballs",
4
- "version": "0.0.0-0.1730724342581",
4
+ "version": "0.0.0-10",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/vltpkg/vltpkg.git",
8
+ "directory": "src/package-info"
9
+ },
5
10
  "tshy": {
6
11
  "selfLink": false,
12
+ "liveDev": true,
7
13
  "dialects": [
8
14
  "esm"
9
15
  ],
@@ -14,34 +20,34 @@
14
20
  },
15
21
  "dependencies": {
16
22
  "tar": "^7.4.3",
17
- "@vltpkg/error-cause": "0.0.0-0.1730724342581",
18
- "@vltpkg/git": "0.0.0-0.1730724342581",
19
- "@vltpkg/pick-manifest": "0.0.0-0.1730724342581",
20
- "@vltpkg/package-json": "0.0.0-0.1730724342581",
21
- "@vltpkg/tar": "0.0.0-0.1730724342581",
22
- "@vltpkg/types": "0.0.0-0.1730724342581",
23
- "@vltpkg/xdg": "0.0.0-0.1730724342581",
24
- "@vltpkg/workspaces": "0.0.0-0.1730724342581",
25
- "@vltpkg/spec": "0.0.0-0.1730724342581",
26
- "@vltpkg/registry-client": "0.0.0-0.1730724342581"
23
+ "@vltpkg/error-cause": "0.0.0-10",
24
+ "@vltpkg/git": "0.0.0-10",
25
+ "@vltpkg/package-json": "0.0.0-10",
26
+ "@vltpkg/pick-manifest": "0.0.0-10",
27
+ "@vltpkg/registry-client": "0.0.0-10",
28
+ "@vltpkg/spec": "0.0.0-10",
29
+ "@vltpkg/tar": "0.0.0-10",
30
+ "@vltpkg/types": "0.0.0-10",
31
+ "@vltpkg/xdg": "0.0.0-10",
32
+ "@vltpkg/workspaces": "0.0.0-10"
27
33
  },
28
34
  "devDependencies": {
29
- "@eslint/js": "^9.8.0",
30
- "@types/eslint__js": "^8.42.3",
31
- "@types/node": "^22.4.1",
32
- "eslint": "^9.8.0",
33
- "pacote": "^18.0.6",
34
- "prettier": "^3.3.2",
35
- "tap": "^21.0.1",
35
+ "@eslint/js": "^9.25.0",
36
+ "@types/node": "^22.14.1",
37
+ "eslint": "^9.25.0",
38
+ "pacote": "^21.0.0",
39
+ "prettier": "^3.5.3",
40
+ "tap": "^21.1.0",
36
41
  "tshy": "^3.0.2",
37
- "typescript": "^5.5.4",
38
- "typescript-eslint": "^8.0.1",
39
- "@vltpkg/benchmark": "0.0.0-0",
40
- "@vltpkg/cache-unzip": "0.0.0-0.1730724342581"
42
+ "typedoc": "~0.27.6",
43
+ "typescript": "5.7.3",
44
+ "typescript-eslint": "^8.30.1",
45
+ "@vltpkg/benchmark": "0.0.0",
46
+ "@vltpkg/cache-unzip": "0.0.0-10"
41
47
  },
42
48
  "license": "BSD-2-Clause-Patent",
43
49
  "engines": {
44
- "node": "20 || >=22"
50
+ "node": ">=22"
45
51
  },
46
52
  "tap": {
47
53
  "extends": "../../tap-config.yaml"
@@ -62,14 +68,14 @@
62
68
  "dist"
63
69
  ],
64
70
  "scripts": {
65
- "benchmark": "node scripts/benchmark.js",
71
+ "benchmark": "./scripts/benchmark.js",
66
72
  "format": "prettier --write . --log-level warn --ignore-path ../../.prettierignore --cache",
67
73
  "format:check": "prettier --check . --ignore-path ../../.prettierignore --cache",
68
74
  "lint": "eslint . --fix",
69
75
  "lint:check": "eslint .",
70
- "presnap": "tshy",
71
76
  "snap": "tap",
72
- "pretest": "tshy",
73
- "test": "tap"
77
+ "test": "tap",
78
+ "posttest": "tsc --noEmit",
79
+ "typecheck": "tsc --noEmit"
74
80
  }
75
81
  }