telefunc
Version:
Remote functions. Instead of API.
64 lines (63 loc) • 2.86 kB
JavaScript
export { pluginDev };
import { apply } from '../shared/apply.js';
import { addTelefuncMiddleware } from '../shared/addTelefuncMiddleware.js';
import { getPackageNodeModulesDirectory } from '../utils.js';
function pluginDev() {
return [
{
name: 'telefunc:pluginDev',
apply: apply('dev'),
config: {
handler() {
return {
optimizeDeps: {
include: [
// Vite pre-bundler doesn't discover 'telefunc/client' because it doesn't transform `.telefunc.js` imports => Vite will discover the 'telefunc/client' dependency only after Telefunc transforms `.telefunc.js` imports into the thin HTTP client using 'telefunc/client'
'telefunc/client',
],
},
};
},
},
configResolved: {
async handler(config) {
fixOptimizeDeps(config.optimizeDeps);
await determineFsAllowList(config);
},
},
},
{
name: 'telefunc:pluginDev:serverMiddleware',
apply: apply('dev', { skipMiddlewareMode: true, onlyViteCli: true }),
// Ensure that SvelteKit's configureServer() has precedence, see https://github.com/brillout/telefunc/pull/54
enforce: 'post',
configureServer: {
handler(server) {
return () => {
addTelefuncMiddleware(server.middlewares);
};
},
},
},
];
}
// - Vike adds @brillout/json-serializer to optimizeDeps.exclude
// - We need to remove @brillout/json-serializer from optimizeDeps.exclude to avoid:
// ```
// 10:41:35 AM [vite] Internal server error: Failed to resolve import "@brillout/json-serializer/parse" from "node_modules/.vite/deps/chunk-HMXEIHOJ.js?v=9404be11". Does the file exist?
// ```
// - We can't add @brillout/json-serializer to optimizeDeps.include because Vite complains:
// ```
// Failed to resolve dependency: @brillout/json-serializer/parse, present in 'optimizeDeps.include'
// Failed to resolve dependency: @brillout/json-serializer/stringify, present in 'optimizeDeps.include'
// ```
function fixOptimizeDeps(optimizeDeps) {
var _a;
optimizeDeps.exclude = (_a = optimizeDeps.exclude) === null || _a === void 0 ? void 0 : _a.filter((entry) => !entry.startsWith('@brillout/json-serializer'));
}
async function determineFsAllowList(config) {
const fsAllow = config.server.fs.allow;
// Add node_modules/telefunc/
const packageNodeModulesDirectory = getPackageNodeModulesDirectory();
fsAllow.push(packageNodeModulesDirectory);
}