vxrn 1.2.87 → 1.2.89
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.js +101 -67
- package/dist/utils/patches.js.map +2 -2
- package/dist/utils/patches.mjs +112 -53
- package/dist/utils/patches.mjs.map +1 -1
- package/dist/utils/patches.native.js +154 -81
- package/dist/utils/patches.native.js.map +1 -1
- package/package.json +12 -12
- package/src/utils/patches.ts +168 -157
- package/types/utils/patches.d.ts.map +1 -1
package/dist/utils/patches.js
CHANGED
|
@@ -46,63 +46,83 @@ async function applyOptimizePatches(patches, config) {
|
|
|
46
46
|
typeof optimize < "u" && (optimize === !0 ? optimizeDeps.include.push(patch.module) : optimize === !1 || optimize === "exclude" ? (optimizeDeps?.include && (optimizeDeps.include = optimizeDeps.include.filter((x) => x !== patch.module)), optimizeDeps.exclude.push(patch.module)) : optimize === "interop" && (optimizeDeps?.include?.push(patch.module), optimizeDeps?.needsInterop?.push(patch.module)));
|
|
47
47
|
}), deepMergeOptimizeDeps(config, { optimizeDeps }, void 0, !0), deepMergeOptimizeDeps(config.ssr, { optimizeDeps }, void 0, !0);
|
|
48
48
|
}
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
const STATS_FILE = ".vxrn.patch-stats.json";
|
|
50
|
+
function getOriginalPath(fullPath) {
|
|
51
|
+
return fullPath + ".vxrn.original";
|
|
52
|
+
}
|
|
53
|
+
async function readPatchStats(nodeModulesDir) {
|
|
54
|
+
try {
|
|
55
|
+
return await FSExtra.readJSON(join(nodeModulesDir, STATS_FILE));
|
|
56
|
+
} catch {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function writePatchStats(nodeModulesDir, stats) {
|
|
61
|
+
await FSExtra.writeJSON(join(nodeModulesDir, STATS_FILE), stats);
|
|
62
|
+
}
|
|
55
63
|
async function applyDependencyPatches(patches, { root = process.cwd() } = {}) {
|
|
56
|
-
const nodeModulesDirs = findNodeModules({
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
const nodeModulesDirs = findNodeModules({ cwd: root }).map(
|
|
65
|
+
(relativePath) => join(root, relativePath)
|
|
66
|
+
);
|
|
59
67
|
await Promise.all(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
if (!
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
nodeModulesDirs.map(async (nodeModulesDir) => {
|
|
69
|
+
const patchStats = await readPatchStats(nodeModulesDir);
|
|
70
|
+
let statsChanged = !1;
|
|
71
|
+
await Promise.all(
|
|
72
|
+
patches.map(async (patch) => {
|
|
73
|
+
try {
|
|
74
|
+
const nodeModuleDir = join(nodeModulesDir, patch.module);
|
|
75
|
+
if (!FSExtra.existsSync(nodeModuleDir)) return;
|
|
76
|
+
const version = patch.patchFiles.version;
|
|
77
|
+
if (typeof version == "string") {
|
|
78
|
+
const pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
|
|
79
|
+
if (!semver.satisfies(pkgJSON.version, version)) return;
|
|
80
|
+
}
|
|
81
|
+
let hasLogged = !1;
|
|
82
|
+
const filePatches = [];
|
|
83
|
+
for (const file in patch.patchFiles) {
|
|
84
|
+
if (file === "optimize" || file === "version") continue;
|
|
85
|
+
const filesToApply = file.includes("*") ? globDir(nodeModuleDir, file) : [file];
|
|
86
|
+
for (const relativePath of filesToApply)
|
|
87
|
+
filePatches.push({
|
|
88
|
+
relativePath,
|
|
89
|
+
patchDefinition: patch.patchFiles[file]
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
const filesToProcess = (await Promise.all(
|
|
93
|
+
filePatches.map(async ({ relativePath }) => {
|
|
94
|
+
const fullPath = join(nodeModuleDir, relativePath);
|
|
95
|
+
try {
|
|
96
|
+
const stat = await FSExtra.stat(fullPath);
|
|
97
|
+
return { relativePath, fullPath, stat, exists: !0 };
|
|
98
|
+
} catch {
|
|
99
|
+
return { relativePath, fullPath, stat: null, exists: !1 };
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
)).filter(
|
|
103
|
+
({ fullPath, stat, exists }) => {
|
|
104
|
+
if (!exists || !stat) return !1;
|
|
105
|
+
if (process.env.VXRN_FORCE_PATCH) return !0;
|
|
106
|
+
const cached = patchStats[fullPath];
|
|
107
|
+
return cached ? stat.size !== cached.size || stat.mtimeMs !== cached.mtimeMs : !0;
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
if (filesToProcess.length === 0) return;
|
|
74
111
|
await Promise.all(
|
|
75
|
-
|
|
112
|
+
filesToProcess.map(async ({ relativePath, fullPath }) => {
|
|
76
113
|
try {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
) && atomicWriteFile(
|
|
90
|
-
getOgFilePath(fullPath),
|
|
91
|
-
possibleOrigContents
|
|
92
|
-
),
|
|
93
|
-
atomicWriteFile(fullPath, contents)
|
|
94
|
-
].filter((p) => !!p)
|
|
95
|
-
), hasLogged || (hasLogged = !0, console.info(` \u{1FA79} Patching ${patch.module}`)), process.env.DEBUG && console.info(
|
|
96
|
-
` - Applied patch to ${patch.module}: ${relativePath}`
|
|
97
|
-
);
|
|
98
|
-
}, patchDefinition = patch.patchFiles[file];
|
|
99
|
-
if (typeof patchDefinition == "string") {
|
|
100
|
-
await write(patchDefinition);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (Array.isArray(patchDefinition)) {
|
|
104
|
-
let contents = contentsIn;
|
|
105
|
-
for (const strategy of patchDefinition)
|
|
114
|
+
const patchDef = filePatches.find(
|
|
115
|
+
(p) => p.relativePath === relativePath
|
|
116
|
+
).patchDefinition, originalPath = getOriginalPath(fullPath), [targetContent, originalContent] = await Promise.all([
|
|
117
|
+
FSExtra.readFile(fullPath, "utf-8"),
|
|
118
|
+
FSExtra.readFile(originalPath, "utf-8").catch(() => null)
|
|
119
|
+
]), sourceContent = originalContent ?? targetContent;
|
|
120
|
+
let patchedContent = null;
|
|
121
|
+
if (typeof patchDef == "string")
|
|
122
|
+
patchedContent = patchDef;
|
|
123
|
+
else if (Array.isArray(patchDef)) {
|
|
124
|
+
let contents = sourceContent;
|
|
125
|
+
for (const strategy of patchDef)
|
|
106
126
|
strategy === "flow" && (contents = await transformFlowBabel(contents)), (strategy === "swc" || strategy === "jsx") && (contents = (await transformSWC(fullPath, contents, {
|
|
107
127
|
mode: "build",
|
|
108
128
|
environment: "ios",
|
|
@@ -110,29 +130,43 @@ async function applyDependencyPatches(patches, { root = process.cwd() } = {}) {
|
|
|
110
130
|
noHMR: !0,
|
|
111
131
|
fixNonTypeSpecificImports: !0
|
|
112
132
|
}))?.code || contents);
|
|
113
|
-
|
|
114
|
-
|
|
133
|
+
contents !== sourceContent && (patchedContent = contents);
|
|
134
|
+
} else {
|
|
135
|
+
const out = await patchDef(sourceContent);
|
|
136
|
+
typeof out == "string" && out !== sourceContent && (patchedContent = out);
|
|
137
|
+
}
|
|
138
|
+
if (patchedContent !== null) {
|
|
139
|
+
if (targetContent === patchedContent) {
|
|
140
|
+
const stat2 = await FSExtra.stat(fullPath);
|
|
141
|
+
patchStats[fullPath] = { size: stat2.size, mtimeMs: stat2.mtimeMs }, statsChanged = !0;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
await Promise.all([
|
|
145
|
+
originalContent === null && atomicWriteFile(originalPath, sourceContent),
|
|
146
|
+
atomicWriteFile(fullPath, patchedContent)
|
|
147
|
+
]);
|
|
148
|
+
const stat = await FSExtra.stat(fullPath);
|
|
149
|
+
patchStats[fullPath] = { size: stat.size, mtimeMs: stat.mtimeMs }, statsChanged = !0, hasLogged || (hasLogged = !0, console.info(` \u{1FA79} Patching ${patch.module}`)), process.env.DEBUG && console.info(
|
|
150
|
+
` - Applied patch to ${patch.module}: ${relativePath}`
|
|
151
|
+
);
|
|
152
|
+
} else {
|
|
153
|
+
const stat = await FSExtra.stat(fullPath);
|
|
154
|
+
patchStats[fullPath] = { size: stat.size, mtimeMs: stat.mtimeMs }, statsChanged = !0;
|
|
115
155
|
}
|
|
116
|
-
const out = await patchDefinition(contentsIn);
|
|
117
|
-
typeof out == "string" && await write(out);
|
|
118
156
|
} catch (err) {
|
|
119
|
-
if (err instanceof Bail)
|
|
120
|
-
return;
|
|
157
|
+
if (err instanceof Bail) return;
|
|
121
158
|
throw err;
|
|
122
159
|
}
|
|
123
160
|
})
|
|
124
161
|
);
|
|
162
|
+
} catch (err) {
|
|
163
|
+
console.error("\u{1F6A8} Error applying patch to", patch.module), console.error(err);
|
|
125
164
|
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
}))
|
|
165
|
+
})
|
|
166
|
+
), statsChanged && await writePatchStats(nodeModulesDir, patchStats);
|
|
167
|
+
})
|
|
131
168
|
);
|
|
132
169
|
}
|
|
133
|
-
function getOgFilePath(fullPath) {
|
|
134
|
-
return fullPath + ".vxrn.ogfile";
|
|
135
|
-
}
|
|
136
170
|
async function atomicWriteFile(filePath, contents) {
|
|
137
171
|
const tempPath = filePath + ".vxrn.tmp." + process.pid + "." + Date.now();
|
|
138
172
|
await FSExtra.writeFile(tempPath, contents), await rename(tempPath, filePath);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/patches.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,OAAO,qBAAqB;AAC5B,OAAO,aAAa;AACpB,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,OAAO,YAAY;AAGnB,SAAS,6BAA6B;AACtC,SAAS,yBAAyB;AAClC,SAAS,eAAe;AAkBxB,MAAM,aAAa,MAAM;AAAC;AAEnB,SAAS,gBAAgB,MAAW,MAAW;AACpD,MAAI,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI;AAC9C,UAAM,IAAI,KAAK;AAEnB;AAEO,SAAS,aAAa,UAAkB,QAAgB;AAC7D,MAAI,SAAS,SAAS,MAAM;AAC1B,UAAM,IAAI,KAAK;AAEnB;AAIA,eAAsB,oBACpB,SACA,cACA;AACA,QAAM,MAAM,CAAC,GAAG,iBAAiB;AAGjC,MAAI;AACF,eAAW,OAAO,cAAc;AAC9B,YAAM,kBAAkB,aAAa,GAAG,GAClC,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG;AACjD,UAAI;AACF,mBAAW,YAAY;AACrB,UAAI,SAAS,WAAW,QAAQ,KAC9B,QAAQ;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,UACF,GAEF,SAAS,WAAW,QAAQ,IAAI,gBAAgB,QAAQ;AAAA;AAG1D,YAAI,KAAK,EAAE,QAAQ,KAAK,YAAY,gBAAgB,CAAC;AAAA,IAEzD;AAGF,QAAM,uBAAuB,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAC1D;AAEA,eAAsB,qBAAqB,SAAqB,QAAoB;AAClF,QAAM,eAAe;AAAA,IACnB,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,IACV,cAAc,CAAC;AAAA,EACjB;AAEA,UAAQ,QAAQ,CAAC,UAAU;AAEzB,UAAM,WAAW,MAAM,WAAW;AAClC,IAAI,OAAO,WAAa,QAClB,aAAa,KACf,aAAa,QAAQ,KAAK,MAAM,MAAM,IAC7B,aAAa,MAAS,aAAa,aACxC,cAAc,YAChB,aAAa,UAAU,aAAa,QAAQ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,IAE9E,aAAa,QAAQ,KAAK,MAAM,MAAM,KAC7B,aAAa,cACtB,cAAc,SAAS,KAAK,MAAM,MAAM,GACxC,cAAc,cAAc,KAAK,MAAM,MAAM;AAAA,EAGnD,CAAC,GAED,sBAAsB,QAAQ,EAAE,aAAa,GAAG,QAAW,EAAI,GAC/D,sBAAsB,OAAO,KAAM,EAAE,aAAa,GAAG,QAAW,EAAI;AACtE;
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["stat"]
|
|
6
6
|
}
|
package/dist/utils/patches.mjs
CHANGED
|
@@ -44,76 +44,135 @@ async function applyOptimizePatches(patches, config) {
|
|
|
44
44
|
optimizeDeps
|
|
45
45
|
}, void 0, !0);
|
|
46
46
|
}
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
47
|
+
const STATS_FILE = ".vxrn.patch-stats.json";
|
|
48
|
+
function getOriginalPath(fullPath) {
|
|
49
|
+
return fullPath + ".vxrn.original";
|
|
50
|
+
}
|
|
51
|
+
async function readPatchStats(nodeModulesDir) {
|
|
52
|
+
try {
|
|
53
|
+
return await FSExtra.readJSON(join(nodeModulesDir, STATS_FILE));
|
|
54
|
+
} catch {
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function writePatchStats(nodeModulesDir, stats) {
|
|
59
|
+
await FSExtra.writeJSON(join(nodeModulesDir, STATS_FILE), stats);
|
|
60
|
+
}
|
|
54
61
|
async function applyDependencyPatches(patches, {
|
|
55
62
|
root = process.cwd()
|
|
56
63
|
} = {}) {
|
|
57
64
|
const nodeModulesDirs = findNodeModules({
|
|
58
65
|
cwd: root
|
|
59
66
|
}).map(relativePath => join(root, relativePath));
|
|
60
|
-
await Promise.all(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
await Promise.all(nodeModulesDirs.map(async nodeModulesDir => {
|
|
68
|
+
const patchStats = await readPatchStats(nodeModulesDir);
|
|
69
|
+
let statsChanged = !1;
|
|
70
|
+
await Promise.all(patches.map(async patch => {
|
|
71
|
+
try {
|
|
72
|
+
const nodeModuleDir = join(nodeModulesDir, patch.module);
|
|
73
|
+
if (!FSExtra.existsSync(nodeModuleDir)) return;
|
|
74
|
+
const version = patch.patchFiles.version;
|
|
66
75
|
if (typeof version == "string") {
|
|
67
76
|
const pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
|
|
68
77
|
if (!semver.satisfies(pkgJSON.version, version)) return;
|
|
69
78
|
}
|
|
79
|
+
let hasLogged = !1;
|
|
80
|
+
const filePatches = [];
|
|
70
81
|
for (const file in patch.patchFiles) {
|
|
71
82
|
if (file === "optimize" || file === "version") continue;
|
|
72
83
|
const filesToApply = file.includes("*") ? globDir(nodeModuleDir, file) : [file];
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
84
|
+
for (const relativePath of filesToApply) filePatches.push({
|
|
85
|
+
relativePath,
|
|
86
|
+
patchDefinition: patch.patchFiles[file]
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const filesToProcess = (await Promise.all(filePatches.map(async ({
|
|
90
|
+
relativePath
|
|
91
|
+
}) => {
|
|
92
|
+
const fullPath = join(nodeModuleDir, relativePath);
|
|
93
|
+
try {
|
|
94
|
+
const stat = await FSExtra.stat(fullPath);
|
|
95
|
+
return {
|
|
96
|
+
relativePath,
|
|
97
|
+
fullPath,
|
|
98
|
+
stat,
|
|
99
|
+
exists: !0
|
|
100
|
+
};
|
|
101
|
+
} catch {
|
|
102
|
+
return {
|
|
103
|
+
relativePath,
|
|
104
|
+
fullPath,
|
|
105
|
+
stat: null,
|
|
106
|
+
exists: !1
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}))).filter(({
|
|
110
|
+
fullPath,
|
|
111
|
+
stat,
|
|
112
|
+
exists
|
|
113
|
+
}) => {
|
|
114
|
+
if (!exists || !stat) return !1;
|
|
115
|
+
if (process.env.VXRN_FORCE_PATCH) return !0;
|
|
116
|
+
const cached = patchStats[fullPath];
|
|
117
|
+
return cached ? stat.size !== cached.size || stat.mtimeMs !== cached.mtimeMs : !0;
|
|
118
|
+
});
|
|
119
|
+
if (filesToProcess.length === 0) return;
|
|
120
|
+
await Promise.all(filesToProcess.map(async ({
|
|
121
|
+
relativePath,
|
|
122
|
+
fullPath
|
|
123
|
+
}) => {
|
|
124
|
+
try {
|
|
125
|
+
const patchDef = filePatches.find(p => p.relativePath === relativePath).patchDefinition,
|
|
126
|
+
originalPath = getOriginalPath(fullPath),
|
|
127
|
+
[targetContent, originalContent] = await Promise.all([FSExtra.readFile(fullPath, "utf-8"), FSExtra.readFile(originalPath, "utf-8").catch(() => null)]),
|
|
128
|
+
sourceContent = originalContent ?? targetContent;
|
|
129
|
+
let patchedContent = null;
|
|
130
|
+
if (typeof patchDef == "string") patchedContent = patchDef;else if (Array.isArray(patchDef)) {
|
|
131
|
+
let contents = sourceContent;
|
|
132
|
+
for (const strategy of patchDef) strategy === "flow" && (contents = await transformFlowBabel(contents)), (strategy === "swc" || strategy === "jsx") && (contents = (await transformSWC(fullPath, contents, {
|
|
133
|
+
mode: "build",
|
|
134
|
+
environment: "ios",
|
|
135
|
+
forceJSX: strategy === "jsx",
|
|
136
|
+
noHMR: !0,
|
|
137
|
+
fixNonTypeSpecificImports: !0
|
|
138
|
+
}))?.code || contents);
|
|
139
|
+
contents !== sourceContent && (patchedContent = contents);
|
|
140
|
+
} else {
|
|
141
|
+
const out = await patchDef(sourceContent);
|
|
142
|
+
typeof out == "string" && out !== sourceContent && (patchedContent = out);
|
|
143
|
+
}
|
|
144
|
+
if (patchedContent !== null) {
|
|
145
|
+
if (targetContent === patchedContent) {
|
|
146
|
+
const stat2 = await FSExtra.stat(fullPath);
|
|
147
|
+
patchStats[fullPath] = {
|
|
148
|
+
size: stat2.size,
|
|
149
|
+
mtimeMs: stat2.mtimeMs
|
|
150
|
+
}, statsChanged = !0;
|
|
99
151
|
return;
|
|
100
152
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
153
|
+
await Promise.all([originalContent === null && atomicWriteFile(originalPath, sourceContent), atomicWriteFile(fullPath, patchedContent)]);
|
|
154
|
+
const stat = await FSExtra.stat(fullPath);
|
|
155
|
+
patchStats[fullPath] = {
|
|
156
|
+
size: stat.size,
|
|
157
|
+
mtimeMs: stat.mtimeMs
|
|
158
|
+
}, statsChanged = !0, hasLogged || (hasLogged = !0, console.info(` \u{1FA79} Patching ${patch.module}`)), process.env.DEBUG && console.info(` - Applied patch to ${patch.module}: ${relativePath}`);
|
|
159
|
+
} else {
|
|
160
|
+
const stat = await FSExtra.stat(fullPath);
|
|
161
|
+
patchStats[fullPath] = {
|
|
162
|
+
size: stat.size,
|
|
163
|
+
mtimeMs: stat.mtimeMs
|
|
164
|
+
}, statsChanged = !0;
|
|
106
165
|
}
|
|
107
|
-
})
|
|
108
|
-
|
|
166
|
+
} catch (err) {
|
|
167
|
+
if (err instanceof Bail) return;
|
|
168
|
+
throw err;
|
|
169
|
+
}
|
|
170
|
+
}));
|
|
171
|
+
} catch (err) {
|
|
172
|
+
console.error("\u{1F6A8} Error applying patch to", patch.module), console.error(err);
|
|
109
173
|
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
})));
|
|
114
|
-
}
|
|
115
|
-
function getOgFilePath(fullPath) {
|
|
116
|
-
return fullPath + ".vxrn.ogfile";
|
|
174
|
+
})), statsChanged && (await writePatchStats(nodeModulesDir, patchStats));
|
|
175
|
+
}));
|
|
117
176
|
}
|
|
118
177
|
async function atomicWriteFile(filePath, contents) {
|
|
119
178
|
const tempPath = filePath + ".vxrn.tmp." + process.pid + "." + Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["transformSWC","transformFlowBabel","findNodeModules","FSExtra","join","rename","semver","deepMergeOptimizeDeps","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","applyOptimizePatches","patches","config","optimizeDeps","include","exclude","needsInterop","forEach","patch","optimize","filter","ssr","
|
|
1
|
+
{"version":3,"names":["transformSWC","transformFlowBabel","findNodeModules","FSExtra","join","rename","semver","deepMergeOptimizeDeps","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","applyOptimizePatches","patches","config","optimizeDeps","include","exclude","needsInterop","forEach","patch","optimize","filter","ssr","STATS_FILE","getOriginalPath","fullPath","readPatchStats","nodeModulesDir","readJSON","writePatchStats","stats","writeJSON","process","cwd","nodeModulesDirs","map","relativePath","Promise","patchStats","statsChanged","nodeModuleDir","existsSync","version","pkgJSON","satisfies","hasLogged","filePatches","file","filesToApply","patchDefinition","filesToProcess","stat","exists","env","VXRN_FORCE_PATCH","cached","size","mtimeMs","length","patchDef","p","originalPath","targetContent","originalContent","readFile","catch","sourceContent","patchedContent","Array","isArray","contents","strategy","mode","environment","forceJSX","noHMR","fixNonTypeSpecificImports","code","out","stat2","atomicWriteFile","info","DEBUG","err","error","filePath","tempPath","pid","Date","now","writeFile"],"sources":["../../src/utils/patches.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -147,13 +147,20 @@ async function applyOptimizePatches(patches, config) {
|
|
|
147
147
|
optimizeDeps
|
|
148
148
|
}, void 0, !0);
|
|
149
149
|
}
|
|
150
|
-
var
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
150
|
+
var STATS_FILE = ".vxrn.patch-stats.json";
|
|
151
|
+
function getOriginalPath(fullPath) {
|
|
152
|
+
return fullPath + ".vxrn.original";
|
|
153
|
+
}
|
|
154
|
+
async function readPatchStats(nodeModulesDir) {
|
|
155
|
+
try {
|
|
156
|
+
return await FSExtra.readJSON(join(nodeModulesDir, STATS_FILE));
|
|
157
|
+
} catch {
|
|
158
|
+
return {};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function writePatchStats(nodeModulesDir, stats) {
|
|
162
|
+
await FSExtra.writeJSON(join(nodeModulesDir, STATS_FILE), stats);
|
|
163
|
+
}
|
|
157
164
|
async function applyDependencyPatches(patches) {
|
|
158
165
|
var {
|
|
159
166
|
root = process.cwd()
|
|
@@ -163,92 +170,158 @@ async function applyDependencyPatches(patches) {
|
|
|
163
170
|
}).map(function (relativePath) {
|
|
164
171
|
return join(root, relativePath);
|
|
165
172
|
});
|
|
166
|
-
await Promise.all(
|
|
167
|
-
|
|
173
|
+
await Promise.all(nodeModulesDirs.map(async function (nodeModulesDir) {
|
|
174
|
+
var patchStats = await readPatchStats(nodeModulesDir),
|
|
175
|
+
statsChanged = !1;
|
|
176
|
+
await Promise.all(patches.map(async function (patch) {
|
|
168
177
|
try {
|
|
169
|
-
var nodeModuleDir = join(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (
|
|
173
|
-
var
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
178
|
+
var nodeModuleDir = join(nodeModulesDir, patch.module);
|
|
179
|
+
if (!FSExtra.existsSync(nodeModuleDir)) return;
|
|
180
|
+
var version = patch.patchFiles.version;
|
|
181
|
+
if (typeof version == "string") {
|
|
182
|
+
var pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
|
|
183
|
+
if (!semver.satisfies(pkgJSON.version, version)) return;
|
|
184
|
+
}
|
|
185
|
+
var hasLogged = !1,
|
|
186
|
+
filePatches = [];
|
|
187
|
+
for (var file in patch.patchFiles) if (!(file === "optimize" || file === "version")) {
|
|
188
|
+
var filesToApply = file.includes("*") ? globDir(nodeModuleDir, file) : [file],
|
|
189
|
+
_iteratorNormalCompletion = !0,
|
|
190
|
+
_didIteratorError = !1,
|
|
191
|
+
_iteratorError = void 0;
|
|
192
|
+
try {
|
|
193
|
+
for (var _iterator = filesToApply[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
194
|
+
var relativePath = _step.value;
|
|
195
|
+
filePatches.push({
|
|
196
|
+
relativePath,
|
|
197
|
+
patchDefinition: patch.patchFiles[file]
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
} catch (err) {
|
|
201
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
202
|
+
} finally {
|
|
203
|
+
try {
|
|
204
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
205
|
+
} finally {
|
|
206
|
+
if (_didIteratorError) throw _iteratorError;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
var fileStatsResults = await Promise.all(filePatches.map(async function (param) {
|
|
211
|
+
var {
|
|
212
|
+
relativePath: relativePath2
|
|
213
|
+
} = param,
|
|
214
|
+
fullPath = join(nodeModuleDir, relativePath2);
|
|
215
|
+
try {
|
|
216
|
+
var stat = await FSExtra.stat(fullPath);
|
|
217
|
+
return {
|
|
218
|
+
relativePath: relativePath2,
|
|
219
|
+
fullPath,
|
|
220
|
+
stat,
|
|
221
|
+
exists: !0
|
|
222
|
+
};
|
|
223
|
+
} catch {
|
|
224
|
+
return {
|
|
225
|
+
relativePath: relativePath2,
|
|
226
|
+
fullPath,
|
|
227
|
+
stat: null,
|
|
228
|
+
exists: !1
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
})),
|
|
232
|
+
filesToProcess = fileStatsResults.filter(function (param) {
|
|
233
|
+
var {
|
|
234
|
+
fullPath,
|
|
235
|
+
stat,
|
|
236
|
+
exists
|
|
237
|
+
} = param;
|
|
238
|
+
if (!exists || !stat) return !1;
|
|
239
|
+
if (process.env.VXRN_FORCE_PATCH) return !0;
|
|
240
|
+
var cached = patchStats[fullPath];
|
|
241
|
+
return cached ? stat.size !== cached.size || stat.mtimeMs !== cached.mtimeMs : !0;
|
|
242
|
+
});
|
|
243
|
+
if (filesToProcess.length === 0) return;
|
|
244
|
+
await Promise.all(filesToProcess.map(async function (param) {
|
|
245
|
+
var {
|
|
246
|
+
relativePath: relativePath2,
|
|
247
|
+
fullPath
|
|
248
|
+
} = param;
|
|
249
|
+
try {
|
|
250
|
+
var patchDef = filePatches.find(function (p) {
|
|
251
|
+
return p.relativePath === relativePath2;
|
|
252
|
+
}).patchDefinition,
|
|
253
|
+
originalPath = getOriginalPath(fullPath),
|
|
254
|
+
[targetContent, originalContent] = await Promise.all([FSExtra.readFile(fullPath, "utf-8"), FSExtra.readFile(originalPath, "utf-8").catch(function () {
|
|
255
|
+
return null;
|
|
256
|
+
})]),
|
|
257
|
+
sourceContent = originalContent ?? targetContent,
|
|
258
|
+
patchedContent = null;
|
|
259
|
+
if (typeof patchDef == "string") patchedContent = patchDef;else if (Array.isArray(patchDef)) {
|
|
260
|
+
var contents = sourceContent,
|
|
261
|
+
_iteratorNormalCompletion2 = !0,
|
|
262
|
+
_didIteratorError2 = !1,
|
|
263
|
+
_iteratorError2 = void 0;
|
|
177
264
|
try {
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
atomicWriteFile(getOgFilePath(fullPath), possibleOrigContents), atomicWriteFile(fullPath, contents2)].filter(function (p) {
|
|
190
|
-
return !!p;
|
|
191
|
-
})), hasLogged || (hasLogged = !0, console.info(` \u{1FA79} Patching ${patch.module}`)), process.env.DEBUG && console.info(` - Applied patch to ${patch.module}: ${relativePath}`);
|
|
192
|
-
},
|
|
193
|
-
patchDefinition = patch.patchFiles[file2];
|
|
194
|
-
if (typeof patchDefinition == "string") {
|
|
195
|
-
await write(patchDefinition);
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
if (Array.isArray(patchDefinition)) {
|
|
199
|
-
var contents = contentsIn,
|
|
200
|
-
_iteratorNormalCompletion = !0,
|
|
201
|
-
_didIteratorError = !1,
|
|
202
|
-
_iteratorError = void 0;
|
|
203
|
-
try {
|
|
204
|
-
for (var _iterator = patchDefinition[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
205
|
-
var strategy = _step.value;
|
|
206
|
-
if (strategy === "flow" && (contents = await transformFlowBabel(contents)), strategy === "swc" || strategy === "jsx") {
|
|
207
|
-
var _this;
|
|
208
|
-
contents = ((_this = await transformSWC(fullPath, contents, {
|
|
209
|
-
mode: "build",
|
|
210
|
-
environment: "ios",
|
|
211
|
-
forceJSX: strategy === "jsx",
|
|
212
|
-
noHMR: !0,
|
|
213
|
-
fixNonTypeSpecificImports: !0
|
|
214
|
-
})) === null || _this === void 0 ? void 0 : _this.code) || contents;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
} catch (err) {
|
|
218
|
-
_didIteratorError = !0, _iteratorError = err;
|
|
219
|
-
} finally {
|
|
220
|
-
try {
|
|
221
|
-
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
222
|
-
} finally {
|
|
223
|
-
if (_didIteratorError) throw _iteratorError;
|
|
224
|
-
}
|
|
265
|
+
for (var _iterator2 = patchDef[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
|
|
266
|
+
var strategy = _step2.value;
|
|
267
|
+
if (strategy === "flow" && (contents = await transformFlowBabel(contents)), strategy === "swc" || strategy === "jsx") {
|
|
268
|
+
var _this;
|
|
269
|
+
contents = ((_this = await transformSWC(fullPath, contents, {
|
|
270
|
+
mode: "build",
|
|
271
|
+
environment: "ios",
|
|
272
|
+
forceJSX: strategy === "jsx",
|
|
273
|
+
noHMR: !0,
|
|
274
|
+
fixNonTypeSpecificImports: !0
|
|
275
|
+
})) === null || _this === void 0 ? void 0 : _this.code) || contents;
|
|
225
276
|
}
|
|
226
|
-
contentsIn !== contents && (await write(contents));
|
|
227
|
-
return;
|
|
228
277
|
}
|
|
229
|
-
var out = await patchDefinition(contentsIn);
|
|
230
|
-
typeof out == "string" && (await write(out));
|
|
231
278
|
} catch (err) {
|
|
232
|
-
|
|
233
|
-
|
|
279
|
+
_didIteratorError2 = !0, _iteratorError2 = err;
|
|
280
|
+
} finally {
|
|
281
|
+
try {
|
|
282
|
+
!_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
|
|
283
|
+
} finally {
|
|
284
|
+
if (_didIteratorError2) throw _iteratorError2;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
contents !== sourceContent && (patchedContent = contents);
|
|
288
|
+
} else {
|
|
289
|
+
var out = await patchDef(sourceContent);
|
|
290
|
+
typeof out == "string" && out !== sourceContent && (patchedContent = out);
|
|
291
|
+
}
|
|
292
|
+
if (patchedContent !== null) {
|
|
293
|
+
if (targetContent === patchedContent) {
|
|
294
|
+
var stat = await FSExtra.stat(fullPath);
|
|
295
|
+
patchStats[fullPath] = {
|
|
296
|
+
size: stat.size,
|
|
297
|
+
mtimeMs: stat.mtimeMs
|
|
298
|
+
}, statsChanged = !0;
|
|
299
|
+
return;
|
|
234
300
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
301
|
+
await Promise.all([originalContent === null && atomicWriteFile(originalPath, sourceContent), atomicWriteFile(fullPath, patchedContent)]);
|
|
302
|
+
var stat1 = await FSExtra.stat(fullPath);
|
|
303
|
+
patchStats[fullPath] = {
|
|
304
|
+
size: stat1.size,
|
|
305
|
+
mtimeMs: stat1.mtimeMs
|
|
306
|
+
}, statsChanged = !0, hasLogged || (hasLogged = !0, console.info(` \u{1FA79} Patching ${patch.module}`)), process.env.DEBUG && console.info(` - Applied patch to ${patch.module}: ${relativePath2}`);
|
|
307
|
+
} else {
|
|
308
|
+
var stat2 = await FSExtra.stat(fullPath);
|
|
309
|
+
patchStats[fullPath] = {
|
|
310
|
+
size: stat2.size,
|
|
311
|
+
mtimeMs: stat2.mtimeMs
|
|
312
|
+
}, statsChanged = !0;
|
|
313
|
+
}
|
|
314
|
+
} catch (err) {
|
|
315
|
+
if (_instanceof(err, Bail)) return;
|
|
316
|
+
throw err;
|
|
240
317
|
}
|
|
241
|
-
|
|
242
|
-
}
|
|
318
|
+
}));
|
|
243
319
|
} catch (err) {
|
|
244
320
|
console.error("\u{1F6A8} Error applying patch to", patch.module), console.error(err);
|
|
245
321
|
}
|
|
246
|
-
});
|
|
322
|
+
})), statsChanged && (await writePatchStats(nodeModulesDir, patchStats));
|
|
247
323
|
}));
|
|
248
324
|
}
|
|
249
|
-
function getOgFilePath(fullPath) {
|
|
250
|
-
return fullPath + ".vxrn.ogfile";
|
|
251
|
-
}
|
|
252
325
|
async function atomicWriteFile(filePath, contents) {
|
|
253
326
|
var tempPath = filePath + ".vxrn.tmp." + process.pid + "." + Date.now();
|
|
254
327
|
await FSExtra.writeFile(tempPath, contents), await rename(tempPath, filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["transformSWC","transformFlowBabel","findNodeModules","FSExtra","join","rename","semver","deepMergeOptimizeDeps","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"],"sources":["../../src/utils/patches.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,YAAA,QAAoB;AAC7B,SAASC,kBAAA,QAA0B;AACnC,OAAOC,eAAA,MAAqB;AAC5B,OAAOC,OAAA,MAAa;AACpB,SAASC,IAAA,QAAY;AACrB,SAASC,MAAA,QAAc;AACvB,OAAOC,MAAA,MAAY;AAGnB,SAASC,qBAAA,QAA6B;AACtC,SAASC,iBAAA,QAAyB;AAClC,SAASC,OAAA,QAAe;AAkBxB,SAAMC,wBAAmBA,CAAAC,IAAA;EAAC,IAAAA,IAAA,aAEnB,MAAS,IAAAC,cAAgB,4DAAsB;EACpD,OAAID,IAAK;AACP;AAEJ,SAAAE,YAAAC,KAAA,EAAAC,OAAA,EAAAC,IAAA;EAEO,OAASD,OAAA,GAAAE,iBAA+B,CAAAF,OAAgB,GAAAG,4BAAA,CAAAJ,KAAA,EAAAK,4BAAA,KAAAC,OAAA,CAAAC,SAAA,CAAAN,OAAA,EAAAC,IAAA,QAAAC,iBAAA,CAAAH,KAAA,EAAAQ,WAAA,IAAAP,OAAA,CAAAQ,KAAA,CAAAT,KAAA,EAAAE,IAAA;AAC7D;AACE,SAAAQ,iBAAeA,CAAAC,QAAA,EAAAC,WAAA;EAEnB,MAAAD,QAAA,YAAAC,WAAA,GAIA,UAAAC,SAAsB,oCAGpB;AACA;AAGA,SAAIC,WAAAC,MAAA,EAAAb,IAAA,EAAAc,KAAA;EACF,OAAAX,4BAAgC,KAAAS,UAAA,GAAAR,OAAA,CAAAC,SAAA,GAAAO,UAAA,YAAAA,CAAAG,OAAA,EAAAC,KAAA,EAAAC,MAAA;IAC9B,IAAAC,CAAA,GAAM,CAEN,IAAI,CACF;IACEA,CAAA,CAAAC,IAAI,CAAAZ,KAAA,CAAAW,CAAA,EAASF,KAAA;IACH,IAAAN,WACN,GAAAU,QAAA,CAAAC,IAAA,CAAAd,KAAA,CAAAQ,OAAA,EAAAG,CAAA;MAAAT,QAAA,OAAAC,WAAA;IAAA,OAAAO,MACA,IAAAK,iBAAA,CAAAb,QAAA,EAAAQ,MAAA,CAAAM,SAAA,GAAAd,QAAA;EAAA,GAAAG,UACA,CAAAL,KAAA,OAAAiB,SAAA;AAAA;AAGoD,SAAAvB,kBAAAwB,CAAA;EAG1D,OAAAxB,iBAAW,GAAQyB,MAAK,CAAAC,cAAY,GAAAD,MAAA,CAAgBE,cAAC,aAAAC,EAAA;IAEzD,OAAAA,EAAA,CAAAC,SAAA,IAAAJ,MAAA,CAAAE,cAAA,CAAAC,EAAA;EAGF,GAAA5B,iBAAM,CAAAwB,CAAA;AACR;AAEA,SAAAM,SAAsBA,CAAAC,QAAA,EAAAC,UAAqB;EACzC,WAAMA,UAAe,kBAAAA,UAAA,WACnB,UAAUtB,SAAA;EAAAqB,QACV,CAAAT,SAAU,GAAAG,MAAA,CAAAQ,MAAA,CAAAD,UAAA,IAAAA,UAAA,CAAAV,SAAA;IACVjB,WAAA;MACF6B,KAAA,EAAAH,QAAA;MAEAI,QAAQ,IAAQ;MAEdC,YAAM,GAAW;IACb;EAaN,CAAC,GAEDJ,UAAA,IAAAX,iBAA8B,CAAEU,QAAA,EAAAC,UAAgB;AAElD;
|
|
1
|
+
{"version":3,"names":["transformSWC","transformFlowBabel","findNodeModules","FSExtra","join","rename","semver","deepMergeOptimizeDeps","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","applyOptimizePatches","patches","config","optimizeDeps","include","exclude","needsInterop","forEach","patch","optimize","filter","_optimizeDeps_include","_optimizeDeps_needsInterop","ssr","STATS_FILE","getOriginalPath","fullPath","readPatchStats","nodeModulesDir","readJSON"],"sources":["../../src/utils/patches.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.2.
|
|
3
|
+
"version": "1.2.89",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -66,17 +66,17 @@
|
|
|
66
66
|
"@hono/node-server": "^1.19.6",
|
|
67
67
|
"@react-native/dev-middleware": "^0.83.0",
|
|
68
68
|
"@rollup/plugin-node-resolve": "^15.3.1",
|
|
69
|
-
"@vxrn/compiler": "1.2.
|
|
70
|
-
"@vxrn/debug": "1.2.
|
|
71
|
-
"@vxrn/query-string": "1.2.
|
|
72
|
-
"@vxrn/react-native-prebuilt": "1.2.
|
|
73
|
-
"@vxrn/resolve": "1.2.
|
|
74
|
-
"@vxrn/safe-area": "1.2.
|
|
75
|
-
"@vxrn/url-parse": "1.2.
|
|
76
|
-
"@vxrn/utils": "1.2.
|
|
77
|
-
"@vxrn/vendor": "1.2.
|
|
78
|
-
"@vxrn/vite-flow": "1.2.
|
|
79
|
-
"@vxrn/vite-plugin-metro": "1.2.
|
|
69
|
+
"@vxrn/compiler": "1.2.89",
|
|
70
|
+
"@vxrn/debug": "1.2.89",
|
|
71
|
+
"@vxrn/query-string": "1.2.89",
|
|
72
|
+
"@vxrn/react-native-prebuilt": "1.2.89",
|
|
73
|
+
"@vxrn/resolve": "1.2.89",
|
|
74
|
+
"@vxrn/safe-area": "1.2.89",
|
|
75
|
+
"@vxrn/url-parse": "1.2.89",
|
|
76
|
+
"@vxrn/utils": "1.2.89",
|
|
77
|
+
"@vxrn/vendor": "1.2.89",
|
|
78
|
+
"@vxrn/vite-flow": "1.2.89",
|
|
79
|
+
"@vxrn/vite-plugin-metro": "1.2.89",
|
|
80
80
|
"citty": "^0.1.6",
|
|
81
81
|
"dotenv": "^17.2.1",
|
|
82
82
|
"dotenv-expand": "^12.0.2",
|
package/src/utils/patches.ts
CHANGED
|
@@ -103,204 +103,215 @@ export async function applyOptimizePatches(patches: DepPatch[], config: UserConf
|
|
|
103
103
|
deepMergeOptimizeDeps(config.ssr!, { optimizeDeps }, undefined, true)
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return
|
|
106
|
+
// stats file stores {[filePath]: {size, mtimeMs}} of patched files for fast comparison
|
|
107
|
+
type PatchStats = Record<string, { size: number; mtimeMs: number }>
|
|
108
|
+
|
|
109
|
+
const STATS_FILE = '.vxrn.patch-stats.json'
|
|
110
|
+
|
|
111
|
+
function getOriginalPath(fullPath: string) {
|
|
112
|
+
return fullPath + '.vxrn.original'
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async function readPatchStats(nodeModulesDir: string): Promise<PatchStats> {
|
|
116
|
+
try {
|
|
117
|
+
return await FSExtra.readJSON(join(nodeModulesDir, STATS_FILE))
|
|
118
|
+
} catch {
|
|
119
|
+
return {}
|
|
120
120
|
}
|
|
121
|
-
const isAlreadyPatched = FSExtra.existsSync(getOgFilePath(fullFilePath))
|
|
122
|
-
_isAlreadyPatchedMap.set(fullFilePath, isAlreadyPatched)
|
|
123
|
-
return isAlreadyPatched
|
|
124
121
|
}
|
|
125
|
-
const _isAlreadyPatchedMap = new Map<string, boolean>()
|
|
126
122
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
*/
|
|
131
|
-
const pathsBeingPatched = new Set<string>()
|
|
132
|
-
// --- HACK! ---
|
|
123
|
+
async function writePatchStats(nodeModulesDir: string, stats: PatchStats) {
|
|
124
|
+
await FSExtra.writeJSON(join(nodeModulesDir, STATS_FILE), stats)
|
|
125
|
+
}
|
|
133
126
|
|
|
134
127
|
export async function applyDependencyPatches(
|
|
135
128
|
patches: DepPatch[],
|
|
136
129
|
{ root = process.cwd() }: { root?: string } = {}
|
|
137
130
|
) {
|
|
138
|
-
const nodeModulesDirs = findNodeModules({
|
|
139
|
-
|
|
140
|
-
|
|
131
|
+
const nodeModulesDirs = findNodeModules({ cwd: root }).map((relativePath) =>
|
|
132
|
+
join(root, relativePath)
|
|
133
|
+
)
|
|
141
134
|
|
|
142
135
|
await Promise.all(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const version = patch.patchFiles.version
|
|
136
|
+
nodeModulesDirs.map(async (nodeModulesDir) => {
|
|
137
|
+
// read stats file once per node_modules
|
|
138
|
+
const patchStats = await readPatchStats(nodeModulesDir)
|
|
139
|
+
let statsChanged = false
|
|
148
140
|
|
|
149
|
-
|
|
141
|
+
await Promise.all(
|
|
142
|
+
patches.map(async (patch) => {
|
|
143
|
+
try {
|
|
144
|
+
const nodeModuleDir = join(nodeModulesDir, patch.module)
|
|
150
145
|
|
|
151
|
-
|
|
146
|
+
if (!FSExtra.existsSync(nodeModuleDir)) return
|
|
147
|
+
|
|
148
|
+
const version = patch.patchFiles.version
|
|
152
149
|
if (typeof version === 'string') {
|
|
153
150
|
const pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, 'package.json'))
|
|
154
|
-
if (!semver.satisfies(pkgJSON.version, version))
|
|
155
|
-
return
|
|
156
|
-
}
|
|
151
|
+
if (!semver.satisfies(pkgJSON.version, version)) return
|
|
157
152
|
}
|
|
158
153
|
|
|
159
|
-
|
|
160
|
-
if (file === 'optimize' || file === 'version') {
|
|
161
|
-
continue
|
|
162
|
-
}
|
|
154
|
+
let hasLogged = false
|
|
163
155
|
|
|
156
|
+
// collect all files to patch
|
|
157
|
+
const filePatches: {
|
|
158
|
+
relativePath: string
|
|
159
|
+
patchDefinition: DepFileStrategy
|
|
160
|
+
}[] = []
|
|
161
|
+
for (const file in patch.patchFiles) {
|
|
162
|
+
if (file === 'optimize' || file === 'version') continue
|
|
164
163
|
const filesToApply = file.includes('*')
|
|
165
164
|
? globDir(nodeModuleDir, file)
|
|
166
165
|
: [file]
|
|
166
|
+
for (const relativePath of filesToApply) {
|
|
167
|
+
filePatches.push({
|
|
168
|
+
relativePath,
|
|
169
|
+
patchDefinition: patch.patchFiles[file],
|
|
170
|
+
})
|
|
171
|
+
}
|
|
172
|
+
}
|
|
167
173
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
// stat all target files in parallel for fast comparison
|
|
175
|
+
const fileStatsResults = await Promise.all(
|
|
176
|
+
filePatches.map(async ({ relativePath }) => {
|
|
177
|
+
const fullPath = join(nodeModuleDir, relativePath)
|
|
178
|
+
try {
|
|
179
|
+
const stat = await FSExtra.stat(fullPath)
|
|
180
|
+
return { relativePath, fullPath, stat, exists: true }
|
|
181
|
+
} catch {
|
|
182
|
+
return { relativePath, fullPath, stat: null, exists: false }
|
|
183
|
+
}
|
|
184
|
+
})
|
|
185
|
+
)
|
|
177
186
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
187
|
+
// filter to files that need processing
|
|
188
|
+
const filesToProcess = fileStatsResults.filter(
|
|
189
|
+
({ fullPath, stat, exists }) => {
|
|
190
|
+
if (!exists || !stat) return false
|
|
191
|
+
if (process.env.VXRN_FORCE_PATCH) return true
|
|
184
192
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
// If we can reach here, basically it means
|
|
188
|
-
// VXRN_FORCE_PATCH is set
|
|
189
|
-
return await FSExtra.readFile(getOgFilePath(fullPath), 'utf-8')
|
|
190
|
-
}
|
|
193
|
+
const cached = patchStats[fullPath]
|
|
194
|
+
if (!cached) return true // never patched
|
|
191
195
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const possibleOrigContents = contentsIn
|
|
197
|
-
// update contentsIn so the next patch gets the new value if it runs multiple
|
|
198
|
-
contentsIn = contents
|
|
199
|
-
const alreadyPatchedPreviouslyInCurrentRun =
|
|
200
|
-
pathsBeingPatched.has(fullPath)
|
|
201
|
-
pathsBeingPatched.add(fullPath)
|
|
202
|
-
await Promise.all(
|
|
203
|
-
[
|
|
204
|
-
!alreadyPatchedPreviouslyInCurrentRun /* only write ogfile if this is the first patch, otherwise contentsIn will be already patched content */ &&
|
|
205
|
-
!getIsAlreadyPatched(
|
|
206
|
-
fullPath
|
|
207
|
-
) /* an ogfile must already be there, no need to write */ &&
|
|
208
|
-
atomicWriteFile(
|
|
209
|
-
getOgFilePath(fullPath),
|
|
210
|
-
possibleOrigContents
|
|
211
|
-
),
|
|
212
|
-
atomicWriteFile(fullPath, contents),
|
|
213
|
-
].filter((p) => !!p)
|
|
214
|
-
)
|
|
196
|
+
// check if file changed since we patched it
|
|
197
|
+
return stat.size !== cached.size || stat.mtimeMs !== cached.mtimeMs
|
|
198
|
+
}
|
|
199
|
+
)
|
|
215
200
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
201
|
+
if (filesToProcess.length === 0) return
|
|
202
|
+
|
|
203
|
+
// process files that need patching
|
|
204
|
+
await Promise.all(
|
|
205
|
+
filesToProcess.map(async ({ relativePath, fullPath }) => {
|
|
206
|
+
try {
|
|
207
|
+
const patchDef = filePatches.find(
|
|
208
|
+
(p) => p.relativePath === relativePath
|
|
209
|
+
)!.patchDefinition
|
|
210
|
+
const originalPath = getOriginalPath(fullPath)
|
|
211
|
+
|
|
212
|
+
// read target and original in parallel
|
|
213
|
+
const [targetContent, originalContent] = await Promise.all([
|
|
214
|
+
FSExtra.readFile(fullPath, 'utf-8'),
|
|
215
|
+
FSExtra.readFile(originalPath, 'utf-8').catch(() => null),
|
|
216
|
+
])
|
|
217
|
+
|
|
218
|
+
// determine source content for patching
|
|
219
|
+
const sourceContent = originalContent ?? targetContent
|
|
220
|
+
|
|
221
|
+
// apply patch
|
|
222
|
+
let patchedContent: string | null = null
|
|
223
|
+
|
|
224
|
+
if (typeof patchDef === 'string') {
|
|
225
|
+
patchedContent = patchDef
|
|
226
|
+
} else if (Array.isArray(patchDef)) {
|
|
227
|
+
let contents = sourceContent
|
|
228
|
+
for (const strategy of patchDef) {
|
|
229
|
+
if (strategy === 'flow') {
|
|
230
|
+
contents = await transformFlowBabel(contents)
|
|
219
231
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
232
|
+
if (strategy === 'swc' || strategy === 'jsx') {
|
|
233
|
+
contents =
|
|
234
|
+
(
|
|
235
|
+
await transformSWC(fullPath, contents, {
|
|
236
|
+
mode: 'build',
|
|
237
|
+
environment: 'ios',
|
|
238
|
+
forceJSX: strategy === 'jsx',
|
|
239
|
+
noHMR: true,
|
|
240
|
+
fixNonTypeSpecificImports: true,
|
|
241
|
+
})
|
|
242
|
+
)?.code || contents
|
|
225
243
|
}
|
|
226
244
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
// add
|
|
231
|
-
if (typeof patchDefinition === 'string') {
|
|
232
|
-
await write(patchDefinition)
|
|
233
|
-
return
|
|
245
|
+
if (contents !== sourceContent) {
|
|
246
|
+
patchedContent = contents
|
|
234
247
|
}
|
|
248
|
+
} else {
|
|
249
|
+
const out = await patchDef(sourceContent)
|
|
250
|
+
if (typeof out === 'string' && out !== sourceContent) {
|
|
251
|
+
patchedContent = out
|
|
252
|
+
}
|
|
253
|
+
}
|
|
235
254
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if (strategy === 'swc' || strategy === 'jsx') {
|
|
245
|
-
contents =
|
|
246
|
-
(
|
|
247
|
-
await transformSWC(fullPath, contents, {
|
|
248
|
-
mode: 'build',
|
|
249
|
-
environment: 'ios',
|
|
250
|
-
forceJSX: strategy === 'jsx',
|
|
251
|
-
noHMR: true,
|
|
252
|
-
fixNonTypeSpecificImports: true,
|
|
253
|
-
})
|
|
254
|
-
)?.code || contents
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if (contentsIn !== contents) {
|
|
259
|
-
await write(contents)
|
|
260
|
-
}
|
|
261
|
-
|
|
255
|
+
// if patch produced changes
|
|
256
|
+
if (patchedContent !== null) {
|
|
257
|
+
// check if already has this patched content
|
|
258
|
+
if (targetContent === patchedContent) {
|
|
259
|
+
// already patched, just update stats
|
|
260
|
+
const stat = await FSExtra.stat(fullPath)
|
|
261
|
+
patchStats[fullPath] = { size: stat.size, mtimeMs: stat.mtimeMs }
|
|
262
|
+
statsChanged = true
|
|
262
263
|
return
|
|
263
264
|
}
|
|
264
265
|
|
|
265
|
-
//
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
// write original if needed, then write patched
|
|
267
|
+
await Promise.all([
|
|
268
|
+
originalContent === null &&
|
|
269
|
+
atomicWriteFile(originalPath, sourceContent),
|
|
270
|
+
atomicWriteFile(fullPath, patchedContent),
|
|
271
|
+
])
|
|
272
|
+
|
|
273
|
+
// update stats
|
|
274
|
+
const stat = await FSExtra.stat(fullPath)
|
|
275
|
+
patchStats[fullPath] = { size: stat.size, mtimeMs: stat.mtimeMs }
|
|
276
|
+
statsChanged = true
|
|
277
|
+
|
|
278
|
+
if (!hasLogged) {
|
|
279
|
+
hasLogged = true
|
|
280
|
+
console.info(` 🩹 Patching ${patch.module}`)
|
|
269
281
|
}
|
|
270
|
-
|
|
271
|
-
if (
|
|
272
|
-
|
|
282
|
+
|
|
283
|
+
if (process.env.DEBUG) {
|
|
284
|
+
console.info(
|
|
285
|
+
` - Applied patch to ${patch.module}: ${relativePath}`
|
|
286
|
+
)
|
|
273
287
|
}
|
|
274
|
-
|
|
288
|
+
} else {
|
|
289
|
+
// patch made no changes, still record stats so we skip next time
|
|
290
|
+
const stat = await FSExtra.stat(fullPath)
|
|
291
|
+
patchStats[fullPath] = { size: stat.size, mtimeMs: stat.mtimeMs }
|
|
292
|
+
statsChanged = true
|
|
275
293
|
}
|
|
276
|
-
})
|
|
277
|
-
|
|
278
|
-
|
|
294
|
+
} catch (err) {
|
|
295
|
+
if (err instanceof Bail) return
|
|
296
|
+
throw err
|
|
297
|
+
}
|
|
298
|
+
})
|
|
299
|
+
)
|
|
300
|
+
} catch (err) {
|
|
301
|
+
console.error(`🚨 Error applying patch to`, patch.module)
|
|
302
|
+
console.error(err)
|
|
279
303
|
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
304
|
+
})
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
// write stats file if changed
|
|
308
|
+
if (statsChanged) {
|
|
309
|
+
await writePatchStats(nodeModulesDir, patchStats)
|
|
310
|
+
}
|
|
285
311
|
})
|
|
286
312
|
)
|
|
287
313
|
}
|
|
288
314
|
|
|
289
|
-
/**
|
|
290
|
-
* For every patch we store an "og" file as a backup of the original.
|
|
291
|
-
* If such file exists, we can skip the patching since the
|
|
292
|
-
* file should be already patched, unless the user forces
|
|
293
|
-
* to apply the patch again - in such case we use the
|
|
294
|
-
* contents of the original file as a base to reapply patches.
|
|
295
|
-
*/
|
|
296
|
-
function getOgFilePath(fullPath: string) {
|
|
297
|
-
return fullPath + '.vxrn.ogfile'
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Atomically write a file by writing to a temp file first then renaming.
|
|
302
|
-
* This prevents other processes from reading a partially written file.
|
|
303
|
-
*/
|
|
304
315
|
async function atomicWriteFile(filePath: string, contents: string) {
|
|
305
316
|
const tempPath = filePath + '.vxrn.tmp.' + process.pid + '.' + Date.now()
|
|
306
317
|
await FSExtra.writeFile(tempPath, contents)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patches.d.ts","sourceRoot":"","sources":["../../src/utils/patches.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAKnE,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAExC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAEzD,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,QAAQ,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QACzD,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;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,iBA2BjF;
|
|
1
|
+
{"version":3,"file":"patches.d.ts","sourceRoot":"","sources":["../../src/utils/patches.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAKnE,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAExC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAEzD,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,QAAQ,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QACzD,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;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,iBA2BjF;AAuBD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,QAAQ,EAAE,EACnB,EAAE,IAAoB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAwLjD"}
|