@microwiseai/snapshot 0.3.48 → 0.3.57
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/dist/commands/access.js +1 -1
- package/dist/commands/access.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +37 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +110 -72
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +52 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/access-sync.d.ts.map +1 -1
- package/dist/lib/access-sync.js +2 -0
- package/dist/lib/access-sync.js.map +1 -1
- package/dist/lib/config.d.ts +15 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +96 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/gitlab.js +3 -3
- package/dist/lib/gitlab.js.map +1 -1
- package/dist/lib/prerequisites.d.ts +33 -0
- package/dist/lib/prerequisites.d.ts.map +1 -0
- package/dist/lib/prerequisites.js +109 -0
- package/dist/lib/prerequisites.js.map +1 -0
- package/dist/lib/session.d.ts +6 -8
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/lib/session.js +10 -12
- package/dist/lib/session.js.map +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts +108 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts.map +1 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js +196 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js.map +1 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts +21 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.js +27 -0
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/snapshot-dedup/package.json +41 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/index.d.ts +9 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/index.js +8 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/parallel-installer.d.ts +86 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/parallel-installer.d.ts.map +1 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/parallel-installer.js +159 -0
- package/node_modules/@microwiseai/snapshot-parallel/dist/parallel-installer.js.map +1 -0
- package/node_modules/@microwiseai/snapshot-parallel/package.json +41 -0
- package/package.json +7 -3
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Package Installer
|
|
3
|
+
*
|
|
4
|
+
* Concurrency-limited parallel execution for package installation.
|
|
5
|
+
* Replaces serial for-loops in core/install.ts with Promise-pool pattern.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================
|
|
8
|
+
// Core: Concurrency-limited Promise Pool
|
|
9
|
+
// ============================================================
|
|
10
|
+
/**
|
|
11
|
+
* Run an array of async tasks with a concurrency limit.
|
|
12
|
+
* Uses a pool pattern (not chunking) so a new task starts
|
|
13
|
+
* as soon as a slot frees up.
|
|
14
|
+
*/
|
|
15
|
+
async function runPool(items, concurrency, fn, signal) {
|
|
16
|
+
const results = new Array(items.length);
|
|
17
|
+
let nextIndex = 0;
|
|
18
|
+
async function worker() {
|
|
19
|
+
while (nextIndex < items.length) {
|
|
20
|
+
if (signal?.aborted) {
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
const idx = nextIndex++;
|
|
24
|
+
results[idx] = await fn(items[idx], idx);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const workers = Array.from({ length: Math.min(concurrency, items.length) }, () => worker());
|
|
28
|
+
await Promise.all(workers);
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
// ============================================================
|
|
32
|
+
// Public API
|
|
33
|
+
// ============================================================
|
|
34
|
+
/**
|
|
35
|
+
* Install packages in parallel with concurrency control.
|
|
36
|
+
*
|
|
37
|
+
* @param entries - List of packages to install
|
|
38
|
+
* @param installFn - Function that installs a single package (caller provides the actual logic)
|
|
39
|
+
* @param options - Concurrency, progress callback, abort signal
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* import { parallelInstall } from '@microwiseai/snapshot-parallel';
|
|
44
|
+
*
|
|
45
|
+
* const result = await parallelInstall(
|
|
46
|
+
* [{ name: '@ist/smon', version: '0.2.15' }],
|
|
47
|
+
* async (entry) => {
|
|
48
|
+
* // your install logic here
|
|
49
|
+
* return { success: true };
|
|
50
|
+
* },
|
|
51
|
+
* { concurrency: 4, onProgress: (e) => console.log(`${e.current}/${e.total}`) }
|
|
52
|
+
* );
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export async function parallelInstall(entries, installFn, options = {}) {
|
|
56
|
+
const { concurrency = 4, onProgress, signal } = options;
|
|
57
|
+
if (entries.length === 0) {
|
|
58
|
+
return { installed: [], failed: [], results: [], totalDurationMs: 0 };
|
|
59
|
+
}
|
|
60
|
+
const totalStart = Date.now();
|
|
61
|
+
let completedCount = 0;
|
|
62
|
+
const results = await runPool(entries, concurrency, async (entry, _index) => {
|
|
63
|
+
const spec = `${entry.name}@${entry.version}`;
|
|
64
|
+
const start = Date.now();
|
|
65
|
+
if (signal?.aborted) {
|
|
66
|
+
const res = {
|
|
67
|
+
name: entry.name,
|
|
68
|
+
version: entry.version,
|
|
69
|
+
spec,
|
|
70
|
+
success: false,
|
|
71
|
+
error: 'Aborted',
|
|
72
|
+
durationMs: 0,
|
|
73
|
+
};
|
|
74
|
+
return res;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const outcome = await installFn(entry);
|
|
78
|
+
const durationMs = Date.now() - start;
|
|
79
|
+
const res = {
|
|
80
|
+
name: entry.name,
|
|
81
|
+
version: entry.version,
|
|
82
|
+
spec,
|
|
83
|
+
success: outcome.success,
|
|
84
|
+
error: outcome.error,
|
|
85
|
+
durationMs,
|
|
86
|
+
};
|
|
87
|
+
completedCount++;
|
|
88
|
+
onProgress?.({
|
|
89
|
+
current: completedCount,
|
|
90
|
+
total: entries.length,
|
|
91
|
+
result: res,
|
|
92
|
+
});
|
|
93
|
+
return res;
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
const durationMs = Date.now() - start;
|
|
97
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
98
|
+
const res = {
|
|
99
|
+
name: entry.name,
|
|
100
|
+
version: entry.version,
|
|
101
|
+
spec,
|
|
102
|
+
success: false,
|
|
103
|
+
error,
|
|
104
|
+
durationMs,
|
|
105
|
+
};
|
|
106
|
+
completedCount++;
|
|
107
|
+
onProgress?.({
|
|
108
|
+
current: completedCount,
|
|
109
|
+
total: entries.length,
|
|
110
|
+
result: res,
|
|
111
|
+
});
|
|
112
|
+
return res;
|
|
113
|
+
}
|
|
114
|
+
}, signal);
|
|
115
|
+
const installed = [];
|
|
116
|
+
const failed = [];
|
|
117
|
+
for (const r of results) {
|
|
118
|
+
if (!r)
|
|
119
|
+
continue; // skipped due to abort
|
|
120
|
+
if (r.success) {
|
|
121
|
+
installed.push(r.spec);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
failed.push(r.spec);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
installed,
|
|
129
|
+
failed,
|
|
130
|
+
results: results.filter(Boolean),
|
|
131
|
+
totalDurationMs: Date.now() - totalStart,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// ============================================================
|
|
135
|
+
// Helpers: Convert between Record<string,string> and PackageEntry[]
|
|
136
|
+
// ============================================================
|
|
137
|
+
/**
|
|
138
|
+
* Convert a { name: version } record to PackageEntry[].
|
|
139
|
+
* Preserves insertion order.
|
|
140
|
+
*/
|
|
141
|
+
export function recordToEntries(packages) {
|
|
142
|
+
return Object.entries(packages).map(([name, version]) => ({ name, version }));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Partition entries by a classifier function.
|
|
146
|
+
* Useful for splitting skit vs npm vs generic before parallel install.
|
|
147
|
+
*/
|
|
148
|
+
export function partitionEntries(entries, classifier) {
|
|
149
|
+
const result = {};
|
|
150
|
+
for (const entry of entries) {
|
|
151
|
+
const key = classifier(entry);
|
|
152
|
+
if (!result[key]) {
|
|
153
|
+
result[key] = [];
|
|
154
|
+
}
|
|
155
|
+
result[key].push(entry);
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=parallel-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-installer.js","sourceRoot":"","sources":["../src/parallel-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@microwiseai/snapshot-parallel",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Parallel package installer with concurrency control for Snapshot CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"test": "vitest",
|
|
18
|
+
"test:run": "vitest run",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"keywords": [
|
|
25
|
+
"snapshot",
|
|
26
|
+
"parallel",
|
|
27
|
+
"installer",
|
|
28
|
+
"concurrency"
|
|
29
|
+
],
|
|
30
|
+
"author": "IST Team",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^20.11.0",
|
|
35
|
+
"typescript": "^5.7.3",
|
|
36
|
+
"vitest": "^4.0.18"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=18.0.0"
|
|
40
|
+
}
|
|
41
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microwiseai/snapshot",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.57",
|
|
4
4
|
"description": "CLI for installing IST Snapshot packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/lib.js",
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
"@ist/registry-config",
|
|
36
36
|
"@microwiseai/import-telemetry",
|
|
37
37
|
"@microwiseai/license",
|
|
38
|
-
"@microwiseai/skit"
|
|
38
|
+
"@microwiseai/skit",
|
|
39
|
+
"@microwiseai/snapshot-dedup",
|
|
40
|
+
"@microwiseai/snapshot-parallel"
|
|
39
41
|
],
|
|
40
42
|
"keywords": [
|
|
41
43
|
"snapshot",
|
|
@@ -72,6 +74,8 @@
|
|
|
72
74
|
"@ist/registry-config",
|
|
73
75
|
"@microwiseai/import-telemetry",
|
|
74
76
|
"@microwiseai/license",
|
|
75
|
-
"@microwiseai/skit"
|
|
77
|
+
"@microwiseai/skit",
|
|
78
|
+
"@microwiseai/snapshot-dedup",
|
|
79
|
+
"@microwiseai/snapshot-parallel"
|
|
76
80
|
]
|
|
77
81
|
}
|