diff --git a/src/babel/core/checks.ts b/src/babel/core/checks.ts index 1203865..d4ac482 100644 --- a/src/babel/core/checks.ts +++ b/src/babel/core/checks.ts @@ -13,3 +13,15 @@ export function getImportSpecifierName(specifier: t.ImportSpecifier): string { } return specifier.imported.value; } + +// A component receives at most one argument (its props), so a +// function with more than one parameter isn't a component. +// A rest parameter accepts any number of arguments, so a function +// declaring one isn't a component either: it's a plain function +// that happens to have a Pascal-cased name, and wrapping it in the +// HMR proxy would drop every argument after the first. +export function isComponentishParams( + params: (t.Identifier | t.Pattern | t.RestElement)[], +): boolean { + return params.length < 2 && !params.some(param => t.isRestElement(param)); +} diff --git a/src/babel/index.ts b/src/babel/index.ts index c627ee9..4905553 100644 --- a/src/babel/index.ts +++ b/src/babel/index.ts @@ -1,7 +1,7 @@ import type * as babel from '@babel/core'; import * as t from '@babel/types'; import path from 'path'; -import { isComponentishName } from './core/checks'; +import { isComponentishName, isComponentishParams } from './core/checks'; import { IMPORT_COMPONENT, IMPORT_CONTEXT, @@ -238,7 +238,7 @@ function transformVariableDeclarator( !(trueFuncExpr.async || trueFuncExpr.generator) && // Might be component-like, but the only valid components // have zero or one parameter - trueFuncExpr.params.length < 2 + isComponentishParams(trueFuncExpr.params) ) { path.node.init = wrapComponent(state, path, identifier, trueFuncExpr); } @@ -269,7 +269,7 @@ function transformFunctionDeclaration( !(decl.generator || decl.async) && // Might be component-like, but the only valid components // have zero or one parameter - decl.params.length < 2 + isComponentishParams(decl.params) ) { path.scope.registerDeclaration( path.replaceWith( @@ -307,7 +307,7 @@ function bubbleFunctionDeclaration( !(decl.generator || decl.async) && // Might be component-like, but the only valid components // have zero or one parameter - decl.params.length < 2 + isComponentishParams(decl.params) ) { if (path.parentPath.isExportNamedDeclaration()) { path.parentPath.replaceWith( diff --git a/tests/client-hydratable/__snapshots__/esm.test.ts.snap b/tests/client-hydratable/__snapshots__/esm.test.ts.snap index 6ca7987..90d13d6 100644 --- a/tests/client-hydratable/__snapshots__/esm.test.ts.snap +++ b/tests/client-hydratable/__snapshots__/esm.test.ts.snap @@ -97,6 +97,27 @@ if (import.meta.hot) { }" `; +exports[`esm (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -329,6 +350,27 @@ if (import.meta.hot) { }" `; +exports[`esm (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -558,6 +600,27 @@ if (import.meta.hot) { }" `; +exports[`esm (client, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -781,6 +844,27 @@ if (import.meta.hot) { }" `; +exports[`esm (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -1004,6 +1088,27 @@ if (import.meta.hot) { }" `; +exports[`esm (client, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client-hydratable/__snapshots__/rspack-esm.test.ts.snap b/tests/client-hydratable/__snapshots__/rspack-esm.test.ts.snap index b57cc4e..e0e04da 100644 --- a/tests/client-hydratable/__snapshots__/rspack-esm.test.ts.snap +++ b/tests/client-hydratable/__snapshots__/rspack-esm.test.ts.snap @@ -97,6 +97,27 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -329,6 +350,27 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -558,6 +600,27 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -781,6 +844,27 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -1004,6 +1088,27 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client-hydratable/__snapshots__/standard.test.ts.snap b/tests/client-hydratable/__snapshots__/standard.test.ts.snap index 1ee8753..017436e 100644 --- a/tests/client-hydratable/__snapshots__/standard.test.ts.snap +++ b/tests/client-hydratable/__snapshots__/standard.test.ts.snap @@ -97,6 +97,27 @@ if (module.hot) { }" `; +exports[`standard (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -329,6 +350,27 @@ if (module.hot) { }" `; +exports[`standard (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -558,6 +600,27 @@ if (module.hot) { }" `; +exports[`standard (client, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -781,6 +844,27 @@ if (module.hot) { }" `; +exports[`standard (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -1004,6 +1088,27 @@ if (module.hot) { }" `; +exports[`standard (client, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client-hydratable/__snapshots__/vite.test.ts.snap b/tests/client-hydratable/__snapshots__/vite.test.ts.snap index 8f57e26..3ab6a73 100644 --- a/tests/client-hydratable/__snapshots__/vite.test.ts.snap +++ b/tests/client-hydratable/__snapshots__/vite.test.ts.snap @@ -100,6 +100,28 @@ if (import.meta.hot) { }" `; +exports[`vite (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -338,6 +360,28 @@ if (import.meta.hot) { }" `; +exports[`vite (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -573,6 +617,28 @@ if (import.meta.hot) { }" `; +exports[`vite (client, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -802,6 +868,28 @@ if (import.meta.hot) { }" `; +exports[`vite (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -1031,6 +1119,28 @@ if (import.meta.hot) { }" `; +exports[`vite (client, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client-hydratable/__snapshots__/webpack5.test.ts.snap b/tests/client-hydratable/__snapshots__/webpack5.test.ts.snap index 17687d3..f883c61 100644 --- a/tests/client-hydratable/__snapshots__/webpack5.test.ts.snap +++ b/tests/client-hydratable/__snapshots__/webpack5.test.ts.snap @@ -97,6 +97,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -329,6 +350,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -558,6 +600,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -781,6 +844,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -1004,6 +1088,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +import { getNextElement as _$getNextElement } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$getNextElement(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client-hydratable/esm.test.ts b/tests/client-hydratable/esm.test.ts index b2b9240..3b1a5bf 100644 --- a/tests/client-hydratable/esm.test.ts +++ b/tests/client-hydratable/esm.test.ts @@ -90,6 +90,20 @@ describe('esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client-hydratable/rspack-esm.test.ts b/tests/client-hydratable/rspack-esm.test.ts index a265e1c..3f4298e 100644 --- a/tests/client-hydratable/rspack-esm.test.ts +++ b/tests/client-hydratable/rspack-esm.test.ts @@ -90,6 +90,20 @@ describe('rspack-esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('rspack-esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('rspack-esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('rspack-esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('rspack-esm (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client-hydratable/standard.test.ts b/tests/client-hydratable/standard.test.ts index b03423c..1c017d3 100644 --- a/tests/client-hydratable/standard.test.ts +++ b/tests/client-hydratable/standard.test.ts @@ -90,6 +90,20 @@ describe('standard (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('standard (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'standard', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('standard (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'standard', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('standard (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('standard (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client-hydratable/vite.test.ts b/tests/client-hydratable/vite.test.ts index 5de1ca1..58d3265 100644 --- a/tests/client-hydratable/vite.test.ts +++ b/tests/client-hydratable/vite.test.ts @@ -90,6 +90,20 @@ describe('vite (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('vite (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'vite', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('vite (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'vite', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('vite (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('vite (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client-hydratable/webpack5.test.ts b/tests/client-hydratable/webpack5.test.ts index 1286338..e08f4eb 100644 --- a/tests/client-hydratable/webpack5.test.ts +++ b/tests/client-hydratable/webpack5.test.ts @@ -90,6 +90,20 @@ describe('webpack5 (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('webpack5 (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('webpack5 (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'webpack5', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('webpack5 (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('webpack5 (client, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client/__snapshots__/esm.test.ts.snap b/tests/client/__snapshots__/esm.test.ts.snap index 826ba4b..ab425d3 100644 --- a/tests/client/__snapshots__/esm.test.ts.snap +++ b/tests/client/__snapshots__/esm.test.ts.snap @@ -93,6 +93,26 @@ if (import.meta.hot) { }" `; +exports[`esm (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -317,6 +337,26 @@ if (import.meta.hot) { }" `; +exports[`esm (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -538,6 +578,26 @@ if (import.meta.hot) { }" `; +exports[`esm (client, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -753,6 +813,26 @@ if (import.meta.hot) { }" `; +exports[`esm (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -968,6 +1048,26 @@ if (import.meta.hot) { }" `; +exports[`esm (client, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (client, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client/__snapshots__/rspack-esm.test.ts.snap b/tests/client/__snapshots__/rspack-esm.test.ts.snap index e44e7f2..cc59e93 100644 --- a/tests/client/__snapshots__/rspack-esm.test.ts.snap +++ b/tests/client/__snapshots__/rspack-esm.test.ts.snap @@ -93,6 +93,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -317,6 +337,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -538,6 +578,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -753,6 +813,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -968,6 +1048,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (client, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (client, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client/__snapshots__/standard.test.ts.snap b/tests/client/__snapshots__/standard.test.ts.snap index 480d636..d39b3a2 100644 --- a/tests/client/__snapshots__/standard.test.ts.snap +++ b/tests/client/__snapshots__/standard.test.ts.snap @@ -93,6 +93,26 @@ if (module.hot) { }" `; +exports[`standard (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -317,6 +337,26 @@ if (module.hot) { }" `; +exports[`standard (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -538,6 +578,26 @@ if (module.hot) { }" `; +exports[`standard (client, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -753,6 +813,26 @@ if (module.hot) { }" `; +exports[`standard (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -968,6 +1048,26 @@ if (module.hot) { }" `; +exports[`standard (client, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (client, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client/__snapshots__/vite.test.ts.snap b/tests/client/__snapshots__/vite.test.ts.snap index 74dab89..2200e8a 100644 --- a/tests/client/__snapshots__/vite.test.ts.snap +++ b/tests/client/__snapshots__/vite.test.ts.snap @@ -96,6 +96,27 @@ if (import.meta.hot) { }" `; +exports[`vite (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -326,6 +347,27 @@ if (import.meta.hot) { }" `; +exports[`vite (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -553,6 +595,27 @@ if (import.meta.hot) { }" `; +exports[`vite (client, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -774,6 +837,27 @@ if (import.meta.hot) { }" `; +exports[`vite (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -995,6 +1079,27 @@ if (import.meta.hot) { }" `; +exports[`vite (client, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (client, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client/__snapshots__/webpack5.test.ts.snap b/tests/client/__snapshots__/webpack5.test.ts.snap index 45420d3..4bbea44 100644 --- a/tests/client/__snapshots__/webpack5.test.ts.snap +++ b/tests/client/__snapshots__/webpack5.test.ts.snap @@ -93,6 +93,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -317,6 +337,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -538,6 +578,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -753,6 +813,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; @@ -968,6 +1048,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (client, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { template as _$template } from "solid-js/web"; +import { createComponent as _$createComponent } from "solid-js/web"; +var _tmpl$ = /*#__PURE__*/_$template(\`

