@expo/metro-config 0.5.2 → 0.6.0

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 (29) hide show
  1. package/build/ExpoMetroConfig.d.ts +1 -4
  2. package/build/ExpoMetroConfig.js +54 -144
  3. package/build/ExpoMetroConfig.js.map +1 -1
  4. package/build/getModulesPaths.js +3 -14
  5. package/build/getModulesPaths.js.map +1 -1
  6. package/build/getWatchFolders.js +32 -48
  7. package/build/getWatchFolders.js.map +1 -1
  8. package/build/importMetroFromProject.js +0 -13
  9. package/build/importMetroFromProject.js.map +1 -1
  10. package/build/transformer/createExoticTransformer.js +21 -24
  11. package/build/transformer/createExoticTransformer.js.map +1 -1
  12. package/build/transformer/createMatcher.js +14 -14
  13. package/build/transformer/createMatcher.js.map +1 -1
  14. package/build/transformer/createMultiRuleTransformer.d.ts +1 -1
  15. package/build/transformer/createMultiRuleTransformer.js +78 -101
  16. package/build/transformer/createMultiRuleTransformer.js.map +1 -1
  17. package/build/transformer/generateFunctionMap.js +0 -5
  18. package/build/transformer/generateFunctionMap.js.map +1 -1
  19. package/build/transformer/getBabelConfig.js +26 -40
  20. package/build/transformer/getBabelConfig.js.map +1 -1
  21. package/build/transformer/getCacheKey.js +6 -13
  22. package/build/transformer/getCacheKey.js.map +1 -1
  23. package/build/transformer/index.js +0 -12
  24. package/build/transformer/index.js.map +1 -1
  25. package/build/transformer/metro-expo-babel-transformer.js +2 -14
  26. package/build/transformer/metro-expo-babel-transformer.js.map +1 -1
  27. package/build/transformer/metro-expo-exotic-babel-transformer.js +1 -3
  28. package/build/transformer/metro-expo-exotic-babel-transformer.js.map +1 -1
  29. package/package.json +3 -4
@@ -6,58 +6,57 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getWatchFolders = getWatchFolders;
7
7
  exports.globAllPackageJsonPaths = globAllPackageJsonPaths;
8
8
  exports.resolveAllWorkspacePackageJsonPaths = resolveAllWorkspacePackageJsonPaths;
