vxrn 1.13.1 → 1.13.3
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/utils/patches.mjs +33 -5
- package/dist/utils/patches.mjs.map +1 -1
- package/dist/utils/patches.native.js +65 -4
- package/dist/utils/patches.native.js.map +1 -1
- package/dist/utils/patches.test.mjs +140 -0
- package/dist/utils/patches.test.mjs.map +1 -0
- package/dist/utils/patches.test.native.js +158 -0
- package/dist/utils/patches.test.native.js.map +1 -0
- package/package.json +11 -11
- package/src/utils/patches.test.ts +274 -0
- package/src/utils/patches.ts +54 -3
- package/types/utils/patches.d.ts +6 -0
- package/types/utils/patches.d.ts.map +1 -1
- package/types/utils/patches.test.d.ts +2 -0
- package/types/utils/patches.test.d.ts.map +1 -0
package/dist/utils/patches.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { transformSWC } from "@vxrn/compiler";
|
|
2
2
|
import { transformFlowBabel } from "@vxrn/vite-flow";
|
|
3
|
+
import Glob from "fast-glob";
|
|
3
4
|
import findNodeModules from "find-node-modules";
|
|
4
5
|
import FSExtra from "fs-extra";
|
|
6
|
+
import { realpathSync } from "node:fs";
|
|
5
7
|
import { join } from "node:path";
|
|
6
8
|
import { rename } from "node:fs/promises";
|
|
7
9
|
import semver from "semver";
|
|
@@ -42,18 +44,35 @@ async function readPatchStats(nodeModulesDir) {
|
|
|
42
44
|
async function writePatchStats(nodeModulesDir, stats) {
|
|
43
45
|
await FSExtra.writeJSON(join(nodeModulesDir, STATS_FILE), stats);
|
|
44
46
|
}
|
|
47
|
+
function moduleToPnpmStorePattern(moduleName) {
|
|
48
|
+
return moduleName.replace("/", "+");
|
|
49
|
+
}
|
|
45
50
|
async function applyDependencyPatches(patches, {
|
|
46
51
|
root = process.cwd()
|
|
47
52
|
} = {}) {
|
|
48
|
-
const
|
|
53
|
+
const patchModuleNames = [...new Set(patches.map(p => p.module))],
|
|
54
|
+
nodeModulesDirs = findNodeModules({
|
|
49
55
|
cwd: root
|
|
50
56
|
}).flatMap(relativePath => {
|
|
51
57
|
const dir = join(root, relativePath),
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
dirs = [dir],
|
|
59
|
+
pnpmBase = join(dir, ".pnpm");
|
|
60
|
+
if (!FSExtra.existsSync(pnpmBase)) return dirs;
|
|
61
|
+
const pnpmHoistedDir = join(pnpmBase, "node_modules");
|
|
62
|
+
FSExtra.existsSync(pnpmHoistedDir) && dirs.push(pnpmHoistedDir);
|
|
63
|
+
for (const moduleName of patchModuleNames) {
|
|
64
|
+
const storePattern = moduleToPnpmStorePattern(moduleName),
|
|
65
|
+
storeMatches = Glob.sync(`${storePattern}@*/node_modules`, {
|
|
66
|
+
cwd: pnpmBase,
|
|
67
|
+
onlyDirectories: !0
|
|
68
|
+
});
|
|
69
|
+
for (const match of storeMatches) dirs.push(join(pnpmBase, match));
|
|
70
|
+
}
|
|
71
|
+
return dirs;
|
|
54
72
|
}),
|
|
55
73
|
results = /* @__PURE__ */new Map(),
|
|
56
|
-
transformWarnedModules = /* @__PURE__ */new Set()
|
|
74
|
+
transformWarnedModules = /* @__PURE__ */new Set(),
|
|
75
|
+
patchedRealPaths = /* @__PURE__ */new Set();
|
|
57
76
|
await Promise.all(nodeModulesDirs.map(async nodeModulesDir => {
|
|
58
77
|
const patchStats = await readPatchStats(nodeModulesDir);
|
|
59
78
|
let statsChanged = !1;
|
|
@@ -61,6 +80,15 @@ async function applyDependencyPatches(patches, {
|
|
|
61
80
|
try {
|
|
62
81
|
const nodeModuleDir = join(nodeModulesDir, patch.module);
|
|
63
82
|
if (!FSExtra.existsSync(nodeModuleDir)) return;
|
|
83
|
+
let realModuleDir;
|
|
84
|
+
try {
|
|
85
|
+
realModuleDir = realpathSync(nodeModuleDir);
|
|
86
|
+
} catch {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const dedupKey = `${patches.indexOf(patch)}\0${realModuleDir}`;
|
|
90
|
+
if (patchedRealPaths.has(dedupKey)) return;
|
|
91
|
+
patchedRealPaths.add(dedupKey);
|
|
64
92
|
const version = patch.patchFiles.version;
|
|
65
93
|
if (typeof version == "string") {
|
|
66
94
|
const pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
|
|
@@ -175,5 +203,5 @@ async function atomicWriteFile(filePath, contents) {
|
|
|
175
203
|
const tempPath = filePath + ".vxrn.tmp." + process.pid + "." + Date.now();
|
|
176
204
|
await FSExtra.writeFile(tempPath, contents), await rename(tempPath, filePath);
|
|
177
205
|
}
|
|
178
|
-
export { applyBuiltInPatches, applyDependencyPatches, bailIfExists, bailIfUnchanged };
|
|
206
|
+
export { applyBuiltInPatches, applyDependencyPatches, bailIfExists, bailIfUnchanged, moduleToPnpmStorePattern };
|
|
179
207
|
//# sourceMappingURL=patches.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["transformSWC","transformFlowBabel","findNodeModules","FSExtra","join","rename","semver","builtInDepPatches","globDir","Bail","Error","bailIfUnchanged","obj1","obj2","JSON","stringify","bailIfExists","haystack","needle","includes","applyBuiltInPatches","options","extraPatches","all","key","extraPatchFiles","existing","find","x","module","patchKey","patchFiles","console","warn","push","applyDependencyPatches","root","STATS_FILE","getOriginalPath","fullPath","readPatchStats","nodeModulesDir","readJSON","writePatchStats","stats","writeJSON","patches","process","cwd","nodeModulesDirs","flatMap","relativePath","dir","
|
|
1
|
+
{"version":3,"names":["transformSWC","transformFlowBabel","Glob","findNodeModules","FSExtra","realpathSync","join","rename","semver","builtInDepPatches","globDir","Bail","Error","bailIfUnchanged","obj1","obj2","JSON","stringify","bailIfExists","haystack","needle","includes","applyBuiltInPatches","options","extraPatches","all","key","extraPatchFiles","existing","find","x","module","patchKey","patchFiles","console","warn","push","applyDependencyPatches","root","STATS_FILE","getOriginalPath","fullPath","readPatchStats","nodeModulesDir","readJSON","writePatchStats","stats","writeJSON","moduleToPnpmStorePattern","moduleName","replace","patches","process","cwd","patchModuleNames","Set","map","p","nodeModulesDirs","flatMap","relativePath","dir","dirs","pnpmBase","existsSync","pnpmHoistedDir","storePattern","storeMatches","sync","onlyDirectories","match","results","Map","transformWarnedModules","patchedRealPaths","Promise","patchStats","statsChanged","patch","nodeModuleDir","realModuleDir","dedupKey","indexOf","has","add","version","pkgJSON","satisfies","filePatches","file","filesToApply","patchDefinition","filesToProcess","stat","exists","filter","env","VXRN_FORCE_PATCH","cached","size","mtimeMs","length","set","didApplyPatch","patchDef","originalPath","targetContent","originalContent","readFile","catch","sourceContent","patchedContent","Array","isArray","contents","strategy","mode","environment","forceJSX","noHMR","fixNonTypeSpecificImports","code","transformErr","DEBUG","out","stat2","atomicWriteFile","info","err","error","result","filePath","tempPath","pid","Date","now","writeFile"],"sources":["../../src/utils/patches.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { transformSWC } from "@vxrn/compiler";
|
|
2
2
|
import { transformFlowBabel } from "@vxrn/vite-flow";
|
|
3
|
+
import Glob from "fast-glob";
|
|
3
4
|
import findNodeModules from "find-node-modules";
|
|
4
5
|
import FSExtra from "fs-extra";
|
|
6
|
+
import { realpathSync } from "fs";
|
|
5
7
|
import { join } from "path";
|
|
6
8
|
import { rename } from "fs/promises";
|
|
7
9
|
import semver from "semver";
|
|
@@ -138,19 +140,68 @@ async function readPatchStats(nodeModulesDir) {
|
|
|
138
140
|
async function writePatchStats(nodeModulesDir, stats) {
|
|
139
141
|
await FSExtra.writeJSON(join(nodeModulesDir, STATS_FILE), stats);
|
|
140
142
|
}
|
|
143
|
+
function moduleToPnpmStorePattern(moduleName) {
|
|
144
|
+
return moduleName.replace("/", "+");
|
|
145
|
+
}
|
|
141
146
|
async function applyDependencyPatches(patches) {
|
|
142
147
|
var {
|
|
143
148
|
root = process.cwd()
|
|
144
149
|
} = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {},
|
|
150
|
+
patchModuleNames = [...new Set(patches.map(function (p) {
|
|
151
|
+
return p.module;
|
|
152
|
+
}))],
|
|
145
153
|
nodeModulesDirs = findNodeModules({
|
|
146
154
|
cwd: root
|
|
147
155
|
}).flatMap(function (relativePath) {
|
|
148
156
|
var dir = join(root, relativePath),
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
dirs = [dir],
|
|
158
|
+
pnpmBase = join(dir, ".pnpm");
|
|
159
|
+
if (!FSExtra.existsSync(pnpmBase)) return dirs;
|
|
160
|
+
var pnpmHoistedDir = join(pnpmBase, "node_modules");
|
|
161
|
+
FSExtra.existsSync(pnpmHoistedDir) && dirs.push(pnpmHoistedDir);
|
|
162
|
+
var _iteratorNormalCompletion2 = !0,
|
|
163
|
+
_didIteratorError2 = !1,
|
|
164
|
+
_iteratorError2 = void 0;
|
|
165
|
+
try {
|
|
166
|
+
for (var _iterator2 = patchModuleNames[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
|
|
167
|
+
var moduleName = _step2.value,
|
|
168
|
+
storePattern = moduleToPnpmStorePattern(moduleName),
|
|
169
|
+
storeMatches = Glob.sync(`${storePattern}@*/node_modules`, {
|
|
170
|
+
cwd: pnpmBase,
|
|
171
|
+
onlyDirectories: !0
|
|
172
|
+
}),
|
|
173
|
+
_iteratorNormalCompletion1 = !0,
|
|
174
|
+
_didIteratorError1 = !1,
|
|
175
|
+
_iteratorError1 = void 0;
|
|
176
|
+
try {
|
|
177
|
+
for (var _iterator1 = storeMatches[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
|
|
178
|
+
var match = _step1.value;
|
|
179
|
+
dirs.push(join(pnpmBase, match));
|
|
180
|
+
}
|
|
181
|
+
} catch (err) {
|
|
182
|
+
_didIteratorError1 = !0, _iteratorError1 = err;
|
|
183
|
+
} finally {
|
|
184
|
+
try {
|
|
185
|
+
!_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
|
|
186
|
+
} finally {
|
|
187
|
+
if (_didIteratorError1) throw _iteratorError1;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
} catch (err) {
|
|
192
|
+
_didIteratorError2 = !0, _iteratorError2 = err;
|
|
193
|
+
} finally {
|
|
194
|
+
try {
|
|
195
|
+
!_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
|
|
196
|
+
} finally {
|
|
197
|
+
if (_didIteratorError2) throw _iteratorError2;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return dirs;
|
|
151
201
|
}),
|
|
152
202
|
results = /* @__PURE__ */new Map(),
|
|
153
|
-
transformWarnedModules = /* @__PURE__ */new Set()
|
|
203
|
+
transformWarnedModules = /* @__PURE__ */new Set(),
|
|
204
|
+
patchedRealPaths = /* @__PURE__ */new Set();
|
|
154
205
|
await Promise.all(nodeModulesDirs.map(async function (nodeModulesDir) {
|
|
155
206
|
var patchStats = await readPatchStats(nodeModulesDir),
|
|
156
207
|
statsChanged = !1;
|
|
@@ -158,6 +209,16 @@ async function applyDependencyPatches(patches) {
|
|
|
158
209
|
try {
|
|
159
210
|
var nodeModuleDir = join(nodeModulesDir, patch.module);
|
|
160
211
|
if (!FSExtra.existsSync(nodeModuleDir)) return;
|
|
212
|
+
var realModuleDir;
|
|
213
|
+
try {
|
|
214
|
+
realModuleDir = realpathSync(nodeModuleDir);
|
|
215
|
+
} catch {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
var patchIdx = patches.indexOf(patch),
|
|
219
|
+
dedupKey = `${patchIdx}\0${realModuleDir}`;
|
|
220
|
+
if (patchedRealPaths.has(dedupKey)) return;
|
|
221
|
+
patchedRealPaths.add(dedupKey);
|
|
161
222
|
var version = patch.patchFiles.version;
|
|
162
223
|
if (typeof version == "string") {
|
|
163
224
|
var pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
|
|
@@ -330,5 +391,5 @@ async function atomicWriteFile(filePath, contents) {
|
|
|
330
391
|
var tempPath = filePath + ".vxrn.tmp." + process.pid + "." + Date.now();
|
|
331
392
|
await FSExtra.writeFile(tempPath, contents), await rename(tempPath, filePath);
|
|
332
393
|
}
|
|
333
|
-
export { applyBuiltInPatches, applyDependencyPatches, bailIfExists, bailIfUnchanged };
|
|
394
|
+
export { applyBuiltInPatches, applyDependencyPatches, bailIfExists, bailIfUnchanged, moduleToPnpmStorePattern };
|
|
334
395
|
//# sourceMappingURL=patches.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["transformSWC","transformFlowBabel","findNodeModules","FSExtra","join","rename","semver","builtInDepPatches","globDir","_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","o","Object","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","value","writable","configurable","_instanceof","left","right","Symbol","hasInstance","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","obj","_wrap_native_super","_cache","Map","has","get","set","Wrapper","enumerable","result","Boolean","valueOf","Bail","Error1","Bail2","Error","bailIfUnchanged","obj1","obj2","JSON","stringify","bailIfExists","haystack","needle","includes","applyBuiltInPatches","options","extraPatches","all","_loop","key2","extraPatchFiles","existing","find","x","module","patchKey","patchFiles","console","warn","key","applyDependencyPatches","root","STATS_FILE","getOriginalPath","fullPath","readPatchStats","nodeModulesDir","readJSON","writePatchStats","stats","writeJSON","patches","process","cwd","length","nodeModulesDirs","flatMap","relativePath","dir","
|
|
1
|
+
{"version":3,"names":["transformSWC","transformFlowBabel","Glob","findNodeModules","FSExtra","realpathSync","join","rename","semver","builtInDepPatches","globDir","_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","o","Object","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","value","writable","configurable","_instanceof","left","right","Symbol","hasInstance","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","obj","_wrap_native_super","_cache","Map","has","get","set","Wrapper","enumerable","result","Boolean","valueOf","Bail","Error1","Bail2","Error","bailIfUnchanged","obj1","obj2","JSON","stringify","bailIfExists","haystack","needle","includes","applyBuiltInPatches","options","extraPatches","all","_loop","key2","extraPatchFiles","existing","find","x","module","patchKey","patchFiles","console","warn","key","applyDependencyPatches","root","STATS_FILE","getOriginalPath","fullPath","readPatchStats","nodeModulesDir","readJSON","writePatchStats","stats","writeJSON","moduleToPnpmStorePattern","moduleName","replace","patches","process","cwd","length","patchModuleNames","Set","map","nodeModulesDirs","flatMap","relativePath","dir","dirs","pnpmBase","existsSync","pnpmHoistedDir","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","iterator","_step2","next","done","storePattern","storeMatches","sync","onlyDirectories","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","match","err","return"],"sources":["../../src/utils/patches.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import FSExtra from "fs-extra";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { mkdtemp, rm, symlink } from "node:fs/promises";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { applyDependencyPatches, moduleToPnpmStorePattern } from "./patches.mjs";
|
|
7
|
+
vi.mock("@vxrn/compiler", () => ({
|
|
8
|
+
transformSWC: vi.fn()
|
|
9
|
+
}));
|
|
10
|
+
vi.mock("@vxrn/vite-flow", () => ({
|
|
11
|
+
transformFlowBabel: vi.fn()
|
|
12
|
+
}));
|
|
13
|
+
function makePkg(name, version, extras) {
|
|
14
|
+
return JSON.stringify({
|
|
15
|
+
name,
|
|
16
|
+
version,
|
|
17
|
+
...extras
|
|
18
|
+
}, null, 2);
|
|
19
|
+
}
|
|
20
|
+
describe("moduleToPnpmStorePattern", () => {
|
|
21
|
+
it("converts scoped package names", () => {
|
|
22
|
+
expect(moduleToPnpmStorePattern("@react-navigation/core")).toBe("@react-navigation+core");
|
|
23
|
+
}), it("converts other scoped packages", () => {
|
|
24
|
+
expect(moduleToPnpmStorePattern("@expo/cli")).toBe("@expo+cli");
|
|
25
|
+
}), it("passes through unscoped packages unchanged", () => {
|
|
26
|
+
expect(moduleToPnpmStorePattern("react-native-web")).toBe("react-native-web");
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("applyDependencyPatches", () => {
|
|
30
|
+
let tmpDir;
|
|
31
|
+
beforeEach(async () => {
|
|
32
|
+
tmpDir = await mkdtemp(join(tmpdir(), "vxrn-patch-test-"));
|
|
33
|
+
}), afterEach(async () => {
|
|
34
|
+
await rm(tmpDir, {
|
|
35
|
+
recursive: !0,
|
|
36
|
+
force: !0
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
async function setupAndPatch(opts) {
|
|
40
|
+
const nmDir = join(tmpDir, "node_modules");
|
|
41
|
+
return await FSExtra.ensureDir(nmDir), await opts.setupFs(nmDir), await applyDependencyPatches(opts.patches, {
|
|
42
|
+
root: tmpDir
|
|
43
|
+
}), nmDir;
|
|
44
|
+
}
|
|
45
|
+
it("discovers packages in pnpm content-addressable store (non-hoisted)", async () => {
|
|
46
|
+
const nmDir = await setupAndPatch({
|
|
47
|
+
patches: [{
|
|
48
|
+
module: "@react-navigation/core",
|
|
49
|
+
patchFiles: {
|
|
50
|
+
"package.json": contents => {
|
|
51
|
+
if (!contents) return;
|
|
52
|
+
const pkg = JSON.parse(contents);
|
|
53
|
+
return pkg.exports = pkg.exports || {}, pkg.exports["./lib/module/NavigationBuilderContext"] = "./lib/module/NavigationBuilderContext.js", JSON.stringify(pkg, null, 2);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}],
|
|
57
|
+
setupFs: async nm => {
|
|
58
|
+
const storePkgDir = join(nm, ".pnpm", "@react-navigation+core@7.16.1_react@19.0.0", "node_modules", "@react-navigation", "core");
|
|
59
|
+
await FSExtra.ensureDir(storePkgDir), await FSExtra.writeFile(join(storePkgDir, "package.json"), makePkg("@react-navigation/core", "7.16.1"));
|
|
60
|
+
}
|
|
61
|
+
}),
|
|
62
|
+
patchedPkg = await FSExtra.readJSON(join(nmDir, ".pnpm", "@react-navigation+core@7.16.1_react@19.0.0", "node_modules", "@react-navigation", "core", "package.json"));
|
|
63
|
+
expect(patchedPkg.exports["./lib/module/NavigationBuilderContext"]).toBe("./lib/module/NavigationBuilderContext.js");
|
|
64
|
+
}), it("deduplicates symlink and store entry pointing to same files", async () => {
|
|
65
|
+
let patchCallCount = 0;
|
|
66
|
+
await setupAndPatch({
|
|
67
|
+
patches: [{
|
|
68
|
+
module: "test-pkg",
|
|
69
|
+
patchFiles: {
|
|
70
|
+
"index.js": contents => (patchCallCount++, (contents || "") + `
|
|
71
|
+
// patched`)
|
|
72
|
+
}
|
|
73
|
+
}],
|
|
74
|
+
setupFs: async nm => {
|
|
75
|
+
const storeDir = join(nm, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg");
|
|
76
|
+
await FSExtra.ensureDir(storeDir), await FSExtra.writeFile(join(storeDir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(storeDir, "index.js"), "module.exports = {}");
|
|
77
|
+
const symlinkTarget = join(nm, "test-pkg");
|
|
78
|
+
await symlink(storeDir, symlinkTarget, "dir");
|
|
79
|
+
const pnpmHoisted = join(nm, ".pnpm", "node_modules", "test-pkg");
|
|
80
|
+
await FSExtra.ensureDir(join(nm, ".pnpm", "node_modules")), await symlink(storeDir, pnpmHoisted, "dir");
|
|
81
|
+
}
|
|
82
|
+
}), expect(patchCallCount).toBe(1);
|
|
83
|
+
}), it("patches flat node_modules (non-pnpm regression)", async () => {
|
|
84
|
+
const nmDir = await setupAndPatch({
|
|
85
|
+
patches: [{
|
|
86
|
+
module: "test-pkg",
|
|
87
|
+
patchFiles: {
|
|
88
|
+
"index.js": contents => (contents || "") + `
|
|
89
|
+
// patched`
|
|
90
|
+
}
|
|
91
|
+
}],
|
|
92
|
+
setupFs: async nm => {
|
|
93
|
+
const pkgDir = join(nm, "test-pkg");
|
|
94
|
+
await FSExtra.ensureDir(pkgDir), await FSExtra.writeFile(join(pkgDir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(pkgDir, "index.js"), "module.exports = {}");
|
|
95
|
+
}
|
|
96
|
+
}),
|
|
97
|
+
content = await FSExtra.readFile(join(nmDir, "test-pkg", "index.js"), "utf-8");
|
|
98
|
+
expect(content).toContain("// patched");
|
|
99
|
+
}), it("respects version constraints across multiple store versions", async () => {
|
|
100
|
+
await setupAndPatch({
|
|
101
|
+
patches: [{
|
|
102
|
+
module: "test-pkg",
|
|
103
|
+
patchFiles: {
|
|
104
|
+
version: "1.*",
|
|
105
|
+
"index.js": () => "// v1 patched"
|
|
106
|
+
}
|
|
107
|
+
}],
|
|
108
|
+
setupFs: async nm => {
|
|
109
|
+
const v1Dir = join(nm, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg");
|
|
110
|
+
await FSExtra.ensureDir(v1Dir), await FSExtra.writeFile(join(v1Dir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(v1Dir, "index.js"), 'module.exports = "v1"');
|
|
111
|
+
const v2Dir = join(nm, ".pnpm", "test-pkg@2.0.0", "node_modules", "test-pkg");
|
|
112
|
+
await FSExtra.ensureDir(v2Dir), await FSExtra.writeFile(join(v2Dir, "package.json"), makePkg("test-pkg", "2.0.0")), await FSExtra.writeFile(join(v2Dir, "index.js"), 'module.exports = "v2"');
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
const nmDir = join(tmpDir, "node_modules"),
|
|
116
|
+
v1Content = await FSExtra.readFile(join(nmDir, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg", "index.js"), "utf-8");
|
|
117
|
+
expect(v1Content).toBe("// v1 patched");
|
|
118
|
+
const v2Content = await FSExtra.readFile(join(nmDir, ".pnpm", "test-pkg@2.0.0", "node_modules", "test-pkg", "index.js"), "utf-8");
|
|
119
|
+
expect(v2Content).toBe('module.exports = "v2"');
|
|
120
|
+
}), it("deduplicates when hoisted symlink and store entry coexist", async () => {
|
|
121
|
+
let patchCallCount = 0;
|
|
122
|
+
const nmDir = await setupAndPatch({
|
|
123
|
+
patches: [{
|
|
124
|
+
module: "test-pkg",
|
|
125
|
+
patchFiles: {
|
|
126
|
+
"index.js": contents => (patchCallCount++, (contents || "") + `
|
|
127
|
+
// marker`)
|
|
128
|
+
}
|
|
129
|
+
}],
|
|
130
|
+
setupFs: async nm => {
|
|
131
|
+
const storeDir = join(nm, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg");
|
|
132
|
+
await FSExtra.ensureDir(storeDir), await FSExtra.writeFile(join(storeDir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(storeDir, "index.js"), "module.exports = {}"), await FSExtra.ensureDir(join(nm, ".pnpm", "node_modules")), await symlink(storeDir, join(nm, ".pnpm", "node_modules", "test-pkg"), "dir");
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
expect(patchCallCount).toBe(1);
|
|
136
|
+
const content = await FSExtra.readFile(join(nmDir, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg", "index.js"), "utf-8");
|
|
137
|
+
expect(content).toContain("// marker");
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=patches.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FSExtra","join","mkdtemp","rm","symlink","tmpdir","afterEach","beforeEach","describe","expect","it","vi","applyDependencyPatches","moduleToPnpmStorePattern","mock","transformSWC","fn","transformFlowBabel","makePkg","name","version","extras","JSON","stringify","toBe","tmpDir","recursive","force","setupAndPatch","opts","nmDir","ensureDir","setupFs","patches","root","module","patchFiles","contents","pkg","parse","exports","nm","storePkgDir","writeFile","patchedPkg","readJSON","patchCallCount","storeDir","symlinkTarget","pnpmHoisted","pkgDir","content","readFile","toContain","index.js","v1Dir","v2Dir","v1Content","v2Content"],"sources":["../../src/utils/patches.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import FSExtra from "fs-extra";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { mkdtemp, rm, symlink } from "fs/promises";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { applyDependencyPatches, moduleToPnpmStorePattern } from "./patches.native.js";
|
|
7
|
+
vi.mock("@vxrn/compiler", function () {
|
|
8
|
+
return {
|
|
9
|
+
transformSWC: vi.fn()
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
vi.mock("@vxrn/vite-flow", function () {
|
|
13
|
+
return {
|
|
14
|
+
transformFlowBabel: vi.fn()
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
function makePkg(name, version, extras) {
|
|
18
|
+
return JSON.stringify({
|
|
19
|
+
name,
|
|
20
|
+
version,
|
|
21
|
+
...extras
|
|
22
|
+
}, null, 2);
|
|
23
|
+
}
|
|
24
|
+
describe("moduleToPnpmStorePattern", function () {
|
|
25
|
+
it("converts scoped package names", function () {
|
|
26
|
+
expect(moduleToPnpmStorePattern("@react-navigation/core")).toBe("@react-navigation+core");
|
|
27
|
+
}), it("converts other scoped packages", function () {
|
|
28
|
+
expect(moduleToPnpmStorePattern("@expo/cli")).toBe("@expo+cli");
|
|
29
|
+
}), it("passes through unscoped packages unchanged", function () {
|
|
30
|
+
expect(moduleToPnpmStorePattern("react-native-web")).toBe("react-native-web");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("applyDependencyPatches", function () {
|
|
34
|
+
var tmpDir;
|
|
35
|
+
beforeEach(async function () {
|
|
36
|
+
tmpDir = await mkdtemp(join(tmpdir(), "vxrn-patch-test-"));
|
|
37
|
+
}), afterEach(async function () {
|
|
38
|
+
await rm(tmpDir, {
|
|
39
|
+
recursive: !0,
|
|
40
|
+
force: !0
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
async function setupAndPatch(opts) {
|
|
44
|
+
var nmDir = join(tmpDir, "node_modules");
|
|
45
|
+
return await FSExtra.ensureDir(nmDir), await opts.setupFs(nmDir), await applyDependencyPatches(opts.patches, {
|
|
46
|
+
root: tmpDir
|
|
47
|
+
}), nmDir;
|
|
48
|
+
}
|
|
49
|
+
it("discovers packages in pnpm content-addressable store (non-hoisted)", async function () {
|
|
50
|
+
var patches = [{
|
|
51
|
+
module: "@react-navigation/core",
|
|
52
|
+
patchFiles: {
|
|
53
|
+
"package.json": function (contents) {
|
|
54
|
+
if (contents) {
|
|
55
|
+
var pkg = JSON.parse(contents);
|
|
56
|
+
return pkg.exports = pkg.exports || {}, pkg.exports["./lib/module/NavigationBuilderContext"] = "./lib/module/NavigationBuilderContext.js", JSON.stringify(pkg, null, 2);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}],
|
|
61
|
+
nmDir = await setupAndPatch({
|
|
62
|
+
patches,
|
|
63
|
+
setupFs: async function (nm) {
|
|
64
|
+
var storePkgDir = join(nm, ".pnpm", "@react-navigation+core@7.16.1_react@19.0.0", "node_modules", "@react-navigation", "core");
|
|
65
|
+
await FSExtra.ensureDir(storePkgDir), await FSExtra.writeFile(join(storePkgDir, "package.json"), makePkg("@react-navigation/core", "7.16.1"));
|
|
66
|
+
}
|
|
67
|
+
}),
|
|
68
|
+
patchedPkg = await FSExtra.readJSON(join(nmDir, ".pnpm", "@react-navigation+core@7.16.1_react@19.0.0", "node_modules", "@react-navigation", "core", "package.json"));
|
|
69
|
+
expect(patchedPkg.exports["./lib/module/NavigationBuilderContext"]).toBe("./lib/module/NavigationBuilderContext.js");
|
|
70
|
+
}), it("deduplicates symlink and store entry pointing to same files", async function () {
|
|
71
|
+
var patchCallCount = 0,
|
|
72
|
+
patches = [{
|
|
73
|
+
module: "test-pkg",
|
|
74
|
+
patchFiles: {
|
|
75
|
+
"index.js": function (contents) {
|
|
76
|
+
return patchCallCount++, (contents || "") + `
|
|
77
|
+
// patched`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}];
|
|
81
|
+
await setupAndPatch({
|
|
82
|
+
patches,
|
|
83
|
+
setupFs: async function (nm) {
|
|
84
|
+
var storeDir = join(nm, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg");
|
|
85
|
+
await FSExtra.ensureDir(storeDir), await FSExtra.writeFile(join(storeDir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(storeDir, "index.js"), "module.exports = {}");
|
|
86
|
+
var symlinkTarget = join(nm, "test-pkg");
|
|
87
|
+
await symlink(storeDir, symlinkTarget, "dir");
|
|
88
|
+
var pnpmHoisted = join(nm, ".pnpm", "node_modules", "test-pkg");
|
|
89
|
+
await FSExtra.ensureDir(join(nm, ".pnpm", "node_modules")), await symlink(storeDir, pnpmHoisted, "dir");
|
|
90
|
+
}
|
|
91
|
+
}), expect(patchCallCount).toBe(1);
|
|
92
|
+
}), it("patches flat node_modules (non-pnpm regression)", async function () {
|
|
93
|
+
var patches = [{
|
|
94
|
+
module: "test-pkg",
|
|
95
|
+
patchFiles: {
|
|
96
|
+
"index.js": function (contents) {
|
|
97
|
+
return (contents || "") + `
|
|
98
|
+
// patched`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}],
|
|
102
|
+
nmDir = await setupAndPatch({
|
|
103
|
+
patches,
|
|
104
|
+
setupFs: async function (nm) {
|
|
105
|
+
var pkgDir = join(nm, "test-pkg");
|
|
106
|
+
await FSExtra.ensureDir(pkgDir), await FSExtra.writeFile(join(pkgDir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(pkgDir, "index.js"), "module.exports = {}");
|
|
107
|
+
}
|
|
108
|
+
}),
|
|
109
|
+
content = await FSExtra.readFile(join(nmDir, "test-pkg", "index.js"), "utf-8");
|
|
110
|
+
expect(content).toContain("// patched");
|
|
111
|
+
}), it("respects version constraints across multiple store versions", async function () {
|
|
112
|
+
var patches = [{
|
|
113
|
+
module: "test-pkg",
|
|
114
|
+
patchFiles: {
|
|
115
|
+
version: "1.*",
|
|
116
|
+
"index.js": function () {
|
|
117
|
+
return "// v1 patched";
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}];
|
|
121
|
+
await setupAndPatch({
|
|
122
|
+
patches,
|
|
123
|
+
setupFs: async function (nm) {
|
|
124
|
+
var v1Dir = join(nm, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg");
|
|
125
|
+
await FSExtra.ensureDir(v1Dir), await FSExtra.writeFile(join(v1Dir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(v1Dir, "index.js"), 'module.exports = "v1"');
|
|
126
|
+
var v2Dir = join(nm, ".pnpm", "test-pkg@2.0.0", "node_modules", "test-pkg");
|
|
127
|
+
await FSExtra.ensureDir(v2Dir), await FSExtra.writeFile(join(v2Dir, "package.json"), makePkg("test-pkg", "2.0.0")), await FSExtra.writeFile(join(v2Dir, "index.js"), 'module.exports = "v2"');
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
var nmDir = join(tmpDir, "node_modules"),
|
|
131
|
+
v1Content = await FSExtra.readFile(join(nmDir, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg", "index.js"), "utf-8");
|
|
132
|
+
expect(v1Content).toBe("// v1 patched");
|
|
133
|
+
var v2Content = await FSExtra.readFile(join(nmDir, ".pnpm", "test-pkg@2.0.0", "node_modules", "test-pkg", "index.js"), "utf-8");
|
|
134
|
+
expect(v2Content).toBe('module.exports = "v2"');
|
|
135
|
+
}), it("deduplicates when hoisted symlink and store entry coexist", async function () {
|
|
136
|
+
var patchCallCount = 0,
|
|
137
|
+
patches = [{
|
|
138
|
+
module: "test-pkg",
|
|
139
|
+
patchFiles: {
|
|
140
|
+
"index.js": function (contents) {
|
|
141
|
+
return patchCallCount++, (contents || "") + `
|
|
142
|
+
// marker`;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}],
|
|
146
|
+
nmDir = await setupAndPatch({
|
|
147
|
+
patches,
|
|
148
|
+
setupFs: async function (nm) {
|
|
149
|
+
var storeDir = join(nm, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg");
|
|
150
|
+
await FSExtra.ensureDir(storeDir), await FSExtra.writeFile(join(storeDir, "package.json"), makePkg("test-pkg", "1.0.0")), await FSExtra.writeFile(join(storeDir, "index.js"), "module.exports = {}"), await FSExtra.ensureDir(join(nm, ".pnpm", "node_modules")), await symlink(storeDir, join(nm, ".pnpm", "node_modules", "test-pkg"), "dir");
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
expect(patchCallCount).toBe(1);
|
|
154
|
+
var content = await FSExtra.readFile(join(nmDir, ".pnpm", "test-pkg@1.0.0", "node_modules", "test-pkg", "index.js"), "utf-8");
|
|
155
|
+
expect(content).toContain("// marker");
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=patches.test.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FSExtra","join","mkdtemp","rm","symlink","tmpdir","afterEach","beforeEach","describe","expect","it","vi","applyDependencyPatches","moduleToPnpmStorePattern","mock","transformSWC","fn","transformFlowBabel","makePkg","name","version","extras","JSON","stringify","toBe","tmpDir","recursive","force","setupAndPatch","opts","nmDir","ensureDir","setupFs","patches","root","module","patchFiles","package.json","contents","pkg","parse","exports","nm","storePkgDir","writeFile","patchedPkg","readJSON","patchCallCount","index.js","storeDir","symlinkTarget","pnpmHoisted","pkgDir","content","readFile","toContain","v1Dir","v2Dir","v1Content","v2Content"],"sources":["../../src/utils/patches.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vxrn",
|
|
3
|
-
"version": "1.13.
|
|
3
|
+
"version": "1.13.3",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -59,16 +59,16 @@
|
|
|
59
59
|
"@expo/config-plugins": "~55.0.6",
|
|
60
60
|
"@hono/node-server": "^1.19.10",
|
|
61
61
|
"@react-native/dev-middleware": "^0.83.4",
|
|
62
|
-
"@vxrn/compiler": "1.13.
|
|
63
|
-
"@vxrn/debug": "1.13.
|
|
64
|
-
"@vxrn/query-string": "1.13.
|
|
65
|
-
"@vxrn/resolve": "1.13.
|
|
66
|
-
"@vxrn/safe-area": "1.13.
|
|
67
|
-
"@vxrn/url-parse": "1.13.
|
|
68
|
-
"@vxrn/utils": "1.13.
|
|
69
|
-
"@vxrn/vendor": "1.13.
|
|
70
|
-
"@vxrn/vite-flow": "1.13.
|
|
71
|
-
"@vxrn/vite-plugin-metro": "1.13.
|
|
62
|
+
"@vxrn/compiler": "1.13.3",
|
|
63
|
+
"@vxrn/debug": "1.13.3",
|
|
64
|
+
"@vxrn/query-string": "1.13.3",
|
|
65
|
+
"@vxrn/resolve": "1.13.3",
|
|
66
|
+
"@vxrn/safe-area": "1.13.3",
|
|
67
|
+
"@vxrn/url-parse": "1.13.3",
|
|
68
|
+
"@vxrn/utils": "1.13.3",
|
|
69
|
+
"@vxrn/vendor": "1.13.3",
|
|
70
|
+
"@vxrn/vite-flow": "1.13.3",
|
|
71
|
+
"@vxrn/vite-plugin-metro": "1.13.3",
|
|
72
72
|
"citty": "^0.1.6",
|
|
73
73
|
"dotenv": "^17.2.1",
|
|
74
74
|
"dotenv-expand": "^12.0.2",
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import FSExtra from 'fs-extra'
|
|
2
|
+
import { join } from 'node:path'
|
|
3
|
+
import { mkdtemp, rm, symlink } from 'node:fs/promises'
|
|
4
|
+
import { tmpdir } from 'node:os'
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
6
|
+
|
|
7
|
+
// mock heavy deps that aren't needed for patch resolution tests
|
|
8
|
+
vi.mock('@vxrn/compiler', () => ({ transformSWC: vi.fn() }))
|
|
9
|
+
vi.mock('@vxrn/vite-flow', () => ({ transformFlowBabel: vi.fn() }))
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
type DepPatch,
|
|
13
|
+
applyDependencyPatches,
|
|
14
|
+
moduleToPnpmStorePattern,
|
|
15
|
+
} from './patches'
|
|
16
|
+
|
|
17
|
+
// helper to create a minimal package.json
|
|
18
|
+
function makePkg(name: string, version: string, extras?: Record<string, any>) {
|
|
19
|
+
return JSON.stringify({ name, version, ...extras }, null, 2)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
describe('moduleToPnpmStorePattern', () => {
|
|
23
|
+
it('converts scoped package names', () => {
|
|
24
|
+
expect(moduleToPnpmStorePattern('@react-navigation/core')).toBe(
|
|
25
|
+
'@react-navigation+core'
|
|
26
|
+
)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('converts other scoped packages', () => {
|
|
30
|
+
expect(moduleToPnpmStorePattern('@expo/cli')).toBe('@expo+cli')
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('passes through unscoped packages unchanged', () => {
|
|
34
|
+
expect(moduleToPnpmStorePattern('react-native-web')).toBe('react-native-web')
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
describe('applyDependencyPatches', () => {
|
|
39
|
+
let tmpDir: string
|
|
40
|
+
|
|
41
|
+
beforeEach(async () => {
|
|
42
|
+
tmpDir = await mkdtemp(join(tmpdir(), 'vxrn-patch-test-'))
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
afterEach(async () => {
|
|
46
|
+
await rm(tmpDir, { recursive: true, force: true })
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
// helper to set up node_modules structure and run patches
|
|
50
|
+
async function setupAndPatch(opts: {
|
|
51
|
+
patches: DepPatch[]
|
|
52
|
+
setupFs: (nmDir: string) => Promise<void>
|
|
53
|
+
}) {
|
|
54
|
+
const nmDir = join(tmpDir, 'node_modules')
|
|
55
|
+
await FSExtra.ensureDir(nmDir)
|
|
56
|
+
await opts.setupFs(nmDir)
|
|
57
|
+
await applyDependencyPatches(opts.patches, { root: tmpDir })
|
|
58
|
+
return nmDir
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
it('discovers packages in pnpm content-addressable store (non-hoisted)', async () => {
|
|
62
|
+
const patches: DepPatch[] = [
|
|
63
|
+
{
|
|
64
|
+
module: '@react-navigation/core',
|
|
65
|
+
patchFiles: {
|
|
66
|
+
'package.json': (contents) => {
|
|
67
|
+
if (!contents) return
|
|
68
|
+
const pkg = JSON.parse(contents)
|
|
69
|
+
pkg.exports = pkg.exports || {}
|
|
70
|
+
pkg.exports['./lib/module/NavigationBuilderContext'] =
|
|
71
|
+
'./lib/module/NavigationBuilderContext.js'
|
|
72
|
+
return JSON.stringify(pkg, null, 2)
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
const nmDir = await setupAndPatch({
|
|
79
|
+
patches,
|
|
80
|
+
setupFs: async (nm) => {
|
|
81
|
+
// create pnpm store entry (package NOT hoisted to top-level or .pnpm/node_modules)
|
|
82
|
+
const storePkgDir = join(
|
|
83
|
+
nm,
|
|
84
|
+
'.pnpm',
|
|
85
|
+
'@react-navigation+core@7.16.1_react@19.0.0',
|
|
86
|
+
'node_modules',
|
|
87
|
+
'@react-navigation',
|
|
88
|
+
'core'
|
|
89
|
+
)
|
|
90
|
+
await FSExtra.ensureDir(storePkgDir)
|
|
91
|
+
await FSExtra.writeFile(
|
|
92
|
+
join(storePkgDir, 'package.json'),
|
|
93
|
+
makePkg('@react-navigation/core', '7.16.1')
|
|
94
|
+
)
|
|
95
|
+
},
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// verify the patch was applied in the store
|
|
99
|
+
const patchedPkg = await FSExtra.readJSON(
|
|
100
|
+
join(
|
|
101
|
+
nmDir,
|
|
102
|
+
'.pnpm',
|
|
103
|
+
'@react-navigation+core@7.16.1_react@19.0.0',
|
|
104
|
+
'node_modules',
|
|
105
|
+
'@react-navigation',
|
|
106
|
+
'core',
|
|
107
|
+
'package.json'
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
expect(patchedPkg.exports['./lib/module/NavigationBuilderContext']).toBe(
|
|
111
|
+
'./lib/module/NavigationBuilderContext.js'
|
|
112
|
+
)
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
it('deduplicates symlink and store entry pointing to same files', async () => {
|
|
116
|
+
let patchCallCount = 0
|
|
117
|
+
|
|
118
|
+
const patches: DepPatch[] = [
|
|
119
|
+
{
|
|
120
|
+
module: 'test-pkg',
|
|
121
|
+
patchFiles: {
|
|
122
|
+
'index.js': (contents) => {
|
|
123
|
+
patchCallCount++
|
|
124
|
+
return (contents || '') + '\n// patched'
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
]
|
|
129
|
+
|
|
130
|
+
await setupAndPatch({
|
|
131
|
+
patches,
|
|
132
|
+
setupFs: async (nm) => {
|
|
133
|
+
// create the real package in pnpm store
|
|
134
|
+
const storeDir = join(nm, '.pnpm', 'test-pkg@1.0.0', 'node_modules', 'test-pkg')
|
|
135
|
+
await FSExtra.ensureDir(storeDir)
|
|
136
|
+
await FSExtra.writeFile(
|
|
137
|
+
join(storeDir, 'package.json'),
|
|
138
|
+
makePkg('test-pkg', '1.0.0')
|
|
139
|
+
)
|
|
140
|
+
await FSExtra.writeFile(join(storeDir, 'index.js'), 'module.exports = {}')
|
|
141
|
+
|
|
142
|
+
// create symlink at top-level node_modules (like pnpm does when hoisted)
|
|
143
|
+
const symlinkTarget = join(nm, 'test-pkg')
|
|
144
|
+
await symlink(storeDir, symlinkTarget, 'dir')
|
|
145
|
+
|
|
146
|
+
// also create .pnpm/node_modules hoisted symlink
|
|
147
|
+
const pnpmHoisted = join(nm, '.pnpm', 'node_modules', 'test-pkg')
|
|
148
|
+
await FSExtra.ensureDir(join(nm, '.pnpm', 'node_modules'))
|
|
149
|
+
await symlink(storeDir, pnpmHoisted, 'dir')
|
|
150
|
+
},
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
// the non-idempotent patch should have been called exactly once due to dedup
|
|
154
|
+
expect(patchCallCount).toBe(1)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
it('patches flat node_modules (non-pnpm regression)', async () => {
|
|
158
|
+
const patches: DepPatch[] = [
|
|
159
|
+
{
|
|
160
|
+
module: 'test-pkg',
|
|
161
|
+
patchFiles: {
|
|
162
|
+
'index.js': (contents) => {
|
|
163
|
+
return (contents || '') + '\n// patched'
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
]
|
|
168
|
+
|
|
169
|
+
const nmDir = await setupAndPatch({
|
|
170
|
+
patches,
|
|
171
|
+
setupFs: async (nm) => {
|
|
172
|
+
// standard flat node_modules layout, no .pnpm
|
|
173
|
+
const pkgDir = join(nm, 'test-pkg')
|
|
174
|
+
await FSExtra.ensureDir(pkgDir)
|
|
175
|
+
await FSExtra.writeFile(
|
|
176
|
+
join(pkgDir, 'package.json'),
|
|
177
|
+
makePkg('test-pkg', '1.0.0')
|
|
178
|
+
)
|
|
179
|
+
await FSExtra.writeFile(join(pkgDir, 'index.js'), 'module.exports = {}')
|
|
180
|
+
},
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
const content = await FSExtra.readFile(join(nmDir, 'test-pkg', 'index.js'), 'utf-8')
|
|
184
|
+
expect(content).toContain('// patched')
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('respects version constraints across multiple store versions', async () => {
|
|
188
|
+
const patches: DepPatch[] = [
|
|
189
|
+
{
|
|
190
|
+
module: 'test-pkg',
|
|
191
|
+
patchFiles: {
|
|
192
|
+
version: '1.*',
|
|
193
|
+
'index.js': () => '// v1 patched',
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
]
|
|
197
|
+
|
|
198
|
+
await setupAndPatch({
|
|
199
|
+
patches,
|
|
200
|
+
setupFs: async (nm) => {
|
|
201
|
+
// v1 store entry
|
|
202
|
+
const v1Dir = join(nm, '.pnpm', 'test-pkg@1.0.0', 'node_modules', 'test-pkg')
|
|
203
|
+
await FSExtra.ensureDir(v1Dir)
|
|
204
|
+
await FSExtra.writeFile(join(v1Dir, 'package.json'), makePkg('test-pkg', '1.0.0'))
|
|
205
|
+
await FSExtra.writeFile(join(v1Dir, 'index.js'), 'module.exports = "v1"')
|
|
206
|
+
|
|
207
|
+
// v2 store entry
|
|
208
|
+
const v2Dir = join(nm, '.pnpm', 'test-pkg@2.0.0', 'node_modules', 'test-pkg')
|
|
209
|
+
await FSExtra.ensureDir(v2Dir)
|
|
210
|
+
await FSExtra.writeFile(join(v2Dir, 'package.json'), makePkg('test-pkg', '2.0.0'))
|
|
211
|
+
await FSExtra.writeFile(join(v2Dir, 'index.js'), 'module.exports = "v2"')
|
|
212
|
+
},
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
const nmDir = join(tmpDir, 'node_modules')
|
|
216
|
+
|
|
217
|
+
// v1 should be patched
|
|
218
|
+
const v1Content = await FSExtra.readFile(
|
|
219
|
+
join(nmDir, '.pnpm', 'test-pkg@1.0.0', 'node_modules', 'test-pkg', 'index.js'),
|
|
220
|
+
'utf-8'
|
|
221
|
+
)
|
|
222
|
+
expect(v1Content).toBe('// v1 patched')
|
|
223
|
+
|
|
224
|
+
// v2 should NOT be patched
|
|
225
|
+
const v2Content = await FSExtra.readFile(
|
|
226
|
+
join(nmDir, '.pnpm', 'test-pkg@2.0.0', 'node_modules', 'test-pkg', 'index.js'),
|
|
227
|
+
'utf-8'
|
|
228
|
+
)
|
|
229
|
+
expect(v2Content).toBe('module.exports = "v2"')
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
it('deduplicates when hoisted symlink and store entry coexist', async () => {
|
|
233
|
+
let patchCallCount = 0
|
|
234
|
+
|
|
235
|
+
const patches: DepPatch[] = [
|
|
236
|
+
{
|
|
237
|
+
module: 'test-pkg',
|
|
238
|
+
patchFiles: {
|
|
239
|
+
'index.js': (contents) => {
|
|
240
|
+
patchCallCount++
|
|
241
|
+
return (contents || '') + '\n// marker'
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
]
|
|
246
|
+
|
|
247
|
+
const nmDir = await setupAndPatch({
|
|
248
|
+
patches,
|
|
249
|
+
setupFs: async (nm) => {
|
|
250
|
+
// real package in store
|
|
251
|
+
const storeDir = join(nm, '.pnpm', 'test-pkg@1.0.0', 'node_modules', 'test-pkg')
|
|
252
|
+
await FSExtra.ensureDir(storeDir)
|
|
253
|
+
await FSExtra.writeFile(
|
|
254
|
+
join(storeDir, 'package.json'),
|
|
255
|
+
makePkg('test-pkg', '1.0.0')
|
|
256
|
+
)
|
|
257
|
+
await FSExtra.writeFile(join(storeDir, 'index.js'), 'module.exports = {}')
|
|
258
|
+
|
|
259
|
+
// hoisted symlink in .pnpm/node_modules
|
|
260
|
+
await FSExtra.ensureDir(join(nm, '.pnpm', 'node_modules'))
|
|
261
|
+
await symlink(storeDir, join(nm, '.pnpm', 'node_modules', 'test-pkg'), 'dir')
|
|
262
|
+
},
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
expect(patchCallCount).toBe(1)
|
|
266
|
+
|
|
267
|
+
// verify the file was actually patched
|
|
268
|
+
const content = await FSExtra.readFile(
|
|
269
|
+
join(nmDir, '.pnpm', 'test-pkg@1.0.0', 'node_modules', 'test-pkg', 'index.js'),
|
|
270
|
+
'utf-8'
|
|
271
|
+
)
|
|
272
|
+
expect(content).toContain('// marker')
|
|
273
|
+
})
|
|
274
|
+
})
|
package/src/utils/patches.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { transformSWC } from '@vxrn/compiler'
|
|
2
2
|
import { transformFlowBabel } from '@vxrn/vite-flow'
|
|
3
|
+
import Glob from 'fast-glob'
|
|
3
4
|
import findNodeModules from 'find-node-modules'
|
|
4
5
|
import FSExtra from 'fs-extra'
|
|
6
|
+
import { realpathSync } from 'node:fs'
|
|
5
7
|
import { join } from 'node:path'
|
|
6
8
|
import { rename } from 'node:fs/promises'
|
|
7
9
|
import semver from 'semver'
|
|
@@ -93,22 +95,58 @@ async function writePatchStats(nodeModulesDir: string, stats: PatchStats) {
|
|
|
93
95
|
|
|
94
96
|
type PatchResult = 'applied' | 'ok' | 'skipped'
|
|
95
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Convert a module name to a pnpm content-addressable store glob pattern.
|
|
100
|
+
* Scoped packages: @scope/name -> @scope+name
|
|
101
|
+
* Unscoped packages pass through unchanged.
|
|
102
|
+
*/
|
|
103
|
+
export function moduleToPnpmStorePattern(moduleName: string): string {
|
|
104
|
+
return moduleName.replace('/', '+')
|
|
105
|
+
}
|
|
106
|
+
|
|
96
107
|
export async function applyDependencyPatches(
|
|
97
108
|
patches: DepPatch[],
|
|
98
109
|
{ root = process.cwd() }: { root?: string } = {}
|
|
99
110
|
) {
|
|
111
|
+
// collect unique module names for pnpm store globbing
|
|
112
|
+
const patchModuleNames = [...new Set(patches.map((p) => p.module))]
|
|
113
|
+
|
|
100
114
|
const nodeModulesDirs = findNodeModules({ cwd: root }).flatMap((relativePath) => {
|
|
101
115
|
const dir = join(root, relativePath)
|
|
116
|
+
const dirs = [dir]
|
|
117
|
+
|
|
118
|
+
const pnpmBase = join(dir, '.pnpm')
|
|
119
|
+
if (!FSExtra.existsSync(pnpmBase)) return dirs
|
|
120
|
+
|
|
102
121
|
// pnpm hoists transitive deps into .pnpm/node_modules/ (symlinks to store)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
122
|
+
const pnpmHoistedDir = join(pnpmBase, 'node_modules')
|
|
123
|
+
if (FSExtra.existsSync(pnpmHoistedDir)) {
|
|
124
|
+
dirs.push(pnpmHoistedDir)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// pnpm content-addressable store: scan for store entries matching our patch modules
|
|
128
|
+
// handles cases where packages aren't hoisted (strict mode, peer dep conflicts, hoist=false)
|
|
129
|
+
for (const moduleName of patchModuleNames) {
|
|
130
|
+
const storePattern = moduleToPnpmStorePattern(moduleName)
|
|
131
|
+
const storeMatches = Glob.sync(`${storePattern}@*/node_modules`, {
|
|
132
|
+
cwd: pnpmBase,
|
|
133
|
+
onlyDirectories: true,
|
|
134
|
+
})
|
|
135
|
+
for (const match of storeMatches) {
|
|
136
|
+
dirs.push(join(pnpmBase, match))
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return dirs
|
|
106
141
|
})
|
|
107
142
|
|
|
108
143
|
// track results per module
|
|
109
144
|
const results = new Map<string, PatchResult>()
|
|
110
145
|
// track modules that already warned about transform failures (to avoid spam)
|
|
111
146
|
const transformWarnedModules = new Set<string>()
|
|
147
|
+
// track real paths per (patch index, real dir) to prevent double-patching
|
|
148
|
+
// when symlinks and store entries resolve to the same physical files
|
|
149
|
+
const patchedRealPaths = new Set<string>()
|
|
112
150
|
|
|
113
151
|
await Promise.all(
|
|
114
152
|
nodeModulesDirs.map(async (nodeModulesDir) => {
|
|
@@ -123,6 +161,19 @@ export async function applyDependencyPatches(
|
|
|
123
161
|
|
|
124
162
|
if (!FSExtra.existsSync(nodeModuleDir)) return
|
|
125
163
|
|
|
164
|
+
// deduplicate by real path to avoid patching the same files twice
|
|
165
|
+
// (multiple symlinks/paths can resolve to the same pnpm store entry)
|
|
166
|
+
let realModuleDir: string
|
|
167
|
+
try {
|
|
168
|
+
realModuleDir = realpathSync(nodeModuleDir)
|
|
169
|
+
} catch {
|
|
170
|
+
return
|
|
171
|
+
}
|
|
172
|
+
const patchIdx = patches.indexOf(patch)
|
|
173
|
+
const dedupKey = `${patchIdx}\0${realModuleDir}`
|
|
174
|
+
if (patchedRealPaths.has(dedupKey)) return
|
|
175
|
+
patchedRealPaths.add(dedupKey)
|
|
176
|
+
|
|
126
177
|
const version = patch.patchFiles.version
|
|
127
178
|
if (typeof version === 'string') {
|
|
128
179
|
const pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, 'package.json'))
|
package/types/utils/patches.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export declare function bailIfUnchanged(obj1: any, obj2: any): void;
|
|
|
13
13
|
export declare function bailIfExists(haystack: string, needle: string): void;
|
|
14
14
|
export type SimpleDepPatchObject = Record<string, DepPatch['patchFiles']>;
|
|
15
15
|
export declare function applyBuiltInPatches(options: Pick<VXRNOptionsFilled, 'root'>, extraPatches?: SimpleDepPatchObject): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Convert a module name to a pnpm content-addressable store glob pattern.
|
|
18
|
+
* Scoped packages: @scope/name -> @scope+name
|
|
19
|
+
* Unscoped packages pass through unchanged.
|
|
20
|
+
*/
|
|
21
|
+
export declare function moduleToPnpmStorePattern(moduleName: string): string;
|
|
16
22
|
export declare function applyDependencyPatches(patches: DepPatch[], { root }?: {
|
|
17
23
|
root?: string;
|
|
18
24
|
}): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patches.d.ts","sourceRoot":"","sources":["../../src/utils/patches.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"patches.d.ts","sourceRoot":"","sources":["../../src/utils/patches.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAInE,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAExC,MAAM,MAAM,eAAe,GACvB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAC/D,MAAM,GACN,UAAU,EAAE,CAAA;AAEhB,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QACjC,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;KAC/B,CAAA;CACF,CAAA;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAInD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAI5D;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAA;AAEzE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,EACxC,YAAY,CAAC,EAAE,oBAAoB,iBA2BpC;AAyBD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,QAAQ,EAAE,EACnB,EAAE,IAAoB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBA2QjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patches.test.d.ts","sourceRoot":"","sources":["../../src/utils/patches.test.ts"],"names":[],"mappings":""}
|