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.
@@ -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 getIsAlreadyPatched = (fullFilePath) => {
50
- if (_isAlreadyPatchedMap.has(fullFilePath))
51
- return _isAlreadyPatchedMap.get(fullFilePath);
52
- const isAlreadyPatched = FSExtra.existsSync(getOgFilePath(fullFilePath));
53
- return _isAlreadyPatchedMap.set(fullFilePath, isAlreadyPatched), isAlreadyPatched;
54
- }, _isAlreadyPatchedMap = /* @__PURE__ */ new Map(), pathsBeingPatched = /* @__PURE__ */ new Set();
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
- cwd: root
58
- }).map((relativePath) => join(root, relativePath));
64
+ const nodeModulesDirs = findNodeModules({ cwd: root }).map(
65
+ (relativePath) => join(root, relativePath)
66
+ );
59
67
  await Promise.all(
60
- patches.flatMap((patch) => nodeModulesDirs.flatMap(async (dir) => {
61
- try {
62
- const nodeModuleDir = join(dir, patch.module), version = patch.patchFiles.version;
63
- let hasLogged = !1;
64
- if (FSExtra.existsSync(nodeModuleDir)) {
65
- if (typeof version == "string") {
66
- const pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
67
- if (!semver.satisfies(pkgJSON.version, version))
68
- return;
69
- }
70
- for (const file in patch.patchFiles) {
71
- if (file === "optimize" || file === "version")
72
- continue;
73
- const filesToApply = file.includes("*") ? globDir(nodeModuleDir, file) : [file];
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
- filesToApply.map(async (relativePath) => {
112
+ filesToProcess.map(async ({ relativePath, fullPath }) => {
76
113
  try {
77
- const fullPath = join(nodeModuleDir, relativePath);
78
- if (!process.env.VXRN_FORCE_PATCH && getIsAlreadyPatched(fullPath))
79
- return;
80
- let contentsIn = await (async () => pathsBeingPatched.has(fullPath) ? await FSExtra.readFile(fullPath, "utf-8") : getIsAlreadyPatched(fullPath) ? await FSExtra.readFile(getOgFilePath(fullPath), "utf-8") : await FSExtra.readFile(fullPath, "utf-8"))();
81
- const write = async (contents) => {
82
- const possibleOrigContents = contentsIn;
83
- contentsIn = contents;
84
- const alreadyPatchedPreviouslyInCurrentRun = pathsBeingPatched.has(fullPath);
85
- pathsBeingPatched.add(fullPath), await Promise.all(
86
- [
87
- !alreadyPatchedPreviouslyInCurrentRun && !getIsAlreadyPatched(
88
- fullPath
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
- contentsIn !== contents && await write(contents);
114
- return;
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
- } catch (err) {
128
- console.error("\u{1F6A8} Error applying patch to", patch.module), console.error(err);
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": "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",
5
- "names": []
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;AAKA,MAAM,aAAa;AAEnB,SAAS,gBAAgB,UAAkB;AACzC,SAAO,WAAW;AACpB;AAEA,eAAe,eAAe,gBAA6C;AACzE,MAAI;AACF,WAAO,MAAM,QAAQ,SAAS,KAAK,gBAAgB,UAAU,CAAC;AAAA,EAChE,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAe,gBAAgB,gBAAwB,OAAmB;AACxE,QAAM,QAAQ,UAAU,KAAK,gBAAgB,UAAU,GAAG,KAAK;AACjE;AAEA,eAAsB,uBACpB,SACA,EAAE,OAAO,QAAQ,IAAI,EAAE,IAAuB,CAAC,GAC/C;AACA,QAAM,kBAAkB,gBAAgB,EAAE,KAAK,KAAK,CAAC,EAAE;AAAA,IAAI,CAAC,iBAC1D,KAAK,MAAM,YAAY;AAAA,EACzB;AAEA,QAAM,QAAQ;AAAA,IACZ,gBAAgB,IAAI,OAAO,mBAAmB;AAE5C,YAAM,aAAa,MAAM,eAAe,cAAc;AACtD,UAAI,eAAe;AAEnB,YAAM,QAAQ;AAAA,QACZ,QAAQ,IAAI,OAAO,UAAU;AAC3B,cAAI;AACF,kBAAM,gBAAgB,KAAK,gBAAgB,MAAM,MAAM;AAEvD,gBAAI,CAAC,QAAQ,WAAW,aAAa,EAAG;AAExC,kBAAM,UAAU,MAAM,WAAW;AACjC,gBAAI,OAAO,WAAY,UAAU;AAC/B,oBAAM,UAAU,MAAM,QAAQ,SAAS,KAAK,eAAe,cAAc,CAAC;AAC1E,kBAAI,CAAC,OAAO,UAAU,QAAQ,SAAS,OAAO,EAAG;AAAA,YACnD;AAEA,gBAAI,YAAY;AAGhB,kBAAM,cAGA,CAAC;AACP,uBAAW,QAAQ,MAAM,YAAY;AACnC,kBAAI,SAAS,cAAc,SAAS,UAAW;AAC/C,oBAAM,eAAe,KAAK,SAAS,GAAG,IAClC,QAAQ,eAAe,IAAI,IAC3B,CAAC,IAAI;AACT,yBAAW,gBAAgB;AACzB,4BAAY,KAAK;AAAA,kBACf;AAAA,kBACA,iBAAiB,MAAM,WAAW,IAAI;AAAA,gBACxC,CAAC;AAAA,YAEL;AAgBA,kBAAM,kBAbmB,MAAM,QAAQ;AAAA,cACrC,YAAY,IAAI,OAAO,EAAE,aAAa,MAAM;AAC1C,sBAAM,WAAW,KAAK,eAAe,YAAY;AACjD,oBAAI;AACF,wBAAM,OAAO,MAAM,QAAQ,KAAK,QAAQ;AACxC,yBAAO,EAAE,cAAc,UAAU,MAAM,QAAQ,GAAK;AAAA,gBACtD,QAAQ;AACN,yBAAO,EAAE,cAAc,UAAU,MAAM,MAAM,QAAQ,GAAM;AAAA,gBAC7D;AAAA,cACF,CAAC;AAAA,YACH,GAGwC;AAAA,cACtC,CAAC,EAAE,UAAU,MAAM,OAAO,MAAM;AAC9B,oBAAI,CAAC,UAAU,CAAC,KAAM,QAAO;AAC7B,oBAAI,QAAQ,IAAI,iBAAkB,QAAO;AAEzC,sBAAM,SAAS,WAAW,QAAQ;AAClC,uBAAK,SAGE,KAAK,SAAS,OAAO,QAAQ,KAAK,YAAY,OAAO,UAHxC;AAAA,cAItB;AAAA,YACF;AAEA,gBAAI,eAAe,WAAW,EAAG;AAGjC,kBAAM,QAAQ;AAAA,cACZ,eAAe,IAAI,OAAO,EAAE,cAAc,SAAS,MAAM;AACvD,oBAAI;AACF,wBAAM,WAAW,YAAY;AAAA,oBAC3B,CAAC,MAAM,EAAE,iBAAiB;AAAA,kBAC5B,EAAG,iBACG,eAAe,gBAAgB,QAAQ,GAGvC,CAAC,eAAe,eAAe,IAAI,MAAM,QAAQ,IAAI;AAAA,oBACzD,QAAQ,SAAS,UAAU,OAAO;AAAA,oBAClC,QAAQ,SAAS,cAAc,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,kBAC1D,CAAC,GAGK,gBAAgB,mBAAmB;AAGzC,sBAAI,iBAAgC;AAEpC,sBAAI,OAAO,YAAa;AACtB,qCAAiB;AAAA,2BACR,MAAM,QAAQ,QAAQ,GAAG;AAClC,wBAAI,WAAW;AACf,+BAAW,YAAY;AACrB,sBAAI,aAAa,WACf,WAAW,MAAM,mBAAmB,QAAQ,KAE1C,aAAa,SAAS,aAAa,WACrC,YAEI,MAAM,aAAa,UAAU,UAAU;AAAA,wBACrC,MAAM;AAAA,wBACN,aAAa;AAAA,wBACb,UAAU,aAAa;AAAA,wBACvB,OAAO;AAAA,wBACP,2BAA2B;AAAA,sBAC7B,CAAC,IACA,QAAQ;AAGjB,oBAAI,aAAa,kBACf,iBAAiB;AAAA,kBAErB,OAAO;AACL,0BAAM,MAAM,MAAM,SAAS,aAAa;AACxC,oBAAI,OAAO,OAAQ,YAAY,QAAQ,kBACrC,iBAAiB;AAAA,kBAErB;AAGA,sBAAI,mBAAmB,MAAM;AAE3B,wBAAI,kBAAkB,gBAAgB;AAEpC,4BAAMA,QAAO,MAAM,QAAQ,KAAK,QAAQ;AACxC,iCAAW,QAAQ,IAAI,EAAE,MAAMA,MAAK,MAAM,SAASA,MAAK,QAAQ,GAChE,eAAe;AACf;AAAA,oBACF;AAGA,0BAAM,QAAQ,IAAI;AAAA,sBAChB,oBAAoB,QAClB,gBAAgB,cAAc,aAAa;AAAA,sBAC7C,gBAAgB,UAAU,cAAc;AAAA,oBAC1C,CAAC;AAGD,0BAAM,OAAO,MAAM,QAAQ,KAAK,QAAQ;AACxC,+BAAW,QAAQ,IAAI,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ,GAChE,eAAe,IAEV,cACH,YAAY,IACZ,QAAQ,KAAK,uBAAgB,MAAM,MAAM,EAAE,IAGzC,QAAQ,IAAI,SACd,QAAQ;AAAA,sBACN,wBAAwB,MAAM,MAAM,KAAK,YAAY;AAAA,oBACvD;AAAA,kBAEJ,OAAO;AAEL,0BAAM,OAAO,MAAM,QAAQ,KAAK,QAAQ;AACxC,+BAAW,QAAQ,IAAI,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ,GAChE,eAAe;AAAA,kBACjB;AAAA,gBACF,SAAS,KAAK;AACZ,sBAAI,eAAe,KAAM;AACzB,wBAAM;AAAA,gBACR;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,SAAS,KAAK;AACZ,oBAAQ,MAAM,qCAA8B,MAAM,MAAM,GACxD,QAAQ,MAAM,GAAG;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH,GAGI,gBACF,MAAM,gBAAgB,gBAAgB,UAAU;AAAA,IAEpD,CAAC;AAAA,EACH;AACF;AAEA,eAAe,gBAAgB,UAAkB,UAAkB;AACjE,QAAM,WAAW,WAAW,eAAe,QAAQ,MAAM,MAAM,KAAK,IAAI;AACxE,QAAM,QAAQ,UAAU,UAAU,QAAQ,GAC1C,MAAM,OAAO,UAAU,QAAQ;AACjC;",
5
+ "names": ["stat"]
6
6
  }
@@ -44,76 +44,135 @@ async function applyOptimizePatches(patches, config) {
44
44
  optimizeDeps
45
45
  }, void 0, !0);
46
46
  }
47
- const getIsAlreadyPatched = fullFilePath => {
48
- if (_isAlreadyPatchedMap.has(fullFilePath)) return _isAlreadyPatchedMap.get(fullFilePath);
49
- const isAlreadyPatched = FSExtra.existsSync(getOgFilePath(fullFilePath));
50
- return _isAlreadyPatchedMap.set(fullFilePath, isAlreadyPatched), isAlreadyPatched;
51
- },
52
- _isAlreadyPatchedMap = /* @__PURE__ */new Map(),
53
- pathsBeingPatched = /* @__PURE__ */new Set();
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(patches.flatMap(patch => nodeModulesDirs.flatMap(async dir => {
61
- try {
62
- const nodeModuleDir = join(dir, patch.module),
63
- version = patch.patchFiles.version;
64
- let hasLogged = !1;
65
- if (FSExtra.existsSync(nodeModuleDir)) {
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
- await Promise.all(filesToApply.map(async relativePath => {
74
- try {
75
- const fullPath = join(nodeModuleDir, relativePath);
76
- if (!process.env.VXRN_FORCE_PATCH && getIsAlreadyPatched(fullPath)) return;
77
- let contentsIn = await (async () => pathsBeingPatched.has(fullPath) ? await FSExtra.readFile(fullPath, "utf-8") : getIsAlreadyPatched(fullPath) ? await FSExtra.readFile(getOgFilePath(fullPath), "utf-8") : await FSExtra.readFile(fullPath, "utf-8"))();
78
- const write = async contents => {
79
- const possibleOrigContents = contentsIn;
80
- contentsIn = contents;
81
- const alreadyPatchedPreviouslyInCurrentRun = pathsBeingPatched.has(fullPath);
82
- pathsBeingPatched.add(fullPath), await Promise.all([!alreadyPatchedPreviouslyInCurrentRun && !getIsAlreadyPatched(fullPath) && atomicWriteFile(getOgFilePath(fullPath), possibleOrigContents), atomicWriteFile(fullPath, contents)].filter(p => !!p)), hasLogged || (hasLogged = !0, console.info(` \u{1FA79} Patching ${patch.module}`)), process.env.DEBUG && console.info(` - Applied patch to ${patch.module}: ${relativePath}`);
83
- },
84
- patchDefinition = patch.patchFiles[file];
85
- if (typeof patchDefinition == "string") {
86
- await write(patchDefinition);
87
- return;
88
- }
89
- if (Array.isArray(patchDefinition)) {
90
- let contents = contentsIn;
91
- for (const strategy of patchDefinition) strategy === "flow" && (contents = await transformFlowBabel(contents)), (strategy === "swc" || strategy === "jsx") && (contents = (await transformSWC(fullPath, contents, {
92
- mode: "build",
93
- environment: "ios",
94
- forceJSX: strategy === "jsx",
95
- noHMR: !0,
96
- fixNonTypeSpecificImports: !0
97
- }))?.code || contents);
98
- contentsIn !== contents && (await write(contents));
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
- const out = await patchDefinition(contentsIn);
102
- typeof out == "string" && (await write(out));
103
- } catch (err) {
104
- if (err instanceof Bail) return;
105
- throw err;
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
- } catch (err) {
111
- console.error("\u{1F6A8} Error applying patch to", patch.module), console.error(err);
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","getIsAlreadyPatched","fullFilePath","_isAlreadyPatchedMap","has","get","isAlreadyPatched","existsSync","getOgFilePath","set","Map","pathsBeingPatched","Set","process","cwd","nodeModulesDirs","map","relativePath","Promise","flatMap","dir","nodeModuleDir","version","hasLogged","pkgJSON","readJSON","satisfies","file","filesToApply","fullPath","env","VXRN_FORCE_PATCH","contentsIn","readFile","write","contents","possibleOrigContents","alreadyPatchedPreviouslyInCurrentRun","add","atomicWriteFile","p","info","DEBUG","patchDefinition","Array","isArray","strategy","mode","environment","forceJSX","noHMR","fixNonTypeSpecificImports","code","out","err","error","filePath","tempPath","pid","Date","now","writeFile"],"sources":["../../src/utils/patches.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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 getIsAlreadyPatched = function (fullFilePath) {
151
- if (_isAlreadyPatchedMap.has(fullFilePath)) return _isAlreadyPatchedMap.get(fullFilePath);
152
- var isAlreadyPatched = FSExtra.existsSync(getOgFilePath(fullFilePath));
153
- return _isAlreadyPatchedMap.set(fullFilePath, isAlreadyPatched), isAlreadyPatched;
154
- },
155
- _isAlreadyPatchedMap = /* @__PURE__ */new Map(),
156
- pathsBeingPatched = /* @__PURE__ */new Set();
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(patches.flatMap(function (patch) {
167
- return nodeModulesDirs.flatMap(async function (dir) {
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(dir, patch.module),
170
- version = patch.patchFiles.version,
171
- hasLogged = !1;
172
- if (FSExtra.existsSync(nodeModuleDir)) {
173
- var _loop = async function (file2) {
174
- if (file2 === "optimize" || file2 === "version") return "continue";
175
- var filesToApply = file2.includes("*") ? globDir(nodeModuleDir, file2) : [file2];
176
- await Promise.all(filesToApply.map(async function (relativePath) {
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 fullPath = join(nodeModuleDir, relativePath);
179
- if (!process.env.VXRN_FORCE_PATCH && getIsAlreadyPatched(fullPath)) return;
180
- var contentsIn = await async function () {
181
- return pathsBeingPatched.has(fullPath) ? await FSExtra.readFile(fullPath, "utf-8") : getIsAlreadyPatched(fullPath) ? await FSExtra.readFile(getOgFilePath(fullPath), "utf-8") : await FSExtra.readFile(fullPath, "utf-8");
182
- }(),
183
- write = async function (contents2) {
184
- var possibleOrigContents = contentsIn;
185
- contentsIn = contents2;
186
- var alreadyPatchedPreviouslyInCurrentRun = pathsBeingPatched.has(fullPath);
187
- pathsBeingPatched.add(fullPath), await Promise.all([!alreadyPatchedPreviouslyInCurrentRun && /* only write ogfile if this is the first patch, otherwise contentsIn will be already patched content */
188
- !getIsAlreadyPatched(fullPath) && /* an ogfile must already be there, no need to write */
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
- if (_instanceof(err, Bail)) return;
233
- throw err;
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
- if (typeof version == "string") {
238
- var pkgJSON = await FSExtra.readJSON(join(nodeModuleDir, "package.json"));
239
- if (!semver.satisfies(pkgJSON.version, version)) return;
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
- for (var file in patch.patchFiles) await _loop(file);
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":"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","ignoreList":[]}
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.87",
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.87",
70
- "@vxrn/debug": "1.2.87",
71
- "@vxrn/query-string": "1.2.87",
72
- "@vxrn/react-native-prebuilt": "1.2.87",
73
- "@vxrn/resolve": "1.2.87",
74
- "@vxrn/safe-area": "1.2.87",
75
- "@vxrn/url-parse": "1.2.87",
76
- "@vxrn/utils": "1.2.87",
77
- "@vxrn/vendor": "1.2.87",
78
- "@vxrn/vite-flow": "1.2.87",
79
- "@vxrn/vite-plugin-metro": "1.2.87",
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",
@@ -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
- // --- HACK! ---
107
- // These originally lives inside applyDependencyPatches
108
- // but we can't be sure that `applyDependencyPatches` will only be called
109
- // once, at least one is calling applyDependencyPatches directly, in fixDependenciesPlugin.ts
110
- /**
111
- * Determine if a file has already been patched by a previous run.
112
- *
113
- * We need this to be cached not only for performance but also for the
114
- * fact that we may patch the same file multiple times but the "ogfile"
115
- * will be created during the first patching.
116
- */
117
- const getIsAlreadyPatched = (fullFilePath: string) => {
118
- if (_isAlreadyPatchedMap.has(fullFilePath)) {
119
- return _isAlreadyPatchedMap.get(fullFilePath)
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
- * A set of full paths to files that have been patched during the
129
- * current run.
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
- cwd: root,
140
- }).map((relativePath) => join(root, relativePath))
131
+ const nodeModulesDirs = findNodeModules({ cwd: root }).map((relativePath) =>
132
+ join(root, relativePath)
133
+ )
141
134
 
142
135
  await Promise.all(
143
- patches.flatMap((patch) => {
144
- return nodeModulesDirs!.flatMap(async (dir) => {
145
- try {
146
- const nodeModuleDir = join(dir, patch.module)
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
- let hasLogged = false
141
+ await Promise.all(
142
+ patches.map(async (patch) => {
143
+ try {
144
+ const nodeModuleDir = join(nodeModulesDir, patch.module)
150
145
 
151
- if (FSExtra.existsSync(nodeModuleDir)) {
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
- for (const file in patch.patchFiles) {
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
- await Promise.all(
169
- filesToApply.map(async (relativePath) => {
170
- try {
171
- const fullPath = join(nodeModuleDir, relativePath)
172
-
173
- if (!process.env.VXRN_FORCE_PATCH && getIsAlreadyPatched(fullPath)) {
174
- // if the file is already patched, skip it
175
- return
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
- let contentsIn = await (async () => {
179
- if (pathsBeingPatched.has(fullPath)) {
180
- // If the file has been patched during the current run,
181
- // we should always start from the already patched file
182
- return await FSExtra.readFile(fullPath, 'utf-8')
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
- if (getIsAlreadyPatched(fullPath)) {
186
- // If a original file exists, we should start from it
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
- return await FSExtra.readFile(fullPath, 'utf-8')
193
- })()
194
-
195
- const write = async (contents: string) => {
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
- if (!hasLogged) {
217
- hasLogged = true
218
- console.info(` 🩹 Patching ${patch.module}`)
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
- if (process.env.DEBUG) {
222
- console.info(
223
- ` - Applied patch to ${patch.module}: ${relativePath}`
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
- const patchDefinition = patch.patchFiles[file]
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
- // strategy
237
- if (Array.isArray(patchDefinition)) {
238
- let contents = contentsIn
239
-
240
- for (const strategy of patchDefinition) {
241
- if (strategy === 'flow') {
242
- contents = await transformFlowBabel(contents)
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
- // update
266
- const out = await patchDefinition(contentsIn)
267
- if (typeof out === 'string') {
268
- await write(out)
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
- } catch (err) {
271
- if (err instanceof Bail) {
272
- return
282
+
283
+ if (process.env.DEBUG) {
284
+ console.info(
285
+ ` - Applied patch to ${patch.module}: ${relativePath}`
286
+ )
273
287
  }
274
- throw err
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
- } catch (err) {
281
- console.error(`🚨 Error applying patch to`, patch.module)
282
- console.error(err)
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;AA8BD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,QAAQ,EAAE,EACnB,EAAE,IAAoB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAuJjD"}
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"}