@microwiseai/snapshot 0.3.5
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 +92 -0
- package/dist/commands/current.d.ts +2 -0
- package/dist/commands/current.d.ts.map +1 -0
- package/dist/commands/current.js +32 -0
- package/dist/commands/current.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +211 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/publish.d.ts +11 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +111 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +27 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/gitlab.d.ts +57 -0
- package/dist/lib/gitlab.d.ts.map +1 -0
- package/dist/lib/gitlab.js +268 -0
- package/dist/lib/gitlab.js.map +1 -0
- package/dist/lib/gitlab.test.d.ts +2 -0
- package/dist/lib/gitlab.test.d.ts.map +1 -0
- package/dist/lib/gitlab.test.js +63 -0
- package/dist/lib/gitlab.test.js.map +1 -0
- package/dist/lib/registry.d.ts +3 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +53 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/snapshot.d.ts +10 -0
- package/dist/lib/snapshot.d.ts.map +1 -0
- package/dist/lib/snapshot.js +25 -0
- package/dist/lib/snapshot.js.map +1 -0
- package/dist/lib/types.d.ts +24 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,SAAS,IAAI,cAAc,CAO1C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAe9C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
export function getConfig() {
|
|
5
|
+
const configDir = join(homedir(), '.config', 'ist-snapshot');
|
|
6
|
+
return {
|
|
7
|
+
configDir,
|
|
8
|
+
currentFile: join(configDir, 'current.json'),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function getGitlabToken() {
|
|
12
|
+
// Try gitlab-config first
|
|
13
|
+
try {
|
|
14
|
+
const token = execSync('gitlab-config get', { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
15
|
+
if (token)
|
|
16
|
+
return token;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Ignore
|
|
20
|
+
}
|
|
21
|
+
// Try environment variable
|
|
22
|
+
if (process.env.GITLAB_TOKEN) {
|
|
23
|
+
return process.env.GITLAB_TOKEN;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,UAAU,SAAS;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAE7D,OAAO;QACL,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,0BAA0B;IAC1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzF,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Snapshot } from './types.js';
|
|
2
|
+
export interface GitLabProject {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
path: string;
|
|
6
|
+
description: string;
|
|
7
|
+
web_url: string;
|
|
8
|
+
created_at: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parse snapshot spec into name and version
|
|
12
|
+
* @ist/minimal@0.2.1 → { name: "@ist/minimal", version: "0.2.1" }
|
|
13
|
+
* @ist/minimal → { name: "@ist/minimal", version: undefined }
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseSnapshotSpec(spec: string): {
|
|
16
|
+
name: string;
|
|
17
|
+
version?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Convert snapshot name to generic package name
|
|
21
|
+
* @ist/minimal → ist__minimal
|
|
22
|
+
*/
|
|
23
|
+
export declare function snapshotNameToPackageName(name: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Convert snapshot name to repo name
|
|
26
|
+
* @ist/minimal → snapshot.ist.minimal
|
|
27
|
+
*/
|
|
28
|
+
export declare function snapshotNameToRepoName(nameOrSpec: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Convert repo name back to snapshot name
|
|
31
|
+
* snapshot.ist.minimal → @ist/minimal
|
|
32
|
+
*/
|
|
33
|
+
export declare function repoNameToSnapshotName(repoName: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Fetch snapshot from GitLab generic package registry
|
|
36
|
+
*/
|
|
37
|
+
export declare function fetchSnapshotFromRegistry(snapshotSpec: string): Promise<Snapshot>;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch snapshot - tries registry first, falls back to repo
|
|
40
|
+
*/
|
|
41
|
+
export declare function fetchSnapshotFromRepo(snapshotSpec: string): Promise<Snapshot>;
|
|
42
|
+
/**
|
|
43
|
+
* Find project by name in group
|
|
44
|
+
*/
|
|
45
|
+
export declare function findProjectByName(repoName: string): Promise<GitLabProject | null>;
|
|
46
|
+
/**
|
|
47
|
+
* List all snapshot packages in the group
|
|
48
|
+
*/
|
|
49
|
+
export declare function listSnapshotPackages(): Promise<Array<{
|
|
50
|
+
name: string;
|
|
51
|
+
version: string;
|
|
52
|
+
}>>;
|
|
53
|
+
/**
|
|
54
|
+
* List all snapshot repos in the group (legacy)
|
|
55
|
+
*/
|
|
56
|
+
export declare function listSnapshotRepos(): Promise<GitLabProject[]>;
|
|
57
|
+
//# sourceMappingURL=gitlab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAeD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAWlF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/D;AAyHD;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBvF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoCnF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAkBvF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAyB9F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAkBlE"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { getGitlabToken } from './config.js';
|
|
2
|
+
import { createGunzip } from 'zlib';
|
|
3
|
+
import { Readable } from 'stream';
|
|
4
|
+
import { extract } from 'tar-stream';
|
|
5
|
+
const GITLAB_API = 'https://gitlab.com/api/v4';
|
|
6
|
+
const GROUP_ID = '110834981';
|
|
7
|
+
/**
|
|
8
|
+
* Parse snapshot spec into name and version
|
|
9
|
+
* @ist/minimal@0.2.1 → { name: "@ist/minimal", version: "0.2.1" }
|
|
10
|
+
* @ist/minimal → { name: "@ist/minimal", version: undefined }
|
|
11
|
+
*/
|
|
12
|
+
export function parseSnapshotSpec(spec) {
|
|
13
|
+
// Find last @ that's not the scope prefix
|
|
14
|
+
const atIndex = spec.lastIndexOf('@');
|
|
15
|
+
if (atIndex > 0 && spec[0] === '@') {
|
|
16
|
+
// Has version: @ist/minimal@0.2.1
|
|
17
|
+
return {
|
|
18
|
+
name: spec.slice(0, atIndex),
|
|
19
|
+
version: spec.slice(atIndex + 1),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return { name: spec };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert snapshot name to generic package name
|
|
26
|
+
* @ist/minimal → ist__minimal
|
|
27
|
+
*/
|
|
28
|
+
export function snapshotNameToPackageName(name) {
|
|
29
|
+
// Remove @ and replace / with __
|
|
30
|
+
return name.slice(1).replace('/', '__');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Convert snapshot name to repo name
|
|
34
|
+
* @ist/minimal → snapshot.ist.minimal
|
|
35
|
+
*/
|
|
36
|
+
export function snapshotNameToRepoName(nameOrSpec) {
|
|
37
|
+
const { name } = parseSnapshotSpec(nameOrSpec);
|
|
38
|
+
if (!name.startsWith('@') || !name.includes('/')) {
|
|
39
|
+
throw new Error(`Invalid snapshot name: "${name}". Use @scope/name format (e.g., @ist/minimal)`);
|
|
40
|
+
}
|
|
41
|
+
const cleanName = name.slice(1);
|
|
42
|
+
const [scope, snapshotName] = cleanName.split('/');
|
|
43
|
+
if (!scope || !snapshotName) {
|
|
44
|
+
throw new Error(`Invalid snapshot name: "${name}". Use @scope/name format (e.g., @ist/minimal)`);
|
|
45
|
+
}
|
|
46
|
+
return `snapshot.${scope}.${snapshotName}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Convert repo name back to snapshot name
|
|
50
|
+
* snapshot.ist.minimal → @ist/minimal
|
|
51
|
+
*/
|
|
52
|
+
export function repoNameToSnapshotName(repoName) {
|
|
53
|
+
const withoutPrefix = repoName.replace('snapshot.', '');
|
|
54
|
+
const parts = withoutPrefix.split('.');
|
|
55
|
+
if (parts.length >= 2) {
|
|
56
|
+
return `@${parts[0]}/${parts.slice(1).join('.')}`;
|
|
57
|
+
}
|
|
58
|
+
return repoName;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Find package in group registry
|
|
62
|
+
*/
|
|
63
|
+
async function findPackage(packageName, version) {
|
|
64
|
+
const token = getGitlabToken();
|
|
65
|
+
if (!token) {
|
|
66
|
+
throw new Error('GitLab token not found');
|
|
67
|
+
}
|
|
68
|
+
const url = `${GITLAB_API}/groups/${GROUP_ID}/packages?package_name=${encodeURIComponent(packageName)}&package_type=generic&per_page=50`;
|
|
69
|
+
const response = await fetch(url, {
|
|
70
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new Error(`GitLab API error: ${response.status}`);
|
|
74
|
+
}
|
|
75
|
+
const packages = await response.json();
|
|
76
|
+
if (version) {
|
|
77
|
+
// Find exact version
|
|
78
|
+
return packages.find(p => p.name === packageName && p.version === version) || null;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Find latest version (first in list, sorted by created_at desc)
|
|
82
|
+
return packages.find(p => p.name === packageName) || null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get package file info
|
|
87
|
+
*/
|
|
88
|
+
async function getPackageFile(projectId, packageId) {
|
|
89
|
+
const token = getGitlabToken();
|
|
90
|
+
if (!token) {
|
|
91
|
+
throw new Error('GitLab token not found');
|
|
92
|
+
}
|
|
93
|
+
const url = `${GITLAB_API}/projects/${projectId}/packages/${packageId}/package_files`;
|
|
94
|
+
const response = await fetch(url, {
|
|
95
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
96
|
+
});
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const files = await response.json();
|
|
101
|
+
return files[0] || null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Download and extract snapshot.json from tarball
|
|
105
|
+
*/
|
|
106
|
+
async function downloadAndExtractSnapshot(projectId, packageName, version, fileName) {
|
|
107
|
+
const token = getGitlabToken();
|
|
108
|
+
if (!token) {
|
|
109
|
+
throw new Error('GitLab token not found');
|
|
110
|
+
}
|
|
111
|
+
const url = `${GITLAB_API}/projects/${projectId}/packages/generic/${packageName}/${version}/${fileName}`;
|
|
112
|
+
const response = await fetch(url, {
|
|
113
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error(`Failed to download package: ${response.status}`);
|
|
117
|
+
}
|
|
118
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
119
|
+
return new Promise((resolve, reject) => {
|
|
120
|
+
const extractor = extract();
|
|
121
|
+
let snapshotJson = null;
|
|
122
|
+
extractor.on('entry', (header, stream, next) => {
|
|
123
|
+
const chunks = [];
|
|
124
|
+
stream.on('data', (chunk) => chunks.push(chunk));
|
|
125
|
+
stream.on('end', () => {
|
|
126
|
+
if (header.name === 'snapshot.json' || header.name.endsWith('/snapshot.json')) {
|
|
127
|
+
try {
|
|
128
|
+
const content = Buffer.concat(chunks).toString('utf-8');
|
|
129
|
+
snapshotJson = JSON.parse(content);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
reject(new Error('Failed to parse snapshot.json'));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
next();
|
|
136
|
+
});
|
|
137
|
+
stream.on('error', reject);
|
|
138
|
+
stream.resume();
|
|
139
|
+
});
|
|
140
|
+
extractor.on('finish', () => {
|
|
141
|
+
if (snapshotJson) {
|
|
142
|
+
resolve(snapshotJson);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
reject(new Error('snapshot.json not found in package'));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
extractor.on('error', reject);
|
|
149
|
+
// Pipe: buffer → gunzip → tar extract
|
|
150
|
+
const readable = Readable.from(buffer);
|
|
151
|
+
readable.pipe(createGunzip()).pipe(extractor);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Fetch snapshot from GitLab generic package registry
|
|
156
|
+
*/
|
|
157
|
+
export async function fetchSnapshotFromRegistry(snapshotSpec) {
|
|
158
|
+
const { name, version } = parseSnapshotSpec(snapshotSpec);
|
|
159
|
+
const packageName = snapshotNameToPackageName(name);
|
|
160
|
+
// Find package
|
|
161
|
+
const pkg = await findPackage(packageName, version);
|
|
162
|
+
if (!pkg) {
|
|
163
|
+
throw new Error(`Snapshot package not found: ${name}${version ? `@${version}` : ''}`);
|
|
164
|
+
}
|
|
165
|
+
// Get package file
|
|
166
|
+
const file = await getPackageFile(pkg.project_id, pkg.id);
|
|
167
|
+
if (!file) {
|
|
168
|
+
throw new Error(`Package file not found for: ${name}@${pkg.version}`);
|
|
169
|
+
}
|
|
170
|
+
// Download and extract
|
|
171
|
+
return downloadAndExtractSnapshot(pkg.project_id, packageName, pkg.version, file.file_name);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Fetch snapshot - tries registry first, falls back to repo
|
|
175
|
+
*/
|
|
176
|
+
export async function fetchSnapshotFromRepo(snapshotSpec) {
|
|
177
|
+
// Try generic registry first
|
|
178
|
+
try {
|
|
179
|
+
return await fetchSnapshotFromRegistry(snapshotSpec);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Fall back to repo (for backwards compatibility)
|
|
183
|
+
const token = getGitlabToken();
|
|
184
|
+
if (!token) {
|
|
185
|
+
throw new Error('GitLab token not found');
|
|
186
|
+
}
|
|
187
|
+
const { name, version } = parseSnapshotSpec(snapshotSpec);
|
|
188
|
+
const repoName = snapshotNameToRepoName(name);
|
|
189
|
+
// Find the project
|
|
190
|
+
const project = await findProjectByName(repoName);
|
|
191
|
+
if (!project) {
|
|
192
|
+
throw new Error(`Snapshot not found: ${name}${version ? `@${version}` : ''}`);
|
|
193
|
+
}
|
|
194
|
+
// Try to fetch from repo
|
|
195
|
+
const refs = version ? [`v${version}`, version] : ['main', 'master'];
|
|
196
|
+
for (const ref of refs) {
|
|
197
|
+
const url = `${GITLAB_API}/projects/${project.id}/repository/files/snapshot.json/raw?ref=${ref}`;
|
|
198
|
+
const response = await fetch(url, {
|
|
199
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
200
|
+
});
|
|
201
|
+
if (response.ok) {
|
|
202
|
+
return await response.json();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
throw new Error(`snapshot.json not found in ${repoName}${version ? ` at version ${version}` : ''}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Find project by name in group
|
|
210
|
+
*/
|
|
211
|
+
export async function findProjectByName(repoName) {
|
|
212
|
+
const token = getGitlabToken();
|
|
213
|
+
if (!token) {
|
|
214
|
+
throw new Error('GitLab token not found');
|
|
215
|
+
}
|
|
216
|
+
const url = `${GITLAB_API}/groups/${GROUP_ID}/projects?search=${encodeURIComponent(repoName)}&per_page=20`;
|
|
217
|
+
const response = await fetch(url, {
|
|
218
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
219
|
+
});
|
|
220
|
+
if (!response.ok) {
|
|
221
|
+
throw new Error(`GitLab API error: ${response.status}`);
|
|
222
|
+
}
|
|
223
|
+
const projects = await response.json();
|
|
224
|
+
return projects.find(p => p.path === repoName || p.name === repoName) || null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* List all snapshot packages in the group
|
|
228
|
+
*/
|
|
229
|
+
export async function listSnapshotPackages() {
|
|
230
|
+
const token = getGitlabToken();
|
|
231
|
+
if (!token) {
|
|
232
|
+
throw new Error('GitLab token not found');
|
|
233
|
+
}
|
|
234
|
+
const url = `${GITLAB_API}/groups/${GROUP_ID}/packages?package_type=generic&per_page=100`;
|
|
235
|
+
const response = await fetch(url, {
|
|
236
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
237
|
+
});
|
|
238
|
+
if (!response.ok) {
|
|
239
|
+
throw new Error(`GitLab API error: ${response.status}`);
|
|
240
|
+
}
|
|
241
|
+
const packages = await response.json();
|
|
242
|
+
// Filter to snapshot packages (ist__*) and convert names back
|
|
243
|
+
return packages
|
|
244
|
+
.filter(p => p.name.includes('__'))
|
|
245
|
+
.map(p => ({
|
|
246
|
+
name: '@' + p.name.replace('__', '/'),
|
|
247
|
+
version: p.version,
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* List all snapshot repos in the group (legacy)
|
|
252
|
+
*/
|
|
253
|
+
export async function listSnapshotRepos() {
|
|
254
|
+
const token = getGitlabToken();
|
|
255
|
+
if (!token) {
|
|
256
|
+
throw new Error('GitLab token not found');
|
|
257
|
+
}
|
|
258
|
+
const url = `${GITLAB_API}/groups/${GROUP_ID}/projects?search=snapshot.&per_page=100`;
|
|
259
|
+
const response = await fetch(url, {
|
|
260
|
+
headers: { 'PRIVATE-TOKEN': token },
|
|
261
|
+
});
|
|
262
|
+
if (!response.ok) {
|
|
263
|
+
throw new Error(`GitLab API error: ${response.status}`);
|
|
264
|
+
}
|
|
265
|
+
const projects = await response.json();
|
|
266
|
+
return projects.filter(p => p.path.startsWith('snapshot.') || p.name.startsWith('snapshot.'));
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=gitlab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/lib/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab.test.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseSnapshotSpec, snapshotNameToPackageName, snapshotNameToRepoName, repoNameToSnapshotName, } from './gitlab.js';
|
|
3
|
+
describe('parseSnapshotSpec', () => {
|
|
4
|
+
it('should parse name with version', () => {
|
|
5
|
+
const result = parseSnapshotSpec('@ist/minimal@0.2.1');
|
|
6
|
+
expect(result).toEqual({ name: '@ist/minimal', version: '0.2.1' });
|
|
7
|
+
});
|
|
8
|
+
it('should parse name without version', () => {
|
|
9
|
+
const result = parseSnapshotSpec('@ist/minimal');
|
|
10
|
+
expect(result).toEqual({ name: '@ist/minimal' });
|
|
11
|
+
});
|
|
12
|
+
it('should handle complex version strings', () => {
|
|
13
|
+
const result = parseSnapshotSpec('@ist/core@1.0.0-beta.1');
|
|
14
|
+
expect(result).toEqual({ name: '@ist/core', version: '1.0.0-beta.1' });
|
|
15
|
+
});
|
|
16
|
+
it('should handle scope with multiple parts in name', () => {
|
|
17
|
+
const result = parseSnapshotSpec('@ist/my-snapshot@2.0.0');
|
|
18
|
+
expect(result).toEqual({ name: '@ist/my-snapshot', version: '2.0.0' });
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('snapshotNameToPackageName', () => {
|
|
22
|
+
it('should convert @ist/minimal to ist__minimal', () => {
|
|
23
|
+
expect(snapshotNameToPackageName('@ist/minimal')).toBe('ist__minimal');
|
|
24
|
+
});
|
|
25
|
+
it('should convert @ist/core to ist__core', () => {
|
|
26
|
+
expect(snapshotNameToPackageName('@ist/core')).toBe('ist__core');
|
|
27
|
+
});
|
|
28
|
+
it('should handle hyphenated names', () => {
|
|
29
|
+
expect(snapshotNameToPackageName('@ist/my-package')).toBe('ist__my-package');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('snapshotNameToRepoName', () => {
|
|
33
|
+
it('should convert @ist/minimal to snapshot.ist.minimal', () => {
|
|
34
|
+
expect(snapshotNameToRepoName('@ist/minimal')).toBe('snapshot.ist.minimal');
|
|
35
|
+
});
|
|
36
|
+
it('should convert @ist/core to snapshot.ist.core', () => {
|
|
37
|
+
expect(snapshotNameToRepoName('@ist/core')).toBe('snapshot.ist.core');
|
|
38
|
+
});
|
|
39
|
+
it('should handle spec with version', () => {
|
|
40
|
+
expect(snapshotNameToRepoName('@ist/minimal@0.2.1')).toBe('snapshot.ist.minimal');
|
|
41
|
+
});
|
|
42
|
+
it('should throw for invalid format (no @)', () => {
|
|
43
|
+
expect(() => snapshotNameToRepoName('ist/minimal')).toThrow('Invalid snapshot name');
|
|
44
|
+
});
|
|
45
|
+
it('should throw for invalid format (no /)', () => {
|
|
46
|
+
expect(() => snapshotNameToRepoName('@istminimal')).toThrow('Invalid snapshot name');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('repoNameToSnapshotName', () => {
|
|
50
|
+
it('should convert snapshot.ist.minimal to @ist/minimal', () => {
|
|
51
|
+
expect(repoNameToSnapshotName('snapshot.ist.minimal')).toBe('@ist/minimal');
|
|
52
|
+
});
|
|
53
|
+
it('should convert snapshot.ist.core to @ist/core', () => {
|
|
54
|
+
expect(repoNameToSnapshotName('snapshot.ist.core')).toBe('@ist/core');
|
|
55
|
+
});
|
|
56
|
+
it('should handle names with multiple dots after scope', () => {
|
|
57
|
+
expect(repoNameToSnapshotName('snapshot.ist.my.package')).toBe('@ist/my.package');
|
|
58
|
+
});
|
|
59
|
+
it('should return original if not matching format', () => {
|
|
60
|
+
expect(repoNameToSnapshotName('someother')).toBe('someother');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=gitlab.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab.test.js","sourceRoot":"","sources":["../../src/lib/gitlab.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAuBA,wBAAgB,UAAU,IAAI,OAAO,CAuCpC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { writeFileSync, readFileSync, existsSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getGitlabToken } from './config.js';
|
|
5
|
+
const NPMRC_PATH = join(homedir(), '.npmrc');
|
|
6
|
+
const REGISTRY_CONFIGS = [
|
|
7
|
+
{ scope: '@ist', groupId: '110834981' },
|
|
8
|
+
{ scope: '@glpkg', groupId: '117429707' },
|
|
9
|
+
{ scope: '@anthropic', groupId: '110834981' },
|
|
10
|
+
{ scope: '@anthropic-ist', groupId: '110834981' },
|
|
11
|
+
{ scope: '@skit', groupId: '110834981' },
|
|
12
|
+
{ scope: '@skit-marketplace', groupId: '110834981' },
|
|
13
|
+
{ scope: '@pevo', groupId: '110834981' },
|
|
14
|
+
{ scope: '@microwiseai', groupId: '110834981' },
|
|
15
|
+
];
|
|
16
|
+
export function setupNpmrc() {
|
|
17
|
+
const token = getGitlabToken();
|
|
18
|
+
if (!token) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
// Read existing .npmrc if exists
|
|
22
|
+
let existingContent = '';
|
|
23
|
+
if (existsSync(NPMRC_PATH)) {
|
|
24
|
+
existingContent = readFileSync(NPMRC_PATH, 'utf-8');
|
|
25
|
+
}
|
|
26
|
+
// Build new registry entries
|
|
27
|
+
const newEntries = [];
|
|
28
|
+
for (const config of REGISTRY_CONFIGS) {
|
|
29
|
+
const registryUrl = `https://gitlab.com/api/v4/groups/${config.groupId}/-/packages/npm/`;
|
|
30
|
+
const scopeEntry = `${config.scope}:registry=${registryUrl}`;
|
|
31
|
+
const tokenEntry = `//${registryUrl.replace('https://', '')}:_authToken=\${GITLAB_TOKEN}`;
|
|
32
|
+
// Only add if not already present
|
|
33
|
+
if (!existingContent.includes(scopeEntry)) {
|
|
34
|
+
newEntries.push(scopeEntry);
|
|
35
|
+
}
|
|
36
|
+
if (!existingContent.includes(`:_authToken=`) || !existingContent.includes(registryUrl.replace('https://', ''))) {
|
|
37
|
+
// Add token entry for this registry
|
|
38
|
+
const tokenLine = `//gitlab.com/api/v4/groups/${config.groupId}/-/packages/npm/:_authToken=${token}`;
|
|
39
|
+
if (!existingContent.includes(tokenLine)) {
|
|
40
|
+
newEntries.push(tokenLine);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (newEntries.length > 0) {
|
|
45
|
+
const finalContent = existingContent.trim() + '\n' + newEntries.join('\n') + '\n';
|
|
46
|
+
writeFileSync(NPMRC_PATH, finalContent);
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
export function getRegistryScopes() {
|
|
51
|
+
return REGISTRY_CONFIGS.map(c => c.scope);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { InstalledSnapshot } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get currently installed snapshot info
|
|
4
|
+
*/
|
|
5
|
+
export declare function getCurrentSnapshot(): InstalledSnapshot | null;
|
|
6
|
+
/**
|
|
7
|
+
* Save current snapshot info
|
|
8
|
+
*/
|
|
9
|
+
export declare function saveCurrentSnapshot(snapshot: InstalledSnapshot): void;
|
|
10
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/lib/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,GAAG,IAAI,CAS7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CASrE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { getConfig } from './config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get currently installed snapshot info
|
|
5
|
+
*/
|
|
6
|
+
export function getCurrentSnapshot() {
|
|
7
|
+
const config = getConfig();
|
|
8
|
+
if (!existsSync(config.currentFile)) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const content = readFileSync(config.currentFile, 'utf-8');
|
|
12
|
+
return JSON.parse(content);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Save current snapshot info
|
|
16
|
+
*/
|
|
17
|
+
export function saveCurrentSnapshot(snapshot) {
|
|
18
|
+
const config = getConfig();
|
|
19
|
+
// Ensure config directory exists
|
|
20
|
+
if (!existsSync(config.configDir)) {
|
|
21
|
+
mkdirSync(config.configDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
writeFileSync(config.currentFile, JSON.stringify(snapshot, null, 2));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/lib/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA2B;IAC7D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,iCAAiC;IACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface RegistryConfig {
|
|
2
|
+
group: string;
|
|
3
|
+
}
|
|
4
|
+
export interface Snapshot {
|
|
5
|
+
name: string;
|
|
6
|
+
version: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
extends?: string;
|
|
9
|
+
registry?: Record<string, RegistryConfig>;
|
|
10
|
+
packages?: Record<string, string>;
|
|
11
|
+
skits?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export interface InstalledSnapshot {
|
|
14
|
+
name: string;
|
|
15
|
+
version: string;
|
|
16
|
+
installedAt: string;
|
|
17
|
+
packages: string[];
|
|
18
|
+
skits?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface SnapshotConfig {
|
|
21
|
+
configDir: string;
|
|
22
|
+
currentFile: string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IAEvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
|