@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.
Files changed (46) hide show
  1. package/README.md +92 -0
  2. package/dist/commands/current.d.ts +2 -0
  3. package/dist/commands/current.d.ts.map +1 -0
  4. package/dist/commands/current.js +32 -0
  5. package/dist/commands/current.js.map +1 -0
  6. package/dist/commands/install.d.ts +2 -0
  7. package/dist/commands/install.d.ts.map +1 -0
  8. package/dist/commands/install.js +211 -0
  9. package/dist/commands/install.js.map +1 -0
  10. package/dist/commands/list.d.ts +2 -0
  11. package/dist/commands/list.d.ts.map +1 -0
  12. package/dist/commands/list.js +45 -0
  13. package/dist/commands/list.js.map +1 -0
  14. package/dist/commands/publish.d.ts +11 -0
  15. package/dist/commands/publish.d.ts.map +1 -0
  16. package/dist/commands/publish.js +111 -0
  17. package/dist/commands/publish.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +62 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/lib/config.d.ts +4 -0
  23. package/dist/lib/config.d.ts.map +1 -0
  24. package/dist/lib/config.js +27 -0
  25. package/dist/lib/config.js.map +1 -0
  26. package/dist/lib/gitlab.d.ts +57 -0
  27. package/dist/lib/gitlab.d.ts.map +1 -0
  28. package/dist/lib/gitlab.js +268 -0
  29. package/dist/lib/gitlab.js.map +1 -0
  30. package/dist/lib/gitlab.test.d.ts +2 -0
  31. package/dist/lib/gitlab.test.d.ts.map +1 -0
  32. package/dist/lib/gitlab.test.js +63 -0
  33. package/dist/lib/gitlab.test.js.map +1 -0
  34. package/dist/lib/registry.d.ts +3 -0
  35. package/dist/lib/registry.d.ts.map +1 -0
  36. package/dist/lib/registry.js +53 -0
  37. package/dist/lib/registry.js.map +1 -0
  38. package/dist/lib/snapshot.d.ts +10 -0
  39. package/dist/lib/snapshot.d.ts.map +1 -0
  40. package/dist/lib/snapshot.js +25 -0
  41. package/dist/lib/snapshot.js.map +1 -0
  42. package/dist/lib/types.d.ts +24 -0
  43. package/dist/lib/types.d.ts.map +1 -0
  44. package/dist/lib/types.js +2 -0
  45. package/dist/lib/types.js.map +1 -0
  46. package/package.json +45 -0
