repro-surgeon 0.1.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 (111) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/CODE_OF_CONDUCT.md +7 -0
  3. package/CONTRIBUTING.md +31 -0
  4. package/LICENSE +21 -0
  5. package/README.md +159 -0
  6. package/SECURITY.md +15 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.js +165 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +3 -0
  11. package/dist/config.js +177 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/dependencies.d.ts +37 -0
  14. package/dist/dependencies.js +237 -0
  15. package/dist/dependencies.js.map +1 -0
  16. package/dist/engine.d.ts +25 -0
  17. package/dist/engine.js +327 -0
  18. package/dist/engine.js.map +1 -0
  19. package/dist/export.d.ts +7 -0
  20. package/dist/export.js +520 -0
  21. package/dist/export.js.map +1 -0
  22. package/dist/graph.d.ts +3 -0
  23. package/dist/graph.js +247 -0
  24. package/dist/graph.js.map +1 -0
  25. package/dist/index.d.ts +7 -0
  26. package/dist/index.js +7 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/oracle.d.ts +2 -0
  29. package/dist/oracle.js +81 -0
  30. package/dist/oracle.js.map +1 -0
  31. package/dist/protection.d.ts +2 -0
  32. package/dist/protection.js +6 -0
  33. package/dist/protection.js.map +1 -0
  34. package/dist/report.d.ts +5 -0
  35. package/dist/report.js +539 -0
  36. package/dist/report.js.map +1 -0
  37. package/dist/runner.d.ts +3 -0
  38. package/dist/runner.js +195 -0
  39. package/dist/runner.js.map +1 -0
  40. package/dist/snapshot.d.ts +11 -0
  41. package/dist/snapshot.js +220 -0
  42. package/dist/snapshot.js.map +1 -0
  43. package/dist/state.d.ts +9 -0
  44. package/dist/state.js +143 -0
  45. package/dist/state.js.map +1 -0
  46. package/dist/transforms.d.ts +3 -0
  47. package/dist/transforms.js +188 -0
  48. package/dist/transforms.js.map +1 -0
  49. package/dist/types.d.ts +207 -0
  50. package/dist/types.js +2 -0
  51. package/dist/types.js.map +1 -0
  52. package/docs/architecture.md +91 -0
  53. package/docs/assets/report.png +0 -0
  54. package/docs/configuration.md +73 -0
  55. package/docs/evidence/dependency-removal.json +109 -0
  56. package/docs/evidence/next-frameworks.json +271 -0
  57. package/docs/evidence/next-pages.json +152 -0
  58. package/docs/evidence/rounding.json +46 -0
  59. package/docs/report-surface.md +22 -0
  60. package/docs/troubleshooting.md +47 -0
  61. package/docs/validation.md +103 -0
  62. package/examples/next-container/README.md +7 -0
  63. package/examples/next-container/app/about/page.jsx +1 -0
  64. package/examples/next-container/app/case.css +5 -0
  65. package/examples/next-container/app/layout.jsx +3 -0
  66. package/examples/next-container/app/page.jsx +4 -0
  67. package/examples/next-container/lib/catalog.js +2 -0
  68. package/examples/next-container/next.config.mjs +1 -0
  69. package/examples/next-container/package-lock.json +952 -0
  70. package/examples/next-container/package.json +13 -0
  71. package/examples/next-container/repro-surgeon.json +37 -0
  72. package/examples/next-css-bom/README.md +7 -0
  73. package/examples/next-css-bom/app/about/page.jsx +1 -0
  74. package/examples/next-css-bom/app/case.css +3 -0
  75. package/examples/next-css-bom/app/layout.jsx +3 -0
  76. package/examples/next-css-bom/app/page.jsx +4 -0
  77. package/examples/next-css-bom/lib/catalog.js +2 -0
  78. package/examples/next-css-bom/next.config.mjs +1 -0
  79. package/examples/next-css-bom/package-lock.json +952 -0
  80. package/examples/next-css-bom/package.json +13 -0
  81. package/examples/next-css-bom/repro-surgeon.json +36 -0
  82. package/examples/next-pages/README.md +14 -0
  83. package/examples/next-pages/lib/unused-catalog.js +5 -0
  84. package/examples/next-pages/next.config.mjs +1 -0
  85. package/examples/next-pages/package-lock.json +952 -0
  86. package/examples/next-pages/package.json +11 -0
  87. package/examples/next-pages/pages/health.jsx +3 -0
  88. package/examples/next-pages/pages/index.jsx +9 -0
  89. package/examples/next-pages/repro-surgeon.json +18 -0
  90. package/examples/next-root-param/README.md +7 -0
  91. package/examples/next-root-param/app/[lang-country]/about/page.jsx +1 -0
  92. package/examples/next-root-param/app/[lang-country]/layout.tsx +4 -0
  93. package/examples/next-root-param/app/[lang-country]/page.tsx +3 -0
  94. package/examples/next-root-param/lib/catalog.js +2 -0
  95. package/examples/next-root-param/next-env.d.ts +2 -0
  96. package/examples/next-root-param/next.config.mjs +1 -0
  97. package/examples/next-root-param/package-lock.json +1016 -0
  98. package/examples/next-root-param/package.json +19 -0
  99. package/examples/next-root-param/repro-surgeon.json +37 -0
  100. package/examples/next-root-param/tsconfig.json +35 -0
  101. package/examples/rounding/README.md +16 -0
  102. package/examples/rounding/check.mjs +6 -0
  103. package/examples/rounding/config/store.json +7 -0
  104. package/examples/rounding/fixtures/invoice.json +11 -0
  105. package/examples/rounding/package-lock.json +7 -0
  106. package/examples/rounding/package.json +7 -0
  107. package/examples/rounding/repro-surgeon.json +12 -0
  108. package/examples/rounding/src/catalog.mjs +9 -0
  109. package/examples/rounding/src/shipping.mjs +7 -0
  110. package/examples/rounding/src/totals.mjs +11 -0
  111. package/package.json +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Config, RuntimeInfo, Snapshot, Transformation } from './types.ts';
