@vibe-agent-toolkit/utils 0.1.42 → 0.2.0-rc.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.
- package/README.md +81 -19
- package/dist/asset-reference.js +3 -11
- package/dist/asset-reference.js.map +1 -1
- package/dist/compare-code-units.d.ts +28 -0
- package/dist/compare-code-units.d.ts.map +1 -0
- package/dist/compare-code-units.js +33 -0
- package/dist/compare-code-units.js.map +1 -0
- package/dist/crawl-timing.d.ts +657 -0
- package/dist/crawl-timing.d.ts.map +1 -0
- package/dist/crawl-timing.js +765 -0
- package/dist/crawl-timing.js.map +1 -0
- package/dist/crawl.d.ts +2 -4
- package/dist/crawl.d.ts.map +1 -1
- package/dist/crawl.js +2 -4
- package/dist/crawl.js.map +1 -1
- package/dist/dirent-kind.d.ts +83 -0
- package/dist/dirent-kind.d.ts.map +1 -0
- package/dist/dirent-kind.js +129 -0
- package/dist/dirent-kind.js.map +1 -0
- package/dist/entrypoint.d.ts +54 -0
- package/dist/entrypoint.d.ts.map +1 -0
- package/dist/entrypoint.js +71 -0
- package/dist/entrypoint.js.map +1 -0
- package/dist/env-flag.d.ts +51 -0
- package/dist/env-flag.d.ts.map +1 -0
- package/dist/env-flag.js +62 -0
- package/dist/env-flag.js.map +1 -0
- package/dist/errors/errno.d.ts +51 -0
- package/dist/errors/errno.d.ts.map +1 -0
- package/dist/errors/errno.js +112 -0
- package/dist/errors/errno.js.map +1 -0
- package/dist/errors/vat-error.d.ts +60 -0
- package/dist/errors/vat-error.d.ts.map +1 -0
- package/dist/errors/vat-error.js +86 -0
- package/dist/errors/vat-error.js.map +1 -0
- package/dist/file-crawler.d.ts +60 -0
- package/dist/file-crawler.d.ts.map +1 -1
- package/dist/file-crawler.js +214 -24
- package/dist/file-crawler.js.map +1 -1
- package/dist/fs/file-hash.d.ts.map +1 -1
- package/dist/fs/file-hash.js +0 -1
- package/dist/fs/file-hash.js.map +1 -1
- package/dist/fs-utils.d.ts +628 -38
- package/dist/fs-utils.d.ts.map +1 -1
- package/dist/fs-utils.js +770 -71
- package/dist/fs-utils.js.map +1 -1
- package/dist/fs.d.ts +5 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +9 -1
- package/dist/fs.js.map +1 -1
- package/dist/git-root-cache.d.ts +44 -0
- package/dist/git-root-cache.d.ts.map +1 -0
- package/dist/git-root-cache.js +68 -0
- package/dist/git-root-cache.js.map +1 -0
- package/dist/git-run.d.ts +167 -0
- package/dist/git-run.d.ts.map +1 -0
- package/dist/git-run.js +154 -0
- package/dist/git-run.js.map +1 -0
- package/dist/git-snapshot.d.ts +199 -0
- package/dist/git-snapshot.d.ts.map +1 -0
- package/dist/git-snapshot.js +250 -0
- package/dist/git-snapshot.js.map +1 -0
- package/dist/git-tracker.d.ts +166 -3
- package/dist/git-tracker.d.ts.map +1 -1
- package/dist/git-tracker.js +250 -22
- package/dist/git-tracker.js.map +1 -1
- package/dist/git-utils.d.ts +95 -1
- package/dist/git-utils.d.ts.map +1 -1
- package/dist/git-utils.js +227 -81
- package/dist/git-utils.js.map +1 -1
- package/dist/git.d.ts +13 -4
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +12 -4
- package/dist/git.js.map +1 -1
- package/dist/gitignore-checker.d.ts.map +1 -1
- package/dist/gitignore-checker.js +15 -6
- package/dist/gitignore-checker.js.map +1 -1
- package/dist/glob/glob-pattern.js +5 -5
- package/dist/glob/glob-pattern.js.map +1 -1
- package/dist/index.d.ts +33 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -33
- package/dist/index.js.map +1 -1
- package/dist/listing-refusal.d.ts +112 -0
- package/dist/listing-refusal.d.ts.map +1 -0
- package/dist/listing-refusal.js +105 -0
- package/dist/listing-refusal.js.map +1 -0
- package/dist/numeric-args.d.ts +24 -0
- package/dist/numeric-args.d.ts.map +1 -0
- package/dist/numeric-args.js +37 -0
- package/dist/numeric-args.js.map +1 -0
- package/dist/path-containment.d.ts +64 -0
- package/dist/path-containment.d.ts.map +1 -0
- package/dist/path-containment.js +111 -0
- package/dist/path-containment.js.map +1 -0
- package/dist/path-core.d.ts +143 -18
- package/dist/path-core.d.ts.map +1 -1
- package/dist/path-core.js +171 -23
- package/dist/path-core.js.map +1 -1
- package/dist/path-utils.d.ts.map +1 -1
- package/dist/path-utils.js +42 -47
- package/dist/path-utils.js.map +1 -1
- package/dist/path.d.ts +1 -1
- package/dist/path.d.ts.map +1 -1
- package/dist/path.js +1 -1
- package/dist/path.js.map +1 -1
- package/dist/process.d.ts +7 -0
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +7 -0
- package/dist/process.js.map +1 -1
- package/dist/project-utils.d.ts +7 -1
- package/dist/project-utils.d.ts.map +1 -1
- package/dist/project-utils.js +24 -10
- package/dist/project-utils.js.map +1 -1
- package/dist/project.d.ts +7 -5
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +7 -5
- package/dist/project.js.map +1 -1
- package/dist/safe-exec.d.ts +40 -11
- package/dist/safe-exec.d.ts.map +1 -1
- package/dist/safe-exec.js +111 -25
- package/dist/safe-exec.js.map +1 -1
- package/dist/skill-targets.d.ts +2 -2
- package/dist/skill-targets.js +2 -2
- package/dist/skill-test/auth-resolver.d.ts +10 -2
- package/dist/skill-test/auth-resolver.d.ts.map +1 -1
- package/dist/skill-test/auth-resolver.js +26 -11
- package/dist/skill-test/auth-resolver.js.map +1 -1
- package/dist/skill-test/index.d.ts +1 -1
- package/dist/skill-test/index.d.ts.map +1 -1
- package/dist/skill-test/index.js +1 -1
- package/dist/skill-test/index.js.map +1 -1
- package/dist/skill-test/spawn-claude.d.ts +30 -1
- package/dist/skill-test/spawn-claude.d.ts.map +1 -1
- package/dist/skill-test/spawn-claude.js +71 -5
- package/dist/skill-test/spawn-claude.js.map +1 -1
- package/dist/skill-test/transcript.d.ts +41 -2
- package/dist/skill-test/transcript.d.ts.map +1 -1
- package/dist/skill-test/transcript.js +55 -10
- package/dist/skill-test/transcript.js.map +1 -1
- package/dist/spawn-hardened.js +0 -1
- package/dist/spawn-hardened.js.map +1 -1
- package/dist/stdio-blocking.js +13 -14
- package/dist/stdio-blocking.js.map +1 -1
- package/dist/test-helpers.d.ts +130 -79
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +229 -124
- package/dist/test-helpers.js.map +1 -1
- package/dist/testing/executables.d.ts +32 -0
- package/dist/testing/executables.d.ts.map +1 -0
- package/dist/testing/executables.js +70 -0
- package/dist/testing/executables.js.map +1 -0
- package/dist/testing/hostile-tree.d.ts +79 -0
- package/dist/testing/hostile-tree.d.ts.map +1 -0
- package/dist/testing/hostile-tree.js +164 -0
- package/dist/testing/hostile-tree.js.map +1 -0
- package/dist/testing/platform-gates.d.ts +31 -0
- package/dist/testing/platform-gates.d.ts.map +1 -0
- package/dist/testing/platform-gates.js +31 -0
- package/dist/testing/platform-gates.js.map +1 -0
- package/dist/testing/temp-dir.d.ts +255 -0
- package/dist/testing/temp-dir.d.ts.map +1 -0
- package/dist/testing/temp-dir.js +363 -0
- package/dist/testing/temp-dir.js.map +1 -0
- package/dist/testing.d.ts +94 -3
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +119 -3
- package/dist/testing.js.map +1 -1
- package/dist/text-content.d.ts +197 -0
- package/dist/text-content.d.ts.map +1 -0
- package/dist/text-content.js +354 -0
- package/dist/text-content.js.map +1 -0
- package/dist/text-file.d.ts +45 -0
- package/dist/text-file.d.ts.map +1 -0
- package/dist/text-file.js +51 -0
- package/dist/text-file.js.map +1 -0
- package/dist/text.d.ts +16 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +16 -0
- package/dist/text.js.map +1 -0
- package/dist/timing-dump.d.ts +136 -0
- package/dist/timing-dump.d.ts.map +1 -0
- package/dist/timing-dump.js +229 -0
- package/dist/timing-dump.js.map +1 -0
- package/dist/windows-shell.d.ts +0 -1
- package/dist/windows-shell.d.ts.map +1 -1
- package/dist/windows-shell.js +0 -1
- package/dist/windows-shell.js.map +1 -1
- package/dist/zod-introspection.js +2 -2
- package/dist/zod-introspection.js.map +1 -1
- package/eslint/README.md +224 -50
- package/eslint/index.cjs +111 -97
- package/eslint/index.d.cts +16 -6
- package/eslint/rules/callee-name.cjs +23 -0
- package/eslint/rules/commands-import-boundary.cjs +148 -0
- package/eslint/rules/dead-import.cjs +62 -12
- package/eslint/rules/dirent-type-needs-symlink-check.cjs +282 -0
- package/eslint/rules/eslint-rule-factory.cjs +21 -3
- package/eslint/rules/exempt-path-matcher.cjs +2 -1
- package/eslint/rules/explicit-zod-strictness.cjs +120 -0
- package/eslint/rules/no-bare-dynamic-import-path.cjs +5 -1
- package/eslint/rules/no-bare-executable-spawn.cjs +70 -0
- package/eslint/rules/no-bare-symlink-in-tests.cjs +213 -0
- package/eslint/rules/no-blind-catch.cjs +171 -0
- package/eslint/rules/no-child-process-execSync.cjs +8 -0
- package/eslint/rules/no-decaying-referent.cjs +217 -0
- package/eslint/rules/no-dotdot-containment.cjs +160 -0
- package/eslint/rules/no-file-url-string-concat.cjs +4 -1
- package/eslint/rules/no-fragile-entrypoint-guard.cjs +228 -0
- package/eslint/rules/no-fs-mkdirSync.cjs +8 -0
- package/eslint/rules/no-fs-promises-cp.cjs +7 -0
- package/eslint/rules/no-fs-realpathSync.cjs +8 -0
- package/eslint/rules/no-hardcoded-path-split.cjs +29 -18
- package/eslint/rules/no-io-in-unit-tier.cjs +129 -0
- package/eslint/rules/no-literal-process-exit.cjs +129 -0
- package/eslint/rules/no-manual-path-normalize.cjs +146 -96
- package/eslint/rules/no-os-tmpdir.cjs +8 -0
- package/eslint/rules/no-path-operations-in-comparisons.cjs +7 -2
- package/eslint/rules/no-path-sep-in-strings.cjs +7 -2
- package/eslint/rules/no-path-startswith.cjs +7 -2
- package/eslint/rules/no-process-exit-in-phase.cjs +127 -0
- package/eslint/rules/no-raw-node-path.cjs +563 -0
- package/eslint/rules/no-raw-text-decode.cjs +305 -0
- package/eslint/rules/no-registry-count-pin.cjs +255 -0
- package/eslint/rules/no-self-package-import.cjs +168 -0
- package/eslint/rules/no-test-scoped-functions.cjs +10 -3
- package/eslint/rules/no-unix-shell-commands.cjs +6 -2
- package/eslint/rules/no-unsafe-root-join.cjs +23 -2
- package/eslint/rules/no-url-pathname-for-fs.cjs +5 -1
- package/eslint/rules/no-version-literal.cjs +151 -0
- package/eslint/rules/prefer-startswith-over-regex.cjs +33 -1
- package/eslint/rules/require-justified-skip.cjs +8 -2
- package/eslint/rules/safe-import.cjs +1 -1
- package/package.json +16 -16
- package/dist/link-auth/build-headers.d.ts +0 -34
- package/dist/link-auth/build-headers.d.ts.map +0 -1
- package/dist/link-auth/build-headers.js +0 -58
- package/dist/link-auth/build-headers.js.map +0 -1
- package/dist/link-auth/expand-macro.d.ts +0 -38
- package/dist/link-auth/expand-macro.d.ts.map +0 -1
- package/dist/link-auth/expand-macro.js +0 -133
- package/dist/link-auth/expand-macro.js.map +0 -1
- package/dist/link-auth/macros.yaml +0 -50
- package/dist/link-auth/resolve-token.d.ts +0 -83
- package/dist/link-auth/resolve-token.d.ts.map +0 -1
- package/dist/link-auth/resolve-token.js +0 -101
- package/dist/link-auth/resolve-token.js.map +0 -1
- package/dist/link-auth/resolve.d.ts +0 -102
- package/dist/link-auth/resolve.d.ts.map +0 -1
- package/dist/link-auth/resolve.js +0 -66
- package/dist/link-auth/resolve.js.map +0 -1
- package/dist/link-auth/rewrite.d.ts +0 -52
- package/dist/link-auth/rewrite.d.ts.map +0 -1
- package/dist/link-auth/rewrite.js +0 -102
- package/dist/link-auth/rewrite.js.map +0 -1
- package/dist/link-auth/select-provider.d.ts +0 -30
- package/dist/link-auth/select-provider.d.ts.map +0 -1
- package/dist/link-auth/select-provider.js +0 -55
- package/dist/link-auth/select-provider.js.map +0 -1
- package/dist/link-auth/template.d.ts +0 -40
- package/dist/link-auth/template.d.ts.map +0 -1
- package/dist/link-auth/template.js +0 -89
- package/dist/link-auth/template.js.map +0 -1
- package/dist/link-auth/transforms.d.ts +0 -46
- package/dist/link-auth/transforms.d.ts.map +0 -1
- package/dist/link-auth/transforms.js +0 -52
- package/dist/link-auth/transforms.js.map +0 -1
- package/dist/template-entry.d.ts +0 -10
- package/dist/template-entry.d.ts.map +0 -1
- package/dist/template-entry.js +0 -10
- package/dist/template-entry.js.map +0 -1
- package/dist/template.d.ts +0 -7
- package/dist/template.d.ts.map +0 -1
- package/dist/template.js +0 -18
- package/dist/template.js.map +0 -1
- package/eslint/rules/no-path-join.cjs +0 -14
- package/eslint/rules/no-path-relative.cjs +0 -14
- package/eslint/rules/no-path-resolve.cjs +0 -14
- package/eslint/rules/path-function-rule-factory.cjs +0 -417
package/dist/fs-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/fs.d.ts
CHANGED
|
@@ -8,5 +8,9 @@
|
|
|
8
8
|
* `@vibe-agent-toolkit/utils/path` instead — it is dramatically cheaper.
|
|
9
9
|
*/
|
|
10
10
|
export { normalizePath, normalizedTmpdir, mkdirSyncReal, resolveFromImportMeta, dynamicImportPath, } from './path-utils.js';
|
|
11
|
-
export {
|
|
11
|
+
export { readTextContent, readTextContentSync } from './text-file.js';
|
|
12
|
+
export type { DecodedText, EncodingSource, TextEncoding, TextProvenance } from './text-content.js';
|
|
13
|
+
export { isFilesystemAccessError, isPathAbsentError } from './errors/errno.js';
|
|
14
|
+
export { copyDirectory, DirectorySpellingIndex, fillPathSpellings, fillRealpaths, FsLookupCache, pathSpellingFrom, realpathFrom, spellingWalkRoot, } from './fs-utils.js';
|
|
15
|
+
export type { ComponentMatch, FilenameMatch, PathProbe, PathProbeStats, PathSpelling, PathSpellingRequest, PathSpellingTable, RealpathTable, } from './fs-utils.js';
|
|
12
16
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnG,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,eAAe,CAAC"}
|
package/dist/fs.js
CHANGED
|
@@ -8,5 +8,13 @@
|
|
|
8
8
|
* `@vibe-agent-toolkit/utils/path` instead — it is dramatically cheaper.
|
|
9
9
|
*/
|
|
10
10
|
export { normalizePath, normalizedTmpdir, mkdirSyncReal, resolveFromImportMeta, dynamicImportPath, } from './path-utils.js';
|
|
11
|
-
|
|
11
|
+
// Read a file and decode it through the one content-decoding seam. The DECISION
|
|
12
|
+
// about what the bytes say is pure and lives on `./text`; these two are that
|
|
13
|
+
// plus a `readFile`, which is why they are here and not there.
|
|
14
|
+
export { readTextContent, readTextContentSync } from './text-file.js';
|
|
15
|
+
// Two materialized columns, each a fill+judge pair and nothing else. In both the
|
|
16
|
+
// row IS the answer, so the row lookup — `pathSpellingFrom`, `realpathFrom` — is
|
|
17
|
+
// itself the judge and is exported. See `index.ts` for the full reasoning.
|
|
18
|
+
export { isFilesystemAccessError, isPathAbsentError } from './errors/errno.js';
|
|
19
|
+
export { copyDirectory, DirectorySpellingIndex, fillPathSpellings, fillRealpaths, FsLookupCache, pathSpellingFrom, realpathFrom, spellingWalkRoot, } from './fs-utils.js';
|
|
12
20
|
//# sourceMappingURL=fs.js.map
|
package/dist/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,6EAA6E;AAC7E,+DAA+D;AAC/D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGtE,iFAAiF;AACjF,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The module-level memo behind `gitFindRoot`, in its own leaf module.
|
|
3
|
+
*
|
|
4
|
+
* Two modules need it and they must not need each other:
|
|
5
|
+
*
|
|
6
|
+
* - `git-utils.ts` reads and writes it (it owns the walk).
|
|
7
|
+
* - `project-utils.ts` clears it from `resetProjectRootCaches()`, so callers
|
|
8
|
+
* have ONE reset to remember rather than one per walk-up cache.
|
|
9
|
+
*
|
|
10
|
+
* Having `project-utils.ts` import `git-utils.ts` for that would drag `which`
|
|
11
|
+
* and `node:child_process` into the `./project` entry, which exists precisely so
|
|
12
|
+
* root discovery costs no third-party packages to reach. This file imports
|
|
13
|
+
* nothing, so both sides can depend on it.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately not re-exported from `index.ts` or any subpath: the memo is an
|
|
16
|
+
* implementation detail of `gitFindRoot`, and a second public reset name is a
|
|
17
|
+
* reset callers forget to call.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Look up a memoized git root.
|
|
21
|
+
*
|
|
22
|
+
* @param dir - Resolved directory to look up
|
|
23
|
+
* @returns The memoized answer (possibly `null`), or `undefined` if unknown
|
|
24
|
+
*/
|
|
25
|
+
export declare function lookupGitRoot(dir: string): string | null | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Record `gitRoot` as the answer for every directory a walk climbed through.
|
|
28
|
+
*
|
|
29
|
+
* @param climbed - Directories visited by the walk, deepest first
|
|
30
|
+
* @param gitRoot - The answer they all share
|
|
31
|
+
* @returns `gitRoot`, so a walk can `return rememberGitRoot(...)`
|
|
32
|
+
*/
|
|
33
|
+
export declare function rememberGitRoot(climbed: readonly string[], gitRoot: string | null): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Drop every memoized git root.
|
|
36
|
+
*
|
|
37
|
+
* Not called directly by application code — `resetProjectRootCaches()` calls it,
|
|
38
|
+
* so one reset invalidates both walk-up caches. Necessary because a `.git`
|
|
39
|
+
* directory can appear or vanish while the process lives (tests build fixtures
|
|
40
|
+
* mid-run; a long-lived host re-enters `vat audit` between edits), and a stale
|
|
41
|
+
* entry would outlive the change.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resetGitRootCache(): void;
|
|
44
|
+
//# sourceMappingURL=git-root-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-root-cache.d.ts","sourceRoot":"","sources":["../src/git-root-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAmBH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAGjG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The module-level memo behind `gitFindRoot`, in its own leaf module.
|
|
3
|
+
*
|
|
4
|
+
* Two modules need it and they must not need each other:
|
|
5
|
+
*
|
|
6
|
+
* - `git-utils.ts` reads and writes it (it owns the walk).
|
|
7
|
+
* - `project-utils.ts` clears it from `resetProjectRootCaches()`, so callers
|
|
8
|
+
* have ONE reset to remember rather than one per walk-up cache.
|
|
9
|
+
*
|
|
10
|
+
* Having `project-utils.ts` import `git-utils.ts` for that would drag `which`
|
|
11
|
+
* and `node:child_process` into the `./project` entry, which exists precisely so
|
|
12
|
+
* root discovery costs no third-party packages to reach. This file imports
|
|
13
|
+
* nothing, so both sides can depend on it.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately not re-exported from `index.ts` or any subpath: the memo is an
|
|
16
|
+
* implementation detail of `gitFindRoot`, and a second public reset name is a
|
|
17
|
+
* reset callers forget to call.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Answers "which git root governs files at or below this directory?" for every
|
|
21
|
+
* directory a walk has climbed through.
|
|
22
|
+
*
|
|
23
|
+
* The answer is a property of the keyed directory alone — it does not depend on
|
|
24
|
+
* where the walk that discovered it started — so entries are safe to share
|
|
25
|
+
* across starting points. That sharing is the whole point: on a real `vat audit`
|
|
26
|
+
* run the `.git` probe fired 89 times over 21 distinct directories, because
|
|
27
|
+
* different files' walks re-climb the same ancestors.
|
|
28
|
+
*
|
|
29
|
+
* `null` is a stored value, not an absence: "known not to be in a repository"
|
|
30
|
+
* is the answer that costs a walk all the way to the filesystem root, so it has
|
|
31
|
+
* to be cacheable. Absence is `undefined`, which `Map.get` returns and this
|
|
32
|
+
* module never stores.
|
|
33
|
+
*/
|
|
34
|
+
const gitRootCache = new Map();
|
|
35
|
+
/**
|
|
36
|
+
* Look up a memoized git root.
|
|
37
|
+
*
|
|
38
|
+
* @param dir - Resolved directory to look up
|
|
39
|
+
* @returns The memoized answer (possibly `null`), or `undefined` if unknown
|
|
40
|
+
*/
|
|
41
|
+
export function lookupGitRoot(dir) {
|
|
42
|
+
return gitRootCache.get(dir);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Record `gitRoot` as the answer for every directory a walk climbed through.
|
|
46
|
+
*
|
|
47
|
+
* @param climbed - Directories visited by the walk, deepest first
|
|
48
|
+
* @param gitRoot - The answer they all share
|
|
49
|
+
* @returns `gitRoot`, so a walk can `return rememberGitRoot(...)`
|
|
50
|
+
*/
|
|
51
|
+
export function rememberGitRoot(climbed, gitRoot) {
|
|
52
|
+
for (const dir of climbed)
|
|
53
|
+
gitRootCache.set(dir, gitRoot);
|
|
54
|
+
return gitRoot;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Drop every memoized git root.
|
|
58
|
+
*
|
|
59
|
+
* Not called directly by application code — `resetProjectRootCaches()` calls it,
|
|
60
|
+
* so one reset invalidates both walk-up caches. Necessary because a `.git`
|
|
61
|
+
* directory can appear or vanish while the process lives (tests build fixtures
|
|
62
|
+
* mid-run; a long-lived host re-enters `vat audit` between edits), and a stale
|
|
63
|
+
* entry would outlive the change.
|
|
64
|
+
*/
|
|
65
|
+
export function resetGitRootCache() {
|
|
66
|
+
gitRootCache.clear();
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=git-root-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-root-cache.js","sourceRoot":"","sources":["../src/git-root-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAA0B,EAAE,OAAsB;IAChF,KAAK,MAAM,GAAG,IAAI,OAAO;QAAE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one way to run `git` — safe by construction, for VAT and for anyone
|
|
3
|
+
* building on `@vibe-agent-toolkit/utils`.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists rather than "remember to pass the right options"
|
|
6
|
+
*
|
|
7
|
+
* A `git` child inherits `GIT_DIR`, `GIT_INDEX_FILE`, `GIT_PREFIX` and friends
|
|
8
|
+
* from any ancestor `git` process, and **those override the `cwd` you passed**.
|
|
9
|
+
* The result is not an error — it is a well-formed answer about a different
|
|
10
|
+
* repository, at exit 0. Measured against real pre-commit hooks:
|
|
11
|
+
*
|
|
12
|
+
* - `git status --porcelain` at a caller-supplied path reported the *committing*
|
|
13
|
+
* repository's status, exit 0.
|
|
14
|
+
* - `git init` in a fresh directory silently re-initialized the inherited
|
|
15
|
+
* `GIT_DIR` — no `.git` appeared where it was asked for — and the following
|
|
16
|
+
* `add`/`commit` landed in a **bystander repository**, switching its branch
|
|
17
|
+
* and rewriting its index, while every step reported success.
|
|
18
|
+
* - `git rev-parse --show-toplevel` answered **correctly** throughout, so the
|
|
19
|
+
* obvious "am I in the right repository?" guard cannot detect any of it.
|
|
20
|
+
*
|
|
21
|
+
* The hazard is therefore invisible at every call site, which is exactly the
|
|
22
|
+
* kind of thing that must be handled by the default rather than by discipline.
|
|
23
|
+
*
|
|
24
|
+
* ## The default is the whole design
|
|
25
|
+
*
|
|
26
|
+
* **The environment is scrubbed unless you say `ambient: true`.** Almost every
|
|
27
|
+
* git command in a tool is about a path the caller was *handed* — a project
|
|
28
|
+
* root, a temp staging repo, a clone destination — and for those the inherited
|
|
29
|
+
* environment is always wrong. The rare command that genuinely means "the
|
|
30
|
+
* repository I am standing in" (`git remote get-url` inside the user's own
|
|
31
|
+
* checkout, say) opts out explicitly, and has to name itself when it does.
|
|
32
|
+
*
|
|
33
|
+
* ## What this is, mechanically: a set of defaults over `@vibe-validate/git`
|
|
34
|
+
*
|
|
35
|
+
* The spawn itself, the environment scrub and the treatment of a spawn-level
|
|
36
|
+
* error all live in `executeGitCommand`, which is that package's single
|
|
37
|
+
* chokepoint and is exercised by vibe-validate on every commit it gates. This
|
|
38
|
+
* module supplies only the three defaults VAT needs to differ on, and a result
|
|
39
|
+
* shape that never throws:
|
|
40
|
+
*
|
|
41
|
+
* - **`scrubGitEnv` is on unless `ambient: true`** — the inverse of
|
|
42
|
+
* `executeGitCommand`'s `false`. That default is right for vibe-validate,
|
|
43
|
+
* which mostly operates on the repository it was invoked in; it is wrong here,
|
|
44
|
+
* because VAT and its adopters are handed a root. Consolidating without this
|
|
45
|
+
* wrapper would relocate the opt-in rather than remove the hazard.
|
|
46
|
+
* - **`maxBuffer` is 64 MiB, never Node's 1 MiB** (`executeGitCommand` defaults
|
|
47
|
+
* to 10 MiB). `git ls-files -s -z` emits ~104 bytes per path, so an
|
|
48
|
+
* 8,500-file tree reaches 84% of Node's default and a larger one truncates.
|
|
49
|
+
* - **A spawn-level failure is a failure regardless of exit status**, which
|
|
50
|
+
* `executeGitCommand` now enforces itself; `ok` simply forwards its `success`.
|
|
51
|
+
*
|
|
52
|
+
* ⚠️ **One property was given up in the consolidation:** this used to resolve the
|
|
53
|
+
* binary with `which.sync('git')` and spawn an absolute path. `executeGitCommand`
|
|
54
|
+
* spawns bare `'git'` and lets the OS search `PATH`, so a "git is not on PATH"
|
|
55
|
+
* condition now arrives as an `ENOENT` in `error` rather than as a distinct
|
|
56
|
+
* pre-spawn message. Both are reported through {@link GitRunResult}, so no caller
|
|
57
|
+
* can mistake either for success.
|
|
58
|
+
*/
|
|
59
|
+
/** How to run one git command. */
|
|
60
|
+
export interface GitRunOptions {
|
|
61
|
+
/**
|
|
62
|
+
* Directory to run in. Honoured for real, because the inherited environment
|
|
63
|
+
* that would otherwise override it is removed first.
|
|
64
|
+
*/
|
|
65
|
+
cwd?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Opt out of the scrub, for a command that genuinely means "the repository I
|
|
68
|
+
* am standing in" rather than a path handed to it.
|
|
69
|
+
*
|
|
70
|
+
* ⚠️ Setting this inside a git hook makes the command operate on whatever the
|
|
71
|
+
* outer `git` was operating on. That is occasionally what you want — and it is
|
|
72
|
+
* never what you want when `cwd` names something specific.
|
|
73
|
+
*
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
ambient?: boolean;
|
|
77
|
+
/** Variables applied *after* the scrub, so a deliberate one survives. */
|
|
78
|
+
env?: Record<string, string>;
|
|
79
|
+
/** Milliseconds before the child is killed. @default 60000 */
|
|
80
|
+
timeout?: number;
|
|
81
|
+
/** Bytes of stdout/stderr to capture. @default 67108864 (64 MiB) */
|
|
82
|
+
maxBuffer?: number;
|
|
83
|
+
/** Data written to the child's stdin. */
|
|
84
|
+
input?: string;
|
|
85
|
+
/** Discard the child's stderr instead of capturing it. @default false */
|
|
86
|
+
suppressStderr?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Trim surrounding whitespace from `stdout` and `stderr`.
|
|
89
|
+
*
|
|
90
|
+
* **Pass `false` for a NUL-delimited (`-z`) listing.** git sorts by byte value
|
|
91
|
+
* and 0x20 sorts below every printable character, so a path beginning with a
|
|
92
|
+
* space is listed *first* — where the trim reaches it. The caller then holds a
|
|
93
|
+
* path that does not exist, and every lookup against it reads as "not there"
|
|
94
|
+
* rather than as an error. Also pass `false` when the output is file content
|
|
95
|
+
* (`git show HEAD:file`), whose trailing newline is data.
|
|
96
|
+
*
|
|
97
|
+
* `ls-files -s -z` does not need it: the mode occupies position 0.
|
|
98
|
+
*
|
|
99
|
+
* @default true
|
|
100
|
+
*/
|
|
101
|
+
trim?: boolean;
|
|
102
|
+
}
|
|
103
|
+
/** What one git command did. */
|
|
104
|
+
export interface GitRunResult {
|
|
105
|
+
/**
|
|
106
|
+
* True only when git actually ran **and** exited 0. A truncated or killed
|
|
107
|
+
* child is never `ok`, whatever its exit status says.
|
|
108
|
+
*/
|
|
109
|
+
ok: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Exit status, or `1` when the process never ran or was killed — the two are
|
|
112
|
+
* not distinguishable here, so branch on {@link GitRunResult.error} rather
|
|
113
|
+
* than on this when you need to tell a real `exit 1` from a failure to spawn.
|
|
114
|
+
*/
|
|
115
|
+
status: number;
|
|
116
|
+
/** Decoded stdout, trimmed. */
|
|
117
|
+
stdout: string;
|
|
118
|
+
/** Decoded stderr, trimmed — or the spawn failure's message when there is one. */
|
|
119
|
+
stderr: string;
|
|
120
|
+
/**
|
|
121
|
+
* The spawn-level failure, when git could not run, was killed, or overran
|
|
122
|
+
* `maxBuffer`. Present independently of `status`.
|
|
123
|
+
*/
|
|
124
|
+
error?: Error;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Run one `git` command.
|
|
128
|
+
*
|
|
129
|
+
* Never throws: a missing binary, a timeout and a non-zero exit are all reported
|
|
130
|
+
* through {@link GitRunResult} so a caller can tell them apart and choose. Check
|
|
131
|
+
* `ok`, not `status`.
|
|
132
|
+
*
|
|
133
|
+
* @param args - Arguments after the `git` executable, e.g. `['status', '--porcelain']`
|
|
134
|
+
* @param options - See {@link GitRunOptions}; the environment is scrubbed unless
|
|
135
|
+
* `ambient` is set
|
|
136
|
+
* @returns The outcome, including any spawn-level failure
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // About a path you were handed — the ordinary case, safe by default.
|
|
141
|
+
* const r = runGit(['status', '--porcelain'], { cwd: projectRoot });
|
|
142
|
+
* if (!r.ok) throw new Error(`git status failed: ${r.stderr}`);
|
|
143
|
+
* ```
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* // About the repository this process is standing in — opt out explicitly.
|
|
148
|
+
* const url = runGit(['remote', 'get-url', 'origin'], { ambient: true });
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export declare function runGit(args: readonly string[], options?: GitRunOptions): GitRunResult;
|
|
152
|
+
/**
|
|
153
|
+
* {@link runGit}, but a failure throws instead of being reported.
|
|
154
|
+
*
|
|
155
|
+
* For callers whose next line has no meaning if the command did not work —
|
|
156
|
+
* setting up a fixture repository, or any step whose failure should stop the
|
|
157
|
+
* run rather than be interpreted. Prefer {@link runGit} wherever a non-zero
|
|
158
|
+
* exit carries information ("no commit yet", "not a repository", "no such
|
|
159
|
+
* remote"), because those are answers rather than faults.
|
|
160
|
+
*
|
|
161
|
+
* @param args - Arguments after the `git` executable
|
|
162
|
+
* @param options - See {@link GitRunOptions}
|
|
163
|
+
* @returns The trimmed stdout
|
|
164
|
+
* @throws {Error} When git could not run, or ran and exited non-zero
|
|
165
|
+
*/
|
|
166
|
+
export declare function runGitOrThrow(args: readonly string[], options?: GitRunOptions): string;
|
|
167
|
+
//# sourceMappingURL=git-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-run.d.ts","sourceRoot":"","sources":["../src/git-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAcH,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,EAAE,EAAE,OAAO,CAAC;IACZ;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,CAsCzF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAS1F"}
|
package/dist/git-run.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one way to run `git` — safe by construction, for VAT and for anyone
|
|
3
|
+
* building on `@vibe-agent-toolkit/utils`.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists rather than "remember to pass the right options"
|
|
6
|
+
*
|
|
7
|
+
* A `git` child inherits `GIT_DIR`, `GIT_INDEX_FILE`, `GIT_PREFIX` and friends
|
|
8
|
+
* from any ancestor `git` process, and **those override the `cwd` you passed**.
|
|
9
|
+
* The result is not an error — it is a well-formed answer about a different
|
|
10
|
+
* repository, at exit 0. Measured against real pre-commit hooks:
|
|
11
|
+
*
|
|
12
|
+
* - `git status --porcelain` at a caller-supplied path reported the *committing*
|
|
13
|
+
* repository's status, exit 0.
|
|
14
|
+
* - `git init` in a fresh directory silently re-initialized the inherited
|
|
15
|
+
* `GIT_DIR` — no `.git` appeared where it was asked for — and the following
|
|
16
|
+
* `add`/`commit` landed in a **bystander repository**, switching its branch
|
|
17
|
+
* and rewriting its index, while every step reported success.
|
|
18
|
+
* - `git rev-parse --show-toplevel` answered **correctly** throughout, so the
|
|
19
|
+
* obvious "am I in the right repository?" guard cannot detect any of it.
|
|
20
|
+
*
|
|
21
|
+
* The hazard is therefore invisible at every call site, which is exactly the
|
|
22
|
+
* kind of thing that must be handled by the default rather than by discipline.
|
|
23
|
+
*
|
|
24
|
+
* ## The default is the whole design
|
|
25
|
+
*
|
|
26
|
+
* **The environment is scrubbed unless you say `ambient: true`.** Almost every
|
|
27
|
+
* git command in a tool is about a path the caller was *handed* — a project
|
|
28
|
+
* root, a temp staging repo, a clone destination — and for those the inherited
|
|
29
|
+
* environment is always wrong. The rare command that genuinely means "the
|
|
30
|
+
* repository I am standing in" (`git remote get-url` inside the user's own
|
|
31
|
+
* checkout, say) opts out explicitly, and has to name itself when it does.
|
|
32
|
+
*
|
|
33
|
+
* ## What this is, mechanically: a set of defaults over `@vibe-validate/git`
|
|
34
|
+
*
|
|
35
|
+
* The spawn itself, the environment scrub and the treatment of a spawn-level
|
|
36
|
+
* error all live in `executeGitCommand`, which is that package's single
|
|
37
|
+
* chokepoint and is exercised by vibe-validate on every commit it gates. This
|
|
38
|
+
* module supplies only the three defaults VAT needs to differ on, and a result
|
|
39
|
+
* shape that never throws:
|
|
40
|
+
*
|
|
41
|
+
* - **`scrubGitEnv` is on unless `ambient: true`** — the inverse of
|
|
42
|
+
* `executeGitCommand`'s `false`. That default is right for vibe-validate,
|
|
43
|
+
* which mostly operates on the repository it was invoked in; it is wrong here,
|
|
44
|
+
* because VAT and its adopters are handed a root. Consolidating without this
|
|
45
|
+
* wrapper would relocate the opt-in rather than remove the hazard.
|
|
46
|
+
* - **`maxBuffer` is 64 MiB, never Node's 1 MiB** (`executeGitCommand` defaults
|
|
47
|
+
* to 10 MiB). `git ls-files -s -z` emits ~104 bytes per path, so an
|
|
48
|
+
* 8,500-file tree reaches 84% of Node's default and a larger one truncates.
|
|
49
|
+
* - **A spawn-level failure is a failure regardless of exit status**, which
|
|
50
|
+
* `executeGitCommand` now enforces itself; `ok` simply forwards its `success`.
|
|
51
|
+
*
|
|
52
|
+
* ⚠️ **One property was given up in the consolidation:** this used to resolve the
|
|
53
|
+
* binary with `which.sync('git')` and spawn an absolute path. `executeGitCommand`
|
|
54
|
+
* spawns bare `'git'` and lets the OS search `PATH`, so a "git is not on PATH"
|
|
55
|
+
* condition now arrives as an `ENOENT` in `error` rather than as a distinct
|
|
56
|
+
* pre-spawn message. Both are reported through {@link GitRunResult}, so no caller
|
|
57
|
+
* can mistake either for success.
|
|
58
|
+
*/
|
|
59
|
+
import { executeGitCommand } from '@vibe-validate/git';
|
|
60
|
+
/**
|
|
61
|
+
* 64 MiB. Chosen against `git ls-files -s -z`, the widest-output command here:
|
|
62
|
+
* ~104 bytes per path means this covers roughly 640,000 paths, while Node's
|
|
63
|
+
* 1 MiB default covers about 10,000 — a ceiling ordinary monorepos reach.
|
|
64
|
+
*/
|
|
65
|
+
const DEFAULT_MAX_BUFFER = 64 * 1024 * 1024;
|
|
66
|
+
/** Wall-clock ceiling on one invocation, so a hung remote cannot wedge a build. */
|
|
67
|
+
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
68
|
+
/**
|
|
69
|
+
* Run one `git` command.
|
|
70
|
+
*
|
|
71
|
+
* Never throws: a missing binary, a timeout and a non-zero exit are all reported
|
|
72
|
+
* through {@link GitRunResult} so a caller can tell them apart and choose. Check
|
|
73
|
+
* `ok`, not `status`.
|
|
74
|
+
*
|
|
75
|
+
* @param args - Arguments after the `git` executable, e.g. `['status', '--porcelain']`
|
|
76
|
+
* @param options - See {@link GitRunOptions}; the environment is scrubbed unless
|
|
77
|
+
* `ambient` is set
|
|
78
|
+
* @returns The outcome, including any spawn-level failure
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* // About a path you were handed — the ordinary case, safe by default.
|
|
83
|
+
* const r = runGit(['status', '--porcelain'], { cwd: projectRoot });
|
|
84
|
+
* if (!r.ok) throw new Error(`git status failed: ${r.stderr}`);
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // About the repository this process is standing in — opt out explicitly.
|
|
90
|
+
* const url = runGit(['remote', 'get-url', 'origin'], { ambient: true });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function runGit(args, options = {}) {
|
|
94
|
+
if (args.length === 0) {
|
|
95
|
+
// Handled here rather than by `executeGitCommand`, which THROWS on an empty
|
|
96
|
+
// argv. This function's whole contract is that it never throws.
|
|
97
|
+
return {
|
|
98
|
+
ok: false,
|
|
99
|
+
status: 1,
|
|
100
|
+
stdout: '',
|
|
101
|
+
stderr: 'runGit() needs at least one argument',
|
|
102
|
+
error: new Error('runGit() needs at least one argument'),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// `ignoreErrors` is what makes this non-throwing, and it is safe to set
|
|
106
|
+
// unconditionally only because `executeGitCommand` now reports `error` on that
|
|
107
|
+
// path too. Before that fix it dropped the spawn cause entirely, and a caller
|
|
108
|
+
// reading the result could not tell "git is not installed" from "exit 1 is the
|
|
109
|
+
// answer" from "your listing was truncated" — which is why this wrapper could
|
|
110
|
+
// not have been written against the previous release.
|
|
111
|
+
const result = executeGitCommand([...args], {
|
|
112
|
+
...(options.cwd === undefined ? {} : { cwd: options.cwd }),
|
|
113
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
114
|
+
...(options.input === undefined ? {} : { stdin: options.input }),
|
|
115
|
+
scrubGitEnv: options.ambient !== true,
|
|
116
|
+
suppressStderr: options.suppressStderr ?? false,
|
|
117
|
+
trimOutput: options.trim ?? true,
|
|
118
|
+
ignoreErrors: true,
|
|
119
|
+
timeout: options.timeout ?? DEFAULT_TIMEOUT_MS,
|
|
120
|
+
maxBuffer: options.maxBuffer ?? DEFAULT_MAX_BUFFER,
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
ok: result.success,
|
|
124
|
+
status: result.exitCode,
|
|
125
|
+
stdout: result.stdout,
|
|
126
|
+
stderr: result.stderr,
|
|
127
|
+
...(result.error === undefined ? {} : { error: result.error }),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* {@link runGit}, but a failure throws instead of being reported.
|
|
132
|
+
*
|
|
133
|
+
* For callers whose next line has no meaning if the command did not work —
|
|
134
|
+
* setting up a fixture repository, or any step whose failure should stop the
|
|
135
|
+
* run rather than be interpreted. Prefer {@link runGit} wherever a non-zero
|
|
136
|
+
* exit carries information ("no commit yet", "not a repository", "no such
|
|
137
|
+
* remote"), because those are answers rather than faults.
|
|
138
|
+
*
|
|
139
|
+
* @param args - Arguments after the `git` executable
|
|
140
|
+
* @param options - See {@link GitRunOptions}
|
|
141
|
+
* @returns The trimmed stdout
|
|
142
|
+
* @throws {Error} When git could not run, or ran and exited non-zero
|
|
143
|
+
*/
|
|
144
|
+
export function runGitOrThrow(args, options = {}) {
|
|
145
|
+
const result = runGit(args, options);
|
|
146
|
+
if (result.ok)
|
|
147
|
+
return result.stdout;
|
|
148
|
+
// The subcommand only: a commit message can be hundreds of KB, and
|
|
149
|
+
// interpolating the whole argv buries the actual error in CI output.
|
|
150
|
+
const label = args[0] ?? '<no args>';
|
|
151
|
+
const detail = result.stderr || `exit ${String(result.status)}`;
|
|
152
|
+
throw new Error(`git ${label} failed: ${detail}`);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=git-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-run.js","sourceRoot":"","sources":["../src/git-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,mFAAmF;AACnF,MAAM,kBAAkB,GAAG,MAAM,CAAC;AA8ElC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,MAAM,CAAC,IAAuB,EAAE,UAAyB,EAAE;IACzE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,4EAA4E;QAC5E,gEAAgE;QAChE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,sCAAsC;YAC9C,KAAK,EAAE,IAAI,KAAK,CAAC,sCAAsC,CAAC;SACzD,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,8EAA8E;IAC9E,sDAAsD;IACtD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;QAC1C,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAChE,WAAW,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;QACrC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;QAC/C,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;QAChC,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,kBAAkB;QAC9C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;KACnD,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,OAAO;QAClB,MAAM,EAAE,MAAM,CAAC,QAAQ;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB,EAAE,UAAyB,EAAE;IAChF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAEpC,mEAAmE;IACnE,qEAAqE;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC"}
|