vxrn 0.1.46 → 0.1.48
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/cli.js +12 -2
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/cli.native.js +47 -35
- package/dist/cjs/cli.native.js.map +2 -2
- package/dist/cjs/constants.js +2 -70
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/constants.native.js +2 -105
- package/dist/cjs/constants.native.js.map +2 -2
- package/dist/cjs/exports/build.js +50 -62
- package/dist/cjs/exports/build.js.map +1 -1
- package/dist/cjs/exports/build.native.js +224 -205
- package/dist/cjs/exports/build.native.js.map +2 -2
- package/dist/cjs/exports/dev.js +39 -24
- package/dist/cjs/exports/dev.js.map +1 -1
- package/dist/cjs/exports/dev.native.js +48 -50
- package/dist/cjs/exports/dev.native.js.map +2 -2
- package/dist/cjs/utils/getHtml.js +9 -6
- package/dist/cjs/utils/getHtml.js.map +1 -1
- package/dist/cjs/utils/getHtml.native.js +9 -5
- package/dist/cjs/utils/getHtml.native.js.map +2 -2
- package/dist/cjs/utils/getOptimizeDeps.js +132 -0
- package/dist/cjs/utils/getOptimizeDeps.js.map +6 -0
- package/dist/cjs/utils/getOptimizeDeps.native.js +171 -0
- package/dist/cjs/utils/getOptimizeDeps.native.js.map +6 -0
- package/dist/cjs/utils/getVitePath.js +3 -1
- package/dist/cjs/utils/getVitePath.js.map +1 -1
- package/dist/cjs/utils/getVitePath.native.js +1 -1
- package/dist/cjs/utils/getVitePath.native.js.map +1 -1
- package/dist/cjs/utils/readVXRNConfig.js +5 -3
- package/dist/cjs/utils/readVXRNConfig.js.map +1 -1
- package/dist/cjs/utils/readVXRNConfig.native.js +5 -1
- package/dist/cjs/utils/readVXRNConfig.native.js.map +2 -2
- package/dist/esm/cli.js +12 -2
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli.mjs +12 -2
- package/dist/esm/cli.native.js +47 -35
- package/dist/esm/cli.native.js.map +2 -2
- package/dist/esm/constants.js +2 -70
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/constants.mjs +2 -13
- package/dist/esm/constants.native.js +2 -102
- package/dist/esm/constants.native.js.map +2 -2
- package/dist/esm/exports/build.js +47 -60
- package/dist/esm/exports/build.js.map +1 -1
- package/dist/esm/exports/build.mjs +64 -63
- package/dist/esm/exports/build.native.js +223 -204
- package/dist/esm/exports/build.native.js.map +2 -2
- package/dist/esm/exports/dev.js +37 -21
- package/dist/esm/exports/dev.js.map +1 -1
- package/dist/esm/exports/dev.mjs +39 -30
- package/dist/esm/exports/dev.native.js +46 -47
- package/dist/esm/exports/dev.native.js.map +2 -2
- package/dist/esm/utils/getHtml.js +9 -6
- package/dist/esm/utils/getHtml.js.map +1 -1
- package/dist/esm/utils/getHtml.mjs +11 -4
- package/dist/esm/utils/getHtml.native.js +9 -5
- package/dist/esm/utils/getHtml.native.js.map +2 -2
- package/dist/esm/utils/getOptimizeDeps.js +116 -0
- package/dist/esm/utils/getOptimizeDeps.js.map +6 -0
- package/dist/esm/utils/getOptimizeDeps.mjs +18 -0
- package/dist/esm/utils/getOptimizeDeps.native.js +150 -0
- package/dist/esm/utils/getOptimizeDeps.native.js.map +6 -0
- package/dist/esm/utils/getVitePath.js +3 -1
- package/dist/esm/utils/getVitePath.js.map +1 -1
- package/dist/esm/utils/getVitePath.mjs +1 -1
- package/dist/esm/utils/getVitePath.native.js +1 -1
- package/dist/esm/utils/getVitePath.native.js.map +1 -1
- package/dist/esm/utils/readVXRNConfig.js +5 -3
- package/dist/esm/utils/readVXRNConfig.js.map +1 -1
- package/dist/esm/utils/readVXRNConfig.mjs +5 -1
- package/dist/esm/utils/readVXRNConfig.native.js +5 -1
- package/dist/esm/utils/readVXRNConfig.native.js.map +2 -2
- package/package.json +10 -10
- package/src/cli.ts +12 -2
- package/src/constants.ts +0 -77
- package/src/exports/build.ts +96 -100
- package/src/exports/dev.ts +49 -39
- package/src/utils/getHtml.ts +21 -6
- package/src/utils/getOptimizeDeps.ts +122 -0
- package/src/utils/getVitePath.ts +3 -1
- package/src/utils/readVXRNConfig.ts +6 -4
- package/types/constants.d.ts +0 -10
- package/types/exports/build.d.ts +6 -1
- package/types/utils/getHtml.d.ts +2 -1
- package/types/utils/getOptimizeDeps.d.ts +13 -0
|
@@ -177,7 +177,11 @@ function _readVXRNConfig() {
|
|
|
177
177
|
resolveOptionalAsyncFunction((_userConfig_default1 = userConfig1 == null ? void 0 : userConfig1.default) !== null && _userConfig_default1 !== void 0 ? _userConfig_default1 : {})
|
|
178
178
|
];
|
|
179
179
|
case 6:
|
|
180
|
-
throw err = _state.sent(), console.info(
|
|
180
|
+
throw err = _state.sent(), console.info(` [vxrn] Error loading config via ESM:
|
|
181
|
+
|
|
182
|
+
`.concat(err.stack, `
|
|
183
|
+
|
|
184
|
+
To load as CommonJS, set VXRN_CJS=1`)), err;
|
|
181
185
|
case 7:
|
|
182
186
|
return [
|
|
183
187
|
2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/Users/n8/vxrn/packages/vxrn/src/utils/readVXRNConfig.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAOA,aAAa;AAEpB,SAASC,oBAAoB;AAC7B,OAAOC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjB,SAAsBC,iBAAAA;SAAAA,gBAAAA,MAAAA,MAAAA,SAAAA;;SAAAA,kBAAAA;AAAAA,2BAAf,oBAAA,WAAA;QAMGC,aAGAC,YAC8BA,qBAM9BC,MAKAD,aAK8BA,sBAC7BE;;;;AA1BH,iBAAA;;YAAMP,QAAQQ,WAAW,gBAAA;;;AAA/B,cAAI,CAAE,OAAA,KAAA;AACJ,mBAAA;;cAAO,CAAC;;AAGV,cAAIC,QAAQC,IAAIC;AACRP,iCAAcF,KAAKO,QAAQG,IAAG,GAAI;cACtCC,YAAY;YACd,CAAA,GACMR,aAAaD,YAAY,kBAAA,GAC/B;;cAAOU,8BAA6BT,sBAAAA,cAAAA,OAAAA,SAAAA,WAAYU,aAAO,QAAnBV,wBAAAA,SAAAA,sBAAuB,CAAC,CAAA;;;;;;;;;cAM/C;;YAAMJ,aAAa;cAC9Be,UAAU;cACVC,SAAS;YACX,CAAA;;;AAHMX,wBAAO,OAAA,KAAA,GAKM;;YAAMA,KAAKY,cAAc,oBAAoB;cAC9DC,eAAe;YACjB,CAAA;;;AAFMd,+BAAa,OAAA,KAAA,GAInB;;YAAMC,KAAKc,MAAK;;;AAAhB,wBAAA,KAAA,GACA;;YAAON,8BAA6BT,uBAAAA,eAAAA,OAAAA,SAAAA,YAAYU,aAAO,QAAnBV,yBAAAA,SAAAA,uBAAuB,CAAC,CAAA;;;AACrDE,sBAAAA,OAAAA,KAAAA,GACPc,QAAQC,
|
|
5
|
-
"names": ["FSExtra", "createServer", "jiti", "readVXRNConfig", "requireFile", "userConfig", "vite", "err", "pathExists", "process", "env", "VXRN_CJS", "cwd", "esmResolve", "resolveOptionalAsyncFunction", "default", "logLevel", "appType", "ssrLoadModule", "fixStacktrace", "close", "console", "info", "value", "Promise"]
|
|
4
|
+
"mappings": "AAAA,OAAOA,aAAa;AAEpB,SAASC,oBAAoB;AAC7B,OAAOC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjB,SAAsBC,iBAAAA;SAAAA,gBAAAA,MAAAA,MAAAA,SAAAA;;SAAAA,kBAAAA;AAAAA,2BAAf,oBAAA,WAAA;QAMGC,aAGAC,YAC8BA,qBAM9BC,MAKAD,aAK8BA,sBAC7BE;;;;AA1BH,iBAAA;;YAAMP,QAAQQ,WAAW,gBAAA;;;AAA/B,cAAI,CAAE,OAAA,KAAA;AACJ,mBAAA;;cAAO,CAAC;;AAGV,cAAIC,QAAQC,IAAIC;AACRP,iCAAcF,KAAKO,QAAQG,IAAG,GAAI;cACtCC,YAAY;YACd,CAAA,GACMR,aAAaD,YAAY,kBAAA,GAC/B;;cAAOU,8BAA6BT,sBAAAA,cAAAA,OAAAA,SAAAA,WAAYU,aAAO,QAAnBV,wBAAAA,SAAAA,sBAAuB,CAAC,CAAA;;;;;;;;;cAM/C;;YAAMJ,aAAa;cAC9Be,UAAU;cACVC,SAAS;YACX,CAAA;;;AAHMX,wBAAO,OAAA,KAAA,GAKM;;YAAMA,KAAKY,cAAc,oBAAoB;cAC9DC,eAAe;YACjB,CAAA;;;AAFMd,+BAAa,OAAA,KAAA,GAInB;;YAAMC,KAAKc,MAAK;;;AAAhB,wBAAA,KAAA,GACA;;YAAON,8BAA6BT,uBAAAA,eAAAA,OAAAA,SAAAA,YAAYU,aAAO,QAAnBV,yBAAAA,SAAAA,uBAAuB,CAAC,CAAA;;;AACrDE,sBAAAA,OAAAA,KAAAA,GACPc,QAAQC,KAAM;;EAEN,OAAVf,IAAIgB,OAAM;;qCAAA,CAAA,GAGFhB;;;;;;;EAEV,CAAA,GAnCsBJ,gBAAAA,MAAAA,MAAAA,SAAAA;;SAqCPW,6BAA6BU,OAAU;SAAvCV,8BAAAA,MAAAA,MAAAA,SAAAA;;SAAAA,gCAAAA;AAAAA,yCAAf,oBAAA,SAA4CU,OAAU;;;;iBAChD,OAAOA,SAAU,eACnBA,QAAQA,MAAAA,IAED,YAALA,OAAiBC,OAAAA,IACX;;YAAMD;cADZA;;;;;AACFA,kBAAQ,OAAA,KAAA;;AAEV,iBAAA;;YAAOA;;;;EACT,CAAA,GAReV,8BAAAA,MAAAA,MAAAA,SAAAA;;",
|
|
5
|
+
"names": ["FSExtra", "createServer", "jiti", "readVXRNConfig", "requireFile", "userConfig", "vite", "err", "pathExists", "process", "env", "VXRN_CJS", "cwd", "esmResolve", "resolveOptionalAsyncFunction", "default", "logLevel", "appType", "ssrLoadModule", "fixStacktrace", "close", "console", "info", "stack", "value", "Promise"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vxrn",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"types": "./types/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
"@babel/code-frame": "^7.21.4",
|
|
30
30
|
"@vitejs/plugin-react": "^4.2.1",
|
|
31
31
|
"@vitejs/plugin-react-swc": "^3.6.0",
|
|
32
|
-
"@vxrn/react-native-prebuilt": "0.1.
|
|
33
|
-
"@vxrn/router": "0.1.
|
|
34
|
-
"@vxrn/safe-area": "0.1.
|
|
35
|
-
"@vxrn/vite-flow": "0.1.
|
|
36
|
-
"@vxrn/vite-native-client": "0.1.
|
|
37
|
-
"@vxrn/vite-native-hmr": "0.1.
|
|
38
|
-
"@vxrn/vite-native-swc": "0.1.
|
|
32
|
+
"@vxrn/react-native-prebuilt": "0.1.48",
|
|
33
|
+
"@vxrn/router": "0.1.48",
|
|
34
|
+
"@vxrn/safe-area": "0.1.48",
|
|
35
|
+
"@vxrn/vite-flow": "0.1.48",
|
|
36
|
+
"@vxrn/vite-native-client": "0.1.48",
|
|
37
|
+
"@vxrn/vite-native-hmr": "0.1.48",
|
|
38
|
+
"@vxrn/vite-native-swc": "0.1.48",
|
|
39
39
|
"citty": "^0.1.6",
|
|
40
40
|
"crossws": "^0.2.4",
|
|
41
41
|
"es-module-lexer": "^1.3.0",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"get-port-please": "^3.1.2",
|
|
48
48
|
"glob": "^10.3.12",
|
|
49
49
|
"h3": "^1.11.1",
|
|
50
|
-
"h3-proxy": "^1.
|
|
50
|
+
"h3-proxy": "^1.13.0",
|
|
51
51
|
"import-meta-resolve": "^4.0.0",
|
|
52
52
|
"jiti": "^1.21.0",
|
|
53
53
|
"metro-inspector-proxy": "^0.71.0",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"sirv": "^2.0.4",
|
|
61
61
|
"source-map": "^0.7.3",
|
|
62
62
|
"url": "^0.11.0",
|
|
63
|
-
"vite": "^5.2.
|
|
63
|
+
"vite": "^5.2.11",
|
|
64
64
|
"ws": "^8.7.0"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
package/src/cli.ts
CHANGED
|
@@ -59,7 +59,17 @@ const build = defineCommand({
|
|
|
59
59
|
version: '0.0.0',
|
|
60
60
|
description: 'Build your app',
|
|
61
61
|
},
|
|
62
|
-
args: {
|
|
62
|
+
args: {
|
|
63
|
+
step: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
required: false,
|
|
66
|
+
},
|
|
67
|
+
// always wanted to be able to just generate one-off pages
|
|
68
|
+
// page: {
|
|
69
|
+
// type: 'string',
|
|
70
|
+
// required: false,
|
|
71
|
+
// },
|
|
72
|
+
},
|
|
63
73
|
async run({ args }) {
|
|
64
74
|
const userConfig = await readVXRNConfig()
|
|
65
75
|
const { build } = await import(
|
|
@@ -71,7 +81,7 @@ const build = defineCommand({
|
|
|
71
81
|
console.error(err?.message || err)
|
|
72
82
|
})
|
|
73
83
|
|
|
74
|
-
const results = await build(userConfig)
|
|
84
|
+
const results = await build(userConfig, args)
|
|
75
85
|
|
|
76
86
|
if (process.env.DEBUG) {
|
|
77
87
|
console.info('results', results)
|
package/src/constants.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import type { UserConfig } from 'vite'
|
|
2
|
-
|
|
3
1
|
export const DEFAULT_PORT = 8081
|
|
4
2
|
|
|
5
|
-
// TODO move to router
|
|
6
|
-
export const EMPTY_LOADER_STRING = `function loader() {/* ✷✷✷ */};`
|
|
7
|
-
|
|
8
3
|
export const nativeExtensions = [
|
|
9
4
|
'.native.tsx',
|
|
10
5
|
'.native.jsx',
|
|
@@ -30,75 +25,3 @@ export const webExtensions = [
|
|
|
30
25
|
'.css',
|
|
31
26
|
'.json',
|
|
32
27
|
]
|
|
33
|
-
|
|
34
|
-
const needsInterop = [
|
|
35
|
-
'react',
|
|
36
|
-
'react/jsx-runtime',
|
|
37
|
-
'react/jsx-dev-runtime',
|
|
38
|
-
'react-native-web-internals',
|
|
39
|
-
'react-dom',
|
|
40
|
-
'react-native-web',
|
|
41
|
-
'react-dom/server',
|
|
42
|
-
'react-dom/client',
|
|
43
|
-
|
|
44
|
-
'url-parse',
|
|
45
|
-
'@vxrn/safe-area',
|
|
46
|
-
'query-string',
|
|
47
|
-
'escape-string-regexp',
|
|
48
|
-
'use-latest-callback',
|
|
49
|
-
'react-is',
|
|
50
|
-
'fast-deep-equal',
|
|
51
|
-
'@react-navigation/native',
|
|
52
|
-
'tamagui/linear-gradient',
|
|
53
|
-
'react-native-svg',
|
|
54
|
-
'@supabase/auth-helpers-react',
|
|
55
|
-
'parse-numeric-range',
|
|
56
|
-
'use-sync-external-store',
|
|
57
|
-
'use-sync-external-store/shim',
|
|
58
|
-
'swr',
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
export const depsToOptimize = [
|
|
62
|
-
...needsInterop,
|
|
63
|
-
'@react-native/normalize-color',
|
|
64
|
-
'@vxrn/router',
|
|
65
|
-
'expo-modules-core',
|
|
66
|
-
'expo-status-bar',
|
|
67
|
-
'react-native-web',
|
|
68
|
-
'react-native-web-lite',
|
|
69
|
-
'react-native',
|
|
70
|
-
'@tamagui/alert-dialog',
|
|
71
|
-
'@tamagui/avatar',
|
|
72
|
-
'@tamagui/core',
|
|
73
|
-
'@tamagui/dialog',
|
|
74
|
-
'@tamagui/group',
|
|
75
|
-
'@tamagui/helpers-icon',
|
|
76
|
-
'@tamagui/helpers',
|
|
77
|
-
'@tamagui/image',
|
|
78
|
-
'@tamagui/lucide-icons',
|
|
79
|
-
'@tamagui/popover',
|
|
80
|
-
'@tamagui/popper',
|
|
81
|
-
'@tamagui/scroll-view',
|
|
82
|
-
'@tamagui/select',
|
|
83
|
-
'@tamagui/sheet',
|
|
84
|
-
'@tamagui/switch',
|
|
85
|
-
'@tamagui/tabs',
|
|
86
|
-
'@tamagui/toast',
|
|
87
|
-
'@tamagui/toggle-group',
|
|
88
|
-
'@tamagui/tooltip',
|
|
89
|
-
'@tamagui/use-window-dimensions',
|
|
90
|
-
'@tamagui/web',
|
|
91
|
-
'tamagui',
|
|
92
|
-
'react-native-web',
|
|
93
|
-
'react-native-web-lite',
|
|
94
|
-
'reforest',
|
|
95
|
-
]
|
|
96
|
-
|
|
97
|
-
export const optimizeDeps = {
|
|
98
|
-
include: depsToOptimize,
|
|
99
|
-
needsInterop,
|
|
100
|
-
exclude: ['util'],
|
|
101
|
-
esbuildOptions: {
|
|
102
|
-
resolveExtensions: webExtensions,
|
|
103
|
-
},
|
|
104
|
-
} satisfies UserConfig['optimizeDeps']
|
package/src/exports/build.ts
CHANGED
|
@@ -2,16 +2,17 @@ import { build as esbuild } from 'esbuild'
|
|
|
2
2
|
import { resolve as importMetaResolve } from 'import-meta-resolve'
|
|
3
3
|
import fs from 'node:fs'
|
|
4
4
|
import { tmpdir } from 'node:os'
|
|
5
|
-
import path
|
|
5
|
+
import path from 'node:path'
|
|
6
6
|
import { mergeConfig, build as viteBuild, type UserConfig } from 'vite'
|
|
7
|
-
|
|
8
7
|
import FSExtra from 'fs-extra'
|
|
9
8
|
import type { OutputAsset, OutputChunk, RollupOutput } from 'rollup'
|
|
10
9
|
import type { VXRNConfig } from '../types'
|
|
11
10
|
import { getBaseViteConfig } from '../utils/getBaseViteConfig'
|
|
12
11
|
import { getHtml } from '../utils/getHtml'
|
|
12
|
+
import { getOptimizeDeps } from '../utils/getOptimizeDeps'
|
|
13
13
|
import { getOptionsFilled, type VXRNConfigFilled } from '../utils/getOptionsFilled'
|
|
14
|
-
|
|
14
|
+
|
|
15
|
+
Error.stackTraceLimit = Infinity
|
|
15
16
|
|
|
16
17
|
export const resolveFile = (path: string) => {
|
|
17
18
|
try {
|
|
@@ -23,6 +24,8 @@ export const resolveFile = (path: string) => {
|
|
|
23
24
|
|
|
24
25
|
const { ensureDir, existsSync, readFile, pathExists } = FSExtra
|
|
25
26
|
|
|
27
|
+
type BuildOptions = { step?: string; page?: string }
|
|
28
|
+
|
|
26
29
|
// web only for now
|
|
27
30
|
|
|
28
31
|
// TODO:
|
|
@@ -30,12 +33,14 @@ const { ensureDir, existsSync, readFile, pathExists } = FSExtra
|
|
|
30
33
|
// - move router stuff into router package
|
|
31
34
|
// - generateStaticPages becomes a vite 'post' postbuild callback in router plugin
|
|
32
35
|
|
|
33
|
-
export const build = async (optionsIn: VXRNConfig) => {
|
|
36
|
+
export const build = async (optionsIn: VXRNConfig, buildOptions: BuildOptions = {}) => {
|
|
34
37
|
const options = await getOptionsFilled(optionsIn)
|
|
35
38
|
|
|
36
39
|
// TODO?
|
|
37
40
|
process.env.NODE_ENV = 'production'
|
|
38
41
|
|
|
42
|
+
const { optimizeDeps } = getOptimizeDeps('build')
|
|
43
|
+
|
|
39
44
|
let webBuildConfig = mergeConfig(
|
|
40
45
|
getBaseViteConfig({
|
|
41
46
|
mode: 'production',
|
|
@@ -51,54 +56,29 @@ export const build = async (optionsIn: VXRNConfig) => {
|
|
|
51
56
|
webBuildConfig = mergeConfig(webBuildConfig, options.webConfig) as any
|
|
52
57
|
}
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
if (buildOptions.step !== 'generate') {
|
|
60
|
+
console.info(`build client`)
|
|
61
|
+
await viteBuild(
|
|
62
|
+
mergeConfig(webBuildConfig, {
|
|
63
|
+
build: {
|
|
64
|
+
ssrManifest: true,
|
|
65
|
+
outDir: 'dist/client',
|
|
66
|
+
},
|
|
67
|
+
} satisfies UserConfig)
|
|
68
|
+
)
|
|
69
|
+
}
|
|
63
70
|
|
|
64
71
|
console.info(`build server`)
|
|
65
72
|
const { output } = (await viteBuild(
|
|
66
73
|
mergeConfig(webBuildConfig, {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (id[0] === '.') {
|
|
73
|
-
const absolutePath = resolve(dirname(importer), id)
|
|
74
|
-
const webPath = absolutePath.replace(/(.m?js)/, '') + '.web.js'
|
|
75
|
-
if (webPath === id) return
|
|
76
|
-
try {
|
|
77
|
-
const directoryPath = absolutePath + '/index.web.js'
|
|
78
|
-
if (await pathExists(directoryPath)) {
|
|
79
|
-
console.info(`temp fix found ${directoryPath}`)
|
|
80
|
-
return directoryPath
|
|
81
|
-
}
|
|
82
|
-
if (await pathExists(webPath)) {
|
|
83
|
-
console.info(`temp fix found ${webPath}`)
|
|
84
|
-
return webPath
|
|
85
|
-
}
|
|
86
|
-
} catch (err) {
|
|
87
|
-
console.warn(`error probably fine`, err)
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
|
|
94
|
-
optimizeDeps: {
|
|
95
|
-
esbuildOptions: {
|
|
96
|
-
format: 'cjs',
|
|
97
|
-
},
|
|
98
|
-
},
|
|
74
|
+
// optimizeDeps: {
|
|
75
|
+
// esbuildOptions: {
|
|
76
|
+
// format: 'cjs',
|
|
77
|
+
// },
|
|
78
|
+
// },
|
|
99
79
|
|
|
100
80
|
ssr: {
|
|
101
|
-
noExternal:
|
|
81
|
+
noExternal: optimizeDeps.include,
|
|
102
82
|
optimizeDeps,
|
|
103
83
|
},
|
|
104
84
|
|
|
@@ -111,7 +91,7 @@ export const build = async (optionsIn: VXRNConfig) => {
|
|
|
111
91
|
external: [],
|
|
112
92
|
},
|
|
113
93
|
},
|
|
114
|
-
})
|
|
94
|
+
} satisfies UserConfig)
|
|
115
95
|
)) as RollupOutput
|
|
116
96
|
|
|
117
97
|
console.info(`generating static pages`)
|
|
@@ -137,58 +117,70 @@ async function generateStaticPages(
|
|
|
137
117
|
|
|
138
118
|
const assets: OutputAsset[] = []
|
|
139
119
|
|
|
140
|
-
const allRoutes
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
120
|
+
const allRoutes: {
|
|
121
|
+
path: string
|
|
122
|
+
params: Object
|
|
123
|
+
loaderData: any
|
|
124
|
+
}[] = []
|
|
125
|
+
|
|
126
|
+
for (const output of serverOutput) {
|
|
127
|
+
if (output.type === 'asset') {
|
|
128
|
+
assets.push(output)
|
|
129
|
+
continue
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const id = output.facadeModuleId || ''
|
|
133
|
+
const file = path.basename(id)
|
|
134
|
+
const name = file.replace(/\.[^/.]+$/, '')
|
|
135
|
+
|
|
136
|
+
if (!id || file[0] === '_' || file.includes('entry-server')) {
|
|
137
|
+
continue
|
|
138
|
+
}
|
|
139
|
+
if (id.includes('+api')) {
|
|
140
|
+
continue
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const endpointPath = path.join(options.root, 'dist/server', output.fileName)
|
|
144
|
+
|
|
145
|
+
const exported = await import(endpointPath)
|
|
146
|
+
|
|
147
|
+
const paramsList = ((await exported.generateStaticParams?.()) ?? [{}]) as Object[]
|
|
148
|
+
|
|
149
|
+
for (const params of paramsList) {
|
|
150
|
+
const path = getUrl(params)
|
|
151
|
+
const loaderData = (await exported.loader?.({ path, params })) ?? {}
|
|
152
|
+
allRoutes.push({ path, params, loaderData })
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function getUrl(_params = {}) {
|
|
156
|
+
if (name === 'index') {
|
|
157
|
+
return '/'
|
|
158
|
+
}
|
|
159
|
+
if (name.startsWith('[...')) {
|
|
160
|
+
const part = name.replace('[...', '').replace(']', '')
|
|
161
|
+
return `/${_params[part]}`
|
|
162
|
+
}
|
|
163
|
+
return `/${name
|
|
164
|
+
.split('/')
|
|
165
|
+
.map((part) => {
|
|
166
|
+
if (part[0] === '[') {
|
|
167
|
+
const found = _params[part.slice(1, part.length - 1)]
|
|
168
|
+
if (!found) {
|
|
169
|
+
console.warn('not found', { _params, part })
|
|
170
|
+
}
|
|
171
|
+
return found
|
|
172
|
+
}
|
|
173
|
+
return part
|
|
174
|
+
})
|
|
175
|
+
.join('/')}`
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// can build them in parallel
|
|
180
|
+
// const allRoutes = (
|
|
181
|
+
// await Promise.all(
|
|
182
|
+
// )
|
|
183
|
+
// ).flat()
|
|
192
184
|
|
|
193
185
|
// for now just inline
|
|
194
186
|
const cssStringRaw = assets
|
|
@@ -211,7 +203,10 @@ async function generateStaticPages(
|
|
|
211
203
|
const cssString = await FSExtra.readFile(tmpCssFile, 'utf-8')
|
|
212
204
|
|
|
213
205
|
// pre-render each route...
|
|
214
|
-
for (const { path, loaderData } of allRoutes) {
|
|
206
|
+
for (const { path, loaderData, params } of allRoutes) {
|
|
207
|
+
const loaderProps = { params }
|
|
208
|
+
globalThis['__vxrnLoaderProps__'] = loaderProps
|
|
209
|
+
console.info(`render`, path)
|
|
215
210
|
const { appHtml, headHtml } = await render({ path })
|
|
216
211
|
const slashFileName = `${path === '/' ? '/index' : path}.html`
|
|
217
212
|
const clientHtmlPath = toAbsolute(`dist/client${slashFileName}`)
|
|
@@ -221,6 +216,7 @@ async function generateStaticPages(
|
|
|
221
216
|
appHtml,
|
|
222
217
|
headHtml,
|
|
223
218
|
loaderData,
|
|
219
|
+
loaderProps,
|
|
224
220
|
css: cssString,
|
|
225
221
|
})
|
|
226
222
|
const filePath = toAbsolute(`dist/static${slashFileName}`)
|
package/src/exports/dev.ts
CHANGED
|
@@ -13,7 +13,6 @@ import { createServer as nodeCreateServer } from 'node:http'
|
|
|
13
13
|
import { dirname, join, relative, resolve } from 'node:path'
|
|
14
14
|
import readline from 'node:readline'
|
|
15
15
|
import { WebSocket } from 'ws'
|
|
16
|
-
|
|
17
16
|
import * as babel from '@babel/core'
|
|
18
17
|
import { buildReact, buildReactJSX, buildReactNative } from '@vxrn/react-native-prebuilt'
|
|
19
18
|
import viteReactPlugin, { swcTransform, transformForBuild } from '@vxrn/vite-native-swc'
|
|
@@ -33,7 +32,7 @@ import {
|
|
|
33
32
|
import createViteFlow from '@vxrn/vite-flow'
|
|
34
33
|
import type { Peer } from 'crossws'
|
|
35
34
|
import { resolve as importMetaResolve } from 'import-meta-resolve'
|
|
36
|
-
import {
|
|
35
|
+
import { nativeExtensions } from '../constants'
|
|
37
36
|
import { clientInjectionsPlugin } from '../plugins/clientInjectPlugin'
|
|
38
37
|
import { reactNativeCommonJsPlugin } from '../plugins/reactNativeCommonJsPlugin'
|
|
39
38
|
import type { VXRNConfig } from '../types'
|
|
@@ -41,12 +40,15 @@ import { getBaseViteConfig } from '../utils/getBaseViteConfig'
|
|
|
41
40
|
import { getOptionsFilled, type VXRNConfigFilled } from '../utils/getOptionsFilled'
|
|
42
41
|
import { getVitePath } from '../utils/getVitePath'
|
|
43
42
|
import { checkPatches } from '../utils/patches'
|
|
43
|
+
import { getOptimizeDeps } from '../utils/getOptimizeDeps'
|
|
44
44
|
|
|
45
45
|
// sorry for the mess, exploring before abstracting
|
|
46
46
|
|
|
47
47
|
let isBuildingNativeBundle: Promise<string> | null = null
|
|
48
48
|
const hotUpdateCache = new Map<string, string>()
|
|
49
49
|
|
|
50
|
+
let connectedNativeClients = 0
|
|
51
|
+
|
|
50
52
|
export const resolveFile = (path: string) => {
|
|
51
53
|
try {
|
|
52
54
|
return importMetaResolve(path, import.meta.url).replace('file://', '')
|
|
@@ -176,7 +178,6 @@ export const dev = async ({ clean, ...rest }: VXRNConfig & { clean?: boolean })
|
|
|
176
178
|
const { handleUpgrade } = wsAdapter(app.websocket)
|
|
177
179
|
|
|
178
180
|
// vite hmr two way bridge:
|
|
179
|
-
// vite hmr:
|
|
180
181
|
app.use(
|
|
181
182
|
'/__vxrnhmr',
|
|
182
183
|
defineEventHandler({
|
|
@@ -217,6 +218,7 @@ export const dev = async ({ clean, ...rest }: VXRNConfig & { clean?: boolean })
|
|
|
217
218
|
websocket: {
|
|
218
219
|
open(peer) {
|
|
219
220
|
console.debug('[hmr] open', peer)
|
|
221
|
+
connectedNativeClients++
|
|
220
222
|
},
|
|
221
223
|
|
|
222
224
|
message(peer, message) {
|
|
@@ -228,6 +230,7 @@ export const dev = async ({ clean, ...rest }: VXRNConfig & { clean?: boolean })
|
|
|
228
230
|
|
|
229
231
|
close(peer, event) {
|
|
230
232
|
console.info('[hmr] close', peer, event)
|
|
233
|
+
connectedNativeClients--
|
|
231
234
|
},
|
|
232
235
|
|
|
233
236
|
error(peer, error) {
|
|
@@ -291,11 +294,14 @@ export const dev = async ({ clean, ...rest }: VXRNConfig & { clean?: boolean })
|
|
|
291
294
|
)
|
|
292
295
|
|
|
293
296
|
// Define proxy event handler
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
297
|
+
app.use(
|
|
298
|
+
eventHandler(
|
|
299
|
+
createProxyEventHandler({
|
|
300
|
+
target: `http://127.0.0.1:${vitePort}`,
|
|
301
|
+
enableLogger: process.env.DEBUG?.startsWith('vxrn'),
|
|
302
|
+
})
|
|
303
|
+
)
|
|
304
|
+
)
|
|
299
305
|
|
|
300
306
|
const server = nodeCreateServer(toNodeListener(app))
|
|
301
307
|
|
|
@@ -310,21 +316,23 @@ export const dev = async ({ clean, ...rest }: VXRNConfig & { clean?: boolean })
|
|
|
310
316
|
|
|
311
317
|
console.info(`Server running on http://localhost:${port}`)
|
|
312
318
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
319
|
+
server.once('listening', () => {
|
|
320
|
+
// bridge socket between vite
|
|
321
|
+
if (vitePort) {
|
|
322
|
+
socket = new WebSocket(`ws://127.0.0.1:${vitePort}/__vxrnhmr`, 'vite-hmr')
|
|
316
323
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
324
|
+
socket.on('message', (msg) => {
|
|
325
|
+
const message = msg.toString()
|
|
326
|
+
for (const listener of [...clients]) {
|
|
327
|
+
listener.send(message)
|
|
328
|
+
}
|
|
329
|
+
})
|
|
323
330
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
331
|
+
socket.on('error', (err) => {
|
|
332
|
+
console.info('error bridging socket to vite', err)
|
|
333
|
+
})
|
|
334
|
+
}
|
|
335
|
+
})
|
|
328
336
|
|
|
329
337
|
return {
|
|
330
338
|
closePromise: new Promise((res) => viteServer.httpServer?.on('close', res)),
|
|
@@ -339,6 +347,7 @@ export const dev = async ({ clean, ...rest }: VXRNConfig & { clean?: boolean })
|
|
|
339
347
|
|
|
340
348
|
async function getReactNativeBundle(options: VXRNConfigFilled, viteRNClientPlugin: any) {
|
|
341
349
|
const { root, port, cacheDir } = options
|
|
350
|
+
const { depsToOptimize } = getOptimizeDeps('build')
|
|
342
351
|
|
|
343
352
|
if (process.env.LOAD_TMP_BUNDLE) {
|
|
344
353
|
// for easier quick testing things:
|
|
@@ -765,23 +774,9 @@ function isWithin(outer: string, inner: string) {
|
|
|
765
774
|
// used for normalizing hot reloads
|
|
766
775
|
let entryRoot = ''
|
|
767
776
|
|
|
768
|
-
// function watchNodeModules(modules: string[]): PluginOption {
|
|
769
|
-
// return {
|
|
770
|
-
// name: 'watch-node-modules',
|
|
771
|
-
// config() {
|
|
772
|
-
// return {
|
|
773
|
-
// server: {
|
|
774
|
-
// watch: {
|
|
775
|
-
// ignored: modules.map((m) => `!**/packages/${m}/**`),
|
|
776
|
-
// },
|
|
777
|
-
// },
|
|
778
|
-
// }
|
|
779
|
-
// },
|
|
780
|
-
// }
|
|
781
|
-
// }
|
|
782
|
-
|
|
783
777
|
async function getViteServerConfig(config: VXRNConfigFilled) {
|
|
784
|
-
const { root, host, webConfig
|
|
778
|
+
const { root, host, webConfig } = config
|
|
779
|
+
const { optimizeDeps } = getOptimizeDeps('serve')
|
|
785
780
|
|
|
786
781
|
let serverConfig: UserConfig = mergeConfig(
|
|
787
782
|
getBaseViteConfig({
|
|
@@ -792,7 +787,6 @@ async function getViteServerConfig(config: VXRNConfigFilled) {
|
|
|
792
787
|
clearScreen: false,
|
|
793
788
|
plugins: [
|
|
794
789
|
reactNativeHMRPlugin(config),
|
|
795
|
-
// watchNodeModules(['@tamagui/popper'])
|
|
796
790
|
|
|
797
791
|
{
|
|
798
792
|
name: 'process-env-ssr',
|
|
@@ -804,11 +798,24 @@ async function getViteServerConfig(config: VXRNConfigFilled) {
|
|
|
804
798
|
},
|
|
805
799
|
},
|
|
806
800
|
],
|
|
801
|
+
|
|
807
802
|
optimizeDeps,
|
|
803
|
+
|
|
808
804
|
ssr: {
|
|
809
|
-
noExternal
|
|
805
|
+
// noExternal true causes many incompat issues because we need things on disk to work
|
|
806
|
+
// eg generally node uses .cjs extensions to "switch" back to cjs mode on import, but once bundled
|
|
807
|
+
// this wont happen, breaking many things
|
|
808
|
+
// but we need react related things always so they dont duplicate
|
|
809
|
+
noExternal: [
|
|
810
|
+
...optimizeDeps.include,
|
|
811
|
+
'react',
|
|
812
|
+
'react-dom',
|
|
813
|
+
'react-dom/server',
|
|
814
|
+
'react-dom/client',
|
|
815
|
+
],
|
|
810
816
|
optimizeDeps,
|
|
811
817
|
},
|
|
818
|
+
|
|
812
819
|
server: {
|
|
813
820
|
hmr: {
|
|
814
821
|
path: '/__vxrnhmr',
|
|
@@ -850,6 +857,9 @@ function reactNativeHMRPlugin({ root }: VXRNConfigFilled) {
|
|
|
850
857
|
if (!isWithin(root, file)) {
|
|
851
858
|
return
|
|
852
859
|
}
|
|
860
|
+
if (!connectedNativeClients) {
|
|
861
|
+
return
|
|
862
|
+
}
|
|
853
863
|
|
|
854
864
|
const [module] = modules
|
|
855
865
|
if (!module) return
|