@expo/metro-runtime 2.0.3 → 2.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"buildAsyncRequire.d.ts","sourceRoot":"","sources":["../../src/async-require/buildAsyncRequire.ts"],"names":[],"mappings":"AAQA,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,KAAK,YAAY,GAAG;IAClB,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;CAChC,CAAC;AAMF;;;;;GAKG;AACH,KAAK,YAAY,GAAG;IAClB,CAAC,OAAO,EACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE;QAAE,cAAc,EAAE,OAAO,CAAA;KAAE,GACpC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IACrC,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,IAAI,CAAC;IACR,yEAAyE;IACzE,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,KAAK,CAAC;CACV,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,CAiE1E"}
1
+ {"version":3,"file":"buildAsyncRequire.d.ts","sourceRoot":"","sources":["../../src/async-require/buildAsyncRequire.ts"],"names":[],"mappings":"AAUA,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,KAAK,YAAY,GAAG;IAClB,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAC;CAChC,CAAC;AAMF;;;;;GAKG;AACH,KAAK,YAAY,GAAG;IAClB,CAAC,OAAO,EACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE;QAAE,cAAc,EAAE,OAAO,CAAA;KAAE,GACpC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IACrC,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,IAAI,CAAC;IACR,yEAAyE;IACzE,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,KAAK,CAAC;CACV,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,CAqE1E"}
@@ -7,12 +7,15 @@ exports.buildAsyncRequire = void 0;
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
+ const react_native_1 = require("react-native");
10
11
  const loadBundle_1 = require("./loadBundle");
11
12
  /** Create an `asyncRequire` function in the expected shape for Metro bundler. */
