isolate-package 1.33.0-0 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +1 -1
- package/dist/{isolate-DTwgcMAN.mjs → isolate-DyRD5Zd_.mjs} +35 -300
- package/dist/isolate-DyRD5Zd_.mjs.map +1 -0
- package/dist/isolate-bin.mjs +1 -1
- package/package.json +1 -1
- package/src/isolate.ts +0 -2
- package/src/lib/lockfile/helpers/generate-bun-lockfile.ts +139 -7
- package/src/lib/patches/copy-patches.test.ts +0 -125
- package/src/lib/patches/copy-patches.ts +1 -38
- package/dist/isolate-DTwgcMAN.mjs.map +0 -1
- package/src/lib/lockfile/helpers/bun-lockfile.ts +0 -143
- package/src/lib/patches/collect-installed-names-bun.test.ts +0 -154
- package/src/lib/patches/collect-installed-names-bun.ts +0 -87
- package/src/lib/patches/collect-installed-names-pnpm.test.ts +0 -316
- package/src/lib/patches/collect-installed-names-pnpm.ts +0 -364
|
@@ -15,17 +15,9 @@ vi.mock("fs-extra", () => ({
|
|
|
15
15
|
vi.mock("~/lib/utils", () => ({
|
|
16
16
|
filterPatchedDependencies: vi.fn(),
|
|
17
17
|
getIsolateRelativeLogPath: vi.fn((p: string) => p),
|
|
18
|
-
getPackageName: vi.fn((spec: string) => {
|
|
19
|
-
if (spec.startsWith("@")) {
|
|
20
|
-
const parts = spec.split("@");
|
|
21
|
-
return `@${parts[1] ?? ""}`;
|
|
22
|
-
}
|
|
23
|
-
return spec.split("@")[0] ?? "";
|
|
24
|
-
}),
|
|
25
18
|
getRootRelativeLogPath: vi.fn((p: string) => p),
|
|
26
19
|
isRushWorkspace: vi.fn(() => false),
|
|
27
20
|
readTypedJson: vi.fn(),
|
|
28
|
-
readTypedJsonSync: vi.fn(),
|
|
29
21
|
readTypedYamlSync: vi.fn(),
|
|
30
22
|
}));
|
|
31
23
|
|
|
@@ -37,25 +29,16 @@ vi.mock("~/lib/package-manager", () => ({
|
|
|
37
29
|
/** Mock the pnpm lockfile readers */
|
|
38
30
|
vi.mock("pnpm_lockfile_file_v8", () => ({
|
|
39
31
|
readWantedLockfile: vi.fn(() => Promise.resolve(null)),
|
|
40
|
-
getLockfileImporterId: vi.fn(
|
|
41
|
-
(root: string, dir: string) => dir.replace(`${root}/`, "") || ".",
|
|
42
|
-
),
|
|
43
32
|
}));
|
|
44
33
|
|
|
45
34
|
vi.mock("pnpm_lockfile_file_v9", () => ({
|
|
46
35
|
readWantedLockfile: vi.fn(() => Promise.resolve(null)),
|
|
47
|
-
getLockfileImporterId: vi.fn(
|
|
48
|
-
(root: string, dir: string) => dir.replace(`${root}/`, "") || ".",
|
|
49
|
-
),
|
|
50
36
|
}));
|
|
51
37
|
|
|
52
38
|
const fs = vi.mocked((await import("fs-extra")).default);
|
|
53
39
|
const { filterPatchedDependencies, readTypedJson, readTypedYamlSync } =
|
|
54
40
|
vi.mocked(await import("~/lib/utils"));
|
|
55
41
|
const { usePackageManager } = vi.mocked(await import("~/lib/package-manager"));
|
|
56
|
-
const { readWantedLockfile: readWantedLockfile_v9 } = vi.mocked(
|
|
57
|
-
await import("pnpm_lockfile_file_v9"),
|
|
58
|
-
);
|
|
59
42
|
|
|
60
43
|
describe("copyPatches", () => {
|
|
61
44
|
beforeEach(() => {
|
|
@@ -82,8 +65,6 @@ describe("copyPatches", () => {
|
|
|
82
65
|
|
|
83
66
|
const result = await copyPatches({
|
|
84
67
|
workspaceRootDir: "/workspace",
|
|
85
|
-
targetPackageDir: "/workspace/packages/test",
|
|
86
|
-
internalDepPackageNames: [],
|
|
87
68
|
targetPackageManifest: { name: "test", version: "1.0.0" },
|
|
88
69
|
isolateDir: "/workspace/isolate",
|
|
89
70
|
packagesRegistry: {},
|
|
@@ -145,8 +126,6 @@ describe("copyPatches", () => {
|
|
|
145
126
|
|
|
146
127
|
const result = await copyPatches({
|
|
147
128
|
workspaceRootDir: "/workspace",
|
|
148
|
-
targetPackageDir: "/workspace/packages/test",
|
|
149
|
-
internalDepPackageNames: [],
|
|
150
129
|
targetPackageManifest: { name: "test", version: "1.0.0" },
|
|
151
130
|
isolateDir: "/workspace/isolate",
|
|
152
131
|
packagesRegistry: {},
|
|
@@ -167,8 +146,6 @@ describe("copyPatches", () => {
|
|
|
167
146
|
|
|
168
147
|
const result = await copyPatches({
|
|
169
148
|
workspaceRootDir: "/workspace",
|
|
170
|
-
targetPackageDir: "/workspace/packages/test",
|
|
171
|
-
internalDepPackageNames: [],
|
|
172
149
|
targetPackageManifest: { name: "test", version: "1.0.0" },
|
|
173
150
|
isolateDir: "/workspace/isolate",
|
|
174
151
|
packagesRegistry: {},
|
|
@@ -199,8 +176,6 @@ describe("copyPatches", () => {
|
|
|
199
176
|
|
|
200
177
|
const result = await copyPatches({
|
|
201
178
|
workspaceRootDir: "/workspace",
|
|
202
|
-
targetPackageDir: "/workspace/packages/test",
|
|
203
|
-
internalDepPackageNames: [],
|
|
204
179
|
targetPackageManifest: targetManifest,
|
|
205
180
|
isolateDir: "/workspace/isolate",
|
|
206
181
|
packagesRegistry: {},
|
|
@@ -239,8 +214,6 @@ describe("copyPatches", () => {
|
|
|
239
214
|
|
|
240
215
|
const result = await copyPatches({
|
|
241
216
|
workspaceRootDir: "/workspace",
|
|
242
|
-
targetPackageDir: "/workspace/packages/test",
|
|
243
|
-
internalDepPackageNames: [],
|
|
244
217
|
targetPackageManifest: targetManifest,
|
|
245
218
|
isolateDir: "/workspace/isolate",
|
|
246
219
|
packagesRegistry: {},
|
|
@@ -283,8 +256,6 @@ describe("copyPatches", () => {
|
|
|
283
256
|
|
|
284
257
|
const result = await copyPatches({
|
|
285
258
|
workspaceRootDir: "/workspace",
|
|
286
|
-
targetPackageDir: "/workspace/packages/test",
|
|
287
|
-
internalDepPackageNames: [],
|
|
288
259
|
targetPackageManifest: targetManifest,
|
|
289
260
|
isolateDir: "/workspace/isolate",
|
|
290
261
|
packagesRegistry: {},
|
|
@@ -316,8 +287,6 @@ describe("copyPatches", () => {
|
|
|
316
287
|
|
|
317
288
|
const result = await copyPatches({
|
|
318
289
|
workspaceRootDir: "/workspace",
|
|
319
|
-
targetPackageDir: "/workspace/packages/test",
|
|
320
|
-
internalDepPackageNames: [],
|
|
321
290
|
targetPackageManifest: targetManifest,
|
|
322
291
|
isolateDir: "/workspace/isolate",
|
|
323
292
|
packagesRegistry: {},
|
|
@@ -352,8 +321,6 @@ describe("copyPatches", () => {
|
|
|
352
321
|
|
|
353
322
|
const result = await copyPatches({
|
|
354
323
|
workspaceRootDir: "/workspace",
|
|
355
|
-
targetPackageDir: "/workspace/packages/test",
|
|
356
|
-
internalDepPackageNames: [],
|
|
357
324
|
targetPackageManifest: targetManifest,
|
|
358
325
|
isolateDir: "/workspace/isolate",
|
|
359
326
|
packagesRegistry: {},
|
|
@@ -397,8 +364,6 @@ describe("copyPatches", () => {
|
|
|
397
364
|
|
|
398
365
|
const result = await copyPatches({
|
|
399
366
|
workspaceRootDir: "/workspace",
|
|
400
|
-
targetPackageDir: "/workspace/packages/test",
|
|
401
|
-
internalDepPackageNames: [],
|
|
402
367
|
targetPackageManifest: targetManifest,
|
|
403
368
|
isolateDir: "/workspace/isolate",
|
|
404
369
|
packagesRegistry: {},
|
|
@@ -444,8 +409,6 @@ describe("copyPatches", () => {
|
|
|
444
409
|
|
|
445
410
|
const result = await copyPatches({
|
|
446
411
|
workspaceRootDir: "/workspace",
|
|
447
|
-
targetPackageDir: "/workspace/packages/test",
|
|
448
|
-
internalDepPackageNames: [],
|
|
449
412
|
targetPackageManifest: targetManifest,
|
|
450
413
|
isolateDir: "/workspace/isolate",
|
|
451
414
|
packagesRegistry: {},
|
|
@@ -493,8 +456,6 @@ describe("copyPatches", () => {
|
|
|
493
456
|
|
|
494
457
|
const result = await copyPatches({
|
|
495
458
|
workspaceRootDir: "/workspace",
|
|
496
|
-
targetPackageDir: "/workspace/packages/test",
|
|
497
|
-
internalDepPackageNames: [],
|
|
498
459
|
targetPackageManifest: targetManifest,
|
|
499
460
|
isolateDir: "/workspace/isolate",
|
|
500
461
|
packagesRegistry: {},
|
|
@@ -548,8 +509,6 @@ describe("copyPatches", () => {
|
|
|
548
509
|
|
|
549
510
|
const result = await copyPatches({
|
|
550
511
|
workspaceRootDir: "/workspace",
|
|
551
|
-
targetPackageDir: "/workspace/packages/test",
|
|
552
|
-
internalDepPackageNames: [],
|
|
553
512
|
targetPackageManifest: consumerManifest,
|
|
554
513
|
isolateDir: "/workspace/isolate",
|
|
555
514
|
packagesRegistry: {
|
|
@@ -577,88 +536,4 @@ describe("copyPatches", () => {
|
|
|
577
536
|
expect(reachable!.has("firebase-package")).toBe(true);
|
|
578
537
|
expect(reachable!.has("tslib")).toBe(true);
|
|
579
538
|
});
|
|
580
|
-
|
|
581
|
-
it("should pick up deep external-to-external transitives from the pnpm lockfile (regression: issue #167 follow-up)", async () => {
|
|
582
|
-
/**
|
|
583
|
-
* Target depends on `@react-pdf/renderer` (external). The patched
|
|
584
|
-
* `@react-pdf/render` is only a transitive of `@react-pdf/renderer`. The
|
|
585
|
-
* manifest walker can't see it because it can't open external manifests,
|
|
586
|
-
* so the lockfile walker has to surface it.
|
|
587
|
-
*/
|
|
588
|
-
const targetManifest: PackageManifest = {
|
|
589
|
-
name: "consumer",
|
|
590
|
-
version: "1.0.0",
|
|
591
|
-
dependencies: { "@react-pdf/renderer": "^4.0.0" },
|
|
592
|
-
};
|
|
593
|
-
|
|
594
|
-
readTypedYamlSync.mockReturnValue({
|
|
595
|
-
patchedDependencies: {
|
|
596
|
-
"@react-pdf/render@4.3.0": "patches/@react-pdf__render@4.3.0.patch",
|
|
597
|
-
},
|
|
598
|
-
});
|
|
599
|
-
readTypedJson.mockResolvedValue({
|
|
600
|
-
name: "root",
|
|
601
|
-
version: "1.0.0",
|
|
602
|
-
} as PackageManifest);
|
|
603
|
-
|
|
604
|
-
filterPatchedDependencies.mockReturnValue({
|
|
605
|
-
"@react-pdf/render@4.3.0": "patches/@react-pdf__render@4.3.0.patch",
|
|
606
|
-
});
|
|
607
|
-
|
|
608
|
-
fs.existsSync.mockReturnValue(true);
|
|
609
|
-
|
|
610
|
-
usePackageManager.mockReturnValue({
|
|
611
|
-
name: "pnpm",
|
|
612
|
-
majorVersion: 9,
|
|
613
|
-
version: "9.0.0",
|
|
614
|
-
packageManagerString: "pnpm@9.0.0",
|
|
615
|
-
});
|
|
616
|
-
|
|
617
|
-
/**
|
|
618
|
-
* Fake v9 lockfile: target importer depends on @react-pdf/renderer, which
|
|
619
|
-
* has @react-pdf/render as its only resolved dep.
|
|
620
|
-
*/
|
|
621
|
-
readWantedLockfile_v9.mockResolvedValue({
|
|
622
|
-
lockfileVersion: "9.0",
|
|
623
|
-
importers: {
|
|
624
|
-
"packages/consumer": {
|
|
625
|
-
specifiers: { "@react-pdf/renderer": "^4.0.0" },
|
|
626
|
-
dependencies: { "@react-pdf/renderer": "4.0.0" },
|
|
627
|
-
},
|
|
628
|
-
},
|
|
629
|
-
packages: {
|
|
630
|
-
"@react-pdf/renderer@4.0.0": {
|
|
631
|
-
resolution: { integrity: "sha512-x" },
|
|
632
|
-
dependencies: { "@react-pdf/render": "4.3.0" },
|
|
633
|
-
},
|
|
634
|
-
"@react-pdf/render@4.3.0": {
|
|
635
|
-
resolution: { integrity: "sha512-y" },
|
|
636
|
-
},
|
|
637
|
-
},
|
|
638
|
-
} as unknown as Awaited<ReturnType<typeof readWantedLockfile_v9>>);
|
|
639
|
-
|
|
640
|
-
const result = await copyPatches({
|
|
641
|
-
workspaceRootDir: "/workspace",
|
|
642
|
-
targetPackageDir: "/workspace/packages/consumer",
|
|
643
|
-
internalDepPackageNames: [],
|
|
644
|
-
targetPackageManifest: targetManifest,
|
|
645
|
-
isolateDir: "/workspace/isolate",
|
|
646
|
-
packagesRegistry: {},
|
|
647
|
-
includeDevDependencies: false,
|
|
648
|
-
});
|
|
649
|
-
|
|
650
|
-
expect(result).toEqual({
|
|
651
|
-
"@react-pdf/render@4.3.0": {
|
|
652
|
-
path: "patches/@react-pdf__render@4.3.0.patch",
|
|
653
|
-
hash: "",
|
|
654
|
-
},
|
|
655
|
-
});
|
|
656
|
-
|
|
657
|
-
const filterCall = filterPatchedDependencies.mock.calls[0]?.[0];
|
|
658
|
-
expect(filterCall).toBeDefined();
|
|
659
|
-
const reachable = filterCall!.reachableDependencyNames;
|
|
660
|
-
expect(reachable).toBeInstanceOf(Set);
|
|
661
|
-
expect(reachable!.has("@react-pdf/renderer")).toBe(true);
|
|
662
|
-
expect(reachable!.has("@react-pdf/render")).toBe(true);
|
|
663
|
-
});
|
|
664
539
|
});
|
|
@@ -18,29 +18,23 @@ import {
|
|
|
18
18
|
readTypedJson,
|
|
19
19
|
readTypedYamlSync,
|
|
20
20
|
} from "~/lib/utils";
|
|
21
|
-
import { collectInstalledNamesFromBunLockfile } from "./collect-installed-names-bun";
|
|
22
|
-
import { collectInstalledNamesFromPnpmLockfile } from "./collect-installed-names-pnpm";
|
|
23
21
|
|
|
24
22
|
export async function copyPatches({
|
|
25
23
|
workspaceRootDir,
|
|
26
|
-
targetPackageDir,
|
|
27
24
|
targetPackageManifest,
|
|
28
25
|
packagesRegistry,
|
|
29
|
-
internalDepPackageNames,
|
|
30
26
|
isolateDir,
|
|
31
27
|
includeDevDependencies,
|
|
32
28
|
}: {
|
|
33
29
|
workspaceRootDir: string;
|
|
34
|
-
targetPackageDir: string;
|
|
35
30
|
targetPackageManifest: PackageManifest;
|
|
36
31
|
packagesRegistry: PackagesRegistry;
|
|
37
|
-
internalDepPackageNames: string[];
|
|
38
32
|
isolateDir: string;
|
|
39
33
|
includeDevDependencies: boolean;
|
|
40
34
|
}): Promise<Record<string, PatchFile>> {
|
|
41
35
|
const log = useLogger();
|
|
42
36
|
|
|
43
|
-
const { name: packageManagerName
|
|
37
|
+
const { name: packageManagerName } = usePackageManager();
|
|
44
38
|
|
|
45
39
|
let patchedDependencies: Record<string, string> | undefined;
|
|
46
40
|
|
|
@@ -108,37 +102,6 @@ export async function copyPatches({
|
|
|
108
102
|
includeDevDependencies,
|
|
109
103
|
});
|
|
110
104
|
|
|
111
|
-
/**
|
|
112
|
-
* Manifest-based reachability misses external→external transitives because
|
|
113
|
-
* external manifests aren't loaded here. Walk the package-manager's
|
|
114
|
-
* lockfile to also pick up those names, so a patch for a deeply-nested
|
|
115
|
-
* external dep (e.g. `@react-pdf/render` reached via `@react-pdf/renderer`)
|
|
116
|
-
* survives isolation.
|
|
117
|
-
*/
|
|
118
|
-
const lockfileInstalledNames =
|
|
119
|
-
packageManagerName === "pnpm"
|
|
120
|
-
? await collectInstalledNamesFromPnpmLockfile({
|
|
121
|
-
workspaceRootDir,
|
|
122
|
-
targetPackageDir,
|
|
123
|
-
internalDepPackageNames,
|
|
124
|
-
packagesRegistry,
|
|
125
|
-
majorVersion,
|
|
126
|
-
includeDevDependencies,
|
|
127
|
-
})
|
|
128
|
-
: packageManagerName === "bun"
|
|
129
|
-
? collectInstalledNamesFromBunLockfile({
|
|
130
|
-
workspaceRootDir,
|
|
131
|
-
targetPackageDir,
|
|
132
|
-
internalDepPackageNames,
|
|
133
|
-
packagesRegistry,
|
|
134
|
-
includeDevDependencies,
|
|
135
|
-
})
|
|
136
|
-
: new Set<string>();
|
|
137
|
-
|
|
138
|
-
for (const name of lockfileInstalledNames) {
|
|
139
|
-
reachableDependencyNames.add(name);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
105
|
const filteredPatches = filterPatchedDependencies({
|
|
143
106
|
patchedDependencies,
|
|
144
107
|
targetPackageManifest,
|