vxrn 1.1.366 → 1.1.368

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.
Files changed (43) hide show
  1. package/dist/cli.js +8 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/cli.mjs +8 -3
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/cli.native.js +8 -3
  6. package/dist/cli.native.js.map +2 -2
  7. package/dist/plugins/reactNativeDevServer.js +15 -1
  8. package/dist/plugins/reactNativeDevServer.js.map +1 -1
  9. package/dist/plugins/reactNativeDevServer.mjs +14 -1
  10. package/dist/plugins/reactNativeDevServer.mjs.map +1 -1
  11. package/dist/plugins/reactNativeDevServer.native.js +15 -1
  12. package/dist/plugins/reactNativeDevServer.native.js.map +2 -2
  13. package/dist/utils/depPatches.js +19 -12
  14. package/dist/utils/depPatches.js.map +1 -1
  15. package/dist/utils/depPatches.mjs +21 -6
  16. package/dist/utils/depPatches.mjs.map +1 -1
  17. package/dist/utils/depPatches.native.js +19 -8
  18. package/dist/utils/depPatches.native.js.map +2 -2
  19. package/dist/utils/getOptionsFilled.js +6 -1
  20. package/dist/utils/getOptionsFilled.js.map +1 -1
  21. package/dist/utils/getOptionsFilled.mjs +6 -0
  22. package/dist/utils/getOptionsFilled.mjs.map +1 -1
  23. package/dist/utils/getOptionsFilled.native.js +6 -1
  24. package/dist/utils/getOptionsFilled.native.js.map +2 -2
  25. package/dist/utils/utils.js.map +1 -1
  26. package/dist/utils/utils.mjs.map +1 -1
  27. package/dist/utils/utils.native.js.map +1 -1
  28. package/expo-js-native-debugging-plugin.cjs +234 -0
  29. package/package.json +13 -12
  30. package/src/cli.ts +7 -1
  31. package/src/plugins/reactNativeDevServer.ts +22 -1
  32. package/src/types.ts +5 -0
  33. package/src/utils/depPatches.ts +21 -21
  34. package/src/utils/getOptionsFilled.ts +6 -0
  35. package/src/utils/utils.ts +4 -1
  36. package/types/exports/build.d.ts +5 -0
  37. package/types/exports/build.d.ts.map +1 -1
  38. package/types/plugins/reactNativeDevServer.d.ts.map +1 -1
  39. package/types/types.d.ts +4 -0
  40. package/types/types.d.ts.map +1 -1
  41. package/types/utils/getOptionsFilled.d.ts +10 -0
  42. package/types/utils/getOptionsFilled.d.ts.map +1 -1
  43. package/types/utils/utils.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["getPort","createHash","createRequire","join","readPackageJSON","readState","writeState","require2","import","meta","url","optionsFilled","fillOptions","options","internal","mode","root","process","cwd","server","entries","host","https","devMode","console","info","defaultPort","port","packageRootDir","resolve","cacheDir","state","packageJSON","Promise","all","portRange","deps","dependencies","packageVersions","react","replace","reactNative","versionHash","hashString","JSON","stringify","clean","build","protocol","final","native","getOptionsFilled","str","hash","update","digest"],"sources":["../../src/utils/getOptionsFilled.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getPort","createHash","createRequire","join","readPackageJSON","readState","writeState","tmpdir","require2","import","meta","url","optionsFilled","fillOptions","options","internal","mode","root","process","cwd","server","entries","host","https","devMode","console","info","defaultPort","port","packageRootDir","resolve","cacheDir","state","packageJSON","Promise","all","portRange","deps","dependencies","packageVersions","react","replace","reactNative","versionHash","hashString","JSON","stringify","clean","build","protocol","bundleId","Math","round","random","final","debugBundlePaths","ios","android","native","getOptionsFilled","str","hash","update","digest"],"sources":["../../src/utils/getOptionsFilled.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@ import { createRequire } from "node:module";
4
4
  import { join } from "node:path";
5
5
  import { readPackageJSON } from "pkg-types";
6
6
  import { readState, writeState } from "./state";
7
+ import { tmpdir } from "node:os";
7
8
  var require2 = createRequire(import.meta.url), optionsFilled = null;
8
9
  async function fillOptions(options) {
9
10
  var internal = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
@@ -35,8 +36,12 @@ async function fillOptions(options) {
35
36
  var _options;
36
37
  (_options = options).build || (_options.build = {}), options.build.server = !1;
37
38
  }
38
- var protocol = https ? "https:" : "http:", final = {
39
+ var protocol = https ? "https:" : "http:", bundleId = Math.round(Math.random() * 1e5), final = {
39
40
  ...options,
41
+ debugBundlePaths: {
42
+ ios: join(tmpdir(), `bundle-${bundleId}-ios.js`),
43
+ android: join(tmpdir(), `bundle-${bundleId}-android.js`)
44
+ },
40
45
  mode: devMode ? "development" : "production",
41
46
  clean,
42
47
  root,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/Users/n8/one/packages/vxrn/src/utils/getOptionsFilled.ts"],
4
- "mappings": "AAAA,SAASA,eAAe;AACxB,SAASC,kBAAkB;AAC3B,SAASC,qBAAqB;AAC9B,SAASC,YAAY;AACrB,SAASC,uBAAuB;AAEhC,SAASC,WAAWC,kBAAkB;AAEtC,IAAMC,WAAUL,cAAc,YAAYM,GAAG,GAIzCC,gBAA0C;AAE9C,eAAsBC,YACpBC,SAAoB;MACpBC,WAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAsC;IAAEC,MAAM;EAAM,GA4CzCF,gBAAwCA,iBA1C7C,EAAEG,OAAOC,QAAQC,IAAG,GAAIC,SAAS,CAAC,GAAGC,QAAO,IAAKP,SACjD;IACJQ,OAAO;;IACPC;EAAK,IACHH,QAEEI,UAAUV,QAAQE,SAAS,eAAe,KAAQD,SAASC,SAAS;AAE1E,EAAKQ,WACHC,QAAQC,KAAK,8CAAyC;AAGxD,MAAMC,cAAcP,OAAOQ,SAASb,SAASC,SAAS,QAAQ,OAAO,MAC/Da,iBAAiBvB,KAAKI,SAAQoB,QAAQ,MAAA,GAAS,OAAA,GAC/CC,WAAWzB,KAAKW,MAAM,gBAAgB,OAAA,GAEtC,CAACW,MAAMI,OAAOC,WAAAA,IAAe,MAAMC,QAAQC,IAAI;IACnDhC,QAAQ;MACNyB,MAAMD;MACNS,WAAW;QAACT;QAAaA,cAAc;;MACvCL;IACF,CAAA;IACAd,UAAUuB,QAAAA;IACVxB,gBAAAA;GACD,GAEK8B,OAAOJ,YAAYK,gBAAgB,CAAC,GAEpCC,kBACJF,KAAKG,SAASH,KAAK,cAAA,IACf;IACEG,OAAOH,KAAKG,MAAMC,QAAQ,UAAU,EAAA;IACpCC,aAAaL,KAAK,cAAA,EAAgBI,QAAQ,UAAU,EAAA;EACtD,IACAE,QAEAC,cAAcC,WAAWC,KAAKC,UAAUd,WAAAA,CAAAA,GACxBnB,gBAAhBkC,QAAQC,IAAQnC,iBAAAA,QAAQkC,WAAK,QAAblC,mBAAAA,SAAAA,iBAAkBkB,MAAMY,eAAeZ,MAAMY,gBAAgBA;AAKnF,MAFKnC,WAAWsB,UAAU;IAAEa;EAAY,CAAA,GAEpC,SAAO9B,iBAAAA,QAAQoC,WAAK,QAAbpC,mBAAAA,SAAAA,SAAAA,eAAeM,WAAW,aAAa,EAACN,qBAAAA,QAAQoC,WAAK,QAAbpC,oBAAAA,WAAAA,gBAAeM,SAAQ;QAExEN;AAAAA,KAAAA,WAAAA,SAAQoC,UAARpC,SAAQoC,QAAU,CAAC,IACnBpC,QAAQoC,MAAM9B,SAAS;EACzB;AAEA,MAAM+B,WAAW5B,QAAS,WAAsB,SAE1C6B,QAAQ;IACZ,GAAGtC;IACHE,MAAMQ,UAAW,gBAA2B;IAC5CwB;IACA/B;IACAG,QAAQ;MACN,GAAGN,QAAQM;MACXQ;MACAN;MACA6B;MACAxC,KAAK,GAAGwC,QAAAA,KAAa7B,IAAAA,IAAQM,IAAAA;IAC/B;IACAP,SAAS;MACPgC,QAAQ;MACRjC,QAAQ;MACR,GAAGC;IACL;IACAY;IACAM;IACAP;IACAH;IACAE;EACF;AAEAnB,yBAAgBwC,OAETA;AACT;AAEO,SAASE,mBAAAA;AACd,SAAO1C;AACT;AAEA,SAASiC,WAAWU,KAAW;AAC7B,MAAMC,OAAOpD,WAAW,QAAA;AACxBoD,cAAKC,OAAOF,GAAAA,GACLC,KAAKE,OAAO,KAAA;AACrB;",
5
- "names": ["getPort", "createHash", "createRequire", "join", "readPackageJSON", "readState", "writeState", "require", "url", "optionsFilled", "fillOptions", "options", "internal", "mode", "root", "process", "cwd", "server", "entries", "host", "https", "devMode", "console", "info", "defaultPort", "port", "packageRootDir", "resolve", "cacheDir", "state", "packageJSON", "Promise", "all", "portRange", "deps", "dependencies", "packageVersions", "react", "replace", "reactNative", "undefined", "versionHash", "hashString", "JSON", "stringify", "clean", "Boolean", "build", "protocol", "final", "native", "getOptionsFilled", "str", "hash", "update", "digest"]
4
+ "mappings": "AAAA,SAASA,eAAe;AACxB,SAASC,kBAAkB;AAC3B,SAASC,qBAAqB;AAC9B,SAASC,YAAY;AACrB,SAASC,uBAAuB;AAEhC,SAASC,WAAWC,kBAAkB;AACtC,SAASC,cAAc;AAEvB,IAAMC,WAAUN,cAAc,YAAYO,GAAG,GAIzCC,gBAA0C;AAE9C,eAAsBC,YACpBC,SAAoB;MACpBC,WAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAsC;IAAEC,MAAM;EAAM,GA4CzCF,gBAAwCA,iBA1C7C,EAAEG,OAAOC,QAAQC,IAAG,GAAIC,SAAS,CAAC,GAAGC,QAAO,IAAKP,SACjD;IACJQ,OAAO;;IACPC;EAAK,IACHH,QAEEI,UAAUV,QAAQE,SAAS,eAAe,KAAQD,SAASC,SAAS;AAE1E,EAAKQ,WACHC,QAAQC,KAAK,8CAAyC;AAGxD,MAAMC,cAAcP,OAAOQ,SAASb,SAASC,SAAS,QAAQ,OAAO,MAC/Da,iBAAiBxB,KAAKK,SAAQoB,QAAQ,MAAA,GAAS,OAAA,GAC/CC,WAAW1B,KAAKY,MAAM,gBAAgB,OAAA,GAEtC,CAACW,MAAMI,OAAOC,WAAAA,IAAe,MAAMC,QAAQC,IAAI;IACnDjC,QAAQ;MACN0B,MAAMD;MACNS,WAAW;QAACT;QAAaA,cAAc;;MACvCL;IACF,CAAA;IACAf,UAAUwB,QAAAA;IACVzB,gBAAAA;GACD,GAEK+B,OAAOJ,YAAYK,gBAAgB,CAAC,GAEpCC,kBACJF,KAAKG,SAASH,KAAK,cAAA,IACf;IACEG,OAAOH,KAAKG,MAAMC,QAAQ,UAAU,EAAA;IACpCC,aAAaL,KAAK,cAAA,EAAgBI,QAAQ,UAAU,EAAA;EACtD,IACAE,QAEAC,cAAcC,WAAWC,KAAKC,UAAUd,WAAAA,CAAAA,GACxBnB,gBAAhBkC,QAAQC,IAAQnC,iBAAAA,QAAQkC,WAAK,QAAblC,mBAAAA,SAAAA,iBAAkBkB,MAAMY,eAAeZ,MAAMY,gBAAgBA;AAKnF,MAFKpC,WAAWuB,UAAU;IAAEa;EAAY,CAAA,GAEpC,SAAO9B,iBAAAA,QAAQoC,WAAK,QAAbpC,mBAAAA,SAAAA,SAAAA,eAAeM,WAAW,aAAa,EAACN,qBAAAA,QAAQoC,WAAK,QAAbpC,oBAAAA,WAAAA,gBAAeM,SAAQ;QAExEN;AAAAA,KAAAA,WAAAA,SAAQoC,UAARpC,SAAQoC,QAAU,CAAC,IACnBpC,QAAQoC,MAAM9B,SAAS;EACzB;AAEA,MAAM+B,WAAW5B,QAAS,WAAsB,SAC1C6B,WAAWC,KAAKC,MAAMD,KAAKE,OAAM,IAAK,GAAA,GAEtCC,QAAQ;IACZ,GAAG1C;IACH2C,kBAAkB;MAChBC,KAAKrD,KAAKI,OAAAA,GAAU,UAAU2C,QAAAA,SAAiB;MAC/CO,SAAStD,KAAKI,OAAAA,GAAU,UAAU2C,QAAAA,aAAqB;IACzD;IACApC,MAAMQ,UAAW,gBAA2B;IAC5CwB;IACA/B;IACAG,QAAQ;MACN,GAAGN,QAAQM;MACXQ;MACAN;MACA6B;MACAxC,KAAK,GAAGwC,QAAAA,KAAa7B,IAAAA,IAAQM,IAAAA;IAC/B;IACAP,SAAS;MACPuC,QAAQ;MACRxC,QAAQ;MACR,GAAGC;IACL;IACAY;IACAM;IACAP;IACAH;IACAE;EACF;AAEAnB,yBAAgB4C,OAETA;AACT;AAEO,SAASK,mBAAAA;AACd,SAAOjD;AACT;AAEA,SAASiC,WAAWiB,KAAW;AAC7B,MAAMC,OAAO5D,WAAW,QAAA;AACxB4D,cAAKC,OAAOF,GAAAA,GACLC,KAAKE,OAAO,KAAA;AACrB;",
5
+ "names": ["getPort", "createHash", "createRequire", "join", "readPackageJSON", "readState", "writeState", "tmpdir", "require", "url", "optionsFilled", "fillOptions", "options", "internal", "mode", "root", "process", "cwd", "server", "entries", "host", "https", "devMode", "console", "info", "defaultPort", "port", "packageRootDir", "resolve", "cacheDir", "state", "packageJSON", "Promise", "all", "portRange", "deps", "dependencies", "packageVersions", "react", "replace", "reactNative", "undefined", "versionHash", "hashString", "JSON", "stringify", "clean", "Boolean", "build", "protocol", "bundleId", "Math", "round", "random", "final", "debugBundlePaths", "ios", "android", "native", "getOptionsFilled", "str", "hash", "update", "digest"]
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/utils.ts"],
4
- "mappings": "AACA,OAAO,aAAa;AACpB,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAEpB,SAAS,YAAY,MAAoC;AAC9D,MAAI;AAEF,WAAO,QAAQ,SAAS,MAAM,EAAE,gBAAgB,GAAM,CAAC;AAAA,EACzD,QAAQ;AAAA,EAAC;AACX;AAEA,eAAsB,WAAW,KAAa,WAAkD;AAC9F,SAAO,OAAK;AACV,eAAW,YAAY,WAAW;AAChC,YAAM,WAAW,KAAK,KAAK,KAAK,QAAQ;AACxC,UAAI,YAAY,QAAQ,GAAG,OAAO,EAAG,QAAO;AAAA,IAC9C;AACA,UAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,QAAI,cAAc,IAAK;AAEvB,UAAM;AAAA,EACR;AACF;AAEO,SAAS,QAAQ,MAAuB,SAAS,GAAW;AACjE,QAAM,IAAI,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK,EAAE,UAAU,GAAG,MAAM;AAC7E,SAAI,UAAU,KAAW,IAClB,EAAE,OAAO,QAAQ,GAAG;AAC7B;AAEA,eAAsB,YAAYA,OAAc;AAC9C,QAAM,UAAU,MAAM,QAAQ,SAASA,OAAM,OAAO;AACpD,SAAO,QAAQ,OAAO;AACxB;",
4
+ "mappings": "AACA,OAAO,aAAa;AACpB,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAEpB,SAAS,YAAY,MAAoC;AAC9D,MAAI;AAEF,WAAO,QAAQ,SAAS,MAAM,EAAE,gBAAgB,GAAM,CAAC;AAAA,EACzD,QAAQ;AAAA,EAAC;AACX;AAEA,eAAsB,WAAW,KAAa,WAAkD;AAC9F,SAAO,OAAK;AACV,eAAW,YAAY,WAAW;AAChC,YAAM,WAAW,KAAK,KAAK,KAAK,QAAQ;AACxC,UAAI,YAAY,QAAQ,GAAG,OAAO,EAAG,QAAO;AAAA,IAC9C;AACA,UAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,QAAI,cAAc,IAAK;AAEvB,UAAM;AAAA,EACR;AACF;AAEO,SAAS,QAAQ,MAAuB,SAAS,GAAW;AACjE,QAAM,IAAI,WAAW,QAAQ,EAC1B,OAAO,IAAW,EAClB,OAAO,KAAK,EACZ,UAAU,GAAG,MAAM;AACtB,SAAI,UAAU,KAAW,IAClB,EAAE,OAAO,QAAQ,GAAG;AAC7B;AAEA,eAAsB,YAAYA,OAAc;AAC9C,QAAM,UAAU,MAAM,QAAQ,SAASA,OAAM,OAAO;AACpD,SAAO,QAAQ,OAAO;AACxB;",
5
5
  "names": ["path"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"names":["FSExtra","path","createHash","tryStatSync","file","statSync","throwIfNoEntry","lookupFile","dir","fileNames","fileName","fullPath","join","isFile","parentDir","dirname","getHash","text","length","h","update","digest","substring","padEnd","getFileHash","path2","content","readFile"],"sources":["../../src/utils/utils.ts"],"sourcesContent":[null],"mappings":"AACA,OAAOA,OAAA,MAAa;AACpB,OAAOC,IAAA,MAAU;AACjB,SAASC,UAAA,QAAkB;AAEpB,SAASC,YAAYC,IAAA,EAAoC;EAC9D,IAAI;IAEF,OAAOJ,OAAA,CAAQK,QAAA,CAASD,IAAA,EAAM;MAAEE,cAAA,EAAgB;IAAM,CAAC;EACzD,QAAQ,CAAC;AACX;AAEA,eAAsBC,WAAWC,GAAA,EAAaC,SAAA,EAAkD;EAC9F,OAAOD,GAAA,GAAK;IACV,WAAWE,QAAA,IAAYD,SAAA,EAAW;MAChC,MAAME,QAAA,GAAWV,IAAA,CAAKW,IAAA,CAAKJ,GAAA,EAAKE,QAAQ;MACxC,IAAIP,WAAA,CAAYQ,QAAQ,GAAGE,MAAA,CAAO,GAAG,OAAOF,QAAA;IAC9C;IACA,MAAMG,SAAA,GAAYb,IAAA,CAAKc,OAAA,CAAQP,GAAG;IAClC,IAAIM,SAAA,KAAcN,GAAA,EAAK;IAEvBA,GAAA,GAAMM,SAAA;EACR;AACF;AAEO,SAASE,QAAQC,IAAA,EAAuBC,MAAA,GAAS,GAAW;EACjE,MAAMC,CAAA,GAAIjB,UAAA,CAAW,QAAQ,EAAEkB,MAAA,CAAOH,IAAI,EAAEI,MAAA,CAAO,KAAK,EAAEC,SAAA,CAAU,GAAGJ,MAAM;EAC7E,OAAIA,MAAA,IAAU,KAAWC,CAAA,GAClBA,CAAA,CAAEI,MAAA,CAAOL,MAAA,EAAQ,GAAG;AAC7B;AAEA,eAAsBM,YAAYC,KAAA,EAAc;EAC9C,MAAMC,OAAA,GAAU,MAAM1B,OAAA,CAAQ2B,QAAA,CAASF,KAAA,EAAM,OAAO;EACpD,OAAOT,OAAA,CAAQU,OAAO;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["FSExtra","path","createHash","tryStatSync","file","statSync","throwIfNoEntry","lookupFile","dir","fileNames","fileName","fullPath","join","isFile","parentDir","dirname","getHash","text","length","h","update","digest","substring","padEnd","getFileHash","path2","content","readFile"],"sources":["../../src/utils/utils.ts"],"sourcesContent":[null],"mappings":"AACA,OAAOA,OAAA,MAAa;AACpB,OAAOC,IAAA,MAAU;AACjB,SAASC,UAAA,QAAkB;AAEpB,SAASC,YAAYC,IAAA,EAAoC;EAC9D,IAAI;IAEF,OAAOJ,OAAA,CAAQK,QAAA,CAASD,IAAA,EAAM;MAAEE,cAAA,EAAgB;IAAM,CAAC;EACzD,QAAQ,CAAC;AACX;AAEA,eAAsBC,WAAWC,GAAA,EAAaC,SAAA,EAAkD;EAC9F,OAAOD,GAAA,GAAK;IACV,WAAWE,QAAA,IAAYD,SAAA,EAAW;MAChC,MAAME,QAAA,GAAWV,IAAA,CAAKW,IAAA,CAAKJ,GAAA,EAAKE,QAAQ;MACxC,IAAIP,WAAA,CAAYQ,QAAQ,GAAGE,MAAA,CAAO,GAAG,OAAOF,QAAA;IAC9C;IACA,MAAMG,SAAA,GAAYb,IAAA,CAAKc,OAAA,CAAQP,GAAG;IAClC,IAAIM,SAAA,KAAcN,GAAA,EAAK;IAEvBA,GAAA,GAAMM,SAAA;EACR;AACF;AAEO,SAASE,QAAQC,IAAA,EAAuBC,MAAA,GAAS,GAAW;EACjE,MAAMC,CAAA,GAAIjB,UAAA,CAAW,QAAQ,EAC1BkB,MAAA,CAAOH,IAAW,EAClBI,MAAA,CAAO,KAAK,EACZC,SAAA,CAAU,GAAGJ,MAAM;EACtB,OAAIA,MAAA,IAAU,KAAWC,CAAA,GAClBA,CAAA,CAAEI,MAAA,CAAOL,MAAA,EAAQ,GAAG;AAC7B;AAEA,eAAsBM,YAAYC,KAAA,EAAc;EAC9C,MAAMC,OAAA,GAAU,MAAM1B,OAAA,CAAQ2B,QAAA,CAASF,KAAA,EAAM,OAAO;EACpD,OAAOT,OAAA,CAAQU,OAAO;AACxB","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/Users/n8/one/packages/vxrn/src/utils/utils.ts"],
4
- "mappings": "AACA,OAAOA,aAAa;AACpB,OAAOC,UAAU;AACjB,SAASC,kBAAkB;AAEpB,SAASC,YAAYC,MAAY;AACtC,MAAI;AAEF,WAAOJ,QAAQK,SAASD,MAAM;MAAEE,gBAAgB;IAAM,CAAA;EACxD,QAAQ;EAAC;AACX;AAEA,eAAsBC,WAAWC,KAAaC,WAAmB;AAC/D,SAAOD,OAAK;QACL,4BAAA,IAAA,oBAAA,IAAA,iBAAA;;AAAL,eAAK,YAAkBC,UAAAA,OAAAA,QAAAA,EAAAA,GAAlB,OAAA,EAAA,6BAAA,QAAA,UAAA,KAAA,GAAA,OAAA,4BAAA,IAA6B;AAA7B,YAAMC,WAAN,MAAA,OAECP,cADEQ,WAAWV,KAAKW,KAAKJ,KAAKE,QAAAA;AAChC,YAAIP,kBAAAA,YAAYQ,QAAAA,OAAAA,QAAZR,iBAAAA,WAAAA,aAAuBU,OAAM,EAAI,QAAOF;MAC9C;;AAHK,0BAAA,IAAA,iBAAA;;;SAAA,6BAAA,UAAA,UAAA,QAAA,UAAA,OAAA;;YAAA;gBAAA;;;AAIL,QAAMG,YAAYb,KAAKc,QAAQP,GAAAA;AAC/B,QAAIM,cAAcN,IAAK;AAEvBA,UAAMM;EACR;AACF;AAEO,SAASE,QAAQC,MAAqB;MAAEC,SAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAS,GAChDC,IAAIjB,WAAW,QAAA,EAAUkB,OAAOH,IAAAA,EAAMI,OAAO,KAAA,EAAOC,UAAU,GAAGJ,MAAAA;AACvE,SAAIA,UAAU,KAAWC,IAClBA,EAAEI,OAAOL,QAAQ,GAAA;AAC1B;AAEA,eAAsBM,YAAYvB,OAAY;AAC5C,MAAMwB,UAAU,MAAMzB,QAAQ0B,SAASzB,OAAM,OAAA;AAC7C,SAAOe,QAAQS,OAAAA;AACjB;",
4
+ "mappings": "AACA,OAAOA,aAAa;AACpB,OAAOC,UAAU;AACjB,SAASC,kBAAkB;AAEpB,SAASC,YAAYC,MAAY;AACtC,MAAI;AAEF,WAAOJ,QAAQK,SAASD,MAAM;MAAEE,gBAAgB;IAAM,CAAA;EACxD,QAAQ;EAAC;AACX;AAEA,eAAsBC,WAAWC,KAAaC,WAAmB;AAC/D,SAAOD,OAAK;QACL,4BAAA,IAAA,oBAAA,IAAA,iBAAA;;AAAL,eAAK,YAAkBC,UAAAA,OAAAA,QAAAA,EAAAA,GAAlB,OAAA,EAAA,6BAAA,QAAA,UAAA,KAAA,GAAA,OAAA,4BAAA,IAA6B;AAA7B,YAAMC,WAAN,MAAA,OAECP,cADEQ,WAAWV,KAAKW,KAAKJ,KAAKE,QAAAA;AAChC,YAAIP,kBAAAA,YAAYQ,QAAAA,OAAAA,QAAZR,iBAAAA,WAAAA,aAAuBU,OAAM,EAAI,QAAOF;MAC9C;;AAHK,0BAAA,IAAA,iBAAA;;;SAAA,6BAAA,UAAA,UAAA,QAAA,UAAA,OAAA;;YAAA;gBAAA;;;AAIL,QAAMG,YAAYb,KAAKc,QAAQP,GAAAA;AAC/B,QAAIM,cAAcN,IAAK;AAEvBA,UAAMM;EACR;AACF;AAEO,SAASE,QAAQC,MAAqB;MAAEC,SAAAA,UAAAA,SAAAA,KAAAA,UAAAA,CAAAA,MAAAA,SAAAA,UAAAA,CAAAA,IAAS,GAChDC,IAAIjB,WAAW,QAAA,EAClBkB,OAAOH,IAAAA,EACPI,OAAO,KAAA,EACPC,UAAU,GAAGJ,MAAAA;AAChB,SAAIA,UAAU,KAAWC,IAClBA,EAAEI,OAAOL,QAAQ,GAAA;AAC1B;AAEA,eAAsBM,YAAYvB,OAAY;AAC5C,MAAMwB,UAAU,MAAMzB,QAAQ0B,SAASzB,OAAM,OAAA;AAC7C,SAAOe,QAAQS,OAAAA;AACjB;",
5
5
  "names": ["FSExtra", "path", "createHash", "tryStatSync", "file", "statSync", "throwIfNoEntry", "lookupFile", "dir", "fileNames", "fileName", "fullPath", "join", "isFile", "parentDir", "dirname", "getHash", "text", "length", "h", "update", "digest", "substring", "padEnd", "getFileHash", "content", "readFile"]
6
6
  }
@@ -0,0 +1,234 @@
1
+ /**
2
+ * This is a internal plugin for the convenience of VxRN developers to debug the JavaScript bundle.
3
+ * It'll add files into the native code which provides a starting point for debugging the JavaScript bundle with native code.
4
+ * Please consider this as an incomplete tool only for development purposes.
5
+ *
6
+ * To use this plugin, you need to add it (`vxrn/expo-js-native-debugging-plugin`) to the `plugins` array in your `app.json` file, and run prebuild. Then,
7
+ *
8
+ * * For iOS, a `JsNativeDebugging` (`RCTJsNativeDebugging`) native module will be added to the project, under the Libraries group.
9
+ *
10
+ * References:
11
+ * * https://hackmd.io/@z/rn-use-native-modules-without-importing-react-native
12
+ */
13
+
14
+ const fs = require('node:fs')
15
+ const path = require('node:path')
16
+ const { withPlugins, withDangerousMod, withXcodeProject } = require('@expo/config-plugins')
17
+
18
+ const plugin = (config, options = {}) => {
19
+ return withPlugins(config, [
20
+ [
21
+ withDangerousMod,
22
+ [
23
+ 'ios',
24
+ async (config) => {
25
+ const srcPath = path.resolve(config.modRequest.projectRoot, config.modRequest.platformProjectRoot)
26
+
27
+ for (const [fileName, fileContent] of Object.entries(IOS_FILES)) {
28
+ const filePath = path.resolve(srcPath, fileName)
29
+ if (!fs.existsSync(filePath)) {
30
+ fs.writeFileSync(filePath, fileContent)
31
+ }
32
+ }
33
+
34
+ return config
35
+ },
36
+ ],
37
+ ],
38
+ [
39
+ withXcodeProject,
40
+ async (config) => {
41
+ const xcodeProject = config.modResults
42
+
43
+ const librariesGroupKey = xcodeProject.findPBXGroupKey({ name: 'Libraries' })
44
+
45
+ for (const fileName in IOS_FILES) {
46
+ if (!xcodeProject.hasFile(fileName)) {
47
+ if (fileName.endsWith('.h')) {
48
+ xcodeProject.addHeaderFile(fileName, {}, librariesGroupKey)
49
+ } else {
50
+ xcodeProject.addSourceFile(fileName, {}, librariesGroupKey)
51
+ }
52
+ }
53
+ }
54
+
55
+ return config
56
+ },
57
+ ],
58
+ ])
59
+ }
60
+
61
+ const IOS_FILES = {
62
+ 'RCTJsNativeDebugging.h': `
63
+ //
64
+ // RCTJsNativeDebugging.h
65
+ //
66
+
67
+ #import <React/RCTBridgeModule.h>
68
+ @interface RCTJsNativeDebugging : NSObject <RCTBridgeModule>
69
+ @end
70
+ `.trim(),
71
+ 'RCTJsNativeDebugging.m': `
72
+ //
73
+ // RCTJsNativeDebugging.m
74
+ //
75
+
76
+ #import "RCTJsNativeDebugging.h"
77
+
78
+ @implementation RCTJsNativeDebugging
79
+
80
+ RCT_EXPORT_MODULE();
81
+
82
+ RCT_EXPORT_METHOD(log:(NSString *)message)
83
+ {
84
+ NSLog(@"%@", message);
85
+ }
86
+
87
+ @end
88
+ `.trim(),
89
+
90
+ 'JSIDebuggingModule.h': `
91
+ //
92
+ // JSIDebuggingModule.h
93
+ //
94
+
95
+ #import <React/RCTBridgeModule.h>
96
+
97
+ @interface JSIDebuggingModule : NSObject <RCTBridgeModule>;
98
+
99
+ @property (nonatomic, assign) BOOL setBridgeOnMainQueue;
100
+
101
+ @end
102
+ `.trim(),
103
+
104
+ 'JSIDebuggingModule.mm': `
105
+ //
106
+ // JSIDebuggingModule.mm
107
+ //
108
+
109
+ #import "JSIDebuggingModule.h"
110
+ #import <React/RCTBridge+Private.h>
111
+ #import <React/RCTUtils.h>
112
+ #import <jsi/jsi.h>
113
+ #import "jsi_debugging.h"
114
+
115
+ @implementation JSIDebuggingModule
116
+
117
+ @synthesize bridge = _bridge;
118
+ @synthesize methodQueue = _methodQueue;
119
+
120
+ RCT_EXPORT_MODULE()
121
+
122
+ + (BOOL)requiresMainQueueSetup {
123
+
124
+ return YES;
125
+ }
126
+
127
+ - (void)setBridge:(RCTBridge *)bridge {
128
+ _bridge = bridge;
129
+ _setBridgeOnMainQueue = RCTIsMainQueue();
130
+ [self installLibrary];
131
+ }
132
+
133
+ - (void)installLibrary {
134
+
135
+ RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
136
+
137
+ if (cxxBridge.runtime) {
138
+ jsi_debugging::install(*(facebook::jsi::Runtime *)cxxBridge.runtime);
139
+ }
140
+ }
141
+
142
+ @end
143
+ `.trim(),
144
+
145
+ 'jsi_debugging.h': `
146
+ //
147
+ // jsi_debugging.h
148
+ //
149
+
150
+ #include <jsi/jsi.h>
151
+
152
+ using namespace facebook::jsi;
153
+
154
+ #ifndef JSIDebugging_h
155
+ #define JSIDebugging_h
156
+
157
+ namespace jsi_debugging {
158
+ void install(Runtime & jsiRuntime);
159
+ }
160
+
161
+ #endif /* JSIDebugging_h */
162
+ `.trim(),
163
+
164
+ 'jsi_debugging.cpp': `
165
+ //
166
+ // jsi_debugging.cpp
167
+ //
168
+
169
+ #include "jsi_debugging.h"
170
+ #include <jsi/jsi.h>
171
+ #include <string>
172
+ #include <iostream>
173
+ #include <sstream>
174
+
175
+ using namespace facebook::jsi;
176
+ using namespace std;
177
+
178
+ namespace jsi_debugging {
179
+ std::string jsiValueToCppString(facebook::jsi::Runtime& runtime, const facebook::jsi::Value& value) {
180
+ if (value.isString()) {
181
+ facebook::jsi::String jsiStr = value.asString(runtime);
182
+ return jsiStr.utf8(runtime);
183
+ } else if (value.isNumber()) {
184
+ return std::to_string(value.asNumber());
185
+ } else if (value.isBool()) {
186
+ return value.getBool() ? "true" : "false";
187
+ } else if (value.isObject()) {
188
+ facebook::jsi::Object obj = value.asObject(runtime);
189
+ if (obj.isFunction(runtime)) {
190
+ return "[Function]";
191
+ } else {
192
+ return "[Object]";
193
+ }
194
+ } else if (value.isNull()) {
195
+ return "null";
196
+ } else if (value.isUndefined()) {
197
+ return "undefined";
198
+ } else {
199
+ return "[Unknown Value]";
200
+ }
201
+ }
202
+
203
+ void install(Runtime & jsiRuntime) {
204
+ auto nativeLog = Function::createFromHostFunction(
205
+ jsiRuntime,
206
+ PropNameID::forAscii(jsiRuntime, "nativeLog"),
207
+ 1,
208
+ [](
209
+ facebook::jsi::Runtime& runtime,
210
+ const facebook::jsi::Value&,
211
+ const facebook::jsi::Value* args,
212
+ size_t count
213
+ ) {
214
+ std::ostringstream output;
215
+
216
+ for (size_t i = 0; i < count; i++) {
217
+ if (i > 0) {
218
+ output << " "; // Add space between arguments
219
+ }
220
+ output << jsiValueToCppString(runtime, args[i]);
221
+ }
222
+
223
+ std::cout << output.str() << std::endl;
224
+
225
+ return Value::undefined();
226
+ });
227
+
228
+ jsiRuntime.global().setProperty(jsiRuntime, "nativeLog", std::move(nativeLog));
229
+ }
230
+ }
231
+ `.trim(),
232
+ }
233
+
234
+ module.exports = plugin
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "1.1.366",
3
+ "version": "1.1.368",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "type": "module",
@@ -12,6 +12,7 @@
12
12
  "patches",
13
13
  "dist",
14
14
  "run.mjs",
15
+ "expo-js-native-debugging-plugin.cjs",
15
16
  "react-native-template.js",
16
17
  "react-native-commands.cjs",
17
18
  "expo-plugin.cjs"
@@ -53,15 +54,15 @@
53
54
  "@rollup/plugin-node-resolve": "^15.2.3",
54
55
  "@tamagui/react-native-svg": "^1.120.2",
55
56
  "@vitejs/plugin-react-swc": "^3.7.0",
56
- "@vxrn/debug": "1.1.366",
57
- "@vxrn/query-string": "1.1.366",
58
- "@vxrn/react-native-prebuilt": "1.1.366",
59
- "@vxrn/resolve": "1.1.366",
60
- "@vxrn/safe-area": "1.1.366",
61
- "@vxrn/url-parse": "1.1.366",
62
- "@vxrn/vendor": "1.1.366",
63
- "@vxrn/vite-flow": "1.1.366",
64
- "@vxrn/vite-native-swc": "1.1.366",
57
+ "@vxrn/debug": "1.1.368",
58
+ "@vxrn/query-string": "1.1.368",
59
+ "@vxrn/react-native-prebuilt": "1.1.368",
60
+ "@vxrn/resolve": "1.1.368",
61
+ "@vxrn/safe-area": "1.1.368",
62
+ "@vxrn/url-parse": "1.1.368",
63
+ "@vxrn/vendor": "1.1.368",
64
+ "@vxrn/vite-flow": "1.1.368",
65
+ "@vxrn/vite-native-swc": "1.1.368",
65
66
  "citty": "^0.1.6",
66
67
  "env-editor": "^1.1.0",
67
68
  "es-module-lexer": "^1.3.0",
@@ -76,12 +77,12 @@
76
77
  "picocolors": "^1.0.0",
77
78
  "pkg-types": "^1.0.3",
78
79
  "qrcode-terminal": "^0.12.0",
79
- "rollup": "^4",
80
+ "rollup": "^4.29.1",
80
81
  "semver": "^7.6.3",
81
82
  "vite": "^6.0.3",
82
83
  "vite-bundle-analyzer": "^0.9.4",
83
84
  "vite-plugin-mkcert": "^1.17.5",
84
- "ws": "^8.7.0"
85
+ "ws": "^8.18.0"
85
86
  },
86
87
  "devDependencies": {
87
88
  "@biomejs/biome": "^1.8.3",
package/src/cli.ts CHANGED
@@ -23,6 +23,10 @@ const dev = defineCommand({
23
23
  https: {
24
24
  type: 'boolean',
25
25
  },
26
+ 'debug-bundle': {
27
+ type: 'boolean',
28
+ description: `Will output the bundle to a temp file and then serve it from there afterwards allowing you to easily edit the bundle to debug problems.`,
29
+ },
26
30
  },
27
31
  async run({ args }) {
28
32
  const imported = await import(
@@ -36,6 +40,7 @@ const dev = defineCommand({
36
40
  const { start, stop } = await dev({
37
41
  clean: args.clean,
38
42
  root: process.cwd(),
43
+ debugBundle: !!args['debug-bundle'],
39
44
  server: {
40
45
  https: args.https,
41
46
  host: args.host,
@@ -139,11 +144,12 @@ const prebuild = defineCommand({
139
144
  meta: {
140
145
  name: 'prebuild',
141
146
  version: '0.0.0',
142
- description: 'Prebuild native iOS project', // TODO: Android
147
+ description: 'Prebuild native project',
143
148
  },
144
149
  args: {
145
150
  platform: {
146
151
  type: 'string',
152
+ description: 'ios or android',
147
153
  },
148
154
  },
149
155
  async run({ args }) {
@@ -8,6 +8,8 @@ import type { VXRNOptionsFilled } from '../utils/getOptionsFilled'
8
8
  import { clearCachedBundle, getReactNativeBundle } from '../utils/getReactNativeBundle'
9
9
  import { hotUpdateCache } from '../utils/hotUpdateCache'
10
10
  import { URL } from 'node:url'
11
+ import { existsSync } from 'node:fs'
12
+ import { readFile, writeFile } from 'node:fs/promises'
11
13
 
12
14
  type ClientMessage = {
13
15
  type: 'client-log'
@@ -108,7 +110,26 @@ export function createReactNativeDevServerPlugin(options: VXRNOptionsFilled): Pl
108
110
  }
109
111
 
110
112
  try {
111
- const bundle = await getReactNativeBundle(options, platform)
113
+ const bundle = await (async () => {
114
+ if (options.debugBundle) {
115
+ const path = options.debugBundlePaths[platform]
116
+ if (existsSync(path)) {
117
+ console.info(` !!! - serving debug bundle from`, path)
118
+ return await readFile(path, 'utf-8')
119
+ }
120
+ }
121
+
122
+ const outBundle = await getReactNativeBundle(options, platform)
123
+
124
+ if (options.debugBundle) {
125
+ const path = options.debugBundlePaths[platform]
126
+ console.info(` !!! - writing debug bundle to`, path)
127
+ await writeFile(path, outBundle)
128
+ }
129
+
130
+ return outBundle
131
+ })()
132
+
112
133
  res.writeHead(200, { 'Content-Type': 'text/javascript' })
113
134
  res.end(bundle)
114
135
  } catch (err) {
package/src/types.ts CHANGED
@@ -105,6 +105,11 @@ export type VXRNOptions = {
105
105
  * Whether to clean cache directories on startup
106
106
  */
107
107
  clean?: boolean
108
+
109
+ /**
110
+ * Will output the bundle to a temp file and then serve it from there afterwards allowing you to easily edit the bundle to debug problems.
111
+ */
112
+ debugBundle?: boolean
108
113
  }
109
114
 
110
115
  export type HMRListener = (update: { file: string; contents: string }) => void
@@ -236,27 +236,27 @@ ${contents}
236
236
  },
237
237
  },
238
238
 
239
- {
240
- module: 'rollup',
241
- patchFiles: {
242
- 'dist/es/shared/node-entry.js': (contents) => {
243
- assertString(contents)
244
- // fixes problem with @sentry/react-native 5.5.0 using setimmediate polyfill causing error
245
- contents = contents.replace(
246
- `return this.exportNamesByVariable.get(variable)[0];`,
247
- `return this.exportNamesByVariable.get(variable)?.[0];`
248
- )
249
-
250
- // fix https://github.com/rollup/rollup/issues/5770
251
- contents = contents.replaceAll(
252
- `this.expressionsToBeDeoptimized = EMPTY_ARRAY;`,
253
- `this.expressionsToBeDeoptimized = [];`
254
- )
255
-
256
- return contents
257
- },
258
- },
259
- },
239
+ // {
240
+ // module: 'rollup',
241
+ // patchFiles: {
242
+ // 'dist/es/shared/node-entry.js': (contents) => {
243
+ // assertString(contents)
244
+ // // fixes problem with @sentry/react-native 5.5.0 using setimmediate polyfill causing error
245
+ // contents = contents.replace(
246
+ // `return this.exportNamesByVariable.get(variable)[0];`,
247
+ // `return this.exportNamesByVariable.get(variable)?.[0];`
248
+ // )
249
+
250
+ // // fix https://github.com/rollup/rollup/issues/5770
251
+ // contents = contents.replaceAll(
252
+ // `this.expressionsToBeDeoptimized = EMPTY_ARRAY;`,
253
+ // `this.expressionsToBeDeoptimized = [];`
254
+ // )
255
+
256
+ // return contents
257
+ // },
258
+ // },
259
+ // },
260
260
 
261
261
  {
262
262
  module: '@react-native/assets-registry',
@@ -5,6 +5,7 @@ import { join } from 'node:path'
5
5
  import { readPackageJSON } from 'pkg-types'
6
6
  import type { VXRNOptions } from '../types'
7
7
  import { readState, writeState } from './state'
8
+ import { tmpdir } from 'node:os'
8
9
 
9
10
  const require = createRequire(import.meta.url)
10
11
 
@@ -65,9 +66,14 @@ export async function fillOptions(
65
66
  }
66
67
 
67
68
  const protocol = https ? ('https:' as const) : ('http:' as const)
69
+ const bundleId = Math.round(Math.random() * 100_000)
68
70
 
69
71
  const final = {
70
72
  ...options,
73
+ debugBundlePaths: {
74
+ ios: join(tmpdir(), `bundle-${bundleId}-ios.js`),
75
+ android: join(tmpdir(), `bundle-${bundleId}-android.js`),
76
+ },
71
77
  mode: devMode ? ('development' as const) : ('production' as const),
72
78
  clean,
73
79
  root,
@@ -24,7 +24,10 @@ export async function lookupFile(dir: string, fileNames: string[]): Promise<stri
24
24
  }
25
25
 
26
26
  export function getHash(text: Buffer | string, length = 8): string {
27
- const h = createHash('sha256').update(text).digest('hex').substring(0, length)
27
+ const h = createHash('sha256')
28
+ .update(text as any)
29
+ .digest('hex')
30
+ .substring(0, length)
28
31
  if (length <= 64) return h
29
32
  return h.padEnd(length, '_')
30
33
  }
@@ -1,6 +1,10 @@
1
1
  import type { BuildArgs, VXRNOptions } from '../types';
2
2
  export declare const build: (optionsIn: VXRNOptions, buildArgs?: BuildArgs) => Promise<{
3
3
  options: {
4
+ debugBundlePaths: {
5
+ ios: string;
6
+ android: string;
7
+ };
4
8
  mode: "development" | "production";
5
9
  clean: boolean;
6
10
  root: string;
@@ -34,6 +38,7 @@ export declare const build: (optionsIn: VXRNOptions, buildArgs?: BuildArgs) => P
34
38
  server?: boolean | import("..").VXRNBuildOptions;
35
39
  analyze?: boolean;
36
40
  };
41
+ debugBundle?: boolean;
37
42
  };
38
43
  buildArgs: BuildArgs;
39
44
  serverEntry: string;
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/exports/build.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA8BtD,eAAO,MAAM,KAAK,cAAqB,WAAW,cAAa,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwBnE,CAAC;mBAGiB,CAAC;;;;;;;;;;EA6KvB,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/exports/build.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA8BtD,eAAO,MAAM,KAAK,cAAqB,WAAW,cAAa,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwBnE,CAAC;mBAGiB,CAAC;;;;;;;;;;;EA6KvB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAWlE,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAmJnF"}
1
+ {"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAalE,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAsKnF"}
package/types/types.d.ts CHANGED
@@ -91,6 +91,10 @@ export type VXRNOptions = {
91
91
  * Whether to clean cache directories on startup
92
92
  */
93
93
  clean?: boolean;
94
+ /**
95
+ * Will output the bundle to a temp file and then serve it from there afterwards allowing you to easily edit the bundle to debug problems.
96
+ */
97
+ debugBundle?: boolean;
94
98
  };
95
99
  export type HMRListener = (update: {
96
100
  file: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEtC,KAAK,gBAAgB,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;AAEvE,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE3E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,YAAY,EAAE,gBAAgB,CAAA;IAC9B,YAAY,EAAE,gBAAgB,CAAA;IAC9B,cAAc,EAAE,UAAU,CAAA;IAC1B,iBAAiB,EAAE,UAAU,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE;QAEd,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;KACnC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAErF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IAE5B,SAAS,CAAC,EAAE,sBAAsB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAA;IAEnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,EAAE;QACN;;;WAGG;QACH,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAA;QAEnC;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IAED,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,YAAY,CAAC,EAAE,KAAK,CAAA;QACpB,OAAO,CAAC,EAAE,OAAO,CAAA;QAEjB;;WAEG;QACH,KAAK,CAAC,EAAE,OAAO,CAAA;QAEf;;;;WAIG;QACH,QAAQ,CAAC,EAAE,iBAAiB,CAAA;KAC7B,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEtC,KAAK,gBAAgB,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;AAEvE,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE3E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,YAAY,EAAE,gBAAgB,CAAA;IAC9B,YAAY,EAAE,gBAAgB,CAAA;IAC9B,cAAc,EAAE,UAAU,CAAA;IAC1B,iBAAiB,EAAE,UAAU,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE;QAEd,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;KACnC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAErF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IAE5B,SAAS,CAAC,EAAE,sBAAsB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAA;IAEnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,EAAE;QACN;;;WAGG;QACH,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAA;QAEnC;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IAED,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,YAAY,CAAC,EAAE,KAAK,CAAA;QACpB,OAAO,CAAC,EAAE,OAAO,CAAA;QAEjB;;WAEG;QACH,KAAK,CAAC,EAAE,OAAO,CAAA;QAEf;;;;WAIG;QACH,QAAQ,CAAC,EAAE,iBAAiB,CAAA;KAC7B,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAA"}
@@ -3,6 +3,10 @@ export type VXRNOptionsFilled = Awaited<ReturnType<typeof fillOptions>>;
3
3
  export declare function fillOptions(options: VXRNOptions, internal?: {
4
4
  mode?: 'dev' | 'prod';
5
5
  }): Promise<{
6
+ debugBundlePaths: {
7
+ ios: string;
8
+ android: string;
9
+ };
6
10
  mode: "development" | "production";
7
11
  clean: boolean;
8
12
  root: string;
@@ -36,8 +40,13 @@ export declare function fillOptions(options: VXRNOptions, internal?: {
36
40
  server?: boolean | import("..").VXRNBuildOptions;
37
41
  analyze?: boolean;
38
42
  };
43
+ debugBundle?: boolean;
39
44
  }>;
40
45
  export declare function getOptionsFilled(): {
46
+ debugBundlePaths: {
47
+ ios: string;
48
+ android: string;
49
+ };
41
50
  mode: "development" | "production";
42
51
  clean: boolean;
43
52
  root: string;
@@ -71,5 +80,6 @@ export declare function getOptionsFilled(): {
71
80
  server?: boolean | import("..").VXRNBuildOptions;
72
81
  analyze?: boolean;
73
82
  };
83
+ debugBundle?: boolean;
74
84
  } | null;
75
85
  //# sourceMappingURL=getOptionsFilled.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOptionsFilled.d.ts","sourceRoot":"","sources":["../../src/utils/getOptionsFilled.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAK3C,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;AAIvE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,QAAQ,GAAE;IAAE,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCU,CAAC;eAK7B,CAAC;;GAmCrC;AAED,wBAAgB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA1CiC,CAAC;eAK7B,CAAC;;SAuCrC"}
1
+ {"version":3,"file":"getOptionsFilled.d.ts","sourceRoot":"","sources":["../../src/utils/getOptionsFilled.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAM3C,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;AAIvE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,QAAQ,GAAE;IAAE,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCvB,CAAC;eAK5B,CAAA;;;GAwCJ;AAED,wBAAgB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA/CA,CAAC;eAK5B,CAAA;;;SA4CJ"}