@vxrn/vite-plugin-metro 1.16.12 → 1.17.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 (51) hide show
  1. package/dist/cjs/index.cjs +7 -2
  2. package/dist/cjs/index.native.js +6 -1
  3. package/dist/cjs/index.native.js.map +1 -1
  4. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +89 -0
  5. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +94 -0
  6. package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  7. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.cjs +2 -1
  8. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +2 -1
  9. package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
  10. package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
  11. package/dist/cjs/transformer/babel-transformer.cjs +11 -4
  12. package/dist/cjs/transformer/babel-transformer.native.js +12 -5
  13. package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
  14. package/dist/esm/index.js +3 -1
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/index.mjs +3 -1
  17. package/dist/esm/index.mjs.map +1 -1
  18. package/dist/esm/index.native.js +3 -1
  19. package/dist/esm/index.native.js.map +1 -1
  20. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +89 -1
  21. package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
  22. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +94 -1
  23. package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
  24. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs +2 -1
  25. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs.map +1 -1
  26. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +2 -1
  27. package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
  28. package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
  29. package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
  30. package/dist/esm/transformer/babel-transformer.mjs +11 -4
  31. package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
  32. package/dist/esm/transformer/babel-transformer.native.js +12 -5
  33. package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
  34. package/package.json +2 -2
  35. package/src/index.ts +5 -0
  36. package/src/metro-config/getMetroConfigFromViteConfig.ts +145 -0
  37. package/src/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.ts +1 -0
  38. package/src/plugins/metroPlugin.ts +5 -0
  39. package/src/transformer/babel-transformer.ts +22 -13
  40. package/src/transformer/types.ts +5 -0
  41. package/types/index.d.ts +2 -0
  42. package/types/index.d.ts.map +1 -1
  43. package/types/metro-config/getMetroConfigFromViteConfig.d.ts +14 -1
  44. package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
  45. package/types/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts.map +1 -1
  46. package/types/plugins/metroPlugin.d.ts +5 -0
  47. package/types/plugins/metroPlugin.d.ts.map +1 -1
  48. package/types/transformer/babel-transformer.d.ts +1 -0
  49. package/types/transformer/babel-transformer.d.ts.map +1 -1
  50. package/types/transformer/types.d.ts +5 -0
  51. package/types/transformer/types.d.ts.map +1 -1
@@ -59,6 +59,151 @@ async function isWatchmanResponsive(projectRoot: string) {
59
59
  return probe
60
60
  }
61
61
 
