diff options
Diffstat (limited to 'packages/renderers/renderer-solid/index.js')
-rw-r--r-- | packages/renderers/renderer-solid/index.js | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/packages/renderers/renderer-solid/index.js b/packages/renderers/renderer-solid/index.js index cafd5e43a..f1e566fd8 100644 --- a/packages/renderers/renderer-solid/index.js +++ b/packages/renderers/renderer-solid/index.js @@ -1,24 +1,57 @@ export default { name: '@astrojs/renderer-solid', - client: './client', - server: './server', - knownEntrypoints: ['solid-js', 'solid-js/web', 'solid-js/store'], - external: ['solid-js/web/dist/server.js', 'solid-js/store/dist/server.js', 'solid-js/dist/server.js', 'babel-preset-solid'], + client: './client.js', + server: './server.js', jsxImportSource: 'solid-js', - jsxTransformOptions: async ({ isSSR }) => { + jsxTransformOptions: async ({ ssr }) => { const [{ default: solid }] = await Promise.all([import('babel-preset-solid')]); const options = { - presets: [solid({}, { generate: isSSR ? 'ssr' : 'dom', hydratable: true })], + presets: [solid({}, { generate: ssr ? 'ssr' : 'dom', hydratable: true })], + plugins: [], }; - if (isSSR) { - options.alias = { - 'solid-js/store': 'solid-js/store/dist/server.js', - 'solid-js/web': 'solid-js/web/dist/server.js', - 'solid-js': 'solid-js/dist/server.js', - }; + if (ssr) { + options.plugins.push([ + 'babel-plugin-module-resolver', + { + cwd: process.cwd(), + alias: { + 'solid-js/store': 'solid-js/store/dist/server.js', + 'solid-js/web': 'solid-js/web/dist/server.js', + 'solid-js': 'solid-js/dist/server.js', + }, + }, + ]); } return options; }, + viteConfig(options) { + // https://github.com/solidjs/vite-plugin-solid + + // We inject the dev mode only if the user explicitely wants it or if we are in dev (serve) mode + const replaceDev = options.mode === 'development' || options.command === 'serve'; + + const nestedDeps = ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h']; + + return { + /** + * We only need esbuild on .ts or .js files. + * .tsx & .jsx files are handled by us + */ + esbuild: { include: /\.ts$/ }, + resolve: { + conditions: ['solid', ...(replaceDev ? ['development'] : [])], + dedupe: nestedDeps, + alias: [{ find: /^solid-refresh$/, replacement: '/@solid-refresh' }], + }, + optimizeDeps: { + include: nestedDeps, + exclude: ['@astrojs/renderer-solid/server.js'], + }, + ssr: { + external: ['solid-js/web/dist/server.js', 'solid-js/store/dist/server.js', 'solid-js/dist/server.js', 'babel-preset-solid'], + }, + }; + }, }; |