@meekojs/meeko 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -19
- package/dist/autoimports-ts.d.ts +4 -4
- package/dist/autoimports-ts.js +86 -30
- package/dist/autoimports-ts.js.map +1 -1
- package/dist/autoimports.d.ts +2 -2
- package/dist/autoimports.js +23 -7
- package/dist/autoimports.js.map +1 -1
- package/dist/check.js +39 -10
- package/dist/check.js.map +1 -1
- package/dist/cli.js +37 -4
- package/dist/cli.js.map +1 -1
- package/dist/compiler/events.d.ts +2 -0
- package/dist/compiler/events.js +6 -0
- package/dist/compiler/events.js.map +1 -0
- package/dist/compiler/props.d.ts +12 -0
- package/dist/compiler/props.js +32 -0
- package/dist/compiler/props.js.map +1 -0
- package/dist/compiler.js +55 -12
- package/dist/compiler.js.map +1 -1
- package/dist/component-errors.d.ts +18 -0
- package/dist/component-errors.js +65 -0
- package/dist/component-errors.js.map +1 -0
- package/dist/devtools.js +2 -4
- package/dist/devtools.js.map +1 -1
- package/dist/dom.d.ts +11 -5
- package/dist/dom.js +288 -88
- package/dist/dom.js.map +1 -1
- package/dist/error-observer.d.ts +6 -0
- package/dist/error-observer.js +41 -0
- package/dist/error-observer.js.map +1 -0
- package/dist/framework/check-app.js +160 -5
- package/dist/framework/check-app.js.map +1 -1
- package/dist/framework/check-project.d.ts +4 -0
- package/dist/framework/check-project.js +42 -0
- package/dist/framework/check-project.js.map +1 -0
- package/dist/framework/client.d.ts +3 -0
- package/dist/framework/client.js +136 -33
- package/dist/framework/client.js.map +1 -1
- package/dist/framework/clients.js +12 -4
- package/dist/framework/clients.js.map +1 -1
- package/dist/framework/contracts-generate.js +66 -3
- package/dist/framework/contracts-generate.js.map +1 -1
- package/dist/framework/init.js +21 -200
- package/dist/framework/init.js.map +1 -1
- package/dist/framework/middleware.d.ts +14 -0
- package/dist/framework/middleware.js +16 -0
- package/dist/framework/middleware.js.map +1 -0
- package/dist/framework/page-contracts-check.d.ts +8 -0
- package/dist/framework/page-contracts-check.js +110 -0
- package/dist/framework/page-contracts-check.js.map +1 -0
- package/dist/framework/page-contracts-generate.d.ts +2 -0
- package/dist/framework/page-contracts-generate.js +94 -0
- package/dist/framework/page-contracts-generate.js.map +1 -0
- package/dist/framework/page.d.ts +7 -3
- package/dist/framework/page.js +3 -1
- package/dist/framework/page.js.map +1 -1
- package/dist/framework/prerender.js +11 -5
- package/dist/framework/prerender.js.map +1 -1
- package/dist/framework/project-templates.d.ts +3 -0
- package/dist/framework/project-templates.js +119 -0
- package/dist/framework/project-templates.js.map +1 -0
- package/dist/framework/project.d.ts +9 -0
- package/dist/framework/project.js +272 -0
- package/dist/framework/project.js.map +1 -0
- package/dist/framework/router.d.ts +3 -1
- package/dist/framework/router.js +94 -8
- package/dist/framework/router.js.map +1 -1
- package/dist/framework/server.d.ts +17 -3
- package/dist/framework/server.js +71 -24
- package/dist/framework/server.js.map +1 -1
- package/dist/framework/socket-contracts-generate.js +8 -5
- package/dist/framework/socket-contracts-generate.js.map +1 -1
- package/dist/framework/socket.d.ts +2 -0
- package/dist/framework/socket.js +119 -17
- package/dist/framework/socket.js.map +1 -1
- package/dist/framework/standard-schema-types.d.ts +7 -0
- package/dist/framework/standard-schema-types.js +69 -0
- package/dist/framework/standard-schema-types.js.map +1 -0
- package/dist/framework/state.d.ts +7 -0
- package/dist/framework/state.js +78 -14
- package/dist/framework/state.js.map +1 -1
- package/dist/framework/styles.d.ts +2 -0
- package/dist/framework/styles.js +6 -0
- package/dist/framework/styles.js.map +1 -0
- package/dist/framework/type-declarations.d.ts +5 -0
- package/dist/framework/type-declarations.js +84 -0
- package/dist/framework/type-declarations.js.map +1 -0
- package/dist/framework-server/contracts.d.ts +11 -2
- package/dist/framework-server/contracts.js +62 -7
- package/dist/framework-server/contracts.js.map +1 -1
- package/dist/framework-server/discovery.d.ts +4 -1
- package/dist/framework-server/discovery.js +21 -16
- package/dist/framework-server/discovery.js.map +1 -1
- package/dist/framework-server/local.d.ts +2 -0
- package/dist/framework-server/local.js +5 -3
- package/dist/framework-server/local.js.map +1 -1
- package/dist/framework-server/middleware.d.ts +4 -0
- package/dist/framework-server/middleware.js +56 -0
- package/dist/framework-server/middleware.js.map +1 -0
- package/dist/framework-server/node-upgrade.js +27 -9
- package/dist/framework-server/node-upgrade.js.map +1 -1
- package/dist/framework-server/node-websocket.js +4 -2
- package/dist/framework-server/node-websocket.js.map +1 -1
- package/dist/framework-server/session-stores.d.ts +9 -2
- package/dist/framework-server/session-stores.js +37 -11
- package/dist/framework-server/session-stores.js.map +1 -1
- package/dist/framework-server/sessions.d.ts +6 -0
- package/dist/framework-server/sessions.js +41 -10
- package/dist/framework-server/sessions.js.map +1 -1
- package/dist/framework-server/socket.js +62 -27
- package/dist/framework-server/socket.js.map +1 -1
- package/dist/framework-server.d.ts +2 -0
- package/dist/framework-server.js +1 -0
- package/dist/framework-server.js.map +1 -1
- package/dist/framework.d.ts +3 -1
- package/dist/framework.js +1 -0
- package/dist/framework.js.map +1 -1
- package/dist/hmr.js +74 -24
- package/dist/hmr.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +27 -1
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +2 -2
- package/dist/internal.js +2 -2
- package/dist/internal.js.map +1 -1
- package/dist/node.d.ts +5 -1
- package/dist/node.js +80 -10
- package/dist/node.js.map +1 -1
- package/dist/reactivity.d.ts +12 -3
- package/dist/reactivity.js +94 -17
- package/dist/reactivity.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/vite.js +29 -9
- package/dist/vite.js.map +1 -1
- package/package.json +2 -2
package/dist/compiler.js
CHANGED
|
@@ -4,8 +4,10 @@ import ts from "@typescript/typescript6";
|
|
|
4
4
|
import postcss from "postcss";
|
|
5
5
|
import selectorParser from "postcss-selector-parser";
|
|
6
6
|
import { extractSourceMappings, markSource } from "./compiler/mapping.js";
|
|
7
|
+
import { analyzePropsDefaults, PropsDefaultsError } from "./compiler/props.js";
|
|
7
8
|
import { compileError, locate, parseSfc } from "./compiler/sfc.js";
|
|
8
9
|
import { parseTemplate } from "./compiler/template.js";
|
|
10
|
+
import { templateEventType } from "./compiler/events.js";
|
|
9
11
|
function emptyBindings() {
|
|
10
12
|
return { texts: [], events: [], attributes: [], components: [], regions: [] };
|
|
11
13
|
}
|
|
@@ -269,6 +271,7 @@ function compileScript(section, source, filename) {
|
|
|
269
271
|
const names = [];
|
|
270
272
|
let propsType;
|
|
271
273
|
let propsTypeOffset;
|
|
274
|
+
let defaults;
|
|
272
275
|
for (const statement of file.statements) {
|
|
273
276
|
if (ts.isImportDeclaration(statement)) {
|
|
274
277
|
imports.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
@@ -299,7 +302,21 @@ function compileScript(section, source, filename) {
|
|
|
299
302
|
if (!propsType)
|
|
300
303
|
throw compileError(source, filename, "MEEK017", "defineProps requires a type argument", section.contentStart + declaration.getStart(file));
|
|
301
304
|
propsTypeOffset = section.contentStart + typeArgument.getStart(file);
|
|
302
|
-
|
|
305
|
+
try {
|
|
306
|
+
const analyzed = analyzePropsDefaults(declaration.initializer);
|
|
307
|
+
if (analyzed)
|
|
308
|
+
defaults = {
|
|
309
|
+
expression: analyzed.argument.getText(file),
|
|
310
|
+
offset: section.contentStart + analyzed.argument.getStart(file),
|
|
311
|
+
keys: analyzed.keys,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
if (!(error instanceof PropsDefaultsError))
|
|
316
|
+
throw error;
|
|
317
|
+
throw compileError(source, filename, error.code, error.message, section.contentStart + error.node.getStart(file));
|
|
318
|
+
}
|
|
319
|
+
setup.push(`const ${name}: ${defaults ? "__MeekoResolvedProps" : markSource(propsType, propsTypeOffset)} = __props;`);
|
|
303
320
|
}
|
|
304
321
|
else {
|
|
305
322
|
setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
@@ -312,9 +329,13 @@ function compileScript(section, source, filename) {
|
|
|
312
329
|
setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
313
330
|
continue;
|
|
314
331
|
}
|
|
332
|
+
if (ts.isExpressionStatement(statement) && ts.isCallExpression(statement.expression)) {
|
|
333
|
+
setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
315
336
|
throw compileError(source, filename, "MEEK018", `Unsupported top-level script statement: ${ts.SyntaxKind[statement.kind]}`, section.contentStart + statement.getStart(file));
|
|
316
337
|
}
|
|
317
|
-
return { imports, types, setup, names, propsType: propsType ?? "Record<string, never>", propsTypeOffset };
|
|
338
|
+
return { imports, types, setup, names, propsType: propsType ?? "Record<string, never>", propsTypeOffset, ...(defaults ? { defaults } : {}) };
|
|
318
339
|
}
|
|
319
340
|
function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
320
341
|
const statements = [];
|
|
@@ -332,12 +353,11 @@ function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
|
332
353
|
statements.push(`cleanups.push(__meeko.bindAttribute(__scope, ${id}, ${quote(name)}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);
|
|
333
354
|
}
|
|
334
355
|
for (const { id, name, expression, offset } of bindings.events) {
|
|
335
|
-
const eventType =
|
|
336
|
-
|
|
337
|
-
const handler = markSource(`((__meeko_handler: (event: ${eventType}) => void) => __meeko_handler(event as ${eventType}))(${mappedExpression(expression, offset)});`, offset, expression.length);
|
|
356
|
+
const eventType = templateEventType(name);
|
|
357
|
+
const handler = markSource(`((__meeko_handler: (event: ${eventType}) => unknown) => __meeko_handler(event as ${eventType}))(${mappedExpression(expression, offset)});`, offset, expression.length);
|
|
338
358
|
statements.push(`{
|
|
339
359
|
cleanups.push(__meeko.bindEvent(__scope, ${id}, ${quote(name)}, (event: Event) => {
|
|
340
|
-
${handler}
|
|
360
|
+
return ${handler}
|
|
341
361
|
}));
|
|
342
362
|
}`);
|
|
343
363
|
}
|
|
@@ -370,8 +390,8 @@ function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
|
370
390
|
return `const cleanups: Array<() => void> = [];
|
|
371
391
|
try {
|
|
372
392
|
${statements.join("\n")}
|
|
373
|
-
return () =>
|
|
374
|
-
} catch (error) {
|
|
393
|
+
return () => __meeko.releaseAll(cleanups);
|
|
394
|
+
} catch (error) { __meeko.releaseAll(cleanups, { error }); }`;
|
|
375
395
|
}
|
|
376
396
|
/** Compila una parte tipada de .meeko para SSR e hidratación del HTML existente. */
|
|
377
397
|
export function compile(source, filename = "anonymous.meeko", options = {}) {
|
|
@@ -399,16 +419,39 @@ export function compile(source, filename = "anonymous.meeko", options = {}) {
|
|
|
399
419
|
const scriptParts = compileScript(script, source, filename);
|
|
400
420
|
const bindings = scriptParts.names.join(", ");
|
|
401
421
|
const hot = options.hot === true;
|
|
402
|
-
const
|
|
422
|
+
const resolvedProps = scriptParts.defaults ? "__meeko_resolveProps(__inputProps)" : "__inputProps";
|
|
423
|
+
const setupCode = `const __bindings = __setup(${resolvedProps});\n__meeko.restoreSignals(__bindings, __state);\nconst { ${bindings} } = __bindings;`;
|
|
403
424
|
const releaseCode = hot
|
|
404
|
-
? `const __cleanup = () =>
|
|
405
|
-
: `return __meeko.withStateSnapshot(() =>
|
|
425
|
+
? `const __cleanup = () => __meeko.finishWithCleanup(__release, dispose);\nconst __component = { renderToString, hydrate, hydrateScope, css };\nconst __snapshot = () => __meeko.snapshotSignals(__bindings);\nconst __devtoolsStop = __meeko.registerDevtoolsInstance({ componentId: __hotId, name: ${quote(basename(filename, ".meeko"))}, file: ${quote(filename)}, scope: __scope, props: __inputProps, bindings: __bindings });\nconst __dispose = () => __meeko.finishWithCleanup(__cleanup, __devtoolsStop);\nconst __stop = __hotRoot ? __meeko.registerHotInstance(__hotId, __hotRoot, __inputProps, __component, __snapshot, __dispose) : __scope.start ? __meeko.registerHotScope(__hotId, __scope, __inputProps, __component, __snapshot, __dispose) : __dispose;\nreturn __meeko.withStateSnapshot(__stop, __snapshot);`
|
|
426
|
+
: `return __meeko.withStateSnapshot(() => __meeko.finishWithCleanup(__release, dispose), () => __meeko.snapshotSignals(__bindings));`;
|
|
406
427
|
const hotIdExport = hot ? `export const __hotId = ${quote(componentId)};\n` : "";
|
|
407
428
|
const stateParam = ", __state?: __meeko.HotState";
|
|
408
429
|
const scopeHotRootParam = hot ? ", __hotRoot?: Element" : "";
|
|
409
430
|
const scopeForward = hot ? "__scope, __inputProps, __state, root" : "__scope, __inputProps, __state";
|
|
410
431
|
const propsType = scriptParts.propsTypeOffset === undefined ? scriptParts.propsType : markSource(scriptParts.propsType, scriptParts.propsTypeOffset);
|
|
411
|
-
const
|
|
432
|
+
const defaults = scriptParts.defaults;
|
|
433
|
+
const defaultKeys = defaults?.keys.map(quote).join(" | ") || "never";
|
|
434
|
+
const propsDeclaration = defaults ? `type __MeekoDeclaredProps = ${propsType};
|
|
435
|
+
type __MeekoDefaultKeys = Extract<${defaultKeys}, keyof __MeekoDeclaredProps>;
|
|
436
|
+
type __MeekoDefaultPick = Pick<__MeekoDeclaredProps, __MeekoDefaultKeys>;
|
|
437
|
+
type __MeekoDefaultValues = { [K in keyof __MeekoDefaultPick]-?: Exclude<__MeekoDefaultPick[K], undefined> };
|
|
438
|
+
type __MeekoResolvedPropsOf<T> = T extends unknown ? Omit<T, __MeekoDefaultKeys> & __MeekoDefaultValues : never;
|
|
439
|
+
type __MeekoResolvedProps = __MeekoResolvedPropsOf<__MeekoDeclaredProps>;
|
|
440
|
+
type __MeekoInputPropsOf<T> = T extends unknown ? Omit<T, __MeekoDefaultKeys> & { [K in keyof __MeekoDefaultPick]?: __MeekoDefaultPick[K] | undefined } : never;
|
|
441
|
+
export type ComponentProps = __MeekoInputPropsOf<__MeekoDeclaredProps>;
|
|
442
|
+
function __meeko_defaultProps() {
|
|
443
|
+
return (${markSource(defaults.expression, defaults.offset)} satisfies Partial<__MeekoDeclaredProps> & __MeekoDefaultValues & Record<Exclude<${defaultKeys}, keyof __MeekoDeclaredProps>, never>);
|
|
444
|
+
}
|
|
445
|
+
function __meeko_resolveProps(input: ComponentProps): __MeekoResolvedProps {
|
|
446
|
+
const defaults = __meeko_defaultProps();
|
|
447
|
+
const resolved = { ...defaults, ...input } as __MeekoResolvedProps;
|
|
448
|
+
const mutable = resolved as unknown as Record<string, unknown>;
|
|
449
|
+
for (const key of Object.keys(defaults)) {
|
|
450
|
+
if (mutable[key] === undefined) mutable[key] = defaults[key as keyof typeof defaults];
|
|
451
|
+
}
|
|
452
|
+
return resolved;
|
|
453
|
+
}` : `export type ComponentProps = ${propsType};`;
|
|
454
|
+
const markedCode = `// Generated by Meeko. Edit the .meeko source instead.\nimport * as __meeko from "@meekojs/meeko/internal";\n${scriptParts.imports.join("\n")}\n${scriptParts.types.join("\n")}\n${propsDeclaration}\nfunction __setup(__props: ${defaults ? "__MeekoResolvedProps" : propsType}) {\n${scriptParts.setup.join("\n")}\nreturn { ${bindings} };\n}\nexport const css = ${quote(css)};\n${hotIdExport}export function renderWithState(__inputProps: ComponentProps): { html: string; state: __meeko.HotState } {\nreturn __meeko.createRoot((dispose) => {\nconst __meeko_transfer = true;\nconst __bindings = __setup(${resolvedProps});\nconst { ${bindings} } = __bindings;\nreturn __meeko.finishWithCleanup(() => {\nconst html = ${html};\nconst state = __meeko.snapshotSignals(__bindings);\n__meeko.serializeJson(state);\nreturn { html, state };\n}, dispose);\n});\n}\nexport function renderToString(__inputProps: ComponentProps${stateParam}): string {\nreturn __meeko.createRoot((dispose) => {\nconst __meeko_transfer = false;\n${setupCode}\nreturn __meeko.finishWithCleanup(() => ${html}, dispose);\n});\n}\nexport function hydrate(root: Element, __inputProps: ComponentProps${stateParam}): () => void {\nconst __scope: __meeko.DomScope = { root };\nreturn hydrateScope(${scopeForward});\n}\nexport function hydrateScope(__scope: __meeko.DomScope, __inputProps: ComponentProps${stateParam}${scopeHotRootParam}): () => void {\nreturn __meeko.createRoot((dispose) => {\nconst __meeko_transfer = false;\n${setupCode}\nconst __release = (() => { ${hydrationBody(bindingsForTemplate, context, hot)} })();\n${releaseCode}\n});\n}\n`;
|
|
412
455
|
const { code, mappings } = extractSourceMappings(markedCode);
|
|
413
456
|
return { code, css, mappings };
|
|
414
457
|
}
|
package/dist/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { basename } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport postcss from \"postcss\";\nimport selectorParser from \"postcss-selector-parser\";\nimport { extractSourceMappings, markSource } from \"./compiler/mapping.js\";\nimport type { SourceMapping } from \"./compiler/mapping.js\";\nimport { compileError, locate, parseSfc } from \"./compiler/sfc.js\";\nimport type { SfcSection } from \"./compiler/sfc.js\";\nimport { parseTemplate } from \"./compiler/template.js\";\nimport type { TemplateNode } from \"./compiler/template.js\";\n\ninterface DynamicText {\n id: number;\n expression: string;\n offset: number;\n}\n\ninterface EventBinding {\n id: number;\n name: string;\n expression: string;\n offset: number;\n}\n\ninterface AttributeBinding {\n id: number;\n name: string;\n expression: string;\n offset: number;\n}\n\ninterface ConditionBinding {\n kind: \"condition\";\n id: number;\n expression: string;\n offset: number;\n render: string;\n bindings: TemplateBindings;\n}\n\ninterface ListBinding {\n kind: \"list\";\n id: number;\n expression: string;\n offset: number;\n key: string;\n keyOffset: number;\n itemName: string;\n indexName: string;\n render: string;\n bindings: TemplateBindings;\n}\n\ninterface ComponentBinding {\n id: number;\n reference: string;\n referenceOffset: number;\n props: Array<{ name: string; nameOffset: number; expression: string; offset: number }>;\n offset: number;\n}\n\ninterface TemplateBindings {\n texts: DynamicText[];\n events: EventBinding[];\n attributes: AttributeBinding[];\n components: ComponentBinding[];\n regions: Array<ConditionBinding | ListBinding>;\n}\n\ninterface TemplateContext {\n source: string;\n filename: string;\n templateOffset: number;\n scopeAttribute: string | undefined;\n nextText: number;\n nextEvent: number;\n nextAttribute: number;\n nextRegion: number;\n}\n\nfunction emptyBindings(): TemplateBindings {\n return { texts: [], events: [], attributes: [], components: [], regions: [] };\n}\n\n/** Resultado del compilador de un componente .meeko. */\nexport interface CompileResult {\n code: string;\n css: string;\n mappings: readonly SourceMapping[];\n}\n\n/** Opciones de generación; HMR se incluye solo en módulos de desarrollo. */\nexport interface CompileOptions {\n hot?: boolean;\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction validateExpression(expression: string, source: string, filename: string, offset: number): void {\n const prefix = \"const __check = (\";\n const parsed = ts.createSourceFile(filename, `${prefix}${expression});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS) as ts.SourceFile & { parseDiagnostics: readonly ts.DiagnosticWithLocation[] };\n const error = parsed.parseDiagnostics[0];\n if (error) {\n const position = Math.max(0, Math.min(expression.length, (error.start ?? prefix.length) - prefix.length));\n throw compileError(source, filename, \"MEEK020\", ts.flattenDiagnosticMessageText(error.messageText, \"\\n\"), offset + position);\n }\n}\n\nfunction attributeValueOffset(node: TemplateNode, name: string, context: TemplateContext): number {\n const position = node.sourceCodeLocation?.attrs?.[name];\n if (!position) return context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0);\n const raw = context.source.slice(context.templateOffset + position.startOffset, context.templateOffset + position.endOffset);\n const equals = raw.indexOf(\"=\");\n if (equals < 0) return context.templateOffset + position.startOffset;\n const after = raw.slice(equals + 1);\n const whitespace = after.length - after.trimStart().length;\n const quoteStart = equals + 1 + whitespace;\n const quoted = raw[quoteStart] === '\"' || raw[quoteStart] === \"'\";\n return context.templateOffset + position.startOffset + quoteStart + (quoted ? 1 : 0);\n}\n\nfunction rewriteLocals(expression: string, locals: ReadonlyMap<string, string>): string {\n if (locals.size === 0) return expression;\n const prefix = \"const __value = (\";\n const file = ts.createSourceFile(\"template-expression.ts\", `${prefix}${expression});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: Array<{ start: number; end: number; text: string }> = [];\n function isShadowed(node: ts.Identifier): boolean {\n for (let parent = node.parent; parent; parent = parent.parent) {\n if ((ts.isArrowFunction(parent) || ts.isFunctionExpression(parent)) && parent.parameters.some((parameter) => ts.isIdentifier(parameter.name) && parameter.name.text === node.text)) return true;\n if (ts.isSourceFile(parent)) break;\n }\n return false;\n }\n function visit(node: ts.Node): void {\n if (ts.isIdentifier(node)) {\n const replacement = locals.get(node.text);\n const parent = node.parent;\n if (replacement && parent && !isShadowed(node)\n && !(ts.isPropertyAccessExpression(parent) && parent.name === node)\n && !(ts.isPropertyAssignment(parent) && parent.name === node)\n && !(ts.isParameter(parent) && parent.name === node)\n && !(ts.isVariableDeclaration(parent) && parent.name === node)) {\n const shorthand = ts.isShorthandPropertyAssignment(parent) && parent.name === node;\n changes.push({ start: node.getStart(file) - prefix.length, end: node.getEnd() - prefix.length, text: shorthand ? `${node.text}: (${replacement})` : `(${replacement})` });\n }\n }\n ts.forEachChild(node, visit);\n }\n visit(file);\n let result = expression;\n for (const change of changes.reverse()) {\n if (change.start >= 0 && change.end <= expression.length) result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction textParts(value: string, bindings: TemplateBindings, context: TemplateContext, offset: number): string[] {\n const parts: string[] = [];\n const pattern = /\\{([^{}]+)\\}/g;\n let cursor = 0;\n for (const match of value.matchAll(pattern)) {\n const index = match.index;\n const staticPart = value.slice(cursor, index);\n if (staticPart) parts.push(`__meeko.escapeHtml(${quote(staticPart)})`);\n const rawExpression = match[1] ?? \"\";\n const expression = rawExpression.trim();\n if (!expression) throw compileError(context.source, context.filename, \"MEEK009\", \"Empty template expression\", offset + index);\n validateExpression(expression, context.source, context.filename, offset + index + 1 + rawExpression.indexOf(expression));\n const id = context.nextText++;\n const expressionOffset = offset + index + 1 + rawExpression.indexOf(expression);\n bindings.texts.push({ id, expression, offset: expressionOffset });\n parts.push(`${quote(`<!--meeko:text:${id}-->`)} + __meeko.escapeHtml(${markSource(expression, expressionOffset)}) + ${quote(`<!--/meeko:text:${id}-->`)}`);\n cursor = index + match[0].length;\n }\n const tail = value.slice(cursor);\n if (tail.includes(\"{\")) throw compileError(context.source, context.filename, \"MEEK010\", \"Unclosed template expression\", offset + cursor + tail.indexOf(\"{\"));\n if (tail) parts.push(`__meeko.escapeHtml(${quote(tail)})`);\n return parts;\n}\n\nfunction renderNode(node: TemplateNode, bindings: TemplateBindings, context: TemplateContext): string {\n if (node.nodeName === \"#text\") {\n return textParts(node.value ?? \"\", bindings, context, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0)).join(\" + \") || quote(\"\");\n }\n if (node.nodeName === \"#comment\") return quote(`<!--${node.value ?? \"\"}-->`);\n if (!node.tagName) return (node.childNodes ?? []).map((child) => renderNode(child, bindings, context)).join(\" + \") || quote(\"\");\n\n const attrsList = node.attrs ?? [];\n const position = context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0);\n const condition = attrsList.find((attribute) => attribute.name === \"if:when\");\n const list = attrsList.find((attribute) => attribute.name === \"each:of\");\n if (condition && list) throw compileError(context.source, context.filename, \"MEEK021\", \"A node cannot have both if:when and each:of\", position);\n if (condition || list) {\n const inner = emptyBindings();\n const excluded = new Set(condition ? [\"if:when\"] : [\"each:of\", \"each:as\", \"each:key\", \"each:index\"]);\n const clone: TemplateNode = { ...node, attrs: attrsList.filter((attribute) => !excluded.has(attribute.name)) };\n const html = renderNodeContent(clone, inner, context);\n const id = context.nextRegion++;\n if (condition) {\n const offset = attributeValueOffset(node, \"if:when\", context);\n validateExpression(condition.value, context.source, context.filename, offset);\n bindings.regions.push({ kind: \"condition\", id, expression: condition.value, offset, render: html, bindings: inner });\n return `__meeko.renderIf(${id}, ${markSource(condition.value, offset)}, () => ${html})`;\n }\n const itemName = attrsList.find((attribute) => attribute.name === \"each:as\")?.value;\n const key = attrsList.find((attribute) => attribute.name === \"each:key\")?.value;\n const indexName = attrsList.find((attribute) => attribute.name === \"each:index\")?.value ?? \"index\";\n if (!itemName || !/^[a-zA-Z_$][\\w$]*$/.test(itemName) || itemName.startsWith(\"__\") || !/^[a-zA-Z_$][\\w$]*$/.test(indexName) || indexName.startsWith(\"__\") || itemName === indexName) {\n throw compileError(context.source, context.filename, \"MEEK022\", \"A list needs valid, distinct each:as and each:index identifiers\", position);\n }\n if (!key) throw compileError(context.source, context.filename, \"MEEK023\", \"A list requires each:key\", position);\n const offset = attributeValueOffset(node, \"each:of\", context);\n const keyOffset = attributeValueOffset(node, \"each:key\", context);\n validateExpression(list!.value, context.source, context.filename, offset);\n validateExpression(key, context.source, context.filename, keyOffset);\n bindings.regions.push({ kind: \"list\", id, expression: list!.value, offset, key, keyOffset, itemName, indexName, render: html, bindings: inner });\n return `__meeko.renderFor(${id}, ${markSource(list!.value, offset)}, (${itemName}, ${indexName}) => ${markSource(key, keyOffset)}, (${itemName}, ${indexName}) => ${html})`;\n }\n if (attrsList.some((attribute) => attribute.name.startsWith(\"each:\") || attribute.name.startsWith(\"if:\"))) {\n throw compileError(context.source, context.filename, \"MEEK024\", \"Incomplete template directive\", position);\n }\n return renderNodeContent(node, bindings, context);\n}\n\nfunction renderNodeContent(node: TemplateNode, bindings: TemplateBindings, context: TemplateContext): string {\n if (node.tagName === \"template\") {\n return (node.content?.childNodes ?? []).map((child) => renderNode(child, bindings, context)).join(\" + \") || quote(\"\");\n }\n if (node.tagName === \"component\") {\n const position = node.start;\n const referenceAttribute = node.attrs?.find((attribute) => attribute.name === \"is\");\n const reference = referenceAttribute?.value ?? \"\";\n if (!reference.trim()) throw compileError(context.source, context.filename, \"MEEK030\", \"A component requires is=\\\"expression\\\"\", position);\n const referenceOffset = attributeValueOffset(node, \"is\", context);\n validateExpression(reference, context.source, context.filename, referenceOffset);\n if ((node.childNodes ?? []).some((child) => child.nodeName !== \"#text\" || Boolean(child.value?.trim()))) {\n throw compileError(context.source, context.filename, \"MEEK031\", \"Component children are not supported; close the tag without content\", position);\n }\n const props: ComponentBinding[\"props\"] = [];\n for (const attribute of node.attrs ?? []) {\n if (attribute.name === \"is\") continue;\n const rawName = /^[^\\s=]+/.exec(context.source.slice(attribute.start, attribute.end))?.[0] ?? attribute.name;\n if (!rawName.startsWith(\"bind:\") || !/^[a-zA-Z_$][\\w$]*$/.test(rawName.slice(5))) {\n throw compileError(context.source, context.filename, \"MEEK032\", \"Component props must use bind:prop=\\\"expression\\\"\", attribute.start);\n }\n const name = rawName.slice(5);\n const offset = attributeValueOffset(node, attribute.name, context);\n validateExpression(attribute.value, context.source, context.filename, offset);\n props.push({ name, nameOffset: attribute.start + 5, expression: attribute.value, offset });\n }\n const id = context.nextRegion++;\n bindings.components.push({ id, reference, referenceOffset, props, offset: position });\n const mappedProps = props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${markSource(prop.expression, prop.offset)}`);\n const object = markSource(`{ ${mappedProps.join(\", \")} }`, position, node.end - position);\n return `__meeko.renderComponent(${id}, ${markSource(reference, referenceOffset)}, ${object}, __meeko_transfer)`;\n }\n const tag = node.tagName!;\n\n const attrs: Array<{ kind: \"static\"; value: string } | { kind: \"dynamic\"; expression: string }> = [];\n for (const attr of node.attrs ?? []) {\n if (attr.name.startsWith(\"on:\")) {\n const name = attr.name.slice(3);\n if (!/^[a-z]+$/.test(name)) throw compileError(context.source, context.filename, \"MEEK011\", `Invalid event name: ${name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n const id = context.nextEvent++;\n const offset = attributeValueOffset(node, attr.name, context);\n validateExpression(attr.value, context.source, context.filename, offset);\n bindings.events.push({ id, name, expression: attr.value, offset });\n attrs.push({ kind: \"static\", value: ` data-meeko-e-${id}=\"\"` });\n } else if (attr.name.startsWith(\"bind:\")) {\n const name = attr.name.slice(5);\n if (!/^[a-z][a-z0-9:.-]*$/.test(name) || name.startsWith(\"on\")) {\n throw compileError(context.source, context.filename, \"MEEK012\", `Invalid dynamic attribute: ${name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n }\n const offset = attributeValueOffset(node, attr.name, context);\n validateExpression(attr.value, context.source, context.filename, offset);\n const id = context.nextAttribute++;\n bindings.attributes.push({ id, name, expression: attr.value, offset });\n attrs.push({ kind: \"static\", value: ` data-meeko-a-${id}=\"\"` });\n attrs.push({ kind: \"dynamic\", expression: `__meeko.renderAttribute(${quote(name)}, ${markSource(attr.value, offset)})` });\n } else if (attr.name.startsWith(\":\")) {\n throw compileError(context.source, context.filename, \"MEEK012\", `Unsupported template directive: ${attr.name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n } else {\n attrs.push({ kind: \"static\", value: ` ${attr.name}=\"${escapeAttribute(attr.value)}\"` });\n }\n }\n if (context.scopeAttribute) attrs.push({ kind: \"static\", value: ` ${context.scopeAttribute}=\"\"` });\n const openingParts: string[] = [quote(`<${tag}`)];\n for (const attr of attrs) {\n if (attr.kind === \"dynamic\") openingParts.push(attr.expression);\n else openingParts.push(quote(attr.value));\n }\n openingParts.push(quote(\">\"));\n const opening = openingParts.join(\" + \");\n const voidElements = new Set([\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\n if (voidElements.has(tag)) return opening;\n const children = (node.childNodes ?? []).map((child) => renderNode(child, bindings, context));\n return [opening, ...children, quote(`</${tag}>`)].join(\" + \");\n}\n\nfunction escapeAttribute(value: string): string {\n return value.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"<\", \"<\");\n}\n\nfunction scopeCss(css: string, scopeAttribute: string): string {\n const root = postcss.parse(css);\n root.walkRules((rule) => {\n let parent: postcss.Node | undefined = rule.parent;\n while (parent) {\n if (parent.type === \"atrule\" && /keyframes$/i.test((parent as postcss.AtRule).name)) return;\n parent = parent.parent;\n }\n if (rule.selector.includes(\":global\")) throw rule.error(\":global is not supported in scoped styles yet\", { index: rule.selector.indexOf(\":global\") });\n rule.selector = selectorParser((selectors) => {\n selectors.each((selector) => {\n const pseudoElement = selector.nodes.find((node) => node.type === \"pseudo\" && node.value.startsWith(\"::\"));\n const attribute = selectorParser.attribute({ attribute: scopeAttribute, value: undefined, raws: {} });\n if (pseudoElement) selector.insertBefore(pseudoElement, attribute);\n else selector.append(attribute);\n });\n }).processSync(rule.selector);\n });\n return root.toString();\n}\n\nfunction compileScript(section: SfcSection, source: string, filename: string): { imports: string[]; types: string[]; setup: string[]; names: string[]; propsType: string; propsTypeOffset: number | undefined } {\n const file = ts.createSourceFile(filename, section.content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS) as ts.SourceFile & { parseDiagnostics: readonly ts.DiagnosticWithLocation[] };\n const syntaxError = file.parseDiagnostics[0];\n if (syntaxError) {\n const message = ts.flattenDiagnosticMessageText(syntaxError.messageText, \"\\n\");\n throw compileError(source, filename, \"MEEK013\", message, section.contentStart + (syntaxError.start ?? 0));\n }\n const imports: string[] = [];\n const types: string[] = [];\n const setup: string[] = [];\n const names: string[] = [];\n let propsType: string | undefined;\n let propsTypeOffset: number | undefined;\n for (const statement of file.statements) {\n if (ts.isImportDeclaration(statement)) {\n imports.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) {\n types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isExportDeclaration(statement) && (statement.isTypeOnly ||\n (statement.exportClause && ts.isNamedExports(statement.exportClause) && statement.exportClause.elements.every((element) => element.isTypeOnly)))) {\n types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n if (statement.declarationList.declarations.length !== 1) throw compileError(source, filename, \"MEEK014\", \"Declare one variable per statement in .meeko scripts\", section.contentStart + statement.getStart(file));\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) throw compileError(source, filename, \"MEEK015\", \"Only simple variable declarations are supported in .meeko scripts\", section.contentStart + declaration.getStart(file));\n const name = declaration.name.text;\n names.push(name);\n if (declaration.initializer && ts.isCallExpression(declaration.initializer) && declaration.initializer.expression.getText(file) === \"defineProps\") {\n if (propsType) throw compileError(source, filename, \"MEEK016\", \"defineProps must appear once in its own declaration\", section.contentStart + declaration.getStart(file));\n const typeArgument = declaration.initializer.typeArguments?.[0];\n propsType = typeArgument?.getText(file);\n if (!propsType) throw compileError(source, filename, \"MEEK017\", \"defineProps requires a type argument\", section.contentStart + declaration.getStart(file));\n propsTypeOffset = section.contentStart + typeArgument!.getStart(file);\n setup.push(`const ${name}: ${markSource(propsType, propsTypeOffset)} = __props;`);\n } else {\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n }\n }\n continue;\n }\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n names.push(statement.name.text);\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n throw compileError(source, filename, \"MEEK018\", `Unsupported top-level script statement: ${ts.SyntaxKind[statement.kind]}`, section.contentStart + statement.getStart(file));\n }\n return { imports, types, setup, names, propsType: propsType ?? \"Record<string, never>\", propsTypeOffset };\n}\n\nfunction hydrationBody(bindings: TemplateBindings, context: TemplateContext, hot: boolean, locals: ReadonlyMap<string, string> = new Map()): string {\n const statements: string[] = [];\n const mappedExpression = (expression: string, offset: number, expressionLocals = locals): string =>\n markSource(rewriteLocals(expression, expressionLocals), offset, expression.length);\n for (const { id, expression, offset } of bindings.texts) {\n const point = locate(context.source, offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (text ${id})`;\n const source = hot ? `, { file: ${quote(context.filename)}, line: ${point.line}, column: ${point.column}, expression: ${quote(expression)}, kind: \"text\" }` : \"\";\n statements.push(`cleanups.push(__meeko.bindText(__scope, ${id}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);\n }\n for (const { id, name, expression, offset } of bindings.attributes) {\n const point = locate(context.source, offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (attribute ${name})`;\n const source = hot ? `, { file: ${quote(context.filename)}, line: ${point.line}, column: ${point.column}, expression: ${quote(expression)}, kind: \"attribute\" }` : \"\";\n statements.push(`cleanups.push(__meeko.bindAttribute(__scope, ${id}, ${quote(name)}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);\n }\n for (const { id, name, expression, offset } of bindings.events) {\n const eventType = [\"click\", \"input\", \"change\", \"submit\", \"keydown\", \"keyup\", \"focus\", \"blur\"].includes(name)\n ? `GlobalEventHandlersEventMap[${quote(name)}]` : \"Event\";\n const handler = markSource(`((__meeko_handler: (event: ${eventType}) => void) => __meeko_handler(event as ${eventType}))(${mappedExpression(expression, offset)});`, offset, expression.length);\n statements.push(`{\n cleanups.push(__meeko.bindEvent(__scope, ${id}, ${quote(name)}, (event: Event) => {\n ${handler}\n }));\n }`);\n }\n const componentStatements: string[] = [];\n for (const entry of bindings.components) {\n const point = locate(context.source, entry.offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (component ${entry.reference})`;\n const props = entry.props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${mappedExpression(prop.expression, prop.offset)}`);\n const object = markSource(`{ ${props.join(\", \")} }`, entry.offset, 1);\n componentStatements.push(`cleanups.push(__meeko.bindComponent(__scope, ${entry.id}, () => ${mappedExpression(entry.reference, entry.referenceOffset)}, () => (${object}), ${quote(location)}));`);\n }\n statements.unshift(...componentStatements);\n for (const entry of bindings.regions) {\n if (entry.kind === \"condition\") {\n statements.push(`cleanups.push(__meeko.bindIf(__scope, ${entry.id}, () => ${mappedExpression(entry.expression, entry.offset)}, () => ${rewriteLocals(entry.render, locals)}, (__scope) => { ${hydrationBody(entry.bindings, context, hot, locals)} }));`);\n } else {\n const outerLocals = new Map(locals);\n outerLocals.delete(entry.itemName);\n outerLocals.delete(entry.indexName);\n const innerLocals = new Map(locals);\n innerLocals.set(entry.itemName, \"__meeko_item.value\");\n innerLocals.set(entry.indexName, \"__meeko_index.value\");\n const innerHydration = hydrationBody(entry.bindings, context, hot, innerLocals);\n // El callback generado sólo usa la señal de índice si aparece en su hidratación.\n const trackIndex = innerHydration.includes(\"__meeko_index.value\");\n statements.push(`cleanups.push(__meeko.bindFor(__scope, ${entry.id}, () => ${mappedExpression(entry.expression, entry.offset)}, (${entry.itemName}, ${entry.indexName}) => ${mappedExpression(entry.key, entry.keyOffset, outerLocals)}, (${entry.itemName}, ${entry.indexName}) => ${rewriteLocals(entry.render, outerLocals)}, (__meeko_item, __meeko_index, __scope) => { ${innerHydration} }, ${trackIndex}));`);\n }\n }\n return `const cleanups: Array<() => void> = [];\n try {\n ${statements.join(\"\\n\")}\n return () => { for (const cleanup of cleanups.reverse()) cleanup(); };\n } catch (error) { for (const cleanup of cleanups.reverse()) cleanup(); throw error; }`;\n}\n\n/** Compila una parte tipada de .meeko para SSR e hidratación del HTML existente. */\nexport function compile(source: string, filename = \"anonymous.meeko\", options: CompileOptions = {}): CompileResult {\n const { script, template, style } = parseSfc(source, filename);\n const componentId = createHash(\"sha256\").update(filename).digest(\"hex\").slice(0, 12);\n const scopeAttribute = style?.attributes.some((attribute) => attribute.name === \"scoped\")\n ? `data-meeko-s-${createHash(\"sha256\").update(filename).digest(\"hex\").slice(0, 8)}`\n : undefined;\n let css: string;\n try {\n css = scopeAttribute ? scopeCss(style?.content ?? \"\", scopeAttribute) : style?.content ?? \"\";\n } catch (error) {\n if (error instanceof postcss.CssSyntaxError && style && error.line !== undefined && error.column !== undefined) {\n const lines = style.content.split(/\\r\\n|\\r|\\n/);\n const prior = lines.slice(0, error.line - 1).reduce((total, line) => total + line.length + 1, 0);\n throw compileError(source, filename, \"MEEK019\", error.reason, style.contentStart + prior + error.column - 1);\n }\n throw error;\n }\n const parsed = parseTemplate(source, template, filename);\n const bindingsForTemplate = emptyBindings();\n const context: TemplateContext = { source, filename, templateOffset: template.contentStart, scopeAttribute, nextText: 0, nextEvent: 0, nextAttribute: 0, nextRegion: 0 };\n const html = renderNode(parsed, bindingsForTemplate, context);\n const scriptParts = compileScript(script, source, filename);\n const bindings = scriptParts.names.join(\", \");\n const hot = options.hot === true;\n const setupCode = `const __bindings = __setup(__inputProps);\\n__meeko.restoreSignals(__bindings, __state);\\nconst { ${bindings} } = __bindings;`;\n const releaseCode = hot\n ? `const __cleanup = () => { __release(); dispose(); };\\nconst __component = { renderToString, hydrate, hydrateScope, css };\\nconst __snapshot = () => __meeko.snapshotSignals(__bindings);\\nconst __devtoolsStop = __meeko.registerDevtoolsInstance({ componentId: __hotId, name: ${quote(basename(filename, \".meeko\"))}, file: ${quote(filename)}, scope: __scope, props: __inputProps, bindings: __bindings });\\nconst __dispose = () => { try { __cleanup(); } finally { __devtoolsStop(); } };\\nconst __stop = __hotRoot ? __meeko.registerHotInstance(__hotId, __hotRoot, __inputProps, __component, __snapshot, __dispose) : __scope.start ? __meeko.registerHotScope(__hotId, __scope, __inputProps, __component, __snapshot, __dispose) : __dispose;\\nreturn __meeko.withStateSnapshot(__stop, __snapshot);`\n : `return __meeko.withStateSnapshot(() => { __release(); dispose(); }, () => __meeko.snapshotSignals(__bindings));`;\n const hotIdExport = hot ? `export const __hotId = ${quote(componentId)};\\n` : \"\";\n const stateParam = \", __state?: __meeko.HotState\";\n const scopeHotRootParam = hot ? \", __hotRoot?: Element\" : \"\";\n const scopeForward = hot ? \"__scope, __inputProps, __state, root\" : \"__scope, __inputProps, __state\";\n const propsType = scriptParts.propsTypeOffset === undefined ? scriptParts.propsType : markSource(scriptParts.propsType, scriptParts.propsTypeOffset);\n const markedCode = `// Generated by Meeko. Edit the .meeko source instead.\\nimport * as __meeko from \"@meekojs/meeko/internal\";\\n${scriptParts.imports.join(\"\\n\")}\\n${scriptParts.types.join(\"\\n\")}\\nfunction __setup(__props: ${propsType}) {\\n${scriptParts.setup.join(\"\\n\")}\\nreturn { ${bindings} };\\n}\\nexport type ComponentProps = ${propsType};\\nexport const css = ${quote(css)};\\n${hotIdExport}export function renderWithState(__inputProps: ComponentProps): { html: string; state: __meeko.HotState } {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = true;\\nconst __bindings = __setup(__inputProps);\\nconst { ${bindings} } = __bindings;\\ntry {\\nconst html = ${html};\\nconst state = __meeko.snapshotSignals(__bindings);\\n__meeko.serializeJson(state);\\nreturn { html, state };\\n} finally { dispose(); }\\n});\\n}\\nexport function renderToString(__inputProps: ComponentProps${stateParam}): string {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = false;\\n${setupCode}\\ntry { return ${html}; } finally { dispose(); }\\n});\\n}\\nexport function hydrate(root: Element, __inputProps: ComponentProps${stateParam}): () => void {\\nconst __scope: __meeko.DomScope = { root };\\nreturn hydrateScope(${scopeForward});\\n}\\nexport function hydrateScope(__scope: __meeko.DomScope, __inputProps: ComponentProps${stateParam}${scopeHotRootParam}): () => void {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = false;\\n${setupCode}\\nconst __release = (() => { ${hydrationBody(bindingsForTemplate, context, hot)} })();\\n${releaseCode}\\n});\\n}\\n`;\n const { code, mappings } = extractSourceMappings(markedCode);\n return { code, css, mappings };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { basename } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport postcss from \"postcss\";\nimport selectorParser from \"postcss-selector-parser\";\nimport { extractSourceMappings, markSource } from \"./compiler/mapping.js\";\nimport type { SourceMapping } from \"./compiler/mapping.js\";\nimport { analyzePropsDefaults, PropsDefaultsError } from \"./compiler/props.js\";\nimport { compileError, locate, parseSfc } from \"./compiler/sfc.js\";\nimport type { SfcSection } from \"./compiler/sfc.js\";\nimport { parseTemplate } from \"./compiler/template.js\";\nimport { templateEventType } from \"./compiler/events.js\";\nimport type { TemplateNode } from \"./compiler/template.js\";\n\ninterface DynamicText {\n id: number;\n expression: string;\n offset: number;\n}\n\ninterface EventBinding {\n id: number;\n name: string;\n expression: string;\n offset: number;\n}\n\ninterface AttributeBinding {\n id: number;\n name: string;\n expression: string;\n offset: number;\n}\n\ninterface ConditionBinding {\n kind: \"condition\";\n id: number;\n expression: string;\n offset: number;\n render: string;\n bindings: TemplateBindings;\n}\n\ninterface ListBinding {\n kind: \"list\";\n id: number;\n expression: string;\n offset: number;\n key: string;\n keyOffset: number;\n itemName: string;\n indexName: string;\n render: string;\n bindings: TemplateBindings;\n}\n\ninterface ComponentBinding {\n id: number;\n reference: string;\n referenceOffset: number;\n props: Array<{ name: string; nameOffset: number; expression: string; offset: number }>;\n offset: number;\n}\n\ninterface TemplateBindings {\n texts: DynamicText[];\n events: EventBinding[];\n attributes: AttributeBinding[];\n components: ComponentBinding[];\n regions: Array<ConditionBinding | ListBinding>;\n}\n\ninterface TemplateContext {\n source: string;\n filename: string;\n templateOffset: number;\n scopeAttribute: string | undefined;\n nextText: number;\n nextEvent: number;\n nextAttribute: number;\n nextRegion: number;\n}\n\nfunction emptyBindings(): TemplateBindings {\n return { texts: [], events: [], attributes: [], components: [], regions: [] };\n}\n\n/** Resultado del compilador de un componente .meeko. */\nexport interface CompileResult {\n code: string;\n css: string;\n mappings: readonly SourceMapping[];\n}\n\n/** Opciones de generación; HMR se incluye solo en módulos de desarrollo. */\nexport interface CompileOptions {\n hot?: boolean;\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction validateExpression(expression: string, source: string, filename: string, offset: number): void {\n const prefix = \"const __check = (\";\n const parsed = ts.createSourceFile(filename, `${prefix}${expression});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS) as ts.SourceFile & { parseDiagnostics: readonly ts.DiagnosticWithLocation[] };\n const error = parsed.parseDiagnostics[0];\n if (error) {\n const position = Math.max(0, Math.min(expression.length, (error.start ?? prefix.length) - prefix.length));\n throw compileError(source, filename, \"MEEK020\", ts.flattenDiagnosticMessageText(error.messageText, \"\\n\"), offset + position);\n }\n}\n\nfunction attributeValueOffset(node: TemplateNode, name: string, context: TemplateContext): number {\n const position = node.sourceCodeLocation?.attrs?.[name];\n if (!position) return context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0);\n const raw = context.source.slice(context.templateOffset + position.startOffset, context.templateOffset + position.endOffset);\n const equals = raw.indexOf(\"=\");\n if (equals < 0) return context.templateOffset + position.startOffset;\n const after = raw.slice(equals + 1);\n const whitespace = after.length - after.trimStart().length;\n const quoteStart = equals + 1 + whitespace;\n const quoted = raw[quoteStart] === '\"' || raw[quoteStart] === \"'\";\n return context.templateOffset + position.startOffset + quoteStart + (quoted ? 1 : 0);\n}\n\nfunction rewriteLocals(expression: string, locals: ReadonlyMap<string, string>): string {\n if (locals.size === 0) return expression;\n const prefix = \"const __value = (\";\n const file = ts.createSourceFile(\"template-expression.ts\", `${prefix}${expression});`, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: Array<{ start: number; end: number; text: string }> = [];\n function isShadowed(node: ts.Identifier): boolean {\n for (let parent = node.parent; parent; parent = parent.parent) {\n if ((ts.isArrowFunction(parent) || ts.isFunctionExpression(parent)) && parent.parameters.some((parameter) => ts.isIdentifier(parameter.name) && parameter.name.text === node.text)) return true;\n if (ts.isSourceFile(parent)) break;\n }\n return false;\n }\n function visit(node: ts.Node): void {\n if (ts.isIdentifier(node)) {\n const replacement = locals.get(node.text);\n const parent = node.parent;\n if (replacement && parent && !isShadowed(node)\n && !(ts.isPropertyAccessExpression(parent) && parent.name === node)\n && !(ts.isPropertyAssignment(parent) && parent.name === node)\n && !(ts.isParameter(parent) && parent.name === node)\n && !(ts.isVariableDeclaration(parent) && parent.name === node)) {\n const shorthand = ts.isShorthandPropertyAssignment(parent) && parent.name === node;\n changes.push({ start: node.getStart(file) - prefix.length, end: node.getEnd() - prefix.length, text: shorthand ? `${node.text}: (${replacement})` : `(${replacement})` });\n }\n }\n ts.forEachChild(node, visit);\n }\n visit(file);\n let result = expression;\n for (const change of changes.reverse()) {\n if (change.start >= 0 && change.end <= expression.length) result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction textParts(value: string, bindings: TemplateBindings, context: TemplateContext, offset: number): string[] {\n const parts: string[] = [];\n const pattern = /\\{([^{}]+)\\}/g;\n let cursor = 0;\n for (const match of value.matchAll(pattern)) {\n const index = match.index;\n const staticPart = value.slice(cursor, index);\n if (staticPart) parts.push(`__meeko.escapeHtml(${quote(staticPart)})`);\n const rawExpression = match[1] ?? \"\";\n const expression = rawExpression.trim();\n if (!expression) throw compileError(context.source, context.filename, \"MEEK009\", \"Empty template expression\", offset + index);\n validateExpression(expression, context.source, context.filename, offset + index + 1 + rawExpression.indexOf(expression));\n const id = context.nextText++;\n const expressionOffset = offset + index + 1 + rawExpression.indexOf(expression);\n bindings.texts.push({ id, expression, offset: expressionOffset });\n parts.push(`${quote(`<!--meeko:text:${id}-->`)} + __meeko.escapeHtml(${markSource(expression, expressionOffset)}) + ${quote(`<!--/meeko:text:${id}-->`)}`);\n cursor = index + match[0].length;\n }\n const tail = value.slice(cursor);\n if (tail.includes(\"{\")) throw compileError(context.source, context.filename, \"MEEK010\", \"Unclosed template expression\", offset + cursor + tail.indexOf(\"{\"));\n if (tail) parts.push(`__meeko.escapeHtml(${quote(tail)})`);\n return parts;\n}\n\nfunction renderNode(node: TemplateNode, bindings: TemplateBindings, context: TemplateContext): string {\n if (node.nodeName === \"#text\") {\n return textParts(node.value ?? \"\", bindings, context, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0)).join(\" + \") || quote(\"\");\n }\n if (node.nodeName === \"#comment\") return quote(`<!--${node.value ?? \"\"}-->`);\n if (!node.tagName) return (node.childNodes ?? []).map((child) => renderNode(child, bindings, context)).join(\" + \") || quote(\"\");\n\n const attrsList = node.attrs ?? [];\n const position = context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0);\n const condition = attrsList.find((attribute) => attribute.name === \"if:when\");\n const list = attrsList.find((attribute) => attribute.name === \"each:of\");\n if (condition && list) throw compileError(context.source, context.filename, \"MEEK021\", \"A node cannot have both if:when and each:of\", position);\n if (condition || list) {\n const inner = emptyBindings();\n const excluded = new Set(condition ? [\"if:when\"] : [\"each:of\", \"each:as\", \"each:key\", \"each:index\"]);\n const clone: TemplateNode = { ...node, attrs: attrsList.filter((attribute) => !excluded.has(attribute.name)) };\n const html = renderNodeContent(clone, inner, context);\n const id = context.nextRegion++;\n if (condition) {\n const offset = attributeValueOffset(node, \"if:when\", context);\n validateExpression(condition.value, context.source, context.filename, offset);\n bindings.regions.push({ kind: \"condition\", id, expression: condition.value, offset, render: html, bindings: inner });\n return `__meeko.renderIf(${id}, ${markSource(condition.value, offset)}, () => ${html})`;\n }\n const itemName = attrsList.find((attribute) => attribute.name === \"each:as\")?.value;\n const key = attrsList.find((attribute) => attribute.name === \"each:key\")?.value;\n const indexName = attrsList.find((attribute) => attribute.name === \"each:index\")?.value ?? \"index\";\n if (!itemName || !/^[a-zA-Z_$][\\w$]*$/.test(itemName) || itemName.startsWith(\"__\") || !/^[a-zA-Z_$][\\w$]*$/.test(indexName) || indexName.startsWith(\"__\") || itemName === indexName) {\n throw compileError(context.source, context.filename, \"MEEK022\", \"A list needs valid, distinct each:as and each:index identifiers\", position);\n }\n if (!key) throw compileError(context.source, context.filename, \"MEEK023\", \"A list requires each:key\", position);\n const offset = attributeValueOffset(node, \"each:of\", context);\n const keyOffset = attributeValueOffset(node, \"each:key\", context);\n validateExpression(list!.value, context.source, context.filename, offset);\n validateExpression(key, context.source, context.filename, keyOffset);\n bindings.regions.push({ kind: \"list\", id, expression: list!.value, offset, key, keyOffset, itemName, indexName, render: html, bindings: inner });\n return `__meeko.renderFor(${id}, ${markSource(list!.value, offset)}, (${itemName}, ${indexName}) => ${markSource(key, keyOffset)}, (${itemName}, ${indexName}) => ${html})`;\n }\n if (attrsList.some((attribute) => attribute.name.startsWith(\"each:\") || attribute.name.startsWith(\"if:\"))) {\n throw compileError(context.source, context.filename, \"MEEK024\", \"Incomplete template directive\", position);\n }\n return renderNodeContent(node, bindings, context);\n}\n\nfunction renderNodeContent(node: TemplateNode, bindings: TemplateBindings, context: TemplateContext): string {\n if (node.tagName === \"template\") {\n return (node.content?.childNodes ?? []).map((child) => renderNode(child, bindings, context)).join(\" + \") || quote(\"\");\n }\n if (node.tagName === \"component\") {\n const position = node.start;\n const referenceAttribute = node.attrs?.find((attribute) => attribute.name === \"is\");\n const reference = referenceAttribute?.value ?? \"\";\n if (!reference.trim()) throw compileError(context.source, context.filename, \"MEEK030\", \"A component requires is=\\\"expression\\\"\", position);\n const referenceOffset = attributeValueOffset(node, \"is\", context);\n validateExpression(reference, context.source, context.filename, referenceOffset);\n if ((node.childNodes ?? []).some((child) => child.nodeName !== \"#text\" || Boolean(child.value?.trim()))) {\n throw compileError(context.source, context.filename, \"MEEK031\", \"Component children are not supported; close the tag without content\", position);\n }\n const props: ComponentBinding[\"props\"] = [];\n for (const attribute of node.attrs ?? []) {\n if (attribute.name === \"is\") continue;\n const rawName = /^[^\\s=]+/.exec(context.source.slice(attribute.start, attribute.end))?.[0] ?? attribute.name;\n if (!rawName.startsWith(\"bind:\") || !/^[a-zA-Z_$][\\w$]*$/.test(rawName.slice(5))) {\n throw compileError(context.source, context.filename, \"MEEK032\", \"Component props must use bind:prop=\\\"expression\\\"\", attribute.start);\n }\n const name = rawName.slice(5);\n const offset = attributeValueOffset(node, attribute.name, context);\n validateExpression(attribute.value, context.source, context.filename, offset);\n props.push({ name, nameOffset: attribute.start + 5, expression: attribute.value, offset });\n }\n const id = context.nextRegion++;\n bindings.components.push({ id, reference, referenceOffset, props, offset: position });\n const mappedProps = props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${markSource(prop.expression, prop.offset)}`);\n const object = markSource(`{ ${mappedProps.join(\", \")} }`, position, node.end - position);\n return `__meeko.renderComponent(${id}, ${markSource(reference, referenceOffset)}, ${object}, __meeko_transfer)`;\n }\n const tag = node.tagName!;\n\n const attrs: Array<{ kind: \"static\"; value: string } | { kind: \"dynamic\"; expression: string }> = [];\n for (const attr of node.attrs ?? []) {\n if (attr.name.startsWith(\"on:\")) {\n const name = attr.name.slice(3);\n if (!/^[a-z]+$/.test(name)) throw compileError(context.source, context.filename, \"MEEK011\", `Invalid event name: ${name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n const id = context.nextEvent++;\n const offset = attributeValueOffset(node, attr.name, context);\n validateExpression(attr.value, context.source, context.filename, offset);\n bindings.events.push({ id, name, expression: attr.value, offset });\n attrs.push({ kind: \"static\", value: ` data-meeko-e-${id}=\"\"` });\n } else if (attr.name.startsWith(\"bind:\")) {\n const name = attr.name.slice(5);\n if (!/^[a-z][a-z0-9:.-]*$/.test(name) || name.startsWith(\"on\")) {\n throw compileError(context.source, context.filename, \"MEEK012\", `Invalid dynamic attribute: ${name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n }\n const offset = attributeValueOffset(node, attr.name, context);\n validateExpression(attr.value, context.source, context.filename, offset);\n const id = context.nextAttribute++;\n bindings.attributes.push({ id, name, expression: attr.value, offset });\n attrs.push({ kind: \"static\", value: ` data-meeko-a-${id}=\"\"` });\n attrs.push({ kind: \"dynamic\", expression: `__meeko.renderAttribute(${quote(name)}, ${markSource(attr.value, offset)})` });\n } else if (attr.name.startsWith(\":\")) {\n throw compileError(context.source, context.filename, \"MEEK012\", `Unsupported template directive: ${attr.name}`, context.templateOffset + (node.sourceCodeLocation?.startOffset ?? 0));\n } else {\n attrs.push({ kind: \"static\", value: ` ${attr.name}=\"${escapeAttribute(attr.value)}\"` });\n }\n }\n if (context.scopeAttribute) attrs.push({ kind: \"static\", value: ` ${context.scopeAttribute}=\"\"` });\n const openingParts: string[] = [quote(`<${tag}`)];\n for (const attr of attrs) {\n if (attr.kind === \"dynamic\") openingParts.push(attr.expression);\n else openingParts.push(quote(attr.value));\n }\n openingParts.push(quote(\">\"));\n const opening = openingParts.join(\" + \");\n const voidElements = new Set([\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\n if (voidElements.has(tag)) return opening;\n const children = (node.childNodes ?? []).map((child) => renderNode(child, bindings, context));\n return [opening, ...children, quote(`</${tag}>`)].join(\" + \");\n}\n\nfunction escapeAttribute(value: string): string {\n return value.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"<\", \"<\");\n}\n\nfunction scopeCss(css: string, scopeAttribute: string): string {\n const root = postcss.parse(css);\n root.walkRules((rule) => {\n let parent: postcss.Node | undefined = rule.parent;\n while (parent) {\n if (parent.type === \"atrule\" && /keyframes$/i.test((parent as postcss.AtRule).name)) return;\n parent = parent.parent;\n }\n if (rule.selector.includes(\":global\")) throw rule.error(\":global is not supported in scoped styles yet\", { index: rule.selector.indexOf(\":global\") });\n rule.selector = selectorParser((selectors) => {\n selectors.each((selector) => {\n const pseudoElement = selector.nodes.find((node) => node.type === \"pseudo\" && node.value.startsWith(\"::\"));\n const attribute = selectorParser.attribute({ attribute: scopeAttribute, value: undefined, raws: {} });\n if (pseudoElement) selector.insertBefore(pseudoElement, attribute);\n else selector.append(attribute);\n });\n }).processSync(rule.selector);\n });\n return root.toString();\n}\n\nfunction compileScript(section: SfcSection, source: string, filename: string): { imports: string[]; types: string[]; setup: string[]; names: string[]; propsType: string; propsTypeOffset: number | undefined; defaults?: { expression: string; offset: number; keys: readonly string[] } } {\n const file = ts.createSourceFile(filename, section.content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS) as ts.SourceFile & { parseDiagnostics: readonly ts.DiagnosticWithLocation[] };\n const syntaxError = file.parseDiagnostics[0];\n if (syntaxError) {\n const message = ts.flattenDiagnosticMessageText(syntaxError.messageText, \"\\n\");\n throw compileError(source, filename, \"MEEK013\", message, section.contentStart + (syntaxError.start ?? 0));\n }\n const imports: string[] = [];\n const types: string[] = [];\n const setup: string[] = [];\n const names: string[] = [];\n let propsType: string | undefined;\n let propsTypeOffset: number | undefined;\n let defaults: { expression: string; offset: number; keys: readonly string[] } | undefined;\n for (const statement of file.statements) {\n if (ts.isImportDeclaration(statement)) {\n imports.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) {\n types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isExportDeclaration(statement) && (statement.isTypeOnly ||\n (statement.exportClause && ts.isNamedExports(statement.exportClause) && statement.exportClause.elements.every((element) => element.isTypeOnly)))) {\n types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isVariableStatement(statement)) {\n if (statement.declarationList.declarations.length !== 1) throw compileError(source, filename, \"MEEK014\", \"Declare one variable per statement in .meeko scripts\", section.contentStart + statement.getStart(file));\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name)) throw compileError(source, filename, \"MEEK015\", \"Only simple variable declarations are supported in .meeko scripts\", section.contentStart + declaration.getStart(file));\n const name = declaration.name.text;\n names.push(name);\n if (declaration.initializer && ts.isCallExpression(declaration.initializer) && declaration.initializer.expression.getText(file) === \"defineProps\") {\n if (propsType) throw compileError(source, filename, \"MEEK016\", \"defineProps must appear once in its own declaration\", section.contentStart + declaration.getStart(file));\n const typeArgument = declaration.initializer.typeArguments?.[0];\n propsType = typeArgument?.getText(file);\n if (!propsType) throw compileError(source, filename, \"MEEK017\", \"defineProps requires a type argument\", section.contentStart + declaration.getStart(file));\n propsTypeOffset = section.contentStart + typeArgument!.getStart(file);\n try {\n const analyzed = analyzePropsDefaults(declaration.initializer);\n if (analyzed) defaults = {\n expression: analyzed.argument.getText(file),\n offset: section.contentStart + analyzed.argument.getStart(file),\n keys: analyzed.keys,\n };\n } catch (error) {\n if (!(error instanceof PropsDefaultsError)) throw error;\n throw compileError(source, filename, error.code, error.message, section.contentStart + error.node.getStart(file));\n }\n setup.push(`const ${name}: ${defaults ? \"__MeekoResolvedProps\" : markSource(propsType, propsTypeOffset)} = __props;`);\n } else {\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n }\n }\n continue;\n }\n if (ts.isFunctionDeclaration(statement) && statement.name) {\n names.push(statement.name.text);\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n if (ts.isExpressionStatement(statement) && ts.isCallExpression(statement.expression)) {\n setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));\n continue;\n }\n throw compileError(source, filename, \"MEEK018\", `Unsupported top-level script statement: ${ts.SyntaxKind[statement.kind]}`, section.contentStart + statement.getStart(file));\n }\n return { imports, types, setup, names, propsType: propsType ?? \"Record<string, never>\", propsTypeOffset, ...(defaults ? { defaults } : {}) };\n}\n\nfunction hydrationBody(bindings: TemplateBindings, context: TemplateContext, hot: boolean, locals: ReadonlyMap<string, string> = new Map()): string {\n const statements: string[] = [];\n const mappedExpression = (expression: string, offset: number, expressionLocals = locals): string =>\n markSource(rewriteLocals(expression, expressionLocals), offset, expression.length);\n for (const { id, expression, offset } of bindings.texts) {\n const point = locate(context.source, offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (text ${id})`;\n const source = hot ? `, { file: ${quote(context.filename)}, line: ${point.line}, column: ${point.column}, expression: ${quote(expression)}, kind: \"text\" }` : \"\";\n statements.push(`cleanups.push(__meeko.bindText(__scope, ${id}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);\n }\n for (const { id, name, expression, offset } of bindings.attributes) {\n const point = locate(context.source, offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (attribute ${name})`;\n const source = hot ? `, { file: ${quote(context.filename)}, line: ${point.line}, column: ${point.column}, expression: ${quote(expression)}, kind: \"attribute\" }` : \"\";\n statements.push(`cleanups.push(__meeko.bindAttribute(__scope, ${id}, ${quote(name)}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);\n }\n for (const { id, name, expression, offset } of bindings.events) {\n const eventType = templateEventType(name);\n const handler = markSource(`((__meeko_handler: (event: ${eventType}) => unknown) => __meeko_handler(event as ${eventType}))(${mappedExpression(expression, offset)});`, offset, expression.length);\n statements.push(`{\n cleanups.push(__meeko.bindEvent(__scope, ${id}, ${quote(name)}, (event: Event) => {\n return ${handler}\n }));\n }`);\n }\n const componentStatements: string[] = [];\n for (const entry of bindings.components) {\n const point = locate(context.source, entry.offset);\n const location = `${basename(context.filename)}:${point.line}:${point.column} (component ${entry.reference})`;\n const props = entry.props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${mappedExpression(prop.expression, prop.offset)}`);\n const object = markSource(`{ ${props.join(\", \")} }`, entry.offset, 1);\n componentStatements.push(`cleanups.push(__meeko.bindComponent(__scope, ${entry.id}, () => ${mappedExpression(entry.reference, entry.referenceOffset)}, () => (${object}), ${quote(location)}));`);\n }\n statements.unshift(...componentStatements);\n for (const entry of bindings.regions) {\n if (entry.kind === \"condition\") {\n statements.push(`cleanups.push(__meeko.bindIf(__scope, ${entry.id}, () => ${mappedExpression(entry.expression, entry.offset)}, () => ${rewriteLocals(entry.render, locals)}, (__scope) => { ${hydrationBody(entry.bindings, context, hot, locals)} }));`);\n } else {\n const outerLocals = new Map(locals);\n outerLocals.delete(entry.itemName);\n outerLocals.delete(entry.indexName);\n const innerLocals = new Map(locals);\n innerLocals.set(entry.itemName, \"__meeko_item.value\");\n innerLocals.set(entry.indexName, \"__meeko_index.value\");\n const innerHydration = hydrationBody(entry.bindings, context, hot, innerLocals);\n // El callback generado sólo usa la señal de índice si aparece en su hidratación.\n const trackIndex = innerHydration.includes(\"__meeko_index.value\");\n statements.push(`cleanups.push(__meeko.bindFor(__scope, ${entry.id}, () => ${mappedExpression(entry.expression, entry.offset)}, (${entry.itemName}, ${entry.indexName}) => ${mappedExpression(entry.key, entry.keyOffset, outerLocals)}, (${entry.itemName}, ${entry.indexName}) => ${rewriteLocals(entry.render, outerLocals)}, (__meeko_item, __meeko_index, __scope) => { ${innerHydration} }, ${trackIndex}));`);\n }\n }\n return `const cleanups: Array<() => void> = [];\n try {\n ${statements.join(\"\\n\")}\n return () => __meeko.releaseAll(cleanups);\n } catch (error) { __meeko.releaseAll(cleanups, { error }); }`;\n}\n\n/** Compila una parte tipada de .meeko para SSR e hidratación del HTML existente. */\nexport function compile(source: string, filename = \"anonymous.meeko\", options: CompileOptions = {}): CompileResult {\n const { script, template, style } = parseSfc(source, filename);\n const componentId = createHash(\"sha256\").update(filename).digest(\"hex\").slice(0, 12);\n const scopeAttribute = style?.attributes.some((attribute) => attribute.name === \"scoped\")\n ? `data-meeko-s-${createHash(\"sha256\").update(filename).digest(\"hex\").slice(0, 8)}`\n : undefined;\n let css: string;\n try {\n css = scopeAttribute ? scopeCss(style?.content ?? \"\", scopeAttribute) : style?.content ?? \"\";\n } catch (error) {\n if (error instanceof postcss.CssSyntaxError && style && error.line !== undefined && error.column !== undefined) {\n const lines = style.content.split(/\\r\\n|\\r|\\n/);\n const prior = lines.slice(0, error.line - 1).reduce((total, line) => total + line.length + 1, 0);\n throw compileError(source, filename, \"MEEK019\", error.reason, style.contentStart + prior + error.column - 1);\n }\n throw error;\n }\n const parsed = parseTemplate(source, template, filename);\n const bindingsForTemplate = emptyBindings();\n const context: TemplateContext = { source, filename, templateOffset: template.contentStart, scopeAttribute, nextText: 0, nextEvent: 0, nextAttribute: 0, nextRegion: 0 };\n const html = renderNode(parsed, bindingsForTemplate, context);\n const scriptParts = compileScript(script, source, filename);\n const bindings = scriptParts.names.join(\", \");\n const hot = options.hot === true;\n const resolvedProps = scriptParts.defaults ? \"__meeko_resolveProps(__inputProps)\" : \"__inputProps\";\n const setupCode = `const __bindings = __setup(${resolvedProps});\\n__meeko.restoreSignals(__bindings, __state);\\nconst { ${bindings} } = __bindings;`;\n const releaseCode = hot\n ? `const __cleanup = () => __meeko.finishWithCleanup(__release, dispose);\\nconst __component = { renderToString, hydrate, hydrateScope, css };\\nconst __snapshot = () => __meeko.snapshotSignals(__bindings);\\nconst __devtoolsStop = __meeko.registerDevtoolsInstance({ componentId: __hotId, name: ${quote(basename(filename, \".meeko\"))}, file: ${quote(filename)}, scope: __scope, props: __inputProps, bindings: __bindings });\\nconst __dispose = () => __meeko.finishWithCleanup(__cleanup, __devtoolsStop);\\nconst __stop = __hotRoot ? __meeko.registerHotInstance(__hotId, __hotRoot, __inputProps, __component, __snapshot, __dispose) : __scope.start ? __meeko.registerHotScope(__hotId, __scope, __inputProps, __component, __snapshot, __dispose) : __dispose;\\nreturn __meeko.withStateSnapshot(__stop, __snapshot);`\n : `return __meeko.withStateSnapshot(() => __meeko.finishWithCleanup(__release, dispose), () => __meeko.snapshotSignals(__bindings));`;\n const hotIdExport = hot ? `export const __hotId = ${quote(componentId)};\\n` : \"\";\n const stateParam = \", __state?: __meeko.HotState\";\n const scopeHotRootParam = hot ? \", __hotRoot?: Element\" : \"\";\n const scopeForward = hot ? \"__scope, __inputProps, __state, root\" : \"__scope, __inputProps, __state\";\n const propsType = scriptParts.propsTypeOffset === undefined ? scriptParts.propsType : markSource(scriptParts.propsType, scriptParts.propsTypeOffset);\n const defaults = scriptParts.defaults;\n const defaultKeys = defaults?.keys.map(quote).join(\" | \") || \"never\";\n const propsDeclaration = defaults ? `type __MeekoDeclaredProps = ${propsType};\ntype __MeekoDefaultKeys = Extract<${defaultKeys}, keyof __MeekoDeclaredProps>;\ntype __MeekoDefaultPick = Pick<__MeekoDeclaredProps, __MeekoDefaultKeys>;\ntype __MeekoDefaultValues = { [K in keyof __MeekoDefaultPick]-?: Exclude<__MeekoDefaultPick[K], undefined> };\ntype __MeekoResolvedPropsOf<T> = T extends unknown ? Omit<T, __MeekoDefaultKeys> & __MeekoDefaultValues : never;\ntype __MeekoResolvedProps = __MeekoResolvedPropsOf<__MeekoDeclaredProps>;\ntype __MeekoInputPropsOf<T> = T extends unknown ? Omit<T, __MeekoDefaultKeys> & { [K in keyof __MeekoDefaultPick]?: __MeekoDefaultPick[K] | undefined } : never;\nexport type ComponentProps = __MeekoInputPropsOf<__MeekoDeclaredProps>;\nfunction __meeko_defaultProps() {\n return (${markSource(defaults.expression, defaults.offset)} satisfies Partial<__MeekoDeclaredProps> & __MeekoDefaultValues & Record<Exclude<${defaultKeys}, keyof __MeekoDeclaredProps>, never>);\n}\nfunction __meeko_resolveProps(input: ComponentProps): __MeekoResolvedProps {\n const defaults = __meeko_defaultProps();\n const resolved = { ...defaults, ...input } as __MeekoResolvedProps;\n const mutable = resolved as unknown as Record<string, unknown>;\n for (const key of Object.keys(defaults)) {\n if (mutable[key] === undefined) mutable[key] = defaults[key as keyof typeof defaults];\n }\n return resolved;\n}` : `export type ComponentProps = ${propsType};`;\n const markedCode = `// Generated by Meeko. Edit the .meeko source instead.\\nimport * as __meeko from \"@meekojs/meeko/internal\";\\n${scriptParts.imports.join(\"\\n\")}\\n${scriptParts.types.join(\"\\n\")}\\n${propsDeclaration}\\nfunction __setup(__props: ${defaults ? \"__MeekoResolvedProps\" : propsType}) {\\n${scriptParts.setup.join(\"\\n\")}\\nreturn { ${bindings} };\\n}\\nexport const css = ${quote(css)};\\n${hotIdExport}export function renderWithState(__inputProps: ComponentProps): { html: string; state: __meeko.HotState } {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = true;\\nconst __bindings = __setup(${resolvedProps});\\nconst { ${bindings} } = __bindings;\\nreturn __meeko.finishWithCleanup(() => {\\nconst html = ${html};\\nconst state = __meeko.snapshotSignals(__bindings);\\n__meeko.serializeJson(state);\\nreturn { html, state };\\n}, dispose);\\n});\\n}\\nexport function renderToString(__inputProps: ComponentProps${stateParam}): string {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = false;\\n${setupCode}\\nreturn __meeko.finishWithCleanup(() => ${html}, dispose);\\n});\\n}\\nexport function hydrate(root: Element, __inputProps: ComponentProps${stateParam}): () => void {\\nconst __scope: __meeko.DomScope = { root };\\nreturn hydrateScope(${scopeForward});\\n}\\nexport function hydrateScope(__scope: __meeko.DomScope, __inputProps: ComponentProps${stateParam}${scopeHotRootParam}): () => void {\\nreturn __meeko.createRoot((dispose) => {\\nconst __meeko_transfer = false;\\n${setupCode}\\nconst __release = (() => { ${hydrationBody(bindingsForTemplate, context, hot)} })();\\n${releaseCode}\\n});\\n}\\n`;\n const { code, mappings } = extractSourceMappings(markedCode);\n return { code, css, mappings };\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Receives failures from component event handlers in the current root. */
|
|
2
|
+
export type ComponentErrorHandler = (error: unknown) => void;
|
|
3
|
+
export interface AppErrorChannel {
|
|
4
|
+
register(handler: ComponentErrorHandler): () => void;
|
|
5
|
+
current(): ComponentErrorHandler | undefined;
|
|
6
|
+
track(release: () => void): void;
|
|
7
|
+
clear(): void;
|
|
8
|
+
}
|
|
9
|
+
/** A private observer registry owned by one mounted browser application. */
|
|
10
|
+
export declare function createAppErrorChannel(): AppErrorChannel;
|
|
11
|
+
export declare function provideAppErrorChannel(channel: AppErrorChannel): void;
|
|
12
|
+
export declare function currentAppErrorChannel(): AppErrorChannel | undefined;
|
|
13
|
+
/** Provides an error observer to this component and its descendants. */
|
|
14
|
+
export declare function provideErrorHandler(handler: ComponentErrorHandler): void;
|
|
15
|
+
/** Captures the nearest observer while a component binding is created. */
|
|
16
|
+
export declare function componentErrorReporter(): (error: unknown) => void;
|
|
17
|
+
/** Returns the nearest handler for a resource created inside a component root. */
|
|
18
|
+
export declare function currentComponentErrorHandler(): ComponentErrorHandler | undefined;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { logClientError, observeCallback } from "./error-observer.js";
|
|
2
|
+
import { createContext, findContext, onCleanup, provide } from "./reactivity.js";
|
|
3
|
+
const errorHandlerKey = createContext("component error handler");
|
|
4
|
+
const appErrorChannelKey = createContext("application error channel");
|
|
5
|
+
/** A private observer registry owned by one mounted browser application. */
|
|
6
|
+
export function createAppErrorChannel() {
|
|
7
|
+
const handlers = [];
|
|
8
|
+
const resources = new Set();
|
|
9
|
+
return {
|
|
10
|
+
register(handler) {
|
|
11
|
+
const entry = { handler };
|
|
12
|
+
handlers.push(entry);
|
|
13
|
+
return () => {
|
|
14
|
+
const index = handlers.indexOf(entry);
|
|
15
|
+
if (index >= 0)
|
|
16
|
+
handlers.splice(index, 1);
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
current() { return handlers[0]?.handler; },
|
|
20
|
+
track(release) { resources.add(release); },
|
|
21
|
+
clear() {
|
|
22
|
+
handlers.length = 0;
|
|
23
|
+
const failures = [];
|
|
24
|
+
for (const release of resources) {
|
|
25
|
+
try {
|
|
26
|
+
release();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
failures.push(error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
resources.clear();
|
|
33
|
+
if (failures.length === 1)
|
|
34
|
+
throw failures[0];
|
|
35
|
+
if (failures.length > 1)
|
|
36
|
+
throw new AggregateError(failures, "Meeko application resources failed to close");
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function provideAppErrorChannel(channel) {
|
|
41
|
+
provide(appErrorChannelKey, channel);
|
|
42
|
+
}
|
|
43
|
+
export function currentAppErrorChannel() {
|
|
44
|
+
return findContext(appErrorChannelKey);
|
|
45
|
+
}
|
|
46
|
+
/** Provides an error observer to this component and its descendants. */
|
|
47
|
+
export function provideErrorHandler(handler) {
|
|
48
|
+
provide(errorHandlerKey, handler);
|
|
49
|
+
const channel = findContext(appErrorChannelKey);
|
|
50
|
+
if (channel) {
|
|
51
|
+
onCleanup(channel.register(handler));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Captures the nearest observer while a component binding is created. */
|
|
55
|
+
export function componentErrorReporter() {
|
|
56
|
+
const handler = currentComponentErrorHandler();
|
|
57
|
+
if (!handler)
|
|
58
|
+
return (error) => logClientError("Meeko component event failed", error);
|
|
59
|
+
return (error) => observeCallback(() => handler(error), (observerError) => logClientError("Meeko component error observer failed", observerError, error));
|
|
60
|
+
}
|
|
61
|
+
/** Returns the nearest handler for a resource created inside a component root. */
|
|
62
|
+
export function currentComponentErrorHandler() {
|
|
63
|
+
return findContext(errorHandlerKey);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=component-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-errors.js","sourceRoot":"","sources":["../src/component-errors.ts"],"names":[],"mappings":"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","sourcesContent":["import { logClientError, observeCallback } from \"./error-observer.js\";\nimport { createContext, findContext, onCleanup, provide } from \"./reactivity.js\";\n\n/** Receives failures from component event handlers in the current root. */\nexport type ComponentErrorHandler = (error: unknown) => void;\n\nconst errorHandlerKey = createContext<ComponentErrorHandler>(\"component error handler\");\nconst appErrorChannelKey = createContext<AppErrorChannel>(\"application error channel\");\n\nexport interface AppErrorChannel {\n register(handler: ComponentErrorHandler): () => void;\n current(): ComponentErrorHandler | undefined;\n track(release: () => void): void;\n clear(): void;\n}\n\n/** A private observer registry owned by one mounted browser application. */\nexport function createAppErrorChannel(): AppErrorChannel {\n const handlers: Array<{ handler: ComponentErrorHandler }> = [];\n const resources = new Set<() => void>();\n return {\n register(handler) {\n const entry = { handler };\n handlers.push(entry);\n return () => {\n const index = handlers.indexOf(entry);\n if (index >= 0) handlers.splice(index, 1);\n };\n },\n current() { return handlers[0]?.handler; },\n track(release) { resources.add(release); },\n clear() {\n handlers.length = 0;\n const failures: unknown[] = [];\n for (const release of resources) {\n try { release(); }\n catch (error) { failures.push(error); }\n }\n resources.clear();\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"Meeko application resources failed to close\");\n },\n };\n}\n\nexport function provideAppErrorChannel(channel: AppErrorChannel): void {\n provide(appErrorChannelKey, channel);\n}\n\nexport function currentAppErrorChannel(): AppErrorChannel | undefined {\n return findContext(appErrorChannelKey);\n}\n\n/** Provides an error observer to this component and its descendants. */\nexport function provideErrorHandler(handler: ComponentErrorHandler): void {\n provide(errorHandlerKey, handler);\n const channel = findContext(appErrorChannelKey);\n if (channel) {\n onCleanup(channel.register(handler));\n }\n}\n\n/** Captures the nearest observer while a component binding is created. */\nexport function componentErrorReporter(): (error: unknown) => void {\n const handler = currentComponentErrorHandler();\n if (!handler) return (error) => logClientError(\"Meeko component event failed\", error);\n return (error) => observeCallback(\n () => handler(error),\n (observerError) => logClientError(\"Meeko component error observer failed\", observerError, error),\n );\n}\n\n/** Returns the nearest handler for a resource created inside a component root. */\nexport function currentComponentErrorHandler(): ComponentErrorHandler | undefined {\n return findContext(errorHandlerKey);\n}\n"]}
|
package/dist/devtools.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { logClientError, observeCallback } from "./error-observer.js";
|
|
1
2
|
import { currentEffectOwner, effect, isWritableSignal, signalReadSites, untrack } from "./reactivity.js";
|
|
2
3
|
const active = new Map();
|
|
3
4
|
const identities = new WeakMap();
|
|
@@ -76,10 +77,7 @@ function safeValue(value, depth = 0, seen = new WeakSet()) {
|
|
|
76
77
|
}
|
|
77
78
|
function notify() {
|
|
78
79
|
for (const listener of [...listeners]) {
|
|
79
|
-
|
|
80
|
-
untrack(listener);
|
|
81
|
-
}
|
|
82
|
-
catch { /* Un panel externo no debe romper la aplicación. */ }
|
|
80
|
+
observeCallback(() => untrack(listener), (error) => logClientError("Meeko DevTools subscriber failed", error));
|
|
83
81
|
}
|
|
84
82
|
}
|
|
85
83
|
function record(kind, instanceId, detail, value, source, reads) {
|