62
+ /**
63
+ * Build the Metro config input WITHOUT calling Metro's `loadConfig`. Returns
64
+ * the same shape Metro `loadConfig` expects as its second argument. Use this
65
+ * from a project's `metro.config.cjs` so the outer `loadConfig` (driven by
66
+ * Expo CLI / Metro CLI) is the only one that runs — avoids infinite
67
+ * recursion that would happen if the inner pipeline also called `loadConfig`
68
+ * and re-read the same metro.config.cjs.
69
+ */
70
+ export async function buildMetroConfigInputFromViteConfig(
71
+ config: ResolvedConfig,
72
+ metroPluginOptions: MetroPluginOptions
73
+ ): Promise<{ defaultConfig: any; projectRoot: string; extraConfig: ExtraConfig }> {
74
+ const extraConfig: ExtraConfig = {}
75
+ const projectRoot = resolve(metroPluginOptions.argv?.projectRoot ?? config.root)
76
+ const { mainModuleName, defaultConfigOverrides, watchman, excludeModules } =
77
+ metroPluginOptions
78
+ const useWatchman = watchman ?? (await isWatchmanResponsive(projectRoot))
79
+
80
+ if (watchman === undefined && !useWatchman && !didWarnAboutWatchmanFallback) {
81
+ didWarnAboutWatchmanFallback = true
82
+ console.warn(
83
+ '[vxrn/metro] Watchman is unavailable or unresponsive; falling back to Node file watching.'
84
+ )
85
+ }
86
+
87
+ const { getDefaultConfig } = await projectImport<{
88
+ getDefaultConfig: typeof getDefaultConfigT
89
+ }>(projectRoot, '@expo/metro-config')
90
+
91
+ const _defaultConfig: MetroInputConfig = getDefaultConfig(projectRoot) as any
92
+
93
+ if (mainModuleName) {
94
+ const origRewriteRequestUrl = _defaultConfig!.server!.rewriteRequestUrl!
95
+
96
+ const resolveMainModuleName: (p: { platform: 'ios' | 'android' }) => string =
97
+ await (async () => {
98
+ const ExpoGoManifestHandlerMiddleware = (
99
+ await projectImport(
100
+ projectRoot,
101
+ '@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js'
102
+ )
103
+ ).default.ExpoGoManifestHandlerMiddleware
104
+
105
+ const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(
106
+ projectRoot,
107
+ {}
108
+ )
109
+
110
+ patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(
111
+ manifestHandlerMiddleware,
112
+ mainModuleName
113
+ )
114
+
115
+ return (p) => {
116
+ return manifestHandlerMiddleware.resolveMainModuleName({
117
+ pkg: { main: mainModuleName },
118
+ platform: p.platform,
119
+ })
120
+ }
121
+ })()
122
+
123
+ extraConfig.getResolveMainModuleName = resolveMainModuleName
124
+
125
+ // @ts-expect-error Metro 0.83 made this read-only in types but we need to patch it
126
+ _defaultConfig!.server!.rewriteRequestUrl = (url) => {
127
+ if (url.includes('/.expo/.virtual-metro-entry.bundle?')) {
128
+ const resolvedMainModulePath = resolveMainModuleName({ platform: 'ios' })
129
+ return url.replace('.expo/.virtual-metro-entry', resolvedMainModulePath)
130
+ }
131
+ return origRewriteRequestUrl(url)
132
+ }
133
+ }
134
+
135
+ const existingBlockList = _defaultConfig?.resolver?.blockList
136
+ const buildOutputExclusions = [
137
+ /[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
138
+ /[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
139
+ /[/\\]\.docker(?:[/\\]|$)/,
140
+ /[/\\]\.vite(?:[/\\]|$)/,
141
+ ]
142
+ const blockList: RegExp[] = [
143
+ ...(existingBlockList
144
+ ? Array.isArray(existingBlockList)
145
+ ? existingBlockList
146
+ : [existingBlockList]
147
+ : []),
148
+ ...buildOutputExclusions,
149
+ ]
150
+
151
+ const defaultConfig: MetroInputConfig = {
152
+ ..._defaultConfig,
153
+ resolver: {
154
+ ..._defaultConfig?.resolver,
155
+ useWatchman,
156
+ blockList,
157
+ sourceExts: ['js', 'jsx', 'json', 'ts', 'tsx', 'mjs', 'cjs'], // `one` related packages are using `.mjs` extensions. This fixes `.native` files not being resolved correctly when `.mjs` files are present.
158
+ resolveRequest: (context, moduleName, platform) => {
159
+ const origResolveRequestFn =
160
+ _defaultConfig?.resolver?.resolveRequest || context.resolveRequest
161
+
162
+ if (excludeModules && excludeModules.length > 0) {
163
+ if (micromatch.isMatch(moduleName, excludeModules)) {
164
+ return origResolveRequestFn(
165
+ context,
166
+ '@vxrn/vite-plugin-metro/empty',
167
+ platform
168
+ )
169
+ }
170
+ }
171
+
172
+ // HACK: Do not assert the "import" condition for `@babel/runtime`.
173
+ // Resolves the "TypeError: _interopRequireDefault is not a function (it is Object)" error.
174
+ if (moduleName.startsWith('@babel/runtime')) {
175
+ const contextOverride = {
176
+ ...context,
177
+ unstable_conditionNames: context.unstable_conditionNames.filter(
178
+ (c) => c !== 'import'
179
+ ),
180
+ }
181
+ return origResolveRequestFn(contextOverride, moduleName, platform)
182
+ }
183
+
184
+ return origResolveRequestFn(context, moduleName, platform)
185
+ },
186
+ },
187
+ transformer: {
188
+ ..._defaultConfig?.transformer,
189
+ babelTransformerPath: projectResolve(
190
+ projectRoot,
191
+ '@vxrn/vite-plugin-metro/babel-transformer'
192
+ ),
193
+ },
194
+ reporter: await getTerminalReporter(projectRoot),
195
+ }
196
+
197
+ const merged = {
198
+ ...defaultConfig,
199
+ ...(typeof defaultConfigOverrides === 'function'
200
+ ? defaultConfigOverrides(defaultConfig)
201
+ : defaultConfigOverrides),
202
+ }
203
+
204
+ return { defaultConfig: merged, projectRoot, extraConfig }
205
+ }
206
+
62
207
  export async function getMetroConfigFromViteConfig(
63
208
  config: ResolvedConfig,
64
209
  metroPluginOptions: MetroPluginOptions
@@ -39,6 +39,7 @@ export function patchMetroServerWithViteConfigAndMetroPluginOptions(
39
39
  const viteCustomTransformOptions: ViteCustomTransformOptions = {
40
40
  // config: server.config,
41
41
  babelConfig,
42
+ oneViteMetroBabelConfig: options.oneViteMetroBabelConfig,
42
43
  }
43
44
  return originalTransformFile(
44
45
  filePath,
@@ -50,6 +50,11 @@ export type MetroPluginOptions = {
50
50
  /** Consider using babelConfigOverrides instead */
51
51
  babelConfig?: TransformOptions
52
52
  babelConfigOverrides?: (defaultConfig: TransformOptions) => TransformOptions
53
+ /**
54
+ * internal marker used by one's babel preset to avoid double-applying its
55
+ * plugin chain when one already supplied the vite metro babel config.
56
+ */
57
+ oneViteMetroBabelConfig?: boolean
53
58
  /**
54
59
  * Overrides the main module name which is normally defined as the `main` field in `package.json`.
55
60
  *
@@ -33,6 +33,7 @@ export type ExpoBabelCaller = TransformOptions['caller'] & {
33
33
  platform?: string | null
34
34
  routerRoot?: string
35
35
  projectRoot: string
36
+ oneViteMetroBabelConfig?: boolean
36
37
  }
37
38
 
38
39
  const debug = require('debug')(
@@ -63,7 +64,10 @@ const memoizeWarning = memoize((message: string) => {
63
64
  function getBabelCaller({
64
65
  filename,
65
66
  options,
66
- }: Pick<BabelTransformerArgs, 'filename' | 'options'>): ExpoBabelCaller {
67
+ oneViteMetroBabelConfig,
68
+ }: Pick<BabelTransformerArgs, 'filename' | 'options'> & {
69
+ oneViteMetroBabelConfig: boolean
70
+ }): ExpoBabelCaller {
67
71
  const isNodeModule = filename.includes('node_modules')
68
72
  const isReactServer = options.customTransformOptions?.environment === 'react-server'
69
73
  const isGenericServer = options.customTransformOptions?.environment === 'node'
@@ -117,6 +121,7 @@ function getBabelCaller({
117
121
 
118
122
  // Provide the project root for accurately reading the Expo config.
119
123
  projectRoot: options.projectRoot,
124
+ oneViteMetroBabelConfig,
120
125
 
121
126
  isNodeModule,
122
127
 
@@ -146,22 +151,22 @@ const transform: BabelTransformer['transform'] = ({
146
151
  // `plugins` is used for `functionMapBabelPlugin` from `metro-source-map`. Could make sense to move this to `babel-preset-expo` too.
147
152
  plugins,
148
153
  }: BabelTransformerArgs): ReturnType<BabelTransformer['transform']> => {
154
+ const viteCustomTransformOptions = options.customTransformOptions?.vite
155
+
149
156
  const customOptionsFromVite: ViteCustomTransformOptions = (() => {
150
- const c: any = options.customTransformOptions?.vite
157
+ const c: any = viteCustomTransformOptions
158
+ // Standalone Metro invocations (expo export, eas update) don't set
159
+ // customTransformOptions.vite — the plugins flow entirely through the
160
+ // project's babel.config.cjs in that case. Tolerate the missing field
161
+ // rather than throwing so a single Metro config can serve both the
162
+ // Vite-driven and standalone paths.
151
163
  if (!c || typeof c !== 'object') {
152
- throw new Error(
153
- `[vite-plugin-metro/babel-transformer]: Expect options.customTransformOptions.vite to be an object, but got ${typeof c}.`
154
- )
164
+ return { babelConfig: {} } as ViteCustomTransformOptions
155
165
  }
156
-
157
- // if (!c.config) {
158
- // throw new Error(
159
- // `[vite-plugin-metro/babel-transformer]: Expect options.customTransformOptions.vite to be an ViteCustomTransformOptions type, but the config property is missing.`
160
- // )
161
- // }
162
-
163
166
  return c
164
167
  })()
168
+ const hasOneViteMetroBabelConfig =
169
+ customOptionsFromVite.oneViteMetroBabelConfig === true
165
170
 
166
171
  const babelConfigFromVitePlugin: TransformOptions =
167
172
  customOptionsFromVite.babelConfig || {}
@@ -207,7 +212,11 @@ const transform: BabelTransformer['transform'] = ({
207
212
  // ensure the Babel config caching is more accurate.
208
213
  // Additionally, by moving everything Babel-related to the Babel preset, it makes it easier for users to reason
209
214
  // about the requirements of an Expo project, making it easier to migrate to other transpilers in the future.
210
- caller: getBabelCaller({ filename, options }),
215
+ caller: getBabelCaller({
216
+ filename,
217
+ options,
218
+ oneViteMetroBabelConfig: hasOneViteMetroBabelConfig,
219
+ }),
211
220
  }
212
221
 
213
222
  const result = transformSync(src, babelConfig, options)
@@ -15,4 +15,9 @@ export type ViteCustomTransformOptions = {
15
15
  * Vite Metro plugin as the `babelConfig` option.
16
16
  */
17
17
  babelConfig?: TransformOptions
18
+ /**
19
+ * internal marker used by one's babel preset to avoid double-applying its
20
+ * plugin chain when one already supplied the vite metro babel config.
21
+ */
22
+ oneViteMetroBabelConfig?: boolean
18
23
  }
package/types/index.d.ts CHANGED
@@ -4,4 +4,6 @@ export { expoManifestRequestHandlerPlugin } from './plugins/expoManifestRequestH
4
4
  export type { ExpoManifestRequestHandlerPluginPluginOptions } from './plugins/expoManifestRequestHandlerPlugin';
5
5
  export { getPlatformEnv, getPlatformEnvDefine, metroPlatformToViteEnvironment, type Platform, type PlatformEnv, type ViteEnvironment, } from './env/platformEnv';
6
6
  export { checkAndClearMetroCacheFromVite } from './utils/metroCacheManager';
7
+ export { getMetroConfigFromViteConfig, buildMetroConfigInputFromViteConfig, } from './metro-config/getMetroConfigFromViteConfig';
8
+ export { patchMetroServerWithViteConfigAndMetroPluginOptions } from './metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAA;AAC7F,YAAY,EAAE,6CAA6C,EAAE,MAAM,4CAA4C,CAAA;AAC/G,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAA;AAC7F,YAAY,EAAE,6CAA6C,EAAE,MAAM,4CAA4C,CAAA;AAC/G,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAC3E,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,GACpC,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,mDAAmD,EAAE,MAAM,oEAAoE,CAAA"}
@@ -1,5 +1,18 @@
1
1
  import type { ResolvedConfig } from 'vite';
2
2
  import type { MetroPluginOptions } from '../plugins/metroPlugin';
3
- import type { MetroConfigExtended } from './types';
3
+ import type { ExtraConfig, MetroConfigExtended } from './types';
4
+ /**
5
+ * Build the Metro config input WITHOUT calling Metro's `loadConfig`. Returns
6
+ * the same shape Metro `loadConfig` expects as its second argument. Use this
7
+ * from a project's `metro.config.cjs` so the outer `loadConfig` (driven by
8
+ * Expo CLI / Metro CLI) is the only one that runs — avoids infinite
9
+ * recursion that would happen if the inner pipeline also called `loadConfig`
10
+ * and re-read the same metro.config.cjs.
11
+ */
12
+ export declare function buildMetroConfigInputFromViteConfig(config: ResolvedConfig, metroPluginOptions: MetroPluginOptions): Promise<{
13
+ defaultConfig: any;
14
+ projectRoot: string;
15
+ extraConfig: ExtraConfig;
16
+ }>;
4
17
  export declare function getMetroConfigFromViteConfig(config: ResolvedConfig, metroPluginOptions: MetroPluginOptions): Promise<MetroConfigExtended>;
5
18
  //# sourceMappingURL=getMetroConfigFromViteConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMetroConfigFromViteConfig.d.ts","sourceRoot":"","sources":["../../src/metro-config/getMetroConfigFromViteConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAc1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,SAAS,CAAA;AA8C/D,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,cAAc,EACtB,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC,mBAAmB,CAAC,CA+K9B"}
1
+ {"version":3,"file":"getMetroConfigFromViteConfig.d.ts","sourceRoot":"","sources":["../../src/metro-config/getMetroConfigFromViteConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAc1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AA8C/D;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,cAAc,EACtB,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC;IAAE,aAAa,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC,CAoIhF;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,cAAc,EACtB,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC,mBAAmB,CAAC,CA+K9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts","sourceRoot":"","sources":["../../src/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAIhE,wBAAgB,mDAAmD,CACjE,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,kBAAkB,QA6C5B"}
1
+ {"version":3,"file":"patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts","sourceRoot":"","sources":["../../src/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAIhE,wBAAgB,mDAAmD,CACjE,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,kBAAkB,QA8C5B"}
@@ -26,6 +26,11 @@ export type MetroPluginOptions = {
26
26
  /** Consider using babelConfigOverrides instead */
27
27
  babelConfig?: TransformOptions;
28
28
  babelConfigOverrides?: (defaultConfig: TransformOptions) => TransformOptions;
29
+ /**
30
+ * internal marker used by one's babel preset to avoid double-applying its
31
+ * plugin chain when one already supplied the vite metro babel config.
32
+ */
33
+ oneViteMetroBabelConfig?: boolean;
29
34
  /**
30
35
  * Overrides the main module name which is normally defined as the `main` field in `package.json`.
31
36
  *
@@ -1 +1 @@
1
- {"version":3,"file":"metroPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/metroPlugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWxC,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EACnB,gBAAgB,GAChB,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;IAC5E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA2Q1E"}
1
+ {"version":3,"file":"metroPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/metroPlugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWxC,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EACnB,gBAAgB,GAChB,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAA;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,oBAAoB,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;IAC5E;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,YAAY,CA2Q1E"}
@@ -14,5 +14,6 @@ export type ExpoBabelCaller = TransformOptions['caller'] & {
14
14
  platform?: string | null;
15
15
  routerRoot?: string;
16
16
  projectRoot: string;
17
+ oneViteMetroBabelConfig?: boolean;
17
18
  };
18
19
  //# sourceMappingURL=babel-transformer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"babel-transformer.d.ts","sourceRoot":"","sources":["../../src/transformer/babel-transformer.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAKpD,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG;IACzD,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA"}
1
+ {"version":3,"file":"babel-transformer.d.ts","sourceRoot":"","sources":["../../src/transformer/babel-transformer.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAKpD,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG;IACzD,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA"}
@@ -12,5 +12,10 @@ export type ViteCustomTransformOptions = {
12
12
  * Vite Metro plugin as the `babelConfig` option.
13
13
  */
14
14
  babelConfig?: TransformOptions;
15
+ /**
16
+ * internal marker used by one's babel preset to avoid double-applying its
17
+ * plugin chain when one already supplied the vite metro babel config.
18
+ */
19
+ oneViteMetroBabelConfig?: boolean;
15
20
  };
16
21
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transformer/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;OAEG;IAEH;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAA;CAC/B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transformer/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;OAEG;IAEH;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA"}