@microwiseai/snapshot 0.5.1 → 0.6.0

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 (77) hide show
  1. package/dist/commands/doctor.d.ts +2 -0
  2. package/dist/commands/doctor.d.ts.map +1 -0
  3. package/dist/commands/doctor.js +37 -0
  4. package/dist/commands/doctor.js.map +1 -0
  5. package/dist/commands/install.d.ts.map +1 -1
  6. package/dist/commands/install.js +34 -11
  7. package/dist/commands/install.js.map +1 -1
  8. package/dist/commands/setup.d.ts +5 -0
  9. package/dist/commands/setup.d.ts.map +1 -0
  10. package/dist/commands/setup.js +52 -0
  11. package/dist/commands/setup.js.map +1 -0
  12. package/dist/index.js +18 -14
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/config.js +1 -1
  15. package/dist/lib/config.js.map +1 -1
  16. package/dist/lib/gitlab.d.ts.map +1 -1
  17. package/dist/lib/gitlab.js +8 -6
  18. package/dist/lib/gitlab.js.map +1 -1
  19. package/dist/lib/prerequisites.d.ts +33 -0
  20. package/dist/lib/prerequisites.d.ts.map +1 -0
  21. package/dist/lib/prerequisites.js +123 -0
  22. package/dist/lib/prerequisites.js.map +1 -0
  23. package/package.json +3 -14
  24. package/dist/commands/clone-all.d.ts +0 -21
  25. package/dist/commands/clone-all.d.ts.map +0 -1
  26. package/dist/commands/clone-all.js +0 -57
  27. package/dist/commands/clone-all.js.map +0 -1
  28. package/node_modules/@gitdot/clone-lib/README.md +0 -117
  29. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts +0 -9
  30. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts.map +0 -1
  31. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js +0 -154
  32. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js.map +0 -1
  33. package/node_modules/@gitdot/clone-lib/dist/clone.d.ts +0 -21
  34. package/node_modules/@gitdot/clone-lib/dist/clone.d.ts.map +0 -1
  35. package/node_modules/@gitdot/clone-lib/dist/clone.js +0 -228
  36. package/node_modules/@gitdot/clone-lib/dist/clone.js.map +0 -1
  37. package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts +0 -10
  38. package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts.map +0 -1
  39. package/node_modules/@gitdot/clone-lib/dist/dotpath.js +0 -27
  40. package/node_modules/@gitdot/clone-lib/dist/dotpath.js.map +0 -1
  41. package/node_modules/@gitdot/clone-lib/dist/git.d.ts +0 -23
  42. package/node_modules/@gitdot/clone-lib/dist/git.d.ts.map +0 -1
  43. package/node_modules/@gitdot/clone-lib/dist/git.js +0 -134
  44. package/node_modules/@gitdot/clone-lib/dist/git.js.map +0 -1
  45. package/node_modules/@gitdot/clone-lib/dist/index.d.ts +0 -17
  46. package/node_modules/@gitdot/clone-lib/dist/index.d.ts.map +0 -1
  47. package/node_modules/@gitdot/clone-lib/dist/index.js +0 -35
  48. package/node_modules/@gitdot/clone-lib/dist/index.js.map +0 -1
  49. package/node_modules/@gitdot/clone-lib/dist/lock.d.ts +0 -24
  50. package/node_modules/@gitdot/clone-lib/dist/lock.d.ts.map +0 -1
  51. package/node_modules/@gitdot/clone-lib/dist/lock.js +0 -97
  52. package/node_modules/@gitdot/clone-lib/dist/lock.js.map +0 -1
  53. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts +0 -15
  54. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts.map +0 -1
  55. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js +0 -124
  56. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js.map +0 -1
  57. package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts +0 -12
  58. package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts.map +0 -1
  59. package/node_modules/@gitdot/clone-lib/dist/resolve/index.js +0 -31
  60. package/node_modules/@gitdot/clone-lib/dist/resolve/index.js.map +0 -1
  61. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts +0 -32
  62. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts.map +0 -1
  63. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js +0 -159
  64. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js.map +0 -1
  65. package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts +0 -44
  66. package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts.map +0 -1
  67. package/node_modules/@gitdot/clone-lib/dist/resolve/member.js +0 -163
  68. package/node_modules/@gitdot/clone-lib/dist/resolve/member.js.map +0 -1
  69. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts +0 -18
  70. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts.map +0 -1
  71. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js +0 -155
  72. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js.map +0 -1
  73. package/node_modules/@gitdot/clone-lib/dist/types.d.ts +0 -225
  74. package/node_modules/@gitdot/clone-lib/dist/types.d.ts.map +0 -1
  75. package/node_modules/@gitdot/clone-lib/dist/types.js +0 -9
  76. package/node_modules/@gitdot/clone-lib/dist/types.js.map +0 -1
  77. package/node_modules/@gitdot/clone-lib/package.json +0 -53
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitdot-resolve.js","sourceRoot":"","sources":["../../src/bin/gitdot-resolve.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * cloneFromLock — core of the shared clone library (RESOLVED-LOCK-SPEC S3).
3
- *
4
- * Input: a resolved-lock file (S2) — flat, fully-resolved members[].
5
- * Output: cloned repos on disk + a structured, --json-serializable CloneReport.
6
- *
7
- * Contract highlights (S3):
8
- * - Two modes: `pinned` (clone + checkout exact commitSha; NO silent HEAD fallback)
9
- * and `head` (clone + stay on default-branch HEAD; record the actual HEAD sha).
10
- * - Flat closure iteration over members[] — no re-resolution, no graph walk.
11
- * - Clone-path = <dest>/workspace/<dotToTreePath(id)> (pure function).
12
- * - Same cloneUrl is cloned once (dedup); later duplicates land in `skipped`.
13
- * - Auth is proxy-independent plain git clone. private + no access =>
14
- * `skipped-no-access` (expected, NOT an error).
15
- * - Pre-flight `credentialsNeeded` = count of private members to be attempted.
16
- * - Deterministic + idempotent: a member already at its target sha is `skipped`.
17
- * - Every member lands in exactly ONE bucket — no silent drops.
18
- */
19
- import type { CloneFromLockOptions, CloneReport } from './types';
20
- export declare function cloneFromLock(lockPath: string, options: CloneFromLockOptions): Promise<CloneReport>;
21
- //# sourceMappingURL=clone.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../src/clone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAa,WAAW,EAAc,MAAM,SAAS,CAAC;AAWxF,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA6KtB"}
@@ -1,228 +0,0 @@
1
- "use strict";
2
- /**
3
- * cloneFromLock — core of the shared clone library (RESOLVED-LOCK-SPEC S3).
4
- *
5
- * Input: a resolved-lock file (S2) — flat, fully-resolved members[].
6
- * Output: cloned repos on disk + a structured, --json-serializable CloneReport.
7
- *
8
- * Contract highlights (S3):
9
- * - Two modes: `pinned` (clone + checkout exact commitSha; NO silent HEAD fallback)
10
- * and `head` (clone + stay on default-branch HEAD; record the actual HEAD sha).
11
- * - Flat closure iteration over members[] — no re-resolution, no graph walk.
12
- * - Clone-path = <dest>/workspace/<dotToTreePath(id)> (pure function).
13
- * - Same cloneUrl is cloned once (dedup); later duplicates land in `skipped`.
14
- * - Auth is proxy-independent plain git clone. private + no access =>
15
- * `skipped-no-access` (expected, NOT an error).
16
- * - Pre-flight `credentialsNeeded` = count of private members to be attempted.
17
- * - Deterministic + idempotent: a member already at its target sha is `skipped`.
18
- * - Every member lands in exactly ONE bucket — no silent drops.
19
- */
20
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- var desc = Object.getOwnPropertyDescriptor(m, k);
23
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
- desc = { enumerable: true, get: function() { return m[k]; } };
25
- }
26
- Object.defineProperty(o, k2, desc);
27
- }) : (function(o, m, k, k2) {
28
- if (k2 === undefined) k2 = k;
29
- o[k2] = m[k];
30
- }));
31
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
- Object.defineProperty(o, "default", { enumerable: true, value: v });
33
- }) : function(o, v) {
34
- o["default"] = v;
35
- });
36
- var __importStar = (this && this.__importStar) || (function () {
37
- var ownKeys = function(o) {
38
- ownKeys = Object.getOwnPropertyNames || function (o) {
39
- var ar = [];
40
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
- return ar;
42
- };
43
- return ownKeys(o);
44
- };
45
- return function (mod) {
46
- if (mod && mod.__esModule) return mod;
47
- var result = {};
48
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
- __setModuleDefault(result, mod);
50
- return result;
51
- };
52
- })();
53
- Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.cloneFromLock = cloneFromLock;
55
- const path = __importStar(require("path"));
56
- const dotpath_1 = require("./dotpath");
57
- const git_1 = require("./git");
58
- const lock_1 = require("./lock");
59
- const VALID_MODES = new Set(['pinned', 'head']);
60
- function errKind(e) {
61
- return e instanceof git_1.GitError ? e.kind : 'failed';
62
- }
63
- function errMsg(e) {
64
- return e instanceof Error ? e.message : String(e);
65
- }
66
- async function cloneFromLock(lockPath, options) {
67
- const { mode = 'pinned', dest, only, installer, git = (0, git_1.createGitRunner)(), workspaceDir = 'workspace', } = options || {};
68
- if (!VALID_MODES.has(mode)) {
69
- throw new Error(`cloneFromLock: invalid mode "${mode}" (expected "pinned" | "head")`);
70
- }
71
- if (!dest || typeof dest !== 'string') {
72
- throw new Error('cloneFromLock: options.dest (workspace root) is required');
73
- }
74
- // Filename-agnostic: skit/snapshot/glpkg.lock.json are one schema (S2).
75
- const lock = (0, lock_1.loadLock)(lockPath);
76
- const members = lock.members;
77
- const onlySet = Array.isArray(only) && only.length ? new Set(only) : null;
78
- const installerSet = Array.isArray(installer) && installer.length ? new Set(installer) : null;
79
- const report = {
80
- mode,
81
- credentialsNeeded: 0,
82
- cloned: [],
83
- skipped: [],
84
- 'skipped-no-access': [],
85
- 'not-found': [],
86
- failed: [],
87
- closureSize: members.length,
88
- };
89
- // First pass: attempted set (post-filter) + pre-flight credential count.
90
- const attempted = members.filter((m) => {
91
- if (onlySet && !onlySet.has(m.id))
92
- return false;
93
- if (installerSet && !installerSet.has(m.installer))
94
- return false;
95
- return true;
96
- });
97
- report.credentialsNeeded = attempted.filter((m) => m.visibility === 'private').length;
98
- // cloneUrl -> id that first claimed it (dedup: clone each URL once).
99
- const seenUrls = new Map();
100
- for (const member of members) {
101
- const id = member.id;
102
- // --- filters -> skipped ------------------------------------------------
103
- if (onlySet && !onlySet.has(id)) {
104
- report.skipped.push({ id, reason: 'filtered out by only' });
105
- continue;
106
- }
107
- if (installerSet && !installerSet.has(member.installer)) {
108
- report.skipped.push({ id, reason: `filtered out by installer (${member.installer})` });
109
- continue;
110
- }
111
- // --- lock-integrity gates -> failed (S2/S3 pinning rules) --------------
112
- if (!member.gitlabGroup) {
113
- report.failed.push({
114
- id,
115
- reason: 'member has no gitlabGroup (lock violates per-member group pinning rule S2)',
116
- });
117
- continue;
118
- }
119
- const cloneUrl = member.repoCoordinate && member.repoCoordinate.cloneUrl;
120
- if (!cloneUrl) {
121
- report.failed.push({ id, reason: 'member has no repoCoordinate.cloneUrl (unfinished lock)' });
122
- continue;
123
- }
124
- if (mode === 'pinned' && !member.commitSha) {
125
- report.failed.push({ id, reason: 'commitSha absent in pinned mode (no silent HEAD fallback)' });
126
- continue;
127
- }
128
- // --- dedup by cloneUrl -> skipped --------------------------------------
129
- if (seenUrls.has(cloneUrl)) {
130
- report.skipped.push({
131
- id,
132
- reason: `duplicate cloneUrl (already cloned as "${seenUrls.get(cloneUrl)}")`,
133
- });
134
- continue;
135
- }
136
- seenUrls.set(cloneUrl, id);
137
- const relPath = path.posix.join(workspaceDir, (0, dotpath_1.dotToTreePath)(id));
138
- const absPath = path.join(dest, workspaceDir, (0, dotpath_1.dotToTreePath)(id));
139
- const visibility = member.visibility || 'unknown';
140
- const provenance = member.provenance ?? null;
141
- // --- idempotency -------------------------------------------------------
142
- if (git.exists(absPath)) {
143
- if (!git.isRepo(absPath)) {
144
- report.failed.push({ id, reason: `destination exists and is not a git repo: ${relPath}` });
145
- continue;
146
- }
147
- if (mode === 'pinned') {
148
- let current;
149
- try {
150
- current = git.headSha(absPath);
151
- }
152
- catch (e) {
153
- report.failed.push({ id, reason: `could not read HEAD: ${errMsg(e)}` });
154
- continue;
155
- }
156
- if (current === member.commitSha) {
157
- report.skipped.push({ id, reason: 'already at target sha (idempotent)' });
158
- continue;
159
- }
160
- // Repo present but on the wrong sha: re-pin in place (no re-clone).
161
- try {
162
- git.checkout(absPath, member.commitSha);
163
- }
164
- catch (e) {
165
- report.failed.push({
166
- id,
167
- reason: `commitSha unreachable in existing clone: ${member.commitSha} (${errMsg(e)})`,
168
- });
169
- continue;
170
- }
171
- report.cloned.push({
172
- id,
173
- sha: member.commitSha,
174
- path: relPath,
175
- coordinate: cloneUrl,
176
- visibility,
177
- provenance,
178
- });
179
- continue;
180
- }
181
- // head mode: an existing clone is treated as satisfied (idempotent).
182
- report.skipped.push({ id, reason: 'already cloned (idempotent, head mode)' });
183
- continue;
184
- }
185
- // --- clone -------------------------------------------------------------
186
- try {
187
- git.clone(cloneUrl, absPath);
188
- }
189
- catch (e) {
190
- const kind = errKind(e);
191
- if (kind === 'not-found') {
192
- report['not-found'].push({ id, reason: 'cloneUrl 404 / repo does not exist at coordinate' });
193
- }
194
- else if (kind === 'no-access') {
195
- // Expected multi-tenant outcome, not a hard failure.
196
- report['skipped-no-access'].push({ id, visibility, reason: 'private repo; caller has no access' });
197
- }
198
- else {
199
- report.failed.push({ id, reason: `clone failed: ${errMsg(e)}` });
200
- }
201
- continue;
202
- }
203
- // --- post-clone: pin (pinned) or record HEAD (head) --------------------
204
- let sha;
205
- if (mode === 'pinned') {
206
- try {
207
- git.checkout(absPath, member.commitSha);
208
- sha = member.commitSha;
209
- }
210
- catch (e) {
211
- report.failed.push({ id, reason: `commitSha unreachable: ${member.commitSha} (${errMsg(e)})` });
212
- continue;
213
- }
214
- }
215
- else {
216
- try {
217
- sha = git.headSha(absPath);
218
- }
219
- catch (e) {
220
- report.failed.push({ id, reason: `could not read HEAD after clone: ${errMsg(e)}` });
221
- continue;
222
- }
223
- }
224
- report.cloned.push({ id, sha, path: relPath, coordinate: cloneUrl, visibility, provenance });
225
- }
226
- return report;
227
- }
228
- //# sourceMappingURL=clone.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clone.js","sourceRoot":"","sources":["../src/clone.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * dotToTreePath — the pure identity->path function reused from SUBSET-MANIFEST.
3
- * A gitdot dot-identity ("ist.tda", "microwiseai.skit") maps 1:1 to a tree path
4
- * ("ist/tda", "microwiseai/skit"). Pure, deterministic, no I/O.
5
- *
6
- * @param id declared dot-identity
7
- * @returns POSIX-style relative tree path
8
- */
9
- export declare function dotToTreePath(id: string): string;
10
- //# sourceMappingURL=dotpath.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotpath.d.ts","sourceRoot":"","sources":["../src/dotpath.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAchD"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dotToTreePath = dotToTreePath;
4
- /**
5
- * dotToTreePath — the pure identity->path function reused from SUBSET-MANIFEST.
6
- * A gitdot dot-identity ("ist.tda", "microwiseai.skit") maps 1:1 to a tree path
7
- * ("ist/tda", "microwiseai/skit"). Pure, deterministic, no I/O.
8
- *
9
- * @param id declared dot-identity
10
- * @returns POSIX-style relative tree path
11
- */
12
- function dotToTreePath(id) {
13
- if (typeof id !== 'string' || id.length === 0) {
14
- throw new Error('dotToTreePath: id must be a non-empty string');
15
- }
16
- // Segments are separated by dots. Reject empty segments (".."/leading/trailing dot)
17
- // so a malformed id can never escape the workspace root.
18
- const segments = id.split('.');
19
- if (segments.some((s) => s.length === 0)) {
20
- throw new Error(`dotToTreePath: malformed id "${id}" (empty segment)`);
21
- }
22
- if (segments.some((s) => s === '.' || s === '..' || s.includes('/') || s.includes('\\'))) {
23
- throw new Error(`dotToTreePath: unsafe segment in id "${id}"`);
24
- }
25
- return segments.join('/');
26
- }
27
- //# sourceMappingURL=dotpath.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotpath.js","sourceRoot":"","sources":["../src/dotpath.ts"],"names":[],"mappings":";;AAQA,sCAcC;AAtBD;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,EAAU;IACtC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,oFAAoF;IACpF,yDAAyD;IACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Git runner — the ONLY place that shells out to `git`. Injectable (DI) so the
3
- * clone core can be unit-tested deterministically with an in-memory fake.
4
- *
5
- * clone()/checkout() classify failures into a `.kind`
6
- * ('not-found' | 'no-access' | 'failed') so the core can route each member into
7
- * the correct report bucket without re-parsing git stderr itself.
8
- */
9
- import type { GitRunner, GitErrorKind } from './types';
10
- export declare class GitError extends Error {
11
- kind: GitErrorKind;
12
- constructor(message: string, kind: GitErrorKind);
13
- }
14
- /**
15
- * Map raw git stderr to a structured kind. Heuristic but covers the common
16
- * GitLab/https + ssh failure phrasings.
17
- */
18
- export declare function classifyGitError(stderr: string): GitErrorKind;
19
- export interface GitRunnerOptions {
20
- timeout?: number;
21
- }
22
- export declare function createGitRunner(opts?: GitRunnerOptions): GitRunner;
23
- //# sourceMappingURL=git.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,YAAY,CAAC;gBACP,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;CAKhD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAuB7D;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,gBAAqB,GAAG,SAAS,CAiDtE"}
@@ -1,134 +0,0 @@
1
- "use strict";
2
- /**
3
- * Git runner — the ONLY place that shells out to `git`. Injectable (DI) so the
4
- * clone core can be unit-tested deterministically with an in-memory fake.
5
- *
6
- * clone()/checkout() classify failures into a `.kind`
7
- * ('not-found' | 'no-access' | 'failed') so the core can route each member into
8
- * the correct report bucket without re-parsing git stderr itself.
9
- */
10
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- var desc = Object.getOwnPropertyDescriptor(m, k);
13
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
- desc = { enumerable: true, get: function() { return m[k]; } };
15
- }
16
- Object.defineProperty(o, k2, desc);
17
- }) : (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- o[k2] = m[k];
20
- }));
21
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
- Object.defineProperty(o, "default", { enumerable: true, value: v });
23
- }) : function(o, v) {
24
- o["default"] = v;
25
- });
26
- var __importStar = (this && this.__importStar) || (function () {
27
- var ownKeys = function(o) {
28
- ownKeys = Object.getOwnPropertyNames || function (o) {
29
- var ar = [];
30
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
- return ar;
32
- };
33
- return ownKeys(o);
34
- };
35
- return function (mod) {
36
- if (mod && mod.__esModule) return mod;
37
- var result = {};
38
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
- __setModuleDefault(result, mod);
40
- return result;
41
- };
42
- })();
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- exports.GitError = void 0;
45
- exports.classifyGitError = classifyGitError;
46
- exports.createGitRunner = createGitRunner;
47
- const child_process_1 = require("child_process");
48
- const fs = __importStar(require("fs"));
49
- const path = __importStar(require("path"));
50
- class GitError extends Error {
51
- kind;
52
- constructor(message, kind) {
53
- super(message);
54
- this.name = 'GitError';
55
- this.kind = kind;
56
- }
57
- }
58
- exports.GitError = GitError;
59
- /**
60
- * Map raw git stderr to a structured kind. Heuristic but covers the common
61
- * GitLab/https + ssh failure phrasings.
62
- */
63
- function classifyGitError(stderr) {
64
- const s = String(stderr || '').toLowerCase();
65
- if (s.includes('repository not found') ||
66
- s.includes('not found') ||
67
- s.includes('does not exist') ||
68
- s.includes('404')) {
69
- return 'not-found';
70
- }
71
- if (s.includes('authentication failed') ||
72
- s.includes('access denied') ||
73
- s.includes('permission denied') ||
74
- s.includes('403') ||
75
- s.includes('could not read username') ||
76
- s.includes('could not read password') ||
77
- s.includes('terminal prompts disabled') ||
78
- s.includes('403 forbidden')) {
79
- return 'no-access';
80
- }
81
- return 'failed';
82
- }
83
- function createGitRunner(opts = {}) {
84
- const timeout = opts.timeout || 300000; // 5 min
85
- const run = (args, cwd) => {
86
- try {
87
- return (0, child_process_1.execFileSync)('git', args, {
88
- cwd,
89
- encoding: 'utf8',
90
- stdio: ['ignore', 'pipe', 'pipe'],
91
- timeout,
92
- env: {
93
- ...process.env,
94
- // Never let git block on an interactive credential prompt: a missing
95
- // credential must surface as a deterministic no-access failure.
96
- GIT_TERMINAL_PROMPT: '0',
97
- GCM_INTERACTIVE: 'never',
98
- },
99
- }).trim();
100
- }
101
- catch (e) {
102
- const err = e;
103
- const stderr = err.stderr ? err.stderr.toString() : err.message || String(e);
104
- throw new GitError(stderr.trim(), classifyGitError(stderr));
105
- }
106
- };
107
- return {
108
- exists(absPath) {
109
- return fs.existsSync(absPath);
110
- },
111
- isRepo(absPath) {
112
- if (!fs.existsSync(path.join(absPath, '.git')))
113
- return false;
114
- try {
115
- run(['rev-parse', '--is-inside-work-tree'], absPath);
116
- return true;
117
- }
118
- catch {
119
- return false;
120
- }
121
- },
122
- clone(cloneUrl, absPath) {
123
- fs.mkdirSync(path.dirname(absPath), { recursive: true });
124
- run(['clone', '--quiet', cloneUrl, absPath]);
125
- },
126
- checkout(absPath, sha) {
127
- run(['checkout', '--quiet', sha], absPath);
128
- },
129
- headSha(absPath) {
130
- return run(['rev-parse', 'HEAD'], absPath);
131
- },
132
- };
133
- }
134
- //# sourceMappingURL=git.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * @gitdot/clone-lib — shared resolved-lock resolve + clone library
3
- * (RESOLVED-LOCK-SPEC S2/S3/S4). Dependency-free, deterministic, --json first.
4
- *
5
- * Public surface:
6
- * resolveLock (B1) package-lock.json -> resolved-lock
7
- * resolveFromManifest (B2) snapshot.json manifest -> resolved-lock
8
- * cloneFromLock (S3) resolved-lock -> cloned closure + report
9
- * loadLock / writeLock (S2) filename-agnostic sidecar schema I/O
10
- */
11
- export { cloneFromLock } from './clone';
12
- export { createGitRunner, GitError, classifyGitError } from './git';
13
- export { loadLock, writeLock, validateLock, KNOWN_SIDECARS } from './lock';
14
- export { resolveLock, resolveFromManifest, createGitLabApi } from './resolve/index';
15
- export { dotToTreePath } from './dotpath';
16
- export type { CloneMode, Visibility, Provenance, MemberType, GitErrorKind, RepoCoordinate, Ref, Member, LockSource, ResolvedLock, ClonedEntry, SkippedEntry, NoAccessEntry, BucketEntry, CloneReport, GitRunner, GitLabProject, GitLabTag, PackumentVersion, Packument, GitLabApi, RegistryMap, InstallBlock, Manifest, NpmDependencySpec, SkitManifest, CloneFromLockOptions, ReadInstalledManifest, ResolveLockOptions, ResolveFromManifestOptions, ResolveResult, } from './types';
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG3E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,YAAY,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,GAAG,EACH,MAAM,EACN,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,GACd,MAAM,SAAS,CAAC"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- /**
3
- * @gitdot/clone-lib — shared resolved-lock resolve + clone library
4
- * (RESOLVED-LOCK-SPEC S2/S3/S4). Dependency-free, deterministic, --json first.
5
- *
6
- * Public surface:
7
- * resolveLock (B1) package-lock.json -> resolved-lock
8
- * resolveFromManifest (B2) snapshot.json manifest -> resolved-lock
9
- * cloneFromLock (S3) resolved-lock -> cloned closure + report
10
- * loadLock / writeLock (S2) filename-agnostic sidecar schema I/O
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.dotToTreePath = exports.createGitLabApi = exports.resolveFromManifest = exports.resolveLock = exports.KNOWN_SIDECARS = exports.validateLock = exports.writeLock = exports.loadLock = exports.classifyGitError = exports.GitError = exports.createGitRunner = exports.cloneFromLock = void 0;
14
- // clone (S3)
15
- var clone_1 = require("./clone");
16
- Object.defineProperty(exports, "cloneFromLock", { enumerable: true, get: function () { return clone_1.cloneFromLock; } });
17
- var git_1 = require("./git");
18
- Object.defineProperty(exports, "createGitRunner", { enumerable: true, get: function () { return git_1.createGitRunner; } });
19
- Object.defineProperty(exports, "GitError", { enumerable: true, get: function () { return git_1.GitError; } });
20
- Object.defineProperty(exports, "classifyGitError", { enumerable: true, get: function () { return git_1.classifyGitError; } });
21
- // sidecar schema (S2)
22
- var lock_1 = require("./lock");
23
- Object.defineProperty(exports, "loadLock", { enumerable: true, get: function () { return lock_1.loadLock; } });
24
- Object.defineProperty(exports, "writeLock", { enumerable: true, get: function () { return lock_1.writeLock; } });
25
- Object.defineProperty(exports, "validateLock", { enumerable: true, get: function () { return lock_1.validateLock; } });
26
- Object.defineProperty(exports, "KNOWN_SIDECARS", { enumerable: true, get: function () { return lock_1.KNOWN_SIDECARS; } });
27
- // resolve (S4)
28
- var index_1 = require("./resolve/index");
29
- Object.defineProperty(exports, "resolveLock", { enumerable: true, get: function () { return index_1.resolveLock; } });
30
- Object.defineProperty(exports, "resolveFromManifest", { enumerable: true, get: function () { return index_1.resolveFromManifest; } });
31
- Object.defineProperty(exports, "createGitLabApi", { enumerable: true, get: function () { return index_1.createGitLabApi; } });
32
- // utilities
33
- var dotpath_1 = require("./dotpath");
34
- Object.defineProperty(exports, "dotToTreePath", { enumerable: true, get: function () { return dotpath_1.dotToTreePath; } });
35
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,aAAa;AACb,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AACtB,6BAAoE;AAA3D,sGAAA,eAAe,OAAA;AAAE,+FAAA,QAAQ,OAAA;AAAE,uGAAA,gBAAgB,OAAA;AAEpD,sBAAsB;AACtB,+BAA2E;AAAlE,gGAAA,QAAQ,OAAA;AAAE,iGAAA,SAAS,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,sGAAA,cAAc,OAAA;AAE1D,eAAe;AACf,yCAAoF;AAA3E,oGAAA,WAAW,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAAE,wGAAA,eAAe,OAAA;AAE1D,YAAY;AACZ,qCAA0C;AAAjC,wGAAA,aAAa,OAAA"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Sidecar lock schema (RESOLVED-LOCK-SPEC S2).
3
- *
4
- * skit.lock.json, snapshot.lock.json and glpkg.lock.json are ALL instances of
5
- * the ONE resolved-lock schema — same file shape, differing only in the `source`
6
- * block. Readers load them FILENAME-AGNOSTICALLY: the filename is a label, never
7
- * a schema selector.
8
- */
9
- import type { ResolvedLock } from './types';
10
- /** Distributions known to emit this schema; informational only (not a gate). */
11
- export declare const KNOWN_SIDECARS: readonly string[];
12
- /**
13
- * Validate a parsed object against the resolved-lock schema. Returns it typed.
14
- * @throws on a shape that clone/consumer code cannot safely read.
15
- */
16
- export declare function validateLock(lock: unknown, label?: string): ResolvedLock;
17
- /**
18
- * Load a resolved-lock from disk, filename-agnostically. The same function reads
19
- * skit.lock.json / snapshot.lock.json / glpkg.lock.json — they are one schema.
20
- */
21
- export declare function loadLock(lockPath: string): ResolvedLock;
22
- /** Write a resolved-lock deterministically (2-space indent + trailing newline). */
23
- export declare function writeLock(lockPath: string, lock: ResolvedLock): void;
24
- //# sourceMappingURL=lock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../src/lock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,gFAAgF;AAChF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAI3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,SAAS,GAAG,YAAY,CAexE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAWvD;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAGpE"}