@vltpkg/git 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.
Files changed (47) hide show
  1. package/README.md +39 -39
  2. package/dist/esm/clone.d.ts +2 -2
  3. package/dist/esm/clone.d.ts.map +1 -1
  4. package/dist/esm/clone.js +7 -7
  5. package/dist/esm/clone.js.map +1 -1
  6. package/dist/esm/find.js +2 -2
  7. package/dist/esm/find.js.map +1 -1
  8. package/dist/esm/index.d.ts +12 -11
  9. package/dist/esm/index.d.ts.map +1 -1
  10. package/dist/esm/index.js +8 -7
  11. package/dist/esm/index.js.map +1 -1
  12. package/dist/esm/is-clean.js +1 -1
  13. package/dist/esm/is-clean.js.map +1 -1
  14. package/dist/esm/is-windows.d.ts +1 -1
  15. package/dist/esm/is-windows.d.ts.map +1 -1
  16. package/dist/esm/is-windows.js.map +1 -1
  17. package/dist/esm/is.js +1 -1
  18. package/dist/esm/is.js.map +1 -1
  19. package/dist/esm/lines-to-revs.d.ts +1 -1
  20. package/dist/esm/lines-to-revs.d.ts.map +1 -1
  21. package/dist/esm/lines-to-revs.js.map +1 -1
  22. package/dist/esm/make-error.d.ts +1 -1
  23. package/dist/esm/make-error.d.ts.map +1 -1
  24. package/dist/esm/make-error.js.map +1 -1
  25. package/dist/esm/opts.d.ts +2 -2
  26. package/dist/esm/opts.d.ts.map +1 -1
  27. package/dist/esm/opts.js.map +1 -1
  28. package/dist/esm/resolve.d.ts +2 -2
  29. package/dist/esm/resolve.d.ts.map +1 -1
  30. package/dist/esm/resolve.js +1 -1
  31. package/dist/esm/resolve.js.map +1 -1
  32. package/dist/esm/revs.d.ts +2 -2
  33. package/dist/esm/revs.d.ts.map +1 -1
  34. package/dist/esm/revs.js +3 -3
  35. package/dist/esm/revs.js.map +1 -1
  36. package/dist/esm/spawn.d.ts +2 -2
  37. package/dist/esm/spawn.d.ts.map +1 -1
  38. package/dist/esm/spawn.js +4 -4
  39. package/dist/esm/spawn.js.map +1 -1
  40. package/dist/esm/user.d.ts +6 -0
  41. package/dist/esm/user.d.ts.map +1 -0
  42. package/dist/esm/user.js +39 -0
  43. package/dist/esm/user.js.map +1 -0
  44. package/dist/esm/which.d.ts +2 -2
  45. package/dist/esm/which.d.ts.map +1 -1
  46. package/dist/esm/which.js.map +1 -1
  47. package/package.json +28 -22
package/README.md CHANGED
@@ -4,11 +4,7 @@
4
4
 
5
5
  A utility for spawning git from npm CLI contexts.
6
6
 
