From 8206421ffa46eeb5f078b7b543675ec10ae45c61 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 22 Oct 2021 15:45:56 -0400 Subject: [PATCH] Fixes solid (#1634) * Fixes solid * Rename the test * Rebase with next * Skip solid test for now --- packages/astro/src/core/create-vite.ts | 6 +---- .../solid-component/src/components/Hello.jsx | 11 +++++++++ .../solid-component/src/pages/index.astro | 9 ++++++++ packages/astro/test/solid-component.test.js | 23 +++++++++++++++++++ packages/renderers/renderer-react/server.js | 8 ++++++- packages/renderers/renderer-solid/index.js | 2 +- 6 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 packages/astro/test/fixtures/solid-component/src/components/Hello.jsx create mode 100644 packages/astro/test/fixtures/solid-component/src/pages/index.astro create mode 100644 packages/astro/test/solid-component.test.js diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index d34fdfa2a4..a59e363bd9 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -141,12 +141,8 @@ async function viteSSRDeps(deps: string[]): Promise<{ external: Set; noE return; } - // if ESM, try noExternal - if (packageJSON.type === 'module') { - noExternal.add(spec); - } // otherwise, assume external by default - else { + if (packageJSON.type !== 'module') { external.add(spec); } diff --git a/packages/astro/test/fixtures/solid-component/src/components/Hello.jsx b/packages/astro/test/fixtures/solid-component/src/components/Hello.jsx new file mode 100644 index 0000000000..cd33689c12 --- /dev/null +++ b/packages/astro/test/fixtures/solid-component/src/components/Hello.jsx @@ -0,0 +1,11 @@ +import { createSignal } from 'solid-js'; + +export default function Counter() { + const [count] = createSignal(0); + + return ( + <> +
Hello world - {count}
+ + ); +} diff --git a/packages/astro/test/fixtures/solid-component/src/pages/index.astro b/packages/astro/test/fixtures/solid-component/src/pages/index.astro new file mode 100644 index 0000000000..b489bda089 --- /dev/null +++ b/packages/astro/test/fixtures/solid-component/src/pages/index.astro @@ -0,0 +1,9 @@ +--- +import Hello from '../components/Hello.jsx'; +--- + +Solid + +
+ + \ No newline at end of file diff --git a/packages/astro/test/solid-component.test.js b/packages/astro/test/solid-component.test.js new file mode 100644 index 0000000000..37b5497a4b --- /dev/null +++ b/packages/astro/test/solid-component.test.js @@ -0,0 +1,23 @@ +import { expect } from 'chai'; +import cheerio from 'cheerio'; +import { loadFixture } from './test-utils.js'; + +describe.skip('Solid component', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + projectRoot: './fixtures/solid-component/', + renderers: ['@astrojs/renderer-solid'], + }); + await fixture.build(); + }); + + it('Can load a component', async () => { + const html = await fixture.readFile('/index.html'); + const $ = cheerio.load(html); + + // test 1: Works + expect($('.hello')).to.have.lengthOf(1); + }); +}); diff --git a/packages/renderers/renderer-react/server.js b/packages/renderers/renderer-react/server.js index aed3243689..88c5b69482 100644 --- a/packages/renderers/renderer-react/server.js +++ b/packages/renderers/renderer-react/server.js @@ -4,6 +4,10 @@ import StaticHtml from './static-html.js'; const reactTypeof = Symbol.for('react.element'); +function errorIsComingFromPreactComponent(err) { + return err.message && err.message.startsWith("Cannot read property '__H'"); +} + function check(Component, props, children) { if (typeof Component !== 'function') return false; @@ -20,7 +24,9 @@ function check(Component, props, children) { isReactComponent = true; } } catch (err) { - error = err; + if(!errorIsComingFromPreactComponent(err)) { + error = err; + } } return React.createElement('div'); diff --git a/packages/renderers/renderer-solid/index.js b/packages/renderers/renderer-solid/index.js index 1b090b4240..803afa11f8 100644 --- a/packages/renderers/renderer-solid/index.js +++ b/packages/renderers/renderer-solid/index.js @@ -6,7 +6,7 @@ export default { 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: [], };