create-dev-to 1.0.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.
- package/README.md +148 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +590 -0
- package/dist/index.js.map +1 -0
- package/dist/installLogger.d.ts +29 -0
- package/dist/installLogger.d.ts.map +1 -0
- package/dist/installLogger.js +252 -0
- package/dist/installLogger.js.map +1 -0
- package/dist/outputParsers.d.ts +29 -0
- package/dist/outputParsers.d.ts.map +1 -0
- package/dist/outputParsers.js +259 -0
- package/dist/outputParsers.js.map +1 -0
- package/dist/visualComponents.d.ts +35 -0
- package/dist/visualComponents.d.ts.map +1 -0
- package/dist/visualComponents.js +247 -0
- package/dist/visualComponents.js.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { InstallRenderer } from './visualComponents.js';
|
|
5
|
+
import { createParser } from './outputParsers.js';
|
|
6
|
+
export class InstallLogger {
|
|
7
|
+
packageManager;
|
|
8
|
+
parser;
|
|
9
|
+
renderer;
|
|
10
|
+
stats;
|
|
11
|
+
phases;
|
|
12
|
+
renderScheduled = false;
|
|
13
|
+
lastRenderTime = 0;
|
|
14
|
+
RENDER_INTERVAL = 50;
|
|
15
|
+
smoothProgressTimer = null;
|
|
16
|
+
constructor(packageManager) {
|
|
17
|
+
this.packageManager = packageManager;
|
|
18
|
+
this.parser = createParser(packageManager);
|
|
19
|
+
this.renderer = new InstallRenderer();
|
|
20
|
+
this.stats = {
|
|
21
|
+
packagesAdded: 0,
|
|
22
|
+
packagesUpdated: 0,
|
|
23
|
+
packagesRemoved: 0,
|
|
24
|
+
packagesTotal: 0,
|
|
25
|
+
downloadSpeed: 0,
|
|
26
|
+
downloadedBytes: 0,
|
|
27
|
+
nodeModulesSize: 0,
|
|
28
|
+
warnings: [],
|
|
29
|
+
};
|
|
30
|
+
this.phases = [
|
|
31
|
+
{ name: 'resolving', progress: 0, active: true },
|
|
32
|
+
{ name: 'downloading', progress: 0, active: false },
|
|
33
|
+
{ name: 'installing', progress: 0, active: false },
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
start() {
|
|
37
|
+
this.stats.startTime = performance.now();
|
|
38
|
+
this.render();
|
|
39
|
+
this.startSmoothProgress();
|
|
40
|
+
}
|
|
41
|
+
processLine(line, stream) {
|
|
42
|
+
if (!line || line.trim() === '')
|
|
43
|
+
return;
|
|
44
|
+
try {
|
|
45
|
+
const parsed = this.parser.parse(line, stream);
|
|
46
|
+
this.handleParsedOutput(parsed);
|
|
47
|
+
this.scheduleRender();
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (process.env.DEBUG) {
|
|
51
|
+
console.error('Parse error:', error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async finish(projectDir) {
|
|
56
|
+
// Stop smooth progress updates
|
|
57
|
+
this.stopSmoothProgress();
|
|
58
|
+
this.stats.endTime = performance.now();
|
|
59
|
+
this.stats.duration = this.stats.endTime - (this.stats.startTime || 0);
|
|
60
|
+
this.updatePhase('installing', 100);
|
|
61
|
+
this.render();
|
|
62
|
+
this.renderer.clear();
|
|
63
|
+
try {
|
|
64
|
+
this.stats.nodeModulesSize = await this.calculateNodeModulesSize(projectDir);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
this.stats.nodeModulesSize = 0;
|
|
68
|
+
}
|
|
69
|
+
return this.stats;
|
|
70
|
+
}
|
|
71
|
+
error() {
|
|
72
|
+
this.stopSmoothProgress();
|
|
73
|
+
this.renderer.clear();
|
|
74
|
+
}
|
|
75
|
+
startSmoothProgress() {
|
|
76
|
+
// Update progress smoothly even without output updates
|
|
77
|
+
this.smoothProgressTimer = setInterval(() => {
|
|
78
|
+
const activePhase = this.phases.find(p => p.active);
|
|
79
|
+
if (activePhase && activePhase.progress < 95) {
|
|
80
|
+
// Gradually increase progress with diminishing speed
|
|
81
|
+
const increment = Math.max(0.5, (95 - activePhase.progress) / 20);
|
|
82
|
+
activePhase.progress = Math.min(95, activePhase.progress + increment);
|
|
83
|
+
this.render();
|
|
84
|
+
}
|
|
85
|
+
}, 200);
|
|
86
|
+
}
|
|
87
|
+
stopSmoothProgress() {
|
|
88
|
+
if (this.smoothProgressTimer) {
|
|
89
|
+
clearInterval(this.smoothProgressTimer);
|
|
90
|
+
this.smoothProgressTimer = null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
handleParsedOutput(parsed) {
|
|
94
|
+
switch (parsed.type) {
|
|
95
|
+
case 'phase_change':
|
|
96
|
+
if (parsed.phase) {
|
|
97
|
+
this.activatePhase(parsed.phase);
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
case 'progress':
|
|
101
|
+
if (parsed.phase && parsed.progress !== undefined) {
|
|
102
|
+
this.updatePhase(parsed.phase, parsed.progress);
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
case 'package_info':
|
|
106
|
+
if (parsed.packageCount !== undefined) {
|
|
107
|
+
this.stats.packagesAdded = parsed.packageCount;
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
110
|
+
case 'warning':
|
|
111
|
+
if (parsed.message) {
|
|
112
|
+
this.stats.warnings = this.stats.warnings || [];
|
|
113
|
+
this.stats.warnings.push(parsed.message);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
case 'error':
|
|
117
|
+
break;
|
|
118
|
+
case 'ignore':
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
activatePhase(phaseName) {
|
|
123
|
+
const phase = this.phases.find(p => p.name === phaseName);
|
|
124
|
+
if (phase) {
|
|
125
|
+
// Don't reactivate if already completed
|
|
126
|
+
if (phase.progress >= 100) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Deactivate all phases first
|
|
130
|
+
this.phases.forEach(p => (p.active = false));
|
|
131
|
+
phase.active = true;
|
|
132
|
+
// Set initial progress if starting fresh
|
|
133
|
+
if (phase.progress === 0) {
|
|
134
|
+
phase.progress = 1;
|
|
135
|
+
}
|
|
136
|
+
// When activating a phase, complete previous phases
|
|
137
|
+
const phaseIndex = this.phases.findIndex(p => p.name === phaseName);
|
|
138
|
+
for (let i = 0; i < phaseIndex; i++) {
|
|
139
|
+
const prevPhase = this.phases[i];
|
|
140
|
+
if (prevPhase.progress < 100) {
|
|
141
|
+
prevPhase.progress = 100;
|
|
142
|
+
}
|
|
143
|
+
prevPhase.active = false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
updatePhase(phaseName, progress) {
|
|
148
|
+
const phase = this.phases.find(p => p.name === phaseName);
|
|
149
|
+
if (phase) {
|
|
150
|
+
phase.progress = Math.max(phase.progress, Math.min(100, progress));
|
|
151
|
+
// When a phase is updated, complete all previous phases
|
|
152
|
+
const phaseIndex = this.phases.findIndex(p => p.name === phaseName);
|
|
153
|
+
for (let i = 0; i < phaseIndex; i++) {
|
|
154
|
+
if (this.phases[i].progress < 100) {
|
|
155
|
+
this.phases[i].progress = 100;
|
|
156
|
+
this.phases[i].active = false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Only mark current phase as active if not already completed
|
|
160
|
+
if (phase.progress < 100) {
|
|
161
|
+
phase.active = true;
|
|
162
|
+
}
|
|
163
|
+
// When a phase reaches 100%, mark it as complete and activate next
|
|
164
|
+
if (progress >= 100) {
|
|
165
|
+
phase.active = false;
|
|
166
|
+
if (phaseIndex < this.phases.length - 1) {
|
|
167
|
+
// Only activate next phase if current one is complete
|
|
168
|
+
const nextPhase = this.phases[phaseIndex + 1];
|
|
169
|
+
if (nextPhase && nextPhase.progress === 0) {
|
|
170
|
+
nextPhase.active = true;
|
|
171
|
+
nextPhase.progress = 1; // Start with small progress
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
scheduleRender() {
|
|
178
|
+
if (this.renderScheduled)
|
|
179
|
+
return;
|
|
180
|
+
const now = performance.now();
|
|
181
|
+
const timeSinceLastRender = now - this.lastRenderTime;
|
|
182
|
+
if (timeSinceLastRender >= this.RENDER_INTERVAL) {
|
|
183
|
+
this.render();
|
|
184
|
+
this.lastRenderTime = now;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.renderScheduled = true;
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
this.render();
|
|
190
|
+
this.renderScheduled = false;
|
|
191
|
+
this.lastRenderTime = performance.now();
|
|
192
|
+
}, this.RENDER_INTERVAL - timeSinceLastRender);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
render() {
|
|
196
|
+
try {
|
|
197
|
+
this.renderer.render(this.phases, this.stats);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (process.env.DEBUG) {
|
|
201
|
+
console.error('Render error:', error);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async calculateNodeModulesSize(projectDir) {
|
|
206
|
+
const nodeModulesPath = path.join(projectDir, 'node_modules');
|
|
207
|
+
if (!fs.existsSync(nodeModulesPath)) {
|
|
208
|
+
return 0;
|
|
209
|
+
}
|
|
210
|
+
if (process.platform !== 'win32') {
|
|
211
|
+
try {
|
|
212
|
+
const result = execSync(`du -sk "${nodeModulesPath}"`, {
|
|
213
|
+
encoding: 'utf-8',
|
|
214
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
215
|
+
});
|
|
216
|
+
const sizeKB = parseInt(result.split('\t')[0]);
|
|
217
|
+
return sizeKB * 1024;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Fall through to recursive method
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return this.getDirectorySize(nodeModulesPath);
|
|
224
|
+
}
|
|
225
|
+
getDirectorySize(dir) {
|
|
226
|
+
let size = 0;
|
|
227
|
+
try {
|
|
228
|
+
const files = fs.readdirSync(dir, { withFileTypes: true });
|
|
229
|
+
for (const file of files) {
|
|
230
|
+
const filePath = path.join(dir, file.name);
|
|
231
|
+
try {
|
|
232
|
+
if (file.isDirectory()) {
|
|
233
|
+
size += this.getDirectorySize(filePath);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
const stats = fs.statSync(filePath);
|
|
237
|
+
size += stats.size;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Skip files we can't access
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// Skip directories we can't access
|
|
248
|
+
}
|
|
249
|
+
return size;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=installLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installLogger.js","sourceRoot":"","sources":["../src/installLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ParsedOutput {
|
|
2
|
+
type: 'phase_change' | 'progress' | 'package_info' | 'warning' | 'error' | 'ignore';
|
|
3
|
+
phase?: string;
|
|
4
|
+
progress?: number;
|
|
5
|
+
packageCount?: number;
|
|
6
|
+
downloadedBytes?: number;
|
|
7
|
+
message?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare abstract class OutputParser {
|
|
10
|
+
abstract parse(line: string, stream: 'stdout' | 'stderr'): ParsedOutput;
|
|
11
|
+
}
|
|
12
|
+
export declare class PnpmParser extends OutputParser {
|
|
13
|
+
private totalPackages;
|
|
14
|
+
private maxResolved;
|
|
15
|
+
private lastPhase;
|
|
16
|
+
parse(line: string, stream: 'stdout' | 'stderr'): ParsedOutput;
|
|
17
|
+
}
|
|
18
|
+
export declare class NpmParser extends OutputParser {
|
|
19
|
+
private isInstalling;
|
|
20
|
+
parse(line: string, stream: 'stdout' | 'stderr'): ParsedOutput;
|
|
21
|
+
}
|
|
22
|
+
export declare class YarnParser extends OutputParser {
|
|
23
|
+
parse(line: string, stream: 'stdout' | 'stderr'): ParsedOutput;
|
|
24
|
+
}
|
|
25
|
+
export declare class BunParser extends OutputParser {
|
|
26
|
+
parse(line: string, stream: 'stdout' | 'stderr'): ParsedOutput;
|
|
27
|
+
}
|
|
28
|
+
export declare function createParser(pm: 'pnpm' | 'npm' | 'yarn' | 'bun'): OutputParser;
|
|
29
|
+
//# sourceMappingURL=outputParsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputParsers.d.ts","sourceRoot":"","sources":["../src/outputParsers.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,8BAAsB,YAAY;IAChC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY;CACxE;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,SAAS,CAAsB;IAEvC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY;CAsG/D;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,YAAY,CAAiB;IAErC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY;CA0D/D;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY;CA2D/D;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY;CA0C/D;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,CAa9E"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
export class OutputParser {
|
|
2
|
+
}
|
|
3
|
+
export class PnpmParser extends OutputParser {
|
|
4
|
+
totalPackages = 0;
|
|
5
|
+
maxResolved = 0;
|
|
6
|
+
lastPhase = 'resolving';
|
|
7
|
+
parse(line, stream) {
|
|
8
|
+
// Detect resolving phase start
|
|
9
|
+
if (line.includes('Lockfile is up to date') || line.includes('Already up to date')) {
|
|
10
|
+
return {
|
|
11
|
+
type: 'progress',
|
|
12
|
+
phase: 'installing',
|
|
13
|
+
progress: 100,
|
|
14
|
+
packageCount: 0,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
// Parse progress line: "Progress: resolved 245, reused 180, downloaded 65, added 0"
|
|
18
|
+
const progressMatch = line.match(/Progress: resolved (\d+)(?:, reused (\d+))?(?:, downloaded (\d+))?(?:, added (\d+))?/);
|
|
19
|
+
if (progressMatch) {
|
|
20
|
+
const resolved = parseInt(progressMatch[1]);
|
|
21
|
+
const reused = parseInt(progressMatch[2] || '0');
|
|
22
|
+
const downloaded = parseInt(progressMatch[3] || '0');
|
|
23
|
+
const added = parseInt(progressMatch[4] || '0');
|
|
24
|
+
// Track max resolved as estimated total
|
|
25
|
+
this.maxResolved = Math.max(this.maxResolved, resolved);
|
|
26
|
+
// Determine phase and progress based on the numbers
|
|
27
|
+
// When added === resolved, installation is complete
|
|
28
|
+
if (added > 0 && added >= resolved) {
|
|
29
|
+
this.lastPhase = 'installing';
|
|
30
|
+
return {
|
|
31
|
+
type: 'progress',
|
|
32
|
+
phase: 'installing',
|
|
33
|
+
packageCount: added,
|
|
34
|
+
progress: 100,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// When we have added > 0 but not all, we're installing
|
|
38
|
+
else if (added > 0) {
|
|
39
|
+
this.lastPhase = 'installing';
|
|
40
|
+
const installProgress = Math.min(99, Math.max(10, (added / resolved) * 100));
|
|
41
|
+
return {
|
|
42
|
+
type: 'progress',
|
|
43
|
+
phase: 'installing',
|
|
44
|
+
progress: installProgress,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// When downloaded > 0, we're in downloading phase
|
|
48
|
+
else if (downloaded > 0 || reused > 0) {
|
|
49
|
+
const total = downloaded + reused;
|
|
50
|
+
if (this.lastPhase !== 'downloading') {
|
|
51
|
+
this.lastPhase = 'downloading';
|
|
52
|
+
}
|
|
53
|
+
const downloadProgress = Math.min(99, Math.max(10, (total / resolved) * 100));
|
|
54
|
+
return {
|
|
55
|
+
type: 'progress',
|
|
56
|
+
phase: 'downloading',
|
|
57
|
+
progress: downloadProgress,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Otherwise, we're still resolving
|
|
61
|
+
else if (resolved > 0) {
|
|
62
|
+
if (this.lastPhase !== 'resolving') {
|
|
63
|
+
this.lastPhase = 'resolving';
|
|
64
|
+
}
|
|
65
|
+
// Use a dynamic progress that gradually increases
|
|
66
|
+
const resolveProgress = Math.min(95, Math.max(10, (resolved / Math.max(this.maxResolved, 200)) * 100));
|
|
67
|
+
return {
|
|
68
|
+
type: 'progress',
|
|
69
|
+
phase: 'resolving',
|
|
70
|
+
progress: resolveProgress,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Parse package info from summary: "Packages: +245"
|
|
75
|
+
const packagesMatch = line.match(/Packages:\s*\+(\d+)/);
|
|
76
|
+
if (packagesMatch) {
|
|
77
|
+
const count = parseInt(packagesMatch[1]);
|
|
78
|
+
this.totalPackages = count;
|
|
79
|
+
return {
|
|
80
|
+
type: 'package_info',
|
|
81
|
+
packageCount: count,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Detect warnings
|
|
85
|
+
if (line.includes('warn') && stream === 'stderr') {
|
|
86
|
+
return {
|
|
87
|
+
type: 'warning',
|
|
88
|
+
message: line,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Detect errors
|
|
92
|
+
if ((line.includes('error') || line.includes('Error')) && stream === 'stderr') {
|
|
93
|
+
return {
|
|
94
|
+
type: 'error',
|
|
95
|
+
message: line,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return { type: 'ignore' };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export class NpmParser extends OutputParser {
|
|
102
|
+
isInstalling = false;
|
|
103
|
+
parse(line, stream) {
|
|
104
|
+
// Parse completion line: "added 245 packages, and audited 246 packages in 10s"
|
|
105
|
+
const completionMatch = line.match(/added (\d+) packages?(?:, (?:and|)?(?:audited|updated) (\d+) packages)?/);
|
|
106
|
+
if (completionMatch) {
|
|
107
|
+
this.isInstalling = true;
|
|
108
|
+
return {
|
|
109
|
+
type: 'progress',
|
|
110
|
+
packageCount: parseInt(completionMatch[1]),
|
|
111
|
+
progress: 100,
|
|
112
|
+
phase: 'installing',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Parse up to date: "up to date, audited 245 packages in 0.5s"
|
|
116
|
+
if (line.includes('up to date')) {
|
|
117
|
+
this.isInstalling = true;
|
|
118
|
+
return {
|
|
119
|
+
type: 'progress',
|
|
120
|
+
packageCount: 0,
|
|
121
|
+
progress: 100,
|
|
122
|
+
phase: 'installing',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Parse npm output with progress (some versions show this)
|
|
126
|
+
const progressMatch = line.match(/\|(.+?)\|/);
|
|
127
|
+
if (progressMatch) {
|
|
128
|
+
const progress = (progressMatch[1].length / 50) * 100;
|
|
129
|
+
return {
|
|
130
|
+
type: 'progress',
|
|
131
|
+
progress: Math.min(95, Math.max(1, progress)),
|
|
132
|
+
phase: 'downloading',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Detect vulnerabilities warnings
|
|
136
|
+
if (line.includes('vulnerabilities') || line.includes('vulnerability')) {
|
|
137
|
+
return {
|
|
138
|
+
type: 'warning',
|
|
139
|
+
message: line,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// Detect errors
|
|
143
|
+
if (line.includes('ERR!')
|
|
144
|
+
|| (line.includes('error') && stream === 'stderr')) {
|
|
145
|
+
return {
|
|
146
|
+
type: 'error',
|
|
147
|
+
message: line,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return { type: 'ignore' };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export class YarnParser extends OutputParser {
|
|
154
|
+
parse(line, stream) {
|
|
155
|
+
// Parse phase indicators: "[1/4] Resolving packages..."
|
|
156
|
+
const phaseMatch = line.match(/\[(\d+)\/4\]\s+(.+?)\.{3}/);
|
|
157
|
+
if (phaseMatch) {
|
|
158
|
+
const stepNum = parseInt(phaseMatch[1]);
|
|
159
|
+
const phaseNames = [
|
|
160
|
+
'resolving',
|
|
161
|
+
'fetching',
|
|
162
|
+
'linking',
|
|
163
|
+
'building',
|
|
164
|
+
];
|
|
165
|
+
const phase = phaseNames[stepNum - 1] || 'resolving';
|
|
166
|
+
// Map fetching to downloading
|
|
167
|
+
const mappedPhase = phase === 'fetching' ? 'downloading' : phase;
|
|
168
|
+
return {
|
|
169
|
+
type: 'phase_change',
|
|
170
|
+
phase: mappedPhase,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// Parse success line: "Done in 8.50s"
|
|
174
|
+
const successMatch = line.match(/Done in ([\d.]+)s/);
|
|
175
|
+
if (successMatch) {
|
|
176
|
+
return {
|
|
177
|
+
type: 'progress',
|
|
178
|
+
progress: 100,
|
|
179
|
+
phase: 'installing',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// Parse package added/removed: "Yarn added 245 packages"
|
|
183
|
+
const addedMatch = line.match(/(?:Yarn )?added (\d+) packages?/);
|
|
184
|
+
if (addedMatch) {
|
|
185
|
+
return {
|
|
186
|
+
type: 'package_info',
|
|
187
|
+
packageCount: parseInt(addedMatch[1]),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Detect warnings
|
|
191
|
+
if (line.includes('warning') && stream === 'stderr') {
|
|
192
|
+
return {
|
|
193
|
+
type: 'warning',
|
|
194
|
+
message: line,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// Detect errors
|
|
198
|
+
if (line.includes('error') && stream === 'stderr') {
|
|
199
|
+
return {
|
|
200
|
+
type: 'error',
|
|
201
|
+
message: line,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return { type: 'ignore' };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export class BunParser extends OutputParser {
|
|
208
|
+
parse(line, stream) {
|
|
209
|
+
// Parse completion: "+ 245 packages installed [1.23s]"
|
|
210
|
+
const completionMatch = line.match(/^\s*\+\s*(\d+)\s+packages installed\s*\[([\d.]+)s\]/);
|
|
211
|
+
if (completionMatch) {
|
|
212
|
+
return {
|
|
213
|
+
type: 'progress',
|
|
214
|
+
packageCount: parseInt(completionMatch[1]),
|
|
215
|
+
progress: 100,
|
|
216
|
+
phase: 'installing',
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Parse already installed: "0 packages installed"
|
|
220
|
+
const alreadyMatch = line.match(/^\s*(\d+)\s+packages already installed/);
|
|
221
|
+
if (alreadyMatch) {
|
|
222
|
+
return {
|
|
223
|
+
type: 'progress',
|
|
224
|
+
packageCount: 0,
|
|
225
|
+
progress: 100,
|
|
226
|
+
phase: 'installing',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// Detect download progress (bun shows detailed output)
|
|
230
|
+
if (line.includes('Downloading') || line.includes('downloading')) {
|
|
231
|
+
return { type: 'phase_change', phase: 'downloading' };
|
|
232
|
+
}
|
|
233
|
+
// Detect errors
|
|
234
|
+
if (line.includes('error')
|
|
235
|
+
|| line.includes('Error')
|
|
236
|
+
|| (line.includes('failed') && stream === 'stderr')) {
|
|
237
|
+
return {
|
|
238
|
+
type: 'error',
|
|
239
|
+
message: line,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
return { type: 'ignore' };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
export function createParser(pm) {
|
|
246
|
+
switch (pm) {
|
|
247
|
+
case 'pnpm':
|
|
248
|
+
return new PnpmParser();
|
|
249
|
+
case 'npm':
|
|
250
|
+
return new NpmParser();
|
|
251
|
+
case 'yarn':
|
|
252
|
+
return new YarnParser();
|
|
253
|
+
case 'bun':
|
|
254
|
+
return new BunParser();
|
|
255
|
+
default:
|
|
256
|
+
return new NpmParser(); // fallback
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=outputParsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputParsers.js","sourceRoot":"","sources":["../src/outputParsers.ts"],"names":[],"mappings":"AASA,MAAM,OAAgB,YAAY;CAEjC;AAED,MAAM,OAAO,UAAW,SAAQ,YAAY;IAClC,aAAa,GAAW,CAAC,CAAA;IACzB,WAAW,GAAW,CAAC,CAAA;IACvB,SAAS,GAAW,WAAW,CAAA;IAEvC,KAAK,CAAC,IAAY,EAAE,MAA2B;QAC7C,+BAA+B;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACnF,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,GAAG;gBACb,YAAY,EAAE,CAAC;aAChB,CAAA;QACH,CAAC;QAED,oFAAoF;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAC9B,sFAAsF,CACvF,CAAA;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;YAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;YACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;YAE/C,wCAAwC;YACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAEvD,oDAAoD;YACpD,oDAAoD;YACpD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;gBAC7B,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,YAAY;oBACnB,YAAY,EAAE,KAAK;oBACnB,QAAQ,EAAE,GAAG;iBACd,CAAA;YACH,CAAC;YACD,uDAAuD;iBAClD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;gBAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBAC5E,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,YAAY;oBACnB,QAAQ,EAAE,eAAe;iBAC1B,CAAA;YACH,CAAC;YACD,kDAAkD;iBAC7C,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,CAAA;gBACjC,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAA;gBAChC,CAAC;gBACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBAC7E,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,gBAAgB;iBAC3B,CAAA;YACH,CAAC;YACD,mCAAmC;iBAC9B,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;oBACnC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAA;gBAC9B,CAAC;gBACD,kDAAkD;gBAClD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBACtG,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,WAAW;oBAClB,QAAQ,EAAE,eAAe;iBAC1B,CAAA;YACH,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACvD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;YACxC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;YAC1B,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,YAAY,EAAE,KAAK;aACpB,CAAA;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9E,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,YAAY;IACjC,YAAY,GAAY,KAAK,CAAA;IAErC,KAAK,CAAC,IAAY,EAAE,MAA2B;QAC7C,+EAA+E;QAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,yEAAyE,CAC1E,CAAA;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC1C,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAED,+DAA+D;QAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAED,2DAA2D;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAC7C,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,CAAA;YACrD,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC7C,KAAK,EAAE,aAAa;aACrB,CAAA;QACH,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACvE,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,gBAAgB;QAChB,IACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;eAClB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC,EAClD,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,YAAY;IAC1C,KAAK,CAAC,IAAY,EAAE,MAA2B;QAC7C,wDAAwD;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YACvC,MAAM,UAAU,GAAG;gBACjB,WAAW;gBACX,UAAU;gBACV,SAAS;gBACT,UAAU;aACX,CAAA;YACD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,WAAW,CAAA;YAEpD,8BAA8B;YAC9B,MAAM,WAAW,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAA;YAEhE,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,WAAW;aACnB,CAAA;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACpD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAED,yDAAyD;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAChE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aACtC,CAAA;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,YAAY;IACzC,KAAK,CAAC,IAAY,EAAE,MAA2B;QAC7C,uDAAuD;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACzF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC1C,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAED,kDAAkD;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;QACzE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;QACvD,CAAC;QAED,gBAAgB;QAChB,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;eACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;eACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC,EACnD,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,EAAmC;IAC9D,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,MAAM;YACT,OAAO,IAAI,UAAU,EAAE,CAAA;QACzB,KAAK,KAAK;YACR,OAAO,IAAI,SAAS,EAAE,CAAA;QACxB,KAAK,MAAM;YACT,OAAO,IAAI,UAAU,EAAE,CAAA;QACzB,KAAK,KAAK;YACR,OAAO,IAAI,SAAS,EAAE,CAAA;QACxB;YACE,OAAO,IAAI,SAAS,EAAE,CAAA,CAAC,WAAW;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface InstallPhase {
|
|
2
|
+
name: 'resolving' | 'downloading' | 'installing' | 'building';
|
|
3
|
+
progress: number;
|
|
4
|
+
current?: number;
|
|
5
|
+
total?: number;
|
|
6
|
+
active: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface InstallStats {
|
|
9
|
+
startTime: number;
|
|
10
|
+
endTime: number;
|
|
11
|
+
duration: number;
|
|
12
|
+
packagesAdded: number;
|
|
13
|
+
packagesUpdated: number;
|
|
14
|
+
packagesRemoved: number;
|
|
15
|
+
packagesTotal: number;
|
|
16
|
+
downloadSpeed: number;
|
|
17
|
+
downloadedBytes: number;
|
|
18
|
+
nodeModulesSize: number;
|
|
19
|
+
warnings: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare class InstallRenderer {
|
|
22
|
+
private isTTY;
|
|
23
|
+
private supportsColor;
|
|
24
|
+
private lineCount;
|
|
25
|
+
constructor();
|
|
26
|
+
render(phases: InstallPhase[], stats: Partial<InstallStats>): void;
|
|
27
|
+
private buildEnhancedUI;
|
|
28
|
+
private getPhaseLabel;
|
|
29
|
+
private buildStatsLine;
|
|
30
|
+
private updateTerminal;
|
|
31
|
+
private renderSimple;
|
|
32
|
+
clear(): void;
|
|
33
|
+
}
|
|
34
|
+
export declare function displayInstallSummary(stats: InstallStats): void;
|
|
35
|
+
//# sourceMappingURL=visualComponents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visualComponents.d.ts","sourceRoot":"","sources":["../src/visualComponents.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,UAAU,CAAA;IAC7D,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAsJD,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAY;;IAO7B,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAUlE,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,YAAY;IAUpB,KAAK,IAAI,IAAI;CAQd;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAoC/D"}
|