package/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # @microwiseai/snapshot
2
+
3
+ IST Snapshot Installer - CLI for installing packages from GitLab snapshot repos.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g @microwiseai/snapshot
9
+ ```
10
+
11
+ ## Requirements
12
+
13
+ - Node.js >= 18.0.0
14
+ - GitLab API token (set as `GITLAB_TOKEN` environment variable)
15
+
16
+ ## Usage
17
+
18
+ ### List available snapshots
19
+
20
+ ```bash
21
+ snapshot list
22
+ ```
23
+
24
+ ### Install a snapshot
25
+
26
+ ```bash
27
+ # Install by name
28
+ snapshot install @ist/minimal
29
+
30
+ # Install specific version
31
+ snapshot install @ist/minimal@0.2.1
32
+
33
+ # Short form (defaults to @ist scope)
34
+ snapshot install minimal
35
+ ```
36
+
37
+ ### Show current snapshot
38
+
39
+ ```bash
40
+ snapshot current
41
+ ```
42
+
43
+ ### Publish a snapshot
44
+
45
+ ```bash
46
+ # Publish current directory's snapshot.json
47
+ snapshot publish
48
+
49
+ # Bump version before publishing
50
+ snapshot publish --bump patch # 0.1.0 -> 0.1.1
51
+ snapshot publish --bump minor # 0.1.0 -> 0.2.0
52
+ snapshot publish --bump major # 0.1.0 -> 1.0.0
53
+
54
+ # Dry run (show what would be published)
55
+ snapshot publish --dry-run
56
+ ```
57
+
58
+ ## Configuration
59
+
60
+ Set your GitLab token:
61
+
62
+ ```bash
63
+ export GITLAB_TOKEN=your_gitlab_token
64
+ ```
65
+
66
+ ## Snapshot Format
67
+
68
+ Snapshots are stored in GitLab repos with the naming convention:
69
+ - `@ist/minimal` → `snapshot.ist.minimal`
70
+ - `@ist/core` → `snapshot.ist.core`
71
+
72
+ Each snapshot repo contains a `snapshot.json` with package definitions.
73
+
74
+ ## Development
75
+
76
+ ```bash
77
+ # Install dependencies
78
+ npm install
79
+
80
+ # Build
81
+ npm run build
82
+
83
+ # Run tests
84
+ npm test
85
+
86
+ # Lint
87
+ npm run lint
88
+ ```
89
+
90
+ ## License
91
+
92
+ MIT
@@ -0,0 +1,2 @@
1
+ export declare function currentCommand(): Promise<void>;
2
+ //# sourceMappingURL=current.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../src/commands/current.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCpD"}
@@ -0,0 +1,32 @@
1
+ import chalk from 'chalk';
2
+ import { getCurrentSnapshot } from '../lib/snapshot.js';
3
+ export async function currentCommand() {
4
+ console.log(chalk.blue.bold(`
5
+ ╔══════════════════════════════════════════════════════════════╗
6
+ ║ Current Snapshot ║
7
+ ╚══════════════════════════════════════════════════════════════╝
8
+ `));
9
+ const current = getCurrentSnapshot();
10
+ if (!current) {
11
+ console.log(chalk.yellow('No snapshot currently installed.'));
12
+ console.log(chalk.gray('Use: snapshot install <name> to install a snapshot'));
13
+ return;
14
+ }
15
+ console.log(chalk.cyan(`Snapshot: ${current.name} v${current.version}`));
16
+ console.log(chalk.gray(`Installed: ${new Date(current.installedAt).toLocaleString()}`));
17
+ console.log('');
18
+ if (current.packages && current.packages.length > 0) {
19
+ console.log(chalk.gray('Installed packages:'));
20
+ for (const pkg of current.packages) {
21
+ console.log(chalk.green(` ✓ ${pkg}`));
22
+ }
23
+ }
24
+ if (current.skits && current.skits.length > 0) {
25
+ console.log('');
26
+ console.log(chalk.gray('Installed skits:'));
27
+ for (const skit of current.skits) {
28
+ console.log(chalk.green(` ✓ ${skit}`));
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=current.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current.js","sourceRoot":"","sources":["../../src/commands/current.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;CAI7B,CAAC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IAErC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installCommand(name: string): Promise<void>;
2
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAuIA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GhE"}
@@ -0,0 +1,211 @@
1
+ import chalk from 'chalk';
2
+ import { execSync } from 'child_process';
3
+ import { fetchSnapshotFromRepo, snapshotNameToRepoName } from '../lib/gitlab.js';
4
+ import { saveCurrentSnapshot } from '../lib/snapshot.js';
5
+ import { getGitlabToken } from '../lib/config.js';
6
+ async function installSnapshot(snapshot, depth = 0) {
7
+ const indent = ' '.repeat(depth);
8
+ const result = {
9
+ packages: [],
10
+ skits: [],
11
+ failedPackages: [],
12
+ failedSkits: [],
13
+ };
14
+ // Handle extends - install base snapshot first
15
+ if (snapshot.extends) {
16
+ console.log('');
17
+ console.log(chalk.cyan(`${indent}► Extends: ${snapshot.extends}`));
18
+ try {
19
+ const baseSnapshot = await fetchSnapshotFromRepo(snapshot.extends);
20
+ console.log(chalk.gray(`${indent} Installing base snapshot...`));
21
+ const baseResult = await installSnapshot(baseSnapshot, depth + 1);
22
+ result.packages.push(...baseResult.packages);
23
+ result.skits.push(...baseResult.skits);
24
+ result.failedPackages.push(...baseResult.failedPackages);
25
+ result.failedSkits.push(...baseResult.failedSkits);
26
+ }
27
+ catch (error) {
28
+ const errMsg = error instanceof Error ? error.message : String(error);
29
+ console.log(chalk.red(`${indent} Failed to load base: ${errMsg}`));
30
+ }
31
+ }
32
+ // Configure scopes from registry info
33
+ if (snapshot.registry) {
34
+ for (const [scope, config] of Object.entries(snapshot.registry)) {
35
+ const scopeName = scope.startsWith('@') ? scope : `@${scope}`;
36
+ try {
37
+ execSync(`gitlab-config scope set ${scopeName} ${config.group}`, {
38
+ stdio: 'pipe',
39
+ encoding: 'utf-8',
40
+ });
41
+ }
42
+ catch {
43
+ // Ignore scope config errors
44
+ }
45
+ }
46
+ }
47
+ const packages = snapshot.packages || {};
48
+ const skits = snapshot.skits || {};
49
+ const packageEntries = Object.entries(packages);
50
+ const skitEntries = Object.entries(skits);
51
+ // Install npm packages
52
+ if (packageEntries.length > 0) {
53
+ const total = packageEntries.length;
54
+ console.log('');
55
+ console.log(chalk.yellow(`${indent}=== ${snapshot.name}: ${total} packages ===`));
56
+ for (let i = 0; i < packageEntries.length; i++) {
57
+ const [name, version] = packageEntries[i];
58
+ const pkgSpec = `${name}@${version}`;
59
+ const progress = `[${i + 1}/${total}]`;
60
+ process.stdout.write(`${indent}${chalk.blue(progress)} ${pkgSpec}...`);
61
+ try {
62
+ execSync(`gitlab-install add -g ${pkgSpec}`, {
63
+ stdio: 'pipe',
64
+ encoding: 'utf-8',
65
+ });
66
+ console.log(chalk.green(' ✓'));
67
+ result.packages.push(pkgSpec);
68
+ }
69
+ catch {
70
+ console.log(chalk.red(' ✗'));
71
+ result.failedPackages.push(pkgSpec);
72
+ }
73
+ }
74
+ }
75
+ // Install skits
76
+ if (skitEntries.length > 0) {
77
+ const total = skitEntries.length;
78
+ console.log('');
79
+ console.log(chalk.yellow(`${indent}=== ${snapshot.name}: ${total} skits ===`));
80
+ // Check if skit command exists
81
+ let skitAvailable = true;
82
+ try {
83
+ execSync('which skit', { stdio: 'pipe' });
84
+ }
85
+ catch {
86
+ console.log(chalk.red(`${indent}skit command not found.`));
87
+ skitAvailable = false;
88
+ result.failedSkits.push(...skitEntries.map(([n, v]) => `${n}@${v}`));
89
+ }
90
+ if (skitAvailable) {
91
+ for (let i = 0; i < skitEntries.length; i++) {
92
+ const [name, version] = skitEntries[i];
93
+ const skitSpec = `${name}@${version}`;
94
+ const progress = `[${i + 1}/${total}]`;
95
+ process.stdout.write(`${indent}${chalk.blue(progress)} ${skitSpec}...`);
96
+ try {
97
+ execSync(`skit add ${skitSpec}`, {
98
+ stdio: 'pipe',
99
+ encoding: 'utf-8',
100
+ });
101
+ console.log(chalk.green(' ✓'));
102
+ result.skits.push(skitSpec);
103
+ }
104
+ catch {
105
+ console.log(chalk.red(' ✗'));
106
+ result.failedSkits.push(skitSpec);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ export async function installCommand(name) {
114
+ console.log(chalk.blue.bold(`
115
+ ╔══════════════════════════════════════════════════════════════╗
116
+ ║ Snapshot Installer ║
117
+ ╚══════════════════════════════════════════════════════════════╝
118
+ `));
119
+ // Validate name
120
+ let repoName;
121
+ try {
122
+ repoName = snapshotNameToRepoName(name);
123
+ }
124
+ catch (error) {
125
+ const errMsg = error instanceof Error ? error.message : String(error);
126
+ console.log(chalk.red(`Error: ${errMsg}`));
127
+ console.log('');
128
+ console.log(chalk.gray('Examples:'));
129
+ console.log(chalk.cyan(' snapshot install @ist/minimal'));
130
+ console.log(chalk.cyan(' snapshot install @ist/full'));
131
+ process.exit(1);
132
+ }
133
+ console.log(chalk.gray(`Snapshot: ${name}`));
134
+ console.log(chalk.gray(`Repo: ${repoName}`));
135
+ // Check GitLab token
136
+ const token = getGitlabToken();
137
+ if (!token) {
138
+ console.log(chalk.red('Error: GitLab token not found.'));
139
+ console.log(chalk.yellow('Run: gitlab-config save <token>'));
140
+ process.exit(1);
141
+ }
142
+ console.log(chalk.green('✓') + ' GitLab token found');
143
+ // Check gitlab-install (cross-platform)
144
+ try {
145
+ const whichCmd = process.platform === 'win32' ? 'where gitlab-install' : 'which gitlab-install';
146
+ execSync(whichCmd, { stdio: 'pipe' });
147
+ }
148
+ catch {
149
+ console.log(chalk.red('Error: gitlab-install not found.'));
150
+ console.log(chalk.yellow('Install: npm install -g @glpkg/installer'));
151
+ process.exit(1);
152
+ }
153
+ console.log(chalk.green('✓') + ' gitlab-install available');
154
+ // Fetch snapshot
155
+ console.log(chalk.gray('Fetching snapshot from GitLab...'));
156
+ let snapshot;
157
+ try {
158
+ snapshot = await fetchSnapshotFromRepo(name);
159
+ }
160
+ catch (error) {
161
+ const errMsg = error instanceof Error ? error.message : String(error);
162
+ console.log(chalk.red(`Error: ${errMsg}`));
163
+ console.log(chalk.yellow('Check available snapshots: snapshot list'));
164
+ process.exit(1);
165
+ }
166
+ console.log(chalk.green('✓') + ` Snapshot: ${snapshot.name} v${snapshot.version}`);
167
+ if (snapshot.description) {
168
+ console.log(chalk.gray(` ${snapshot.description}`));
169
+ }
170
+ // Install (handles extends recursively)
171
+ const result = await installSnapshot(snapshot, 0);
172
+ // Summary
173
+ console.log('');
174
+ console.log(chalk.yellow('═══════════════════════════════════'));
175
+ console.log(chalk.yellow(' Final Summary '));
176
+ console.log(chalk.yellow('═══════════════════════════════════'));
177
+ const totalPkgs = result.packages.length + result.failedPackages.length;
178
+ const totalSkits = result.skits.length + result.failedSkits.length;
179
+ if (totalPkgs > 0) {
180
+ console.log(`Packages: ${chalk.green(result.packages.length)}/${totalPkgs}`);
181
+ }
182
+ if (totalSkits > 0) {
183
+ console.log(`Skits: ${chalk.green(result.skits.length)}/${totalSkits}`);
184
+ }
185
+ if (result.failedPackages.length > 0 || result.failedSkits.length > 0) {
186
+ console.log('');
187
+ console.log(chalk.red('Failed:'));
188
+ for (const pkg of result.failedPackages) {
189
+ console.log(chalk.red(` ✗ ${pkg}`));
190
+ }
191
+ for (const skit of result.failedSkits) {
192
+ console.log(chalk.red(` ✗ ${skit}`));
193
+ }
194
+ }
195
+ // Save
196
+ if (result.packages.length > 0 || result.skits.length > 0) {
197
+ saveCurrentSnapshot({
198
+ name: snapshot.name,
199
+ version: snapshot.version,
200
+ installedAt: new Date().toISOString(),
201
+ packages: result.packages,
202
+ skits: result.skits,
203
+ });
204
+ console.log('');
205
+ console.log(chalk.green('✓') + ' Snapshot info saved');
206
+ }
207
+ if (result.failedPackages.length > 0 || result.failedSkits.length > 0) {
208
+ process.exit(1);
209
+ }
210
+ }
211
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function listCommand(): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CjD"}
@@ -0,0 +1,45 @@
1
+ import chalk from 'chalk';
2
+ import { listSnapshotPackages } from '../lib/gitlab.js';
3
+ export async function listCommand() {
4
+ console.log(chalk.blue.bold(`
5
+ ╔══════════════════════════════════════════════════════════════╗
6
+ ║ Available Snapshots ║
7
+ ╚══════════════════════════════════════════════════════════════╝
8
+ `));
9
+ console.log(chalk.gray('Querying GitLab registry...'));
10
+ console.log('');
11
+ try {
12
+ const packages = await listSnapshotPackages();
13
+ if (packages.length === 0) {
14
+ console.log(chalk.yellow('No snapshots found in registry.'));
15
+ return;
16
+ }
17
+ // Group by name to show latest versions
18
+ const byName = new Map();
19
+ for (const pkg of packages) {
20
+ const versions = byName.get(pkg.name) || [];
21
+ versions.push(pkg.version);
22
+ byName.set(pkg.name, versions);
23
+ }
24
+ console.log(chalk.gray(`Found ${byName.size} snapshot(s):`));
25
+ console.log('');
26
+ for (const [name, versions] of byName) {
27
+ const latest = versions[0]; // First is latest (sorted by created_at desc)
28
+ console.log(chalk.cyan(` ${name}@${latest}`));
29
+ if (versions.length > 1) {
30
+ console.log(chalk.gray(` Other versions: ${versions.slice(1).join(', ')}`));
31
+ }
32
+ }
33
+ console.log('');
34
+ console.log(chalk.gray('─'.repeat(50)));
35
+ console.log(chalk.gray('Install: snapshot install @scope/name[@version]'));
36
+ console.log(chalk.gray('Example: snapshot install @ist/minimal'));
37
+ console.log(chalk.gray(' snapshot install @ist/minimal@0.3.0'));
38
+ }
39
+ catch (error) {
40
+ const errMsg = error instanceof Error ? error.message : String(error);
41
+ console.log(chalk.red(`Error: ${errMsg}`));
42
+ process.exit(1);
43
+ }
44
+ }
45
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;CAI7B,CAAC,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface PublishOptions {
2
+ bump?: string;
3
+ dryRun?: boolean;
4
+ verbose?: boolean;
5
+ }
6
+ /**
7
+ * Publish command handler
8
+ */
9
+ export declare function publishCommand(options: PublishOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4ED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C3E"}
@@ -0,0 +1,111 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { access, readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import chalk from 'chalk';
5
+ /**
6
+ * Read and parse snapshot.json from current directory
7
+ */
8
+ async function readSnapshotJson() {
9
+ const snapshotJsonPath = join(process.cwd(), 'snapshot.json');
10
+ try {
11
+ const content = await readFile(snapshotJsonPath, 'utf-8');
12
+ return JSON.parse(content);
13
+ }
14
+ catch (error) {
15
+ if (error.code === 'ENOENT') {
16
+ throw new Error('snapshot.json not found in current directory');
17
+ }
18
+ throw new Error(`Failed to read snapshot.json: ${error instanceof Error ? error.message : String(error)}`);
19
+ }
20
+ }
21
+ /**
22
+ * Check if snapshot.json exists in the current directory
23
+ */
24
+ async function checkSnapshotJson() {
25
+ const snapshotJsonPath = join(process.cwd(), 'snapshot.json');
26
+ try {
27
+ await access(snapshotJsonPath);
28
+ }
29
+ catch {
30
+ throw new Error('snapshot.json not found in current directory');
31
+ }
32
+ }
33
+ /**
34
+ * Execute gitlab-publish with streaming output
35
+ */
36
+ async function executePublish(options) {
37
+ const args = ['--generic', 'snapshot.json'];
38
+ if (options.bump) {
39
+ args.push('--bump', options.bump);
40
+ }
41
+ if (options.dryRun) {
42
+ args.push('--dry-run');
43
+ }
44
+ if (options.verbose) {
45
+ args.push('--verbose');
46
+ }
47
+ return new Promise((resolve, reject) => {
48
+ const child = spawn('gitlab-publish', args, {
49
+ stdio: 'inherit',
50
+ shell: true,
51
+ });
52
+ child.on('error', (error) => {
53
+ reject(new Error(`Failed to execute gitlab-publish: ${error.message}`));
54
+ });
55
+ child.on('exit', (code) => {
56
+ if (code === 0) {
57
+ resolve();
58
+ }
59
+ else {
60
+ reject(new Error(`gitlab-publish exited with code ${code}`));
61
+ }
62
+ });
63
+ });
64
+ }
65
+ /**
66
+ * Publish command handler
67
+ */
68
+ export async function publishCommand(options) {
69
+ const { verbose = false, dryRun = false, bump } = options;
70
+ console.log();
71
+ console.log(chalk.cyan('Publishing snapshot package...'));
72
+ try {
73
+ if (verbose) {
74
+ console.log(chalk.dim(' Checking for snapshot.json...'));
75
+ }
76
+ await checkSnapshotJson();
77
+ const snapshotJson = await readSnapshotJson();
78
+ if (verbose) {
79
+ console.log(chalk.green(' ✓ Found snapshot.json'));
80
+ console.log(chalk.dim(` Name: ${snapshotJson.name}`));
81
+ console.log(chalk.dim(` Version: ${snapshotJson.version}`));
82
+ }
83
+ if (dryRun) {
84
+ console.log(chalk.yellow(' [dry-run] Would publish with options:'));
85
+ if (bump) {
86
+ console.log(chalk.dim(` --bump ${bump}`));
87
+ }
88
+ console.log(chalk.dim(' --generic snapshot.json'));
89
+ console.log();
90
+ }
91
+ else {
92
+ if (verbose) {
93
+ console.log(chalk.dim(` Running gitlab-publish...`));
94
+ if (bump) {
95
+ console.log(chalk.dim(` Bump type: ${bump}`));
96
+ }
97
+ }
98
+ console.log();
99
+ await executePublish(options);
100
+ console.log();
101
+ console.log(chalk.green('✓ Snapshot published to GitLab!'));
102
+ console.log();
103
+ }
104
+ }
105
+ catch (error) {
106
+ console.error();
107
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
108
+ process.exitCode = 1;
109
+ }
110
+ }
111
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { createRequire } from 'module';
5
+ import { installCommand } from './commands/install.js';
6
+ import { listCommand } from './commands/list.js';
7
+ import { currentCommand } from './commands/current.js';
8
+ import { publishCommand } from './commands/publish.js';
9
+ const require = createRequire(import.meta.url);
10
+ const pkg = require('../package.json');
11
+ const program = new Command();
12
+ program
13
+ .name('snapshot')
14
+ .description('IST Snapshot Installer - Install packages from GitLab snapshot repos')
15
+ .version(pkg.version);
16
+ program
17
+ .command('install <name>')
18
+ .description('Install packages from a snapshot (e.g., minimal, core, @ist/minimal)')
19
+ .action(async (name) => {
20
+ await installCommand(name);
21
+ });
22
+ program
23
+ .command('list')
24
+ .description('List available snapshots from GitLab')
25
+ .action(async () => {
26
+ await listCommand();
27
+ });
28
+ program
29
+ .command('current')
30
+ .description('Show currently installed snapshot')
31
+ .action(async () => {
32
+ await currentCommand();
33
+ });
34
+ program
35
+ .command('publish')
36
+ .description('Publish snapshot.json to GitLab registry')
37
+ .option('-b, --bump <type>', 'Bump version (patch, minor, major)')
38
+ .option('-d, --dry-run', 'Show what would be published without publishing')
39
+ .option('-v, --verbose', 'Show detailed output')
40
+ .action(async (options) => {
41
+ await publishCommand(options);
42
+ });
43
+ // Show help if no command
44
+ if (process.argv.length === 2) {
45
+ console.log(chalk.blue.bold(`
46
+ ╔══════════════════════════════════════════════════════════════╗
47
+ ║ IST Snapshot Installer ║
48
+ ╚══════════════════════════════════════════════════════════════╝
49
+ `));
50
+ console.log(chalk.gray('Usage:'));
51
+ console.log(chalk.cyan(' snapshot list') + chalk.gray(' # List available snapshots'));
52
+ console.log(chalk.cyan(' snapshot install @ist/minimal') + chalk.gray(' # Install @ist/minimal'));
53
+ console.log(chalk.cyan(' snapshot install @ist/core') + chalk.gray(' # Install @ist/core'));
54
+ console.log(chalk.cyan(' snapshot current') + chalk.gray(' # Show installed snapshot'));
55
+ console.log('');
56
+ console.log(chalk.gray('Snapshots are GitLab repos: snapshot.{scope}.{name}'));
57
+ console.log(chalk.gray('Example: @ist/minimal → snapshot.ist.minimal'));
58
+ console.log('');
59
+ program.help();
60
+ }
61
+ program.parse();
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SnapshotConfig } from './types.js';
2
+ export declare function getConfig(): SnapshotConfig;
3
+ export declare function getGitlabToken(): string | null;
4
+ //# sourceMappingURL=config.d.ts.map