summaryrefslogtreecommitdiff
path: root/src/codegen/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/index.ts')
-rw-r--r--src/codegen/index.ts18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/codegen/index.ts b/src/codegen/index.ts
index d248b2a60..2eb289887 100644
--- a/src/codegen/index.ts
+++ b/src/codegen/index.ts
@@ -99,20 +99,17 @@ const defaultExtensions: Readonly<Record<string, ValidExtensionPlugins>> = {
'.astro': 'astro',
'.jsx': 'react',
'.vue': 'vue',
- '.svelte': 'svelte'
+ '.svelte': 'svelte',
};
function getComponentWrapper(_name: string, { type, url }: ComponentInfo, compileOptions: CompileOptions) {
- const {
- resolve,
- extensions = defaultExtensions
- } = compileOptions;
+ const { resolve, extensions = defaultExtensions } = compileOptions;
const [name, kind] = _name.split(':');
const plugin = extensions[type] || defaultExtensions[type];
- if(!plugin) {
+ if (!plugin) {
throw new Error(`No supported plugin found for extension ${type}`);
}
@@ -142,7 +139,9 @@ function getComponentWrapper(_name: string, { type, url }: ComponentInfo, compil
case 'react': {
if (kind === 'dynamic') {
return {
- wrapper: `__react_dynamic(${name}, new URL(${JSON.stringify(url.replace(/\.[^.]+$/, '.js'))}, \`http://TEST\${import.meta.url}\`).pathname, '${resolve('react')}', '${resolve('react-dom')}')`,
+ wrapper: `__react_dynamic(${name}, new URL(${JSON.stringify(url.replace(/\.[^.]+$/, '.js'))}, \`http://TEST\${import.meta.url}\`).pathname, '${resolve(
+ 'react'
+ )}', '${resolve('react-dom')}')`,
wrapperImport: `import {__react_dynamic} from '${internalImport('render/react.js')}';`,
};
} else {
@@ -215,6 +214,9 @@ export async function codegen(ast: Ast, { compileOptions }: CodeGenOptions): Pro
// Compile scripts as TypeScript, always
const script = compileScriptSafe(ast.module ? ast.module.content : '');
+ // Collect all exported variables for props
+ const scannedExports = eslexer.parse(script)[1].filter((n) => n !== 'setup' && n !== 'layout');
+
// Todo: Validate that `h` and `Fragment` aren't defined in the script
const [scriptImports] = eslexer.parse(script, 'optional-sourcename');
const components = Object.fromEntries(
@@ -380,7 +382,7 @@ export async function codegen(ast: Ast, { compileOptions }: CodeGenOptions): Pro
return {
script: script + '\n' + Array.from(additionalImports).join('\n'),
- head: headItem,
items,
+ props: scannedExports,
};
}