2
+ type PackageJson = Record<string, unknown> & {
3
+ dependencies?: Record<string, string>;
4
+ devDependencies?: Record<string, string>;
5
+ optionalDependencies?: Record<string, string>;
6
+ peerDependencies?: Record<string, string>;
7
+ };
8
+ type NpmLock = {
9
+ lockfileVersion?: number;
10
+ packages?: Record<string, Record<string, unknown>>;
11
+ };
12
+ export declare function validateNpmProject(snapshot: Snapshot): {
13
+ pkg: PackageJson;
14
+ lock: NpmLock;
15
+ };
16
+ export declare function assertLockIntegrity(before: NpmLock, after: NpmLock): void;
17
+ export declare function dependencyCandidates(snapshot: Snapshot, config: Pick<Config, 'preserve'>): Transformation[];
18
+ /** An execution directory must not inherit packages from any filesystem ancestor. */
19
+ export declare function createIsolatedDirectory(prefix?: string): Promise<string>;
20
+ /** Temporary work may be a sibling of source, but must never be created within it. */
21
+ export declare function assertTemporaryDirectoryOutsideSource(sourceRoot: string): Promise<void>;
22
+ export declare class WorkspaceManager {
23
+ readonly root: string;
24
+ readonly config: Config;
25
+ readonly signal: AbortSignal | undefined;
26
+ private executionRoot;
27
+ private disposed;
28
+ constructor(root: string, config: Config, signal?: AbortSignal);
29
+ private directory;
30
+ dispose(): Promise<void>;
31
+ environment(): Promise<Record<string, string>>;
32
+ install(cwd: string, lockOnly?: boolean): Promise<void>;
33
+ prepare(snapshot: Snapshot): Promise<string>;
34
+ reconcile(snapshot: Snapshot, original: Snapshot): Promise<Snapshot>;
35
+ }
36
+ export declare function runtimeInfo(cwd: string, signal?: AbortSignal): Promise<RuntimeInfo>;
37
+ export {};
@@ -0,0 +1,237 @@
1
+ import { constants } from 'node:fs';
2
+ import { cp, lstat, mkdir, mkdtemp, readFile, realpath, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import path from 'node:path';
5
+ import { cleanEnvironment, runCommand } from "./runner.js";
6
+ import { hashValue, matchesPath, writeSnapshot } from "./snapshot.js";
7
+ const sections = ['dependencies', 'devDependencies', 'optionalDependencies', 'peerDependencies'];
8
+ export function validateNpmProject(snapshot) {
9
+ if (snapshot.has('npm-shrinkwrap.json'))
10
+ throw new Error('npm-shrinkwrap.json is unsupported. Use a standalone project whose authoritative npm lockfile is package-lock.json.');
11
+ const manifest = snapshot.get('package.json');
12
+ const lockfile = snapshot.get('package-lock.json');
13
+ if (!manifest || !lockfile)
14
+ throw new Error('A package.json and package-lock.json are required. Create an npm lockfile before reducing.');
15
+ let pkg;
16
+ let lock;
17
+ try {
18
+ pkg = JSON.parse(manifest.content.toString());
19
+ lock = JSON.parse(lockfile.content.toString());
20
+ }
21
+ catch {
22
+ throw new Error('package.json or package-lock.json is not valid JSON.');
23
+ }
24
+ if (!pkg || typeof pkg !== 'object' || Array.isArray(pkg) || !lock || typeof lock !== 'object')
25
+ throw new Error('Invalid npm package metadata.');
26
+ if (pkg.workspaces)
27
+ throw new Error('npm workspaces are not supported yet. Select a standalone package with portable dependencies.');
28
+ if (typeof pkg.packageManager === 'string' && !pkg.packageManager.startsWith('npm@'))
29
+ throw new Error('This project declares a different package manager. The current adapter requires an npm package and lockfile.');
30
+ if ((lock.lockfileVersion !== 2 && lock.lockfileVersion !== 3) || !lock.packages || !lock.packages[''])
31
+ throw new Error('Use an npm lockfile version 2 or 3 with a root package entry.');
32
+ for (const section of sections) {
33
+ const entries = pkg[section];
34
+ if (entries !== undefined && (!entries || typeof entries !== 'object' || Array.isArray(entries)))
35
+ throw new Error(`Invalid ${section} in package.json.`);
36
+ for (const [name, version] of Object.entries(entries ?? {})) {
37
+ if (typeof version !== 'string' || /^(?:file:|link:|workspace:|git[+:]|github:|https?:|\.\.?\/|\/)/.test(version) || /^[^@\s]+\/[^\s]+$/.test(version))
38
+ throw new Error(`Dependency ${name} is not a portable registry dependency. Local, workspace, Git and direct URL dependencies are unsupported.`);
39
+ }
40
+ }
41
+ for (const [name, record] of Object.entries(lock.packages)) {
42
+ if (name === '')
43
+ continue;
44
+ if (record.link === true)
45
+ throw new Error(`Lockfile contains a local/workspace link: ${name}`);
46
+ if (typeof record.resolved === 'string') {
47
+ let url;
48
+ try {
49
+ url = new URL(record.resolved);
50
+ }
51
+ catch {
52
+ throw new Error(`Lockfile has a non-portable package location: ${name}`);
53
+ }
54
+ if (url.protocol !== 'https:' || url.username || url.password || !['registry.npmjs.org', 'registry.yarnpkg.com'].includes(url.hostname))
55
+ throw new Error(`Lockfile requires a private or unsupported registry for ${name}. Export requires public npm packages.`);
56
+ }
57
+ }
58
+ return { pkg, lock };
59
+ }
60
+ export function assertLockIntegrity(before, after) {
61
+ if (!after.packages)
62
+ throw new Error('Reconciled lockfile has no package records.');
63
+ for (const [name, value] of Object.entries(after.packages)) {
64
+ if (!name)
65
+ continue;
66
+ const previous = before.packages?.[name];
67
+ if (!previous)
68
+ throw new Error(`Lock reconciliation added a new resolved location: ${name}`);
69
+ for (const field of ['version', 'resolved', 'integrity', 'link']) {
70
+ if (previous[field] !== value[field])
71
+ throw new Error(`Retained dependency ${name} changed ${field}; refusing version drift.`);
72
+ }
73
+ }
74
+ }
75
+ export function dependencyCandidates(snapshot, config) {
76
+ if (['package.json', 'package-lock.json'].some(name => matchesPath(name, config.preserve)))
77
+ return [];
78
+ const { pkg } = validateNpmProject(snapshot);
79
+ const names = [...new Set(sections.flatMap(section => Object.keys(pkg[section] ?? {})))].sort();
80
+ return names.map(name => {
81
+ const next = structuredClone(pkg);
82
+ for (const section of sections)
83
+ if (next[section])
84
+ delete next[section][name];
85
+ return { id: `dependency:${name}`, kind: 'dependencies', description: `Remove dependency ${name}`, paths: ['package.json', 'package-lock.json'], edits: [{ path: 'package.json', content: Buffer.from(JSON.stringify(next, null, 2) + '\n') }] };
86
+ });
87
+ }
88
+ async function assertNoAncestorDependencies(directory) {
89
+ let ancestor = path.dirname(await realpath(directory));
90
+ for (;;) {
91
+ const dependencyPath = path.join(ancestor, 'node_modules');
92
+ try {
93
+ await lstat(dependencyPath);
94
+ throw new Error(`Cannot isolate dependency resolution: ancestor ${dependencyPath} exists. Choose a TMPDIR outside dependency trees and retry.`);
95
+ }
96
+ catch (error) {
97
+ if (error.code !== 'ENOENT')
98
+ throw error;
99
+ }
100
+ const parent = path.dirname(ancestor);
101
+ if (parent === ancestor)
102
+ break;
103
+ ancestor = parent;
104
+ }
105
+ }
106
+ /** An execution directory must not inherit packages from any filesystem ancestor. */
107
+ export async function createIsolatedDirectory(prefix = 'repro-surgeon-') {
108
+ const directory = await mkdtemp(path.join(await realpath(tmpdir()), prefix));
109
+ try {
110
+ await assertNoAncestorDependencies(directory);
111
+ return directory;
112
+ }
113
+ catch (error) {
114
+ await rm(directory, { recursive: true, force: true });
115
+ throw error;
116
+ }
117
+ }
118
+ /** Temporary work may be a sibling of source, but must never be created within it. */
119
+ export async function assertTemporaryDirectoryOutsideSource(sourceRoot) {
120
+ const source = await realpath(sourceRoot).catch((error) => {
121
+ // Resume uses the saved snapshot even when the original checkout was removed.
122
+ if (error.code === 'ENOENT')
123
+ return path.resolve(sourceRoot);
124
+ throw error;
125
+ });
126
+ const temporary = await realpath(tmpdir());
127
+ const relative = path.relative(source, temporary);
128
+ if (relative === '' || (relative !== '..' && !relative.startsWith('..' + path.sep) && !path.isAbsolute(relative))) {
129
+ throw new Error('The temporary directory is inside the original source. Choose a TMPDIR outside the source directory and retry.');
130
+ }
131
+ }
132
+ export class WorkspaceManager {
133
+ root;
134
+ config;
135
+ signal;
136
+ executionRoot;
137
+ disposed = false;
138
+ constructor(root, config, signal) { this.root = root; this.config = config; this.signal = signal; }
139
+ async directory(name) {
140
+ this.signal?.throwIfAborted();
141
+ if (this.disposed)
142
+ throw new Error('Execution workspace has already been disposed.');
143
+ this.executionRoot ??= createIsolatedDirectory();
144
+ const cwd = path.join(await this.executionRoot, name);
145
+ await rm(cwd, { recursive: true, force: true });
146
+ await mkdir(cwd, { mode: 0o700 });
147
+ await assertNoAncestorDependencies(cwd);
148
+ this.signal?.throwIfAborted();
149
+ return cwd;
150
+ }
151
+ async dispose() {
152
+ this.disposed = true;
153
+ const directory = await this.executionRoot?.catch(() => undefined);
154
+ if (directory)
155
+ await rm(directory, { recursive: true, force: true });
156
+ }
157
+ async environment() {
158
+ this.signal?.throwIfAborted();
159
+ const home = path.join(this.root, 'home');
160
+ await mkdir(home, { recursive: true, mode: 0o700 });
161
+ const userconfig = path.join(home, 'npmrc');
162
+ const globalconfig = path.join(home, 'global-npmrc');
163
+ await writeFile(userconfig, '');
164
+ await writeFile(globalconfig, '');
165
+ return { ...cleanEnvironment(home, this.config.execution.env), NPM_CONFIG_USERCONFIG: userconfig, NPM_CONFIG_GLOBALCONFIG: globalconfig, NPM_CONFIG_CACHE: path.join(this.root, 'npm-cache'), NEXT_TELEMETRY_DISABLED: '1', NO_COLOR: '1', CI: '1' };
166
+ }
167
+ async install(cwd, lockOnly = false) {
168
+ this.signal?.throwIfAborted();
169
+ await assertNoAncestorDependencies(cwd);
170
+ const command = ['npm', ...(lockOnly ? ['install', '--package-lock-only'] : ['ci']), '--no-audit', '--no-fund'];
171
+ if (lockOnly || !this.config.execution.allowInstallScripts)
172
+ command.push('--ignore-scripts');
173
+ const result = await runCommand(command, { cwd, timeoutMs: this.config.execution.installTimeoutMs, maxOutputBytes: this.config.execution.maxOutputBytes, env: await this.environment(), ...(this.signal ? { signal: this.signal } : {}) });
174
+ if (result.exitCode !== 0 || result.error || result.timedOut || result.aborted || result.signal || result.outputLimitExceeded) {
175
+ throw new Error(`Dependency installation failed${result.timedOut ? ' (timeout)' : ''}. ${result.error ?? result.stderr.slice(-2000)}`);
176
+ }
177
+ }
178
+ async prepare(snapshot) {
179
+ validateNpmProject(snapshot);
180
+ const cwd = await this.directory('work');
181
+ await writeSnapshot(snapshot, cwd);
182
+ if (this.config.execution.allowInstallScripts) {
183
+ await this.install(cwd);
184
+ return cwd;
185
+ }
186
+ const key = hashValue([snapshot.get('package.json').content.toString(), snapshot.get('package-lock.json').content.toString()]);
187
+ const cache = path.join(this.root, 'installations', key);
188
+ let installed = false;
189
+ try {
190
+ installed = (await stat(path.join(cache, 'complete'))).isFile();
191
+ }
192
+ catch { /* First use of this manifest. */ }
193
+ if (!installed) {
194
+ await rm(cache, { recursive: true, force: true });
195
+ const installation = await this.directory('install');
196
+ await writeSnapshot(new Map([...snapshot].filter(([name]) => name === 'package.json' || name === 'package-lock.json')), installation);
197
+ await this.install(installation);
198
+ this.signal?.throwIfAborted();
199
+ await mkdir(path.dirname(cache), { recursive: true, mode: 0o700 });
200
+ await cp(installation, cache, { recursive: true, dereference: false, verbatimSymlinks: true, mode: constants.COPYFILE_FICLONE });
201
+ await writeFile(path.join(cache, 'complete'), 'installed\n');
202
+ }
203
+ try {
204
+ await cp(path.join(cache, 'node_modules'), path.join(cwd, 'node_modules'), { recursive: true, dereference: false, verbatimSymlinks: true, mode: constants.COPYFILE_FICLONE });
205
+ }
206
+ catch (error) {
207
+ if (error.code !== 'ENOENT')
208
+ throw error;
209
+ }
210
+ this.signal?.throwIfAborted();
211
+ return cwd;
212
+ }
213
+ async reconcile(snapshot, original) {
214
+ const { lock: before } = validateNpmProject(original);
215
+ validateNpmProject(snapshot);
216
+ const cwd = await this.directory('reconcile');
217
+ await writeSnapshot(snapshot, cwd);
218
+ await this.install(cwd, true);
219
+ this.signal?.throwIfAborted();
220
+ const content = await readFile(path.join(cwd, 'package-lock.json'));
221
+ assertLockIntegrity(before, JSON.parse(content.toString()));
222
+ const result = new Map(snapshot);
223
+ result.set('package-lock.json', { content, mode: snapshot.get('package-lock.json').mode });
224
+ validateNpmProject(result);
225
+ return result;
226
+ }
227
+ }
228
+ export async function runtimeInfo(cwd, signal) {
229
+ const result = await runCommand(['npm', '--version'], { cwd, timeoutMs: 10000, maxOutputBytes: 1024, ...(signal ? { signal } : {}) });
230
+ if (result.exitCode !== 0 || result.error || result.timedOut)
231
+ throw new Error('npm could not be started. Install npm 10 or newer.');
232
+ const npm = result.stdout.trim();
233
+ if (Number(npm.split('.')[0]) < 10)
234
+ throw new Error('npm 10 or newer is required.');
235
+ return { node: process.version, npm, platform: process.platform, arch: process.arch, tool: '0.1.0' };
236
+ }
237
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Config, RunState, Snapshot, Trial } from './types.ts';
2
+ export interface ProgressEvent {
3
+ type: 'baseline' | 'trial' | 'status';
4
+ message: string;
5
+ trial?: Trial;
6
+ }
7
+ export interface EngineOptions {
8
+ signal?: AbortSignal;
9
+ onEvent?: (event: ProgressEvent) => void;
10
+ }
11
+ export interface ReduceOptions extends EngineOptions {
12
+ sourceRoot: string;
13
+ runRoot: string;
14
+ config: Config;
15
+ }
16
+ export interface ReductionResult {
17
+ state: RunState;
18
+ snapshot: Snapshot;
19
+ }
20
+ export declare function reduceProject(options: ReduceOptions): Promise<ReductionResult>;
21
+ export declare function resumeProject(options: EngineOptions & {
22
+ runRoot: string;
23
+ maxEvaluations?: number;
24
+ maxSeconds?: number;
25
+ }): Promise<ReductionResult>;