@shipsafe/cli 0.2.5 → 0.3.1

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 (52) hide show
  1. package/README.md +125 -87
  2. package/dist/bin/shipsafe.js +2 -0
  3. package/dist/bin/shipsafe.js.map +1 -1
  4. package/dist/src/claude-md/manager.d.ts.map +1 -1
  5. package/dist/src/claude-md/manager.js +2 -34
  6. package/dist/src/claude-md/manager.js.map +1 -1
  7. package/dist/src/cli/baseline.d.ts +3 -0
  8. package/dist/src/cli/baseline.d.ts.map +1 -0
  9. package/dist/src/cli/baseline.js +67 -0
  10. package/dist/src/cli/baseline.js.map +1 -0
  11. package/dist/src/cli/init.d.ts.map +1 -1
  12. package/dist/src/cli/init.js +1 -7
  13. package/dist/src/cli/init.js.map +1 -1
  14. package/dist/src/cli/scan.d.ts.map +1 -1
  15. package/dist/src/cli/scan.js +21 -3
  16. package/dist/src/cli/scan.js.map +1 -1
  17. package/dist/src/engines/builtin/baseline.d.ts +41 -0
  18. package/dist/src/engines/builtin/baseline.d.ts.map +1 -0
  19. package/dist/src/engines/builtin/baseline.js +83 -0
  20. package/dist/src/engines/builtin/baseline.js.map +1 -0
  21. package/dist/src/engines/builtin/dependencies.d.ts.map +1 -1
  22. package/dist/src/engines/builtin/dependencies.js +7 -1
  23. package/dist/src/engines/builtin/dependencies.js.map +1 -1
  24. package/dist/src/engines/builtin/gitignore.d.ts +33 -0
  25. package/dist/src/engines/builtin/gitignore.d.ts.map +1 -0
  26. package/dist/src/engines/builtin/gitignore.js +83 -0
  27. package/dist/src/engines/builtin/gitignore.js.map +1 -0
  28. package/dist/src/engines/builtin/ignore.d.ts +14 -0
  29. package/dist/src/engines/builtin/ignore.d.ts.map +1 -0
  30. package/dist/src/engines/builtin/ignore.js +114 -0
  31. package/dist/src/engines/builtin/ignore.js.map +1 -0
  32. package/dist/src/engines/builtin/patterns.d.ts.map +1 -1
  33. package/dist/src/engines/builtin/patterns.js +990 -49
  34. package/dist/src/engines/builtin/patterns.js.map +1 -1
  35. package/dist/src/engines/builtin/secrets.d.ts.map +1 -1
  36. package/dist/src/engines/builtin/secrets.js +50 -7
  37. package/dist/src/engines/builtin/secrets.js.map +1 -1
  38. package/dist/src/engines/pattern/gitleaks.js +1 -1
  39. package/dist/src/engines/pattern/gitleaks.js.map +1 -1
  40. package/dist/src/engines/pattern/index.d.ts.map +1 -1
  41. package/dist/src/engines/pattern/index.js +26 -9
  42. package/dist/src/engines/pattern/index.js.map +1 -1
  43. package/dist/src/mcp/tools/scan.d.ts.map +1 -1
  44. package/dist/src/mcp/tools/scan.js +11 -0
  45. package/dist/src/mcp/tools/scan.js.map +1 -1
  46. package/dist/src/scripts/postinstall.d.ts +10 -0
  47. package/dist/src/scripts/postinstall.d.ts.map +1 -0
  48. package/dist/src/scripts/postinstall.js +109 -0
  49. package/dist/src/scripts/postinstall.js.map +1 -0
  50. package/dist/src/types.d.ts +6 -0
  51. package/dist/src/types.d.ts.map +1 -1
  52. package/package.json +2 -1
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ShipSafe Baseline Manager
3
+ *
4
+ * Manages a `.shipsafe-baseline.json` file in the project root.
5
+ * When scanning staged files, findings that already exist in the baseline
6
+ * are suppressed — only NEW findings are reported. This prevents
7
+ * re-flagging the same known issues on every commit.
8
+ */
9
+ import type { Finding } from '../../types.js';
10
+ export declare const BASELINE_FILENAME = ".shipsafe-baseline.json";
11
+ export interface BaselineFinding {
12
+ id: string;
13
+ file: string;
14
+ line: number;
15
+ type: string;
16
+ hash: string;
17
+ }
18
+ export interface BaselineFile {
19
+ version: 1;
20
+ created: string;
21
+ findings: BaselineFinding[];
22
+ }
23
+ /**
24
+ * Computes a stable fingerprint for a finding.
25
+ * Uses id + relative file path + description (NOT line number, since lines shift).
26
+ */
27
+ export declare function computeFindingHash(finding: Finding, projectDir?: string): string;
28
+ /**
29
+ * Reads `.shipsafe-baseline.json` from the project root.
30
+ * Returns an empty baseline if the file doesn't exist or is malformed.
31
+ */
32
+ export declare function loadBaseline(projectDir: string): Promise<BaselineFile>;
33
+ /**
34
+ * Writes findings to `.shipsafe-baseline.json` in the project root.
35
+ */
36
+ export declare function saveBaseline(projectDir: string, findings: Finding[]): Promise<void>;
37
+ /**
38
+ * Returns only findings that do NOT exist in the baseline (compare by hash).
39
+ */
40
+ export declare function filterNewFindings(findings: Finding[], baseline: BaselineFile, projectDir?: string): Finding[];
41
+ //# sourceMappingURL=baseline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI9C,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAOhF;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqB5E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzF;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,EAAE,CAWX"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * ShipSafe Baseline Manager
3
+ *
4
+ * Manages a `.shipsafe-baseline.json` file in the project root.
5
+ * When scanning staged files, findings that already exist in the baseline
6
+ * are suppressed — only NEW findings are reported. This prevents
7
+ * re-flagging the same known issues on every commit.
8
+ */
9
+ import { readFile, writeFile } from 'node:fs/promises';
10
+ import { join, relative, isAbsolute } from 'node:path';
11
+ import { createHash } from 'node:crypto';
12
+ // ── Types ──────────────────────────────────────────────────────────────────────
13
+ export const BASELINE_FILENAME = '.shipsafe-baseline.json';
14
+ // ── Hash ───────────────────────────────────────────────────────────────────────
15
+ /**
16
+ * Computes a stable fingerprint for a finding.
17
+ * Uses id + relative file path + description (NOT line number, since lines shift).
18
+ */
19
+ export function computeFindingHash(finding, projectDir) {
20
+ const filePath = projectDir && isAbsolute(finding.file)
21
+ ? relative(projectDir, finding.file)
22
+ : finding.file;
23
+ const input = `${finding.id}::${filePath}::${finding.description}`;
24
+ return createHash('sha256').update(input).digest('hex').slice(0, 16);
25
+ }
26
+ // ── Load / Save ────────────────────────────────────────────────────────────────
27
+ /**
28
+ * Reads `.shipsafe-baseline.json` from the project root.
29
+ * Returns an empty baseline if the file doesn't exist or is malformed.
30
+ */
31
+ export async function loadBaseline(projectDir) {
32
+ const filePath = join(projectDir, BASELINE_FILENAME);
33
+ try {
34
+ const raw = await readFile(filePath, 'utf-8');
35
+ const parsed = JSON.parse(raw);
36
+ // Basic shape validation
37
+ if (parsed.version === 1 &&
38
+ typeof parsed.created === 'string' &&
39
+ Array.isArray(parsed.findings)) {
40
+ return parsed;
41
+ }
42
+ // Invalid shape — treat as empty
43
+ return { version: 1, created: new Date().toISOString(), findings: [] };
44
+ }
45
+ catch {
46
+ // File not found or JSON parse error — return empty baseline
47
+ return { version: 1, created: new Date().toISOString(), findings: [] };
48
+ }
49
+ }
50
+ /**
51
+ * Writes findings to `.shipsafe-baseline.json` in the project root.
52
+ */
53
+ export async function saveBaseline(projectDir, findings) {
54
+ const filePath = join(projectDir, BASELINE_FILENAME);
55
+ const baselineFindings = findings.map((f) => ({
56
+ id: f.id,
57
+ file: f.file,
58
+ line: f.line,
59
+ type: f.type,
60
+ hash: computeFindingHash(f, projectDir),
61
+ }));
62
+ const baseline = {
63
+ version: 1,
64
+ created: new Date().toISOString(),
65
+ findings: baselineFindings,
66
+ };
67
+ await writeFile(filePath, JSON.stringify(baseline, null, 2) + '\n', 'utf-8');
68
+ }
69
+ // ── Filtering ──────────────────────────────────────────────────────────────────
70
+ /**
71
+ * Returns only findings that do NOT exist in the baseline (compare by hash).
72
+ */
73
+ export function filterNewFindings(findings, baseline, projectDir) {
74
+ if (baseline.findings.length === 0) {
75
+ return findings;
76
+ }
77
+ const baselineHashes = new Set(baseline.findings.map((bf) => bf.hash));
78
+ return findings.filter((f) => {
79
+ const hash = computeFindingHash(f, projectDir);
80
+ return !baselineHashes.has(hash);
81
+ });
82
+ }
83
+ //# sourceMappingURL=baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../../../src/engines/builtin/baseline.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,gBAAgB,CAAC;AAKxD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAwZD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,EAAE,CAAC,CA8DpB;AAID,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CA8BjC"}
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,gBAAgB,CAAC;AAMxD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAwZD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,EAAE,CAAC,CAoEpB;AAID,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CA8BjC"}
@@ -1,6 +1,7 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
2
+ import { join, resolve } from 'node:path';
3
3
  import { editDistance } from '../../mcp/tools/check-package.js';
