vxrn 0.1.50 → 0.1.52
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/exports/bindKeypressInput.js +58 -0
- package/dist/cjs/exports/bindKeypressInput.js.map +6 -0
- package/dist/cjs/exports/bindKeypressInput.native.js +63 -0
- package/dist/cjs/exports/bindKeypressInput.native.js.map +6 -0
- package/dist/cjs/exports/build.js +26 -93
- package/dist/cjs/exports/build.js.map +2 -2
- package/dist/cjs/exports/build.native.js +70 -360
- package/dist/cjs/exports/build.native.js.map +2 -2
- package/dist/cjs/exports/coerceToArray.js +23 -0
- package/dist/cjs/exports/coerceToArray.js.map +6 -0
- package/dist/cjs/exports/connectedNativeClients.js +21 -0
- package/dist/cjs/exports/connectedNativeClients.js.map +6 -0
- package/dist/cjs/exports/dev.js +10 -416
- package/dist/cjs/exports/dev.js.map +2 -2
- package/dist/cjs/exports/dev.native.js +16 -732
- package/dist/cjs/exports/dev.native.js.map +2 -2
- package/dist/cjs/exports/entryRoot.js +69 -0
- package/dist/cjs/exports/entryRoot.js.map +6 -0
- package/dist/cjs/exports/getIndexJsonResponse.js +71 -0
- package/dist/cjs/exports/getIndexJsonResponse.js.map +6 -0
- package/dist/cjs/exports/getIndexJsonResponse.native.js +99 -0
- package/dist/cjs/exports/getIndexJsonResponse.native.js.map +6 -0
- package/dist/cjs/exports/getReactNativeBundle.js +160 -0
- package/dist/cjs/exports/getReactNativeBundle.js.map +6 -0
- package/dist/cjs/exports/getViteServerConfig.js +77 -0
- package/dist/cjs/exports/getViteServerConfig.js.map +6 -0
- package/dist/cjs/exports/getViteServerConfig.native.js +253 -0
- package/dist/cjs/exports/getViteServerConfig.native.js.map +6 -0
- package/dist/cjs/exports/hotUpdateCache.js +21 -0
- package/dist/cjs/exports/hotUpdateCache.js.map +6 -0
- package/dist/cjs/exports/isBuildingNativeBundle.js +21 -0
- package/dist/cjs/exports/isBuildingNativeBundle.js.map +6 -0
- package/dist/cjs/exports/isWithin.js +25 -0
- package/dist/cjs/exports/isWithin.js.map +6 -0
- package/dist/cjs/exports/reactNativeHMRPlugin.js +69 -0
- package/dist/cjs/exports/reactNativeHMRPlugin.js.map +6 -0
- package/dist/cjs/exports/resolveFile.js +28 -0
- package/dist/cjs/exports/resolveFile.js.map +6 -0
- package/dist/cjs/exports/resolveFile.native.js +34 -0
- package/dist/cjs/exports/resolveFile.native.js.map +6 -0
- package/dist/cjs/exports/serve.js +1 -1
- package/dist/cjs/exports/serve.js.map +1 -1
- package/dist/cjs/exports/serve.native.js +1 -1
- package/dist/cjs/exports/serve.native.js.map +1 -1
- package/dist/cjs/exports/swapPrebuiltReactModules.js +100 -0
- package/dist/cjs/exports/swapPrebuiltReactModules.js.map +6 -0
- package/dist/cjs/exports/uniq.js +23 -0
- package/dist/cjs/exports/uniq.js.map +6 -0
- package/dist/cjs/index.js +4 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.native.js +8 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/plugins/reactNativeCommonJsPlugin.js.map +1 -1
- package/dist/cjs/plugins/reactNativeCommonJsPlugin.native.js.map +1 -1
- package/dist/cjs/plugins/reactNativeHMRPlugin.js +67 -0
- package/dist/cjs/plugins/reactNativeHMRPlugin.js.map +6 -0
- package/dist/cjs/plugins/reactNativeHMRPlugin.native.js +307 -0
- package/dist/cjs/plugins/reactNativeHMRPlugin.native.js.map +6 -0
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/utils/bindKeypressInput.js +58 -0
- package/dist/cjs/utils/bindKeypressInput.js.map +6 -0
- package/dist/cjs/utils/bindKeypressInput.native.js +63 -0
- package/dist/cjs/utils/bindKeypressInput.native.js.map +6 -0
- package/dist/cjs/utils/coerceToArray.js +23 -0
- package/dist/cjs/utils/coerceToArray.js.map +6 -0
- package/dist/cjs/utils/coerceToArray.native.js +30 -0
- package/dist/cjs/utils/coerceToArray.native.js.map +6 -0
- package/dist/cjs/utils/connectedNativeClients.js +29 -0
- package/dist/cjs/utils/connectedNativeClients.js.map +6 -0
- package/dist/cjs/utils/connectedNativeClients.native.js +36 -0
- package/dist/cjs/utils/connectedNativeClients.native.js.map +6 -0
- package/dist/cjs/utils/getIndexJsonResponse.js +71 -0
- package/dist/cjs/utils/getIndexJsonResponse.js.map +6 -0
- package/dist/cjs/utils/getIndexJsonResponse.native.js +99 -0
- package/dist/cjs/utils/getIndexJsonResponse.native.js.map +6 -0
- package/dist/cjs/utils/getOptimizeDeps.js +8 -7
- package/dist/cjs/utils/getOptimizeDeps.js.map +1 -1
- package/dist/cjs/utils/getOptimizeDeps.native.js +8 -7
- package/dist/cjs/utils/getOptimizeDeps.native.js.map +1 -1
- package/dist/cjs/utils/getOptionsFilled.js.map +1 -1
- package/dist/cjs/utils/getOptionsFilled.native.js.map +1 -1
- package/dist/cjs/utils/getReactNativeBundle.js +165 -0
- package/dist/cjs/utils/getReactNativeBundle.js.map +6 -0
- package/dist/cjs/utils/getReactNativeBundle.native.js +389 -0
- package/dist/cjs/utils/getReactNativeBundle.native.js.map +6 -0
- package/dist/cjs/utils/getVitePath.js +2 -2
- package/dist/cjs/utils/getVitePath.js.map +2 -2
- package/dist/cjs/utils/getVitePath.native.js +8 -8
- package/dist/cjs/utils/getVitePath.native.js.map +2 -2
- package/dist/cjs/utils/getViteServerConfig.js +80 -0
- package/dist/cjs/utils/getViteServerConfig.js.map +6 -0
- package/dist/cjs/utils/getViteServerConfig.native.js +256 -0
- package/dist/cjs/utils/getViteServerConfig.native.js.map +6 -0
- package/dist/cjs/utils/hotUpdateCache.js +21 -0
- package/dist/cjs/utils/hotUpdateCache.js.map +6 -0
- package/dist/cjs/utils/hotUpdateCache.native.js +26 -0
- package/dist/cjs/utils/hotUpdateCache.native.js.map +6 -0
- package/dist/cjs/utils/isBuildingNativeBundle.js +25 -0
- package/dist/cjs/utils/isBuildingNativeBundle.js.map +6 -0
- package/dist/cjs/utils/isBuildingNativeBundle.native.js +32 -0
- package/dist/cjs/utils/isBuildingNativeBundle.native.js.map +6 -0
- package/dist/cjs/utils/isWithin.js +25 -0
- package/dist/cjs/utils/isWithin.js.map +6 -0
- package/dist/cjs/utils/isWithin.native.js +30 -0
- package/dist/cjs/utils/isWithin.native.js.map +6 -0
- package/dist/cjs/utils/readVXRNConfig.js +15 -18
- package/dist/cjs/utils/readVXRNConfig.js.map +2 -2
- package/dist/cjs/utils/readVXRNConfig.native.js +104 -49
- package/dist/cjs/utils/readVXRNConfig.native.js.map +2 -2
- package/dist/cjs/utils/resolveFile.js +28 -0
- package/dist/cjs/utils/resolveFile.js.map +6 -0
- package/dist/cjs/utils/resolveFile.native.js +34 -0
- package/dist/cjs/utils/resolveFile.native.js.map +6 -0
- package/dist/cjs/utils/swapPrebuiltReactModules.js +108 -0
- package/dist/cjs/utils/swapPrebuiltReactModules.js.map +6 -0
- package/dist/cjs/utils/swapPrebuiltReactModules.native.js +272 -0
- package/dist/cjs/utils/swapPrebuiltReactModules.native.js.map +6 -0
- package/dist/cjs/utils/uniq.js +23 -0
- package/dist/cjs/utils/uniq.js.map +6 -0
- package/dist/cjs/utils/uniq.native.js +59 -0
- package/dist/cjs/utils/uniq.native.js.map +6 -0
- package/dist/esm/exports/bindKeypressInput.js +34 -0
- package/dist/esm/exports/bindKeypressInput.js.map +6 -0
- package/dist/esm/exports/bindKeypressInput.mjs +31 -0
- package/dist/esm/exports/bindKeypressInput.native.js +34 -0
- package/dist/esm/exports/bindKeypressInput.native.js.map +6 -0
- package/dist/esm/exports/build.js +27 -98
- package/dist/esm/exports/build.js.map +1 -1
- package/dist/esm/exports/build.mjs +38 -135
- package/dist/esm/exports/build.native.js +71 -366
- package/dist/esm/exports/build.native.js.map +2 -2
- package/dist/esm/exports/coerceToArray.js +7 -0
- package/dist/esm/exports/coerceToArray.js.map +6 -0
- package/dist/esm/exports/coerceToArray.mjs +4 -0
- package/dist/esm/exports/connectedNativeClients.js +5 -0
- package/dist/esm/exports/connectedNativeClients.js.map +6 -0
- package/dist/esm/exports/connectedNativeClients.mjs +2 -0
- package/dist/esm/exports/dev.js +17 -431
- package/dist/esm/exports/dev.js.map +2 -2
- package/dist/esm/exports/dev.mjs +15 -430
- package/dist/esm/exports/dev.native.js +19 -738
- package/dist/esm/exports/dev.native.js.map +2 -2
- package/dist/esm/exports/entryRoot.js +58 -0
- package/dist/esm/exports/entryRoot.js.map +6 -0
- package/dist/esm/exports/entryRoot.mjs +62 -0
- package/dist/esm/exports/getIndexJsonResponse.js +55 -0
- package/dist/esm/exports/getIndexJsonResponse.js.map +6 -0
- package/dist/esm/exports/getIndexJsonResponse.mjs +71 -0
- package/dist/esm/exports/getIndexJsonResponse.native.js +78 -0
- package/dist/esm/exports/getIndexJsonResponse.native.js.map +6 -0
- package/dist/esm/exports/getReactNativeBundle.js +146 -0
- package/dist/esm/exports/getReactNativeBundle.js.map +6 -0
- package/dist/esm/exports/getReactNativeBundle.mjs +136 -0
- package/dist/esm/exports/getViteServerConfig.js +64 -0
- package/dist/esm/exports/getViteServerConfig.js.map +6 -0
- package/dist/esm/exports/getViteServerConfig.mjs +44 -0
- package/dist/esm/exports/getViteServerConfig.native.js +235 -0
- package/dist/esm/exports/getViteServerConfig.native.js.map +6 -0
- package/dist/esm/exports/hotUpdateCache.js +5 -0
- package/dist/esm/exports/hotUpdateCache.js.map +6 -0
- package/dist/esm/exports/hotUpdateCache.mjs +2 -0
- package/dist/esm/exports/isBuildingNativeBundle.js +5 -0
- package/dist/esm/exports/isBuildingNativeBundle.js.map +6 -0
- package/dist/esm/exports/isBuildingNativeBundle.mjs +2 -0
- package/dist/esm/exports/isWithin.js +9 -0
- package/dist/esm/exports/isWithin.js.map +6 -0
- package/dist/esm/exports/isWithin.mjs +6 -0
- package/dist/esm/exports/reactNativeHMRPlugin.js +58 -0
- package/dist/esm/exports/reactNativeHMRPlugin.js.map +6 -0
- package/dist/esm/exports/reactNativeHMRPlugin.mjs +62 -0
- package/dist/esm/exports/resolveFile.js +12 -0
- package/dist/esm/exports/resolveFile.js.map +6 -0
- package/dist/esm/exports/resolveFile.mjs +9 -0
- package/dist/esm/exports/resolveFile.native.js +12 -0
- package/dist/esm/exports/resolveFile.native.js.map +6 -0
- package/dist/esm/exports/serve.js +1 -1
- package/dist/esm/exports/serve.js.map +1 -1
- package/dist/esm/exports/serve.mjs +1 -1
- package/dist/esm/exports/serve.native.js +1 -1
- package/dist/esm/exports/serve.native.js.map +1 -1
- package/dist/esm/exports/swapPrebuiltReactModules.js +87 -0
- package/dist/esm/exports/swapPrebuiltReactModules.js.map +6 -0
- package/dist/esm/exports/swapPrebuiltReactModules.mjs +73 -0
- package/dist/esm/exports/uniq.js +7 -0
- package/dist/esm/exports/uniq.js.map +6 -0
- package/dist/esm/exports/uniq.mjs +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +4 -0
- package/dist/esm/index.native.js +4 -0
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/plugins/reactNativeCommonJsPlugin.js.map +1 -1
- package/dist/esm/plugins/reactNativeCommonJsPlugin.native.js.map +1 -1
- package/dist/esm/plugins/reactNativeHMRPlugin.js +57 -0
- package/dist/esm/plugins/reactNativeHMRPlugin.js.map +6 -0
- package/dist/esm/plugins/reactNativeHMRPlugin.mjs +62 -0
- package/dist/esm/plugins/reactNativeHMRPlugin.native.js +292 -0
- package/dist/esm/plugins/reactNativeHMRPlugin.native.js.map +6 -0
- package/dist/esm/utils/bindKeypressInput.js +34 -0
- package/dist/esm/utils/bindKeypressInput.js.map +6 -0
- package/dist/esm/utils/bindKeypressInput.mjs +31 -0
- package/dist/esm/utils/bindKeypressInput.native.js +34 -0
- package/dist/esm/utils/bindKeypressInput.native.js.map +6 -0
- package/dist/esm/utils/coerceToArray.js +7 -0
- package/dist/esm/utils/coerceToArray.js.map +6 -0
- package/dist/esm/utils/coerceToArray.mjs +4 -0
- package/dist/esm/utils/coerceToArray.native.js +9 -0
- package/dist/esm/utils/coerceToArray.native.js.map +6 -0
- package/dist/esm/utils/connectedNativeClients.js +13 -0
- package/dist/esm/utils/connectedNativeClients.js.map +6 -0
- package/dist/esm/utils/connectedNativeClients.mjs +8 -0
- package/dist/esm/utils/connectedNativeClients.native.js +13 -0
- package/dist/esm/utils/connectedNativeClients.native.js.map +6 -0
- package/dist/esm/utils/getIndexJsonResponse.js +55 -0
- package/dist/esm/utils/getIndexJsonResponse.js.map +6 -0
- package/dist/esm/utils/getIndexJsonResponse.mjs +71 -0
- package/dist/esm/utils/getIndexJsonResponse.native.js +78 -0
- package/dist/esm/utils/getIndexJsonResponse.native.js.map +6 -0
- package/dist/esm/utils/getOptimizeDeps.js +8 -7
- package/dist/esm/utils/getOptimizeDeps.js.map +1 -1
- package/dist/esm/utils/getOptimizeDeps.mjs +2 -2
- package/dist/esm/utils/getOptimizeDeps.native.js +8 -7
- package/dist/esm/utils/getOptimizeDeps.native.js.map +1 -1
- package/dist/esm/utils/getOptionsFilled.js.map +1 -1
- package/dist/esm/utils/getOptionsFilled.native.js.map +1 -1
- package/dist/esm/utils/getReactNativeBundle.js +153 -0
- package/dist/esm/utils/getReactNativeBundle.js.map +6 -0
- package/dist/esm/utils/getReactNativeBundle.mjs +142 -0
- package/dist/esm/utils/getReactNativeBundle.native.js +371 -0
- package/dist/esm/utils/getReactNativeBundle.native.js.map +6 -0
- package/dist/esm/utils/getVitePath.js +2 -2
- package/dist/esm/utils/getVitePath.js.map +1 -1
- package/dist/esm/utils/getVitePath.mjs +2 -2
- package/dist/esm/utils/getVitePath.native.js +8 -8
- package/dist/esm/utils/getVitePath.native.js.map +2 -2
- package/dist/esm/utils/getViteServerConfig.js +69 -0
- package/dist/esm/utils/getViteServerConfig.js.map +6 -0
- package/dist/esm/utils/getViteServerConfig.mjs +49 -0
- package/dist/esm/utils/getViteServerConfig.native.js +240 -0
- package/dist/esm/utils/getViteServerConfig.native.js.map +6 -0
- package/dist/esm/utils/hotUpdateCache.js +5 -0
- package/dist/esm/utils/hotUpdateCache.js.map +6 -0
- package/dist/esm/utils/hotUpdateCache.mjs +2 -0
- package/dist/esm/utils/hotUpdateCache.native.js +5 -0
- package/dist/esm/utils/hotUpdateCache.native.js.map +6 -0
- package/dist/esm/utils/isBuildingNativeBundle.js +9 -0
- package/dist/esm/utils/isBuildingNativeBundle.js.map +6 -0
- package/dist/esm/utils/isBuildingNativeBundle.mjs +5 -0
- package/dist/esm/utils/isBuildingNativeBundle.native.js +10 -0
- package/dist/esm/utils/isBuildingNativeBundle.native.js.map +6 -0
- package/dist/esm/utils/isWithin.js +9 -0
- package/dist/esm/utils/isWithin.js.map +6 -0
- package/dist/esm/utils/isWithin.mjs +6 -0
- package/dist/esm/utils/isWithin.native.js +9 -0
- package/dist/esm/utils/isWithin.native.js.map +6 -0
- package/dist/esm/utils/readVXRNConfig.js +16 -19
- package/dist/esm/utils/readVXRNConfig.js.map +1 -1
- package/dist/esm/utils/readVXRNConfig.mjs +17 -21
- package/dist/esm/utils/readVXRNConfig.native.js +105 -50
- package/dist/esm/utils/readVXRNConfig.native.js.map +2 -2
- package/dist/esm/utils/resolveFile.js +12 -0
- package/dist/esm/utils/resolveFile.js.map +6 -0
- package/dist/esm/utils/resolveFile.mjs +9 -0
- package/dist/esm/utils/resolveFile.native.js +12 -0
- package/dist/esm/utils/resolveFile.native.js.map +6 -0
- package/dist/esm/utils/swapPrebuiltReactModules.js +89 -0
- package/dist/esm/utils/swapPrebuiltReactModules.js.map +6 -0
- package/dist/esm/utils/swapPrebuiltReactModules.mjs +75 -0
- package/dist/esm/utils/swapPrebuiltReactModules.native.js +248 -0
- package/dist/esm/utils/swapPrebuiltReactModules.native.js.map +6 -0
- package/dist/esm/utils/uniq.js +7 -0
- package/dist/esm/utils/uniq.js.map +6 -0
- package/dist/esm/utils/uniq.mjs +4 -0
- package/dist/esm/utils/uniq.native.js +38 -0
- package/dist/esm/utils/uniq.native.js.map +6 -0
- package/package.json +8 -8
- package/src/exports/build.ts +46 -183
- package/src/exports/dev.ts +18 -646
- package/src/exports/serve.ts +4 -0
- package/src/index.ts +5 -0
- package/src/plugins/reactNativeCommonJsPlugin.ts +0 -2
- package/src/plugins/reactNativeHMRPlugin.ts +105 -0
- package/src/types.ts +9 -0
- package/src/utils/bindKeypressInput.ts +46 -0
- package/src/utils/coerceToArray.ts +3 -0
- package/src/utils/connectedNativeClients.ts +9 -0
- package/src/utils/getIndexJsonResponse.ts +52 -0
- package/src/utils/getOptimizeDeps.ts +9 -8
- package/src/utils/getOptionsFilled.ts +0 -1
- package/src/utils/getReactNativeBundle.ts +228 -0
- package/src/utils/getVitePath.ts +3 -3
- package/src/utils/getViteServerConfig.ts +104 -0
- package/src/utils/hotUpdateCache.ts +1 -0
- package/src/utils/isBuildingNativeBundle.ts +7 -0
- package/src/utils/isWithin.ts +6 -0
- package/src/utils/readVXRNConfig.ts +81 -25
- package/src/utils/resolveFile.ts +9 -0
- package/src/utils/swapPrebuiltReactModules.ts +126 -0
- package/src/utils/uniq.ts +3 -0
- package/types/exports/bindKeypressInput.d.ts +2 -0
- package/types/exports/coerceToArray.d.ts +2 -0
- package/types/exports/connectedNativeClients.d.ts +2 -0
- package/types/exports/dev.d.ts +0 -2
- package/types/exports/entryRoot.d.ts +11 -0
- package/types/exports/getIndexJsonResponse.d.ts +68 -0
- package/types/exports/getReactNativeBundle.d.ts +3 -0
- package/types/exports/getViteServerConfig.d.ts +4 -0
- package/types/exports/hotUpdateCache.d.ts +2 -0
- package/types/exports/isBuildingNativeBundle.d.ts +2 -0
- package/types/exports/isWithin.d.ts +2 -0
- package/types/exports/reactNativeHMRPlugin.d.ts +11 -0
- package/types/exports/resolveFile.d.ts +2 -0
- package/types/exports/swapPrebuiltReactModules.d.ts +7 -0
- package/types/exports/uniq.d.ts +2 -0
- package/types/index.d.ts +4 -0
- package/types/plugins/reactNativeHMRPlugin.d.ts +10 -0
- package/types/types.d.ts +4 -0
- package/types/utils/bindKeypressInput.d.ts +2 -0
- package/types/utils/coerceToArray.d.ts +2 -0
- package/types/utils/connectedNativeClients.d.ts +4 -0
- package/types/utils/getIndexJsonResponse.d.ts +68 -0
- package/types/utils/getOptionsFilled.d.ts +2 -0
- package/types/utils/getReactNativeBundle.d.ts +4 -0
- package/types/utils/getViteServerConfig.d.ts +4 -0
- package/types/utils/hotUpdateCache.d.ts +2 -0
- package/types/utils/isBuildingNativeBundle.d.ts +3 -0
- package/types/utils/isWithin.d.ts +2 -0
- package/types/utils/resolveFile.d.ts +2 -0
- package/types/utils/swapPrebuiltReactModules.d.ts +7 -0
- package/types/utils/uniq.d.ts +2 -0
package/src/index.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export { build } from './exports/build'
|
|
2
2
|
export { dev } from './exports/dev'
|
|
3
3
|
|
|
4
|
+
export * from './utils/getHtml'
|
|
5
|
+
export * from './utils/getOptionsFilled'
|
|
6
|
+
export * from './utils/getOptimizeDeps'
|
|
7
|
+
export * from './utils/getBaseViteConfig'
|
|
8
|
+
|
|
4
9
|
export * from './types'
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { swcTransform, transformForBuild } from '@vxrn/vite-native-swc'
|
|
2
|
+
import { parse } from 'es-module-lexer'
|
|
3
|
+
import { connectedNativeClients } from '../utils/connectedNativeClients'
|
|
4
|
+
import type { VXRNConfigFilled } from '../utils/getOptionsFilled'
|
|
5
|
+
import { entryRoot } from '../utils/getReactNativeBundle'
|
|
6
|
+
import { getVitePath } from '../utils/getVitePath'
|
|
7
|
+
import { hotUpdateCache } from '../utils/hotUpdateCache'
|
|
8
|
+
import { isWithin } from '../utils/isWithin'
|
|
9
|
+
|
|
10
|
+
export function reactNativeHMRPlugin({ root }: VXRNConfigFilled) {
|
|
11
|
+
return {
|
|
12
|
+
name: 'client-transform',
|
|
13
|
+
|
|
14
|
+
async handleHotUpdate({ read, modules, file }) {
|
|
15
|
+
try {
|
|
16
|
+
if (!isWithin(root, file)) {
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
if (!connectedNativeClients) {
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const [module] = modules
|
|
24
|
+
if (!module) return
|
|
25
|
+
|
|
26
|
+
const id = module?.url || file.replace(root, '')
|
|
27
|
+
|
|
28
|
+
const code = await read()
|
|
29
|
+
|
|
30
|
+
// got a weird pre compiled file on startup
|
|
31
|
+
if (code.startsWith(`'use strict';`)) return
|
|
32
|
+
|
|
33
|
+
if (!code) {
|
|
34
|
+
return
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let source = code
|
|
38
|
+
|
|
39
|
+
// we have to remove jsx before we can parse imports...
|
|
40
|
+
source = (await transformForBuild(id, source))?.code || ''
|
|
41
|
+
|
|
42
|
+
const importsMap = {}
|
|
43
|
+
|
|
44
|
+
// parse imports of modules into ids:
|
|
45
|
+
// eg `import x from '@tamagui/core'` => `import x from '/me/node_modules/@tamagui/core/index.js'`
|
|
46
|
+
const [imports] = parse(source)
|
|
47
|
+
|
|
48
|
+
let accumulatedSliceOffset = 0
|
|
49
|
+
|
|
50
|
+
for (const specifier of imports) {
|
|
51
|
+
const { n: importName, s: start } = specifier
|
|
52
|
+
|
|
53
|
+
if (importName) {
|
|
54
|
+
const id = await getVitePath(entryRoot, file, importName)
|
|
55
|
+
if (!id) {
|
|
56
|
+
console.warn('???')
|
|
57
|
+
continue
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
importsMap[id] = id.replace(/^(\.\.\/)+/, '')
|
|
61
|
+
|
|
62
|
+
// replace module name with id for hmr
|
|
63
|
+
const len = importName.length
|
|
64
|
+
const extraLen = id.length - len
|
|
65
|
+
source =
|
|
66
|
+
source.slice(0, start + accumulatedSliceOffset) +
|
|
67
|
+
id +
|
|
68
|
+
source.slice(start + accumulatedSliceOffset + len)
|
|
69
|
+
accumulatedSliceOffset += extraLen
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// then we have to convert to commonjs..
|
|
74
|
+
source =
|
|
75
|
+
(
|
|
76
|
+
await swcTransform(id, source, {
|
|
77
|
+
mode: 'serve-cjs',
|
|
78
|
+
})
|
|
79
|
+
)?.code || ''
|
|
80
|
+
|
|
81
|
+
if (!source) {
|
|
82
|
+
throw '❌ no source'
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
importsMap['currentPath'] = id
|
|
86
|
+
|
|
87
|
+
const hotUpdateSource = `exports = ((exports) => {
|
|
88
|
+
const require = createRequire(${JSON.stringify(importsMap, null, 2)})
|
|
89
|
+
${source
|
|
90
|
+
.replace(`import.meta.hot.accept(() => {})`, ``)
|
|
91
|
+
// replace import.meta.glob with empty array in hot reloads
|
|
92
|
+
.replaceAll(/import.meta.glob\(.*\)/gi, `globalThis['__importMetaGlobbed'] || {}`)};
|
|
93
|
+
return exports })({})`
|
|
94
|
+
|
|
95
|
+
if (process.env.DEBUG) {
|
|
96
|
+
console.info(`Sending hot update`, hotUpdateSource)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
hotUpdateCache.set(id, hotUpdateSource)
|
|
100
|
+
} catch (err) {
|
|
101
|
+
console.error(`Error processing hmr update:`, err)
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
}
|
|
105
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Options as FlowOptions } from '@vxrn/vite-flow'
|
|
2
|
+
import type { App } from 'h3'
|
|
3
|
+
import type { OutputAsset, OutputChunk } from 'rollup'
|
|
2
4
|
import type { InlineConfig } from 'vite'
|
|
3
5
|
|
|
4
6
|
export type VXRNConfig = {
|
|
@@ -19,6 +21,13 @@ export type VXRNConfig = {
|
|
|
19
21
|
webConfig?: InlineConfig
|
|
20
22
|
nativeConfig?: InlineConfig
|
|
21
23
|
flow?: FlowOptions
|
|
24
|
+
|
|
25
|
+
afterBuild?: (
|
|
26
|
+
options: VXRNConfig,
|
|
27
|
+
output: [OutputChunk, ...(OutputChunk | OutputAsset)[]]
|
|
28
|
+
) => void | Promise<void>
|
|
29
|
+
|
|
30
|
+
serve?: (options: VXRNConfig, app: App) => void
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
export type HMRListener = (update: { file: string; contents: string }) => void
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import readline from 'node:readline'
|
|
2
|
+
|
|
3
|
+
export function bindKeypressInput() {
|
|
4
|
+
if (!process.stdin.setRawMode) {
|
|
5
|
+
console.warn({
|
|
6
|
+
msg: 'Interactive mode is not supported in this environment',
|
|
7
|
+
})
|
|
8
|
+
return
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
readline.emitKeypressEvents(process.stdin)
|
|
12
|
+
process.stdin.setRawMode(true)
|
|
13
|
+
|
|
14
|
+
process.stdin.on('keypress', (_key, data) => {
|
|
15
|
+
const { ctrl, name } = data
|
|
16
|
+
if (ctrl === true) {
|
|
17
|
+
switch (name) {
|
|
18
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: <explanation>
|
|
19
|
+
case 'c':
|
|
20
|
+
process.exit()
|
|
21
|
+
case 'z':
|
|
22
|
+
process.emit('SIGTSTP', 'SIGTSTP')
|
|
23
|
+
break
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
switch (name) {
|
|
27
|
+
case 'r':
|
|
28
|
+
// ctx.broadcastToMessageClients({ method: 'reload' })
|
|
29
|
+
// ctx.log.info({
|
|
30
|
+
// msg: 'Reloading app',
|
|
31
|
+
// })
|
|
32
|
+
break
|
|
33
|
+
case 'd':
|
|
34
|
+
// ctx.broadcastToMessageClients({ method: 'devMenu' })
|
|
35
|
+
// ctx.log.info({
|
|
36
|
+
// msg: 'Opening developer menu',
|
|
37
|
+
// })
|
|
38
|
+
break
|
|
39
|
+
case 'c':
|
|
40
|
+
process.stdout.write('\u001b[2J\u001b[0;0H')
|
|
41
|
+
// TODO: after logging we should print information about port and host
|
|
42
|
+
break
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { join } from 'node:path'
|
|
2
|
+
|
|
3
|
+
export function getIndexJsonResponse({ port, root }: { port: number | string; root }) {
|
|
4
|
+
return {
|
|
5
|
+
name: 'myapp',
|
|
6
|
+
slug: 'myapp',
|
|
7
|
+
scheme: 'myapp',
|
|
8
|
+
version: '1.0.0',
|
|
9
|
+
jsEngine: 'jsc',
|
|
10
|
+
orientation: 'portrait',
|
|
11
|
+
icon: './assets/icon.png',
|
|
12
|
+
userInterfaceStyle: 'light',
|
|
13
|
+
splash: {
|
|
14
|
+
image: './assets/splash.png',
|
|
15
|
+
resizeMode: 'contain',
|
|
16
|
+
backgroundColor: '#ffffff',
|
|
17
|
+
imageUrl: 'http://127.0.0.1:8081/assets/./assets/splash.png',
|
|
18
|
+
},
|
|
19
|
+
updates: { fallbackToCacheTimeout: 0 },
|
|
20
|
+
assetBundlePatterns: ['**/*'],
|
|
21
|
+
ios: { supportsTablet: true, bundleIdentifier: 'com.natew.myapp' },
|
|
22
|
+
android: {
|
|
23
|
+
package: 'com.tamagui.myapp',
|
|
24
|
+
adaptiveIcon: {
|
|
25
|
+
foregroundImage: './assets/adaptive-icon.png',
|
|
26
|
+
backgroundColor: '#FFFFFF',
|
|
27
|
+
foregroundImageUrl: 'http://127.0.0.1:8081/assets/./assets/adaptive-icon.png',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
web: { favicon: './assets/favicon.png' },
|
|
31
|
+
extra: { eas: { projectId: '061b4470-78c7-4d6a-b850-8167fb0a3434' } },
|
|
32
|
+
_internal: {
|
|
33
|
+
isDebug: false,
|
|
34
|
+
projectRoot: root,
|
|
35
|
+
dynamicConfigPath: null,
|
|
36
|
+
staticConfigPath: join(root, 'app.json'),
|
|
37
|
+
packageJsonPath: join(root, 'package.json'),
|
|
38
|
+
},
|
|
39
|
+
sdkVersion: '50.0.0',
|
|
40
|
+
platforms: ['ios', 'android', 'web'],
|
|
41
|
+
iconUrl: `http://127.0.0.1:${port}/assets/./assets/icon.png`,
|
|
42
|
+
debuggerHost: `127.0.0.1:${port}`,
|
|
43
|
+
logUrl: `http://127.0.0.1:${port}/logs`,
|
|
44
|
+
developer: { tool: 'expo-cli', projectRoot: root },
|
|
45
|
+
packagerOpts: { dev: true },
|
|
46
|
+
mainModuleName: 'index',
|
|
47
|
+
__flipperHack: 'React Native packager is running',
|
|
48
|
+
hostUri: `127.0.0.1:${port}`,
|
|
49
|
+
bundleUrl: `http://127.0.0.1:${port}/index.bundle?platform=ios&dev=true&hot=false&lazy=true`,
|
|
50
|
+
id: '@anonymous/myapp-473c4543-3c36-4786-9db1-c66a62ac9b78',
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { UserConfig } from 'vite'
|
|
2
2
|
import { webExtensions } from '../constants'
|
|
3
3
|
|
|
4
4
|
export function getOptimizeDeps(mode: 'build' | 'serve') {
|
|
5
5
|
const needsInterop = [
|
|
6
6
|
'react',
|
|
7
|
-
'react/jsx-runtime',
|
|
8
|
-
'react/jsx-dev-runtime',
|
|
9
7
|
'react-native-web-internals',
|
|
10
8
|
'react-dom',
|
|
11
9
|
'react-native-web',
|
|
12
10
|
'react-dom/server',
|
|
11
|
+
'react/jsx-runtime',
|
|
12
|
+
'react/jsx-dev-runtime',
|
|
13
13
|
'react-dom/client',
|
|
14
14
|
'url-parse',
|
|
15
15
|
'@vxrn/safe-area',
|
|
@@ -26,11 +26,6 @@ export function getOptimizeDeps(mode: 'build' | 'serve') {
|
|
|
26
26
|
'expo-constants',
|
|
27
27
|
'expo-linking',
|
|
28
28
|
'uuid',
|
|
29
|
-
'@react-navigation/core',
|
|
30
|
-
'@react-navigation/native',
|
|
31
|
-
'@react-navigation/elements',
|
|
32
|
-
'@react-navigation/bottom-tabs',
|
|
33
|
-
'@react-navigation/native-stack',
|
|
34
29
|
'inline-style-prefixer',
|
|
35
30
|
'@docsearch/react',
|
|
36
31
|
'@algolia/autocomplete-core',
|
|
@@ -42,6 +37,11 @@ export function getOptimizeDeps(mode: 'build' | 'serve') {
|
|
|
42
37
|
|
|
43
38
|
const depsToOptimize = [
|
|
44
39
|
...needsInterop,
|
|
40
|
+
'@react-navigation/core',
|
|
41
|
+
'@react-navigation/native',
|
|
42
|
+
'@react-navigation/elements',
|
|
43
|
+
'@react-navigation/bottom-tabs',
|
|
44
|
+
'@react-navigation/native-stack',
|
|
45
45
|
'requires-port',
|
|
46
46
|
'querystringify',
|
|
47
47
|
'compare-versions',
|
|
@@ -62,6 +62,7 @@ export function getOptimizeDeps(mode: 'build' | 'serve') {
|
|
|
62
62
|
'@tamagui/linear-gradient',
|
|
63
63
|
'@react-native/normalize-color',
|
|
64
64
|
'@vxrn/router',
|
|
65
|
+
'@vxrn/router/server-render',
|
|
65
66
|
'expo-modules-core',
|
|
66
67
|
'expo-status-bar',
|
|
67
68
|
'react-native-web',
|
|
@@ -19,7 +19,6 @@ export async function getOptionsFilled(options: VXRNConfig) {
|
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
const packageRootDir = join(require.resolve('vxrn'), '../../..')
|
|
22
|
-
|
|
23
22
|
const cacheDir = join(root, 'node_modules', '.vxrn')
|
|
24
23
|
const internalPatchesDir = join(packageRootDir, 'patches')
|
|
25
24
|
const userPatchesDir = join(root, 'patches')
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import * as babel from '@babel/core'
|
|
2
|
+
import createViteFlow from '@vxrn/vite-flow'
|
|
3
|
+
import viteReactPlugin from '@vxrn/vite-native-swc'
|
|
4
|
+
import { readFile } from 'node:fs/promises'
|
|
5
|
+
import { dirname, join, relative } from 'node:path'
|
|
6
|
+
import { build, mergeConfig, resolveConfig, transformWithEsbuild, type InlineConfig } from 'vite'
|
|
7
|
+
import { nativeExtensions } from '../constants'
|
|
8
|
+
import { resolveFile } from './resolveFile'
|
|
9
|
+
import { isBuildingNativeBundle, setIsBuildingNativeBundle } from './isBuildingNativeBundle'
|
|
10
|
+
import { swapPrebuiltReactModules } from './swapPrebuiltReactModules'
|
|
11
|
+
import { reactNativeCommonJsPlugin } from '../plugins/reactNativeCommonJsPlugin'
|
|
12
|
+
import { getOptimizeDeps } from './getOptimizeDeps'
|
|
13
|
+
import type { VXRNConfigFilled } from './getOptionsFilled'
|
|
14
|
+
import FSExtra from 'fs-extra'
|
|
15
|
+
|
|
16
|
+
const { pathExists } = FSExtra
|
|
17
|
+
|
|
18
|
+
// used for normalizing hot reloads
|
|
19
|
+
export let entryRoot = ''
|
|
20
|
+
|
|
21
|
+
export async function getReactNativeBundle(options: VXRNConfigFilled, viteRNClientPlugin: any) {
|
|
22
|
+
const { root, port, cacheDir } = options
|
|
23
|
+
const { depsToOptimize } = getOptimizeDeps('build')
|
|
24
|
+
|
|
25
|
+
if (process.env.LOAD_TMP_BUNDLE) {
|
|
26
|
+
// for easier quick testing things:
|
|
27
|
+
const tmpBundle = join(process.cwd(), 'bundle.tmp.js')
|
|
28
|
+
if (await pathExists(tmpBundle)) {
|
|
29
|
+
console.info('⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ returning temp bundle ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️', tmpBundle)
|
|
30
|
+
return await readFile(tmpBundle, 'utf-8')
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (isBuildingNativeBundle) {
|
|
35
|
+
const res = await isBuildingNativeBundle
|
|
36
|
+
return res
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let done
|
|
40
|
+
setIsBuildingNativeBundle(
|
|
41
|
+
new Promise((res) => {
|
|
42
|
+
done = res
|
|
43
|
+
})
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
async function babelReanimated(input: string, filename: string) {
|
|
47
|
+
return await new Promise<string>((res, rej) => {
|
|
48
|
+
babel.transform(
|
|
49
|
+
input,
|
|
50
|
+
{
|
|
51
|
+
plugins: ['react-native-reanimated/plugin'],
|
|
52
|
+
filename,
|
|
53
|
+
},
|
|
54
|
+
(err: any, result) => {
|
|
55
|
+
if (!result || err) rej(err || 'no res')
|
|
56
|
+
res(result!.code!)
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const viteFlow = options.flow ? createViteFlow(options.flow) : null
|
|
63
|
+
|
|
64
|
+
// build app
|
|
65
|
+
let nativeBuildConfig = {
|
|
66
|
+
plugins: [
|
|
67
|
+
viteFlow,
|
|
68
|
+
|
|
69
|
+
swapPrebuiltReactModules(cacheDir),
|
|
70
|
+
|
|
71
|
+
{
|
|
72
|
+
name: 'reanimated',
|
|
73
|
+
async transform(code, id) {
|
|
74
|
+
if (code.includes('worklet')) {
|
|
75
|
+
const out = await babelReanimated(code, id)
|
|
76
|
+
return out
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
viteRNClientPlugin,
|
|
82
|
+
|
|
83
|
+
reactNativeCommonJsPlugin({
|
|
84
|
+
root,
|
|
85
|
+
port,
|
|
86
|
+
mode: 'build',
|
|
87
|
+
}),
|
|
88
|
+
|
|
89
|
+
viteReactPlugin({
|
|
90
|
+
tsDecorators: true,
|
|
91
|
+
mode: 'build',
|
|
92
|
+
}),
|
|
93
|
+
|
|
94
|
+
{
|
|
95
|
+
name: 'treat-js-files-as-jsx',
|
|
96
|
+
async transform(code, id) {
|
|
97
|
+
if (!id.includes(`expo-status-bar`)) return null
|
|
98
|
+
// Use the exposed transform from vite, instead of directly
|
|
99
|
+
// transforming with esbuild
|
|
100
|
+
return transformWithEsbuild(code, id, {
|
|
101
|
+
loader: 'jsx',
|
|
102
|
+
jsx: 'automatic',
|
|
103
|
+
})
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
].filter(Boolean),
|
|
107
|
+
|
|
108
|
+
appType: 'custom',
|
|
109
|
+
root,
|
|
110
|
+
clearScreen: false,
|
|
111
|
+
|
|
112
|
+
optimizeDeps: {
|
|
113
|
+
include: depsToOptimize,
|
|
114
|
+
esbuildOptions: {
|
|
115
|
+
jsx: 'automatic',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
resolve: {
|
|
120
|
+
extensions: nativeExtensions,
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
mode: 'development',
|
|
124
|
+
|
|
125
|
+
define: {
|
|
126
|
+
'process.env.NODE_ENV': `"development"`,
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
build: {
|
|
130
|
+
ssr: false,
|
|
131
|
+
minify: false,
|
|
132
|
+
commonjsOptions: {
|
|
133
|
+
transformMixedEsModules: true,
|
|
134
|
+
},
|
|
135
|
+
rollupOptions: {
|
|
136
|
+
input: options.entries.native,
|
|
137
|
+
treeshake: false,
|
|
138
|
+
preserveEntrySignatures: 'strict',
|
|
139
|
+
output: {
|
|
140
|
+
preserveModules: true,
|
|
141
|
+
format: 'cjs',
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
} satisfies InlineConfig
|
|
146
|
+
|
|
147
|
+
if (options.nativeConfig) {
|
|
148
|
+
nativeBuildConfig = mergeConfig(nativeBuildConfig, options.nativeConfig) as any
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// // this fixes my swap-react-native plugin not being called pre 😳
|
|
152
|
+
await resolveConfig(nativeBuildConfig, 'build')
|
|
153
|
+
|
|
154
|
+
const buildOutput = await build(nativeBuildConfig)
|
|
155
|
+
|
|
156
|
+
if (!('output' in buildOutput)) {
|
|
157
|
+
throw `❌`
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
let appCode = buildOutput.output
|
|
161
|
+
// entry last
|
|
162
|
+
.sort((a, b) => (a['isEntry'] ? 1 : -1))
|
|
163
|
+
.map((outputModule) => {
|
|
164
|
+
if (outputModule.type == 'chunk') {
|
|
165
|
+
const importsMap = {
|
|
166
|
+
currentPath: outputModule.fileName,
|
|
167
|
+
}
|
|
168
|
+
for (const imp of outputModule.imports) {
|
|
169
|
+
const relativePath = relative(dirname(outputModule.fileName), imp)
|
|
170
|
+
importsMap[relativePath[0] === '.' ? relativePath : './' + relativePath] = imp
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (outputModule.isEntry) {
|
|
174
|
+
entryRoot = dirname(outputModule.fileName)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return `
|
|
178
|
+
___modules___["${outputModule.fileName}"] = ((exports, module) => {
|
|
179
|
+
const require = createRequire(${JSON.stringify(importsMap, null, 2)})
|
|
180
|
+
|
|
181
|
+
${outputModule.code}
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
${
|
|
185
|
+
outputModule.isEntry
|
|
186
|
+
? `
|
|
187
|
+
// run entry
|
|
188
|
+
const __require = createRequire({})
|
|
189
|
+
__require("react-native")
|
|
190
|
+
__require("${outputModule.fileName}")
|
|
191
|
+
`
|
|
192
|
+
: ''
|
|
193
|
+
}
|
|
194
|
+
`
|
|
195
|
+
}
|
|
196
|
+
})
|
|
197
|
+
.join('\n')
|
|
198
|
+
|
|
199
|
+
if (!appCode) {
|
|
200
|
+
throw `❌`
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
appCode = appCode
|
|
204
|
+
// TEMP FIX for router tamagui thing since expo router 3 upgrade
|
|
205
|
+
.replaceAll('dist/esm/index.mjs"', 'dist/esm/index.js"')
|
|
206
|
+
|
|
207
|
+
// TODO this is not stable based on cwd
|
|
208
|
+
const appRootParent = join(root, '..', '..')
|
|
209
|
+
|
|
210
|
+
const prebuilds = {
|
|
211
|
+
reactJSX: join(cacheDir, 'react-jsx-runtime.js'),
|
|
212
|
+
react: join(cacheDir, 'react.js'),
|
|
213
|
+
reactNative: join(cacheDir, 'react-native.js'),
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const templateFile = resolveFile('vxrn/react-native-template.js')
|
|
217
|
+
const template = (await readFile(templateFile, 'utf-8'))
|
|
218
|
+
.replace('_virtual/virtual_react-native.js', relative(appRootParent, prebuilds.reactNative))
|
|
219
|
+
.replace('_virtual/virtual_react.js', relative(appRootParent, prebuilds.react))
|
|
220
|
+
.replaceAll('_virtual/virtual_react-jsx.js', relative(appRootParent, prebuilds.reactJSX))
|
|
221
|
+
|
|
222
|
+
const out = template + appCode
|
|
223
|
+
|
|
224
|
+
done(out)
|
|
225
|
+
setIsBuildingNativeBundle(null)
|
|
226
|
+
|
|
227
|
+
return out
|
|
228
|
+
}
|
package/src/utils/getVitePath.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { join, relative, dirname } from 'node:path'
|
|
2
|
+
import { createRequire } from 'node:module'
|
|
2
3
|
|
|
3
|
-
// @ts-ignore
|
|
4
|
-
import resolve from 'esm-resolve'
|
|
5
4
|
import FSExtra from 'fs-extra'
|
|
6
5
|
|
|
7
6
|
export async function getVitePath(
|
|
@@ -31,7 +30,8 @@ export async function getVitePath(
|
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
const sourceFile = join(process.cwd(), 'index.js')
|
|
34
|
-
const
|
|
33
|
+
const require = createRequire(moduleName)
|
|
34
|
+
const resolved = require.resolve(sourceFile)
|
|
35
35
|
// figure out symlinks
|
|
36
36
|
if (!resolved) {
|
|
37
37
|
throw new Error(
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { mergeConfig, type InlineConfig, type UserConfig } from 'vite'
|
|
2
|
+
import { getBaseViteConfig } from './getBaseViteConfig'
|
|
3
|
+
import type { VXRNConfigFilled } from './getOptionsFilled'
|
|
4
|
+
import { getOptimizeDeps } from './getOptimizeDeps'
|
|
5
|
+
import { uniq } from './uniq'
|
|
6
|
+
import { coerceToArray } from './coerceToArray'
|
|
7
|
+
import { reactNativeHMRPlugin } from '../plugins/reactNativeHMRPlugin'
|
|
8
|
+
|
|
9
|
+
export async function getViteServerConfig(config: VXRNConfigFilled) {
|
|
10
|
+
const { root, host, webConfig } = config
|
|
11
|
+
const { optimizeDeps } = getOptimizeDeps('serve')
|
|
12
|
+
|
|
13
|
+
let serverConfig: UserConfig = mergeConfig(
|
|
14
|
+
getBaseViteConfig({
|
|
15
|
+
mode: 'development',
|
|
16
|
+
}),
|
|
17
|
+
{
|
|
18
|
+
root,
|
|
19
|
+
clearScreen: false,
|
|
20
|
+
plugins: [
|
|
21
|
+
reactNativeHMRPlugin(config),
|
|
22
|
+
|
|
23
|
+
{
|
|
24
|
+
name: 'process-env-ssr',
|
|
25
|
+
transform(code, id, options) {
|
|
26
|
+
if (id.includes('node_modules')) return
|
|
27
|
+
if (code.includes('process.env.TAMAGUI_IS_SERVER')) {
|
|
28
|
+
return code.replaceAll('process.env.TAMAGUI_IS_SERVER', `${!!options?.ssr}`)
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
|
|
34
|
+
optimizeDeps,
|
|
35
|
+
|
|
36
|
+
ssr: {
|
|
37
|
+
optimizeDeps,
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
server: {
|
|
41
|
+
hmr: {
|
|
42
|
+
path: '/__vxrnhmr',
|
|
43
|
+
},
|
|
44
|
+
cors: true,
|
|
45
|
+
host,
|
|
46
|
+
},
|
|
47
|
+
} satisfies UserConfig
|
|
48
|
+
) satisfies InlineConfig
|
|
49
|
+
|
|
50
|
+
if (webConfig) {
|
|
51
|
+
serverConfig = mergeConfig(serverConfig, webConfig) as any
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (serverConfig.ssr?.noExternal && !Array.isArray(serverConfig.ssr?.noExternal)) {
|
|
55
|
+
throw new Error(`ssr.noExternal must be array`)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// vite doesnt merge arrays but we want that
|
|
59
|
+
serverConfig.ssr ||= {}
|
|
60
|
+
serverConfig.ssr.noExternal = [
|
|
61
|
+
...coerceToArray((serverConfig.ssr?.noExternal as string[]) || []),
|
|
62
|
+
...optimizeDeps.include,
|
|
63
|
+
'react',
|
|
64
|
+
'react-dom',
|
|
65
|
+
'react-dom/server',
|
|
66
|
+
'react-dom/client',
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
serverConfig.ssr.optimizeDeps = {}
|
|
70
|
+
serverConfig.ssr.optimizeDeps.exclude = uniq([
|
|
71
|
+
...(serverConfig.ssr?.optimizeDeps.exclude || []),
|
|
72
|
+
...optimizeDeps.exclude,
|
|
73
|
+
])
|
|
74
|
+
|
|
75
|
+
serverConfig.ssr.optimizeDeps.include = uniq([
|
|
76
|
+
...(serverConfig.ssr?.optimizeDeps.include || []),
|
|
77
|
+
...optimizeDeps.include,
|
|
78
|
+
])
|
|
79
|
+
|
|
80
|
+
serverConfig.ssr.optimizeDeps.needsInterop = uniq([
|
|
81
|
+
...(serverConfig.ssr?.optimizeDeps.needsInterop || []),
|
|
82
|
+
...optimizeDeps.needsInterop,
|
|
83
|
+
])
|
|
84
|
+
|
|
85
|
+
serverConfig.ssr.optimizeDeps.esbuildOptions = {
|
|
86
|
+
...(serverConfig.ssr?.optimizeDeps.esbuildOptions || {}),
|
|
87
|
+
...optimizeDeps.esbuildOptions,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// manually merge
|
|
91
|
+
if (process.env.DEBUG) {
|
|
92
|
+
console.debug('server config is', serverConfig)
|
|
93
|
+
console.debug('server ssr\n', JSON.stringify(serverConfig.ssr, null, 2))
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
serverConfig = {
|
|
97
|
+
...serverConfig,
|
|
98
|
+
plugins: [...serverConfig.plugins!],
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
console.log(`final server config ssr`, serverConfig.ssr)
|
|
102
|
+
|
|
103
|
+
return serverConfig
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const hotUpdateCache = new Map<string, string>()
|