7
- **[Usage](#usage)**
8
- ·
9
- **[API](#api)**
10
- ·
11
- **[Options](#options)**
7
+ **[Usage](#usage)** · **[API](#api)** · **[Options](#options)**
12
8
 
13
9
  ## Overview
14
10
 
@@ -49,23 +45,23 @@ All the other functions call this one at some point.
49
45
  Processes are launched using
50
46
  [`@vltpkg/promise-spawn`](http://npm.im/@vltpkg/promise-spawn).
51
47
 
52
- Return value is a `SpawnPromise` that resolves to a result object
53
- with `{cmd, args, code, signal, stdout, stderr}` members, or
54
- rejects with an error with the same fields, passed back from
48
+ Return value is a `SpawnPromise` that resolves to a result object with
49
+ `{cmd, args, code, signal, stdout, stderr}` members, or rejects with
50
+ an error with the same fields, passed back from
55
51
  [`@vltpkg/promise-spawn`](http://npm.im/@vltpkg/promise-spawn).
56
52
 
57
53
  ### `clone(repo, ref = 'HEAD', target = null, opts = {})` -> `Promise<sha string>`
58
54
 
59
- Clone the repository into `target` path (or the default path for the name
60
- of the repository), checking out `ref`.
55
+ Clone the repository into `target` path (or the default path for the
56
+ name of the repository), checking out `ref`.
61
57
 
62
58
  Return value is the sha of the current HEAD in the locally cloned
63
59
  repository.
64
60
 
65
- In lieu of a specific `ref`, you may also pass in a `spec` option, which is
66
- a [`npm-package-arg`](http://npm.im/npm-package-arg) object for a `git`
67
- package dependency reference. In this way, you can select SemVer tags
68
- within a range, or any git committish value. For example:
61
+ In lieu of a specific `ref`, you may also pass in a `spec` option,
62
+ which is a [`npm-package-arg`](http://npm.im/npm-package-arg) object
63
+ for a `git` package dependency reference. In this way, you can select
64
+ SemVer tags within a range, or any git committish value. For example:
69
65
 
70
66
  ```js
71
67
  import { Spec } from '@vltpkg/spec'
@@ -75,17 +71,16 @@ clone('git@github.com:npm/git.git', '', null, {
75
71
  })
76
72
  ```
77
73
 
78
- This will automatically do a shallow `--depth=1` clone on any hosts that
79
- are known to support it. To force a shallow or deep clone, you can set the
80
- `gitShallow` option to `true` or `false` respectively.
74
+ This will automatically do a shallow `--depth=1` clone on any hosts
75
+ that are known to support it. To force a shallow or deep clone, you
76
+ can set the `gitShallow` option to `true` or `false` respectively.
81
77
 
82
78
  ### `revs(repo, opts = {})` -> `Promise<rev doc Object>`
83
79
 
84
80
  Fetch a representation of all of the named references in a given
85
81
  repository. The resulting doc is intentionally somewhat
86
- packument-like, so that git semver ranges can be applied using
87
- the same
88
- [`@vltpkg/pick-manifest`](http://npm.im/@vltpkg/pick-manifest)
82
+ packument-like, so that git semver ranges can be applied using the
83
+ same [`@vltpkg/pick-manifest`](http://npm.im/@vltpkg/pick-manifest)
89
84
  logic.
90
85
 
91
86
  The resulting object looks like:
@@ -131,25 +126,30 @@ revs = {
131
126
  Resolve to `true` if the `cwd` option refers to the root of a git
132
127
  repository.
133
128
 
134
- It does this by looking for a file or folder at `${path}/.git`,
135
- which is not an airtight indicator, but usually pretty reliable.
129
+ It does this by looking for a file or folder at `${path}/.git`, which
130
+ is not an airtight indicator, but usually pretty reliable.
136
131
 
137
132
  ### `git.find(opts)` -> `Promise<string | undefined>`
138
133
 
139
- Given a path, walk up the file system tree until a git repo
140
- working directory is found. Since this calls `stat` a bunch of
141
- times, it's probably best to only call it if you're reasonably
142
- sure you're likely to be in a git project somewhere. Pass in
143
- `opts.root` to stop checking at that directory.
134
+ Given a path, walk up the file system tree until a git repo working
135
+ directory is found. Since this calls `stat` a bunch of times, it's
136
+ probably best to only call it if you're reasonably sure you're likely
137
+ to be in a git project somewhere. Pass in `opts.root` to stop checking
138
+ at that directory.
144
139
 
145
140
  Resolves to `undefined` if not in a git project.
146
141
 
147
142
  ### `isClean(opts = {})` -> `Promise<boolean>`
148
143
 
149
- Return true if in a git dir, and that git dir is free of changes.
150
- This will resolve `true` if the git working dir is clean, or
151
- `false` if not, and reject if the path is not within a git
152
- directory or some other error occurs.
144
+ Return true if in a git dir, and that git dir is free of changes. This
145
+ will resolve `true` if the git working dir is clean, or `false` if
146
+ not, and reject if the path is not within a git directory or some
147
+ other error occurs.
148
+
149
+ ### `getUser(opts = {})` -> `Promise<{name, email} | undefined>`
150
+
151
+ Returns the user.name and user.email from the git config if found. If
152
+ no value is found, it will return `undefined`.
153
153
 
154
154
  ## Options
155
155
 
@@ -159,15 +159,15 @@ directory or some other error occurs.
159
159
  - `factor`: Defaults to `opts.fetchRetryFactor` or 10
160
160
  - `maxTimeout`: Defaults to `opts.fetchRetryMaxtimeout` or 60000
161
161
  - `minTimeout`: Defaults to `opts.fetchRetryMintimeout` or 1000
162
- - `git` Path to the `git` binary to use. Will look up the first `git` in
163
- the `PATH` if not specified.
164
- - `spec` The [`@vltpkg/spec`](http://npm.im/@vltpkg/spec)
165
- specifier object for the thing being fetched (if relevant).
166
- - `fakePlatform` set to a fake value of `process.platform` to use. (Just
167
- for testing `win32` behavior on Unix, and vice versa.)
162
+ - `git` Path to the `git` binary to use. Will look up the first `git`
163
+ in the `PATH` if not specified.
164
+ - `spec` The [`@vltpkg/spec`](http://npm.im/@vltpkg/spec) specifier
165
+ object for the thing being fetched (if relevant).
166
+ - `fakePlatform` set to a fake value of `process.platform` to use.
167
+ (Just for testing `win32` behavior on Unix, and vice versa.)
168
168
  - `cwd` The current working dir for the git command. Particularly for
169
- `find` and `is` and `isClean`, it's good to know that this defaults to
170
- `process.cwd()`, as one might expect.
169
+ `find` and `is` and `isClean`, it's good to know that this defaults
170
+ to `process.cwd()`, as one might expect.
171
171
  - Any other options that can be passed to
172
172
  [`@vltpkg/promise-spawn`](http://npm.im/@vltpkg/promise-spawn), or
173
173
  `child_process.spawn()`.
@@ -1,4 +1,4 @@
1
- import { type GitOptions } from './index.js';
1
+ import type { GitOptions } from './index.ts';
2
2
  /**
3
3
  * Only these whitelisted hosts get shallow cloning. Many hosts (including GHE)
4
4
  * don't always support it. A failed shallow fetch takes a LOT longer than a
@@ -9,5 +9,5 @@ import { type GitOptions } from './index.js';
9
9
  * as well.
10
10
  */
11
11
  export declare const shallowHosts: Set<string>;
12
- export declare const clone: (repo: string, ref?: string, target?: string | undefined, opts?: GitOptions) => Promise<string | (Buffer & string)>;
12
+ export declare const clone: (repo: string, ref?: string, target?: string | undefined, opts?: GitOptions) => Promise<string>;
13
13
  //# sourceMappingURL=clone.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/clone.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAM5C;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,aAMvB,CAAA;AAEF,eAAO,MAAM,KAAK,SACV,MAAM,yBAEJ,MAAM,GAAG,SAAS,SACpB,UAAU,wCAajB,CAAA"}
1
+ {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/clone.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAM5C;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,aAMvB,CAAA;AAEF,eAAO,MAAM,KAAK,SACV,MAAM,yBAEJ,MAAM,GAAG,SAAS,SACpB,UAAU,oBAajB,CAAA"}
package/dist/esm/clone.js CHANGED
@@ -4,13 +4,13 @@
4
4
  // Every method ends up with the checked out working dir
5
5
  // at the specified ref, and resolves with the git sha.
6
6
  import { gitScpURL } from '@vltpkg/git-scp-url';
7
- import { mkdir, stat } from 'fs/promises';
8
- import { basename, resolve } from 'path';
9
- import { fileURLToPath } from 'url';
10
- import { isWindows } from './is-windows.js';
11
- import { resolveRef } from './resolve.js';
12
- import { revs as getRevs } from './revs.js';
13
- import { spawn } from './spawn.js';
7
+ import { mkdir, stat } from 'node:fs/promises';
8
+ import { basename, resolve } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { isWindows } from "./is-windows.js";
11
+ import { resolveRef } from "./resolve.js";
12
+ import { revs as getRevs } from "./revs.js";
13
+ import { spawn } from "./spawn.js";
14
14
  /**
15
15
  * Only these whitelisted hosts get shallow cloning. Many hosts (including GHE)
16
16
  * don't always support it. A failed shallow fetch takes a LOT longer than a
@@ -1 +1 @@
1
- {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/clone.ts"],"names":[],"mappings":"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","sourcesContent":["// The goal here is to minimize both git workload and\n// the number of refs we download over the network.\n//\n// Every method ends up with the checked out working dir\n// at the specified ref, and resolves with the git sha.\n\nimport { type RevDoc, type RevDocEntry } from '@vltpkg/types'\nimport { gitScpURL } from '@vltpkg/git-scp-url'\nimport { mkdir, stat } from 'fs/promises'\nimport { basename, resolve } from 'path'\nimport { fileURLToPath } from 'url'\nimport { type GitOptions } from './index.js'\nimport { isWindows } from './is-windows.js'\nimport { resolveRef } from './resolve.js'\nimport { revs as getRevs } from './revs.js'\nimport { spawn } from './spawn.js'\n\n/**\n * Only these whitelisted hosts get shallow cloning. Many hosts (including GHE)\n * don't always support it. A failed shallow fetch takes a LOT longer than a\n * full fetch in most cases, so we skip it entirely. Set opts.gitShallow =\n * true/false to force this behavior one way or the other.\n *\n * If other hosts are added to this set, then they will be shallowly cloned\n * as well.\n */\nexport const shallowHosts = new Set([\n 'github.com',\n 'gist.github.com',\n 'gitlab.com',\n 'bitbucket.com',\n 'bitbucket.org',\n])\n\nexport const clone = async (\n repo: string,\n ref = 'HEAD',\n target: string | undefined = undefined,\n opts: GitOptions = {},\n) => {\n repo = String(gitScpURL(repo) ?? repo).replace(/^git\\+/, '')\n if (repo.startsWith('file://')) repo = fileURLToPath(repo)\n const revs = await getRevs(repo, opts)\n return await clone_(\n repo,\n revs,\n ref,\n revs && resolveRef(revs, ref, opts),\n target || defaultTarget(repo, opts.cwd),\n opts,\n )\n}\n\nconst maybeShallow = (repo: string, opts: GitOptions) => {\n if (opts['git-shallow'] === false || opts['git-shallow']) {\n return opts['git-shallow']\n }\n const host = gitScpURL(repo)?.host ?? ''\n return shallowHosts.has(host)\n}\n\nconst defaultTarget = (\n repo: string,\n /* c8 ignore next */ cwd = process.cwd(),\n) => resolve(cwd, basename(repo.replace(/[/\\\\]?\\.git$/, '')))\n\nconst clone_ = (\n repo: string,\n revs: RevDoc | undefined,\n ref: string,\n revDoc: RevDocEntry | undefined,\n target: string,\n opts: GitOptions,\n) => {\n if (!revDoc || !revs) {\n return unresolved(repo, ref, target, opts)\n }\n if (revDoc.sha === revs.refs.HEAD?.sha) {\n return plain(repo, revDoc, target, opts)\n }\n if (revDoc.type === 'tag' || revDoc.type === 'branch') {\n return branch(repo, revDoc, target, opts)\n }\n return other(repo, revDoc, target, opts)\n}\n\n// pull request or some other kind of advertised ref\nconst other = async (\n repo: string,\n revDoc: RevDocEntry,\n target: string,\n opts: GitOptions,\n) => {\n const shallow = maybeShallow(repo, opts)\n\n const fetchOrigin = ['fetch', 'origin', revDoc.rawRef].concat(\n shallow ? ['--depth=1'] : [],\n )\n\n const git = (args: string[]) =>\n spawn(args, { ...opts, cwd: target })\n await mkdir(target, { recursive: true })\n await git(['init'])\n if (isWindows(opts)) {\n await git([\n 'config',\n '--local',\n '--add',\n 'core.longpaths',\n 'true',\n ])\n }\n await git(['remote', 'add', 'origin', repo])\n await git(fetchOrigin)\n await git(['checkout', revDoc.sha])\n await updateSubmodules(target, opts)\n return revDoc.sha\n}\n\n// tag or branches. use -b\nconst branch = async (\n repo: string,\n revDoc: RevDocEntry,\n target: string,\n opts: GitOptions,\n) => {\n const args = [\n 'clone',\n '-b',\n revDoc.ref,\n repo,\n target,\n '--recurse-submodules',\n ]\n if (maybeShallow(repo, opts)) {\n args.push('--depth=1')\n }\n if (isWindows(opts)) {\n args.push('--config', 'core.longpaths=true')\n }\n await spawn(args, opts)\n return revDoc.sha\n}\n\n// just the head. clone it\nconst plain = async (\n repo: string,\n revDoc: RevDocEntry,\n target: string,\n opts: GitOptions,\n) => {\n const args = ['clone', repo, target, '--recurse-submodules']\n if (maybeShallow(repo, opts)) {\n args.push('--depth=1')\n }\n if (isWindows(opts)) {\n args.push('--config', 'core.longpaths=true')\n }\n await spawn(args, opts)\n return revDoc.sha\n}\n\nconst updateSubmodules = async (target: string, opts: GitOptions) => {\n const hasSubmodules = await stat(`${target}/.gitmodules`)\n .then(() => true)\n .catch(() => false)\n if (!hasSubmodules) {\n return\n }\n await spawn(\n ['submodule', 'update', '-q', '--init', '--recursive'],\n { ...opts, cwd: target },\n )\n}\n\nconst unresolved = async (\n repo: string,\n ref: string,\n target: string,\n opts: GitOptions,\n) => {\n // can't do this one shallowly, because the ref isn't advertised\n // but we can avoid checking out the working dir twice, at least\n const lp =\n isWindows(opts) ? ['--config', 'core.longpaths=true'] : []\n const cloneArgs = [\n 'clone',\n '--mirror',\n '-q',\n repo,\n target + '/.git',\n ]\n const git = (args: string[]) =>\n spawn(args, { ...opts, cwd: target })\n await mkdir(target, { recursive: true })\n await git(cloneArgs.concat(lp))\n await git(['init'])\n await git(['checkout', ref])\n await updateSubmodules(target, opts)\n const result = await git(['rev-parse', '--revs-only', 'HEAD'])\n return result.stdout\n}\n"]}
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/clone.ts"],"names":[],"mappings":"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","sourcesContent":["// The goal here is to minimize both git workload and\n// the number of refs we download over the network.\n//\n// Every method ends up with the checked out working dir\n// at the specified ref, and resolves with the git sha.\n\nimport type { RevDoc, RevDocEntry } from '@vltpkg/types'\nimport { gitScpURL } from '@vltpkg/git-scp-url'\nimport { mkdir, stat } from 'node:fs/promises'\nimport { basename, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport type { GitOptions } from './index.ts'\nimport { isWindows } from './is-windows.ts'\nimport { resolveRef } from './resolve.ts'\nimport { revs as getRevs } from './revs.ts'\nimport { spawn } from './spawn.ts'\n\n/**\n * Only these whitelisted hosts get shallow cloning. Many hosts (including GHE)\n * don't always support it. A failed shallow fetch takes a LOT longer than a\n * full fetch in most cases, so we skip it entirely. Set opts.gitShallow =\n * true/false to force this behavior one way or the other.\n *\n * If other hosts are added to this set, then they will be shallowly cloned\n * as well.\n */\nexport const shallowHosts = new Set([\n 'github.com',\n 'gist.github.com',\n 'gitlab.com',\n 'bitbucket.com',\n 'bitbucket.org',\n])\n\nexport const clone = async (\n repo: string,\n ref = 'HEAD',\n target: string | undefined = undefined,\n opts: GitOptions = {},\n) => {\n repo = String(gitScpURL(repo) ?? repo).replace(/^git\\+/, '')\n if (repo.startsWith('file://')) repo = fileURLToPath(repo)\n const revs = await getRevs(repo, opts)\n return await clone_(\n repo,\n revs,\n ref,\n revs && resolveRef(revs, ref, opts),\n target || defaultTarget(repo, opts.cwd),\n opts,\n )\n}\n\nconst maybeShallow = (repo: string, opts: GitOptions) => {\n if (opts['git-shallow'] === false || opts['git-shallow']) {\n return opts['git-shallow']\n }\n const host = gitScpURL(repo)?.host ?? ''\n return shallowHosts.has(host)\n}\n\nconst defaultTarget = (\n repo: string,\n /* c8 ignore next */ cwd = process.cwd(),\n) => resolve(cwd, basename(repo.replace(/[/\\\\]?\\.git$/, '')))\n\nconst clone_ = (\n repo: string,\n revs: RevDoc | undefined,\n ref: string,\n revDoc: RevDocEntry | undefined,\n target: string,\n opts: GitOptions,\n) => {\n if (!revDoc || !revs) {\n return unresolved(repo, ref, target, opts)\n }\n if (revDoc.sha === revs.refs.HEAD?.sha) {\n return plain(repo, revDoc, target, opts)\n }\n if (revDoc.type === 'tag' || revDoc.type === 'branch') {\n return branch(repo, revDoc, target, opts)\n }\n return other(repo, revDoc, target, opts)\n}\n\n// pull request or some other kind of advertised ref\nconst other = async (\n repo: string,\n revDoc: RevDocEntry,\n target: string,\n opts: GitOptions,\n) => {\n const shallow = maybeShallow(repo, opts)\n\n const fetchOrigin = ['fetch', 'origin', revDoc.rawRef].concat(\n shallow ? ['--depth=1'] : [],\n )\n\n const git = (args: string[]) =>\n spawn(args, { ...opts, cwd: target })\n await mkdir(target, { recursive: true })\n await git(['init'])\n if (isWindows(opts)) {\n await git([\n 'config',\n '--local',\n '--add',\n 'core.longpaths',\n 'true',\n ])\n }\n await git(['remote', 'add', 'origin', repo])\n await git(fetchOrigin)\n await git(['checkout', revDoc.sha])\n await updateSubmodules(target, opts)\n return revDoc.sha\n}\n\n// tag or branches. use -b\nconst branch = async (\n repo: string,\n revDoc: RevDocEntry,\n target: string,\n opts: GitOptions,\n) => {\n const args = [\n 'clone',\n '-b',\n revDoc.ref,\n repo,\n target,\n '--recurse-submodules',\n ]\n if (maybeShallow(repo, opts)) {\n args.push('--depth=1')\n }\n if (isWindows(opts)) {\n args.push('--config', 'core.longpaths=true')\n }\n await spawn(args, opts)\n return revDoc.sha\n}\n\n// just the head. clone it\nconst plain = async (\n repo: string,\n revDoc: RevDocEntry,\n target: string,\n opts: GitOptions,\n) => {\n const args = ['clone', repo, target, '--recurse-submodules']\n if (maybeShallow(repo, opts)) {\n args.push('--depth=1')\n }\n if (isWindows(opts)) {\n args.push('--config', 'core.longpaths=true')\n }\n await spawn(args, opts)\n return revDoc.sha\n}\n\nconst updateSubmodules = async (target: string, opts: GitOptions) => {\n const hasSubmodules = await stat(`${target}/.gitmodules`)\n .then(() => true)\n .catch(() => false)\n if (!hasSubmodules) {\n return\n }\n await spawn(\n ['submodule', 'update', '-q', '--init', '--recursive'],\n { ...opts, cwd: target },\n )\n}\n\nconst unresolved = async (\n repo: string,\n ref: string,\n target: string,\n opts: GitOptions,\n) => {\n // can't do this one shallowly, because the ref isn't advertised\n // but we can avoid checking out the working dir twice, at least\n const lp =\n isWindows(opts) ? ['--config', 'core.longpaths=true'] : []\n const cloneArgs = [\n 'clone',\n '--mirror',\n '-q',\n repo,\n target + '/.git',\n ]\n const git = (args: string[]) =>\n spawn(args, { ...opts, cwd: target })\n await mkdir(target, { recursive: true })\n await git(cloneArgs.concat(lp))\n await git(['init'])\n await git(['checkout', ref])\n await updateSubmodules(target, opts)\n const result = await git(['rev-parse', '--revs-only', 'HEAD'])\n return result.stdout\n}\n"]}
package/dist/esm/find.js CHANGED
@@ -1,5 +1,5 @@
1
- import { dirname } from 'path';
2
- import { is } from './is.js';
1
+ import { dirname } from 'node:path';
2
+ import { is } from "./is.js";
3
3
  export const find = async ({ cwd = process.cwd(), root, } = {}) => {
4
4
  while (true) {
5
5
  if (await is({ cwd })) {
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAM5B,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,EACzB,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,IAAI,MACQ,EAAE,EAAE,EAAE;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjC,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,GAAG,GAAG,IAAI,CAAA;IACZ,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { dirname } from 'path'\nimport { is } from './is.js'\n\nexport type FindOpts = {\n cwd?: string\n root?: string\n}\nexport const find = async ({\n cwd = process.cwd(),\n root,\n}: FindOpts = {}) => {\n while (true) {\n if (await is({ cwd })) {\n return cwd\n }\n const next = dirname(cwd)\n if (cwd === root || cwd === next) {\n return undefined\n }\n cwd = next\n }\n}\n"]}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAM5B,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,EACzB,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,IAAI,MACQ,EAAE,EAAE,EAAE;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjC,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,GAAG,GAAG,IAAI,CAAA;IACZ,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { dirname } from 'node:path'\nimport { is } from './is.ts'\n\nexport type FindOpts = {\n cwd?: string\n root?: string\n}\nexport const find = async ({\n cwd = process.cwd(),\n root,\n}: FindOpts = {}) => {\n while (true) {\n if (await is({ cwd })) {\n return cwd\n }\n const next = dirname(cwd)\n if (cwd === root || cwd === next) {\n return undefined\n }\n cwd = next\n }\n}\n"]}
@@ -1,14 +1,15 @@
1
- import { type PickManifestOptions } from '@vltpkg/pick-manifest';
2
- import { type Spec } from '@vltpkg/spec';
3
- import { type SpawnOptions } from 'child_process';
4
- import { type WrapOptions } from 'retry';
5
- export * from './clone.js';
6
- export * from './find.js';
7
- export * from './is-clean.js';
8
- export * from './is.js';
9
- export * from './resolve.js';
10
- export * from './revs.js';
11
- export * from './spawn.js';
1
+ import type { PickManifestOptions } from '@vltpkg/pick-manifest';
2
+ import type { Spec } from '@vltpkg/spec';
3
+ import type { SpawnOptions } from 'node:child_process';
4
+ import type { WrapOptions } from 'retry';
5
+ export * from './clone.ts';
6
+ export * from './find.ts';
7
+ export * from './is-clean.ts';
8
+ export * from './is.ts';
9
+ export * from './resolve.ts';
10
+ export * from './revs.ts';
11
+ export * from './spawn.ts';
12
+ export * from './user.ts';
12
13
  /**
13
14
  * This extends all options that can be passed to spawn() or pickManifest.
14
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,OAAO,CAAA;AAExC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAE1B;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAC1C,YAAY,GAAG;IACb,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IACxC,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC5C;;;OAGG;IACH,wBAAwB,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACpD;;;OAGG;IACH,wBAAwB,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACpD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC9B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAExC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AAEzB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAC1C,YAAY,GAAG;IACb,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IACxC,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC5C;;;OAGG;IACH,wBAAwB,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACpD;;;OAGG;IACH,wBAAwB,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACpD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC9B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA"}
package/dist/esm/index.js CHANGED
@@ -1,8 +1,9 @@
1
- export * from './clone.js';
2
- export * from './find.js';
3
- export * from './is-clean.js';
4
- export * from './is.js';
5
- export * from './resolve.js';
6
- export * from './revs.js';
7
- export * from './spawn.js';
1
+ export * from "./clone.js";
2
+ export * from "./find.js";
3
+ export * from "./is-clean.js";
4
+ export * from "./is.js";
5
+ export * from "./resolve.js";
6
+ export * from "./revs.js";
7
+ export * from "./spawn.js";
8
+ export * from "./user.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA","sourcesContent":["import { type PickManifestOptions } from '@vltpkg/pick-manifest'\nimport { type Spec } from '@vltpkg/spec'\nimport { type SpawnOptions } from 'child_process'\nimport { type WrapOptions } from 'retry'\n\nexport * from './clone.js'\nexport * from './find.js'\nexport * from './is-clean.js'\nexport * from './is.js'\nexport * from './resolve.js'\nexport * from './revs.js'\nexport * from './spawn.js'\n\n/**\n * This extends all options that can be passed to spawn() or pickManifest.\n */\nexport type GitOptions = PickManifestOptions &\n SpawnOptions & {\n /** the path to git binary, or 'false' to prevent all git operations */\n git?: string | false\n /** the current working directory to perform git operations in */\n cwd?: string\n /** Parsed git specifier to be cloned, if we have one */\n spec?: Spec\n /**\n * Set to a boolean to force cloning with/without `--depth=1`. If left\n * undefined, then shallow cloning will only be performed on hosts known to\n * support it.\n */\n 'git-shallow'?: boolean\n /** Only relevant if `retry` is unset. Value for retry.retries, default 2 */\n 'fetch-retries'?: WrapOptions['retries']\n /** Only relevant if `retry` is unset. Value for retry.factor, default 10 */\n 'fetch-retry-factor'?: WrapOptions['factor']\n /**\n * Only relevant if `retry` is unset. Value for retry.maxTimeout, default\n * 60_000\n */\n 'fetch-retry-maxtimeout'?: WrapOptions['maxTimeout']\n /**\n * Only relevant if `retry` is unset. Value for retry.minTimeout, default\n * 1_000\n */\n 'fetch-retry-mintimeout'?: WrapOptions['minTimeout']\n /**\n * Used to test platform-specific behavior.\n * @internal\n */\n fakePlatform?: NodeJS.Platform\n /**\n * Just to test rev lookup without continually clearing the cache\n */\n noGitRevCache?: boolean\n }\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA","sourcesContent":["import type { PickManifestOptions } from '@vltpkg/pick-manifest'\nimport type { Spec } from '@vltpkg/spec'\nimport type { SpawnOptions } from 'node:child_process'\nimport type { WrapOptions } from 'retry'\n\nexport * from './clone.ts'\nexport * from './find.ts'\nexport * from './is-clean.ts'\nexport * from './is.ts'\nexport * from './resolve.ts'\nexport * from './revs.ts'\nexport * from './spawn.ts'\nexport * from './user.ts'\n\n/**\n * This extends all options that can be passed to spawn() or pickManifest.\n */\nexport type GitOptions = PickManifestOptions &\n SpawnOptions & {\n /** the path to git binary, or 'false' to prevent all git operations */\n git?: string | false\n /** the current working directory to perform git operations in */\n cwd?: string\n /** Parsed git specifier to be cloned, if we have one */\n spec?: Spec\n /**\n * Set to a boolean to force cloning with/without `--depth=1`. If left\n * undefined, then shallow cloning will only be performed on hosts known to\n * support it.\n */\n 'git-shallow'?: boolean\n /** Only relevant if `retry` is unset. Value for retry.retries, default 2 */\n 'fetch-retries'?: WrapOptions['retries']\n /** Only relevant if `retry` is unset. Value for retry.factor, default 10 */\n 'fetch-retry-factor'?: WrapOptions['factor']\n /**\n * Only relevant if `retry` is unset. Value for retry.maxTimeout, default\n * 60_000\n */\n 'fetch-retry-maxtimeout'?: WrapOptions['maxTimeout']\n /**\n * Only relevant if `retry` is unset. Value for retry.minTimeout, default\n * 1_000\n */\n 'fetch-retry-mintimeout'?: WrapOptions['minTimeout']\n /**\n * Used to test platform-specific behavior.\n * @internal\n */\n fakePlatform?: NodeJS.Platform\n /**\n * Just to test rev lookup without continually clearing the cache\n */\n noGitRevCache?: boolean\n }\n"]}
@@ -1,5 +1,5 @@
1
1
  import { error } from '@vltpkg/error-cause';
2
- import { spawn } from './spawn.js';
2
+ import { spawn } from "./spawn.js";
3
3
  export const isClean = async (opts = {}) => {
4
4
  const result = await spawn(['status', '--porcelain=v1', '-uno'], opts);
5
5
  if (result.status || result.signal) {
@@ -1 +1 @@
1
- {"version":3,"file":"is-clean.js","sourceRoot":"","sources":["../../src/is-clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,EACpC,IAAI,CACL,CAAA;IACD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAA;IAC/B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { spawn } from './spawn.js'\n\nexport const isClean = async (opts = {}) => {\n const result = await spawn(\n ['status', '--porcelain=v1', '-uno'],\n opts,\n )\n if (result.status || result.signal) {\n throw error('git isClean check failed', result)\n }\n for (const line of result.stdout.split(/\\r?\\n+/)) {\n if (line.trim()) return false\n }\n return true\n}\n"]}
1
+ {"version":3,"file":"is-clean.js","sourceRoot":"","sources":["../../src/is-clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,EACpC,IAAI,CACL,CAAA;IACD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAA;IAC/B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { spawn } from './spawn.ts'\n\nexport const isClean = async (opts = {}) => {\n const result = await spawn(\n ['status', '--porcelain=v1', '-uno'],\n opts,\n )\n if (result.status || result.signal) {\n throw error('git isClean check failed', result)\n }\n for (const line of result.stdout.split(/\\r?\\n+/)) {\n if (line.trim()) return false\n }\n return true\n}\n"]}
@@ -1,3 +1,3 @@
1
- import { type GitOptions } from './index.js';
1
+ import type { GitOptions } from './index.ts';
2
2
  export declare const isWindows: (opts: GitOptions) => boolean;
3
3
  //# sourceMappingURL=is-windows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-windows.d.ts","sourceRoot":"","sources":["../../src/is-windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,eAAO,MAAM,SAAS,SAAU,UAAU,YACW,CAAA"}
1
+ {"version":3,"file":"is-windows.d.ts","sourceRoot":"","sources":["../../src/is-windows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,eAAO,MAAM,SAAS,SAAU,UAAU,YACW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-windows.js","sourceRoot":"","sources":["../../src/is-windows.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAE,EAAE,CAC5C,CAAC,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAA","sourcesContent":["import { type GitOptions } from './index.js'\nexport const isWindows = (opts: GitOptions) =>\n (opts.fakePlatform || process.platform) === 'win32'\n"]}
1
+ {"version":3,"file":"is-windows.js","sourceRoot":"","sources":["../../src/is-windows.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAE,EAAE,CAC5C,CAAC,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAA","sourcesContent":["import type { GitOptions } from './index.ts'\nexport const isWindows = (opts: GitOptions) =>\n (opts.fakePlatform || process.platform) === 'win32'\n"]}
package/dist/esm/is.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // not an airtight indicator, but a good gut-check to even bother trying
2
- import { stat } from 'fs/promises';
2
+ import { stat } from 'node:fs/promises';
3
3
  export const is = ({ cwd = process.cwd() } = {}) => stat(cwd + '/.git').then(() => true, () => false);
4
4
  //# sourceMappingURL=is.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"is.js","sourceRoot":"","sources":["../../src/is.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CACjD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA","sourcesContent":["// not an airtight indicator, but a good gut-check to even bother trying\nimport { stat } from 'fs/promises'\nexport const is = ({ cwd = process.cwd() } = {}) =>\n stat(cwd + '/.git').then(\n () => true,\n () => false,\n )\n"]}
1
+ {"version":3,"file":"is.js","sourceRoot":"","sources":["../../src/is.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CACjD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA","sourcesContent":["// not an airtight indicator, but a good gut-check to even bother trying\nimport { stat } from 'node:fs/promises'\nexport const is = ({ cwd = process.cwd() } = {}) =>\n stat(cwd + '/.git').then(\n () => true,\n () => false,\n )\n"]}
@@ -1,4 +1,4 @@
1
- import { type RevDoc } from '@vltpkg/types';
1
+ import type { RevDoc } from '@vltpkg/types';
2
2
  /**
3
3
  * turn an array of lines from `git ls-remote` into a thing
4
4
  * vaguely resembling a packument, where docs are a resolved ref
@@ -1 +1 @@
1
- {"version":3,"file":"lines-to-revs.d.ts","sourceRoot":"","sources":["../../src/lines-to-revs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,eAAe,CAAA;AAItB;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAW,MAAM,EAAE,KAAG,MAS3C,CAAA"}
1
+ {"version":3,"file":"lines-to-revs.d.ts","sourceRoot":"","sources":["../../src/lines-to-revs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAwB,MAAM,eAAe,CAAA;AAIjE;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAW,MAAM,EAAE,KAAG,MAS3C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"lines-to-revs.js","sourceRoot":"","sources":["../../src/lines-to-revs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type RevDoc,\n type RevDocEntry,\n type RefType,\n} from '@vltpkg/types'\nimport { parse } from '@vltpkg/semver'\nimport { error } from '@vltpkg/error-cause'\n\n/**\n * turn an array of lines from `git ls-remote` into a thing\n * vaguely resembling a packument, where docs are a resolved ref\n */\nexport const linesToRevs = (lines: string[]): RevDoc =>\n finish(\n lines.reduce(linesToRevsReducer, {\n name: '',\n versions: {},\n 'dist-tags': {},\n refs: {},\n shas: {},\n }),\n )\n\nconst finish = (revs: RevDoc): RevDoc =>\n distTags(versions(shaList(peelTags(revs))))\n\nconst versions = (revs: RevDoc): RevDoc => {\n for (const [version, entry] of Object.entries(revs.versions)) {\n entry.version = version\n }\n return revs\n}\n\n// We can check out shallow clones on specific SHAs if we have a ref\nconst shaList = (revs: RevDoc): RevDoc => {\n Object.entries(revs.refs).forEach(([ref, doc]) => {\n const shas = revs.shas[doc.sha]\n if (!shas) {\n revs.shas[doc.sha] = [ref]\n } else {\n shas.push(ref)\n }\n })\n return revs\n}\n\n// Replace any tags with their ^{} counterparts, if those exist\nconst peelTags = (revs: RevDoc) => {\n Object.entries(revs.refs)\n .filter(([ref]) => ref.endsWith('^{}'))\n .forEach(([ref, peeled]) => {\n const unpeeled = revs.refs[ref.replace(/\\^\\{\\}$/, '')]\n if (unpeeled) {\n unpeeled.sha = peeled.sha\n delete revs.refs[ref]\n }\n })\n return revs\n}\n\nconst distTags = (revs: RevDoc) => {\n // not entirely sure what situations would result in an\n // ichabod repo, but best to be careful in Sleepy Hollow anyway\n /* c8 ignore start */\n const HEAD = revs.refs.HEAD ?? {\n sha: undefined,\n }\n /* c8 ignore stop */\n for (const [v, ver] of Object.entries(revs.versions)) {\n // simulate a dist-tags with latest pointing at the\n // 'latest' branch if one exists and is a version,\n // or HEAD if not.\n if (revs.refs.latest && ver.sha === revs.refs.latest.sha) {\n revs['dist-tags'].latest = v\n } else if (ver.sha === HEAD.sha) {\n revs['dist-tags'].HEAD = v\n if (!revs.refs.latest) {\n revs['dist-tags'].latest = v\n }\n }\n }\n return revs\n}\n\nconst refType = (ref: string): RefType => {\n if (ref.startsWith('refs/tags/')) {\n return 'tag'\n }\n if (ref.startsWith('refs/heads/')) {\n return 'branch'\n }\n if (ref.startsWith('refs/pull/')) {\n return 'pull'\n }\n if (ref === 'HEAD') {\n return 'head'\n }\n // Could be anything, ignore for now\n /* c8 ignore next */\n return 'other'\n}\n\n// return the doc, or null if we should ignore it.\nconst lineToRevDoc = (line: string): RevDocEntry | undefined => {\n let [sha, rawRef] = line.trim().split(/\\s+/, 2)\n if (sha === undefined || rawRef === undefined) return undefined\n sha = sha.trim()\n rawRef = rawRef.trim()\n\n const type = refType(rawRef)\n\n switch (type) {\n case 'tag': {\n // refs/tags/foo^{} is the 'peeled tag', ie the commit\n // that is tagged by refs/tags/foo they resolve to the same\n // content, just different objects in git's data structure.\n // But, we care about the thing the tag POINTS to, not the tag\n // object itself, so we only look at the peeled tag refs, and\n // ignore the pointer.\n // For now, though, we have to save both, because some tags\n // don't have peels, if they were not annotated.\n const ref = rawRef.slice('refs/tags/'.length)\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n case 'branch': {\n const ref = rawRef.slice('refs/heads/'.length)\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n case 'pull': {\n // NB: merged pull requests installable with #pull/123/merge\n // for the merged pr, or #pull/123 for the PR head\n const ref = rawRef.slice('refs/'.length).replace(/\\/head$/, '')\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n case 'head': {\n const ref = 'HEAD'\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n default:\n // at this point, all we can do is leave the ref un-munged\n return { name: '', version: '', sha, ref: rawRef, rawRef, type }\n }\n}\n\nconst linesToRevsReducer = (revs: RevDoc, line: string) => {\n const doc = lineToRevDoc(line)\n\n if (!doc) {\n return revs\n }\n\n revs.refs[doc.ref] = doc\n revs.refs[doc.rawRef] = doc\n\n if (doc.type === 'tag') {\n // try to pull a semver value out of tags like `release-v1.2.3`\n // which is a pretty common pattern.\n const match =\n doc.ref.endsWith('^{}') ?\n null\n : /v?(\\d+\\.\\d+\\.\\d+(?:[-+].+)?)$/.exec(doc.ref)\n if (match) {\n /* c8 ignore start */\n if (!match[1])\n throw error(`invalid semver tag`, { found: doc.ref })\n /* c8 ignore stop */\n const v = parse(match[1])\n if (v) revs.versions[String(v)] = doc\n }\n }\n\n return revs\n}\n"]}
1
+ {"version":3,"file":"lines-to-revs.js","sourceRoot":"","sources":["../../src/lines-to-revs.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RevDoc, RevDocEntry, RefType } from '@vltpkg/types'\nimport { parse } from '@vltpkg/semver'\nimport { error } from '@vltpkg/error-cause'\n\n/**\n * turn an array of lines from `git ls-remote` into a thing\n * vaguely resembling a packument, where docs are a resolved ref\n */\nexport const linesToRevs = (lines: string[]): RevDoc =>\n finish(\n lines.reduce(linesToRevsReducer, {\n name: '',\n versions: {},\n 'dist-tags': {},\n refs: {},\n shas: {},\n }),\n )\n\nconst finish = (revs: RevDoc): RevDoc =>\n distTags(versions(shaList(peelTags(revs))))\n\nconst versions = (revs: RevDoc): RevDoc => {\n for (const [version, entry] of Object.entries(revs.versions)) {\n entry.version = version\n }\n return revs\n}\n\n// We can check out shallow clones on specific SHAs if we have a ref\nconst shaList = (revs: RevDoc): RevDoc => {\n Object.entries(revs.refs).forEach(([ref, doc]) => {\n const shas = revs.shas[doc.sha]\n if (!shas) {\n revs.shas[doc.sha] = [ref]\n } else {\n shas.push(ref)\n }\n })\n return revs\n}\n\n// Replace any tags with their ^{} counterparts, if those exist\nconst peelTags = (revs: RevDoc) => {\n Object.entries(revs.refs)\n .filter(([ref]) => ref.endsWith('^{}'))\n .forEach(([ref, peeled]) => {\n const unpeeled = revs.refs[ref.replace(/\\^\\{\\}$/, '')]\n if (unpeeled) {\n unpeeled.sha = peeled.sha\n delete revs.refs[ref]\n }\n })\n return revs\n}\n\nconst distTags = (revs: RevDoc) => {\n // not entirely sure what situations would result in an\n // ichabod repo, but best to be careful in Sleepy Hollow anyway\n /* c8 ignore start */\n const HEAD = revs.refs.HEAD ?? {\n sha: undefined,\n }\n /* c8 ignore stop */\n for (const [v, ver] of Object.entries(revs.versions)) {\n // simulate a dist-tags with latest pointing at the\n // 'latest' branch if one exists and is a version,\n // or HEAD if not.\n if (revs.refs.latest && ver.sha === revs.refs.latest.sha) {\n revs['dist-tags'].latest = v\n } else if (ver.sha === HEAD.sha) {\n revs['dist-tags'].HEAD = v\n if (!revs.refs.latest) {\n revs['dist-tags'].latest = v\n }\n }\n }\n return revs\n}\n\nconst refType = (ref: string): RefType => {\n if (ref.startsWith('refs/tags/')) {\n return 'tag'\n }\n if (ref.startsWith('refs/heads/')) {\n return 'branch'\n }\n if (ref.startsWith('refs/pull/')) {\n return 'pull'\n }\n if (ref === 'HEAD') {\n return 'head'\n }\n // Could be anything, ignore for now\n /* c8 ignore next */\n return 'other'\n}\n\n// return the doc, or null if we should ignore it.\nconst lineToRevDoc = (line: string): RevDocEntry | undefined => {\n let [sha, rawRef] = line.trim().split(/\\s+/, 2)\n if (sha === undefined || rawRef === undefined) return undefined\n sha = sha.trim()\n rawRef = rawRef.trim()\n\n const type = refType(rawRef)\n\n switch (type) {\n case 'tag': {\n // refs/tags/foo^{} is the 'peeled tag', ie the commit\n // that is tagged by refs/tags/foo they resolve to the same\n // content, just different objects in git's data structure.\n // But, we care about the thing the tag POINTS to, not the tag\n // object itself, so we only look at the peeled tag refs, and\n // ignore the pointer.\n // For now, though, we have to save both, because some tags\n // don't have peels, if they were not annotated.\n const ref = rawRef.slice('refs/tags/'.length)\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n case 'branch': {\n const ref = rawRef.slice('refs/heads/'.length)\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n case 'pull': {\n // NB: merged pull requests installable with #pull/123/merge\n // for the merged pr, or #pull/123 for the PR head\n const ref = rawRef.slice('refs/'.length).replace(/\\/head$/, '')\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n case 'head': {\n const ref = 'HEAD'\n return { name: '', version: '', sha, ref, rawRef, type }\n }\n\n default:\n // at this point, all we can do is leave the ref un-munged\n return { name: '', version: '', sha, ref: rawRef, rawRef, type }\n }\n}\n\nconst linesToRevsReducer = (revs: RevDoc, line: string) => {\n const doc = lineToRevDoc(line)\n\n if (!doc) {\n return revs\n }\n\n revs.refs[doc.ref] = doc\n revs.refs[doc.rawRef] = doc\n\n if (doc.type === 'tag') {\n // try to pull a semver value out of tags like `release-v1.2.3`\n // which is a pretty common pattern.\n const match =\n doc.ref.endsWith('^{}') ?\n null\n : /v?(\\d+\\.\\d+\\.\\d+(?:[-+].+)?)$/.exec(doc.ref)\n if (match) {\n /* c8 ignore start */\n if (!match[1])\n throw error(`invalid semver tag`, { found: doc.ref })\n /* c8 ignore stop */\n const v = parse(match[1])\n if (v) revs.versions[String(v)] = doc\n }\n }\n\n return revs\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type SpawnResultStderr, type SpawnResultString } from '@vltpkg/promise-spawn';
1
+ import type { SpawnResultStderr, SpawnResultString } from '@vltpkg/promise-spawn';
2
2
  export declare const makeError: (result: SpawnResultStderr & SpawnResultString) => Error & {
3
3
  shouldRetry: (n: number) => boolean;
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"make-error.d.ts","sourceRoot":"","sources":["../../src/make-error.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAA;AAoB9B,eAAO,MAAM,SAAS,WACZ,iBAAiB,GAAG,iBAAiB,KAC5C,KAAK,GAAG;IAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;CAY3C,CAAA"}
1
+ {"version":3,"file":"make-error.d.ts","sourceRoot":"","sources":["../../src/make-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,uBAAuB,CAAA;AAoB9B,eAAO,MAAM,SAAS,WACZ,iBAAiB,GAAG,iBAAiB,KAC5C,KAAK,GAAG;IAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;CAY3C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"make-error.js","sourceRoot":"","sources":["../../src/make-error.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE3C,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC;IACE,qCAAqC;IACrC,qCAAqC;IACrC,sBAAsB;IACtB,qBAAqB;IACrB,mCAAmC;IACnC,0BAA0B;IAC1B,mBAAmB;IACnB,uCAAuC;CACxC,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAA;AAED,MAAM,iBAAiB,GACrB,sDAAsD,CAAA;AAExD,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAA6C,EACI,EAAE,CACnD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,EAAE;QAC9D,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;KAClC,CAAC;IACJ,CAAC,CAAC,MAAM,CAAC,MAAM,CACX,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC;QACvD,CAAC,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,EAChD;QACE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;KACzB,CACF,CAAA","sourcesContent":["import {\n type SpawnResultStderr,\n type SpawnResultString,\n} from '@vltpkg/promise-spawn'\n\nimport { error } from '@vltpkg/error-cause'\n\nconst connectionErrorRe = new RegExp(\n [\n 'remote error: Internal Server Error',\n 'The remote end hung up unexpectedly',\n 'Connection timed out',\n 'Operation timed out',\n 'Failed to connect to .* Timed out',\n 'Connection reset by peer',\n 'SSL_ERROR_SYSCALL',\n 'The requested URL returned error: 503',\n ].join('|'),\n)\n\nconst missingPathspecRe =\n /pathspec .* did not match any file\\(s\\) known to git/\n\nexport const makeError = (\n result: SpawnResultStderr & SpawnResultString,\n): Error & { shouldRetry: (n: number) => boolean } =>\n connectionErrorRe.test(result.stderr) ?\n Object.assign(error('A git connection error occurred', result), {\n shouldRetry: (n: number) => n < 3,\n })\n : Object.assign(\n missingPathspecRe.test(result.stderr) ?\n error('The git reference could not be found', result)\n : error('An unknown git error occurred', result),\n {\n shouldRetry: () => false,\n },\n )\n"]}
1
+ {"version":3,"file":"make-error.js","sourceRoot":"","sources":["../../src/make-error.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAE3C,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC;IACE,qCAAqC;IACrC,qCAAqC;IACrC,sBAAsB;IACtB,qBAAqB;IACrB,mCAAmC;IACnC,0BAA0B;IAC1B,mBAAmB;IACnB,uCAAuC;CACxC,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAA;AAED,MAAM,iBAAiB,GACrB,sDAAsD,CAAA;AAExD,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAA6C,EACI,EAAE,CACnD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,EAAE;QAC9D,WAAW,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;KAClC,CAAC;IACJ,CAAC,CAAC,MAAM,CAAC,MAAM,CACX,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC;QACvD,CAAC,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,EAChD;QACE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;KACzB,CACF,CAAA","sourcesContent":["import type {\n SpawnResultStderr,\n SpawnResultString,\n} from '@vltpkg/promise-spawn'\n\nimport { error } from '@vltpkg/error-cause'\n\nconst connectionErrorRe = new RegExp(\n [\n 'remote error: Internal Server Error',\n 'The remote end hung up unexpectedly',\n 'Connection timed out',\n 'Operation timed out',\n 'Failed to connect to .* Timed out',\n 'Connection reset by peer',\n 'SSL_ERROR_SYSCALL',\n 'The requested URL returned error: 503',\n ].join('|'),\n)\n\nconst missingPathspecRe =\n /pathspec .* did not match any file\\(s\\) known to git/\n\nexport const makeError = (\n result: SpawnResultStderr & SpawnResultString,\n): Error & { shouldRetry: (n: number) => boolean } =>\n connectionErrorRe.test(result.stderr) ?\n Object.assign(error('A git connection error occurred', result), {\n shouldRetry: (n: number) => n < 3,\n })\n : Object.assign(\n missingPathspecRe.test(result.stderr) ?\n error('The git reference could not be found', result)\n : error('An unknown git error occurred', result),\n {\n shouldRetry: () => false,\n },\n )\n"]}
@@ -1,4 +1,4 @@
1
- import { type PromiseSpawnOptionsStderrString, type PromiseSpawnOptionsStdoutString } from '@vltpkg/promise-spawn';
2
- import { type SpawnOptions } from 'child_process';
1
+ import type { PromiseSpawnOptionsStderrString, PromiseSpawnOptionsStdoutString } from '@vltpkg/promise-spawn';
2
+ import type { SpawnOptions } from 'node:child_process';
3
3
  export declare const opts: (opts?: SpawnOptions) => PromiseSpawnOptionsStderrString & PromiseSpawnOptionsStdoutString;
4
4
  //# sourceMappingURL=opts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opts.d.ts","sourceRoot":"","sources":["../../src/opts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACrC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAQjD,eAAO,MAAM,IAAI,UACT,YAAY,KACjB,+BAA+B,GAChC,+BAOA,CAAA"}
1
+ {"version":3,"file":"opts.d.ts","sourceRoot":"","sources":["../../src/opts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAQtD,eAAO,MAAM,IAAI,UACT,YAAY,KACjB,+BAA+B,GAChC,+BAOA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"opts.js","sourceRoot":"","sources":["../../src/opts.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAQvE,2DAA2D;AAC3D,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,wCAAwC;CAC1D,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,OAAqB,EAAE,EAES,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE,IAAI;IAChB,GAAG,IAAI;IACP,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;IAC9C,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,KAAK;CACb,CAAC,CAAA","sourcesContent":["// Values we want to set if they're not already defined by the end user\n\nimport {\n type PromiseSpawnOptionsStderrString,\n type PromiseSpawnOptionsStdoutString,\n} from '@vltpkg/promise-spawn'\nimport { type SpawnOptions } from 'child_process'\n\n// This defaults to accepting new ssh host key fingerprints\nconst gitEnv = {\n GIT_ASKPASS: 'echo',\n GIT_SSH_COMMAND: 'ssh -oStrictHostKeyChecking=accept-new',\n}\n\nexport const opts = (\n opts: SpawnOptions = {},\n): PromiseSpawnOptionsStderrString &\n PromiseSpawnOptionsStdoutString => ({\n acceptFail: true,\n ...opts,\n env: opts.env ?? { ...gitEnv, ...process.env },\n stdio: 'pipe',\n stdioString: true,\n shell: false,\n})\n"]}
1
+ {"version":3,"file":"opts.js","sourceRoot":"","sources":["../../src/opts.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAQvE,2DAA2D;AAC3D,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,wCAAwC;CAC1D,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,OAAqB,EAAE,EAES,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE,IAAI;IAChB,GAAG,IAAI;IACP,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;IAC9C,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,KAAK;CACb,CAAC,CAAA","sourcesContent":["// Values we want to set if they're not already defined by the end user\n\nimport type {\n PromiseSpawnOptionsStderrString,\n PromiseSpawnOptionsStdoutString,\n} from '@vltpkg/promise-spawn'\nimport type { SpawnOptions } from 'node:child_process'\n\n// This defaults to accepting new ssh host key fingerprints\nconst gitEnv = {\n GIT_ASKPASS: 'echo',\n GIT_SSH_COMMAND: 'ssh -oStrictHostKeyChecking=accept-new',\n}\n\nexport const opts = (\n opts: SpawnOptions = {},\n): PromiseSpawnOptionsStderrString &\n PromiseSpawnOptionsStdoutString => ({\n acceptFail: true,\n ...opts,\n env: opts.env ?? { ...gitEnv, ...process.env },\n stdio: 'pipe',\n stdioString: true,\n shell: false,\n})\n"]}
@@ -1,5 +1,5 @@
1
- import { type RevDoc } from '@vltpkg/types';
2
- import { type GitOptions } from './index.js';
1
+ import type { RevDoc } from '@vltpkg/types';
2
+ import type { GitOptions } from './index.ts';
3
3
  /**
4
4
  * Given a repo and either a ref or a git specifier Spec object, resolve the
5
5
  * appropriate ref that we should clone, ideally witout actually cloning the
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,SACZ,MAAM,uBAEN,UAAU,6DAMjB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,WACb,MAAM,uBAER,UAAU,oDAoBjB,CAAA"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,SACZ,MAAM,uBAEN,UAAU,6DAMjB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,WACb,MAAM,uBAER,UAAU,oDAoBjB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { pickManifest } from '@vltpkg/pick-manifest';
2
- import { revs } from './revs.js';
2
+ import { revs } from "./revs.js";
3
3
  /**
4
4
  * Given a repo and either a ref or a git specifier Spec object, resolve the
5
5
  * appropriate ref that we should clone, ideally witout actually cloning the
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,IAAY,EACZ,GAAG,GAAG,MAAM,EACZ,OAAmB,EAAE,EACrB,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACrC,sDAAsD;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,MAAc,EACd,GAAG,GAAG,MAAM,EACZ,OAAmB,EAAE,EACrB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IACrB,GAAG,GAAG,IAAI,EAAE,aAAa,IAAI,GAAG,CAAA;IAChC,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA;IACzB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IACD,+DAA+D;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IACD,oBAAoB;IACpB,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import { type RevDoc } from '@vltpkg/types'\nimport { pickManifest } from '@vltpkg/pick-manifest'\nimport { type GitOptions } from './index.js'\nimport { revs } from './revs.js'\n\n/**\n * Given a repo and either a ref or a git specifier Spec object, resolve the\n * appropriate ref that we should clone, ideally witout actually cloning the\n * repository.\n *\n *\n */\nexport const resolve = async (\n repo: string,\n ref = 'HEAD',\n opts: GitOptions = {},\n) => {\n const revDoc = await revs(repo, opts)\n /* no resolution possible if we can't read the repo */\n if (!revDoc) return undefined\n return resolveRef(revDoc, ref, opts)\n}\n\n/**\n * Given a repo's RevDoc object and either a ref or a git specifier Spec\n * object, resolve the appropriate ref that we should clone, witout actually\n * cloning the repository.\n */\nexport const resolveRef = (\n revDoc: RevDoc,\n ref = 'HEAD',\n opts: GitOptions = {},\n) => {\n const { spec } = opts\n ref = spec?.gitCommittish || ref\n if (spec?.range) {\n return pickManifest(revDoc, spec.range, opts)\n }\n if (!ref) {\n return revDoc.refs.HEAD\n }\n if (revDoc.refs[ref]) {\n return revDoc.refs[ref]\n }\n /* c8 ignore start - typically found above, but just in case */\n const sha = revDoc.shas[ref]?.[0]\n if (sha) {\n return revDoc.refs[sha]\n }\n /* c8 ignore stop */\n return undefined\n}\n"]}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,IAAY,EACZ,GAAG,GAAG,MAAM,EACZ,OAAmB,EAAE,EACrB,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACrC,sDAAsD;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,MAAc,EACd,GAAG,GAAG,MAAM,EACZ,OAAmB,EAAE,EACrB,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IACrB,GAAG,GAAG,IAAI,EAAE,aAAa,IAAI,GAAG,CAAA;IAChC,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA;IACzB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IACD,+DAA+D;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IACD,oBAAoB;IACpB,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import type { RevDoc } from '@vltpkg/types'\nimport { pickManifest } from '@vltpkg/pick-manifest'\nimport type { GitOptions } from './index.ts'\nimport { revs } from './revs.ts'\n\n/**\n * Given a repo and either a ref or a git specifier Spec object, resolve the\n * appropriate ref that we should clone, ideally witout actually cloning the\n * repository.\n *\n *\n */\nexport const resolve = async (\n repo: string,\n ref = 'HEAD',\n opts: GitOptions = {},\n) => {\n const revDoc = await revs(repo, opts)\n /* no resolution possible if we can't read the repo */\n if (!revDoc) return undefined\n return resolveRef(revDoc, ref, opts)\n}\n\n/**\n * Given a repo's RevDoc object and either a ref or a git specifier Spec\n * object, resolve the appropriate ref that we should clone, witout actually\n * cloning the repository.\n */\nexport const resolveRef = (\n revDoc: RevDoc,\n ref = 'HEAD',\n opts: GitOptions = {},\n) => {\n const { spec } = opts\n ref = spec?.gitCommittish || ref\n if (spec?.range) {\n return pickManifest(revDoc, spec.range, opts)\n }\n if (!ref) {\n return revDoc.refs.HEAD\n }\n if (revDoc.refs[ref]) {\n return revDoc.refs[ref]\n }\n /* c8 ignore start - typically found above, but just in case */\n const sha = revDoc.shas[ref]?.[0]\n if (sha) {\n return revDoc.refs[sha]\n }\n /* c8 ignore stop */\n return undefined\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type GitOptions } from './index.js';
2
- import { type RevDoc } from '@vltpkg/types';
1
+ import type { GitOptions } from './index.ts';
2
+ import type { RevDoc } from '@vltpkg/types';
3
3
  export declare const revs: (repo: string, opts?: GitOptions) => Promise<RevDoc | undefined>;
4
4
  //# sourceMappingURL=revs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"revs.d.ts","sourceRoot":"","sources":["../../src/revs.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AAsB3C,eAAO,MAAM,IAAI,SAAgB,MAAM,SAAQ,UAAU,gCAWxD,CAAA"}
1
+ {"version":3,"file":"revs.d.ts","sourceRoot":"","sources":["../../src/revs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAsB3C,eAAO,MAAM,IAAI,SAAgB,MAAM,SAAQ,UAAU,gCAWxD,CAAA"}
package/dist/esm/revs.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { gitScpURL } from '@vltpkg/git-scp-url';
2
2
  import { LRUCache } from 'lru-cache';
3
- import { fileURLToPath } from 'url';
4
- import { linesToRevs } from './lines-to-revs.js';
5
- import { spawn } from './spawn.js';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { linesToRevs } from "./lines-to-revs.js";
5
+ import { spawn } from "./spawn.js";
6
6
  const fetchMethod = async (repo, _, options) => {
7
7
  const result = await spawn(['ls-remote', repo], options.context);
8
8
  const revsDoc = linesToRevs(result.stdout.split('\n'));
@@ -1 +1 @@
1
- {"version":3,"file":"revs.js","sourceRoot":"","sources":["../../src/revs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAK/C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,WAAW,GAAG,KAAK,EACvB,IAAY,EACZ,CAAM,EACN,OAAgC,EAChC,EAAE;IACF,MAAM,MAAM,GACV,MAAM,KAAK,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,QAAQ,CAA6B;IACzD,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAClB,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,IAAI;IAChC,WAAW;CACZ,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,OAAmB,EAAE,EAAE,EAAE;IAChE,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAC5D,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE;YAChD,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC3B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA","sourcesContent":["import { gitScpURL } from '@vltpkg/git-scp-url'\nimport {\n type SpawnResultStderrString,\n type SpawnResultStdoutString,\n} from '@vltpkg/promise-spawn'\nimport { LRUCache } from 'lru-cache'\nimport { fileURLToPath } from 'url'\nimport { type GitOptions } from './index.js'\nimport { linesToRevs } from './lines-to-revs.js'\nimport { type RevDoc } from '@vltpkg/types'\nimport { spawn } from './spawn.js'\n\nconst fetchMethod = async (\n repo: string,\n _: any,\n options: { context: GitOptions },\n) => {\n const result: SpawnResultStderrString & SpawnResultStdoutString =\n await spawn(['ls-remote', repo], options.context)\n const revsDoc = linesToRevs(result.stdout.split('\\n'))\n return revsDoc\n}\n\nconst revsCache = new LRUCache<string, RevDoc, GitOptions>({\n max: 100,\n ttl: 5 * 60 * 1000,\n allowStaleOnFetchAbort: true,\n allowStaleOnFetchRejection: true,\n fetchMethod,\n})\n\nexport const revs = async (repo: string, opts: GitOptions = {}) => {\n repo = String(gitScpURL(repo) ?? repo).replace(/^git\\+/, '')\n if (repo.startsWith('file://')) repo = fileURLToPath(repo)\n if (opts.noGitRevCache) {\n const result = await fetchMethod(repo, undefined, {\n context: opts,\n })\n revsCache.set(repo, result)\n return result\n }\n return await revsCache.fetch(repo, { context: opts })\n}\n"]}
1
+ {"version":3,"file":"revs.js","sourceRoot":"","sources":["../../src/revs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAK/C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,WAAW,GAAG,KAAK,EACvB,IAAY,EACZ,CAAM,EACN,OAAgC,EAChC,EAAE;IACF,MAAM,MAAM,GACV,MAAM,KAAK,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,QAAQ,CAA6B;IACzD,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAClB,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,IAAI;IAChC,WAAW;CACZ,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,OAAmB,EAAE,EAAE,EAAE;IAChE,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAC5D,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE;YAChD,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC3B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA","sourcesContent":["import { gitScpURL } from '@vltpkg/git-scp-url'\nimport type {\n SpawnResultStderrString,\n SpawnResultStdoutString,\n} from '@vltpkg/promise-spawn'\nimport { LRUCache } from 'lru-cache'\nimport { fileURLToPath } from 'node:url'\nimport type { GitOptions } from './index.ts'\nimport { linesToRevs } from './lines-to-revs.ts'\nimport type { RevDoc } from '@vltpkg/types'\nimport { spawn } from './spawn.ts'\n\nconst fetchMethod = async (\n repo: string,\n _: any,\n options: { context: GitOptions },\n) => {\n const result: SpawnResultStderrString & SpawnResultStdoutString =\n await spawn(['ls-remote', repo], options.context)\n const revsDoc = linesToRevs(result.stdout.split('\\n'))\n return revsDoc\n}\n\nconst revsCache = new LRUCache<string, RevDoc, GitOptions>({\n max: 100,\n ttl: 5 * 60 * 1000,\n allowStaleOnFetchAbort: true,\n allowStaleOnFetchRejection: true,\n fetchMethod,\n})\n\nexport const revs = async (repo: string, opts: GitOptions = {}) => {\n repo = String(gitScpURL(repo) ?? repo).replace(/^git\\+/, '')\n if (repo.startsWith('file://')) repo = fileURLToPath(repo)\n if (opts.noGitRevCache) {\n const result = await fetchMethod(repo, undefined, {\n context: opts,\n })\n revsCache.set(repo, result)\n return result\n }\n return await revsCache.fetch(repo, { context: opts })\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type SpawnResultStderrString, type SpawnResultStdoutString } from '@vltpkg/promise-spawn';
2
- import { type GitOptions } from './index.js';
1
+ import type { SpawnResultStderrString, SpawnResultStdoutString } from '@vltpkg/promise-spawn';
2
+ import type { GitOptions } from './index.ts';
3
3
  export declare const spawn: (gitArgs: string[], opts?: GitOptions) => Promise<SpawnResultStderrString & SpawnResultStdoutString>;
4
4
  //# sourceMappingURL=spawn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,eAAO,MAAM,KAAK,YACP,MAAM,EAAE,SACX,UAAU,KACf,OAAO,CAAC,uBAAuB,GAAG,uBAAuB,CAkC3D,CAAA"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/spawn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,eAAO,MAAM,KAAK,YACP,MAAM,EAAE,SACX,UAAU,KACf,OAAO,CAAC,uBAAuB,GAAG,uBAAuB,CAkC3D,CAAA"}
package/dist/esm/spawn.js CHANGED
@@ -1,8 +1,8 @@
1
- import { promiseSpawn, } from '@vltpkg/promise-spawn';
1
+ import { promiseSpawn } from '@vltpkg/promise-spawn';
2
2
  import promiseRetry from 'promise-retry';
3
- import { makeError } from './make-error.js';
4
- import { opts as makeOpts } from './opts.js';
5
- import { which } from './which.js';
3
+ import { makeError } from "./make-error.js";
4
+ import { opts as makeOpts } from "./opts.js";
5
+ import { which } from "./which.js";
6
6
  export const spawn = async (gitArgs, opts = {}) => {
7
7
  const gitPath = which(opts);
8
8
  if (gitPath instanceof Error) {
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,YAAY,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EACxB,OAAiB,EACjB,OAAmB,EAAE,EACuC,EAAE;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAE3B,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,CAAA;IACf,CAAC;IAED,gEAAgE;IAChE,MAAM,IAAI,GACR,CACG,IAAmC,CAAC,YAAY;QACjD,OAAO,CAAC,CAAC,CAAC,KAAK,sBAAsB,CACtC,CAAC,CAAC;QACD,OAAO;QACT,CAAC,CAAC,CAAC,sBAAsB,EAAE,GAAG,OAAO,CAAC,CAAA;IACxC,oBAAoB;IAEpB,MAAM,SAAS,GAAgB;QAC7B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACvC,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,KAAK;QACnD,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,IAAI;KACnD,CAAA;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;YAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,CAAA;YAChB,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,SAAS,CAAC,CAAA;AACf,CAAC,CAAA","sourcesContent":["import {\n promiseSpawn,\n type SpawnResultStderrString,\n type SpawnResultStdoutString,\n} from '@vltpkg/promise-spawn'\nimport promiseRetry from 'promise-retry'\nimport { type WrapOptions } from 'retry'\nimport { type GitOptions } from './index.js'\nimport { makeError } from './make-error.js'\nimport { opts as makeOpts } from './opts.js'\nimport { which } from './which.js'\n\nexport const spawn = async (\n gitArgs: string[],\n opts: GitOptions = {},\n): Promise<SpawnResultStderrString & SpawnResultStdoutString> => {\n const gitPath = which(opts)\n\n if (gitPath instanceof Error) {\n throw gitPath\n }\n\n /* c8 ignore start - undocumented option, only here for tests */\n const args =\n (\n (opts as { allowReplace?: boolean }).allowReplace ||\n gitArgs[0] === '--no-replace-objects'\n ) ?\n gitArgs\n : ['--no-replace-objects', ...gitArgs]\n /* c8 ignore stop */\n\n const retryOpts: WrapOptions = {\n retries: opts['fetch-retries'] || 3,\n factor: opts['fetch-retry-factor'] || 2,\n maxTimeout: opts['fetch-retry-maxtimeout'] || 60000,\n minTimeout: opts['fetch-retry-mintimeout'] || 1000,\n }\n return promiseRetry(async (retryFn, num) => {\n const result = await promiseSpawn(gitPath, args, makeOpts(opts))\n if (result.status || result.signal) {\n const gitError = makeError(result)\n if (!gitError.shouldRetry(num)) {\n throw gitError\n }\n retryFn(gitError)\n }\n return result\n }, retryOpts)\n}\n"]}
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAKpD,OAAO,YAAY,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EACxB,OAAiB,EACjB,OAAmB,EAAE,EACuC,EAAE;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAE3B,IAAI,OAAO,YAAY,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,CAAA;IACf,CAAC;IAED,gEAAgE;IAChE,MAAM,IAAI,GACR,CACG,IAAmC,CAAC,YAAY;QACjD,OAAO,CAAC,CAAC,CAAC,KAAK,sBAAsB,CACtC,CAAC,CAAC;QACD,OAAO;QACT,CAAC,CAAC,CAAC,sBAAsB,EAAE,GAAG,OAAO,CAAC,CAAA;IACxC,oBAAoB;IAEpB,MAAM,SAAS,GAAgB;QAC7B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACvC,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,KAAK;QACnD,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,IAAI;KACnD,CAAA;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;YAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,QAAQ,CAAA;YAChB,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,SAAS,CAAC,CAAA;AACf,CAAC,CAAA","sourcesContent":["import { promiseSpawn } from '@vltpkg/promise-spawn'\nimport type {\n SpawnResultStderrString,\n SpawnResultStdoutString,\n} from '@vltpkg/promise-spawn'\nimport promiseRetry from 'promise-retry'\nimport type { WrapOptions } from 'retry'\nimport type { GitOptions } from './index.ts'\nimport { makeError } from './make-error.ts'\nimport { opts as makeOpts } from './opts.ts'\nimport { which } from './which.ts'\n\nexport const spawn = async (\n gitArgs: string[],\n opts: GitOptions = {},\n): Promise<SpawnResultStderrString & SpawnResultStdoutString> => {\n const gitPath = which(opts)\n\n if (gitPath instanceof Error) {\n throw gitPath\n }\n\n /* c8 ignore start - undocumented option, only here for tests */\n const args =\n (\n (opts as { allowReplace?: boolean }).allowReplace ||\n gitArgs[0] === '--no-replace-objects'\n ) ?\n gitArgs\n : ['--no-replace-objects', ...gitArgs]\n /* c8 ignore stop */\n\n const retryOpts: WrapOptions = {\n retries: opts['fetch-retries'] || 3,\n factor: opts['fetch-retry-factor'] || 2,\n maxTimeout: opts['fetch-retry-maxtimeout'] || 60000,\n minTimeout: opts['fetch-retry-mintimeout'] || 1000,\n }\n return promiseRetry(async (retryFn, num) => {\n const result = await promiseSpawn(gitPath, args, makeOpts(opts))\n if (result.status || result.signal) {\n const gitError = makeError(result)\n if (!gitError.shouldRetry(num)) {\n throw gitError\n }\n retryFn(gitError)\n }\n return result\n }, retryOpts)\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export type GitUser = {
2
+ name?: string;
3
+ email?: string;
4
+ };
5
+ export declare const getUser: (opts?: {}) => Promise<GitUser | undefined>;
6
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,OAAO,iBAEjB,OAAO,CAAC,OAAO,GAAG,SAAS,CAsD7B,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { spawn } from "./spawn.js";
2
+ export const getUser = async (opts = {}) => {
3
+ let name = '';
4
+ let email = '';
5
+ // retrieve user.name
6
+ const oldFlagUserNameResult = await spawn(['config', '--get', 'user.name'], opts);
7
+ if (oldFlagUserNameResult.status || oldFlagUserNameResult.signal) {
8
+ const userNameResult = await spawn(['config', 'get', 'user.name'], opts);
9
+ name =
10
+ userNameResult.status || userNameResult.signal ?
11
+ ''
12
+ : userNameResult.stdout.trim();
13
+ }
14
+ else {
15
+ name = oldFlagUserNameResult.stdout.trim();
16
+ }
17
+ // retrieve user.email
18
+ const oldFlagUserEmailResult = await spawn(['config', '--get', 'user.email'], opts);
19
+ if (oldFlagUserEmailResult.status ||
20
+ oldFlagUserEmailResult.signal) {
21
+ const userEmailResult = await spawn(['config', 'get', 'user.email'], opts);
22
+ email =
23
+ userEmailResult.status || userEmailResult.signal ?
24
+ ''
25
+ : userEmailResult.stdout.trim();
26
+ }
27
+ else {
28
+ email = oldFlagUserEmailResult.stdout.trim();
29
+ }
30
+ // if fails to find both name & email, then return undefined
31
+ if (!name && !email) {
32
+ return undefined;
33
+ }
34
+ return {
35
+ name,
36
+ email,
37
+ };
38
+ };
39
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAOlC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,IAAI,GAAG,EAAE,EACqB,EAAE;IAChC,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,KAAK,GAAG,EAAE,CAAA;IAEd,qBAAqB;IACrB,MAAM,qBAAqB,GAAG,MAAM,KAAK,CACvC,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAChC,IAAI,CACL,CAAA;IACD,IAAI,qBAAqB,CAAC,MAAM,IAAI,qBAAqB,CAAC,MAAM,EAAE,CAAC;QACjE,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,EAC9B,IAAI,CACL,CAAA;QAED,IAAI;YACF,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC9C,EAAE;gBACJ,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC5C,CAAC;IAED,sBAAsB;IACtB,MAAM,sBAAsB,GAAG,MAAM,KAAK,CACxC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,EACjC,IAAI,CACL,CAAA;IACD,IACE,sBAAsB,CAAC,MAAM;QAC7B,sBAAsB,CAAC,MAAM,EAC7B,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,KAAK,CACjC,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,EAC/B,IAAI,CACL,CAAA;QAED,KAAK;YACH,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;gBAChD,EAAE;gBACJ,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACnC,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC9C,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,KAAK;KACN,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { spawn } from './spawn.ts'\n\nexport type GitUser = {\n name?: string\n email?: string\n}\n\nexport const getUser = async (\n opts = {},\n): Promise<GitUser | undefined> => {\n let name = ''\n let email = ''\n\n // retrieve user.name\n const oldFlagUserNameResult = await spawn(\n ['config', '--get', 'user.name'],\n opts,\n )\n if (oldFlagUserNameResult.status || oldFlagUserNameResult.signal) {\n const userNameResult = await spawn(\n ['config', 'get', 'user.name'],\n opts,\n )\n\n name =\n userNameResult.status || userNameResult.signal ?\n ''\n : userNameResult.stdout.trim()\n } else {\n name = oldFlagUserNameResult.stdout.trim()\n }\n\n // retrieve user.email\n const oldFlagUserEmailResult = await spawn(\n ['config', '--get', 'user.email'],\n opts,\n )\n if (\n oldFlagUserEmailResult.status ||\n oldFlagUserEmailResult.signal\n ) {\n const userEmailResult = await spawn(\n ['config', 'get', 'user.email'],\n opts,\n )\n\n email =\n userEmailResult.status || userEmailResult.signal ?\n ''\n : userEmailResult.stdout.trim()\n } else {\n email = oldFlagUserEmailResult.stdout.trim()\n }\n\n // if fails to find both name & email, then return undefined\n if (!name && !email) {\n return undefined\n }\n\n return {\n name,\n email,\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
- import { type GitOptions } from './index.js';
2
- export declare const which: (opts?: GitOptions) => string | Error;
1
+ import type { GitOptions } from './index.ts';
2
+ export declare const which: (opts?: GitOptions) => string | import("@vltpkg/error-cause").ErrorWithCauseObject<Error>;
3
3
  //# sourceMappingURL=which.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"which.d.ts","sourceRoot":"","sources":["../../src/which.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAI5C,eAAO,MAAM,KAAK,UAAU,UAAU,mBAyBrC,CAAA"}
1
+ {"version":3,"file":"which.d.ts","sourceRoot":"","sources":["../../src/which.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI5C,eAAO,MAAM,KAAK,UAAU,UAAU,uEAyBrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"which.js","sourceRoot":"","sources":["../../src/which.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAGzC,IAAI,OAAO,GAAuB,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAmB,EAAE,EAAE,EAAE;IAC7C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IACD,IAAI,UAAU,GAAsB,SAAS,CAAA;IAC7C,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,UAAU,GAAG,EAAW,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO,KAAK,CACV,8BAA8B,EAC9B;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;SAClB,EACD,KAAK,CACN,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { whichSync } from '@vltpkg/which'\nimport { type GitOptions } from './index.js'\n\nlet gitPath: string | undefined = undefined\n\nexport const which = (opts: GitOptions = {}) => {\n if (opts.git) {\n return opts.git\n }\n let whichError: Error | undefined = undefined\n if (opts.git !== false) {\n if (!gitPath) {\n try {\n gitPath = whichSync('git')\n } catch (er) {\n whichError = er as Error\n }\n }\n }\n if (!gitPath || opts.git === false) {\n return error(\n 'No git binary found in $PATH',\n {\n code: 'ENOGIT',\n cause: whichError,\n },\n which,\n )\n }\n return gitPath\n}\n"]}
1
+ {"version":3,"file":"which.js","sourceRoot":"","sources":["../../src/which.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAGzC,IAAI,OAAO,GAAuB,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAmB,EAAE,EAAE,EAAE;IAC7C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IACD,IAAI,UAAU,GAAY,SAAS,CAAA;IACnC,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,UAAU,GAAG,EAAE,CAAA;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO,KAAK,CACV,8BAA8B,EAC9B;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;SAClB,EACD,KAAK,CACN,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { whichSync } from '@vltpkg/which'\nimport type { GitOptions } from './index.ts'\n\nlet gitPath: string | undefined = undefined\n\nexport const which = (opts: GitOptions = {}) => {\n if (opts.git) {\n return opts.git\n }\n let whichError: unknown = undefined\n if (opts.git !== false) {\n if (!gitPath) {\n try {\n gitPath = whichSync('git')\n } catch (er) {\n whichError = er\n }\n }\n }\n if (!gitPath || opts.git === false) {\n return error(\n 'No git binary found in $PATH',\n {\n code: 'ENOGIT',\n cause: whichError,\n },\n which,\n )\n }\n return gitPath\n}\n"]}
package/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@vltpkg/git",
3
3
  "description": "a util for spawning git from npm CLI contexts",
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/git"
9
+ },
5
10
  "tshy": {
6
11
  "selfLink": false,
12
+ "liveDev": true,
7
13
  "dialects": [
8
14
  "esm"
9
15
  ],
@@ -14,33 +20,33 @@
14
20
  },
15
21
  "dependencies": {
16
22
  "@types/promise-retry": "^1.1.6",
17
- "lru-cache": "^11.0.2",
23
+ "lru-cache": "^11.1.0",
18
24
  "promise-retry": "^2.0.1",
19
25
  "retry": "^0.13.1",
20
- "@vltpkg/git-scp-url": "0.0.0-0.1730724342581",
21
- "@vltpkg/error-cause": "0.0.0-0.1730724342581",
22
- "@vltpkg/pick-manifest": "0.0.0-0.1730724342581",
23
- "@vltpkg/semver": "0.0.0-0.1730724342581",
24
- "@vltpkg/promise-spawn": "0.0.0-0.1730724342581",
25
- "@vltpkg/spec": "0.0.0-0.1730724342581",
26
- "@vltpkg/which": "0.0.0-0.1730724342581"
26
+ "@vltpkg/pick-manifest": "0.0.0-10",
27
+ "@vltpkg/error-cause": "0.0.0-10",
28
+ "@vltpkg/promise-spawn": "0.0.0-10",
29
+ "@vltpkg/spec": "0.0.0-10",
30
+ "@vltpkg/semver": "0.0.0-10",
31
+ "@vltpkg/git-scp-url": "0.0.0-10",
32
+ "@vltpkg/which": "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",
35
+ "@eslint/js": "^9.25.0",
36
+ "@types/node": "^22.14.1",
32
37
  "@types/retry": "^0.12.5",
33
- "eslint": "^9.8.0",
34
- "prettier": "^3.3.2",
35
- "tap": "^21.0.1",
38
+ "eslint": "^9.25.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/types": "0.0.0-0.1730724342581"
42
+ "typedoc": "~0.27.6",
43
+ "typescript": "5.7.3",
44
+ "typescript-eslint": "^8.30.1",
45
+ "@vltpkg/types": "0.0.0-10"
40
46
  },
41
47
  "license": "ISC",
42
48
  "engines": {
43
- "node": "20 || >=22"
49
+ "node": ">=22"
44
50
  },
45
51
  "tap": {
46
52
  "extends": "../../tap-config.yaml"
@@ -65,9 +71,9 @@
65
71
  "format:check": "prettier --check . --ignore-path ../../.prettierignore --cache",
66
72
  "lint": "eslint . --fix",
67
73
  "lint:check": "eslint .",
68
- "presnap": "tshy",
69
74
  "snap": "tap",
70
- "pretest": "tshy",
71
- "test": "tap"
75
+ "test": "tap",
76
+ "posttest": "tsc --noEmit",
77
+ "typecheck": "tsc --noEmit"
72
78
  }
73
79
  }