@vxrn/vite-plugin-metro 1.1.501-1751155612296
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/cjs/index.cjs +28 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/index.native.js +28 -0
- package/dist/cjs/index.native.js.map +6 -0
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +56 -0
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.js +49 -0
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.js.map +6 -0
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +48 -0
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +6 -0
- package/dist/cjs/plugins/metroPlugin.cjs +214 -0
- package/dist/cjs/plugins/metroPlugin.js +186 -0
- package/dist/cjs/plugins/metroPlugin.js.map +6 -0
- package/dist/cjs/plugins/metroPlugin.native.js +179 -0
- package/dist/cjs/plugins/metroPlugin.native.js.map +6 -0
- package/dist/cjs/transformer/babel-core.cjs +27 -0
- package/dist/cjs/transformer/babel-core.js +22 -0
- package/dist/cjs/transformer/babel-core.js.map +6 -0
- package/dist/cjs/transformer/babel-core.native.js +28 -0
- package/dist/cjs/transformer/babel-core.native.js.map +6 -0
- package/dist/cjs/transformer/babel-transformer.cjs +148 -0
- package/dist/cjs/transformer/babel-transformer.js +129 -0
- package/dist/cjs/transformer/babel-transformer.js.map +6 -0
- package/dist/cjs/transformer/babel-transformer.native.js +135 -0
- package/dist/cjs/transformer/babel-transformer.native.js.map +6 -0
- package/dist/cjs/transformer/loadBabelConfig.cjs +53 -0
- package/dist/cjs/transformer/loadBabelConfig.js +46 -0
- package/dist/cjs/transformer/loadBabelConfig.js.map +6 -0
- package/dist/cjs/transformer/loadBabelConfig.native.js +55 -0
- package/dist/cjs/transformer/loadBabelConfig.native.js.map +6 -0
- package/dist/cjs/transformer/transformSync.cjs +64 -0
- package/dist/cjs/transformer/transformSync.js +53 -0
- package/dist/cjs/transformer/transformSync.js.map +6 -0
- package/dist/cjs/transformer/transformSync.native.js +58 -0
- package/dist/cjs/transformer/transformSync.native.js.map +6 -0
- package/dist/cjs/utils/getTerminalReporter.cjs +59 -0
- package/dist/cjs/utils/getTerminalReporter.js +48 -0
- package/dist/cjs/utils/getTerminalReporter.js.map +6 -0
- package/dist/cjs/utils/getTerminalReporter.native.js +53 -0
- package/dist/cjs/utils/getTerminalReporter.native.js.map +6 -0
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +35 -0
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js +30 -0
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js.map +6 -0
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +37 -0
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +6 -0
- package/dist/cjs/utils/projectImport.cjs +56 -0
- package/dist/cjs/utils/projectImport.js +43 -0
- package/dist/cjs/utils/projectImport.js.map +6 -0
- package/dist/cjs/utils/projectImport.native.js +54 -0
- package/dist/cjs/utils/projectImport.native.js.map +6 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +4 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +4 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.js +35 -0
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.js.map +6 -0
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +33 -0
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +1 -0
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +34 -0
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +1 -0
- package/dist/esm/plugins/metroPlugin.js +168 -0
- package/dist/esm/plugins/metroPlugin.js.map +6 -0
- package/dist/esm/plugins/metroPlugin.mjs +180 -0
- package/dist/esm/plugins/metroPlugin.mjs.map +1 -0
- package/dist/esm/plugins/metroPlugin.native.js +189 -0
- package/dist/esm/plugins/metroPlugin.native.js.map +1 -0
- package/dist/esm/transformer/babel-core.js +9 -0
- package/dist/esm/transformer/babel-core.js.map +6 -0
- package/dist/esm/transformer/babel-core.mjs +3 -0
- package/dist/esm/transformer/babel-core.mjs.map +1 -0
- package/dist/esm/transformer/babel-core.native.js +3 -0
- package/dist/esm/transformer/babel-core.native.js.map +1 -0
- package/dist/esm/transformer/babel-transformer.js +110 -0
- package/dist/esm/transformer/babel-transformer.js.map +6 -0
- package/dist/esm/transformer/babel-transformer.mjs +122 -0
- package/dist/esm/transformer/babel-transformer.mjs.map +1 -0
- package/dist/esm/transformer/babel-transformer.native.js +136 -0
- package/dist/esm/transformer/babel-transformer.native.js.map +1 -0
- package/dist/esm/transformer/loadBabelConfig.js +23 -0
- package/dist/esm/transformer/loadBabelConfig.js.map +6 -0
- package/dist/esm/transformer/loadBabelConfig.mjs +19 -0
- package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -0
- package/dist/esm/transformer/loadBabelConfig.native.js +23 -0
- package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -0
- package/dist/esm/transformer/transformSync.js +29 -0
- package/dist/esm/transformer/transformSync.js.map +6 -0
- package/dist/esm/transformer/transformSync.mjs +30 -0
- package/dist/esm/transformer/transformSync.mjs.map +1 -0
- package/dist/esm/transformer/transformSync.native.js +31 -0
- package/dist/esm/transformer/transformSync.native.js.map +1 -0
- package/dist/esm/utils/getTerminalReporter.js +25 -0
- package/dist/esm/utils/getTerminalReporter.js.map +6 -0
- package/dist/esm/utils/getTerminalReporter.mjs +25 -0
- package/dist/esm/utils/getTerminalReporter.mjs.map +1 -0
- package/dist/esm/utils/getTerminalReporter.native.js +26 -0
- package/dist/esm/utils/getTerminalReporter.native.js.map +1 -0
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js +14 -0
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.js.map +6 -0
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +12 -0
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +1 -0
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +14 -0
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +1 -0
- package/dist/esm/utils/projectImport.js +20 -0
- package/dist/esm/utils/projectImport.js.map +6 -0
- package/dist/esm/utils/projectImport.mjs +20 -0
- package/dist/esm/utils/projectImport.mjs.map +1 -0
- package/dist/esm/utils/projectImport.native.js +22 -0
- package/dist/esm/utils/projectImport.native.js.map +1 -0
- package/empty.js +0 -0
- package/package.json +68 -0
- package/src/index.ts +4 -0
- package/src/plugins/expoManifestRequestHandlerPlugin.ts +75 -0
- package/src/plugins/metroPlugin.ts +314 -0
- package/src/transformer/babel-core.ts +7 -0
- package/src/transformer/babel-transformer.ts +211 -0
- package/src/transformer/loadBabelConfig.ts +53 -0
- package/src/transformer/transformSync.ts +54 -0
- package/src/utils/getTerminalReporter.ts +42 -0
- package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +27 -0
- package/src/utils/projectImport.ts +32 -0
- package/types/index.d.ts +5 -0
- package/types/index.d.ts.map +1 -0
- package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +14 -0
- package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +1 -0
- package/types/plugins/metroPlugin.d.ts +22 -0
- package/types/plugins/metroPlugin.d.ts.map +1 -0
- package/types/transformer/babel-core.d.ts +2 -0
- package/types/transformer/babel-core.d.ts.map +1 -0
- package/types/transformer/babel-transformer.d.ts +18 -0
- package/types/transformer/babel-transformer.d.ts.map +1 -0
- package/types/transformer/loadBabelConfig.d.ts +10 -0
- package/types/transformer/loadBabelConfig.d.ts.map +1 -0
- package/types/transformer/transformSync.d.ts +11 -0
- package/types/transformer/transformSync.d.ts.map +1 -0
- package/types/utils/getTerminalReporter.d.ts +3 -0
- package/types/utils/getTerminalReporter.d.ts.map +1 -0
- package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +5 -0
- package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +1 -0
- package/types/utils/projectImport.d.ts +12 -0
- package/types/utils/projectImport.d.ts.map +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TLSSocket } from "node:tls";
|
|
2
|
+
import { projectImport } from "../utils/projectImport.mjs";
|
|
3
|
+
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from "../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs";
|
|
4
|
+
function expoManifestRequestHandlerPlugin(options) {
|
|
5
|
+
return {
|
|
6
|
+
name: "expo-manifest-request-handler",
|
|
7
|
+
// configResolved(config) {
|
|
8
|
+
// projectRoot = config.root
|
|
9
|
+
// },
|
|
10
|
+
async configureServer(server) {
|
|
11
|
+
const {
|
|
12
|
+
root: projectRoot
|
|
13
|
+
} = server.config,
|
|
14
|
+
ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
|
|
15
|
+
server.middlewares.use(async (req, res, next) => {
|
|
16
|
+
if (!req.headers["expo-platform"]) return next();
|
|
17
|
+
const protocol = req.socket instanceof TLSSocket && req.socket.encrypted ? "https" : "http",
|
|
18
|
+
manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {
|
|
19
|
+
constructUrl: ({
|
|
20
|
+
scheme,
|
|
21
|
+
hostname
|
|
22
|
+
}) => {
|
|
23
|
+
const host = req.headers["x-forwarded-host"] || req.headers.host || hostname;
|
|
24
|
+
return scheme ? `${protocol || scheme}://${host}` : host;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
options.mainModuleName && patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, options.mainModuleName), manifestHandlerMiddleware.handleRequestAsync(req, res, next);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export { expoManifestRequestHandlerPlugin };
|
|
33
|
+
//# sourceMappingURL=expoManifestRequestHandlerPlugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TLSSocket","projectImport","patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName","expoManifestRequestHandlerPlugin","options","name","configureServer","server","root","projectRoot","config","ExpoGoManifestHandlerMiddleware","default","middlewares","use","req","res","next","headers","protocol","socket","encrypted","manifestHandlerMiddleware","constructUrl","scheme","hostname","host","mainModuleName","handleRequestAsync"],"sources":["../../../src/plugins/expoManifestRequestHandlerPlugin.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAG1B,SAASC,aAAA,QAAqB;AAC9B,SAASC,4DAAA,QAAoE;AActE,SAASC,iCACdC,OAAA,EACc;EAGd,OAAO;IACLC,IAAA,EAAM;IAAA;IAAA;IAAA;IAIN,MAAMC,gBAAgBC,MAAA,EAAQ;MAC5B,MAAM;UAAEC,IAAA,EAAMC;QAAY,IAAIF,MAAA,CAAOG,MAAA;QAE/BC,+BAAA,IACJ,MAAMV,aAAA,CACJQ,WAAA,EACA,gFACF,GACAG,OAAA,CAAQD,+BAAA;MAEVJ,MAAA,CAAOM,WAAA,CAAYC,GAAA,CAAI,OAAOC,GAAA,EAAKC,GAAA,EAAKC,IAAA,KAAS;QAC/C,IAAI,CAACF,GAAA,CAAIG,OAAA,CAAQ,eAAe,GAE9B,OAAOD,IAAA,CAAK;QAGd,MAAME,QAAA,GAAWJ,GAAA,CAAIK,MAAA,YAAkBpB,SAAA,IAAae,GAAA,CAAIK,MAAA,CAAOC,SAAA,GAAY,UAAU;UAE/EC,yBAAA,GAA4B,IAAIX,+BAAA,CAAgCF,WAAA,EAAa;YACjFc,YAAA,EAAcA,CAAC;cAAEC,MAAA;cAAQC;YAAS,MAAM;cAEtC,MAAMC,IAAA,GAAOX,GAAA,CAAIG,OAAA,CAAQ,kBAAkB,KAAKH,GAAA,CAAIG,OAAA,CAAQQ,IAAA,IAAQD,QAAA;cAEpE,OAAKD,MAAA,GAOE,GAAGL,QAAA,IAAYK,MAAM,MAAME,IAAI,KAH7BA,IAAA;YAIX;UACF,CAAC;QAEGtB,OAAA,CAAQuB,cAAA,IACVzB,4DAAA,CACEoB,yBAAA,EACAlB,OAAA,CAAQuB,cACV,GAIFL,yBAAA,CAA0BM,kBAAA,CAAmBb,GAAA,EAAKC,GAAA,EAAKC,IAAI;MAC7D,CAAC;IACH;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { TLSSocket } from "node:tls";
|
|
2
|
+
import { projectImport } from "../utils/projectImport.native.js";
|
|
3
|
+
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from "../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js";
|
|
4
|
+
function expoManifestRequestHandlerPlugin(options) {
|
|
5
|
+
return {
|
|
6
|
+
name: "expo-manifest-request-handler",
|
|
7
|
+
// configResolved(config) {
|
|
8
|
+
// projectRoot = config.root
|
|
9
|
+
// },
|
|
10
|
+
async configureServer(server) {
|
|
11
|
+
var {
|
|
12
|
+
root: projectRoot
|
|
13
|
+
} = server.config,
|
|
14
|
+
ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware;
|
|
15
|
+
server.middlewares.use(async function (req, res, next) {
|
|
16
|
+
if (!req.headers["expo-platform"]) return next();
|
|
17
|
+
var protocol = req.socket instanceof TLSSocket && req.socket.encrypted ? "https" : "http",
|
|
18
|
+
manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {
|
|
19
|
+
constructUrl: function (param) {
|
|
20
|
+
var {
|
|
21
|
+
scheme,
|
|
22
|
+
hostname
|
|
23
|
+
} = param,
|
|
24
|
+
host = req.headers["x-forwarded-host"] || req.headers.host || hostname;
|
|
25
|
+
return scheme ? `${protocol || scheme}://${host}` : host;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
options.mainModuleName && patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, options.mainModuleName), manifestHandlerMiddleware.handleRequestAsync(req, res, next);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export { expoManifestRequestHandlerPlugin };
|
|
34
|
+
//# sourceMappingURL=expoManifestRequestHandlerPlugin.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TLSSocket","projectImport","patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName","expoManifestRequestHandlerPlugin","options","name","configureServer","server","root","projectRoot","config","ExpoGoManifestHandlerMiddleware","default","middlewares","use","req","res","next","headers","protocol","socket","encrypted","manifestHandlerMiddleware","constructUrl","param","scheme","hostname","host","mainModuleName","handleRequestAsync"],"sources":["../../../src/plugins/expoManifestRequestHandlerPlugin.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAG1B,SAASC,aAAA,QAAqB;AAC9B,SAASC,4DAAA,QAAoE;AActE,SAASC,iCACdC,OAAA,EACc;EAGd,OAAO;IACLC,IAAA,EAAM;IAAA;IAAA;IAAA;IAIN,MAAMC,gBAAgBC,MAAA,EAAQ;MAC5B;UAAMC,IAAE,EAAAC;QAAM,IAAYF,MAAI,CAAAG,MAAO;QAAAC,+BAE/B,UACJV,aAAM,CAAAQ,WAAA,qFAAAG,OAAA,CAAAD,+BAAA;MAAAJ,MACJ,CAAAM,WAAA,CAAAC,GAAA,iBAAAC,GAAA,EAAAC,GAAA,EAAAC,IAAA;QACA,KAAAF,GAAA,CAAAG,OAAA,mBAEF,OAAQD,IAAA;QAEV,IAAAE,QAAO,GAAAJ,GAAY,CAAAK,MAAI,YAAYpB,SAAK,IAASe,GAAA,CAAAK,MAAA,CAAAC,SAAA;UAAAC,yBAAA,OAAAX,+BAAA,CAAAF,WAAA;YAC/Cc,YAAS,WAAAA,CAAQC,KAAA,EAAe;cAE9B;kBAAOC,MAAK;kBAAAC;gBAAA,IAAAF,KAAA;gBAAAG,IAAA,GAAAZ,GAAA,CAAAG,OAAA,wBAAAH,GAAA,CAAAG,OAAA,CAAAS,IAAA,IAAAD,QAAA;cAGd,OAAMD,MAAW,MAAIN,QAAA,IAAAM,MAAkB,MAAAE,IAAA,EAAa,GAAIA,IAAA;YAGtD;UAEE;QAEAvB,OAAA,CAAAwB,cAOO,IAAG1B,4DAHD,CAAAoB,yBAAA,EAAAlB,OAAA,CAAAwB,cAAA,GAAAN,yBAAA,CAAAO,kBAAA,CAAAd,GAAA,EAAAC,GAAA,EAAAC,IAAA;MAAA;IAIX;EAGF;AACE;AACE,SACQd,gCAKZ","ignoreList":[]}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { parse } from "node:url";
|
|
4
|
+
import launchEditor from "launch-editor";
|
|
5
|
+
import { projectImport, projectResolve } from "../utils/projectImport";
|
|
6
|
+
import { getTerminalReporter } from "../utils/getTerminalReporter";
|
|
7
|
+
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from "../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName";
|
|
8
|
+
function metroPlugin({
|
|
9
|
+
argv,
|
|
10
|
+
defaultConfigOverrides,
|
|
11
|
+
babelConfig,
|
|
12
|
+
mainModuleName
|
|
13
|
+
} = {}) {
|
|
14
|
+
return {
|
|
15
|
+
name: "metro",
|
|
16
|
+
// configResolved(config) {
|
|
17
|
+
// projectRoot = config.root
|
|
18
|
+
// },
|
|
19
|
+
async configureServer(server) {
|
|
20
|
+
const { logger, root: projectRoot } = server.config, { default: Metro, loadConfig } = await projectImport(projectRoot, "metro"), { default: MetroHmrServer } = await projectImport(projectRoot, "metro/src/HmrServer"), { default: createWebsocketServer } = await projectImport(projectRoot, "metro/src/lib/createWebsocketServer"), { getDefaultConfig } = await projectImport(projectRoot, "@expo/metro-config"), { createDevMiddleware } = await projectImport(projectRoot, "@react-native/dev-middleware"), _defaultConfig = getDefaultConfig(projectRoot);
|
|
21
|
+
if (mainModuleName) {
|
|
22
|
+
const origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl, resolveMainModuleName = await (async () => {
|
|
23
|
+
const ExpoGoManifestHandlerMiddleware = (await projectImport(
|
|
24
|
+
projectRoot,
|
|
25
|
+
"@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js"
|
|
26
|
+
)).default.ExpoGoManifestHandlerMiddleware, manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
|
|
27
|
+
return patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(
|
|
28
|
+
manifestHandlerMiddleware,
|
|
29
|
+
mainModuleName
|
|
30
|
+
), (p) => manifestHandlerMiddleware.resolveMainModuleName({
|
|
31
|
+
pkg: { main: mainModuleName },
|
|
32
|
+
platform: p.platform
|
|
33
|
+
});
|
|
34
|
+
})();
|
|
35
|
+
_defaultConfig.server.rewriteRequestUrl = (url) => {
|
|
36
|
+
if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
|
|
37
|
+
const resolvedMainModulePath = resolveMainModuleName({
|
|
38
|
+
platform: "ios"
|
|
39
|
+
// we probably need to handle android here, but currently in our use case this won't affect the result
|
|
40
|
+
});
|
|
41
|
+
return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
|
|
42
|
+
}
|
|
43
|
+
return origRewriteRequestUrl(url);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const defaultConfig = {
|
|
47
|
+
..._defaultConfig,
|
|
48
|
+
resolver: {
|
|
49
|
+
..._defaultConfig?.resolver,
|
|
50
|
+
sourceExts: ["js", "jsx", "json", "ts", "tsx", "mjs", "cjs"],
|
|
51
|
+
// `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.
|
|
52
|
+
resolveRequest: (context, moduleName, platform) => {
|
|
53
|
+
const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
|
|
54
|
+
if (moduleName.startsWith("@babel/runtime")) {
|
|
55
|
+
const contextOverride = {
|
|
56
|
+
...context,
|
|
57
|
+
unstable_conditionNames: context.unstable_conditionNames.filter(
|
|
58
|
+
(c) => c !== "import"
|
|
59
|
+
)
|
|
60
|
+
};
|
|
61
|
+
return origResolveRequestFn(contextOverride, moduleName, platform);
|
|
62
|
+
}
|
|
63
|
+
return origResolveRequestFn(context, moduleName, platform);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
transformer: {
|
|
67
|
+
..._defaultConfig?.transformer,
|
|
68
|
+
babelTransformerPath: projectResolve(
|
|
69
|
+
projectRoot,
|
|
70
|
+
"@vxrn/vite-plugin-metro/babel-transformer"
|
|
71
|
+
),
|
|
72
|
+
// TODO: This is what Expo is doing, but do we really need this?
|
|
73
|
+
publicPath: "/assets/?unstable_path=."
|
|
74
|
+
},
|
|
75
|
+
reporter: await getTerminalReporter(projectRoot)
|
|
76
|
+
}, config = await loadConfig(
|
|
77
|
+
{
|
|
78
|
+
cwd: projectRoot,
|
|
79
|
+
projectRoot,
|
|
80
|
+
"reset-cache": !!process.env.METRO_RESET_CACHE,
|
|
81
|
+
...argv
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
...defaultConfig,
|
|
85
|
+
...typeof defaultConfigOverrides == "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides
|
|
86
|
+
}
|
|
87
|
+
), { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {
|
|
88
|
+
// Force enable file watching, even on CI.
|
|
89
|
+
// This is needed for HMR tests to work on CI.
|
|
90
|
+
watch: !0
|
|
91
|
+
}), originalTransformFile = metroServer.getBundler().getBundler().transformFile.bind(metroServer.getBundler().getBundler());
|
|
92
|
+
metroServer.getBundler().getBundler().transformFile = async (filePath, transformOptions, fileBuffer) => originalTransformFile(
|
|
93
|
+
filePath,
|
|
94
|
+
{
|
|
95
|
+
...transformOptions,
|
|
96
|
+
customTransformOptions: {
|
|
97
|
+
...transformOptions.customTransformOptions,
|
|
98
|
+
vite: {
|
|
99
|
+
babelConfig
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
fileBuffer
|
|
104
|
+
);
|
|
105
|
+
const hmrServer = new MetroHmrServer(
|
|
106
|
+
metroServer.getBundler(),
|
|
107
|
+
metroServer.getCreateModuleId(),
|
|
108
|
+
config
|
|
109
|
+
), reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`, { middleware: rnDevtoolsMiddleware, websocketEndpoints: rnDevtoolsWebsocketEndpoints } = createDevMiddleware({
|
|
110
|
+
projectRoot,
|
|
111
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
112
|
+
logger: console
|
|
113
|
+
});
|
|
114
|
+
server.middlewares.use(async (req, res, next) => {
|
|
115
|
+
try {
|
|
116
|
+
if (req.url?.includes(".bundle")) {
|
|
117
|
+
const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
118
|
+
if (VITE_METRO_DEBUG_BUNDLE && existsSync(VITE_METRO_DEBUG_BUNDLE)) {
|
|
119
|
+
console.info(" !!! - serving debug bundle from", VITE_METRO_DEBUG_BUNDLE);
|
|
120
|
+
const content = await readFile(VITE_METRO_DEBUG_BUNDLE, "utf-8");
|
|
121
|
+
res.setHeader("Content-Type", "application/javascript"), res.end(content);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (req.url === "/status" && req.headers["user-agent"]?.includes(
|
|
126
|
+
"CFNetwork/"
|
|
127
|
+
)) {
|
|
128
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
132
|
+
let body = "";
|
|
133
|
+
req.on("data", (chunk) => {
|
|
134
|
+
body += chunk.toString();
|
|
135
|
+
}), req.on("end", () => {
|
|
136
|
+
try {
|
|
137
|
+
const frame = JSON.parse(body);
|
|
138
|
+
launchEditor(frame.file), res.statusCode = 200, res.end("Stack frame opened in editor");
|
|
139
|
+
} catch (e) {
|
|
140
|
+
return console.error("Failed to parse stack frame:", e), res.statusCode = 400, res.end("Invalid stack frame JSON");
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
await middleware(req, res, next);
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error("Metro middleware error:", error), next();
|
|
148
|
+
}
|
|
149
|
+
}), server.middlewares.use(rnDevtoolsMiddleware);
|
|
150
|
+
const websocketEndpoints = {
|
|
151
|
+
"/hot": createWebsocketServer({
|
|
152
|
+
websocketServer: hmrServer
|
|
153
|
+
}),
|
|
154
|
+
...rnDevtoolsWebsocketEndpoints
|
|
155
|
+
};
|
|
156
|
+
server.httpServer?.on("upgrade", (request, socket, head) => {
|
|
157
|
+
const { pathname } = parse(request.url);
|
|
158
|
+
pathname != null && websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {
|
|
159
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
export {
|
|
166
|
+
metroPlugin
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=metroPlugin.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/plugins/metroPlugin.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { parse } from "node:url";
|
|
4
|
+
import launchEditor from "launch-editor";
|
|
5
|
+
import { projectImport, projectResolve } from "../utils/projectImport.mjs";
|
|
6
|
+
import { getTerminalReporter } from "../utils/getTerminalReporter.mjs";
|
|
7
|
+
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from "../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs";
|
|
8
|
+
function metroPlugin({
|
|
9
|
+
argv,
|
|
10
|
+
defaultConfigOverrides,
|
|
11
|
+
babelConfig,
|
|
12
|
+
mainModuleName
|
|
13
|
+
} = {}) {
|
|
14
|
+
return {
|
|
15
|
+
name: "metro",
|
|
16
|
+
// configResolved(config) {
|
|
17
|
+
// projectRoot = config.root
|
|
18
|
+
// },
|
|
19
|
+
async configureServer(server) {
|
|
20
|
+
const {
|
|
21
|
+
logger,
|
|
22
|
+
root: projectRoot
|
|
23
|
+
} = server.config,
|
|
24
|
+
{
|
|
25
|
+
default: Metro,
|
|
26
|
+
loadConfig
|
|
27
|
+
} = await projectImport(projectRoot, "metro"),
|
|
28
|
+
{
|
|
29
|
+
default: MetroHmrServer
|
|
30
|
+
} = await projectImport(projectRoot, "metro/src/HmrServer"),
|
|
31
|
+
{
|
|
32
|
+
default: createWebsocketServer
|
|
33
|
+
} = await projectImport(projectRoot, "metro/src/lib/createWebsocketServer"),
|
|
34
|
+
{
|
|
35
|
+
getDefaultConfig
|
|
36
|
+
} = await projectImport(projectRoot, "@expo/metro-config"),
|
|
37
|
+
{
|
|
38
|
+
createDevMiddleware
|
|
39
|
+
} = await projectImport(projectRoot, "@react-native/dev-middleware"),
|
|
40
|
+
_defaultConfig = getDefaultConfig(projectRoot);
|
|
41
|
+
if (mainModuleName) {
|
|
42
|
+
const origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl,
|
|
43
|
+
resolveMainModuleName = await (async () => {
|
|
44
|
+
const ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware,
|
|
45
|
+
manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
|
|
46
|
+
return patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, mainModuleName), p => manifestHandlerMiddleware.resolveMainModuleName({
|
|
47
|
+
pkg: {
|
|
48
|
+
main: mainModuleName
|
|
49
|
+
},
|
|
50
|
+
platform: p.platform
|
|
51
|
+
});
|
|
52
|
+
})();
|
|
53
|
+
_defaultConfig.server.rewriteRequestUrl = url => {
|
|
54
|
+
if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
|
|
55
|
+
const resolvedMainModulePath = resolveMainModuleName({
|
|
56
|
+
platform: "ios"
|
|
57
|
+
// we probably need to handle android here, but currently in our use case this won't affect the result
|
|
58
|
+
});
|
|
59
|
+
return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
|
|
60
|
+
}
|
|
61
|
+
return origRewriteRequestUrl(url);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const defaultConfig = {
|
|
65
|
+
..._defaultConfig,
|
|
66
|
+
resolver: {
|
|
67
|
+
..._defaultConfig?.resolver,
|
|
68
|
+
sourceExts: ["js", "jsx", "json", "ts", "tsx", "mjs", "cjs"],
|
|
69
|
+
// `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.
|
|
70
|
+
resolveRequest: (context, moduleName, platform) => {
|
|
71
|
+
const origResolveRequestFn = _defaultConfig?.resolver?.resolveRequest || context.resolveRequest;
|
|
72
|
+
if (moduleName.startsWith("@babel/runtime")) {
|
|
73
|
+
const contextOverride = {
|
|
74
|
+
...context,
|
|
75
|
+
unstable_conditionNames: context.unstable_conditionNames.filter(c => c !== "import")
|
|
76
|
+
};
|
|
77
|
+
return origResolveRequestFn(contextOverride, moduleName, platform);
|
|
78
|
+
}
|
|
79
|
+
return origResolveRequestFn(context, moduleName, platform);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
transformer: {
|
|
83
|
+
..._defaultConfig?.transformer,
|
|
84
|
+
babelTransformerPath: projectResolve(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer"),
|
|
85
|
+
// TODO: This is what Expo is doing, but do we really need this?
|
|
86
|
+
publicPath: "/assets/?unstable_path=."
|
|
87
|
+
},
|
|
88
|
+
reporter: await getTerminalReporter(projectRoot)
|
|
89
|
+
},
|
|
90
|
+
config = await loadConfig({
|
|
91
|
+
cwd: projectRoot,
|
|
92
|
+
projectRoot,
|
|
93
|
+
"reset-cache": !!process.env.METRO_RESET_CACHE,
|
|
94
|
+
...argv
|
|
95
|
+
}, {
|
|
96
|
+
...defaultConfig,
|
|
97
|
+
...(typeof defaultConfigOverrides == "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides)
|
|
98
|
+
}),
|
|
99
|
+
{
|
|
100
|
+
middleware,
|
|
101
|
+
end,
|
|
102
|
+
metroServer
|
|
103
|
+
} = await Metro.createConnectMiddleware(config, {
|
|
104
|
+
// Force enable file watching, even on CI.
|
|
105
|
+
// This is needed for HMR tests to work on CI.
|
|
106
|
+
watch: !0
|
|
107
|
+
}),
|
|
108
|
+
originalTransformFile = metroServer.getBundler().getBundler().transformFile.bind(metroServer.getBundler().getBundler());
|
|
109
|
+
metroServer.getBundler().getBundler().transformFile = async (filePath, transformOptions, fileBuffer) => originalTransformFile(filePath, {
|
|
110
|
+
...transformOptions,
|
|
111
|
+
customTransformOptions: {
|
|
112
|
+
...transformOptions.customTransformOptions,
|
|
113
|
+
vite: {
|
|
114
|
+
babelConfig
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}, fileBuffer);
|
|
118
|
+
const hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config),
|
|
119
|
+
reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`,
|
|
120
|
+
{
|
|
121
|
+
middleware: rnDevtoolsMiddleware,
|
|
122
|
+
websocketEndpoints: rnDevtoolsWebsocketEndpoints
|
|
123
|
+
} = createDevMiddleware({
|
|
124
|
+
projectRoot,
|
|
125
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
126
|
+
logger: console
|
|
127
|
+
});
|
|
128
|
+
server.middlewares.use(async (req, res, next) => {
|
|
129
|
+
try {
|
|
130
|
+
if (req.url?.includes(".bundle")) {
|
|
131
|
+
const VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
132
|
+
if (VITE_METRO_DEBUG_BUNDLE && existsSync(VITE_METRO_DEBUG_BUNDLE)) {
|
|
133
|
+
console.info(" !!! - serving debug bundle from", VITE_METRO_DEBUG_BUNDLE);
|
|
134
|
+
const content = await readFile(VITE_METRO_DEBUG_BUNDLE, "utf-8");
|
|
135
|
+
res.setHeader("Content-Type", "application/javascript"), res.end(content);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (req.url === "/status" && req.headers["user-agent"]?.includes("CFNetwork/")) {
|
|
140
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
144
|
+
let body = "";
|
|
145
|
+
req.on("data", chunk => {
|
|
146
|
+
body += chunk.toString();
|
|
147
|
+
}), req.on("end", () => {
|
|
148
|
+
try {
|
|
149
|
+
const frame = JSON.parse(body);
|
|
150
|
+
launchEditor(frame.file), res.statusCode = 200, res.end("Stack frame opened in editor");
|
|
151
|
+
} catch (e) {
|
|
152
|
+
return console.error("Failed to parse stack frame:", e), res.statusCode = 400, res.end("Invalid stack frame JSON");
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
await middleware(req, res, next);
|
|
158
|
+
} catch (error) {
|
|
159
|
+
console.error("Metro middleware error:", error), next();
|
|
160
|
+
}
|
|
161
|
+
}), server.middlewares.use(rnDevtoolsMiddleware);
|
|
162
|
+
const websocketEndpoints = {
|
|
163
|
+
"/hot": createWebsocketServer({
|
|
164
|
+
websocketServer: hmrServer
|
|
165
|
+
}),
|
|
166
|
+
...rnDevtoolsWebsocketEndpoints
|
|
167
|
+
};
|
|
168
|
+
server.httpServer?.on("upgrade", (request, socket, head) => {
|
|
169
|
+
const {
|
|
170
|
+
pathname
|
|
171
|
+
} = parse(request.url);
|
|
172
|
+
pathname != null && websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, ws => {
|
|
173
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
export { metroPlugin };
|
|
180
|
+
//# sourceMappingURL=metroPlugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["existsSync","readFile","parse","launchEditor","projectImport","projectResolve","getTerminalReporter","patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName","metroPlugin","argv","defaultConfigOverrides","babelConfig","mainModuleName","name","configureServer","server","logger","root","projectRoot","config","default","Metro","loadConfig","MetroHmrServer","createWebsocketServer","getDefaultConfig","createDevMiddleware","_defaultConfig","origRewriteRequestUrl","rewriteRequestUrl","resolveMainModuleName","ExpoGoManifestHandlerMiddleware","manifestHandlerMiddleware","p","pkg","main","platform","url","includes","resolvedMainModulePath","replace","defaultConfig","resolver","sourceExts","resolveRequest","context","moduleName","origResolveRequestFn","startsWith","contextOverride","unstable_conditionNames","filter","c","transformer","babelTransformerPath","publicPath","reporter","cwd","process","env","METRO_RESET_CACHE","middleware","end","metroServer","createConnectMiddleware","watch","originalTransformFile","getBundler","transformFile","bind","filePath","transformOptions","fileBuffer","customTransformOptions","vite","hmrServer","getCreateModuleId","reactNativeDevToolsUrl","host","port","rnDevtoolsMiddleware","websocketEndpoints","rnDevtoolsWebsocketEndpoints","serverBaseUrl","console","middlewares","use","req","res","next","VITE_METRO_DEBUG_BUNDLE","info","content","setHeader","headers","statusCode","method","body","on","chunk","toString","frame","JSON","file","e","error","websocketServer","httpServer","request","socket","head","pathname","handleUpgrade","ws","emit"],"sources":["../../../src/plugins/metroPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { parse } from "node:url";
|
|
4
|
+
import launchEditor from "launch-editor";
|
|
5
|
+
import { projectImport, projectResolve } from "../utils/projectImport.native.js";
|
|
6
|
+
import { getTerminalReporter } from "../utils/getTerminalReporter.native.js";
|
|
7
|
+
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from "../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js";
|
|
8
|
+
function metroPlugin() {
|
|
9
|
+
var {
|
|
10
|
+
argv,
|
|
11
|
+
defaultConfigOverrides,
|
|
12
|
+
babelConfig,
|
|
13
|
+
mainModuleName
|
|
14
|
+
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
15
|
+
return {
|
|
16
|
+
name: "metro",
|
|
17
|
+
// configResolved(config) {
|
|
18
|
+
// projectRoot = config.root
|
|
19
|
+
// },
|
|
20
|
+
async configureServer(server) {
|
|
21
|
+
var _server_httpServer,
|
|
22
|
+
{
|
|
23
|
+
logger,
|
|
24
|
+
root: projectRoot
|
|
25
|
+
} = server.config,
|
|
26
|
+
{
|
|
27
|
+
default: Metro,
|
|
28
|
+
loadConfig
|
|
29
|
+
} = await projectImport(projectRoot, "metro"),
|
|
30
|
+
{
|
|
31
|
+
default: MetroHmrServer
|
|
32
|
+
} = await projectImport(projectRoot, "metro/src/HmrServer"),
|
|
33
|
+
{
|
|
34
|
+
default: createWebsocketServer
|
|
35
|
+
} = await projectImport(projectRoot, "metro/src/lib/createWebsocketServer"),
|
|
36
|
+
{
|
|
37
|
+
getDefaultConfig
|
|
38
|
+
} = await projectImport(projectRoot, "@expo/metro-config"),
|
|
39
|
+
{
|
|
40
|
+
createDevMiddleware
|
|
41
|
+
} = await projectImport(projectRoot, "@react-native/dev-middleware"),
|
|
42
|
+
_defaultConfig = getDefaultConfig(projectRoot);
|
|
43
|
+
if (mainModuleName) {
|
|
44
|
+
var origRewriteRequestUrl = _defaultConfig.server.rewriteRequestUrl,
|
|
45
|
+
resolveMainModuleName = await async function () {
|
|
46
|
+
var ExpoGoManifestHandlerMiddleware = (await projectImport(projectRoot, "@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js")).default.ExpoGoManifestHandlerMiddleware,
|
|
47
|
+
manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(projectRoot, {});
|
|
48
|
+
return patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(manifestHandlerMiddleware, mainModuleName), function (p) {
|
|
49
|
+
return manifestHandlerMiddleware.resolveMainModuleName({
|
|
50
|
+
pkg: {
|
|
51
|
+
main: mainModuleName
|
|
52
|
+
},
|
|
53
|
+
platform: p.platform
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
}();
|
|
57
|
+
_defaultConfig.server.rewriteRequestUrl = function (url) {
|
|
58
|
+
if (url.includes("/.expo/.virtual-metro-entry.bundle?")) {
|
|
59
|
+
var resolvedMainModulePath = resolveMainModuleName({
|
|
60
|
+
platform: "ios"
|
|
61
|
+
});
|
|
62
|
+
return url.replace(".expo/.virtual-metro-entry", resolvedMainModulePath);
|
|
63
|
+
}
|
|
64
|
+
return origRewriteRequestUrl(url);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
var defaultConfig = {
|
|
68
|
+
..._defaultConfig,
|
|
69
|
+
resolver: {
|
|
70
|
+
..._defaultConfig?.resolver,
|
|
71
|
+
sourceExts: ["js", "jsx", "json", "ts", "tsx", "mjs", "cjs"],
|
|
72
|
+
// `one` related packages are using `.mjs` extensions. This somehow fixes `.native` files not being resolved correctly when `.mjs` files are present.
|
|
73
|
+
resolveRequest: function (context, moduleName, platform) {
|
|
74
|
+
var _defaultConfig_resolver,
|
|
75
|
+
origResolveRequestFn = (_defaultConfig == null || (_defaultConfig_resolver = _defaultConfig.resolver) === null || _defaultConfig_resolver === void 0 ? void 0 : _defaultConfig_resolver.resolveRequest) || context.resolveRequest;
|
|
76
|
+
if (moduleName.startsWith("@babel/runtime")) {
|
|
77
|
+
var contextOverride = {
|
|
78
|
+
...context,
|
|
79
|
+
unstable_conditionNames: context.unstable_conditionNames.filter(function (c) {
|
|
80
|
+
return c !== "import";
|
|
81
|
+
})
|
|
82
|
+
};
|
|
83
|
+
return origResolveRequestFn(contextOverride, moduleName, platform);
|
|
84
|
+
}
|
|
85
|
+
return origResolveRequestFn(context, moduleName, platform);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
transformer: {
|
|
89
|
+
..._defaultConfig?.transformer,
|
|
90
|
+
babelTransformerPath: projectResolve(projectRoot, "@vxrn/vite-plugin-metro/babel-transformer"),
|
|
91
|
+
// TODO: This is what Expo is doing, but do we really need this?
|
|
92
|
+
publicPath: "/assets/?unstable_path=."
|
|
93
|
+
},
|
|
94
|
+
reporter: await getTerminalReporter(projectRoot)
|
|
95
|
+
},
|
|
96
|
+
config = await loadConfig({
|
|
97
|
+
cwd: projectRoot,
|
|
98
|
+
projectRoot,
|
|
99
|
+
"reset-cache": !!process.env.METRO_RESET_CACHE,
|
|
100
|
+
...argv
|
|
101
|
+
}, {
|
|
102
|
+
...defaultConfig,
|
|
103
|
+
...(typeof defaultConfigOverrides == "function" ? defaultConfigOverrides(defaultConfig) : defaultConfigOverrides)
|
|
104
|
+
}),
|
|
105
|
+
{
|
|
106
|
+
middleware,
|
|
107
|
+
end,
|
|
108
|
+
metroServer
|
|
109
|
+
} = await Metro.createConnectMiddleware(config, {
|
|
110
|
+
// Force enable file watching, even on CI.
|
|
111
|
+
// This is needed for HMR tests to work on CI.
|
|
112
|
+
watch: !0
|
|
113
|
+
}),
|
|
114
|
+
originalTransformFile = metroServer.getBundler().getBundler().transformFile.bind(metroServer.getBundler().getBundler());
|
|
115
|
+
metroServer.getBundler().getBundler().transformFile = async function (filePath, transformOptions, fileBuffer) {
|
|
116
|
+
return originalTransformFile(filePath, {
|
|
117
|
+
...transformOptions,
|
|
118
|
+
customTransformOptions: {
|
|
119
|
+
...transformOptions.customTransformOptions,
|
|
120
|
+
vite: {
|
|
121
|
+
babelConfig
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}, fileBuffer);
|
|
125
|
+
};
|
|
126
|
+
var hmrServer = new MetroHmrServer(metroServer.getBundler(), metroServer.getCreateModuleId(), config),
|
|
127
|
+
reactNativeDevToolsUrl = `http://${typeof server.config.server.host == "boolean" ? "localhost" : server.config.server.host}:${server.config.server.port}`,
|
|
128
|
+
{
|
|
129
|
+
middleware: rnDevtoolsMiddleware,
|
|
130
|
+
websocketEndpoints: rnDevtoolsWebsocketEndpoints
|
|
131
|
+
} = createDevMiddleware({
|
|
132
|
+
projectRoot,
|
|
133
|
+
serverBaseUrl: reactNativeDevToolsUrl,
|
|
134
|
+
logger: console
|
|
135
|
+
});
|
|
136
|
+
server.middlewares.use(async function (req, res, next) {
|
|
137
|
+
try {
|
|
138
|
+
var _req_url, _req_headers_useragent;
|
|
139
|
+
if (!((_req_url = req.url) === null || _req_url === void 0) && _req_url.includes(".bundle")) {
|
|
140
|
+
var VITE_METRO_DEBUG_BUNDLE = process.env.VITE_METRO_DEBUG_BUNDLE;
|
|
141
|
+
if (VITE_METRO_DEBUG_BUNDLE && existsSync(VITE_METRO_DEBUG_BUNDLE)) {
|
|
142
|
+
console.info(" !!! - serving debug bundle from", VITE_METRO_DEBUG_BUNDLE);
|
|
143
|
+
var content = await readFile(VITE_METRO_DEBUG_BUNDLE, "utf-8");
|
|
144
|
+
res.setHeader("Content-Type", "application/javascript"), res.end(content);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (req.url === "/status" && !((_req_headers_useragent = req.headers["user-agent"]) === null || _req_headers_useragent === void 0) && _req_headers_useragent.includes("CFNetwork/")) {
|
|
149
|
+
res.statusCode = 200, res.end("packager-status:running");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (req.url === "/open-stack-frame" && req.method === "POST") {
|
|
153
|
+
var body = "";
|
|
154
|
+
req.on("data", function (chunk) {
|
|
155
|
+
body += chunk.toString();
|
|
156
|
+
}), req.on("end", function () {
|
|
157
|
+
try {
|
|
158
|
+
var frame = JSON.parse(body);
|
|
159
|
+
launchEditor(frame.file), res.statusCode = 200, res.end("Stack frame opened in editor");
|
|
160
|
+
} catch (e) {
|
|
161
|
+
return console.error("Failed to parse stack frame:", e), res.statusCode = 400, res.end("Invalid stack frame JSON");
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
await middleware(req, res, next);
|
|
167
|
+
} catch (error) {
|
|
168
|
+
console.error("Metro middleware error:", error), next();
|
|
169
|
+
}
|
|
170
|
+
}), server.middlewares.use(rnDevtoolsMiddleware);
|
|
171
|
+
var websocketEndpoints = {
|
|
172
|
+
"/hot": createWebsocketServer({
|
|
173
|
+
websocketServer: hmrServer
|
|
174
|
+
}),
|
|
175
|
+
...rnDevtoolsWebsocketEndpoints
|
|
176
|
+
};
|
|
177
|
+
(_server_httpServer = server.httpServer) === null || _server_httpServer === void 0 || _server_httpServer.on("upgrade", function (request, socket, head) {
|
|
178
|
+
var {
|
|
179
|
+
pathname
|
|
180
|
+
} = parse(request.url);
|
|
181
|
+
pathname != null && websocketEndpoints[pathname] && websocketEndpoints[pathname].handleUpgrade(request, socket, head, function (ws) {
|
|
182
|
+
websocketEndpoints[pathname].emit("connection", ws, request);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
export { metroPlugin };
|
|
189
|
+
//# sourceMappingURL=metroPlugin.native.js.map
|