@vxrn/vite-plugin-metro 1.27.0 → 1.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +18 -4
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +18 -4
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
- package/dist/cjs/transformer/loadBabelConfig.cjs +1 -1
- package/dist/cjs/transformer/loadBabelConfig.native.js +1 -1
- package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
- package/dist/cjs/transformer/metroNativeWorker.test.cjs +132 -0
- package/dist/cjs/transformer/metroNativeWorker.test.native.js +139 -0
- package/dist/cjs/transformer/metroNativeWorker.test.native.js.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +18 -4
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +18 -4
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
- package/dist/esm/transformer/loadBabelConfig.mjs +1 -1
- package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
- package/dist/esm/transformer/loadBabelConfig.native.js +1 -1
- package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.test.mjs +130 -1
- package/dist/esm/transformer/metroNativeWorker.test.mjs.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.test.native.js +137 -1
- package/dist/esm/transformer/metroNativeWorker.test.native.js.map +1 -1
- package/package.json +4 -4
- package/src/metro-config/getMetroConfigFromViteConfig.ts +43 -30
- package/src/transformer/loadBabelConfig.ts +2 -0
- package/src/transformer/metroNativeWorker.test.ts +154 -1
- package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
- package/types/transformer/loadBabelConfig.d.ts.map +1 -1
|
@@ -19,7 +19,10 @@ import {
|
|
|
19
19
|
applyEnvironmentGuard,
|
|
20
20
|
getRemoveServerCodeRouterRoot,
|
|
21
21
|
} from './metroNativeWorker'
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
buildMetroConfigInputFromViteConfig,
|
|
24
|
+
getMetroConfigFromViteConfig,
|
|
25
|
+
} from '../metro-config/getMetroConfigFromViteConfig'
|
|
23
26
|
|
|
24
27
|
const babelCalls = {
|
|
25
28
|
transform: 0,
|
|
@@ -533,6 +536,117 @@ describe('metroNativeWorker', () => {
|
|
|
533
536
|
}
|
|
534
537
|
})
|
|
535
538
|
|
|
539
|
+
it('warns naming the ignored user babel config when native transforms are forced', async () => {
|
|
540
|
+
const tempDir = fs.realpathSync(
|
|
541
|
+
fs.mkdtempSync(path.join(process.cwd(), '.tmp-metro-test-'))
|
|
542
|
+
)
|
|
543
|
+
fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
|
|
544
|
+
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
545
|
+
fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
|
|
546
|
+
try {
|
|
547
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
548
|
+
const mockViteConfig = { root: tempDir } as any
|
|
549
|
+
const warnsWithConfig = (spy: any) =>
|
|
550
|
+
spy.mock.calls.some((args: any[]) =>
|
|
551
|
+
args.join(' ').includes(babelConfigPath)
|
|
552
|
+
)
|
|
553
|
+
|
|
554
|
+
// explicit option force still uses the worker, but names the dropped config
|
|
555
|
+
const optionWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
556
|
+
try {
|
|
557
|
+
const forced = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
|
|
558
|
+
nativeTransforms: true,
|
|
559
|
+
})
|
|
560
|
+
expect(forced.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
561
|
+
expect(warnsWithConfig(optionWarn)).toBe(true)
|
|
562
|
+
} finally {
|
|
563
|
+
optionWarn.mockRestore()
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
// env var force warns the same way
|
|
567
|
+
const envWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
568
|
+
try {
|
|
569
|
+
process.env.ONE_METRO_NATIVE_TRANSFORMS = '1'
|
|
570
|
+
const envForced = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
571
|
+
expect(envForced.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
572
|
+
expect(warnsWithConfig(envWarn)).toBe(true)
|
|
573
|
+
} finally {
|
|
574
|
+
envWarn.mockRestore()
|
|
575
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// default (no force) respects the config silently: babel fallback, no warning
|
|
579
|
+
const respectedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
580
|
+
try {
|
|
581
|
+
const respected = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
582
|
+
expect(respected.defaultConfig.transformerPath).not.toContain(
|
|
583
|
+
'metroNativeWorker'
|
|
584
|
+
)
|
|
585
|
+
expect(warnsWithConfig(respectedWarn)).toBe(false)
|
|
586
|
+
} finally {
|
|
587
|
+
respectedWarn.mockRestore()
|
|
588
|
+
}
|
|
589
|
+
} finally {
|
|
590
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
591
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
592
|
+
}
|
|
593
|
+
})
|
|
594
|
+
|
|
595
|
+
it('selects the same transformer in both metro config builders', async () => {
|
|
596
|
+
const tempDir = fs.realpathSync(
|
|
597
|
+
fs.mkdtempSync(path.join(process.cwd(), '.tmp-metro-test-'))
|
|
598
|
+
)
|
|
599
|
+
fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
|
|
600
|
+
try {
|
|
601
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
602
|
+
const mockViteConfig = { root: tempDir } as any
|
|
603
|
+
|
|
604
|
+
// no user config: both builders default to the native worker
|
|
605
|
+
const nativeInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
606
|
+
const nativeFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
|
|
607
|
+
expect(nativeInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
608
|
+
expect((nativeFull as any).transformerPath).toContain('metroNativeWorker')
|
|
609
|
+
|
|
610
|
+
// user config: both builders fall back to the babel transformer
|
|
611
|
+
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
612
|
+
fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
|
|
613
|
+
const fallbackInput = await buildMetroConfigInputFromViteConfig(
|
|
614
|
+
mockViteConfig,
|
|
615
|
+
{}
|
|
616
|
+
)
|
|
617
|
+
const fallbackFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
|
|
618
|
+
expect(fallbackInput.defaultConfig.transformerPath).not.toContain(
|
|
619
|
+
'metroNativeWorker'
|
|
620
|
+
)
|
|
621
|
+
expect((fallbackFull as any).transformerPath).not.toContain('metroNativeWorker')
|
|
622
|
+
|
|
623
|
+
// forced with a user config: both builders warn naming the ignored file
|
|
624
|
+
const forcedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
625
|
+
try {
|
|
626
|
+
const forcedInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
|
|
627
|
+
nativeTransforms: true,
|
|
628
|
+
})
|
|
629
|
+
const forcedFull = await getMetroConfigFromViteConfig(mockViteConfig, {
|
|
630
|
+
nativeTransforms: true,
|
|
631
|
+
})
|
|
632
|
+
expect(forcedInput.defaultConfig.transformerPath).toContain(
|
|
633
|
+
'metroNativeWorker'
|
|
634
|
+
)
|
|
635
|
+
expect((forcedFull as any).transformerPath).toContain('metroNativeWorker')
|
|
636
|
+
expect(
|
|
637
|
+
forcedWarn.mock.calls.some((args: any[]) =>
|
|
638
|
+
args.join(' ').includes(babelConfigPath)
|
|
639
|
+
)
|
|
640
|
+
).toBe(true)
|
|
641
|
+
} finally {
|
|
642
|
+
forcedWarn.mockRestore()
|
|
643
|
+
}
|
|
644
|
+
} finally {
|
|
645
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
646
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
647
|
+
}
|
|
648
|
+
})
|
|
649
|
+
|
|
536
650
|
it('transforms and executes a real 2-module Metro bundle through metro-runtime require polyfill', async () => {
|
|
537
651
|
// Probe 1 verification:
|
|
538
652
|
// Module 2 (dep.js): exports a value
|
|
@@ -1302,3 +1416,42 @@ export const all = { ...import.meta.env };`,
|
|
|
1302
1416
|
)
|
|
1303
1417
|
})
|
|
1304
1418
|
})
|
|
1419
|
+
|
|
1420
|
+
describe('metro babel fallback config names', () => {
|
|
1421
|
+
it('extends json babel configs just like the compiler detection does', async () => {
|
|
1422
|
+
// loadBabelConfig memoizes a singleton, so each case gets a fresh module
|
|
1423
|
+
for (const name of ['babel.config.json', '.babelrc.json']) {
|
|
1424
|
+
vi.resetModules()
|
|
1425
|
+
const { loadBabelConfig } = await import('./loadBabelConfig')
|
|
1426
|
+
const tempDir = fs.realpathSync(
|
|
1427
|
+
fs.mkdtempSync(path.join(os.tmpdir(), 'vxrn-babel-json-'))
|
|
1428
|
+
)
|
|
1429
|
+
try {
|
|
1430
|
+
fs.writeFileSync(path.join(tempDir, name), JSON.stringify({ plugins: [] }))
|
|
1431
|
+
expect(loadBabelConfig({ projectRoot: tempDir })).toEqual({
|
|
1432
|
+
extends: path.join(tempDir, name),
|
|
1433
|
+
})
|
|
1434
|
+
} finally {
|
|
1435
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
// control: js configs keep loading
|
|
1440
|
+
vi.resetModules()
|
|
1441
|
+
const { loadBabelConfig } = await import('./loadBabelConfig')
|
|
1442
|
+
const tempDir = fs.realpathSync(
|
|
1443
|
+
fs.mkdtempSync(path.join(os.tmpdir(), 'vxrn-babel-json-'))
|
|
1444
|
+
)
|
|
1445
|
+
try {
|
|
1446
|
+
fs.writeFileSync(
|
|
1447
|
+
path.join(tempDir, 'babel.config.js'),
|
|
1448
|
+
'module.exports = { plugins: [] }'
|
|
1449
|
+
)
|
|
1450
|
+
expect(loadBabelConfig({ projectRoot: tempDir })).toEqual({
|
|
1451
|
+
extends: path.join(tempDir, 'babel.config.js'),
|
|
1452
|
+
})
|
|
1453
|
+
} finally {
|
|
1454
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
1455
|
+
}
|
|
1456
|
+
})
|
|
1457
|
+
})
|
|
@@ -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;AAe1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;
|
|
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;AAe1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AA4G/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,CAwJhF;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,cAAc,EACtB,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC,mBAAmB,CAAC,CA4L9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadBabelConfig.d.ts","sourceRoot":"","sources":["../../src/transformer/loadBabelConfig.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD;;;;GAIG;AACH,eAAO,MAAM,eAAe,oBAGmB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"loadBabelConfig.d.ts","sourceRoot":"","sources":["../../src/transformer/loadBabelConfig.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD;;;;GAIG;AACH,eAAO,MAAM,eAAe,oBAGmB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,kDAwClE,CAAA"}
|