sublyzer-snapshot 0.3.0 → 0.4.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.
Files changed (71) hide show
  1. package/README.md +114 -193
  2. package/dist/cli.js +83 -38
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/ci.d.ts.map +1 -1
  5. package/dist/commands/ci.js +15 -14
  6. package/dist/commands/ci.js.map +1 -1
  7. package/dist/commands/compare.d.ts +1 -0
  8. package/dist/commands/compare.d.ts.map +1 -1
  9. package/dist/commands/compare.js +14 -8
  10. package/dist/commands/compare.js.map +1 -1
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +47 -45
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/init.d.ts +2 -0
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +70 -28
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/open.d.ts.map +1 -1
  19. package/dist/commands/open.js +6 -1
  20. package/dist/commands/open.js.map +1 -1
  21. package/dist/commands/pull.d.ts.map +1 -1
  22. package/dist/commands/pull.js +4 -1
  23. package/dist/commands/pull.js.map +1 -1
  24. package/dist/commands/report.d.ts +1 -0
  25. package/dist/commands/report.d.ts.map +1 -1
  26. package/dist/commands/report.js +19 -19
  27. package/dist/commands/report.js.map +1 -1
  28. package/dist/commands/run.d.ts +5 -12
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js +12 -90
  31. package/dist/commands/run.js.map +1 -1
  32. package/dist/commands/scan.d.ts +13 -0
  33. package/dist/commands/scan.d.ts.map +1 -0
  34. package/dist/commands/scan.js +17 -0
  35. package/dist/commands/scan.js.map +1 -0
  36. package/dist/commands/status.d.ts.map +1 -1
  37. package/dist/commands/status.js +31 -22
  38. package/dist/commands/status.js.map +1 -1
  39. package/dist/config.d.ts +17 -5
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +27 -4
  42. package/dist/config.js.map +1 -1
  43. package/dist/constants.d.ts +4 -1
  44. package/dist/constants.d.ts.map +1 -1
  45. package/dist/constants.js +3 -1
  46. package/dist/constants.js.map +1 -1
  47. package/dist/detect/scan-target.d.ts +13 -0
  48. package/dist/detect/scan-target.d.ts.map +1 -0
  49. package/dist/detect/scan-target.js +95 -0
  50. package/dist/detect/scan-target.js.map +1 -0
  51. package/dist/report/markdown.d.ts +1 -1
  52. package/dist/report/markdown.d.ts.map +1 -1
  53. package/dist/report/markdown.js +5 -0
  54. package/dist/report/markdown.js.map +1 -1
  55. package/dist/scan/bundle-size.d.ts +12 -0
  56. package/dist/scan/bundle-size.d.ts.map +1 -0
  57. package/dist/scan/bundle-size.js +50 -0
  58. package/dist/scan/bundle-size.js.map +1 -0
  59. package/dist/scan/execute.d.ts +28 -0
  60. package/dist/scan/execute.d.ts.map +1 -0
  61. package/dist/scan/execute.js +135 -0
  62. package/dist/scan/execute.js.map +1 -0
  63. package/dist/scan/history.d.ts +5 -5
  64. package/dist/scan/history.d.ts.map +1 -1
  65. package/dist/scan/history.js +15 -15
  66. package/dist/scan/history.js.map +1 -1
  67. package/dist/scan/snapshot.d.ts +8 -0
  68. package/dist/scan/snapshot.d.ts.map +1 -1
  69. package/dist/scan/snapshot.js +37 -9
  70. package/dist/scan/snapshot.js.map +1 -1
  71. package/package.json +10 -8