4
+ import { loadIgnoreFilter } from './ignore.js';
4
5
  // ── Constants ──
5
6
  const POPULAR_PACKAGES = [
6
7
  'react',
@@ -330,6 +331,11 @@ export async function scanDependencies(targetPath) {
330
331
  // No package.json — nothing to scan
331
332
  return [];
332
333
  }
334
+ // Respect .shipsafeignore — if package.json is ignored, skip dependency audit
335
+ const ignoreFilter = await loadIgnoreFilter(resolve(targetPath));
336
+ if (ignoreFilter.isIgnored(packageJsonPath)) {
337
+ return [];
338
+ }
333
339
  const allDeps = {
334
340
  ...pkgJson.dependencies,
335
341
  ...pkgJson.devDependencies,
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/engines/builtin/dependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/engines/builtin/dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * .gitignore-aware file filtering for ShipSafe.
3
+ *
4
+ * Uses `git ls-files` for accuracy — handles nested .gitignore files,
5
+ * negation rules, and global git excludes without manual parsing.
6
+ *
7
+ * Key insight: .env.local is typically in .gitignore. By filtering
8
+ * gitignored files, we automatically stop flagging .env.local secrets —
9
+ * which is the #1 noise complaint.
10
+ */
11
+ export interface GitIgnoreFilter {
12
+ /** Returns true if the file is gitignored (should be skipped). */
13
+ isGitIgnored(filePath: string): boolean;
14
+ /** Returns true if the file is untracked (not yet git-added, but not ignored). */
15
+ isUntracked(filePath: string): boolean;
16
+ }
17
+ /**
18
+ * Load gitignore filter for a project directory.
19
+ *
20
+ * Runs two git commands to determine:
21
+ * 1. Which files are gitignored (ignored + untracked)
22
+ * 2. Which files are simply untracked (not ignored, just not `git add`ed)
23
+ *
24
+ * Results are cached for the duration of a scan (keyed by resolved path).
25
+ * Returns a no-op filter for non-git directories.
26
+ */
27
+ export declare function loadGitIgnoreFilter(projectDir: string): Promise<GitIgnoreFilter>;
28
+ /**
29
+ * Clear the gitignore filter cache.
30
+ * Call between scans if needed, or let it persist for the CLI lifetime.
31
+ */
32
+ export declare function clearGitIgnoreCache(): void;
33
+ //# sourceMappingURL=gitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,kFAAkF;IAClF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC;AAoCD;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAqCtF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * .gitignore-aware file filtering for ShipSafe.
3
+ *
4
+ * Uses `git ls-files` for accuracy — handles nested .gitignore files,
5
+ * negation rules, and global git excludes without manual parsing.
6
+ *
7
+ * Key insight: .env.local is typically in .gitignore. By filtering
8
+ * gitignored files, we automatically stop flagging .env.local secrets —
9
+ * which is the #1 noise complaint.
10
+ */
11
+ import { execFile } from 'node:child_process';
12
+ import { resolve } from 'node:path';
13
+ // ── Cache ──
14
+ const filterCache = new Map();
15
+ // ── Helpers ──
16
+ /**
17
+ * Run a git command and return stdout lines.
18
+ * Resolves to an empty array on any error (not a git repo, git not installed, etc.).
19
+ */
20
+ function gitLsFiles(cwd, args) {
21
+ return new Promise((res) => {
22
+ execFile('git', ['ls-files', ...args], { cwd, maxBuffer: 10 * 1024 * 1024 }, (error, stdout) => {
23
+ if (error) {
24
+ // Not a git repo, git not installed, or other error — silent fallback
25
+ res([]);
26
+ return;
27
+ }
28
+ const lines = stdout
29
+ .split('\n')
30
+ .map((l) => l.trim())
31
+ .filter((l) => l.length > 0);
32
+ res(lines);
33
+ });
34
+ });
35
+ }
36
+ // ── Public API ──
37
+ /**
38
+ * Load gitignore filter for a project directory.
39
+ *
40
+ * Runs two git commands to determine:
41
+ * 1. Which files are gitignored (ignored + untracked)
42
+ * 2. Which files are simply untracked (not ignored, just not `git add`ed)
43
+ *
44
+ * Results are cached for the duration of a scan (keyed by resolved path).
45
+ * Returns a no-op filter for non-git directories.
46
+ */
47
+ export async function loadGitIgnoreFilter(projectDir) {
48
+ const resolvedDir = resolve(projectDir);
49
+ // Check cache first — avoids running git twice for patterns + secrets scans
50
+ const cached = filterCache.get(resolvedDir);
51
+ if (cached)
52
+ return cached;
53
+ // Run both git commands in parallel
54
+ const [ignoredFiles, untrackedFiles] = await Promise.all([
55
+ // --others: only untracked files; --ignored: only ignored ones; --exclude-standard: use .gitignore + global excludes
56
+ gitLsFiles(resolvedDir, ['--others', '--ignored', '--exclude-standard']),
57
+ // --others: untracked files; --exclude-standard: respect .gitignore
58
+ // This returns files that are untracked AND not ignored
59
+ gitLsFiles(resolvedDir, ['--others', '--exclude-standard']),
60
+ ]);
61
+ // Build Sets of resolved absolute paths for O(1) lookups
62
+ const ignoredSet = new Set(ignoredFiles.map((f) => resolve(resolvedDir, f)));
63
+ const untrackedSet = new Set(untrackedFiles.map((f) => resolve(resolvedDir, f)));
64
+ const filter = {
65
+ isGitIgnored(filePath) {
66
+ return ignoredSet.has(resolve(filePath));
67
+ },
68
+ isUntracked(filePath) {
69
+ return untrackedSet.has(resolve(filePath));
70
+ },
71
+ };
72
+ // Cache for this scan session
73
+ filterCache.set(resolvedDir, filter);
74
+ return filter;
75
+ }
76
+ /**
77
+ * Clear the gitignore filter cache.
78
+ * Call between scans if needed, or let it persist for the CLI lifetime.
79
+ */
80
+ export function clearGitIgnoreCache() {
81
+ filterCache.clear();
82
+ }
83
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../../../src/engines/builtin/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,cAAc;AAEd,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvD,gBAAgB;AAEhB;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAW,EAAE,IAAc;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,QAAQ,CACN,KAAK,EACL,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EACrB,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EACpC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,sEAAsE;gBACtE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACR,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,MAAM;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,KAAK,CAAC,CAAC;QACb,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mBAAmB;AAEnB;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExC,4EAA4E;IAC5E,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,oCAAoC;IACpC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvD,qHAAqH;QACrH,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACxE,oEAAoE;QACpE,wDAAwD;QACxD,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;KAC5D,CAAC,CAAC;IAEH,yDAAyD;IACzD,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CACjD,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CACnD,CAAC;IAEF,MAAM,MAAM,GAAoB;QAC9B,YAAY,CAAC,QAAgB;YAC3B,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,WAAW,CAAC,QAAgB;YAC1B,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IAEF,8BAA8B;IAC9B,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * .shipsafeignore support — gitignore-style file exclusion.
3
+ * Reads .shipsafeignore from the project root and filters file paths.
4
+ */
5
+ export interface IgnoreFilter {
6
+ /** Returns true if the file should be ignored (skipped). */
7
+ isIgnored(filePath: string): boolean;
8
+ }
9
+ /**
10
+ * Load .shipsafeignore from a project directory and return a filter function.
11
+ * Returns a no-op filter if the file doesn't exist.
12
+ */
13
+ export declare function loadIgnoreFilter(projectDir: string): Promise<IgnoreFilter>;
14
+ //# sourceMappingURL=ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/ignore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAiFD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA8BhF"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * .shipsafeignore support — gitignore-style file exclusion.
3
+ * Reads .shipsafeignore from the project root and filters file paths.
4
+ */
5
+ import { readFile } from 'node:fs/promises';
6
+ import { join, relative } from 'node:path';
7
+ /**
8
+ * Parse a .shipsafeignore file into glob patterns.
9
+ * Supports: file paths, directory paths, glob patterns, comments (#), negation (!).
10
+ */
11
+ function parseIgnorePatterns(content) {
12
+ const rules = [];
13
+ for (let line of content.split('\n')) {
14
+ line = line.trim();
15
+ // Skip empty lines and comments
16
+ if (!line || line.startsWith('#'))
17
+ continue;
18
+ let negated = false;
19
+ if (line.startsWith('!')) {
20
+ negated = true;
21
+ line = line.slice(1);
22
+ }
23
+ // Convert glob pattern to regex
24
+ const regex = globToRegex(line);
25
+ rules.push({ pattern: regex, negated });
26
+ }
27
+ return rules;
28
+ }
29
+ function globToRegex(glob) {
30
+ let regex = '';
31
+ let i = 0;
32
+ // If pattern starts with /, anchor to root
33
+ const anchored = glob.startsWith('/');
34
+ if (anchored)
35
+ glob = glob.slice(1);
36
+ // If pattern ends with /, match directory (and everything inside)
37
+ const dirOnly = glob.endsWith('/');
38
+ if (dirOnly)
39
+ glob = glob.slice(0, -1);
40
+ while (i < glob.length) {
41
+ const ch = glob[i];
42
+ if (ch === '*') {
43
+ if (glob[i + 1] === '*') {
44
+ // ** matches any number of directories
45
+ if (glob[i + 2] === '/') {
46
+ regex += '(?:.*/)?';
47
+ i += 3;
48
+ }
49
+ else {
50
+ regex += '.*';
51
+ i += 2;
52
+ }
53
+ }
54
+ else {
55
+ // * matches anything except /
56
+ regex += '[^/]*';
57
+ i++;
58
+ }
59
+ }
60
+ else if (ch === '?') {
61
+ regex += '[^/]';
62
+ i++;
63
+ }
64
+ else if (ch === '.') {
65
+ regex += '\\.';
66
+ i++;
67
+ }
68
+ else {
69
+ regex += ch;
70
+ i++;
71
+ }
72
+ }
73
+ if (dirOnly) {
74
+ regex += '(?:/.*)?';
75
+ }
76
+ // If not anchored and doesn't contain /, match basename anywhere
77
+ if (!anchored && !glob.includes('/')) {
78
+ return new RegExp(`(?:^|/)${regex}(?:$|/)`, 'i');
79
+ }
80
+ return new RegExp(`^${regex}(?:$|/)`, 'i');
81
+ }
82
+ /**
83
+ * Load .shipsafeignore from a project directory and return a filter function.
84
+ * Returns a no-op filter if the file doesn't exist.
85
+ */
86
+ export async function loadIgnoreFilter(projectDir) {
87
+ const ignorePath = join(projectDir, '.shipsafeignore');
88
+ let content;
89
+ try {
90
+ content = await readFile(ignorePath, 'utf-8');
91
+ }
92
+ catch {
93
+ // No .shipsafeignore — nothing is ignored
94
+ return { isIgnored: () => false };
95
+ }
96
+ const rules = parseIgnorePatterns(content);
97
+ if (rules.length === 0) {
98
+ return { isIgnored: () => false };
99
+ }
100
+ return {
101
+ isIgnored(filePath) {
102
+ // Normalize to relative path
103
+ const rel = relative(projectDir, filePath) || filePath;
104
+ let ignored = false;
105
+ for (const rule of rules) {
106
+ if (rule.pattern.test(rel)) {
107
+ ignored = !rule.negated;
108
+ }
109
+ }
110
+ return ignored;
111
+ },
112
+ };
113
+ }
114
+ //# sourceMappingURL=ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../../../src/engines/builtin/ignore.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,gBAAgB,CAAC;AA6lCxD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,OAAO,EAAE,CAAC,CA8BpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/engines/builtin/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,gBAAgB,CAAC;AA+kExD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,OAAO,EAAE,CAAC,CAyCpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}