From 2ae475512cd6c71496cec04ad6f2f53ee4e30631 Mon Sep 17 00:00:00 2001 From: akin01 Date: Sat, 27 Jun 2026 05:32:35 +0700 Subject: [PATCH] fix: use Solid server runtime imports --- e2e/integrations.e2e.spec.ts | 48 +++++++++++++++++++ packages/render/src/shared/slots.ts | 2 +- .../src/shared/solid-js-web-server.d.ts | 7 ++- .../src/components/heading/heading.tsx | 2 +- .../src/components/tailwind/tailwind.tsx | 2 +- packages/solid-email/src/render-shim.d.ts | 9 ++++ packages/solid-email/tsdown.config.ts | 10 +++- 7 files changed, 75 insertions(+), 5 deletions(-) diff --git a/e2e/integrations.e2e.spec.ts b/e2e/integrations.e2e.spec.ts index 2def7d9..4fb5648 100644 --- a/e2e/integrations.e2e.spec.ts +++ b/e2e/integrations.e2e.spec.ts @@ -140,6 +140,38 @@ const renderRequireProbe = `${renderExportSmoke} process.exit(1); });`; +const solidEmailBrowserImportProbe = ` +const resolved = import.meta.resolve('@akin01/solid-email'); +const mod = await import('@akin01/solid-email'); + +for (const name of ['render', 'Section', 'Row', 'Heading']) { + if (typeof mod[name] !== 'function') { + throw new Error(\`missing solid-email export: \${name}\`); + } +} + +const html = await mod.render(() => + mod.Section({ + style: { padding: '12px' }, + children: mod.Row({ + children: mod.Heading({ + as: 'h2', + style: { color: 'blue' }, + children: 'Solid Email browser condition smoke', + }), + }), + }), +); + +if (!html.includes(' process.exit(0));`; + type PnpmError = ExecFileException & { stderr?: string; stdout?: string; @@ -318,6 +350,22 @@ describe('published package integration fixtures', () => { } }); + it('loads solid-email under browser import conditions', async () => { + const { stdout } = await execFileAsync( + 'node', + [ + '--conditions=browser', + '--input-type=module', + '--eval', + solidEmailBrowserImportProbe, + ], + { cwd: root }, + ); + + expect(stdout.trim().replaceAll('\\', '/')).toContain( + '/packages/solid-email/dist/index.mjs', + ); + }); it('builds and renders in a Solid Vite SSR fixture', async () => { const fixtureRoot = await installAndBuildFixture('vite'); const html = await execFileAsync('node', ['dist/entry-server.mjs'], { diff --git a/packages/render/src/shared/slots.ts b/packages/render/src/shared/slots.ts index 24bd1c7..35d9e04 100644 --- a/packages/render/src/shared/slots.ts +++ b/packages/render/src/shared/slots.ts @@ -1,5 +1,5 @@ import type { JSX } from 'solid-js'; -import { ssr } from 'solid-js/web'; +import { ssr } from 'solid-js/web/dist/server.js'; const MARKER_PREFIX = '__SM_'; const CONTENT_START = `${MARKER_PREFIX}CNT_`; diff --git a/packages/render/src/shared/solid-js-web-server.d.ts b/packages/render/src/shared/solid-js-web-server.d.ts index a09f553..505743d 100644 --- a/packages/render/src/shared/solid-js-web-server.d.ts +++ b/packages/render/src/shared/solid-js-web-server.d.ts @@ -1,3 +1,8 @@ declare module 'solid-js/web/dist/server.js' { - export { renderToString, renderToStringAsync } from 'solid-js/web'; + export { + Dynamic, + renderToString, + renderToStringAsync, + ssr, + } from 'solid-js/web'; } diff --git a/packages/solid-email/src/components/heading/heading.tsx b/packages/solid-email/src/components/heading/heading.tsx index db4f6eb..bc84627 100644 --- a/packages/solid-email/src/components/heading/heading.tsx +++ b/packages/solid-email/src/components/heading/heading.tsx @@ -1,5 +1,5 @@ import { splitProps } from 'solid-js'; -import { Dynamic } from 'solid-js/web'; +import { Dynamic } from 'solid-js/web/dist/server.js'; import { cls, type IntrinsicProps, diff --git a/packages/solid-email/src/components/tailwind/tailwind.tsx b/packages/solid-email/src/components/tailwind/tailwind.tsx index 9e898dc..af82fbb 100644 --- a/packages/solid-email/src/components/tailwind/tailwind.tsx +++ b/packages/solid-email/src/components/tailwind/tailwind.tsx @@ -1,6 +1,6 @@ import { type CssNode, generate, List, type StyleSheet } from 'css-tree'; import { createResource, type JSX, Suspense } from 'solid-js'; -import { ssr } from 'solid-js/web'; +import { ssr } from 'solid-js/web/dist/server.js'; import type { Config } from 'tailwindcss'; import type { SolidStyle } from '../shared'; import { sanitizeStyleSheet } from './sanitize-stylesheet'; diff --git a/packages/solid-email/src/render-shim.d.ts b/packages/solid-email/src/render-shim.d.ts index a9fce7e..4b74509 100644 --- a/packages/solid-email/src/render-shim.d.ts +++ b/packages/solid-email/src/render-shim.d.ts @@ -86,3 +86,12 @@ declare module '@solid-email/render' { options?: CompileSyncOptions, ): CompiledTemplate; } + +declare module 'solid-js/web/dist/server.js' { + export { + Dynamic, + renderToString, + renderToStringAsync, + ssr, + } from 'solid-js/web'; +} diff --git a/packages/solid-email/tsdown.config.ts b/packages/solid-email/tsdown.config.ts index cebeb80..6687495 100644 --- a/packages/solid-email/tsdown.config.ts +++ b/packages/solid-email/tsdown.config.ts @@ -7,5 +7,13 @@ export default defineConfig({ deps: { neverBundle: ['solid-js', 'solid-js/web', '@solid-email/render'] }, format: ['cjs', 'esm'], outDir: './dist', - plugins: [solid({ solid: { generate: 'ssr', hydratable: false } })], + plugins: [ + solid({ + solid: { + generate: 'ssr', + hydratable: false, + moduleName: 'solid-js/web/dist/server.js', + }, + }), + ], });