@@ -0,0 +1,95 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { detectStack } from './stack.js';
4
+ import { detectWorkspaces } from './workspaces.js';
5
+ const COMMON_APP_DIRS = [
6
+ 'frontend',
7
+ 'backend',
8
+ 'web',
9
+ 'app',
10
+ 'client',
11
+ 'server',
12
+ 'api',
13
+ 'apps/web',
14
+ 'apps/frontend',
15
+ 'apps/api',
16
+ 'packages/web',
17
+ 'packages/app',
18
+ 'packages/frontend',
19
+ ];
20
+ const STACK_SCORE = {
21
+ nextjs: 100,
22
+ nestjs: 95,
23
+ sveltekit: 90,
24
+ nuxt: 90,
25
+ remix: 85,
26
+ express: 80,
27
+ fastify: 80,
28
+ react: 60,
29
+ vue: 60,
30
+ node: 30,
31
+ unknown: 0,
32
+ };
33
+ function scoreTarget(root) {
34
+ const stack = detectStack(root);
35
+ let score = STACK_SCORE[stack.id] ?? 20;
36
+ const pkgPath = path.join(root, 'package.json');
37
+ if (fs.existsSync(pkgPath)) {
38
+ try {
39
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
40
+ const depCount = Object.keys(pkg.dependencies || {}).length + Object.keys(pkg.devDependencies || {}).length;
41
+ score += Math.min(25, depCount);
42
+ }
43
+ catch {
44
+ /* ignore */
45
+ }
46
+ }
47
+ else {
48
+ score -= 50;
49
+ }
50
+ return { root, reason: 'candidate', stack, score };
51
+ }
52
+ function listCandidateRoots(base) {
53
+ const candidates = new Set([base]);
54
+ const ws = detectWorkspaces(base);
55
+ for (const pkg of ws.packages) {
56
+ candidates.add(path.join(base, pkg === '.' ? '' : pkg));
57
+ }
58
+ for (const rel of COMMON_APP_DIRS) {
59
+ const full = path.join(base, rel);
60
+ if (fs.existsSync(path.join(full, 'package.json')))
61
+ candidates.add(full);
62
+ }
63
+ return [...candidates].filter((r) => fs.existsSync(r));
64
+ }
65
+ /**
66
+ * Pick the best directory to scan — useful for monorepos where cwd is a meta root.
67
+ */
68
+ export function resolveScanTarget(base = process.cwd(), explicitPath) {
69
+ if (explicitPath) {
70
+ const root = path.resolve(base, explicitPath);
71
+ if (!fs.existsSync(root))
72
+ throw new Error(`Path not found: ${root}`);
73
+ return { ...scoreTarget(root), reason: 'explicit --path' };
74
+ }
75
+ const candidates = listCandidateRoots(base);
76
+ const scored = candidates.map((root) => scoreTarget(root)).sort((a, b) => b.score - a.score);
77
+ const best = scored[0];
78
+ const cwdTarget = scored.find((t) => path.resolve(t.root) === path.resolve(base));
79
+ if (cwdTarget && cwdTarget.score >= (best?.score ?? 0) - 5) {
80
+ return { ...cwdTarget, reason: 'current directory' };
81
+ }
82
+ if (best && best.score > 35 && candidates.length > 1) {
83
+ const rel = path.relative(base, best.root) || '.';
84
+ return { ...best, reason: `auto-selected (${rel})` };
85
+ }
86
+ return { ...(cwdTarget || best || scoreTarget(base)), reason: 'current directory' };
87
+ }
88
+ export function findMonorepoScanHints(base = process.cwd()) {
89
+ return listCandidateRoots(base)
90
+ .map((root) => scoreTarget(root))
91
+ .filter((t) => t.score > 35)
92
+ .sort((a, b) => b.score - a.score)
93
+ .slice(0, 8);
94
+ }
95
+ //# sourceMappingURL=scan-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-target.js","sourceRoot":"","sources":["../../src/detect/scan-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AASnD,MAAM,eAAe,GAAG;IACtB,UAAU;IACV,SAAS;IACT,KAAK;IACL,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,UAAU;IACV,eAAe;IACf,UAAU;IACV,cAAc;IACd,cAAc;IACd,mBAAmB;CACpB,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAChD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAGtD,CAAC;YACF,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC7F,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,EAAE,CAAC;IACd,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC9B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,YAAqB;IAC3E,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAElF,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAClD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,kBAAkB,GAAG,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IACxD,OAAO,kBAAkB,CAAC,IAAI,CAAC;SAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { SnapshotDiff } from '../scan/history.js';
2
2
  import { type HealthScore } from '../scan/health-score.js';