9
-
10
- function _jsonFile() {
11
- const data = _interopRequireDefault(require("@expo/json-file"));
12
-
13
- _jsonFile = function () {
9
+ function _assert() {
10
+ const data = _interopRequireDefault(require("assert"));
11
+ _assert = function () {
14
12
  return data;
15
13
  };
16
-
17
14
  return data;
18
15
  }
19
-
20
- function _assert() {
21
- const data = _interopRequireDefault(require("assert"));
22
-
23
- _assert = function () {
16
+ function _fs() {
17
+ const data = _interopRequireDefault(require("fs"));
18
+ _fs = function () {
24
19
  return data;
25
20
  };
26
-
27
21
  return data;
28
22
  }
29
-
30
23
  function _glob() {
31
24
  const data = require("glob");
32
-
33
25
  _glob = function () {
34
26
  return data;
35
27
  };
36
-
37
28
  return data;
38
29
  }
39
-
40
30
  function _path() {
41
31
  const data = _interopRequireDefault(require("path"));
42
-
43
32
  _path = function () {
44
33
  return data;
45
34
  };
46
-
47
35
  return data;
48
36
  }
49
-
50
37
  function _getModulesPaths() {
51
38
  const data = require("./getModulesPaths");
52
-
53
39
  _getModulesPaths = function () {
54
40
  return data;
55
41
  };
56
-
57
42
  return data;
58
43
  }
59
-
60
44
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45
+ function readJsonFile(filePath) {
46
+ // Read with fs
47
+ const file = _fs().default.readFileSync(filePath, 'utf8');
48
+ // Parse with JSON.parse
49
+ return JSON.parse(file);
50
+ }
51
+ function isValidJsonFile(filePath) {
52
+ try {
53
+ // Throws if invalid or unable to read.
54
+ readJsonFile(filePath);
55
+ return true;
56
+ } catch {
57
+ return false;
58
+ }
59
+ }
61
60
 
62
61
  /**
63
62
  * @param workspaceProjectRoot Root file path for the yarn workspace
@@ -71,71 +70,56 @@ function globAllPackageJsonPaths(workspaceProjectRoot, linkedPackages) {
71
70
  absolute: true,
72
71
  ignore: ['**/@(Carthage|Pods|node_modules)/**']
73
72
  }).map(pkgPath => {
74
- try {
75
- _jsonFile().default.read(pkgPath);
76
-
77
- return pkgPath;
78
- } catch {// Skip adding path if the package.json is invalid or cannot be read.
79
- }
80
-
81
- return null;
73
+ return isValidJsonFile(pkgPath) ? pkgPath : null;
82
74
  });
83
75
  }).flat().filter(Boolean).map(p => _path().default.join(p));
84
76
  }
85
-
86
77
  function getWorkspacePackagesArray({
87
78
  workspaces
88
79
  }) {
89
80
  if (Array.isArray(workspaces)) {
90
81
  return workspaces;
91
82
  }
92
-
93
83
  (0, _assert().default)(workspaces === null || workspaces === void 0 ? void 0 : workspaces.packages, 'Could not find a `workspaces` object in the root package.json');
94
84
  return workspaces.packages;
95
85
  }
86
+
96
87
  /**
97
88
  * @param workspaceProjectRoot root file path for a yarn workspace.
98
89
  * @returns list of package.json file paths that are linked to the yarn workspace.
99
90
  */
100
-
101
-
102
91
  function resolveAllWorkspacePackageJsonPaths(workspaceProjectRoot) {
103
92
  try {
104
- const rootPackageJsonFilePath = _path().default.join(workspaceProjectRoot, 'package.json'); // Could throw if package.json is invalid.
93
+ const rootPackageJsonFilePath = _path().default.join(workspaceProjectRoot, 'package.json');
94
+ // Could throw if package.json is invalid.
95
+ const rootPackageJson = readJsonFile(rootPackageJsonFilePath);
105
96
 
97
+ // Extract the "packages" array or use "workspaces" as packages array (yarn workspaces spec).
98
+ const packages = getWorkspacePackagesArray(rootPackageJson);
106
99
 
107
- const rootPackageJson = _jsonFile().default.read(rootPackageJsonFilePath); // Extract the "packages" array or use "workspaces" as packages array (yarn workspaces spec).
108
-
109
-
110
- const packages = getWorkspacePackagesArray(rootPackageJson); // Glob all package.json files and return valid paths.
111
-
100
+ // Glob all package.json files and return valid paths.
112
101
  return globAllPackageJsonPaths(workspaceProjectRoot, packages);
113
102
  } catch {
114
103
  return [];
115
104
  }
116
105
  }
106
+
117
107
  /**
118
108
  * @param projectRoot file path to app's project root
119
109
  * @returns list of node module paths to watch in Metro bundler, ex: `['/Users/me/app/node_modules/', '/Users/me/app/apps/my-app/', '/Users/me/app/packages/my-package/']`
120
110
  */
121
-
122
-
123
111
  function getWatchFolders(projectRoot) {
124
- const workspaceRoot = (0, _getModulesPaths().getWorkspaceRoot)(_path().default.resolve(projectRoot)); // Rely on default behavior in standard projects.
125
-
112
+ const workspaceRoot = (0, _getModulesPaths().getWorkspaceRoot)(_path().default.resolve(projectRoot));
113
+ // Rely on default behavior in standard projects.
126
114
  if (!workspaceRoot) {
127
115
  return [];
128
116
  }
129
-
130
117
  const packages = resolveAllWorkspacePackageJsonPaths(workspaceRoot);
131
-
132
118
  if (!packages.length) {
133
119
  return [];
134
120
  }
135
-
136
121
  return uniqueItems([_path().default.join(workspaceRoot, 'node_modules'), ...packages.map(pkg => _path().default.dirname(pkg))]);
137
122
  }
138
-
139
123
  function uniqueItems(items) {
140
124
  return [...new Set(items)];
141
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getWatchFolders.js","names":["globAllPackageJsonPaths","workspaceProjectRoot","linkedPackages","map","glob","globSync","path","join","replace","cwd","absolute","ignore","pkgPath","JsonFile","read","flat","filter","Boolean","p","getWorkspacePackagesArray","workspaces","Array","isArray","assert","packages","resolveAllWorkspacePackageJsonPaths","rootPackageJsonFilePath","rootPackageJson","getWatchFolders","projectRoot","workspaceRoot","getWorkspaceRoot","resolve","length","uniqueItems","pkg","dirname","items","Set"],"sources":["../src/getWatchFolders.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport assert from 'assert';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { getWorkspaceRoot } from './getModulesPaths';\n\n/**\n * @param workspaceProjectRoot Root file path for the yarn workspace\n * @param linkedPackages List of folders that contain linked node modules, ex: `['packages/*', 'apps/*']`\n * @returns List of valid package.json file paths, ex: `['/Users/me/app/apps/my-app/package.json', '/Users/me/app/packages/my-package/package.json']`\n */\nexport function globAllPackageJsonPaths(\n workspaceProjectRoot: string,\n linkedPackages: string[]\n): string[] {\n return linkedPackages\n .map((glob) => {\n return globSync(path.join(glob, 'package.json').replace(/\\\\/g, '/'), {\n cwd: workspaceProjectRoot,\n absolute: true,\n ignore: ['**/@(Carthage|Pods|node_modules)/**'],\n }).map((pkgPath) => {\n try {\n JsonFile.read(pkgPath);\n return pkgPath;\n } catch {\n // Skip adding path if the package.json is invalid or cannot be read.\n }\n return null;\n });\n })\n .flat()\n .filter(Boolean)\n .map((p) => path.join(p as string));\n}\n\nfunction getWorkspacePackagesArray({ workspaces }: any): string[] {\n if (Array.isArray(workspaces)) {\n return workspaces;\n }\n\n assert(workspaces?.packages, 'Could not find a `workspaces` object in the root package.json');\n\n return workspaces.packages;\n}\n\n/**\n * @param workspaceProjectRoot root file path for a yarn workspace.\n * @returns list of package.json file paths that are linked to the yarn workspace.\n */\nexport function resolveAllWorkspacePackageJsonPaths(workspaceProjectRoot: string) {\n try {\n const rootPackageJsonFilePath = path.join(workspaceProjectRoot, 'package.json');\n // Could throw if package.json is invalid.\n const rootPackageJson = JsonFile.read(rootPackageJsonFilePath);\n\n // Extract the \"packages\" array or use \"workspaces\" as packages array (yarn workspaces spec).\n const packages = getWorkspacePackagesArray(rootPackageJson);\n\n // Glob all package.json files and return valid paths.\n return globAllPackageJsonPaths(workspaceProjectRoot, packages);\n } catch {\n return [];\n }\n}\n\n/**\n * @param projectRoot file path to app's project root\n * @returns list of node module paths to watch in Metro bundler, ex: `['/Users/me/app/node_modules/', '/Users/me/app/apps/my-app/', '/Users/me/app/packages/my-package/']`\n */\nexport function getWatchFolders(projectRoot: string): string[] {\n const workspaceRoot = getWorkspaceRoot(path.resolve(projectRoot));\n // Rely on default behavior in standard projects.\n if (!workspaceRoot) {\n return [];\n }\n\n const packages = resolveAllWorkspacePackageJsonPaths(workspaceRoot);\n if (!packages.length) {\n return [];\n }\n\n return uniqueItems([\n path.join(workspaceRoot, 'node_modules'),\n ...packages.map((pkg) => path.dirname(pkg)),\n ]);\n}\n\nfunction uniqueItems(items: string[]): string[] {\n return [...new Set(items)];\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASA,uBAAT,CACLC,oBADK,EAELC,cAFK,EAGK;EACV,OAAOA,cAAc,CAClBC,GADI,CACCC,IAAD,IAAU;IACb,OAAO,IAAAC,YAAA,EAASC,eAAA,CAAKC,IAAL,CAAUH,IAAV,EAAgB,cAAhB,EAAgCI,OAAhC,CAAwC,KAAxC,EAA+C,GAA/C,CAAT,EAA8D;MACnEC,GAAG,EAAER,oBAD8D;MAEnES,QAAQ,EAAE,IAFyD;MAGnEC,MAAM,EAAE,CAAC,qCAAD;IAH2D,CAA9D,EAIJR,GAJI,CAICS,OAAD,IAAa;MAClB,IAAI;QACFC,mBAAA,CAASC,IAAT,CAAcF,OAAd;;QACA,OAAOA,OAAP;MACD,CAHD,CAGE,MAAM,CACN;MACD;;MACD,OAAO,IAAP;IACD,CAZM,CAAP;EAaD,CAfI,EAgBJG,IAhBI,GAiBJC,MAjBI,CAiBGC,OAjBH,EAkBJd,GAlBI,CAkBCe,CAAD,IAAOZ,eAAA,CAAKC,IAAL,CAAUW,CAAV,CAlBP,CAAP;AAmBD;;AAED,SAASC,yBAAT,CAAmC;EAAEC;AAAF,CAAnC,EAAkE;EAChE,IAAIC,KAAK,CAACC,OAAN,CAAcF,UAAd,CAAJ,EAA+B;IAC7B,OAAOA,UAAP;EACD;;EAED,IAAAG,iBAAA,EAAOH,UAAP,aAAOA,UAAP,uBAAOA,UAAU,CAAEI,QAAnB,EAA6B,+DAA7B;EAEA,OAAOJ,UAAU,CAACI,QAAlB;AACD;AAED;AACA;AACA;AACA;;;AACO,SAASC,mCAAT,CAA6CxB,oBAA7C,EAA2E;EAChF,IAAI;IACF,MAAMyB,uBAAuB,GAAGpB,eAAA,CAAKC,IAAL,CAAUN,oBAAV,EAAgC,cAAhC,CAAhC,CADE,CAEF;;;IACA,MAAM0B,eAAe,GAAGd,mBAAA,CAASC,IAAT,CAAcY,uBAAd,CAAxB,CAHE,CAKF;;;IACA,MAAMF,QAAQ,GAAGL,yBAAyB,CAACQ,eAAD,CAA1C,CANE,CAQF;;IACA,OAAO3B,uBAAuB,CAACC,oBAAD,EAAuBuB,QAAvB,CAA9B;EACD,CAVD,CAUE,MAAM;IACN,OAAO,EAAP;EACD;AACF;AAED;AACA;AACA;AACA;;;AACO,SAASI,eAAT,CAAyBC,WAAzB,EAAwD;EAC7D,MAAMC,aAAa,GAAG,IAAAC,mCAAA,EAAiBzB,eAAA,CAAK0B,OAAL,CAAaH,WAAb,CAAjB,CAAtB,CAD6D,CAE7D;;EACA,IAAI,CAACC,aAAL,EAAoB;IAClB,OAAO,EAAP;EACD;;EAED,MAAMN,QAAQ,GAAGC,mCAAmC,CAACK,aAAD,CAApD;;EACA,IAAI,CAACN,QAAQ,CAACS,MAAd,EAAsB;IACpB,OAAO,EAAP;EACD;;EAED,OAAOC,WAAW,CAAC,CACjB5B,eAAA,CAAKC,IAAL,CAAUuB,aAAV,EAAyB,cAAzB,CADiB,EAEjB,GAAGN,QAAQ,CAACrB,GAAT,CAAcgC,GAAD,IAAS7B,eAAA,CAAK8B,OAAL,CAAaD,GAAb,CAAtB,CAFc,CAAD,CAAlB;AAID;;AAED,SAASD,WAAT,CAAqBG,KAArB,EAAgD;EAC9C,OAAO,CAAC,GAAG,IAAIC,GAAJ,CAAQD,KAAR,CAAJ,CAAP;AACD"}
1
+ {"version":3,"file":"getWatchFolders.js","names":["readJsonFile","filePath","file","fs","readFileSync","JSON","parse","isValidJsonFile","globAllPackageJsonPaths","workspaceProjectRoot","linkedPackages","map","glob","globSync","path","join","replace","cwd","absolute","ignore","pkgPath","flat","filter","Boolean","p","getWorkspacePackagesArray","workspaces","Array","isArray","assert","packages","resolveAllWorkspacePackageJsonPaths","rootPackageJsonFilePath","rootPackageJson","getWatchFolders","projectRoot","workspaceRoot","getWorkspaceRoot","resolve","length","uniqueItems","pkg","dirname","items","Set"],"sources":["../src/getWatchFolders.ts"],"sourcesContent":["import assert from 'assert';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\n\nimport { getWorkspaceRoot } from './getModulesPaths';\n\nfunction readJsonFile(filePath: string) {\n // Read with fs\n const file = fs.readFileSync(filePath, 'utf8');\n // Parse with JSON.parse\n return JSON.parse(file);\n}\n\nfunction isValidJsonFile(filePath: string): boolean {\n try {\n // Throws if invalid or unable to read.\n readJsonFile(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * @param workspaceProjectRoot Root file path for the yarn workspace\n * @param linkedPackages List of folders that contain linked node modules, ex: `['packages/*', 'apps/*']`\n * @returns List of valid package.json file paths, ex: `['/Users/me/app/apps/my-app/package.json', '/Users/me/app/packages/my-package/package.json']`\n */\nexport function globAllPackageJsonPaths(\n workspaceProjectRoot: string,\n linkedPackages: string[]\n): string[] {\n return linkedPackages\n .map((glob) => {\n return globSync(path.join(glob, 'package.json').replace(/\\\\/g, '/'), {\n cwd: workspaceProjectRoot,\n absolute: true,\n ignore: ['**/@(Carthage|Pods|node_modules)/**'],\n }).map((pkgPath) => {\n return isValidJsonFile(pkgPath) ? pkgPath : null;\n });\n })\n .flat()\n .filter(Boolean)\n .map((p) => path.join(p as string));\n}\n\nfunction getWorkspacePackagesArray({ workspaces }: any): string[] {\n if (Array.isArray(workspaces)) {\n return workspaces;\n }\n\n assert(workspaces?.packages, 'Could not find a `workspaces` object in the root package.json');\n\n return workspaces.packages;\n}\n\n/**\n * @param workspaceProjectRoot root file path for a yarn workspace.\n * @returns list of package.json file paths that are linked to the yarn workspace.\n */\nexport function resolveAllWorkspacePackageJsonPaths(workspaceProjectRoot: string) {\n try {\n const rootPackageJsonFilePath = path.join(workspaceProjectRoot, 'package.json');\n // Could throw if package.json is invalid.\n const rootPackageJson = readJsonFile(rootPackageJsonFilePath);\n\n // Extract the \"packages\" array or use \"workspaces\" as packages array (yarn workspaces spec).\n const packages = getWorkspacePackagesArray(rootPackageJson);\n\n // Glob all package.json files and return valid paths.\n return globAllPackageJsonPaths(workspaceProjectRoot, packages);\n } catch {\n return [];\n }\n}\n\n/**\n * @param projectRoot file path to app's project root\n * @returns list of node module paths to watch in Metro bundler, ex: `['/Users/me/app/node_modules/', '/Users/me/app/apps/my-app/', '/Users/me/app/packages/my-package/']`\n */\nexport function getWatchFolders(projectRoot: string): string[] {\n const workspaceRoot = getWorkspaceRoot(path.resolve(projectRoot));\n // Rely on default behavior in standard projects.\n if (!workspaceRoot) {\n return [];\n }\n\n const packages = resolveAllWorkspacePackageJsonPaths(workspaceRoot);\n if (!packages.length) {\n return [];\n }\n\n return uniqueItems([\n path.join(workspaceRoot, 'node_modules'),\n ...packages.map((pkg) => path.dirname(pkg)),\n ]);\n}\n\nfunction uniqueItems(items: string[]): string[] {\n return [...new Set(items)];\n}\n"],"mappings":"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"}
@@ -5,46 +5,33 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.importMetroConfigFromProject = importMetroConfigFromProject;
7
7
  exports.importMetroSourceMapFromProject = importMetroSourceMapFromProject;
8
-
9
8
  function _resolveFrom() {
10
9
  const data = _interopRequireDefault(require("resolve-from"));
11
-
12
10
  _resolveFrom = function () {
13
11
  return data;
14
12
  };
15
-
16
13
  return data;
17
14
  }
18
-
19
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
-
21
16
  class MetroImportError extends Error {
22
17
  constructor(projectRoot, moduleId) {
23
18
  super(`Missing package "${moduleId}" in the project at: ${projectRoot}\n` + 'This usually means `react-native` is not installed. ' + 'Please verify that dependencies in package.json include "react-native" ' + 'and run `yarn` or `npm install`.');
24
19
  }
25
-
26
20
  }
27
-
28
21
  function resolveFromProject(projectRoot, moduleId) {
29
22
  const resolvedPath = _resolveFrom().default.silent(projectRoot, moduleId);
30
-
31
23
  if (!resolvedPath) {
32
24
  throw new MetroImportError(projectRoot, moduleId);
33
25
  }
34
-
35
26
  return resolvedPath;
36
27
  }
37
-
38
28
  function importFromProject(projectRoot, moduleId) {
39
29
  return require(resolveFromProject(projectRoot, moduleId));
40
30
  }
41
-
42
31
  function importMetroConfigFromProject(projectRoot) {
43
32
  return importFromProject(projectRoot, 'metro-config');
44
33
  }
45
-
46
34
  let metroSourceMap;
47
-
48
35
  function importMetroSourceMapFromProject(projectRoot) {
49
36
  if (metroSourceMap) return metroSourceMap;
50
37
  metroSourceMap = importFromProject(projectRoot, 'metro-source-map');
@@ -1 +1 @@
1
- {"version":3,"file":"importMetroFromProject.js","names":["MetroImportError","Error","constructor","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","require","importMetroConfigFromProject","metroSourceMap","importMetroSourceMapFromProject"],"sources":["../src/importMetroFromProject.ts"],"sourcesContent":["import type MetroConfig from 'metro-config';\nimport type MetroSourceMap from 'metro-source-map';\nimport resolveFrom from 'resolve-from';\n\nclass MetroImportError extends Error {\n constructor(projectRoot: string, moduleId: string) {\n super(\n `Missing package \"${moduleId}\" in the project at: ${projectRoot}\\n` +\n 'This usually means `react-native` is not installed. ' +\n 'Please verify that dependencies in package.json include \"react-native\" ' +\n 'and run `yarn` or `npm install`.'\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new MetroImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject<T = any>(projectRoot: string, moduleId: string): T {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\nexport function importMetroConfigFromProject(projectRoot: string): typeof MetroConfig {\n return importFromProject(projectRoot, 'metro-config');\n}\n\nlet metroSourceMap: typeof MetroSourceMap | undefined;\n\nexport function importMetroSourceMapFromProject(projectRoot: string): typeof MetroSourceMap {\n if (metroSourceMap) return metroSourceMap;\n metroSourceMap = importFromProject<typeof MetroSourceMap>(projectRoot, 'metro-source-map');\n return metroSourceMap;\n}\n"],"mappings":";;;;;;;;AAEA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;AAEA,MAAMA,gBAAN,SAA+BC,KAA/B,CAAqC;EACnCC,WAAW,CAACC,WAAD,EAAsBC,QAAtB,EAAwC;IACjD,MACG,oBAAmBA,QAAS,wBAAuBD,WAAY,IAAhE,GACE,sDADF,GAEE,yEAFF,GAGE,kCAJJ;EAMD;;AARkC;;AAWrC,SAASE,kBAAT,CAA4BF,WAA5B,EAAiDC,QAAjD,EAAmE;EACjE,MAAME,YAAY,GAAGC,sBAAA,CAAYC,MAAZ,CAAmBL,WAAnB,EAAgCC,QAAhC,CAArB;;EACA,IAAI,CAACE,YAAL,EAAmB;IACjB,MAAM,IAAIN,gBAAJ,CAAqBG,WAArB,EAAkCC,QAAlC,CAAN;EACD;;EACD,OAAOE,YAAP;AACD;;AAED,SAASG,iBAAT,CAAoCN,WAApC,EAAyDC,QAAzD,EAA8E;EAC5E,OAAOM,OAAO,CAACL,kBAAkB,CAACF,WAAD,EAAcC,QAAd,CAAnB,CAAd;AACD;;AAEM,SAASO,4BAAT,CAAsCR,WAAtC,EAA+E;EACpF,OAAOM,iBAAiB,CAACN,WAAD,EAAc,cAAd,CAAxB;AACD;;AAED,IAAIS,cAAJ;;AAEO,SAASC,+BAAT,CAAyCV,WAAzC,EAAqF;EAC1F,IAAIS,cAAJ,EAAoB,OAAOA,cAAP;EACpBA,cAAc,GAAGH,iBAAiB,CAAwBN,WAAxB,EAAqC,kBAArC,CAAlC;EACA,OAAOS,cAAP;AACD"}
1
+ {"version":3,"file":"importMetroFromProject.js","names":["MetroImportError","Error","constructor","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","require","importMetroConfigFromProject","metroSourceMap","importMetroSourceMapFromProject"],"sources":["../src/importMetroFromProject.ts"],"sourcesContent":["import type MetroConfig from 'metro-config';\nimport type MetroSourceMap from 'metro-source-map';\nimport resolveFrom from 'resolve-from';\n\nclass MetroImportError extends Error {\n constructor(projectRoot: string, moduleId: string) {\n super(\n `Missing package \"${moduleId}\" in the project at: ${projectRoot}\\n` +\n 'This usually means `react-native` is not installed. ' +\n 'Please verify that dependencies in package.json include \"react-native\" ' +\n 'and run `yarn` or `npm install`.'\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new MetroImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject<T = any>(projectRoot: string, moduleId: string): T {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\nexport function importMetroConfigFromProject(projectRoot: string): typeof MetroConfig {\n return importFromProject(projectRoot, 'metro-config');\n}\n\nlet metroSourceMap: typeof MetroSourceMap | undefined;\n\nexport function importMetroSourceMapFromProject(projectRoot: string): typeof MetroSourceMap {\n if (metroSourceMap) return metroSourceMap;\n metroSourceMap = importFromProject<typeof MetroSourceMap>(projectRoot, 'metro-source-map');\n return metroSourceMap;\n}\n"],"mappings":";;;;;;;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAuC;AAEvC,MAAMA,gBAAgB,SAASC,KAAK,CAAC;EACnCC,WAAW,CAACC,WAAmB,EAAEC,QAAgB,EAAE;IACjD,KAAK,CACF,oBAAmBA,QAAS,wBAAuBD,WAAY,IAAG,GACjE,sDAAsD,GACtD,yEAAyE,GACzE,kCAAkC,CACrC;EACH;AACF;AAEA,SAASE,kBAAkB,CAACF,WAAmB,EAAEC,QAAgB,EAAE;EACjE,MAAME,YAAY,GAAGC,sBAAW,CAACC,MAAM,CAACL,WAAW,EAAEC,QAAQ,CAAC;EAC9D,IAAI,CAACE,YAAY,EAAE;IACjB,MAAM,IAAIN,gBAAgB,CAACG,WAAW,EAAEC,QAAQ,CAAC;EACnD;EACA,OAAOE,YAAY;AACrB;AAEA,SAASG,iBAAiB,CAAUN,WAAmB,EAAEC,QAAgB,EAAK;EAC5E,OAAOM,OAAO,CAACL,kBAAkB,CAACF,WAAW,EAAEC,QAAQ,CAAC,CAAC;AAC3D;AAEO,SAASO,4BAA4B,CAACR,WAAmB,EAAsB;EACpF,OAAOM,iBAAiB,CAACN,WAAW,EAAE,cAAc,CAAC;AACvD;AAEA,IAAIS,cAAiD;AAE9C,SAASC,+BAA+B,CAACV,WAAmB,EAAyB;EAC1F,IAAIS,cAAc,EAAE,OAAOA,cAAc;EACzCA,cAAc,GAAGH,iBAAiB,CAAwBN,WAAW,EAAE,kBAAkB,CAAC;EAC1F,OAAOS,cAAc;AACvB"}
@@ -4,37 +4,27 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createExoticTransformer = createExoticTransformer;
7
-
8
7
  function _createMatcher() {
9
8
  const data = require("./createMatcher");
10
-
11
9
  _createMatcher = function () {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _createMultiRuleTransformer() {
19
15
  const data = require("./createMultiRuleTransformer");
20
-
21
16
  _createMultiRuleTransformer = function () {
22
17
  return data;
23
18
  };
24
-
25
19
  return data;
26
20
  }
27
-
28
21
  function _getCacheKey() {
29
22
  const data = require("./getCacheKey");
30
-
31
23
  _getCacheKey = function () {
32
24
  return data;
33
25
  };
34
-
35
26
  return data;
36
27
  }
37
-
38
28
  // Copyright 2021-present 650 Industries (Expo). All rights reserved.
39
29
 
40
30
  /**
@@ -58,19 +48,21 @@ function createExoticTransformer({
58
48
  }) {
59
49
  if (!nodeModulesPaths) {
60
50
  nodeModulesPaths = ['node_modules'];
61
- } // Match any node modules, or monorepo module.
62
-
63
-
51
+ }
52
+ // Match any node modules, or monorepo module.
64
53
  const nodeModuleMatcher = (0, _createMatcher().createModuleMatcher)({
65
54
  folders: nodeModulesPaths,
66
55
  moduleIds: []
67
- }); // Match node modules which are so oddly written that we must
68
- // transpile them with every possible option (most expensive).
56
+ });
69
57
 
58
+ // Match node modules which are so oddly written that we must
59
+ // transpile them with every possible option (most expensive).
70
60
  const impossibleNodeModuleMatcher = (0, _createMatcher().createModuleMatcher)({
71
- moduleIds: [// victory is too wild
61
+ moduleIds: [
62
+ // victory is too wild
72
63
  // SyntaxError in ../../node_modules/victory-native/lib/components/victory-primitives/bar.js: Missing semicolon. (9:1)
73
- 'victory', // vector icons has some hidden issues that break NCL
64
+ 'victory',
65
+ // vector icons has some hidden issues that break NCL
74
66
  '@expo/vector-icons', ...(transpileModules || [])],
75
67
  folders: nodeModulesPaths
76
68
  });
@@ -83,10 +75,10 @@ function createExoticTransformer({
83
75
  // Is a node module, and is not one of the impossible modules.
84
76
  return nodeModuleMatcher.test(filename) && !impossibleNodeModuleMatcher.test(filename) ? 'module' : 'app';
85
77
  },
86
-
87
78
  // Order is very important, we use wild card matchers to transpile
88
79
  // "every unhandled node module" and "every unhandled application module".
89
- rules: [// Match bob compiler modules, use the passthrough loader.
80
+ rules: [
81
+ // Match bob compiler modules, use the passthrough loader.
90
82
  {
91
83
  name: 'bob',
92
84
  type: 'module',
@@ -96,7 +88,8 @@ function createExoticTransformer({
96
88
  }),
97
89
  transform: _createMultiRuleTransformer().loaders.passthroughModule,
98
90
  warn: true
99
- }, // Match React Native modules, convert them statically using sucrase.
91
+ },
92
+ // Match React Native modules, convert them statically using sucrase.
100
93
  {
101
94
  name: 'react-native',
102
95
  type: 'module',
@@ -105,7 +98,8 @@ function createExoticTransformer({
105
98
  }),
106
99
  transform: _createMultiRuleTransformer().loaders.reactNativeModule,
107
100
  warn: true
108
- }, // Match Expo SDK modules, convert them statically using sucrase.
101
+ },
102
+ // Match Expo SDK modules, convert them statically using sucrase.
109
103
  {
110
104
  name: 'expo-module',
111
105
  type: 'module',
@@ -114,7 +108,8 @@ function createExoticTransformer({
114
108
  }),
115
109
  transform: _createMultiRuleTransformer().loaders.expoModule,
116
110
  warn: true
117
- }, // Match known problematic modules, convert them statically using an expensive, dynamic sucrase.
111
+ },
112
+ // Match known problematic modules, convert them statically using an expensive, dynamic sucrase.
118
113
  {
119
114
  name: 'sucrase',
120
115
  type: 'module',
@@ -123,7 +118,8 @@ function createExoticTransformer({
123
118
  }),
124
119
  transform: _createMultiRuleTransformer().loaders.untranspiledModule,
125
120
  warn: true
126
- }, // Pass through any unhandled node modules as passthrough, this is where the most savings occur.
121
+ },
122
+ // Pass through any unhandled node modules as passthrough, this is where the most savings occur.
127
123
  // Ideally, you want your project to pass all node modules through this loader.
128
124
  // This should be the last "module" rule.
129
125
  // Message library authors and ask them to ship their modules as pre-transpiled
@@ -133,7 +129,8 @@ function createExoticTransformer({
133
129
  type: 'module',
134
130
  test: () => true,
135
131
  transform: _createMultiRuleTransformer().loaders.passthroughModule
136
- }, // All application code should be transpiled with the user's babel preset,
132
+ },
133
+ // All application code should be transpiled with the user's babel preset,
137
134
  // this is the most expensive operation but provides the most customization to the user.
138
135
  // The goal is to use this as sparingly as possible.
139
136
  {
@@ -1 +1 @@
1
- {"version":3,"file":"createExoticTransformer.js","names":["createExoticTransformer","nodeModulesPaths","transpileModules","nodeModuleMatcher","createModuleMatcher","folders","moduleIds","impossibleNodeModuleMatcher","transform","createMultiRuleTransformer","getRuleType","filename","test","rules","name","type","loaders","passthroughModule","warn","createReactNativeMatcher","reactNativeModule","createExpoMatcher","expoModule","createKnownCommunityMatcher","untranspiledModule","app","getCacheKey"],"sources":["../../src/transformer/createExoticTransformer.ts"],"sourcesContent":["// Copyright 2021-present 650 Industries (Expo). All rights reserved.\nimport { BabelTransformer } from 'metro-babel-transformer';\n\nimport {\n createExpoMatcher,\n createKnownCommunityMatcher,\n createModuleMatcher,\n createReactNativeMatcher,\n} from './createMatcher';\nimport { createMultiRuleTransformer, loaders } from './createMultiRuleTransformer';\nimport { getCacheKey } from './getCacheKey';\n\n/**\n * Create an experimental multi-rule transformer for a React Native app.\n *\n * @example\n * ```\n * module.exports = createExoticTransformer({\n * nodeModulesPaths: ['react-native'],\n * transpileModules: ['@stripe/stripe-react-native'],\n * });\n * ```\n *\n * @param props.nodeModulesPaths paths to node_modules folders, relative to project root. Default: `['node_modules']`\n * @param props.transpileModules matchers for module names that should be transpiled using the project Babel configuration. Example: `['@stripe/stripe-react-native']`\n * @returns a Metro `transformer` function and default `getCacheKey` function.\n */\nexport function createExoticTransformer({\n nodeModulesPaths,\n transpileModules,\n}: {\n nodeModulesPaths?: string[];\n transpileModules?: string[];\n}): BabelTransformer {\n if (!nodeModulesPaths) {\n nodeModulesPaths = ['node_modules'];\n }\n // Match any node modules, or monorepo module.\n const nodeModuleMatcher = createModuleMatcher({ folders: nodeModulesPaths, moduleIds: [] });\n\n // Match node modules which are so oddly written that we must\n // transpile them with every possible option (most expensive).\n const impossibleNodeModuleMatcher = createModuleMatcher({\n moduleIds: [\n // victory is too wild\n // SyntaxError in ../../node_modules/victory-native/lib/components/victory-primitives/bar.js: Missing semicolon. (9:1)\n 'victory',\n // vector icons has some hidden issues that break NCL\n '@expo/vector-icons',\n ...(transpileModules || []),\n ],\n folders: nodeModulesPaths,\n });\n\n const transform = createMultiRuleTransformer({\n // Specify which rules to use on a per-file basis, basically\n // this is used to determine which modules are node modules, and which are application code.\n getRuleType({ filename }) {\n // Is a node module, and is not one of the impossible modules.\n return nodeModuleMatcher.test(filename) && !impossibleNodeModuleMatcher.test(filename)\n ? 'module'\n : 'app';\n },\n\n // Order is very important, we use wild card matchers to transpile\n // \"every unhandled node module\" and \"every unhandled application module\".\n rules: [\n // Match bob compiler modules, use the passthrough loader.\n {\n name: 'bob',\n type: 'module',\n test: createModuleMatcher({ moduleIds: ['.*/lib/commonjs/'], folders: nodeModulesPaths }),\n transform: loaders.passthroughModule,\n warn: true,\n },\n // Match React Native modules, convert them statically using sucrase.\n {\n name: 'react-native',\n type: 'module',\n test: createReactNativeMatcher({ folders: nodeModulesPaths }),\n transform: loaders.reactNativeModule,\n warn: true,\n },\n // Match Expo SDK modules, convert them statically using sucrase.\n {\n name: 'expo-module',\n type: 'module',\n test: createExpoMatcher({ folders: nodeModulesPaths }),\n transform: loaders.expoModule,\n warn: true,\n },\n // Match known problematic modules, convert them statically using an expensive, dynamic sucrase.\n {\n name: 'sucrase',\n type: 'module',\n test: createKnownCommunityMatcher({\n folders: nodeModulesPaths,\n }),\n transform: loaders.untranspiledModule,\n warn: true,\n },\n // Pass through any unhandled node modules as passthrough, this is where the most savings occur.\n // Ideally, you want your project to pass all node modules through this loader.\n // This should be the last \"module\" rule.\n // Message library authors and ask them to ship their modules as pre-transpiled\n // commonjs, to improve the development speed of your project.\n {\n name: 'skip-module',\n type: 'module',\n test: () => true,\n transform: loaders.passthroughModule,\n },\n // All application code should be transpiled with the user's babel preset,\n // this is the most expensive operation but provides the most customization to the user.\n // The goal is to use this as sparingly as possible.\n {\n name: 'babel',\n test: () => true,\n transform: loaders.app,\n },\n ],\n });\n\n return {\n transform,\n getCacheKey,\n };\n}\n"],"mappings":";;;;;;;AAGA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAMA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAVA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,uBAAT,CAAiC;EACtCC,gBADsC;EAEtCC;AAFsC,CAAjC,EAMc;EACnB,IAAI,CAACD,gBAAL,EAAuB;IACrBA,gBAAgB,GAAG,CAAC,cAAD,CAAnB;EACD,CAHkB,CAInB;;;EACA,MAAME,iBAAiB,GAAG,IAAAC,oCAAA,EAAoB;IAAEC,OAAO,EAAEJ,gBAAX;IAA6BK,SAAS,EAAE;EAAxC,CAApB,CAA1B,CALmB,CAOnB;EACA;;EACA,MAAMC,2BAA2B,GAAG,IAAAH,oCAAA,EAAoB;IACtDE,SAAS,EAAE,CACT;IACA;IACA,SAHS,EAIT;IACA,oBALS,EAMT,IAAIJ,gBAAgB,IAAI,EAAxB,CANS,CAD2C;IAStDG,OAAO,EAAEJ;EAT6C,CAApB,CAApC;EAYA,MAAMO,SAAS,GAAG,IAAAC,wDAAA,EAA2B;IAC3C;IACA;IACAC,WAAW,CAAC;MAAEC;IAAF,CAAD,EAAe;MACxB;MACA,OAAOR,iBAAiB,CAACS,IAAlB,CAAuBD,QAAvB,KAAoC,CAACJ,2BAA2B,CAACK,IAA5B,CAAiCD,QAAjC,CAArC,GACH,QADG,GAEH,KAFJ;IAGD,CAR0C;;IAU3C;IACA;IACAE,KAAK,EAAE,CACL;IACA;MACEC,IAAI,EAAE,KADR;MAEEC,IAAI,EAAE,QAFR;MAGEH,IAAI,EAAE,IAAAR,oCAAA,EAAoB;QAAEE,SAAS,EAAE,CAAC,kBAAD,CAAb;QAAmCD,OAAO,EAAEJ;MAA5C,CAApB,CAHR;MAIEO,SAAS,EAAEQ,qCAAA,CAAQC,iBAJrB;MAKEC,IAAI,EAAE;IALR,CAFK,EASL;IACA;MACEJ,IAAI,EAAE,cADR;MAEEC,IAAI,EAAE,QAFR;MAGEH,IAAI,EAAE,IAAAO,yCAAA,EAAyB;QAAEd,OAAO,EAAEJ;MAAX,CAAzB,CAHR;MAIEO,SAAS,EAAEQ,qCAAA,CAAQI,iBAJrB;MAKEF,IAAI,EAAE;IALR,CAVK,EAiBL;IACA;MACEJ,IAAI,EAAE,aADR;MAEEC,IAAI,EAAE,QAFR;MAGEH,IAAI,EAAE,IAAAS,kCAAA,EAAkB;QAAEhB,OAAO,EAAEJ;MAAX,CAAlB,CAHR;MAIEO,SAAS,EAAEQ,qCAAA,CAAQM,UAJrB;MAKEJ,IAAI,EAAE;IALR,CAlBK,EAyBL;IACA;MACEJ,IAAI,EAAE,SADR;MAEEC,IAAI,EAAE,QAFR;MAGEH,IAAI,EAAE,IAAAW,4CAAA,EAA4B;QAChClB,OAAO,EAAEJ;MADuB,CAA5B,CAHR;MAMEO,SAAS,EAAEQ,qCAAA,CAAQQ,kBANrB;MAOEN,IAAI,EAAE;IAPR,CA1BK,EAmCL;IACA;IACA;IACA;IACA;IACA;MACEJ,IAAI,EAAE,aADR;MAEEC,IAAI,EAAE,QAFR;MAGEH,IAAI,EAAE,MAAM,IAHd;MAIEJ,SAAS,EAAEQ,qCAAA,CAAQC;IAJrB,CAxCK,EA8CL;IACA;IACA;IACA;MACEH,IAAI,EAAE,OADR;MAEEF,IAAI,EAAE,MAAM,IAFd;MAGEJ,SAAS,EAAEQ,qCAAA,CAAQS;IAHrB,CAjDK;EAZoC,CAA3B,CAAlB;EAqEA,OAAO;IACLjB,SADK;IAELkB,WAAW,EAAXA;EAFK,CAAP;AAID"}
1
+ {"version":3,"file":"createExoticTransformer.js","names":["createExoticTransformer","nodeModulesPaths","transpileModules","nodeModuleMatcher","createModuleMatcher","folders","moduleIds","impossibleNodeModuleMatcher","transform","createMultiRuleTransformer","getRuleType","filename","test","rules","name","type","loaders","passthroughModule","warn","createReactNativeMatcher","reactNativeModule","createExpoMatcher","expoModule","createKnownCommunityMatcher","untranspiledModule","app","getCacheKey"],"sources":["../../src/transformer/createExoticTransformer.ts"],"sourcesContent":["// Copyright 2021-present 650 Industries (Expo). All rights reserved.\nimport { BabelTransformer } from 'metro-babel-transformer';\n\nimport {\n createExpoMatcher,\n createKnownCommunityMatcher,\n createModuleMatcher,\n createReactNativeMatcher,\n} from './createMatcher';\nimport { createMultiRuleTransformer, loaders } from './createMultiRuleTransformer';\nimport { getCacheKey } from './getCacheKey';\n\n/**\n * Create an experimental multi-rule transformer for a React Native app.\n *\n * @example\n * ```\n * module.exports = createExoticTransformer({\n * nodeModulesPaths: ['react-native'],\n * transpileModules: ['@stripe/stripe-react-native'],\n * });\n * ```\n *\n * @param props.nodeModulesPaths paths to node_modules folders, relative to project root. Default: `['node_modules']`\n * @param props.transpileModules matchers for module names that should be transpiled using the project Babel configuration. Example: `['@stripe/stripe-react-native']`\n * @returns a Metro `transformer` function and default `getCacheKey` function.\n */\nexport function createExoticTransformer({\n nodeModulesPaths,\n transpileModules,\n}: {\n nodeModulesPaths?: string[];\n transpileModules?: string[];\n}): BabelTransformer {\n if (!nodeModulesPaths) {\n nodeModulesPaths = ['node_modules'];\n }\n // Match any node modules, or monorepo module.\n const nodeModuleMatcher = createModuleMatcher({ folders: nodeModulesPaths, moduleIds: [] });\n\n // Match node modules which are so oddly written that we must\n // transpile them with every possible option (most expensive).\n const impossibleNodeModuleMatcher = createModuleMatcher({\n moduleIds: [\n // victory is too wild\n // SyntaxError in ../../node_modules/victory-native/lib/components/victory-primitives/bar.js: Missing semicolon. (9:1)\n 'victory',\n // vector icons has some hidden issues that break NCL\n '@expo/vector-icons',\n ...(transpileModules || []),\n ],\n folders: nodeModulesPaths,\n });\n\n const transform = createMultiRuleTransformer({\n // Specify which rules to use on a per-file basis, basically\n // this is used to determine which modules are node modules, and which are application code.\n getRuleType({ filename }) {\n // Is a node module, and is not one of the impossible modules.\n return nodeModuleMatcher.test(filename) && !impossibleNodeModuleMatcher.test(filename)\n ? 'module'\n : 'app';\n },\n\n // Order is very important, we use wild card matchers to transpile\n // \"every unhandled node module\" and \"every unhandled application module\".\n rules: [\n // Match bob compiler modules, use the passthrough loader.\n {\n name: 'bob',\n type: 'module',\n test: createModuleMatcher({ moduleIds: ['.*/lib/commonjs/'], folders: nodeModulesPaths }),\n transform: loaders.passthroughModule,\n warn: true,\n },\n // Match React Native modules, convert them statically using sucrase.\n {\n name: 'react-native',\n type: 'module',\n test: createReactNativeMatcher({ folders: nodeModulesPaths }),\n transform: loaders.reactNativeModule,\n warn: true,\n },\n // Match Expo SDK modules, convert them statically using sucrase.\n {\n name: 'expo-module',\n type: 'module',\n test: createExpoMatcher({ folders: nodeModulesPaths }),\n transform: loaders.expoModule,\n warn: true,\n },\n // Match known problematic modules, convert them statically using an expensive, dynamic sucrase.\n {\n name: 'sucrase',\n type: 'module',\n test: createKnownCommunityMatcher({\n folders: nodeModulesPaths,\n }),\n transform: loaders.untranspiledModule,\n warn: true,\n },\n // Pass through any unhandled node modules as passthrough, this is where the most savings occur.\n // Ideally, you want your project to pass all node modules through this loader.\n // This should be the last \"module\" rule.\n // Message library authors and ask them to ship their modules as pre-transpiled\n // commonjs, to improve the development speed of your project.\n {\n name: 'skip-module',\n type: 'module',\n test: () => true,\n transform: loaders.passthroughModule,\n },\n // All application code should be transpiled with the user's babel preset,\n // this is the most expensive operation but provides the most customization to the user.\n // The goal is to use this as sparingly as possible.\n {\n name: 'babel',\n test: () => true,\n transform: loaders.app,\n },\n ],\n });\n\n return {\n transform,\n getCacheKey,\n };\n}\n"],"mappings":";;;;;;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAMA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAVA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,uBAAuB,CAAC;EACtCC,gBAAgB;EAChBC;AAIF,CAAC,EAAoB;EACnB,IAAI,CAACD,gBAAgB,EAAE;IACrBA,gBAAgB,GAAG,CAAC,cAAc,CAAC;EACrC;EACA;EACA,MAAME,iBAAiB,GAAG,IAAAC,oCAAmB,EAAC;IAAEC,OAAO,EAAEJ,gBAAgB;IAAEK,SAAS,EAAE;EAAG,CAAC,CAAC;;EAE3F;EACA;EACA,MAAMC,2BAA2B,GAAG,IAAAH,oCAAmB,EAAC;IACtDE,SAAS,EAAE;IACT;IACA;IACA,SAAS;IACT;IACA,oBAAoB,EACpB,IAAIJ,gBAAgB,IAAI,EAAE,CAAC,CAC5B;IACDG,OAAO,EAAEJ;EACX,CAAC,CAAC;EAEF,MAAMO,SAAS,GAAG,IAAAC,wDAA0B,EAAC;IAC3C;IACA;IACAC,WAAW,CAAC;MAAEC;IAAS,CAAC,EAAE;MACxB;MACA,OAAOR,iBAAiB,CAACS,IAAI,CAACD,QAAQ,CAAC,IAAI,CAACJ,2BAA2B,CAACK,IAAI,CAACD,QAAQ,CAAC,GAClF,QAAQ,GACR,KAAK;IACX,CAAC;IAED;IACA;IACAE,KAAK,EAAE;IACL;IACA;MACEC,IAAI,EAAE,KAAK;MACXC,IAAI,EAAE,QAAQ;MACdH,IAAI,EAAE,IAAAR,oCAAmB,EAAC;QAAEE,SAAS,EAAE,CAAC,kBAAkB,CAAC;QAAED,OAAO,EAAEJ;MAAiB,CAAC,CAAC;MACzFO,SAAS,EAAEQ,qCAAO,CAACC,iBAAiB;MACpCC,IAAI,EAAE;IACR,CAAC;IACD;IACA;MACEJ,IAAI,EAAE,cAAc;MACpBC,IAAI,EAAE,QAAQ;MACdH,IAAI,EAAE,IAAAO,yCAAwB,EAAC;QAAEd,OAAO,EAAEJ;MAAiB,CAAC,CAAC;MAC7DO,SAAS,EAAEQ,qCAAO,CAACI,iBAAiB;MACpCF,IAAI,EAAE;IACR,CAAC;IACD;IACA;MACEJ,IAAI,EAAE,aAAa;MACnBC,IAAI,EAAE,QAAQ;MACdH,IAAI,EAAE,IAAAS,kCAAiB,EAAC;QAAEhB,OAAO,EAAEJ;MAAiB,CAAC,CAAC;MACtDO,SAAS,EAAEQ,qCAAO,CAACM,UAAU;MAC7BJ,IAAI,EAAE;IACR,CAAC;IACD;IACA;MACEJ,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,QAAQ;MACdH,IAAI,EAAE,IAAAW,4CAA2B,EAAC;QAChClB,OAAO,EAAEJ;MACX,CAAC,CAAC;MACFO,SAAS,EAAEQ,qCAAO,CAACQ,kBAAkB;MACrCN,IAAI,EAAE;IACR,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;MACEJ,IAAI,EAAE,aAAa;MACnBC,IAAI,EAAE,QAAQ;MACdH,IAAI,EAAE,MAAM,IAAI;MAChBJ,SAAS,EAAEQ,qCAAO,CAACC;IACrB,CAAC;IACD;IACA;IACA;IACA;MACEH,IAAI,EAAE,OAAO;MACbF,IAAI,EAAE,MAAM,IAAI;MAChBJ,SAAS,EAAEQ,qCAAO,CAACS;IACrB,CAAC;EAEL,CAAC,CAAC;EAEF,OAAO;IACLjB,SAAS;IACTkB,WAAW,EAAXA;EACF,CAAC;AACH"}
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createKnownCommunityMatcher = exports.createExpoMatcher = void 0;
7
7
  exports.createModuleMatcher = createModuleMatcher;
8
8
  exports.createReactNativeMatcher = void 0;
9
-
10
9
  // Copyright 2021-present 650 Industries (Expo). All rights reserved.
10
+
11
11
  function createModuleMatcher({
12
12
  folders = ['node_modules'],
13
13
  moduleIds
@@ -17,41 +17,41 @@ function createModuleMatcher({
17
17
  const moduleMatcherId = '^' + [modulePathsGroup, moduleMatchersGroup].map(value => `(?:${value})`).join('/');
18
18
  return new RegExp(moduleMatcherId);
19
19
  }
20
-
21
20
  const createReactNativeMatcher = ({
22
21
  folders
23
22
  }) => createModuleMatcher({
24
23
  folders,
25
24
  moduleIds: ['react-native/']
26
25
  });
27
-
28
26
  exports.createReactNativeMatcher = createReactNativeMatcher;
29
-
30
27
  const createExpoMatcher = ({
31
28
  folders
32
29
  }) => createModuleMatcher({
33
30
  folders,
34
31
  // We'll work to start reducing this.
35
32
  moduleIds: ['expo', '@expo', '@unimodules', '@use-expo']
36
- }); // TODO: Make this list as short as possible before releasing.
37
- // TODO: Add SDK version compat list.
38
-
33
+ });
39
34
 
35
+ // TODO: Make this list as short as possible before releasing.
36
+ // TODO: Add SDK version compat list.
40
37
  exports.createExpoMatcher = createExpoMatcher;
41
-
42
38
  const createKnownCommunityMatcher = ({
43
39
  folders,
44
40
  moduleIds = []
45
41
  } = {}) => createModuleMatcher({
46
42
  folders,
47
- moduleIds: [...moduleIds, // The more complex, the longer the entire project takes...
43
+ moduleIds: [...moduleIds,
44
+ // The more complex, the longer the entire project takes...
48
45
  // react-native-community, react-native-masked-view, react-native-picker, react-native-segmented-control, react-native
49
- '@react-', // @sentry/react-native
50
- '@(?:[\\w|-]+)/react-native', 'react-native-', 'victory-', 'native-base', 'styled-components', // three.js
51
- 'three/build/three.module.js', 'three/examples/jsm', // Special case for testing expo/expo repo
52
- 'html-elements/', // shared-element
46
+ '@react-',
47
+ // @sentry/react-native
48
+ '@(?:[\\w|-]+)/react-native', 'react-native-', 'victory-', 'native-base', 'styled-components',
49
+ // three.js
50
+ 'three/build/three.module.js', 'three/examples/jsm',
51
+ // Special case for testing expo/expo repo
52
+ 'html-elements/',
53
+ // shared-element
53
54
  'react-navigation-']
54
55
  });
55
-
56
56
  exports.createKnownCommunityMatcher = createKnownCommunityMatcher;
57
57
  //# sourceMappingURL=createMatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createMatcher.js","names":["createModuleMatcher","folders","moduleIds","modulePathsGroup","join","moduleMatchersGroup","moduleMatcherId","map","value","RegExp","createReactNativeMatcher","createExpoMatcher","createKnownCommunityMatcher"],"sources":["../../src/transformer/createMatcher.ts"],"sourcesContent":["// Copyright 2021-present 650 Industries (Expo). All rights reserved.\n\nexport function createModuleMatcher({\n folders = ['node_modules'],\n moduleIds,\n}: {\n folders?: string[];\n moduleIds: string[];\n}) {\n const modulePathsGroup = folders.join('|');\n\n const moduleMatchersGroup = moduleIds.join('|');\n\n const moduleMatcherId =\n '^' + [modulePathsGroup, moduleMatchersGroup].map((value) => `(?:${value})`).join('/');\n\n return new RegExp(moduleMatcherId);\n}\n\nexport const createReactNativeMatcher = ({ folders }: { folders?: string[] }) =>\n createModuleMatcher({\n folders,\n moduleIds: ['react-native/'],\n });\n\nexport const createExpoMatcher = ({ folders }: { folders?: string[] }) =>\n createModuleMatcher({\n folders,\n // We'll work to start reducing this.\n moduleIds: ['expo', '@expo', '@unimodules', '@use-expo'],\n });\n\n// TODO: Make this list as short as possible before releasing.\n// TODO: Add SDK version compat list.\nexport const createKnownCommunityMatcher = ({\n folders,\n moduleIds = [],\n}: {\n folders?: string[];\n moduleIds?: string[];\n} = {}) =>\n createModuleMatcher({\n folders,\n moduleIds: [\n ...moduleIds,\n // The more complex, the longer the entire project takes...\n // react-native-community, react-native-masked-view, react-native-picker, react-native-segmented-control, react-native\n '@react-',\n // @sentry/react-native\n '@(?:[\\\\w|-]+)/react-native',\n 'react-native-',\n 'victory-',\n 'native-base',\n 'styled-components',\n // three.js\n 'three/build/three.module.js',\n 'three/examples/jsm',\n // Special case for testing expo/expo repo\n 'html-elements/',\n // shared-element\n 'react-navigation-',\n ],\n });\n"],"mappings":";;;;;;;;;AAAA;AAEO,SAASA,mBAAT,CAA6B;EAClCC,OAAO,GAAG,CAAC,cAAD,CADwB;EAElCC;AAFkC,CAA7B,EAMJ;EACD,MAAMC,gBAAgB,GAAGF,OAAO,CAACG,IAAR,CAAa,GAAb,CAAzB;EAEA,MAAMC,mBAAmB,GAAGH,SAAS,CAACE,IAAV,CAAe,GAAf,CAA5B;EAEA,MAAME,eAAe,GACnB,MAAM,CAACH,gBAAD,EAAmBE,mBAAnB,EAAwCE,GAAxC,CAA6CC,KAAD,IAAY,MAAKA,KAAM,GAAnE,EAAuEJ,IAAvE,CAA4E,GAA5E,CADR;EAGA,OAAO,IAAIK,MAAJ,CAAWH,eAAX,CAAP;AACD;;AAEM,MAAMI,wBAAwB,GAAG,CAAC;EAAET;AAAF,CAAD,KACtCD,mBAAmB,CAAC;EAClBC,OADkB;EAElBC,SAAS,EAAE,CAAC,eAAD;AAFO,CAAD,CADd;;;;AAMA,MAAMS,iBAAiB,GAAG,CAAC;EAAEV;AAAF,CAAD,KAC/BD,mBAAmB,CAAC;EAClBC,OADkB;EAElB;EACAC,SAAS,EAAE,CAAC,MAAD,EAAS,OAAT,EAAkB,aAAlB,EAAiC,WAAjC;AAHO,CAAD,CADd,C,CAOP;AACA;;;;;AACO,MAAMU,2BAA2B,GAAG,CAAC;EAC1CX,OAD0C;EAE1CC,SAAS,GAAG;AAF8B,IAMxC,EANuC,KAOzCF,mBAAmB,CAAC;EAClBC,OADkB;EAElBC,SAAS,EAAE,CACT,GAAGA,SADM,EAET;EACA;EACA,SAJS,EAKT;EACA,4BANS,EAOT,eAPS,EAQT,UARS,EAST,aATS,EAUT,mBAVS,EAWT;EACA,6BAZS,EAaT,oBAbS,EAcT;EACA,gBAfS,EAgBT;EACA,mBAjBS;AAFO,CAAD,CAPd"}
1
+ {"version":3,"file":"createMatcher.js","names":["createModuleMatcher","folders","moduleIds","modulePathsGroup","join","moduleMatchersGroup","moduleMatcherId","map","value","RegExp","createReactNativeMatcher","createExpoMatcher","createKnownCommunityMatcher"],"sources":["../../src/transformer/createMatcher.ts"],"sourcesContent":["// Copyright 2021-present 650 Industries (Expo). All rights reserved.\n\nexport function createModuleMatcher({\n folders = ['node_modules'],\n moduleIds,\n}: {\n folders?: string[];\n moduleIds: string[];\n}) {\n const modulePathsGroup = folders.join('|');\n\n const moduleMatchersGroup = moduleIds.join('|');\n\n const moduleMatcherId =\n '^' + [modulePathsGroup, moduleMatchersGroup].map((value) => `(?:${value})`).join('/');\n\n return new RegExp(moduleMatcherId);\n}\n\nexport const createReactNativeMatcher = ({ folders }: { folders?: string[] }) =>\n createModuleMatcher({\n folders,\n moduleIds: ['react-native/'],\n });\n\nexport const createExpoMatcher = ({ folders }: { folders?: string[] }) =>\n createModuleMatcher({\n folders,\n // We'll work to start reducing this.\n moduleIds: ['expo', '@expo', '@unimodules', '@use-expo'],\n });\n\n// TODO: Make this list as short as possible before releasing.\n// TODO: Add SDK version compat list.\nexport const createKnownCommunityMatcher = ({\n folders,\n moduleIds = [],\n}: {\n folders?: string[];\n moduleIds?: string[];\n} = {}) =>\n createModuleMatcher({\n folders,\n moduleIds: [\n ...moduleIds,\n // The more complex, the longer the entire project takes...\n // react-native-community, react-native-masked-view, react-native-picker, react-native-segmented-control, react-native\n '@react-',\n // @sentry/react-native\n '@(?:[\\\\w|-]+)/react-native',\n 'react-native-',\n 'victory-',\n 'native-base',\n 'styled-components',\n // three.js\n 'three/build/three.module.js',\n 'three/examples/jsm',\n // Special case for testing expo/expo repo\n 'html-elements/',\n // shared-element\n 'react-navigation-',\n ],\n });\n"],"mappings":";;;;;;;;AAAA;;AAEO,SAASA,mBAAmB,CAAC;EAClCC,OAAO,GAAG,CAAC,cAAc,CAAC;EAC1BC;AAIF,CAAC,EAAE;EACD,MAAMC,gBAAgB,GAAGF,OAAO,CAACG,IAAI,CAAC,GAAG,CAAC;EAE1C,MAAMC,mBAAmB,GAAGH,SAAS,CAACE,IAAI,CAAC,GAAG,CAAC;EAE/C,MAAME,eAAe,GACnB,GAAG,GAAG,CAACH,gBAAgB,EAAEE,mBAAmB,CAAC,CAACE,GAAG,CAAEC,KAAK,IAAM,MAAKA,KAAM,GAAE,CAAC,CAACJ,IAAI,CAAC,GAAG,CAAC;EAExF,OAAO,IAAIK,MAAM,CAACH,eAAe,CAAC;AACpC;AAEO,MAAMI,wBAAwB,GAAG,CAAC;EAAET;AAAgC,CAAC,KAC1ED,mBAAmB,CAAC;EAClBC,OAAO;EACPC,SAAS,EAAE,CAAC,eAAe;AAC7B,CAAC,CAAC;AAAC;AAEE,MAAMS,iBAAiB,GAAG,CAAC;EAAEV;AAAgC,CAAC,KACnED,mBAAmB,CAAC;EAClBC,OAAO;EACP;EACAC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW;AACzD,CAAC,CAAC;;AAEJ;AACA;AAAA;AACO,MAAMU,2BAA2B,GAAG,CAAC;EAC1CX,OAAO;EACPC,SAAS,GAAG;AAId,CAAC,GAAG,CAAC,CAAC,KACJF,mBAAmB,CAAC;EAClBC,OAAO;EACPC,SAAS,EAAE,CACT,GAAGA,SAAS;EACZ;EACA;EACA,SAAS;EACT;EACA,4BAA4B,EAC5B,eAAe,EACf,UAAU,EACV,aAAa,EACb,mBAAmB;EACnB;EACA,6BAA6B,EAC7B,oBAAoB;EACpB;EACA,gBAAgB;EAChB;EACA,mBAAmB;AAEvB,CAAC,CAAC;AAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { BabelTransformer, BabelTransformerArgs } from 'metro-babel-transformer';
2
- export declare type Rule = {
2
+ export type Rule = {
3
3
  warn?: boolean;
4
4
  type?: 'module' | 'app';
5
5
  name?: string;