diff --git a/.gitignore b/.gitignore
index 5d091a4b..dfaa608d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/node_modules/
+/deps/
.pnpm-debug.log
diff --git a/examples/vite-plugin-ssr/package.json b/examples/vite-plugin-ssr/package.json
index 1ad9198b..d9923ec5 100644
--- a/examples/vite-plugin-ssr/package.json
+++ b/examples/vite-plugin-ssr/package.json
@@ -2,7 +2,7 @@
"scripts": {
"dev": "npm run server",
"prod": "npm run build && npm run server:prod",
- "build": "vite build && vite build --ssr",
+ "build": "vite build",
"server": "node ./server",
"server:prod": "cross-env NODE_ENV=production node ./server"
},
@@ -13,7 +13,7 @@
"react": "^17.0.2",
"react-dom": "^17.0.2",
"telefunc": "0.1.24",
- "vite": "2.6.7",
- "vite-plugin-ssr": "^0.3.26"
+ "vite": "^3.0.9",
+ "vite-plugin-ssr": "^0.4.26"
}
}
diff --git a/examples/vite-plugin-ssr/renderer/_default.page.client.jsx b/examples/vite-plugin-ssr/renderer/_default.page.client.jsx
index 696dad62..ffbfd6fc 100644
--- a/examples/vite-plugin-ssr/renderer/_default.page.client.jsx
+++ b/examples/vite-plugin-ssr/renderer/_default.page.client.jsx
@@ -1,11 +1,9 @@
+export { render }
+
import ReactDOM from 'react-dom'
import React from 'react'
-import { getPage } from 'vite-plugin-ssr/client'
-
-hydrate()
-async function hydrate() {
- const pageContext = await getPage()
+function render(pageContext) {
const { Page, pageProps } = pageContext
ReactDOM.hydrate(, document.getElementById('page-view'))
// For `../.testRun.ts`
diff --git a/examples/vite-plugin-ssr/server/index.js b/examples/vite-plugin-ssr/server/index.js
index 412e04dd..c2974e05 100644
--- a/examples/vite-plugin-ssr/server/index.js
+++ b/examples/vite-plugin-ssr/server/index.js
@@ -1,5 +1,5 @@
const express = require('express')
-const { createPageRenderer } = require('vite-plugin-ssr')
+const { renderPage } = require('vite-plugin-ssr')
const { telefunc, provideTelefuncContext } = require('telefunc')
const isProduction = process.env.NODE_ENV === 'production'
@@ -17,7 +17,7 @@ async function startServer() {
const vite = require('vite')
viteDevServer = await vite.createServer({
root,
- server: { middlewareMode: 'ssr' }
+ server: { middlewareMode: true }
})
app.use(viteDevServer.middlewares)
}
@@ -39,12 +39,10 @@ async function startServer() {
res.status(statusCode).type(contentType).send(body)
})
- const renderPage = createPageRenderer({ viteDevServer, isProduction, root })
app.get('*', async (req, res, next) => {
- const { user, originalUrl: url } = req
const pageContextInit = {
- user,
- url
+ user: req.user,
+ urlOriginal: req.originalUrl
}
const pageContext = await renderPage(pageContextInit)
const { httpResponse } = pageContext
diff --git a/package.json b/package.json
index 90f9f31a..534cd3d1 100644
--- a/package.json
+++ b/package.json
@@ -40,5 +40,8 @@
},
"dependencies": {
"@brillout/submodule-init": "0.1.2"
+ },
+ "devDependencies": {
+ "@brillout/dev-my-dep": "^0.0.9"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d3e63454..59deedfb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,9 +4,12 @@ importers:
.:
specifiers:
+ '@brillout/dev-my-dep': ^0.0.9
'@brillout/submodule-init': 0.1.2
dependencies:
'@brillout/submodule-init': 0.1.2
+ devDependencies:
+ '@brillout/dev-my-dep': 0.0.9
docs:
specifiers:
@@ -174,8 +177,8 @@ importers:
react: ^17.0.2
react-dom: ^17.0.2
telefunc: 0.1.24
- vite: 2.6.7
- vite-plugin-ssr: ^0.3.26
+ vite: ^3.0.9
+ vite-plugin-ssr: ^0.4.26
dependencies:
'@vitejs/plugin-react': 1.1.4
cross-env: 7.0.3
@@ -183,8 +186,8 @@ importers:
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
telefunc: link:../../telefunc
- vite: 2.6.7
- vite-plugin-ssr: 0.3.51_vite@2.6.7
+ vite: 3.0.9
+ vite-plugin-ssr: 0.4.26_vite@3.0.9
libframe/docs:
specifiers:
@@ -290,11 +293,13 @@ importers:
ts-morph: ^14.0.0
typescript: ^4.7.4
vite: ^2.4.3
+ vite-plugin-import-build: ^0.2.3
dependencies:
'@brillout/json-s': 0.4.6
'@brillout/libassert': 0.5.8
es-module-lexer: 0.7.1
ts-morph: 14.0.0
+ vite-plugin-import-build: 0.2.3
devDependencies:
'@nuxt/types': 2.15.8
'@types/express': 4.17.13
@@ -2506,6 +2511,15 @@ packages:
'@brillout/json-s': 0.1.5
dev: false
+ /@brillout/debug/0.1.1:
+ resolution: {integrity: sha512-8eswfYbIoRp1Uz0i50Fztk6z207YRY+rxNL0nkvZ1qYPUx2wxsFQr3J1agmmXXgoahsy/HFqhyApsSuaq8DHgw==}
+ dev: false
+
+ /@brillout/dev-my-dep/0.0.9:
+ resolution: {integrity: sha512-x1/qCMGwE0wCARtnqYIPBbDxwtYUmum0sDQyohR0LwCGvPR3V3GAWzBNUYVnu2rcsJ/mKidYBlQkFeyYB3n9Kw==}
+ hasBin: true
+ dev: true
+
/@brillout/format-text/0.1.3:
resolution: {integrity: sha512-79/JKUOr+POW3XAfRDDxoxCjGBeD5KVwkzBWhK7KPA66HCTwEqb7unqxfVGSJZ9MnL/NiMb0shhzRkydMC/YFg==}
dependencies:
@@ -2583,6 +2597,15 @@ packages:
engines: {node: '>=4.0.0'}
dev: false
+ /@esbuild/linux-loong64/0.14.54:
+ resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/@gar/promisify/1.1.2:
resolution: {integrity: sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==}
dev: false
@@ -4731,6 +4754,13 @@ packages:
resolution: {integrity: sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==}
dev: false
+ /@zkochan/rimraf/2.1.2:
+ resolution: {integrity: sha512-Lc2oK51J6aQWcLWTloobJun5ZF41BbTDdLvE+aMcexoVWFoFqvZmnZoyXR2IZk6NJEVoZW8tjgtvQLfTsmRs2Q==}
+ engines: {node: '>=12.10'}
+ dependencies:
+ rimraf: 3.0.2
+ dev: false
+
/JSONStream/1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@@ -4797,6 +4827,12 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ /acorn/8.8.0:
+ resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: false
+
/add-stream/1.0.0:
resolution: {integrity: sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=}
dev: false
@@ -5316,6 +5352,13 @@ packages:
tweetnacl: 0.14.5
dev: false
+ /better-path-resolve/1.0.0:
+ resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-windows: 1.0.2
+ dev: false
+
/big.js/5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
@@ -7463,6 +7506,10 @@ packages:
unbox-primitive: 1.0.1
dev: false
+ /es-module-lexer/0.10.5:
+ resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==}
+ dev: false
+
/es-module-lexer/0.7.1:
resolution: {integrity: sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==}
dev: false
@@ -7484,6 +7531,15 @@ packages:
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
dev: false
+ /esbuild-android-64/0.14.54:
+ resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-android-arm64/0.13.15:
resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==}
cpu: [arm64]
@@ -7508,6 +7564,15 @@ packages:
dev: false
optional: true
+ /esbuild-android-arm64/0.14.54:
+ resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-darwin-64/0.13.15:
resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==}
cpu: [x64]
@@ -7532,6 +7597,15 @@ packages:
dev: false
optional: true
+ /esbuild-darwin-64/0.14.54:
+ resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-darwin-arm64/0.13.15:
resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==}
cpu: [arm64]
@@ -7556,6 +7630,15 @@ packages:
dev: false
optional: true
+ /esbuild-darwin-arm64/0.14.54:
+ resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-freebsd-64/0.13.15:
resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==}
cpu: [x64]
@@ -7580,6 +7663,15 @@ packages:
dev: false
optional: true
+ /esbuild-freebsd-64/0.14.54:
+ resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-freebsd-arm64/0.13.15:
resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==}
cpu: [arm64]
@@ -7604,6 +7696,15 @@ packages:
dev: false
optional: true
+ /esbuild-freebsd-arm64/0.14.54:
+ resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-32/0.13.15:
resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==}
cpu: [ia32]
@@ -7628,6 +7729,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-32/0.14.54:
+ resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-64/0.13.15:
resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==}
cpu: [x64]
@@ -7652,6 +7762,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-64/0.14.54:
+ resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-arm/0.13.15:
resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==}
cpu: [arm]
@@ -7676,6 +7795,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-arm/0.14.54:
+ resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-arm64/0.13.15:
resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==}
cpu: [arm64]
@@ -7700,6 +7828,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-arm64/0.14.54:
+ resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-mips64le/0.13.15:
resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==}
cpu: [mips64el]
@@ -7724,6 +7861,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-mips64le/0.14.54:
+ resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-ppc64le/0.13.15:
resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==}
cpu: [ppc64]
@@ -7748,6 +7894,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-ppc64le/0.14.54:
+ resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-riscv64/0.14.21:
resolution: {integrity: sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==}
engines: {node: '>=12'}
@@ -7757,6 +7912,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-riscv64/0.14.54:
+ resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-linux-s390x/0.14.21:
resolution: {integrity: sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==}
engines: {node: '>=12'}
@@ -7766,6 +7930,15 @@ packages:
dev: false
optional: true
+ /esbuild-linux-s390x/0.14.54:
+ resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-netbsd-64/0.13.15:
resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==}
cpu: [x64]
@@ -7790,6 +7963,15 @@ packages:
dev: false
optional: true
+ /esbuild-netbsd-64/0.14.54:
+ resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-node-loader/0.6.5:
resolution: {integrity: sha512-uPP+dllWm38cFvDysdocutN3lfe5pTIbddAHp1ENyLzpHYqE2r+3Wo+pfg9X3p8DFWwzIisft5YkeBIthIcixw==}
dependencies:
@@ -7820,6 +8002,15 @@ packages:
dev: false
optional: true
+ /esbuild-openbsd-64/0.14.54:
+ resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-register/3.3.2_esbuild@0.13.15:
resolution: {integrity: sha512-jceAtTO6zxPmCfSD5cBb3rgIK1vmuqCKYwgylHiS1BF4pq0jJiJb4K2QMuqF4BEw7XDBRatYzip0upyTzfkgsQ==}
peerDependencies:
@@ -7852,6 +8043,15 @@ packages:
dev: false
optional: true
+ /esbuild-sunos-64/0.14.54:
+ resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-windows-32/0.13.15:
resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==}
cpu: [ia32]
@@ -7876,6 +8076,15 @@ packages:
dev: false
optional: true
+ /esbuild-windows-32/0.14.54:
+ resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-windows-64/0.13.15:
resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==}
cpu: [x64]
@@ -7900,6 +8109,15 @@ packages:
dev: false
optional: true
+ /esbuild-windows-64/0.14.54:
+ resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild-windows-arm64/0.13.15:
resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==}
cpu: [arm64]
@@ -7924,6 +8142,15 @@ packages:
dev: false
optional: true
+ /esbuild-windows-arm64/0.14.54:
+ resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/esbuild/0.13.15:
resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==}
hasBin: true
@@ -7998,6 +8225,35 @@ packages:
esbuild-windows-arm64: 0.14.21
dev: false
+ /esbuild/0.14.54:
+ resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/linux-loong64': 0.14.54
+ esbuild-android-64: 0.14.54
+ esbuild-android-arm64: 0.14.54
+ esbuild-darwin-64: 0.14.54
+ esbuild-darwin-arm64: 0.14.54
+ esbuild-freebsd-64: 0.14.54
+ esbuild-freebsd-arm64: 0.14.54
+ esbuild-linux-32: 0.14.54
+ esbuild-linux-64: 0.14.54
+ esbuild-linux-arm: 0.14.54
+ esbuild-linux-arm64: 0.14.54
+ esbuild-linux-mips64le: 0.14.54
+ esbuild-linux-ppc64le: 0.14.54
+ esbuild-linux-riscv64: 0.14.54
+ esbuild-linux-s390x: 0.14.54
+ esbuild-netbsd-64: 0.14.54
+ esbuild-openbsd-64: 0.14.54
+ esbuild-sunos-64: 0.14.54
+ esbuild-windows-32: 0.14.54
+ esbuild-windows-64: 0.14.54
+ esbuild-windows-arm64: 0.14.54
+ dev: false
+
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
@@ -8355,7 +8611,7 @@ packages:
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.4
+ micromatch: 4.0.5
dev: false
/fast-json-stable-stringify/2.1.0:
@@ -9597,10 +9853,16 @@ packages:
rgba-regex: 1.0.0
dev: false
+ /is-core-module/2.10.0:
+ resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
+ dependencies:
+ has: 1.0.3
+
/is-core-module/2.8.1:
resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==}
dependencies:
has: 1.0.3
+ dev: false
/is-data-descriptor/0.1.4:
resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=}
@@ -10967,6 +11229,13 @@ packages:
dependencies:
yallist: 4.0.0
+ /magic-string/0.26.2:
+ resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==}
+ engines: {node: '>=12'}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: false
+
/make-dir/1.3.0:
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
engines: {node: '>=4'}
@@ -11680,6 +11949,14 @@ packages:
picomatch: 2.3.1
dev: false
+ /micromatch/4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: false
+
/miller-rabin/4.0.1:
resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
hasBin: true
@@ -11990,6 +12267,12 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ /nanoid/3.3.4:
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+ dev: false
+
/nanomatch/1.2.13:
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
engines: {node: '>=0.10.0'}
@@ -13799,6 +14082,15 @@ packages:
source-map: 0.6.1
dev: false
+ /postcss/8.4.16:
+ resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.4
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+ dev: false
+
/postcss/8.4.5:
resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==}
engines: {node: ^10 || ^12 || >=14}
@@ -14435,6 +14727,13 @@ packages:
dev: false
optional: true
+ /rename-overwrite/4.0.2:
+ resolution: {integrity: sha512-L1sgBgagVgOgb1Z6QZr1yJgSMHI4SXQqAH0l/UbeyHnLKxECvKIlyVEmBo4BqsCAZGg0SBSyjCh68lis5PgC7g==}
+ engines: {node: '>=12.10'}
+ dependencies:
+ '@zkochan/rimraf': 2.1.2
+ dev: false
+
/renderkid/2.0.7:
resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==}
dependencies:
@@ -14535,10 +14834,19 @@ packages:
resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==}
hasBin: true
dependencies:
- is-core-module: 2.8.1
+ is-core-module: 2.10.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
+ /resolve/1.22.1:
+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.10.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: false
+
/responselike/1.0.2:
resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=}
dependencies:
@@ -14604,6 +14912,14 @@ packages:
optionalDependencies:
fsevents: 2.3.2
+ /rollup/2.77.3:
+ resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: false
+
/run-async/2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
@@ -15084,6 +15400,10 @@ packages:
resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
engines: {node: '>= 8'}
+ /sourcemap-codec/1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ dev: false
+
/space-separated-tokens/2.0.1:
resolution: {integrity: sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==}
dev: false
@@ -15553,6 +15873,15 @@ packages:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
dev: false
+ /symlink-dir/5.0.1:
+ resolution: {integrity: sha512-MeXygPBopo8AmyObuCJIpXKT+mw54d2Kp6SBuxq0uXZGDkHwHDQExpSg5+TK8BA5kCGyktawu5DJG0QWYO6acw==}
+ engines: {node: '>=12.10'}
+ hasBin: true
+ dependencies:
+ better-path-resolve: 1.0.0
+ rename-overwrite: 4.0.2
+ dev: false
+
/tapable/1.1.3:
resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
engines: {node: '>=6'}
@@ -16052,6 +16381,10 @@ packages:
resolution: {integrity: sha512-YTnDRlE1cIofRqOFN8ioAbz9qenDvkgVMSn0cnxvIDjM9sfEOMKB0ybMr+otSlCXMfQ/X35haYRoI7Nua82RrA==}
dev: false
+ /ufo/0.8.5:
+ resolution: {integrity: sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==}
+ dev: false
+
/uglify-js/3.15.1:
resolution: {integrity: sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==}
engines: {node: '>=0.8.0'}
@@ -16503,10 +16836,24 @@ packages:
vfile-message: 3.1.0
dev: false
+ /vite-plugin-glob/0.2.8:
+ resolution: {integrity: sha512-Xs9rlEdDW33yfs72Iugu/y3H0AK48DkldM8t5i+LAlXF3GaKA9oFerWZih7qp5cibg4JI99wnMSYHcj/awP7Eg==}
+ dependencies:
+ acorn: 8.8.0
+ fast-glob: 3.2.11
+ magic-string: 0.26.2
+ micromatch: 4.0.5
+ ufo: 0.8.5
+ dev: false
+
/vite-plugin-import-build/0.1.2:
resolution: {integrity: sha512-Jh4wanyvJ5QLDrVtw6VsTqT+1yISp1Fa+5v7VSwf5xyRiYZ0VeffMrSQFrQlt50D7g3CpO/aX9/X/SVWCVCa0w==}
dev: false
+ /vite-plugin-import-build/0.2.3:
+ resolution: {integrity: sha512-1rabB70KOfThrgT9SOjvKbHwVGaILbiywwEIZgjAI+l4B1VSeYZPyQeoOqd9/I2nzXcoMT3OSWfVi429YzoQbg==}
+ dev: false
+
/vite-plugin-mdx/3.5.10_p5zckwea5dbiw3d6gnyruevblq:
resolution: {integrity: sha512-tfGNRwkO23pln9EYqhbsOLEx9Qot5+enl+727gop7+HGEoC87+88hLRWGL+FU/It1Y0a5P3OAyDbTKKHX6tEJw==}
peerDependencies:
@@ -16557,6 +16904,29 @@ packages:
vite-plugin-import-build: 0.1.2
dev: false
+ /vite-plugin-ssr/0.4.26_vite@3.0.9:
+ resolution: {integrity: sha512-VCGy7XBko2hVe7HwMaifIPI2TcFP4TqcItLapgtY/SSfqekwruLyAm1h1tKATf75pyZlquCJcOij9f6EpIuzhQ==}
+ engines: {node: '>=12.19.0'}
+ hasBin: true
+ peerDependencies:
+ vite: '>=2.9.10'
+ dependencies:
+ '@brillout/debug': 0.1.1
+ '@brillout/json-s': 0.4.6
+ '@brillout/libassert': 0.5.8
+ cac: 6.7.12
+ es-module-lexer: 0.10.5
+ fast-glob: 3.2.11
+ kolorist: 1.5.1
+ p-limit: 3.1.0
+ picocolors: 1.0.0
+ resolve: 1.22.1
+ symlink-dir: 5.0.1
+ vite: 3.0.9
+ vite-plugin-glob: 0.2.8
+ vite-plugin-import-build: 0.2.3
+ dev: false
+
/vite/2.6.7:
resolution: {integrity: sha512-ewk//jve9k6vlU8PfJmWUHN8k0YYdw4VaKOMvoQ3nT2Pb6k5OSMKQi4jPOzVH/TlUqMsCrq7IJ80xcuDDVyigg==}
engines: {node: '>=12.2.0'}
@@ -16652,6 +17022,33 @@ packages:
fsevents: 2.3.2
dev: false
+ /vite/3.0.9:
+ resolution: {integrity: sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ less: '*'
+ sass: '*'
+ stylus: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ esbuild: 0.14.54
+ postcss: 8.4.16
+ resolve: 1.22.1
+ rollup: 2.77.3
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: false
+
/vm-browserify/1.1.2:
resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
dev: false
diff --git a/telefunc/node/utils/getOutDirs.ts b/telefunc/node/utils/getOutDirs.ts
new file mode 100644
index 00000000..c66992e8
--- /dev/null
+++ b/telefunc/node/utils/getOutDirs.ts
@@ -0,0 +1,54 @@
+import type { UserConfig } from 'vite'
+import { isSSR_config } from './isSSR'
+import { assert, assertUsage } from './assert'
+import { assertPosixPath } from './assertPosixPath'
+
+export { getOutDirs }
+export { getOutDir }
+
+function getOutDir(config: UserConfig): string {
+ const outDir = config.build?.outDir || 'dist'
+ assertIsNotAbsolute(outDir)
+ const { outDirClient, outDirServer } = getOutDirs(outDir, { isRoot: true })
+ if (isSSR_config(config)) {
+ return outDirServer
+ } else {
+ return outDirClient
+ }
+}
+
+function getOutDirs(outDir: string, options: { isRoot?: true } = {}) {
+ assertPosixPath(outDir)
+ let outDirRoot: string
+ if (isNotRoot(outDir)) {
+ assert(!options.isRoot, { outDir })
+ assert('/client'.length === '/server'.length)
+ outDirRoot = outDir.slice(0, -1 * '/client'.length)
+ } else {
+ outDirRoot = outDir
+ }
+ assert(isRoot(outDirRoot), { outDir, options })
+ const outDirClient = `${outDirRoot}/client`
+ const outDirServer = `${outDirRoot}/server`
+ return { outDirRoot, outDirClient, outDirServer }
+}
+
+function isRoot(outDir: string) {
+ const p = outDir.split('/').filter(Boolean)
+ const dir = p[p.length - 1]
+ return dir !== 'client' && dir !== 'server'
+}
+function isNotRoot(outDir: string) {
+ return outDir.endsWith('/client') || outDir.endsWith('/server')
+}
+
+function assertIsNotAbsolute(outDir: string) {
+ assertUsage(
+ firstSegment(outDir) !== firstSegment(process.cwd()),
+ "vite.config.js#build.outDir is not allowed to be an absolute path, e.g. set its value to 'build/' instead of `path.join(__dirname, 'build/')`"
+ )
+}
+
+function firstSegment(p: string) {
+ return p.split(/\/|\\/).filter(Boolean)[0]
+}
diff --git a/telefunc/node/vite/utils/isSSR.ts b/telefunc/node/utils/isSSR.ts
similarity index 87%
rename from telefunc/node/vite/utils/isSSR.ts
rename to telefunc/node/utils/isSSR.ts
index cbd189ac..bd1687f9 100644
--- a/telefunc/node/vite/utils/isSSR.ts
+++ b/telefunc/node/utils/isSSR.ts
@@ -1,4 +1,5 @@
-import { assert, isObject } from '../../utils'
+import { assert } from './assert'
+import { isObject } from './isObject'
export { isSSR_config }
export { isSSR_options }
diff --git a/telefunc/node/vite/clear.ts b/telefunc/node/vite/clear.ts
index fd580c3f..99995c87 100644
--- a/telefunc/node/vite/clear.ts
+++ b/telefunc/node/vite/clear.ts
@@ -1,8 +1,3 @@
-import { distLinkOff } from './distLink'
import { importGlobOff } from './importGlob'
-
// Remove `import.meta.glob()` (otherwise bundlers like webpack will complain)
importGlobOff()
-
-// Remove `dist/` link
-distLinkOff()
diff --git a/telefunc/node/vite/distLink.ts b/telefunc/node/vite/distLink.ts
deleted file mode 100644
index d52d3dd2..00000000
--- a/telefunc/node/vite/distLink.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-export { distLinkOff }
-export { distLinkOn }
-
-import { writeFileSync } from 'fs'
-import { posix } from 'path'
-import type { Plugin } from 'vite'
-import { assert, toPosixPath } from '../utils'
-import { isSSR_config } from './utils'
-const dir = __dirname + (() => '')() // trick to avoid `@vercel/ncc` to glob import
-const telefuncFilesGlobFromDistPath = `${dir}/telefuncFilesGlobFromDist.js`
-
-function distLinkOff() {
- writeFileSync(telefuncFilesGlobFromDistPath, ['exports.distLinkActivated = false;', ''].join('\n'))
-}
-
-function distLinkOn(): Plugin {
- let ssr: boolean
- let root: undefined | string
- return {
- name: 'telefunc:distLinkOn',
- apply: 'build',
- configResolved(config) {
- ssr = isSSR_config(config)
- root = config.root ? toPosixPath(config.root) : toPosixPath(process.cwd())
- },
- generateBundle() {
- assert(typeof ssr === 'boolean')
- if (!ssr) {
- return
- }
- assert(root)
- // To `require()` an absolute path doesn't seem to work on Vercel
- const rootRelative = posix.relative(toPosixPath(dir), root)
- writeFileSync(
- telefuncFilesGlobFromDistPath,
- [
- 'exports.distLinkActivated = true;',
- `const { telefuncFilesGlob } = require('${rootRelative}/dist/server/telefuncFilesGlob.js');`,
- `exports.telefuncFilesGlob = telefuncFilesGlob;`,
- ''
- ].join('\n')
- )
- }
- } as Plugin
-}
diff --git a/telefunc/node/vite/index.ts b/telefunc/node/vite/index.ts
index 5721cdd3..74cae30f 100644
--- a/telefunc/node/vite/index.ts
+++ b/telefunc/node/vite/index.ts
@@ -6,11 +6,10 @@ import { build } from './build'
import { packageJsonFile } from './packageJsonFile'
import { retrieveDevServer } from './retrieveDevServer'
import type { Plugin } from 'vite'
-import { distLinkOn, distLinkOff } from './distLink'
+import { importBuild } from './plugins/importBuild'
import { importGlobOn } from './importGlob'
function plugin(): Plugin[] {
- distLinkOff()
importGlobOn()
return [
{
@@ -26,6 +25,6 @@ function plugin(): Plugin[] {
transform(),
build(),
packageJsonFile(),
- distLinkOn()
+ ...importBuild()
]
}
diff --git a/telefunc/node/vite/loadTelefuncFilesWithVite.ts b/telefunc/node/vite/loadTelefuncFilesWithVite.ts
index 30405117..09495e10 100644
--- a/telefunc/node/vite/loadTelefuncFilesWithVite.ts
+++ b/telefunc/node/vite/loadTelefuncFilesWithVite.ts
@@ -1,12 +1,11 @@
export { loadTelefuncFilesWithVite }
+import { loadImportBuildFile } from 'vite-plugin-import-build/loadImportBuildFile'
import { assert, assertWarning, hasProp, isObject } from '../utils'
-import { telefuncFilesGlobFileNameBase } from './telefuncFilesGlobFileNameBase'
import { telefuncFilesGlobFilePath } from './telefuncFilesGlobPath'
-import { moduleExists, nodeRequire } from '../utils'
-import { resolve } from 'path'
import type { ViteDevServer } from 'vite'
import { GlobFiles, loadGlobFiles } from './loadGlobFiles'
+import { loadTelefuncFilesWithImportBuild } from './plugins/importBuild/loadBuild'
async function loadTelefuncFilesWithVite(runContext: {
root: string | null
@@ -42,41 +41,16 @@ async function loadGlobImporter(runContext: {
runContext.viteDevServer.ssrFixStacktrace(err as Error)
throw err
}
- return { moduleExports, provider: 'DEV_SERVER' as const }
+ return { moduleExports, provider: 'viteDevServer' as const }
}
- /*
{
- let moduleExports: unknown | null = null
- try {
- moduleExports = await import('./telefuncFilesGlob')
- } catch (_) {}
- if (moduleExports !== null) {
- assert(!hasProp(moduleExports, 'importGlobUnset'))
- return { moduleExports, provider: 'DIRECT' as const }
- }
- }
- */
-
- {
- const moduleExports: unknown = await import('./telefuncFilesGlobFromDist')
- if (!hasProp(moduleExports, 'distLinkUnset', 'true')) {
- assert(hasProp(moduleExports, 'distLinkActivated', 'boolean'))
- if (moduleExports.distLinkActivated === true) {
- assertProd(runContext)
- return { moduleExports, provider: 'DIST_LINK' as const }
- }
- }
- }
-
- if (runContext.root) {
- const userDist = `${runContext.root}/dist`
- const prodPath = `${userDist}/server/${telefuncFilesGlobFileNameBase}.js`
- const prodPathResolved = resolve(prodPath)
- if (moduleExists(prodPathResolved)) {
- const moduleExports: unknown = nodeRequire(prodPathResolved)
+ const { success, entryFile } = await loadImportBuildFile()
+ if (success) {
+ const moduleExports = await loadTelefuncFilesWithImportBuild()
+ assert(moduleExports, { entryFile })
assertProd(runContext)
- return { moduleExports, provider: 'NODE_JS' as const }
+ return { moduleExports, provider: 'importBuild.cjs' as const }
}
}
diff --git a/telefunc/node/vite/plugins/importBuild/index.ts b/telefunc/node/vite/plugins/importBuild/index.ts
new file mode 100644
index 00000000..c2a011e5
--- /dev/null
+++ b/telefunc/node/vite/plugins/importBuild/index.ts
@@ -0,0 +1,45 @@
+export { importBuild }
+
+import { importBuildPlugin } from 'vite-plugin-import-build/plugin'
+import type { Plugin, ResolvedConfig } from 'vite'
+import { projectInfo, toPosixPath, getOutDirs } from '../../utils'
+import path from 'path'
+import { telefuncFilesGlobFileNameBase } from '../../telefuncFilesGlobFileNameBase'
+
+function importBuild(): Plugin[] {
+ let config: ResolvedConfig
+ return [
+ {
+ name: 'telefunc:importBuild:config',
+ enforce: 'post',
+ configResolved(config_) {
+ config = config_
+ }
+ },
+ importBuildPlugin({
+ getImporterCode: ({ findBuildEntry }) => {
+ const telefuncFilesEntry = findBuildEntry(telefuncFilesGlobFileNameBase)
+ return getImporterCode(config, telefuncFilesEntry)
+ },
+ libraryName: projectInfo.projectName
+ })
+ ]
+}
+
+function getImporterCode(config: ResolvedConfig, telefuncFilesEntry: string) {
+ // Current file: node_modules/telefunc/dist/node/vite/plugins/importBuild/index.js
+ const importPathAbsolute = toPosixPath(
+ require.resolve(`../../../../../dist/node/vite/plugins/importBuild/loadBuild.js`)
+ )
+ const { outDirServer } = getOutDirs(config.build.outDir)
+ const outDirServerAbsolute = path.posix.join(config.root, outDirServer)
+ const importPath = path.posix.relative(outDirServerAbsolute, importPathAbsolute)
+ const importerCode = [
+ `const { setBuildLoader } = require('${importPath}');`,
+ 'setBuildLoader({',
+ ` loadTelefuncFiles: () => import('./${telefuncFilesEntry}')`,
+ '});',
+ ''
+ ].join('\n')
+ return importerCode
+}
diff --git a/telefunc/node/vite/plugins/importBuild/loadBuild.ts b/telefunc/node/vite/plugins/importBuild/loadBuild.ts
new file mode 100644
index 00000000..1848a01d
--- /dev/null
+++ b/telefunc/node/vite/plugins/importBuild/loadBuild.ts
@@ -0,0 +1,23 @@
+export { loadTelefuncFilesWithImportBuild }
+export { setBuildLoader }
+
+const buildGetter = (globalThis.__telefunc_vite_buildGetter = globalThis.__telefunc_vite_buildGetter || {
+ loadTelefuncFiles: null
+})
+
+function setBuildLoader({ loadTelefuncFiles }: { loadTelefuncFiles: () => Promise }) {
+ buildGetter.loadTelefuncFiles = loadTelefuncFiles
+}
+async function loadTelefuncFilesWithImportBuild(): Promise {
+ if (buildGetter.loadTelefuncFiles === null) {
+ return null
+ }
+ const moduleExports = await buildGetter.loadTelefuncFiles()
+ return moduleExports
+}
+
+declare global {
+ var __telefunc_vite_buildGetter: {
+ loadTelefuncFiles: (() => Promise) | null
+ }
+}
diff --git a/telefunc/node/vite/telefuncFilesGlobFromDist.ts b/telefunc/node/vite/telefuncFilesGlobFromDist.ts
deleted file mode 100644
index 822f3790..00000000
--- a/telefunc/node/vite/telefuncFilesGlobFromDist.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const distLinkUnset = true
diff --git a/telefunc/node/vite/utils/index.ts b/telefunc/node/vite/utils/index.ts
index 75793ea9..4a502343 100644
--- a/telefunc/node/vite/utils/index.ts
+++ b/telefunc/node/vite/utils/index.ts
@@ -1,3 +1,6 @@
-export * from './isSSR'
+export * from '../../utils/isSSR'
export * from '../../utils/assert'
export * from '../../utils/assertPosixPath'
+export * from '../../utils/projectInfo'
+export * from '../../utils/filesystemPathHandling'
+export * from '../../utils/getOutDirs'
diff --git a/telefunc/package.json b/telefunc/package.json
index 8c527e17..bf0da718 100644
--- a/telefunc/package.json
+++ b/telefunc/package.json
@@ -26,6 +26,11 @@
"node": "./dist/node/client.js",
"worker": "./dist/node/client.js"
},
+ "./react": {
+ "worker": "./dist/node/react/index.js",
+ "node": "./dist/node/react/index.js",
+ "browser": "./dist/client/reac/index.js"
+ },
"./vite": {
"node": "./dist/node/vite/index.js"
},
@@ -46,6 +51,7 @@
"@brillout/json-s": "^0.4.6",
"@brillout/libassert": "^0.5.8",
"es-module-lexer": "^0.7.1",
+ "vite-plugin-import-build": "^0.2.3",
"ts-morph": "^14.0.0"
},
"devDependencies": {
diff --git a/telefunc/tsconfig.base.json b/telefunc/tsconfig.base.json
index b930d5fb..9052a3ce 100644
--- a/telefunc/tsconfig.base.json
+++ b/telefunc/tsconfig.base.json
@@ -5,6 +5,7 @@
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
+ "esModuleInterop": true,
"noUncheckedIndexedAccess": true
}
}