3
3
  import type { ProjectSnapshot } from '../scan/snapshot.js';
4
- export declare function renderMarkdownReport(snapshot: ProjectSnapshot, health: HealthScore, diff?: SnapshotDiff | null, dashboardUrl?: string): string;
4
+ export declare function renderMarkdownReport(snapshot: ProjectSnapshot, health: HealthScore, diff?: SnapshotDiff | null, dashboardUrl?: string | null): string;
5
5
  //# sourceMappingURL=markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/report/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAsFR"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/report/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,EAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CA0FR"}
@@ -5,6 +5,8 @@ export function renderMarkdownReport(snapshot, health, diff, dashboardUrl) {
5
5
  lines.push('');
6
6
  lines.push(`**Generated:** ${snapshot.scannedAt} `);
7
7
  lines.push(`**Stack:** ${snapshot.stack.label} `);
8
+ if (snapshot.scanRoot)
9
+ lines.push(`**Scan root:** \`${snapshot.scanRoot}\` `);
8
10
  lines.push(`**Health:** ${health.score}/100 (grade ${health.grade}) `);
9
11
  if (dashboardUrl)
10
12
  lines.push(`**Dashboard:** ${dashboardUrl} `);
@@ -19,6 +21,9 @@ export function renderMarkdownReport(snapshot, health, diff, dashboardUrl) {
19
21
  if (snapshot.outdated?.ran) {
20
22
  lines.push(`| Outdated packages | ${snapshot.outdated.total} (${snapshot.outdated.majorCount} major) |`);
21
23
  }
24
+ if (snapshot.bundle?.scanned) {
25
+ lines.push(`| Build output | ${snapshot.bundle.totalMb} MB |`);
26
+ }
22
27
  if (snapshot.git.available) {
23
28
  lines.push(`| Git | \`${snapshot.git.branch}@${snapshot.git.commit}\`${snapshot.git.dirty ? ' *(dirty)*' : ''} |`);
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/report/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/report/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type BundleSizeInfo = {
2
+ scanned: boolean;
3
+ totalBytes: number;
4
+ totalMb: number;
5
+ folders: {
6
+ name: string;
7
+ bytes: number;
8
+ mb: number;
9
+ }[];
10
+ };
11
+ export declare function detectBundleSizes(root?: string): BundleSizeInfo;
12
+ //# sourceMappingURL=bundle-size.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-size.d.ts","sourceRoot":"","sources":["../../src/scan/bundle-size.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxD,CAAC;AA0BF,wBAAgB,iBAAiB,CAAC,IAAI,SAAgB,GAAG,cAAc,CAiBtE"}
@@ -0,0 +1,50 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ const OUTPUT_DIRS = ['dist', 'build', '.next', 'out', '.output', 'coverage'];
4
+ function dirSize(dir, maxDepth = 4, depth = 0) {
5
+ if (depth > maxDepth)
6
+ return 0;
7
+ let total = 0;
8
+ let entries;
9
+ try {
10
+ entries = fs.readdirSync(dir, { withFileTypes: true });
11
+ }
12
+ catch {
13
+ return 0;
14
+ }
15
+ for (const ent of entries) {
16
+ if (ent.name === 'node_modules')
17
+ continue;
18
+ const full = path.join(dir, ent.name);
19
+ try {
20
+ if (ent.isDirectory())
21
+ total += dirSize(full, maxDepth, depth + 1);
22
+ else if (ent.isFile())
23
+ total += fs.statSync(full).size;
24
+ }
25
+ catch {
26
+ /* ignore */
27
+ }
28
+ }
29
+ return total;
30
+ }
31
+ export function detectBundleSizes(root = process.cwd()) {
32
+ const folders = [];
33
+ for (const name of OUTPUT_DIRS) {
34
+ const full = path.join(root, name);
35
+ if (!fs.existsSync(full))
36
+ continue;
37
+ const bytes = dirSize(full);
38
+ if (bytes > 0) {
39
+ folders.push({ name, bytes, mb: Math.round((bytes / 1024 / 1024) * 10) / 10 });
40
+ }
41
+ }
42
+ const totalBytes = folders.reduce((s, f) => s + f.bytes, 0);
43
+ return {
44
+ scanned: folders.length > 0,
45
+ totalBytes,
46
+ totalMb: Math.round((totalBytes / 1024 / 1024) * 10) / 10,
47
+ folders: folders.sort((a, b) => b.bytes - a.bytes),
48
+ };
49
+ }
50
+ //# sourceMappingURL=bundle-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-size.js","sourceRoot":"","sources":["../../src/scan/bundle-size.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AASlC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAE7E,SAAS,OAAO,CAAC,GAAW,EAAE,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;IACnD,IAAI,KAAK,GAAG,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;YAAE,SAAS;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,WAAW,EAAE;gBAAE,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;iBAC9D,IAAI,GAAG,CAAC,MAAM,EAAE;gBAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC3B,UAAU;QACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACzD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { FailOnLevel } from '../constants.js';
2
+ import { diffSnapshots } from './history.js';
3
+ import { type ProjectSnapshot } from './snapshot.js';
4
+ export type ExecuteScanOptions = {
5
+ path?: string;
6
+ skipAudit?: boolean;
7
+ skipOutdated?: boolean;
8
+ skipBundle?: boolean;
9
+ dryRun?: boolean;
10
+ push?: boolean;
11
+ json?: boolean;
12
+ failOn?: FailOnLevel;
13
+ configAnchor?: string;
14
+ };
15
+ export type ExecuteScanResult = {
16
+ success: boolean;
17
+ localOnly: boolean;
18
+ pushed: boolean;
19
+ dryRun: boolean;
20
+ snapshot: ProjectSnapshot;
21
+ eventsSent?: number;
22
+ dashboardUrl?: string | null;
23
+ diff?: ReturnType<typeof diffSnapshots>;
24
+ policyFailed?: boolean;
25
+ scanTargetReason: string;
26
+ };
27
+ export declare function executeScan(opts?: ExecuteScanOptions): Promise<ExecuteScanResult>;
28
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/scan/execute.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAqC,MAAM,cAAc,CAAC;AAEhF,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAuBF,wBAAsB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkH3F"}
@@ -0,0 +1,135 @@
1
+ import { dashboardIntegrationUrl, isCloudConfig, saveConfig, tryLoadConfig, } from '../config.js';
2
+ import { resolveScanTarget } from '../detect/scan-target.js';
3
+ import { pushSnapshot } from '../api/sublyzer.js';
4
+ import { diffSnapshots, loadLastSnapshot, saveScanHistory } from './history.js';
5
+ import { failOnMessage, shouldFailOnVulns } from './policy.js';
6
+ import { buildProjectSnapshot, printLocalSummary, snapshotToCollectItems, } from './snapshot.js';
7
+ import { info, ok, warn } from '../utils/log.js';
8
+ function applyScanToConfig(config, snapshot, eventsSent, pushed) {
9
+ config.updatedAt = new Date().toISOString();
10
+ config.lastScanAt = snapshot.scannedAt;
11
+ config.scanRoot = snapshot.scanRoot;
12
+ config.stack = snapshot.stack.id;
13
+ const lastScan = {
14
+ scannedAt: snapshot.scannedAt,
15
+ scanRoot: snapshot.scanRoot,
16
+ routeCount: snapshot.summary.routeCount,
17
+ dependencyCount: snapshot.dependencyCount,
18
+ vulnerablePackages: snapshot.summary.vulnerablePackages,
19
+ criticalVulns: snapshot.summary.criticalVulns,
20
+ highVulns: snapshot.summary.highVulns,
21
+ eventsSent,
22
+ healthScore: snapshot.health.score,
23
+ healthGrade: snapshot.health.grade,
24
+ pushedToCloud: pushed,
25
+ };
26
+ config.lastScan = lastScan;
27
+ }
28
+ export async function executeScan(opts = {}) {
29
+ const anchor = opts.configAnchor || process.cwd();
30
+ const config = tryLoadConfig(anchor);
31
+ const target = resolveScanTarget(anchor, opts.path);
32
+ if (!opts.json && target.reason.startsWith('auto-selected')) {
33
+ info(`Scan target: ${target.root} (${target.reason})`);
34
+ }
35
+ const previous = loadLastSnapshot(anchor);
36
+ const snapshot = buildProjectSnapshot(anchor, {
37
+ skipAudit: opts.skipAudit,
38
+ skipOutdated: opts.skipOutdated,
39
+ skipBundle: opts.skipBundle,
40
+ target,
41
+ });
42
+ const healthDelta = previous
43
+ ? snapshot.health.score - (previous.health?.score ?? previous.summary?.healthScore ?? 0)
44
+ : null;
45
+ const diff = diffSnapshots(previous, snapshot, healthDelta);
46
+ if (!opts.json && previous && (diff.routesAdded.length || diff.vulnDelta.total !== 0 || healthDelta !== 0)) {
47
+ info('Changes since last scan:');
48
+ if (healthDelta != null && healthDelta !== 0) {
49
+ console.log(` Health: ${healthDelta > 0 ? '+' : ''}${healthDelta} → ${snapshot.health.score}/100`);
50
+ }
51
+ if (diff.vulnDelta.total !== 0) {
52
+ console.log(` Vulnerabilities: ${diff.vulnDelta.total >= 0 ? '+' : ''}${diff.vulnDelta.total}`);
53
+ }
54
+ if (diff.routesAdded.length)
55
+ console.log(` Routes added: ${diff.routesAdded.length}`);
56
+ if (diff.routesRemoved.length)
57
+ console.log(` Routes removed: ${diff.routesRemoved.length}`);
58
+ console.log('');
59
+ }
60
+ if (!opts.json)
61
+ printLocalSummary(snapshot);
62
+ if (opts.failOn && shouldFailOnVulns(snapshot, opts.failOn)) {
63
+ const msg = failOnMessage(snapshot, opts.failOn);
64
+ if (opts.json) {
65
+ return {
66
+ success: false,
67
+ localOnly: true,
68
+ pushed: false,
69
+ dryRun: Boolean(opts.dryRun),
70
+ snapshot,
71
+ diff,
72
+ policyFailed: true,
73
+ scanTargetReason: target.reason,
74
+ };
75
+ }
76
+ throw new Error(msg);
77
+ }
78
+ saveScanHistory(snapshot, anchor);
79
+ const wantPush = opts.push ?? (config ? isCloudConfig(config) : false);
80
+ const canPush = config && isCloudConfig(config) && config.integrationCode && config.apiUrl;
81
+ if (opts.dryRun || !wantPush || !canPush) {
82
+ if (config) {
83
+ applyScanToConfig(config, snapshot, 0, false);
84
+ saveConfig(config, anchor);
85
+ }
86
+ if (!opts.json && !opts.dryRun && !canPush && wantPush) {
87
+ warn('Cloud sync skipped — run: sublyzer-snapshot init --code YOUR_CODE');
88
+ }
89
+ else if (!opts.json && opts.dryRun) {
90
+ warn('Dry run — scan saved locally, nothing pushed.');
91
+ }
92
+ else if (!opts.json && !wantPush) {
93
+ info('Local-only scan saved to .sublyzer/');
94
+ info('Optional cloud sync: npx sublyzer-snapshot init --code YOUR_CODE then run --push');
95
+ }
96
+ return {
97
+ success: true,
98
+ localOnly: !canPush || !wantPush,
99
+ pushed: false,
100
+ dryRun: Boolean(opts.dryRun),
101
+ snapshot,
102
+ diff,
103
+ scanTargetReason: target.reason,
104
+ };
105
+ }
106
+ const items = snapshotToCollectItems(snapshot);
107
+ if (!opts.json)
108
+ info(`Pushing ${items.length} events to ${config.apiUrl}…`);
109
+ const result = await pushSnapshot(config.apiUrl, config.integrationCode, items);
110
+ if (!result.success) {
111
+ throw new Error(result.error || 'Failed to push snapshot');
112
+ }
113
+ const eventsSent = result.processed ?? items.length;
114
+ const dash = dashboardIntegrationUrl(config);
115
+ applyScanToConfig(config, snapshot, eventsSent, true);
116
+ saveConfig(config, anchor);
117
+ if (!opts.json) {
118
+ ok(`Sent ${eventsSent} events`);
119
+ if (dash)
120
+ console.log(` Dashboard: ${dash}`);
121
+ console.log('');
122
+ }
123
+ return {
124
+ success: true,
125
+ localOnly: false,
126
+ pushed: true,
127
+ dryRun: false,
128
+ snapshot,
129
+ eventsSent,
130
+ dashboardUrl: dash,
131
+ diff,
132
+ scanTargetReason: target.reason,
133
+ };
134
+ }
135
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/scan/execute.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type { ProjectSnapshot } from './snapshot.js';
2
- export declare function lastSnapshotPath(root: string): string;
3
- export declare function historyDir(root: string): string;
4
- export declare function saveScanHistory(snapshot: ProjectSnapshot, root?: string): void;
5
- export declare function loadLastSnapshot(root?: string): ProjectSnapshot | null;
6
- export declare function loadPreviousSnapshot(root?: string): ProjectSnapshot | null;
2
+ export declare function lastSnapshotPath(anchor: string): string;
3
+ export declare function historyDir(anchor: string): string;
4
+ export declare function saveScanHistory(snapshot: ProjectSnapshot, anchor: string): void;
5
+ export declare function loadLastSnapshot(anchor: string): ProjectSnapshot | null;
6
+ export declare function loadPreviousSnapshot(anchor: string): ProjectSnapshot | null;
7
7
  export type SnapshotDiff = {
8
8
  routesAdded: string[];
9
9
  routesRemoved: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/scan/history.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,SAAgB,GAAG,IAAI,CAyBrF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,SAAgB,GAAG,eAAe,GAAG,IAAI,CAQ7E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,SAAgB,GAAG,eAAe,GAAG,IAAI,CAcjF;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,OAAO,EAAE,eAAe,EACxB,WAAW,GAAE,MAAM,GAAG,IAAW,GAChC,YAAY,CAiBd"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/scan/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyB/E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAQvE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAc3E;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,OAAO,EAAE,eAAe,EACxB,WAAW,GAAE,MAAM,GAAG,IAAW,GAChC,YAAY,CAiBd"}
@@ -1,21 +1,21 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
- import { CONFIG_DIR, HISTORY_DIR, LAST_SNAPSHOT_FILE, MAX_HISTORY_FILES, } from '../constants.js';
4
- function sublyzerDir(root) {
5
- return path.join(root, CONFIG_DIR);
3
+ import { CONFIG_DIR, HISTORY_DIR, LAST_SNAPSHOT_FILE, MAX_HISTORY_FILES } from '../constants.js';
4
+ function sublyzerDir(anchor) {
5
+ return path.join(anchor, CONFIG_DIR);
6
6
  }
7
- export function lastSnapshotPath(root) {
8
- return path.join(sublyzerDir(root), LAST_SNAPSHOT_FILE);
7
+ export function lastSnapshotPath(anchor) {
8
+ return path.join(sublyzerDir(anchor), LAST_SNAPSHOT_FILE);
9
9
  }
10
- export function historyDir(root) {
11
- return path.join(sublyzerDir(root), HISTORY_DIR);
10
+ export function historyDir(anchor) {
11
+ return path.join(sublyzerDir(anchor), HISTORY_DIR);
12
12
  }
13
- export function saveScanHistory(snapshot, root = process.cwd()) {
14
- const dir = sublyzerDir(root);
13
+ export function saveScanHistory(snapshot, anchor) {
14
+ const dir = sublyzerDir(anchor);
15
15
  fs.mkdirSync(dir, { recursive: true });
16
16
  const payload = JSON.stringify(snapshot, null, 2);
17
- fs.writeFileSync(lastSnapshotPath(root), `${payload}\n`, 'utf8');
18
- const hist = historyDir(root);
17
+ fs.writeFileSync(lastSnapshotPath(anchor), `${payload}\n`, 'utf8');
18
+ const hist = historyDir(anchor);
19
19
  fs.mkdirSync(hist, { recursive: true });
20
20
  const stamp = snapshot.scannedAt.replace(/[:.]/g, '-');
21
21
  fs.writeFileSync(path.join(hist, `${stamp}.json`), `${payload}\n`, 'utf8');
@@ -33,8 +33,8 @@ export function saveScanHistory(snapshot, root = process.cwd()) {
33
33
  }
34
34
  }
35
35
  }
36
- export function loadLastSnapshot(root = process.cwd()) {
37
- const file = lastSnapshotPath(root);
36
+ export function loadLastSnapshot(anchor) {
37
+ const file = lastSnapshotPath(anchor);
38
38
  if (!fs.existsSync(file))
39
39
  return null;
40
40
  try {
@@ -44,8 +44,8 @@ export function loadLastSnapshot(root = process.cwd()) {
44
44
  return null;
45
45
  }
46
46
  }
47
- export function loadPreviousSnapshot(root = process.cwd()) {
48
- const hist = historyDir(root);
47
+ export function loadPreviousSnapshot(anchor) {
48
+ const hist = historyDir(anchor);
49
49
  if (!fs.existsSync(hist))
50
50
  return null;
51
51
  const files = fs
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/scan/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/scan/history.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
+ import type { ScanTarget } from '../detect/scan-target.js';
1
2
  import { type GitInfo } from '../detect/git.js';
2
3
  import { detectEnvFiles } from '../detect/meta.js';
3
4
  import { detectStack, listDependencies } from '../detect/stack.js';
4
5
  import { type WorkspaceInfo } from '../detect/workspaces.js';
6
+ import { type BundleSizeInfo } from './bundle-size.js';
5
7
  import { type HealthScore } from './health-score.js';
6
8
  import { type AuditSummary } from './audit.js';
7
9
  import { type OutdatedSummary } from './outdated.js';
8
10
  export type ProjectSnapshot = {
9
11
  scannedAt: string;
10
12
  projectName: string;
13
+ scanRoot: string;
14
+ scanTargetReason: string;
11
15
  stack: ReturnType<typeof detectStack>;
12
16
  routes: string[];
13
17
  dependencies: ReturnType<typeof listDependencies>;
@@ -18,6 +22,7 @@ export type ProjectSnapshot = {
18
22
  scripts: Record<string, string>;
19
23
  workspaces: WorkspaceInfo;
20
24
  outdated: OutdatedSummary;
25
+ bundle: BundleSizeInfo;
21
26
  audit: AuditSummary;
22
27
  health: HealthScore;
23
28
  summary: {
@@ -29,11 +34,14 @@ export type ProjectSnapshot = {
29
34
  highVulns: number;
30
35
  healthScore: number;
31
36
  healthGrade: HealthScore['grade'];
37
+ bundleMb: number;
32
38
  };
33
39
  };
34
40
  export type BuildSnapshotOptions = {
35
41
  skipAudit?: boolean;
36
42
  skipOutdated?: boolean;
43
+ skipBundle?: boolean;
44
+ target?: ScanTarget;
37
45
  };
38
46
  export declare function buildProjectSnapshot(root?: string, opts?: BuildSnapshotOptions): ProjectSnapshot;
39
47
  export type CollectItem = {
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/scan/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAmC,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;KACnC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,SAAgB,EAAE,IAAI,GAAE,oBAAyB,GAAG,eAAe,CAkD3G;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;IAC3D,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,EAAE,CAoF/E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAsCjE"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/scan/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAmC,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAuC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,SAAgB,EACpB,IAAI,GAAE,oBAAyB,GAC9B,eAAe,CAwDjB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;IAC3D,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,EAAE,CAoG/E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CA4CjE"}