12
13
  function buildAsyncRequire(metroRequire) {
13
14
  const importBundlePromises = Object.create(null);
14
15
  function asyncRequire(moduleID, moduleName, paths, options = { isPrefetchOnly: false }) {
15
- if (process.env.NODE_ENV === "production") {
16
+ if (process.env.NODE_ENV === "production" ||
17
+ // Disable in static rendering environments.
18
+ (react_native_1.Platform.OS === "web" && typeof window === "undefined")) {
16
19
  // TODO: Don't disable in production
17
20
  return Promise.resolve().then(() => metroRequire.importAll(moduleID));
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"buildAsyncRequire.js","sourceRoot":"","sources":["../../src/async-require/buildAsyncRequire.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,6CAA+C;AAuC/C,iFAAiF;AACjF,SAAgB,iBAAiB,CAAC,YAA0B;IAC1D,MAAM,oBAAoB,GAAyB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEvE,SAAS,YAAY,CACnB,QAAgB,EAChB,UAAkB,EAClB,KAAwB,EACxB,UAAuC,EAAE,cAAc,EAAE,KAAK,EAAE;QAEhE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC,oCAAoC;YAEpC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,OAAO,CAAC,cAAc,EAAE;YAC1B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,8FAA8F;QAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,UAAU,EAAE;YACd,kDAAkD;YAClD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE;gBACzC,oBAAoB,CAAC,cAAc,CAAC,GAAG,IAAA,4BAAe,EAAC,UAAU,CAAC,CAAC,IAAI,CACrE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAC7B,CAAC;aACH;YACD,kCAAkC;YAClC,OAAO,oBAAoB,CAAC,cAAc,CAAC,CAAC;SAC7C;QAED,OAAO,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,QAAQ,GAAG,UACtB,QAAgB,EAChB,UAAkB,EAClB,KAAwB;QAExB,oCAAoC;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC,OAAO;SACR;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;YACvD,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,IAAI,MAAM,YAAY,OAAO,EAAE;YAC7B,MAAM,CAAC,IAAI,CACT,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;SACH;IACH,CAAC,CAAC;IAEF,YAAY,CAAC,QAAQ,GAAG,UACtB,QAAgB,EAChB,UAAkB,EAClB,KAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC;AAjED,8CAiEC","sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { loadBundleAsync } from \"./loadBundle\";\n\ntype ImportBundleNames = Record<string, string>;\n\ntype MetroRequire = {\n (id: number): any;\n importAll: (id: number) => any;\n};\n\ntype ImportBundlePromises = Record<string, Promise<any>> & {\n __proto__?: null;\n};\n\n/**\n * Must satisfy the requirements of the Metro bundler.\n * https://github.com/facebook/metro/blob/f9fe277986ff7e7e53ae0418040f3aa1eb1c7056/packages/metro/src/ModuleGraph/worker/collectDependencies.js#L629-L639\n *\n * And https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/getAppendScripts.js#L54-L56\n */\ntype AsyncRequire = {\n <TModule>(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames,\n options?: { isPrefetchOnly: boolean }\n ): Promise<TModule | void> | TModule;\n prefetch(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): void;\n /** NOTE(EvanBacon): Unclear what this should return `__jsResource` ?? */\n resource(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): never;\n};\n\n/** Create an `asyncRequire` function in the expected shape for Metro bundler. */\nexport function buildAsyncRequire(metroRequire: MetroRequire): AsyncRequire {\n const importBundlePromises: ImportBundlePromises = Object.create(null);\n\n function asyncRequire<TModule>(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames,\n options: { isPrefetchOnly: boolean } = { isPrefetchOnly: false }\n ): Promise<TModule | void> | TModule {\n if (process.env.NODE_ENV === \"production\") {\n // TODO: Don't disable in production\n\n return Promise.resolve().then(() => metroRequire.importAll(moduleID));\n }\n\n if (options.isPrefetchOnly) {\n return Promise.resolve();\n }\n\n const stringModuleID = String(moduleID);\n // This is basically `__webpack_require__.u` -> returns the bundle path for a numeric moduleID\n const bundlePath = paths[stringModuleID];\n if (bundlePath) {\n // Prevent loading the same module more than once.\n if (!importBundlePromises[stringModuleID]) {\n importBundlePromises[stringModuleID] = loadBundleAsync(bundlePath).then(\n () => metroRequire(moduleID)\n );\n }\n // Return for the user to resolve.\n return importBundlePromises[stringModuleID];\n }\n\n return metroRequire.importAll(moduleID);\n }\n\n asyncRequire.prefetch = function (\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): void {\n // TODO: Don't disable in production\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n const result = asyncRequire(moduleID, moduleName, paths, {\n isPrefetchOnly: true,\n });\n if (result instanceof Promise) {\n result.then(\n () => {},\n () => {}\n );\n }\n };\n\n asyncRequire.resource = function (\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): never {\n throw new Error(\"Unimplemented Metro runtime feature\");\n };\n\n return asyncRequire;\n}\n"]}
1
+ {"version":3,"file":"buildAsyncRequire.js","sourceRoot":"","sources":["../../src/async-require/buildAsyncRequire.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+CAAwC;AAExC,6CAA+C;AAuC/C,iFAAiF;AACjF,SAAgB,iBAAiB,CAAC,YAA0B;IAC1D,MAAM,oBAAoB,GAAyB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEvE,SAAS,YAAY,CACnB,QAAgB,EAChB,UAAkB,EAClB,KAAwB,EACxB,UAAuC,EAAE,cAAc,EAAE,KAAK,EAAE;QAEhE,IACE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YACrC,4CAA4C;YAC5C,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,OAAO,MAAM,KAAK,WAAW,CAAC,EACxD;YACA,oCAAoC;YAEpC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,OAAO,CAAC,cAAc,EAAE;YAC1B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,8FAA8F;QAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,UAAU,EAAE;YACd,kDAAkD;YAClD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,EAAE;gBACzC,oBAAoB,CAAC,cAAc,CAAC,GAAG,IAAA,4BAAe,EAAC,UAAU,CAAC,CAAC,IAAI,CACrE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAC7B,CAAC;aACH;YACD,kCAAkC;YAClC,OAAO,oBAAoB,CAAC,cAAc,CAAC,CAAC;SAC7C;QAED,OAAO,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,QAAQ,GAAG,UACtB,QAAgB,EAChB,UAAkB,EAClB,KAAwB;QAExB,oCAAoC;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC,OAAO;SACR;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;YACvD,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,IAAI,MAAM,YAAY,OAAO,EAAE;YAC7B,MAAM,CAAC,IAAI,CACT,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;SACH;IACH,CAAC,CAAC;IAEF,YAAY,CAAC,QAAQ,GAAG,UACtB,QAAgB,EAChB,UAAkB,EAClB,KAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC;AArED,8CAqEC","sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Platform } from \"react-native\";\n\nimport { loadBundleAsync } from \"./loadBundle\";\n\ntype ImportBundleNames = Record<string, string>;\n\ntype MetroRequire = {\n (id: number): any;\n importAll: (id: number) => any;\n};\n\ntype ImportBundlePromises = Record<string, Promise<any>> & {\n __proto__?: null;\n};\n\n/**\n * Must satisfy the requirements of the Metro bundler.\n * https://github.com/facebook/metro/blob/f9fe277986ff7e7e53ae0418040f3aa1eb1c7056/packages/metro/src/ModuleGraph/worker/collectDependencies.js#L629-L639\n *\n * And https://github.com/facebook/metro/blob/fc29a1177f883144674cf85a813b58567f69d545/packages/metro/src/lib/getAppendScripts.js#L54-L56\n */\ntype AsyncRequire = {\n <TModule>(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames,\n options?: { isPrefetchOnly: boolean }\n ): Promise<TModule | void> | TModule;\n prefetch(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): void;\n /** NOTE(EvanBacon): Unclear what this should return `__jsResource` ?? */\n resource(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): never;\n};\n\n/** Create an `asyncRequire` function in the expected shape for Metro bundler. */\nexport function buildAsyncRequire(metroRequire: MetroRequire): AsyncRequire {\n const importBundlePromises: ImportBundlePromises = Object.create(null);\n\n function asyncRequire<TModule>(\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames,\n options: { isPrefetchOnly: boolean } = { isPrefetchOnly: false }\n ): Promise<TModule | void> | TModule {\n if (\n process.env.NODE_ENV === \"production\" ||\n // Disable in static rendering environments.\n (Platform.OS === \"web\" && typeof window === \"undefined\")\n ) {\n // TODO: Don't disable in production\n\n return Promise.resolve().then(() => metroRequire.importAll(moduleID));\n }\n\n if (options.isPrefetchOnly) {\n return Promise.resolve();\n }\n\n const stringModuleID = String(moduleID);\n // This is basically `__webpack_require__.u` -> returns the bundle path for a numeric moduleID\n const bundlePath = paths[stringModuleID];\n if (bundlePath) {\n // Prevent loading the same module more than once.\n if (!importBundlePromises[stringModuleID]) {\n importBundlePromises[stringModuleID] = loadBundleAsync(bundlePath).then(\n () => metroRequire(moduleID)\n );\n }\n // Return for the user to resolve.\n return importBundlePromises[stringModuleID];\n }\n\n return metroRequire.importAll(moduleID);\n }\n\n asyncRequire.prefetch = function (\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): void {\n // TODO: Don't disable in production\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n const result = asyncRequire(moduleID, moduleName, paths, {\n isPrefetchOnly: true,\n });\n if (result instanceof Promise) {\n result.then(\n () => {},\n () => {}\n );\n }\n };\n\n asyncRequire.resource = function (\n moduleID: number,\n moduleName: string,\n paths: ImportBundleNames\n ): never {\n throw new Error(\"Unimplemented Metro runtime feature\");\n };\n\n return asyncRequire;\n}\n"]}
@@ -15,7 +15,8 @@ const fetchAsync_1 = require("./fetchAsync");
15
15
  */
16
16
  function fetchThenEvalAsync(url) {
17
17
  return (0, fetchAsync_1.fetchAsync)(url).then(({ body, headers }) => {
18
- if (headers.has("Content-Type") != null &&
18
+ var _a;
19
+ if (((_a = headers === null || headers === void 0 ? void 0 : headers.has) === null || _a === void 0 ? void 0 : _a.call(headers, "Content-Type")) != null &&
19
20
  headers.get("Content-Type").includes("application/json")) {
20
21
  // Errors are returned as JSON.
21
22
  throw new Error(JSON.parse(body).message || `Unknown error fetching '${url}'`);
@@ -1 +1 @@
1
- {"version":3,"file":"fetchThenEval.js","sourceRoot":"","sources":["../../src/async-require/fetchThenEval.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,6CAA0C;AAM1C;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,OAAO,IAAA,uBAAU,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,IACE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI;YACnC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACzD;YACA,+BAA+B;YAC/B,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,2BAA2B,GAAG,GAAG,CAC9D,CAAC;SACH;QAED,gFAAgF;QAEhF,oEAAoE;QACpE,qEAAqE;QACrE,IAAI,MAAM,CAAC,uBAAuB,EAAE;YAClC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC3C;aAAM;YACL,mCAAmC;YACnC,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,gDAuBC","sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { fetchAsync } from \"./fetchAsync\";\n\ndeclare let global: {\n globalEvalWithSourceUrl?: any;\n};\n\n/**\n * Load a bundle for a URL using fetch + eval on native and script tag injection on web.\n *\n * @param bundlePath Given a statement like `import('./Bacon')` `bundlePath` would be `Bacon`.\n */\nexport function fetchThenEvalAsync(url: string): Promise<void> {\n return fetchAsync(url).then(({ body, headers }) => {\n if (\n headers.has(\"Content-Type\") != null &&\n headers.get(\"Content-Type\")!.includes(\"application/json\")\n ) {\n // Errors are returned as JSON.\n throw new Error(\n JSON.parse(body).message || `Unknown error fetching '${url}'`\n );\n }\n\n // NOTE(EvanBacon): All of this code is ignored in development mode at the root.\n\n // Some engines do not support `sourceURL` as a comment. We expose a\n // `globalEvalWithSourceUrl` function to handle updates in that case.\n if (global.globalEvalWithSourceUrl) {\n global.globalEvalWithSourceUrl(body, url);\n } else {\n // eslint-disable-next-line no-eval\n eval(body);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"fetchThenEval.js","sourceRoot":"","sources":["../../src/async-require/fetchThenEval.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,6CAA0C;AAM1C;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,OAAO,IAAA,uBAAU,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;;QAChD,IACE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,wDAAG,cAAc,CAAC,KAAI,IAAI;YACtC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACzD;YACA,+BAA+B;YAC/B,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,2BAA2B,GAAG,GAAG,CAC9D,CAAC;SACH;QAED,gFAAgF;QAEhF,oEAAoE;QACpE,qEAAqE;QACrE,IAAI,MAAM,CAAC,uBAAuB,EAAE;YAClC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC3C;aAAM;YACL,mCAAmC;YACnC,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,gDAuBC","sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { fetchAsync } from \"./fetchAsync\";\n\ndeclare let global: {\n globalEvalWithSourceUrl?: any;\n};\n\n/**\n * Load a bundle for a URL using fetch + eval on native and script tag injection on web.\n *\n * @param bundlePath Given a statement like `import('./Bacon')` `bundlePath` would be `Bacon`.\n */\nexport function fetchThenEvalAsync(url: string): Promise<void> {\n return fetchAsync(url).then(({ body, headers }) => {\n if (\n headers?.has?.(\"Content-Type\") != null &&\n headers.get(\"Content-Type\")!.includes(\"application/json\")\n ) {\n // Errors are returned as JSON.\n throw new Error(\n JSON.parse(body).message || `Unknown error fetching '${url}'`\n );\n }\n\n // NOTE(EvanBacon): All of this code is ignored in development mode at the root.\n\n // Some engines do not support `sourceURL` as a comment. We expose a\n // `globalEvalWithSourceUrl` function to handle updates in that case.\n if (global.globalEvalWithSourceUrl) {\n global.globalEvalWithSourceUrl(body, url);\n } else {\n // eslint-disable-next-line no-eval\n eval(body);\n }\n });\n}\n"]}
@@ -2,23 +2,24 @@
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
- var _a, _b, _c;
5
+ var _a, _b, _c, _d;
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const expo_constants_1 = __importDefault(require("expo-constants"));
8
8
  const url_parse_1 = __importDefault(require("url-parse"));
9
9
  const Location_1 = require("./Location");
10
10
  const getDevServer_1 = __importDefault(require("../getDevServer"));
11
11
  let hasWarned = false;
12
+ const manifest = ((_b = (_a = expo_constants_1.default.manifest) !== null && _a !== void 0 ? _a : expo_constants_1.default.manifest2) !== null && _b !== void 0 ? _b : expo_constants_1.default.expoConfig);
12
13
  // Add a development warning for fetch requests with relative paths
13
14
  // to ensure developers are aware of the need to configure a production
14
15
  // base URL in the Expo config (app.json) under `expo.extra.router.origin`.
15
16
  function warnProductionOriginNotConfigured(requestUrl) {
16
- var _a, _b, _c;
17
+ var _a, _b;
17
18
  if (hasWarned) {
18
19
  return;
19
20
  }
20
21
  hasWarned = true;
21
- if (!((_c = (_b = (_a = expo_constants_1.default.manifest) === null || _a === void 0 ? void 0 : _a.extra) === null || _b === void 0 ? void 0 : _b.router) === null || _c === void 0 ? void 0 : _c.origin)) {
22
+ if (!((_b = (_a = manifest === null || manifest === void 0 ? void 0 : manifest.extra) === null || _a === void 0 ? void 0 : _a.router) === null || _b === void 0 ? void 0 : _b.origin)) {
22
23
  console.warn(`The relative fetch request "${requestUrl}" will not work in production until the Expo config (app.json) \`expo.extra.router.origin\` field is set to the base URL of your web server. [Learn more](https://expo.github.io/router/docs/lab/runtime-location)`);
23
24
  }
24
25
  }
@@ -26,15 +27,15 @@ function warnProductionOriginNotConfigured(requestUrl) {
26
27
  // reflect the exact location of the JS file that was executed.
27
28
  function getBaseUrl() {
28
29
  var _a, _b, _c;
30
+ if (process.env.NODE_ENV !== "production") {
31
+ // e.g. http://localhost:19006
32
+ return (_a = (0, getDevServer_1.default)().url) === null || _a === void 0 ? void 0 : _a.replace(/\/$/, "");
33
+ }
29
34
  // TODO: Make it official by moving out of `extra`
30
- let productionBaseUrl = (_c = (_b = (_a = expo_constants_1.default.manifest) === null || _a === void 0 ? void 0 : _a.extra) === null || _b === void 0 ? void 0 : _b.router) === null || _c === void 0 ? void 0 : _c.origin;
35
+ const productionBaseUrl = (_c = (_b = manifest === null || manifest === void 0 ? void 0 : manifest.extra) === null || _b === void 0 ? void 0 : _b.router) === null || _c === void 0 ? void 0 : _c.origin;
31
36
  if (!productionBaseUrl) {
32
37
  return null;
33
38
  }
34
- if (process.env.NODE_ENV !== "production") {
35
- // e.g. http://localhost:19006
36
- productionBaseUrl = (0, getDevServer_1.default)().url;
37
- }
38
39
  // Ensure no trailing slash
39
40
  return productionBaseUrl === null || productionBaseUrl === void 0 ? void 0 : productionBaseUrl.replace(/\/$/, "");
40
41
  }
@@ -65,7 +66,7 @@ function wrapFetchWithWindowLocation(fetch) {
65
66
  _fetch.__EXPO_BASE_URL_POLYFILLED = true;
66
67
  return _fetch;
67
68
  }
68
- if (((_c = (_b = (_a = expo_constants_1.default.manifest) === null || _a === void 0 ? void 0 : _a.extra) === null || _b === void 0 ? void 0 : _b.router) === null || _c === void 0 ? void 0 : _c.origin) !== false) {
69
+ if (((_d = (_c = manifest === null || manifest === void 0 ? void 0 : manifest.extra) === null || _c === void 0 ? void 0 : _c.router) === null || _d === void 0 ? void 0 : _d.origin) !== false) {
69
70
  // Polyfill window.location in native runtimes.
70
71
  if (typeof window !== "undefined" && !window.location) {
71
72
  const url = getBaseUrl();
@@ -1 +1 @@
1
- {"version":3,"file":"install.native.js","sourceRoot":"","sources":["../../src/location/install.native.ts"],"names":[],"mappings":"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","sourcesContent":["import Constants from \"expo-constants\";\nimport URL from \"url-parse\";\n\nimport { install, setLocationHref } from \"./Location\";\nimport getDevServer from \"../getDevServer\";\n\nlet hasWarned = false;\n\n// Add a development warning for fetch requests with relative paths\n// to ensure developers are aware of the need to configure a production\n// base URL in the Expo config (app.json) under `expo.extra.router.origin`.\nfunction warnProductionOriginNotConfigured(requestUrl: string) {\n if (hasWarned) {\n return;\n }\n hasWarned = true;\n if (!Constants.manifest?.extra?.router?.origin) {\n console.warn(\n `The relative fetch request \"${requestUrl}\" will not work in production until the Expo config (app.json) \\`expo.extra.router.origin\\` field is set to the base URL of your web server. [Learn more](https://expo.github.io/router/docs/lab/runtime-location)`\n );\n }\n}\n\n// TODO: This would be better if native and tied as close to the JS engine as possible, i.e. it should\n// reflect the exact location of the JS file that was executed.\nfunction getBaseUrl() {\n // TODO: Make it official by moving out of `extra`\n let productionBaseUrl = Constants.manifest?.extra?.router?.origin;\n\n if (!productionBaseUrl) {\n return null;\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n // e.g. http://localhost:19006\n productionBaseUrl = getDevServer().url;\n }\n\n // Ensure no trailing slash\n return productionBaseUrl?.replace(/\\/$/, \"\");\n}\n\nfunction wrapFetchWithWindowLocation(\n fetch: Function & { __EXPO_BASE_URL_POLYFILLED?: boolean }\n) {\n if (fetch.__EXPO_BASE_URL_POLYFILLED) {\n return fetch;\n }\n\n const _fetch = (...props: any[]) => {\n if (props[0] && typeof props[0] === \"string\" && props[0].startsWith(\"/\")) {\n if (process.env.NODE_ENV !== \"production\") {\n warnProductionOriginNotConfigured(props[0]);\n }\n\n props[0] = new URL(props[0], window.location?.origin).toString();\n } else if (props[0] && typeof props[0] === \"object\") {\n if (\n props[0].url &&\n typeof props[0].url === \"string\" &&\n props[0].url.startsWith(\"/\")\n ) {\n if (process.env.NODE_ENV !== \"production\") {\n warnProductionOriginNotConfigured(props[0]);\n }\n\n props[0].url = new URL(\n props[0].url,\n window.location?.origin\n ).toString();\n }\n }\n return fetch(...props);\n };\n\n _fetch.__EXPO_BASE_URL_POLYFILLED = true;\n\n return _fetch;\n}\n\nif (Constants.manifest?.extra?.router?.origin !== false) {\n // Polyfill window.location in native runtimes.\n if (typeof window !== \"undefined\" && !window.location) {\n const url = getBaseUrl();\n if (url) {\n setLocationHref(url);\n install();\n }\n }\n // Polyfill native fetch to support relative URLs\n Object.defineProperty(global, \"fetch\", {\n value: wrapFetchWithWindowLocation(fetch),\n });\n}\n"]}
1
+ {"version":3,"file":"install.native.js","sourceRoot":"","sources":["../../src/location/install.native.ts"],"names":[],"mappings":"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","sourcesContent":["import Constants from \"expo-constants\";\nimport URL from \"url-parse\";\n\nimport { install, setLocationHref } from \"./Location\";\nimport getDevServer from \"../getDevServer\";\n\nlet hasWarned = false;\n\nconst manifest = (Constants.manifest ??\n Constants.manifest2 ??\n Constants.expoConfig) as Record<string, any> | null;\n\n// Add a development warning for fetch requests with relative paths\n// to ensure developers are aware of the need to configure a production\n// base URL in the Expo config (app.json) under `expo.extra.router.origin`.\nfunction warnProductionOriginNotConfigured(requestUrl: string) {\n if (hasWarned) {\n return;\n }\n hasWarned = true;\n if (!manifest?.extra?.router?.origin) {\n console.warn(\n `The relative fetch request \"${requestUrl}\" will not work in production until the Expo config (app.json) \\`expo.extra.router.origin\\` field is set to the base URL of your web server. [Learn more](https://expo.github.io/router/docs/lab/runtime-location)`\n );\n }\n}\n\n// TODO: This would be better if native and tied as close to the JS engine as possible, i.e. it should\n// reflect the exact location of the JS file that was executed.\nfunction getBaseUrl() {\n if (process.env.NODE_ENV !== \"production\") {\n // e.g. http://localhost:19006\n return getDevServer().url?.replace(/\\/$/, \"\");\n }\n\n // TODO: Make it official by moving out of `extra`\n const productionBaseUrl = manifest?.extra?.router?.origin;\n\n if (!productionBaseUrl) {\n return null;\n }\n\n // Ensure no trailing slash\n return productionBaseUrl?.replace(/\\/$/, \"\");\n}\n\nfunction wrapFetchWithWindowLocation(\n fetch: Function & { __EXPO_BASE_URL_POLYFILLED?: boolean }\n) {\n if (fetch.__EXPO_BASE_URL_POLYFILLED) {\n return fetch;\n }\n\n const _fetch = (...props: any[]) => {\n if (props[0] && typeof props[0] === \"string\" && props[0].startsWith(\"/\")) {\n if (process.env.NODE_ENV !== \"production\") {\n warnProductionOriginNotConfigured(props[0]);\n }\n\n props[0] = new URL(props[0], window.location?.origin).toString();\n } else if (props[0] && typeof props[0] === \"object\") {\n if (\n props[0].url &&\n typeof props[0].url === \"string\" &&\n props[0].url.startsWith(\"/\")\n ) {\n if (process.env.NODE_ENV !== \"production\") {\n warnProductionOriginNotConfigured(props[0]);\n }\n\n props[0].url = new URL(\n props[0].url,\n window.location?.origin\n ).toString();\n }\n }\n return fetch(...props);\n };\n\n _fetch.__EXPO_BASE_URL_POLYFILLED = true;\n\n return _fetch;\n}\n\nif (manifest?.extra?.router?.origin !== false) {\n // Polyfill window.location in native runtimes.\n if (typeof window !== \"undefined\" && !window.location) {\n const url = getBaseUrl();\n if (url) {\n setLocationHref(url);\n install();\n }\n }\n // Polyfill native fetch to support relative URLs\n Object.defineProperty(global, \"fetch\", {\n value: wrapFetchWithWindowLocation(fetch),\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/metro-runtime",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "Tools for making experimental Metro bundler features work",
5
5
  "main": "build",
6
6
  "homepage": "https://github.com/expo/router/tree/main/packages/expo-metro-runtime",