Foo\`); +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_tmpl$(), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (client, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { template as _$template } from "solid-js/web"; import { createComponent as _$createComponent } from "solid-js/web"; diff --git a/tests/client/esm.test.ts b/tests/client/esm.test.ts index c6a38ef..e6325d4 100644 --- a/tests/client/esm.test.ts +++ b/tests/client/esm.test.ts @@ -90,6 +90,20 @@ describe('esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client/rspack-esm.test.ts b/tests/client/rspack-esm.test.ts index ead438c..63cc224 100644 --- a/tests/client/rspack-esm.test.ts +++ b/tests/client/rspack-esm.test.ts @@ -90,6 +90,20 @@ describe('rspack-esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('rspack-esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('rspack-esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('rspack-esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('rspack-esm (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client/standard.test.ts b/tests/client/standard.test.ts index f076189..07c72a8 100644 --- a/tests/client/standard.test.ts +++ b/tests/client/standard.test.ts @@ -90,6 +90,20 @@ describe('standard (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('standard (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'standard', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('standard (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'standard', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('standard (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('standard (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client/vite.test.ts b/tests/client/vite.test.ts index e581070..e78af3b 100644 --- a/tests/client/vite.test.ts +++ b/tests/client/vite.test.ts @@ -90,6 +90,20 @@ describe('vite (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('vite (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'vite', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('vite (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'vite', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('vite (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('vite (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/client/webpack5.test.ts b/tests/client/webpack5.test.ts index 29cde94..fe6dedf 100644 --- a/tests/client/webpack5.test.ts +++ b/tests/client/webpack5.test.ts @@ -90,6 +90,20 @@ describe('webpack5 (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('webpack5 (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('webpack5 (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'webpack5', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('webpack5 (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('webpack5 (client, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'client', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server-hydratable/__snapshots__/esm.test.ts.snap b/tests/server-hydratable/__snapshots__/esm.test.ts.snap index 82ec9ae..14e884d 100644 --- a/tests/server-hydratable/__snapshots__/esm.test.ts.snap +++ b/tests/server-hydratable/__snapshots__/esm.test.ts.snap @@ -97,6 +97,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -325,6 +346,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -550,6 +592,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -769,6 +832,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -988,6 +1072,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server-hydratable/__snapshots__/rspack-esm.test.ts.snap b/tests/server-hydratable/__snapshots__/rspack-esm.test.ts.snap index c340374..ef3aeba 100644 --- a/tests/server-hydratable/__snapshots__/rspack-esm.test.ts.snap +++ b/tests/server-hydratable/__snapshots__/rspack-esm.test.ts.snap @@ -97,6 +97,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -325,6 +346,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -550,6 +592,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -769,6 +832,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -988,6 +1072,27 @@ if (import.meta.hot) { }" `; +exports[`esm (server, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server-hydratable/__snapshots__/standard.test.ts.snap b/tests/server-hydratable/__snapshots__/standard.test.ts.snap index d537390..d82b52a 100644 --- a/tests/server-hydratable/__snapshots__/standard.test.ts.snap +++ b/tests/server-hydratable/__snapshots__/standard.test.ts.snap @@ -97,6 +97,27 @@ if (module.hot) { }" `; +exports[`standard (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -325,6 +346,27 @@ if (module.hot) { }" `; +exports[`standard (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -550,6 +592,27 @@ if (module.hot) { }" `; +exports[`standard (server, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -769,6 +832,27 @@ if (module.hot) { }" `; +exports[`standard (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -988,6 +1072,27 @@ if (module.hot) { }" `; +exports[`standard (server, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server-hydratable/__snapshots__/vite.test.ts.snap b/tests/server-hydratable/__snapshots__/vite.test.ts.snap index 1620475..570d575 100644 --- a/tests/server-hydratable/__snapshots__/vite.test.ts.snap +++ b/tests/server-hydratable/__snapshots__/vite.test.ts.snap @@ -100,6 +100,28 @@ if (import.meta.hot) { }" `; +exports[`vite (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -334,6 +356,28 @@ if (import.meta.hot) { }" `; +exports[`vite (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -565,6 +609,28 @@ if (import.meta.hot) { }" `; +exports[`vite (server, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -790,6 +856,28 @@ if (import.meta.hot) { }" `; +exports[`vite (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -1015,6 +1103,28 @@ if (import.meta.hot) { }" `; +exports[`vite (server, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server-hydratable/__snapshots__/webpack5.test.ts.snap b/tests/server-hydratable/__snapshots__/webpack5.test.ts.snap index a826640..6038008 100644 --- a/tests/server-hydratable/__snapshots__/webpack5.test.ts.snap +++ b/tests/server-hydratable/__snapshots__/webpack5.test.ts.snap @@ -97,6 +97,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -325,6 +346,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -550,6 +592,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -769,6 +832,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -988,6 +1072,27 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +import { ssrHydrationKey as _$ssrHydrationKey } from "solid-js/web"; +var _tmpl$ = ["Foo"]; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$, _$ssrHydrationKey()), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server-hydratable/esm.test.ts b/tests/server-hydratable/esm.test.ts index 1f55074..eadd565 100644 --- a/tests/server-hydratable/esm.test.ts +++ b/tests/server-hydratable/esm.test.ts @@ -90,6 +90,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server-hydratable/rspack-esm.test.ts b/tests/server-hydratable/rspack-esm.test.ts index 15615c3..79d1929 100644 --- a/tests/server-hydratable/rspack-esm.test.ts +++ b/tests/server-hydratable/rspack-esm.test.ts @@ -90,6 +90,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('esm (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server-hydratable/standard.test.ts b/tests/server-hydratable/standard.test.ts index 77cd43a..75f6513 100644 --- a/tests/server-hydratable/standard.test.ts +++ b/tests/server-hydratable/standard.test.ts @@ -90,6 +90,20 @@ describe('standard (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('standard (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'standard', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('standard (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'standard', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('standard (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('standard (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server-hydratable/vite.test.ts b/tests/server-hydratable/vite.test.ts index 69a9f6b..a29a052 100644 --- a/tests/server-hydratable/vite.test.ts +++ b/tests/server-hydratable/vite.test.ts @@ -90,6 +90,20 @@ describe('vite (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('vite (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'vite', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('vite (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'vite', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('vite (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('vite (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server-hydratable/webpack5.test.ts b/tests/server-hydratable/webpack5.test.ts index 1774f21..0742a2c 100644 --- a/tests/server-hydratable/webpack5.test.ts +++ b/tests/server-hydratable/webpack5.test.ts @@ -90,6 +90,20 @@ describe('webpack5 (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('webpack5 (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('webpack5 (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'webpack5', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('webpack5 (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('webpack5 (server, hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + true, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server/__snapshots__/esm.test.ts.snap b/tests/server/__snapshots__/esm.test.ts.snap index 0b0eb5f..6fde848 100644 --- a/tests/server/__snapshots__/esm.test.ts.snap +++ b/tests/server/__snapshots__/esm.test.ts.snap @@ -93,6 +93,26 @@ if (import.meta.hot) { }" `; +exports[`esm (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -313,6 +333,26 @@ if (import.meta.hot) { }" `; +exports[`esm (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -530,6 +570,26 @@ if (import.meta.hot) { }" `; +exports[`esm (server, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -741,6 +801,26 @@ if (import.meta.hot) { }" `; +exports[`esm (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -952,6 +1032,26 @@ if (import.meta.hot) { }" `; +exports[`esm (server, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + _$$refresh("esm", import.meta.hot, _REGISTRY); +}" +`; + exports[`esm (server, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server/__snapshots__/rspack-esm.test.ts.snap b/tests/server/__snapshots__/rspack-esm.test.ts.snap index 065c478..bd098df 100644 --- a/tests/server/__snapshots__/rspack-esm.test.ts.snap +++ b/tests/server/__snapshots__/rspack-esm.test.ts.snap @@ -93,6 +93,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -313,6 +333,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -530,6 +570,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (server, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (server, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -741,6 +801,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -952,6 +1032,26 @@ if (import.meta.webpackHot) { }" `; +exports[`rspack-esm (server, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("rspack-esm", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`rspack-esm (server, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server/__snapshots__/standard.test.ts.snap b/tests/server/__snapshots__/standard.test.ts.snap index bc312d8..05601c3 100644 --- a/tests/server/__snapshots__/standard.test.ts.snap +++ b/tests/server/__snapshots__/standard.test.ts.snap @@ -93,6 +93,26 @@ if (module.hot) { }" `; +exports[`standard (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -313,6 +333,26 @@ if (module.hot) { }" `; +exports[`standard (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -530,6 +570,26 @@ if (module.hot) { }" `; +exports[`standard (server, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -741,6 +801,26 @@ if (module.hot) { }" `; +exports[`standard (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -952,6 +1032,26 @@ if (module.hot) { }" `; +exports[`standard (server, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (module.hot) { + _$$refresh("standard", module.hot, _REGISTRY); +}" +`; + exports[`standard (server, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server/__snapshots__/vite.test.ts.snap b/tests/server/__snapshots__/vite.test.ts.snap index 0f992b1..2ffc9e4 100644 --- a/tests/server/__snapshots__/vite.test.ts.snap +++ b/tests/server/__snapshots__/vite.test.ts.snap @@ -96,6 +96,27 @@ if (import.meta.hot) { }" `; +exports[`vite (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -322,6 +343,27 @@ if (import.meta.hot) { }" `; +exports[`vite (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -545,6 +587,27 @@ if (import.meta.hot) { }" `; +exports[`vite (server, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -762,6 +825,27 @@ if (import.meta.hot) { }" `; +exports[`vite (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -979,6 +1063,27 @@ if (import.meta.hot) { }" `; +exports[`vite (server, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.hot) { + import.meta.hot.accept(); + _$$refresh("vite", import.meta.hot, _REGISTRY); +}" +`; + exports[`vite (server, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server/__snapshots__/webpack5.test.ts.snap b/tests/server/__snapshots__/webpack5.test.ts.snap index 1e4d9ab..a75c698 100644 --- a/tests/server/__snapshots__/webpack5.test.ts.snap +++ b/tests/server/__snapshots__/webpack5.test.ts.snap @@ -93,6 +93,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export default function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, non-hydratable) > ExportDefaultDeclaration w/ FunctionExpression > should transform ExportDefaultDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -313,6 +333,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +export function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, non-hydratable) > ExportNamedDeclaration w/ FunctionExpression > should transform ExportNamedDeclaration w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -530,6 +570,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, non-hydratable) > FunctionDeclaration > should skip FunctionDeclaration with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:15", + signature: "4b145a58" +}); +function Foo(...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +} +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, non-hydratable) > FunctionDeclaration > should transform FunctionDeclaration with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -741,6 +801,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = (...args) => { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, non-hydratable) > VariableDeclarator > ArrowFunctionExpression > should transform VariableDeclarator w/ ArrowFunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; @@ -952,6 +1032,26 @@ if (import.meta.webpackHot) { }" `; +exports[`webpack5 (server, non-hydratable) > VariableDeclarator > FunctionExpression > should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter 1`] = ` +"import { createComponent as _$createComponent } from "solid-js/web"; +import { ssr as _$ssr } from "solid-js/web"; +var _tmpl$ = "

Foo

"; +import { $$component as _$$component } from "solid-refresh"; +import { $$refresh as _$$refresh } from "solid-refresh"; +import { $$registry as _$$registry } from "solid-refresh"; +const _REGISTRY = _$$registry(); +const Foo_1 = _$$component(_REGISTRY, "Foo_1", _props => /*@refresh jsx-skip*/_$ssr(_tmpl$), { + location: "example.jsx:3:17", + signature: "4b145a58" +}); +const Foo = function (...args) { + return /*@refresh jsx-skip*/_$createComponent(Foo_1, {}); +}; +if (import.meta.webpackHot) { + _$$refresh("webpack5", import.meta.webpackHot, _REGISTRY); +}" +`; + exports[`webpack5 (server, non-hydratable) > VariableDeclarator > FunctionExpression > should transform VariableDeclarator w/ FunctionExpression with valid Component name and params 1`] = ` "import { createComponent as _$createComponent } from "solid-js/web"; import { ssr as _$ssr } from "solid-js/web"; diff --git a/tests/server/esm.test.ts b/tests/server/esm.test.ts index c472adc..4bd8307 100644 --- a/tests/server/esm.test.ts +++ b/tests/server/esm.test.ts @@ -90,6 +90,20 @@ describe('esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server/rspack-esm.test.ts b/tests/server/rspack-esm.test.ts index e0b412a..a5ab36a 100644 --- a/tests/server/rspack-esm.test.ts +++ b/tests/server/rspack-esm.test.ts @@ -90,6 +90,20 @@ describe('rspack-esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('rspack-esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('rspack-esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'rspack-esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('rspack-esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('rspack-esm (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'rspack-esm', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server/standard.test.ts b/tests/server/standard.test.ts index b34a844..095a037 100644 --- a/tests/server/standard.test.ts +++ b/tests/server/standard.test.ts @@ -90,6 +90,20 @@ describe('standard (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('standard (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'standard', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('standard (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'standard', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('standard (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('standard (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'standard', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server/vite.test.ts b/tests/server/vite.test.ts index ab0ef1b..8cb4315 100644 --- a/tests/server/vite.test.ts +++ b/tests/server/vite.test.ts @@ -90,6 +90,20 @@ describe('vite (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('vite (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'vite', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('vite (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'vite', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('vite (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('vite (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'vite', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( diff --git a/tests/server/webpack5.test.ts b/tests/server/webpack5.test.ts index 97e0fe1..fa13d6d 100644 --- a/tests/server/webpack5.test.ts +++ b/tests/server/webpack5.test.ts @@ -90,6 +90,20 @@ describe('webpack5 (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip FunctionDeclaration with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip FunctionDeclaration with invalid Component name', async () => { expect( await transform( @@ -224,6 +238,20 @@ describe('webpack5 (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = function (...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -356,6 +384,20 @@ describe('webpack5 (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip VariableDeclarator w/ ArrowFunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + const Foo = (...args) => { + return

Foo

; + } + `, + 'webpack5', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip VariableDeclarator w/ ArrowFunctionExpression with invalid Component name', async () => { expect( await transform( @@ -490,6 +532,20 @@ describe('webpack5 (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportNamedDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportNamedDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform( @@ -622,6 +678,20 @@ describe('webpack5 (server, non-hydratable)', () => { ), ).toMatchSnapshot(); }); + it('should skip ExportDefaultDeclaration w/ FunctionExpression with valid Component name and a rest parameter', async () => { + expect( + await transform( + ` + export default function Foo(...args) { + return

Foo

; + } + `, + 'webpack5', + 'server', + false, + ), + ).toMatchSnapshot(); + }); it('should skip ExportDefaultDeclaration w/ FunctionExpression with invalid Component name', async () => { expect( await transform(