tuimon 0.2.0 → 0.3.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.
@@ -0,0 +1,362 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { relative, resolve } from 'node:path';
3
+ // ─── Shared layout ──────────────────────────────────────────────────────────
4
+ const coverageLayout = {
5
+ title: 'Test Coverage',
6
+ stats: [
7
+ { id: 'totalCoverage', label: 'Coverage', type: 'gauge' },
8
+ { id: 'totalFiles', label: 'Files', type: 'stat' },
9
+ { id: 'coveredLines', label: 'Covered Lines', type: 'stat' },
10
+ { id: 'uncoveredLines', label: 'Uncovered Lines', type: 'stat' },
11
+ ],
12
+ panels: [
13
+ { id: 'fileList', label: 'Coverage by File', type: 'table', span: 2 },
14
+ { id: 'coverageDist', label: 'Coverage Distribution', type: 'doughnut' },
15
+ { id: 'lowCoverage', label: 'Low Coverage Files', type: 'event-log' },
16
+ ],
17
+ };
18
+ const junitLayout = {
19
+ title: 'Test Coverage',
20
+ stats: [
21
+ { id: 'totalCoverage', label: 'Tests', type: 'stat' },
22
+ { id: 'totalFiles', label: 'Passed', type: 'stat' },
23
+ { id: 'coveredLines', label: 'Failed', type: 'stat' },
24
+ { id: 'uncoveredLines', label: 'Duration', type: 'stat' },
25
+ ],
26
+ panels: [
27
+ { id: 'fileList', label: 'Test Cases', type: 'table', span: 2 },
28
+ { id: 'coverageDist', label: 'Coverage Distribution', type: 'doughnut' },
29
+ { id: 'lowCoverage', label: 'Low Coverage Files', type: 'event-log' },
30
+ ],
31
+ };
32
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
33
+ function shortenPath(fullPath) {
34
+ try {
35
+ return relative(process.cwd(), fullPath);
36
+ }
37
+ catch {
38
+ return fullPath;
39
+ }
40
+ }
41
+ function buildDistribution(coverages) {
42
+ let high = 0;
43
+ let medium = 0;
44
+ let low = 0;
45
+ let veryLow = 0;
46
+ for (const pct of coverages) {
47
+ if (pct > 90)
48
+ high++;
49
+ else if (pct > 70)
50
+ medium++;
51
+ else if (pct > 50)
52
+ low++;
53
+ else
54
+ veryLow++;
55
+ }
56
+ return {
57
+ '>90%': high,
58
+ '70-90%': medium,
59
+ '50-70%': low,
60
+ '<50%': veryLow,
61
+ };
62
+ }
63
+ function buildLowCoverageEntries(files) {
64
+ const entries = [];
65
+ const sorted = [...files].sort((a, b) => a.pct - b.pct);
66
+ for (const f of sorted) {
67
+ if (f.pct < 50) {
68
+ entries.push({ text: `${f.name}: ${f.pct.toFixed(1)}%`, type: 'error' });
69
+ }
70
+ else if (f.pct < 70) {
71
+ entries.push({ text: `${f.name}: ${f.pct.toFixed(1)}%`, type: 'warning' });
72
+ }
73
+ }
74
+ return entries;
75
+ }
76
+ function detectFormat(content, filePath) {
77
+ const trimmed = content.trim();
78
+ // XML-based JUnit
79
+ if (trimmed.startsWith('<?xml') || trimmed.startsWith('<testsuites') || trimmed.startsWith('<testsuite')) {
80
+ return 'junit';
81
+ }
82
+ // lcov
83
+ if (filePath.endsWith('.info') || (trimmed.includes('SF:') && trimmed.includes('end_of_record'))) {
84
+ return 'lcov';
85
+ }
86
+ // JSON formats
87
+ if (trimmed.startsWith('{')) {
88
+ try {
89
+ const parsed = JSON.parse(trimmed);
90
+ if ('total' in parsed && typeof parsed['total'] === 'object' && parsed['total'] !== null) {
91
+ const total = parsed['total'];
92
+ if ('lines' in total)
93
+ return 'istanbul-summary';
94
+ }
95
+ // istanbul-final: file paths as keys with path/s/b/f properties
96
+ const keys = Object.keys(parsed);
97
+ if (keys.length > 0) {
98
+ const firstKey = keys[0];
99
+ if (firstKey !== undefined) {
100
+ const firstVal = parsed[firstKey];
101
+ if (typeof firstVal === 'object' && firstVal !== null && 'path' in firstVal && 's' in firstVal) {
102
+ return 'istanbul-final';
103
+ }
104
+ }
105
+ }
106
+ }
107
+ catch {
108
+ // not valid JSON
109
+ }
110
+ }
111
+ throw new Error(`[tuimon] Could not detect coverage format for ${filePath}. ` +
112
+ 'Supported formats: Istanbul/NYC JSON (coverage-summary.json, coverage-final.json), lcov (.info), JUnit XML.');
113
+ }
114
+ // ─── Parsers ─────────────────────────────────────────────────────────────────
115
+ function parseIstanbulSummary(content) {
116
+ const report = JSON.parse(content);
117
+ const totalEntry = report['total'];
118
+ if (totalEntry === undefined) {
119
+ throw new Error('[tuimon] Invalid coverage-summary.json: missing "total" key.');
120
+ }
121
+ const totalCoverage = Math.round(totalEntry.lines.pct * 100) / 100;
122
+ const coveredLines = totalEntry.lines.covered;
123
+ const uncoveredLines = totalEntry.lines.total - totalEntry.lines.covered;
124
+ const fileEntries = [];
125
+ for (const [key, value] of Object.entries(report)) {
126
+ if (key === 'total')
127
+ continue;
128
+ fileEntries.push({
129
+ name: shortenPath(key),
130
+ pct: value.lines.pct,
131
+ branchPct: value.branches.pct,
132
+ fnPct: value.functions.pct,
133
+ });
134
+ }
135
+ // Sort worst first
136
+ fileEntries.sort((a, b) => a.pct - b.pct);
137
+ const fileList = {
138
+ columns: ['File', 'Lines%', 'Branches%', 'Functions%'],
139
+ rows: fileEntries.map((f) => [
140
+ f.name,
141
+ `${f.pct.toFixed(1)}%`,
142
+ `${f.branchPct.toFixed(1)}%`,
143
+ `${f.fnPct.toFixed(1)}%`,
144
+ ]),
145
+ };
146
+ const coverageDist = buildDistribution(fileEntries.map((f) => f.pct));
147
+ const lowCoverage = buildLowCoverageEntries(fileEntries);
148
+ return {
149
+ totalCoverage,
150
+ totalFiles: fileEntries.length,
151
+ coveredLines,
152
+ uncoveredLines,
153
+ fileList,
154
+ coverageDist,
155
+ lowCoverage,
156
+ };
157
+ }
158
+ function parseIstanbulFinal(content) {
159
+ const report = JSON.parse(content);
160
+ let totalStatements = 0;
161
+ let totalCoveredStatements = 0;
162
+ const fileEntries = [];
163
+ for (const [, entry] of Object.entries(report)) {
164
+ const stmtKeys = Object.keys(entry.s);
165
+ const stmtTotal = stmtKeys.length;
166
+ const stmtCovered = stmtKeys.filter((k) => (entry.s[k] ?? 0) > 0).length;
167
+ const fnKeys = Object.keys(entry.f);
168
+ const fnTotal = fnKeys.length;
169
+ const fnCovered = fnKeys.filter((k) => (entry.f[k] ?? 0) > 0).length;
170
+ const branchKeys = Object.keys(entry.b);
171
+ let branchTotal = 0;
172
+ let branchCovered = 0;
173
+ for (const k of branchKeys) {
174
+ const branches = entry.b[k];
175
+ if (branches !== undefined) {
176
+ for (const count of branches) {
177
+ branchTotal++;
178
+ if (count > 0)
179
+ branchCovered++;
180
+ }
181
+ }
182
+ }
183
+ totalStatements += stmtTotal;
184
+ totalCoveredStatements += stmtCovered;
185
+ const pct = stmtTotal > 0 ? (stmtCovered / stmtTotal) * 100 : 100;
186
+ const branchPct = branchTotal > 0 ? (branchCovered / branchTotal) * 100 : 100;
187
+ const fnPct = fnTotal > 0 ? (fnCovered / fnTotal) * 100 : 100;
188
+ fileEntries.push({
189
+ name: shortenPath(entry.path),
190
+ pct: Math.round(pct * 10) / 10,
191
+ branchPct: Math.round(branchPct * 10) / 10,
192
+ fnPct: Math.round(fnPct * 10) / 10,
193
+ });
194
+ }
195
+ fileEntries.sort((a, b) => a.pct - b.pct);
196
+ const totalCoverage = totalStatements > 0
197
+ ? Math.round((totalCoveredStatements / totalStatements) * 10000) / 100
198
+ : 0;
199
+ const fileList = {
200
+ columns: ['File', 'Lines%', 'Branches%', 'Functions%'],
201
+ rows: fileEntries.map((f) => [
202
+ f.name,
203
+ `${f.pct.toFixed(1)}%`,
204
+ `${f.branchPct.toFixed(1)}%`,
205
+ `${f.fnPct.toFixed(1)}%`,
206
+ ]),
207
+ };
208
+ const coverageDist = buildDistribution(fileEntries.map((f) => f.pct));
209
+ const lowCoverage = buildLowCoverageEntries(fileEntries);
210
+ return {
211
+ totalCoverage,
212
+ totalFiles: fileEntries.length,
213
+ coveredLines: totalCoveredStatements,
214
+ uncoveredLines: totalStatements - totalCoveredStatements,
215
+ fileList,
216
+ coverageDist,
217
+ lowCoverage,
218
+ };
219
+ }
220
+ function parseLcov(content) {
221
+ const entries = [];
222
+ let currentFile;
223
+ let linesFound = 0;
224
+ let linesHit = 0;
225
+ for (const line of content.split('\n')) {
226
+ const trimmed = line.trim();
227
+ if (trimmed.startsWith('SF:')) {
228
+ currentFile = trimmed.slice(3);
229
+ linesFound = 0;
230
+ linesHit = 0;
231
+ }
232
+ else if (trimmed.startsWith('LF:')) {
233
+ linesFound = parseInt(trimmed.slice(3), 10) || 0;
234
+ }
235
+ else if (trimmed.startsWith('LH:')) {
236
+ linesHit = parseInt(trimmed.slice(3), 10) || 0;
237
+ }
238
+ else if (trimmed === 'end_of_record' && currentFile !== undefined) {
239
+ entries.push({ file: currentFile, linesFound, linesHit });
240
+ currentFile = undefined;
241
+ }
242
+ }
243
+ let totalFound = 0;
244
+ let totalHit = 0;
245
+ const fileEntries = [];
246
+ for (const entry of entries) {
247
+ totalFound += entry.linesFound;
248
+ totalHit += entry.linesHit;
249
+ const pct = entry.linesFound > 0 ? (entry.linesHit / entry.linesFound) * 100 : 100;
250
+ fileEntries.push({
251
+ name: shortenPath(entry.file),
252
+ pct: Math.round(pct * 10) / 10,
253
+ });
254
+ }
255
+ fileEntries.sort((a, b) => a.pct - b.pct);
256
+ const totalCoverage = totalFound > 0
257
+ ? Math.round((totalHit / totalFound) * 10000) / 100
258
+ : 0;
259
+ const fileList = {
260
+ columns: ['File', 'Lines%', 'Branches%', 'Functions%'],
261
+ rows: fileEntries.map((f) => [f.name, `${f.pct.toFixed(1)}%`, 'N/A', 'N/A']),
262
+ };
263
+ const coverageDist = buildDistribution(fileEntries.map((f) => f.pct));
264
+ const lowCoverage = buildLowCoverageEntries(fileEntries);
265
+ return {
266
+ totalCoverage,
267
+ totalFiles: fileEntries.length,
268
+ coveredLines: totalHit,
269
+ uncoveredLines: totalFound - totalHit,
270
+ fileList,
271
+ coverageDist,
272
+ lowCoverage,
273
+ };
274
+ }
275
+ function parseJunit(content) {
276
+ const testCases = [];
277
+ const caseRegex = /<testcase\s+([^>]*)(?:\/>|>([\s\S]*?)<\/testcase>)/g;
278
+ let match;
279
+ while ((match = caseRegex.exec(content)) !== null) {
280
+ const attrs = match[1] ?? '';
281
+ const body = match[2] ?? '';
282
+ const nameMatch = attrs.match(/name="([^"]*)"/);
283
+ const classMatch = attrs.match(/classname="([^"]*)"/);
284
+ const timeMatch = attrs.match(/time="([^"]*)"/);
285
+ const name = nameMatch !== null ? (nameMatch[1] ?? '') : '';
286
+ const classname = classMatch !== null ? (classMatch[1] ?? '') : '';
287
+ const time = timeMatch !== null ? parseFloat(timeMatch[1] ?? '0') : 0;
288
+ const hasFail = body.includes('<failure') || body.includes('<error');
289
+ testCases.push({
290
+ name,
291
+ classname,
292
+ time,
293
+ status: hasFail ? 'fail' : 'pass',
294
+ });
295
+ }
296
+ const totalTests = testCases.length;
297
+ const passed = testCases.filter((t) => t.status === 'pass').length;
298
+ const failed = totalTests - passed;
299
+ const totalTime = testCases.reduce((sum, t) => sum + t.time, 0);
300
+ const fileList = {
301
+ columns: ['Name', 'Class', 'Time', 'Status'],
302
+ rows: testCases.map((t) => [
303
+ t.name,
304
+ t.classname,
305
+ `${t.time.toFixed(3)}s`,
306
+ t.status === 'pass' ? 'PASS' : 'FAIL',
307
+ ]),
308
+ };
309
+ const coverageDist = {
310
+ Passed: passed,
311
+ Failed: failed,
312
+ };
313
+ const lowCoverage = testCases
314
+ .filter((t) => t.status === 'fail')
315
+ .map((t) => ({
316
+ text: `FAIL: ${t.classname} > ${t.name}`,
317
+ type: 'error',
318
+ }));
319
+ return {
320
+ layout: junitLayout,
321
+ result: {
322
+ totalCoverage: totalTests,
323
+ totalFiles: passed,
324
+ coveredLines: failed,
325
+ uncoveredLines: `${totalTime.toFixed(2)}s`,
326
+ fileList,
327
+ coverageDist,
328
+ lowCoverage,
329
+ },
330
+ };
331
+ }
332
+ // ─── Preset ──────────────────────────────────────────────────────────────────
333
+ export function coveragePreset(filePath) {
334
+ const resolvedPath = resolve(filePath);
335
+ let content;
336
+ try {
337
+ content = readFileSync(resolvedPath, 'utf-8');
338
+ }
339
+ catch {
340
+ throw new Error(`[tuimon] Could not read coverage file: ${resolvedPath}. Make sure the file exists and is readable.`);
341
+ }
342
+ const format = detectFormat(content, resolvedPath);
343
+ if (format === 'junit') {
344
+ const { layout, result } = parseJunit(content);
345
+ return {
346
+ layout,
347
+ data: () => result,
348
+ };
349
+ }
350
+ const data = () => {
351
+ switch (format) {
352
+ case 'istanbul-summary':
353
+ return parseIstanbulSummary(content);
354
+ case 'istanbul-final':
355
+ return parseIstanbulFinal(content);
356
+ case 'lcov':
357
+ return parseLcov(content);
358
+ }
359
+ };
360
+ return { layout: coverageLayout, data };
361
+ }
362
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/quick/presets/coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PresetResult } from './types.js';
2
+ export declare function depsPreset(filePath: string): PresetResult;
3
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/deps.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAuH9C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAyIzD"}
@@ -0,0 +1,194 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ function extractPackageName(path) {
4
+ // node_modules/@scope/name or node_modules/name
5
+ const match = path.match(/node_modules\/(.+)$/);
6
+ if (match !== null)
7
+ return match[1] ?? path;
8
+ return path;
9
+ }
10
+ function collectDepsV3(packages, pkgJson) {
11
+ const allDeps = [];
12
+ const dependedOnCount = new Map();
13
+ const versionMap = new Map();
14
+ const devDepNames = new Set(Object.keys(pkgJson.devDependencies ?? {}));
15
+ for (const [path, entry] of Object.entries(packages)) {
16
+ if (path === '')
17
+ continue; // root package
18
+ const name = extractPackageName(path);
19
+ const version = entry.version ?? 'unknown';
20
+ const isDev = entry.dev === true || devDepNames.has(name);
21
+ allDeps.push({ name, version, dev: isDev });
22
+ const versions = versionMap.get(name) ?? new Set();
23
+ versions.add(version);
24
+ versionMap.set(name, versions);
25
+ // Count what this package depends on
26
+ const deps = { ...entry.dependencies, ...entry.requires };
27
+ for (const depName of Object.keys(deps)) {
28
+ dependedOnCount.set(depName, (dependedOnCount.get(depName) ?? 0) + 1);
29
+ }
30
+ }
31
+ return { allDeps, dependedOnCount, versionMap };
32
+ }
33
+ function collectDepsV2(dependencies, pkgJson) {
34
+ const allDeps = [];
35
+ const dependedOnCount = new Map();
36
+ const versionMap = new Map();
37
+ const devDepNames = new Set(Object.keys(pkgJson.devDependencies ?? {}));
38
+ function walk(deps, parentName) {
39
+ for (const [name, entry] of Object.entries(deps)) {
40
+ const version = entry.version ?? 'unknown';
41
+ const isDev = entry.dev === true || devDepNames.has(name);
42
+ allDeps.push({ name, version, dev: isDev });
43
+ const versions = versionMap.get(name) ?? new Set();
44
+ versions.add(version);
45
+ versionMap.set(name, versions);
46
+ if (parentName !== undefined) {
47
+ dependedOnCount.set(name, (dependedOnCount.get(name) ?? 0) + 1);
48
+ }
49
+ // Count requires
50
+ if (entry.requires !== undefined) {
51
+ for (const depName of Object.keys(entry.requires)) {
52
+ dependedOnCount.set(depName, (dependedOnCount.get(depName) ?? 0) + 1);
53
+ }
54
+ }
55
+ // Nested dependencies
56
+ if (entry.dependencies !== undefined) {
57
+ walk(entry.dependencies, name);
58
+ }
59
+ }
60
+ }
61
+ walk(dependencies);
62
+ return { allDeps, dependedOnCount, versionMap };
63
+ }
64
+ export function depsPreset(filePath) {
65
+ const layout = {
66
+ title: 'Dependencies',
67
+ stats: [
68
+ { id: 'totalDeps', label: 'Total Dependencies', type: 'stat' },
69
+ { id: 'directDeps', label: 'Direct', type: 'stat' },
70
+ { id: 'devDeps', label: 'Dev Dependencies', type: 'stat' },
71
+ { id: 'duplicates', label: 'Duplicates', type: 'stat' },
72
+ ],
73
+ panels: [
74
+ { id: 'depList', label: 'All Dependencies', type: 'table', span: 2 },
75
+ { id: 'topByDeps', label: 'Most Depended On', type: 'bar' },
76
+ { id: 'versionConflicts', label: 'Version Conflicts', type: 'event-log' },
77
+ ],
78
+ };
79
+ const data = () => {
80
+ let lockContent;
81
+ try {
82
+ lockContent = readFileSync(filePath, 'utf-8');
83
+ }
84
+ catch {
85
+ throw new Error(`[tuimon] Could not read lock file: ${filePath}. Make sure the file exists and is readable.`);
86
+ }
87
+ let lockData;
88
+ try {
89
+ lockData = JSON.parse(lockContent);
90
+ }
91
+ catch {
92
+ throw new Error(`[tuimon] Could not parse lock file: ${filePath}. Make sure it is valid JSON.`);
93
+ }
94
+ // Read package.json from same directory
95
+ const dir = dirname(filePath);
96
+ const pkgJsonPath = join(dir, 'package.json');
97
+ let pkgJson;
98
+ try {
99
+ pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
100
+ }
101
+ catch {
102
+ throw new Error(`[tuimon] Could not read package.json at ${pkgJsonPath}. Make sure it exists alongside the lock file.`);
103
+ }
104
+ const lockVersion = lockData.lockfileVersion ?? 1;
105
+ let allDeps;
106
+ let dependedOnCount;
107
+ let versionMap;
108
+ if (lockVersion >= 3 && lockData.packages !== undefined) {
109
+ const result = collectDepsV3(lockData.packages, pkgJson);
110
+ allDeps = result.allDeps;
111
+ dependedOnCount = result.dependedOnCount;
112
+ versionMap = result.versionMap;
113
+ }
114
+ else if (lockData.packages !== undefined) {
115
+ // lockfileVersion 2 also has packages
116
+ const result = collectDepsV3(lockData.packages, pkgJson);
117
+ allDeps = result.allDeps;
118
+ dependedOnCount = result.dependedOnCount;
119
+ versionMap = result.versionMap;
120
+ }
121
+ else if (lockData.dependencies !== undefined) {
122
+ const result = collectDepsV2(lockData.dependencies, pkgJson);
123
+ allDeps = result.allDeps;
124
+ dependedOnCount = result.dependedOnCount;
125
+ versionMap = result.versionMap;
126
+ }
127
+ else {
128
+ throw new Error(`[tuimon] Unsupported lock file format in ${filePath}. Expected lockfileVersion 2 or 3 with packages or dependencies.`);
129
+ }
130
+ // Unique package names
131
+ const uniqueNames = new Set(allDeps.map((d) => d.name));
132
+ const totalDeps = uniqueNames.size;
133
+ // Direct deps count
134
+ const directDepNames = [
135
+ ...Object.keys(pkgJson.dependencies ?? {}),
136
+ ...Object.keys(pkgJson.devDependencies ?? {}),
137
+ ];
138
+ const directDeps = directDepNames.length;
139
+ // Dev deps count
140
+ const devDeps = Object.keys(pkgJson.devDependencies ?? {}).length;
141
+ // Duplicates: packages with multiple versions
142
+ let duplicates = 0;
143
+ for (const [, versions] of versionMap) {
144
+ if (versions.size > 1)
145
+ duplicates++;
146
+ }
147
+ // Deduplicate for table — keep unique name+version combos
148
+ const seen = new Set();
149
+ const uniqueDeps = [];
150
+ const sorted = [...allDeps].sort((a, b) => a.name.localeCompare(b.name));
151
+ for (const dep of sorted) {
152
+ const key = `${dep.name}@${dep.version}`;
153
+ if (!seen.has(key)) {
154
+ seen.add(key);
155
+ uniqueDeps.push(dep);
156
+ }
157
+ }
158
+ // Table data
159
+ const depList = {
160
+ columns: ['Name', 'Version', 'Dev'],
161
+ rows: uniqueDeps.map((d) => [d.name, d.version, d.dev ? 'Yes' : 'No']),
162
+ };
163
+ // Top by dependents (most depended on)
164
+ const sortedByCount = [...dependedOnCount.entries()]
165
+ .sort((a, b) => b[1] - a[1])
166
+ .slice(0, 10);
167
+ const topByDeps = {};
168
+ for (const [name, count] of sortedByCount) {
169
+ topByDeps[name] = count;
170
+ }
171
+ // Version conflicts
172
+ const versionConflicts = [];
173
+ for (const [name, versions] of versionMap) {
174
+ if (versions.size > 1) {
175
+ const versionList = [...versions].join(', ');
176
+ versionConflicts.push({
177
+ text: `${name}: ${versionList}`,
178
+ type: 'warning',
179
+ });
180
+ }
181
+ }
182
+ return {
183
+ totalDeps,
184
+ directDeps,
185
+ devDeps,
186
+ duplicates,
187
+ depList,
188
+ topByDeps,
189
+ versionConflicts,
190
+ };
191
+ };
192
+ return { layout, data };
193
+ }
194
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/quick/presets/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAA;AAiCnD,SAAS,kBAAkB,CAAC,IAAY;IACtC,gDAAgD;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC3C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,aAAa,CACpB,QAAuC,EACvC,OAAoB;IAMpB,MAAM,OAAO,GAA2D,EAAE,CAAA;IAC1E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAA;IACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAA;IAEvE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,EAAE;YAAE,SAAQ,CAAC,eAAe;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAA;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEzD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAE3C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAA;QAC1D,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAE9B,qCAAqC;QACrC,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QACzD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA;AACjD,CAAC;AAED,SAAS,aAAa,CACpB,YAAuC,EACvC,OAAoB;IAMpB,MAAM,OAAO,GAA2D,EAAE,CAAA;IAC1E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAA;IACjD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAA;IAEvE,SAAS,IAAI,CAAC,IAA+B,EAAE,UAAmB;QAChE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAA;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAEzD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;YAE3C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAA;YAC1D,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACrB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YAE9B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACjE,CAAC;YAED,iBAAiB;YACjB,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClD,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACvE,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,CAAA;IAClB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,MAAM,GAAiB;QAC3B,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9D,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;YACnD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1D,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;SACxD;QACD,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;YACpE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE;YAC3D,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE;SAC1E;KACF,CAAA;IAED,MAAM,IAAI,GAAG,GAA4B,EAAE;QACzC,IAAI,WAAmB,CAAA;QACvB,IAAI,CAAC;YACH,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,8CAA8C,CAAC,CAAA;QAC/G,CAAC;QAED,IAAI,QAAiC,CAAA;QACrC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAA;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,+BAA+B,CAAC,CAAA;QACjG,CAAC;QAED,wCAAwC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7C,IAAI,OAAoB,CAAA;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAgB,CAAA;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,2CAA2C,WAAW,gDAAgD,CAAC,CAAA;QACzH,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAA;QACjD,IAAI,OAA+D,CAAA;QACnE,IAAI,eAAoC,CAAA;QACxC,IAAI,UAAoC,CAAA;QAExC,IAAI,WAAW,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACxD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;YACxB,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;YACxC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QAChC,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3C,sCAAsC;YACtC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACxD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;YACxB,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;YACxC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QAChC,CAAC;aAAM,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;YAC5D,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;YACxB,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;YACxC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,kEAAkE,CAAC,CAAA;QACzI,CAAC;QAED,uBAAuB;QACvB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAA;QAElC,oBAAoB;QACpB,MAAM,cAAc,GAAG;YACrB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;YAC1C,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;SAC9C,CAAA;QACD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAA;QAExC,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;QAEjE,8CAA8C;QAC9C,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;YACtC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;gBAAE,UAAU,EAAE,CAAA;QACrC,CAAC;QAED,0DAA0D;QAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,MAAM,UAAU,GAA2D,EAAE,CAAA;QAC7E,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACxE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;QAED,aAAa;QACb,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC;YACnC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACvE,CAAA;QAED,uCAAuC;QACvC,MAAM,aAAa,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACf,MAAM,SAAS,GAA2B,EAAE,CAAA;QAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QACzB,CAAC;QAED,oBAAoB;QACpB,MAAM,gBAAgB,GAA6C,EAAE,CAAA;QACrE,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;YAC1C,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5C,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,GAAG,IAAI,KAAK,WAAW,EAAE;oBAC/B,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS;YACT,UAAU;YACV,OAAO;YACP,UAAU;YACV,OAAO;YACP,SAAS;YACT,gBAAgB;SACjB,CAAA;IACH,CAAC,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PresetResult } from './types.js';
2
+ export declare function dockerPreset(): PresetResult;
3
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/docker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAuC9C,wBAAgB,YAAY,IAAI,YAAY,CAqF3C"}