summaryrefslogtreecommitdiff
path: root/packages/renderers/renderer-solid/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderers/renderer-solid/index.js')
-rw-r--r--packages/renderers/renderer-solid/index.js57
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'],
+ },
+ };
+ },
};