@meekojs/meeko 0.0.3 → 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 +35 -16
- package/dist/autoimports-ts.d.ts +26 -0
- package/dist/autoimports-ts.js +183 -0
- package/dist/autoimports-ts.js.map +1 -0
- package/dist/autoimports.d.ts +21 -0
- package/dist/autoimports.js +301 -0
- package/dist/autoimports.js.map +1 -0
- package/dist/check.js +74 -33
- package/dist/check.js.map +1 -0
- package/dist/cli.js +67 -5
- package/dist/cli.js.map +1 -0
- 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/import-graph.d.ts +8 -0
- package/dist/compiler/import-graph.js +33 -0
- package/dist/compiler/import-graph.js.map +1 -0
- package/dist/compiler/mapping.js +1 -0
- package/dist/compiler/mapping.js.map +1 -0
- package/dist/compiler/project-root.d.ts +2 -0
- package/dist/compiler/project-root.js +18 -0
- package/dist/compiler/project-root.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/sfc.js +1 -0
- package/dist/compiler/sfc.js.map +1 -0
- package/dist/compiler/sourcemap.d.ts +3 -0
- package/dist/compiler/sourcemap.js +75 -0
- package/dist/compiler/sourcemap.js.map +1 -0
- package/dist/compiler/template.js +1 -0
- package/dist/compiler/template.js.map +1 -0
- package/dist/compiler.js +66 -17
- package/dist/compiler.js.map +1 -0
- 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-ui/index.js +1 -0
- package/dist/devtools-ui/index.js.map +1 -0
- package/dist/devtools.js +3 -4
- package/dist/devtools.js.map +1 -0
- package/dist/dom.d.ts +18 -5
- package/dist/dom.js +295 -90
- package/dist/dom.js.map +1 -0
- 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.d.ts +5 -0
- package/dist/framework/check-app.js +214 -0
- package/dist/framework/check-app.js.map +1 -0
- 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 +48 -0
- package/dist/framework/client.js +249 -0
- package/dist/framework/client.js.map +1 -0
- package/dist/framework/clients.d.ts +82 -0
- package/dist/framework/clients.js +190 -0
- package/dist/framework/clients.js.map +1 -0
- package/dist/framework/config-type.d.ts +10 -0
- package/dist/framework/config-type.js +4 -0
- package/dist/framework/config-type.js.map +1 -0
- package/dist/framework/config.d.ts +15 -0
- package/dist/framework/config.js +138 -0
- package/dist/framework/config.js.map +1 -0
- package/dist/framework/contracts-generate.d.ts +8 -0
- package/dist/framework/contracts-generate.js +290 -0
- package/dist/framework/contracts-generate.js.map +1 -0
- package/dist/framework/generate.d.ts +7 -0
- package/dist/framework/generate.js +67 -0
- package/dist/framework/generate.js.map +1 -0
- package/dist/framework/init.d.ts +2 -0
- package/dist/framework/init.js +183 -0
- package/dist/framework/init.js.map +1 -0
- 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/modules.d.ts +22 -0
- package/dist/framework/modules.js +29 -0
- package/dist/framework/modules.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 +64 -0
- package/dist/framework/page.js +44 -0
- package/dist/framework/page.js.map +1 -0
- package/dist/framework/prerender.d.ts +14 -0
- package/dist/framework/prerender.js +110 -0
- package/dist/framework/prerender.js.map +1 -0
- 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 +41 -0
- package/dist/framework/router.js +259 -0
- package/dist/framework/router.js.map +1 -0
- package/dist/framework/server.d.ts +65 -0
- package/dist/framework/server.js +239 -0
- package/dist/framework/server.js.map +1 -0
- package/dist/framework/socket-contracts-generate.d.ts +5 -0
- package/dist/framework/socket-contracts-generate.js +162 -0
- package/dist/framework/socket-contracts-generate.js.map +1 -0
- package/dist/framework/socket.d.ts +72 -0
- package/dist/framework/socket.js +252 -0
- package/dist/framework/socket.js.map +1 -0
- 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 +22 -0
- package/dist/framework/state.js +136 -0
- package/dist/framework/state.js.map +1 -0
- 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/auto-clients.d.ts +3 -0
- package/dist/framework-server/auto-clients.js +27 -0
- package/dist/framework-server/auto-clients.js.map +1 -0
- package/dist/framework-server/context.d.ts +21 -0
- package/dist/framework-server/context.js +22 -0
- package/dist/framework-server/context.js.map +1 -0
- package/dist/framework-server/contracts.d.ts +73 -0
- package/dist/framework-server/contracts.js +184 -0
- package/dist/framework-server/contracts.js.map +1 -0
- package/dist/framework-server/discovery.d.ts +43 -0
- package/dist/framework-server/discovery.js +257 -0
- package/dist/framework-server/discovery.js.map +1 -0
- package/dist/framework-server/local.d.ts +21 -0
- package/dist/framework-server/local.js +100 -0
- package/dist/framework-server/local.js.map +1 -0
- 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.d.ts +23 -0
- package/dist/framework-server/node-upgrade.js +96 -0
- package/dist/framework-server/node-upgrade.js.map +1 -0
- package/dist/framework-server/node-websocket.d.ts +16 -0
- package/dist/framework-server/node-websocket.js +127 -0
- package/dist/framework-server/node-websocket.js.map +1 -0
- package/dist/framework-server/openapi.d.ts +17 -0
- package/dist/framework-server/openapi.js +118 -0
- package/dist/framework-server/openapi.js.map +1 -0
- package/dist/framework-server/session-stores.d.ts +73 -0
- package/dist/framework-server/session-stores.js +122 -0
- package/dist/framework-server/session-stores.js.map +1 -0
- package/dist/framework-server/sessions.d.ts +70 -0
- package/dist/framework-server/sessions.js +167 -0
- package/dist/framework-server/sessions.js.map +1 -0
- package/dist/framework-server/socket.d.ts +83 -0
- package/dist/framework-server/socket.js +196 -0
- package/dist/framework-server/socket.js.map +1 -0
- package/dist/framework-server.d.ts +23 -0
- package/dist/framework-server.js +13 -0
- package/dist/framework-server.js.map +1 -0
- package/dist/framework.d.ts +31 -0
- package/dist/framework.js +14 -0
- package/dist/framework.js.map +1 -0
- package/dist/hmr.js +75 -24
- package/dist/hmr.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -0
- package/dist/init.js +31 -3
- package/dist/init.js.map +1 -0
- package/dist/internal.d.ts +2 -2
- package/dist/internal.js +3 -2
- package/dist/internal.js.map +1 -0
- package/dist/node.d.ts +16 -0
- package/dist/node.js +122 -0
- package/dist/node.js.map +1 -0
- package/dist/reactivity.d.ts +22 -1
- package/dist/reactivity.js +132 -18
- package/dist/reactivity.js.map +1 -0
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +26 -9
- package/dist/types.js.map +1 -0
- package/dist/vite.js +112 -7
- package/dist/vite.js.map +1 -0
- package/package.json +15 -4
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
|
}
|
|
@@ -154,9 +156,10 @@ function renderNodeContent(node, bindings, context) {
|
|
|
154
156
|
const position = node.start;
|
|
155
157
|
const referenceAttribute = node.attrs?.find((attribute) => attribute.name === "is");
|
|
156
158
|
const reference = referenceAttribute?.value ?? "";
|
|
157
|
-
if (
|
|
158
|
-
throw compileError(context.source, context.filename, "MEEK030", "A component requires is=\"
|
|
159
|
-
|
|
159
|
+
if (!reference.trim())
|
|
160
|
+
throw compileError(context.source, context.filename, "MEEK030", "A component requires is=\"expression\"", position);
|
|
161
|
+
const referenceOffset = attributeValueOffset(node, "is", context);
|
|
162
|
+
validateExpression(reference, context.source, context.filename, referenceOffset);
|
|
160
163
|
if ((node.childNodes ?? []).some((child) => child.nodeName !== "#text" || Boolean(child.value?.trim()))) {
|
|
161
164
|
throw compileError(context.source, context.filename, "MEEK031", "Component children are not supported; close the tag without content", position);
|
|
162
165
|
}
|
|
@@ -174,7 +177,6 @@ function renderNodeContent(node, bindings, context) {
|
|
|
174
177
|
props.push({ name, nameOffset: attribute.start + 5, expression: attribute.value, offset });
|
|
175
178
|
}
|
|
176
179
|
const id = context.nextRegion++;
|
|
177
|
-
const referenceOffset = attributeValueOffset(node, "is", context);
|
|
178
180
|
bindings.components.push({ id, reference, referenceOffset, props, offset: position });
|
|
179
181
|
const mappedProps = props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${markSource(prop.expression, prop.offset)}`);
|
|
180
182
|
const object = markSource(`{ ${mappedProps.join(", ")} }`, position, node.end - position);
|
|
@@ -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)));
|
|
@@ -278,6 +281,11 @@ function compileScript(section, source, filename) {
|
|
|
278
281
|
types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
279
282
|
continue;
|
|
280
283
|
}
|
|
284
|
+
if (ts.isExportDeclaration(statement) && (statement.isTypeOnly ||
|
|
285
|
+
(statement.exportClause && ts.isNamedExports(statement.exportClause) && statement.exportClause.elements.every((element) => element.isTypeOnly)))) {
|
|
286
|
+
types.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
281
289
|
if (ts.isVariableStatement(statement)) {
|
|
282
290
|
if (statement.declarationList.declarations.length !== 1)
|
|
283
291
|
throw compileError(source, filename, "MEEK014", "Declare one variable per statement in .meeko scripts", section.contentStart + statement.getStart(file));
|
|
@@ -294,7 +302,21 @@ function compileScript(section, source, filename) {
|
|
|
294
302
|
if (!propsType)
|
|
295
303
|
throw compileError(source, filename, "MEEK017", "defineProps requires a type argument", section.contentStart + declaration.getStart(file));
|
|
296
304
|
propsTypeOffset = section.contentStart + typeArgument.getStart(file);
|
|
297
|
-
|
|
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;`);
|
|
298
320
|
}
|
|
299
321
|
else {
|
|
300
322
|
setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
@@ -307,9 +329,13 @@ function compileScript(section, source, filename) {
|
|
|
307
329
|
setup.push(markSource(statement.getText(file), section.contentStart + statement.getStart(file)));
|
|
308
330
|
continue;
|
|
309
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
|
+
}
|
|
310
336
|
throw compileError(source, filename, "MEEK018", `Unsupported top-level script statement: ${ts.SyntaxKind[statement.kind]}`, section.contentStart + statement.getStart(file));
|
|
311
337
|
}
|
|
312
|
-
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 } : {}) };
|
|
313
339
|
}
|
|
314
340
|
function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
315
341
|
const statements = [];
|
|
@@ -327,12 +353,11 @@ function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
|
327
353
|
statements.push(`cleanups.push(__meeko.bindAttribute(__scope, ${id}, ${quote(name)}, () => ${mappedExpression(expression, offset)}, ${quote(location)}${source}));`);
|
|
328
354
|
}
|
|
329
355
|
for (const { id, name, expression, offset } of bindings.events) {
|
|
330
|
-
const eventType =
|
|
331
|
-
|
|
332
|
-
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);
|
|
333
358
|
statements.push(`{
|
|
334
359
|
cleanups.push(__meeko.bindEvent(__scope, ${id}, ${quote(name)}, (event: Event) => {
|
|
335
|
-
${handler}
|
|
360
|
+
return ${handler}
|
|
336
361
|
}));
|
|
337
362
|
}`);
|
|
338
363
|
}
|
|
@@ -342,7 +367,7 @@ function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
|
342
367
|
const location = `${basename(context.filename)}:${point.line}:${point.column} (component ${entry.reference})`;
|
|
343
368
|
const props = entry.props.map((prop) => `${markSource(quote(prop.name), prop.nameOffset, prop.name.length)}: ${mappedExpression(prop.expression, prop.offset)}`);
|
|
344
369
|
const object = markSource(`{ ${props.join(", ")} }`, entry.offset, 1);
|
|
345
|
-
componentStatements.push(`cleanups.push(__meeko.bindComponent(__scope, ${entry.id}, ${mappedExpression(entry.reference, entry.referenceOffset)}, () => (${object}), ${quote(location)}));`);
|
|
370
|
+
componentStatements.push(`cleanups.push(__meeko.bindComponent(__scope, ${entry.id}, () => ${mappedExpression(entry.reference, entry.referenceOffset)}, () => (${object}), ${quote(location)}));`);
|
|
346
371
|
}
|
|
347
372
|
statements.unshift(...componentStatements);
|
|
348
373
|
for (const entry of bindings.regions) {
|
|
@@ -365,8 +390,8 @@ function hydrationBody(bindings, context, hot, locals = new Map()) {
|
|
|
365
390
|
return `const cleanups: Array<() => void> = [];
|
|
366
391
|
try {
|
|
367
392
|
${statements.join("\n")}
|
|
368
|
-
return () =>
|
|
369
|
-
} catch (error) {
|
|
393
|
+
return () => __meeko.releaseAll(cleanups);
|
|
394
|
+
} catch (error) { __meeko.releaseAll(cleanups, { error }); }`;
|
|
370
395
|
}
|
|
371
396
|
/** Compila una parte tipada de .meeko para SSR e hidratación del HTML existente. */
|
|
372
397
|
export function compile(source, filename = "anonymous.meeko", options = {}) {
|
|
@@ -394,16 +419,40 @@ export function compile(source, filename = "anonymous.meeko", options = {}) {
|
|
|
394
419
|
const scriptParts = compileScript(script, source, filename);
|
|
395
420
|
const bindings = scriptParts.names.join(", ");
|
|
396
421
|
const hot = options.hot === true;
|
|
397
|
-
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;`;
|
|
398
424
|
const releaseCode = hot
|
|
399
|
-
? `const __cleanup = () =>
|
|
400
|
-
: `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));`;
|
|
401
427
|
const hotIdExport = hot ? `export const __hotId = ${quote(componentId)};\n` : "";
|
|
402
428
|
const stateParam = ", __state?: __meeko.HotState";
|
|
403
429
|
const scopeHotRootParam = hot ? ", __hotRoot?: Element" : "";
|
|
404
430
|
const scopeForward = hot ? "__scope, __inputProps, __state, root" : "__scope, __inputProps, __state";
|
|
405
431
|
const propsType = scriptParts.propsTypeOffset === undefined ? scriptParts.propsType : markSource(scriptParts.propsType, scriptParts.propsTypeOffset);
|
|
406
|
-
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`;
|
|
407
455
|
const { code, mappings } = extractSourceMappings(markedCode);
|
|
408
456
|
return { code, css, mappings };
|
|
409
457
|
}
|
|
458
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +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 { 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":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAKjF,MAAM,eAAe,GAAG,aAAa,CAAwB,yBAAyB,CAAC,CAAC;AACxF,MAAM,kBAAkB,GAAG,aAAa,CAAkB,2BAA2B,CAAC,CAAC;AASvF,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAA8C,EAAE,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,OAAO;QACL,QAAQ,CAAC,OAAO;YACd,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,KAAK,IAAI,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1C,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1C,KAAK;YACH,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC;oBAAC,OAAO,EAAE,CAAC;gBAAC,CAAC;gBAClB,OAAO,KAAK,EAAE,CAAC;oBAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YACzC,CAAC;YACD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,6CAA6C,CAAC,CAAC;QAC7G,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAwB;IAC7D,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACzC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAChE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB;IACpC,MAAM,OAAO,GAAG,4BAA4B,EAAE,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACtF,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAC/B,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC,aAAa,EAAE,EAAE,CAAC,cAAc,CAAC,uCAAuC,EAAE,aAAa,EAAE,KAAK,CAAC,CACjG,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,4BAA4B;IAC1C,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC;AACtC,CAAC","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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools-ui/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DevtoolsEvent, DevtoolsHook, DevtoolsInstance } from \"../devtools.js\";\n\n/** Opciones de montaje del panel integrado de desarrollo. */\nexport interface DevtoolsPanelOptions {\n /** Elemento que recibirá el host del Shadow DOM. El valor predeterminado es `document.body`. */\n container?: Element;\n}\n\n/** Control del ciclo de vida del panel. */\nexport interface DevtoolsPanel {\n /** Reintenta encontrar el hook y actualiza los datos visibles. */\n refresh(): void;\n /** Quita la interfaz y libera las suscripciones y eventos instalados. */\n unmount(): void;\n}\n\nconst styles = `\n:host { all: initial; position: fixed; z-index: 2147483647; right: 16px; bottom: 16px; width: min(680px, calc(100vw - 32px)); color: #e8ecf5; font: 13px/1.45 system-ui, sans-serif; color-scheme: dark; }\n* { box-sizing: border-box; }\n.panel { display: flex; flex-direction: column; max-height: min(560px, calc(100vh - 32px)); overflow: hidden; border: 1px solid #475569; border-radius: 12px; background: #101827; box-shadow: 0 16px 48px #0009; }\nheader { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid #334155; }\nheader strong { font-size: 14px; margin-right: auto; }\n.mobile-switch { display: none; gap: 6px; padding: 8px 12px; border-bottom: 1px solid #334155; }\n.mobile-switch button { flex: 1; }\n.content { display: grid; grid-template-columns: minmax(170px, 0.9fr) minmax(0, 1.6fr); min-height: 220px; overflow: auto; }\nsection { min-width: 0; padding: 12px; }\nsection + section { border-left: 1px solid #334155; }\nh2, h3 { margin: 0 0 8px; font-size: 13px; }\nh3 { margin-top: 12px; }\np { margin: 0 0 8px; color: #aab7ca; }\nul, ol { margin: 0; padding: 0; list-style: none; }\nli + li { margin-top: 6px; }\nbutton { appearance: none; border: 1px solid #52657d; border-radius: 6px; background: #202d40; color: inherit; padding: 5px 8px; font: inherit; cursor: pointer; }\nbutton:hover { background: #30425d; }\nbutton:focus-visible { outline: 2px solid #79b8ff; outline-offset: 2px; }\nbutton[aria-pressed=\"true\"] { border-color: #79b8ff; background: #25476c; }\n.tree-node { margin: 3px 0; }\n.tree-node > button { width: 100%; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.tree-children { margin: 4px 0 6px 8px; padding-left: 12px; border-left: 1px solid #52657d; }\n.actions { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; }\n.muted { color: #aab7ca; }\n.path { overflow-wrap: anywhere; }\npre { margin: 4px 0 0; padding: 8px; max-height: 130px; overflow: auto; border-radius: 6px; background: #0a111e; color: #dbeafe; font: 12px/1.45 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; overflow-wrap: anywhere; }\n.events { border-top: 1px solid #334155; padding: 10px 12px; max-height: 160px; overflow: auto; }\n.events-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px; }\n.events-head label { color: #aab7ca; }\n.event-button { width: 100%; text-align: left; }\n.event-reads { margin: 4px 0 8px; color: #aab7ca; }\n.event-reads summary { cursor: pointer; }\n.event-reads li { overflow-wrap: anywhere; }\n.event-reads code { color: #dbeafe; }\n.events li { overflow-wrap: anywhere; }\n.status { padding: 7px 12px; border-top: 1px solid #334155; color: #aab7ca; }\n@media (max-width: 540px) {\n .mobile-switch { display: flex; }\n .content { display: block; min-height: 0; }\n .content[data-view=\"instances\"] .detail { display: none; }\n .content[data-view=\"detail\"] .instances { display: none; }\n section + section { border-left: 0; }\n}\n`;\n\n/** Formatea datos arbitrarios sin insertar HTML procedente de la aplicación. */\nfunction formatValue(value: unknown): string {\n const seen = new WeakSet<object>();\n try {\n const result = JSON.stringify(value, (_key, current: unknown) => {\n if (typeof current === \"bigint\") return `${current}n`;\n if (typeof current === \"function\") return \"[función]\";\n if (typeof current === \"symbol\") return String(current);\n if (typeof current === \"object\" && current !== null) {\n if (seen.has(current)) return \"[circular]\";\n seen.add(current);\n }\n return current;\n }, 2);\n return (result ?? String(value)).slice(0, 8000);\n } catch {\n return \"[valor no representable]\";\n }\n}\n\n/** Crea un elemento con texto seguro y una clase opcional. */\nfunction element<K extends keyof HTMLElementTagNameMap>(document: Document, tag: K, text?: string, className?: string): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag);\n if (text !== undefined) node.textContent = text;\n if (className) node.className = className;\n return node;\n}\n\n/** Muestra el momento relativo comunicado por el runtime. */\nfunction eventLabel(event: DevtoolsEvent): string {\n const kinds: Record<DevtoolsEvent[\"kind\"], string> = {\n mount: \"Montaje\",\n unmount: \"Desmontaje\",\n signal: \"Señal\",\n breakpoint: \"Punto de parada\",\n select: \"Selección\",\n hmr: \"HMR\",\n };\n const time = Number.isFinite(event.at) ? new Date(event.at).toLocaleTimeString(\"es\", { hour12: false }) : \"hora desconocida\";\n const detail = event.detail ? ` · ${event.detail}` : \"\";\n const source = event.componentName ? ` · ${event.componentName}` : \"\";\n const file = event.file ? ` · ${event.file}` : \"\";\n const value = event.kind === \"signal\" && \"value\" in event ? ` → ${formatValue(event.value).replace(/\\s+/g, \" \").slice(0, 240)}` : \"\";\n return `${time} · ${kinds[event.kind]} · ${event.instanceId}${source}${file}${detail}${value}`;\n}\n\n/** Exige un documento conectado a una ventana para registrar eventos del hook. */\nfunction requireView(document: Document): Window {\n const view = document.defaultView;\n if (!view) throw new Error(\"Meeko DevTools requires a browser document\");\n return view;\n}\n\n/** Monta una interfaz aislada en Shadow DOM para inspeccionar instancias Meeko. */\nexport function mountDevtoolsPanel(options: DevtoolsPanelOptions = {}): DevtoolsPanel {\n const container = options.container ?? document.body;\n const ownerDocument = container.ownerDocument;\n const view = requireView(ownerDocument);\n\n const host = element(ownerDocument, \"div\");\n host.setAttribute(\"data-meeko-devtools-panel\", \"\");\n const shadow = host.attachShadow({ mode: \"open\" });\n const style = element(ownerDocument, \"style\", styles);\n const panel = element(ownerDocument, \"div\", undefined, \"panel\");\n const header = element(ownerDocument, \"header\");\n const title = element(ownerDocument, \"strong\", \"Meeko DevTools\");\n const refreshButton = element(ownerDocument, \"button\", \"Actualizar\");\n refreshButton.type = \"button\";\n refreshButton.setAttribute(\"aria-label\", \"Actualizar instancias de Meeko\");\n const closeButton = element(ownerDocument, \"button\", \"Cerrar\");\n closeButton.type = \"button\";\n closeButton.setAttribute(\"aria-label\", \"Cerrar Meeko DevTools\");\n header.append(title, refreshButton, closeButton);\n\n const mobileSwitch = element(ownerDocument, \"nav\", undefined, \"mobile-switch\");\n mobileSwitch.setAttribute(\"aria-label\", \"Vistas de Meeko DevTools\");\n const instancesButton = element(ownerDocument, \"button\", \"Instancias\");\n instancesButton.type = \"button\";\n instancesButton.setAttribute(\"aria-controls\", \"meeko-devtools-instances\");\n const detailButton = element(ownerDocument, \"button\", \"Detalle\");\n detailButton.type = \"button\";\n detailButton.setAttribute(\"aria-controls\", \"meeko-devtools-detail\");\n mobileSwitch.append(instancesButton, detailButton);\n\n const main = element(ownerDocument, \"div\", undefined, \"content\");\n const instancesSection = element(ownerDocument, \"section\", undefined, \"instances\");\n instancesSection.id = \"meeko-devtools-instances\";\n const instancesTitle = element(ownerDocument, \"h2\", \"Instancias\");\n const instancesList = element(ownerDocument, \"ul\");\n instancesList.setAttribute(\"aria-label\", \"Instancias de Meeko\");\n instancesSection.append(instancesTitle, instancesList);\n const detailSection = element(ownerDocument, \"section\", undefined, \"detail\");\n detailSection.id = \"meeko-devtools-detail\";\n detailSection.setAttribute(\"aria-label\", \"Detalle de instancia\");\n main.append(instancesSection, detailSection);\n\n const eventsSection = element(ownerDocument, \"section\", undefined, \"events\");\n const eventsTitle = element(ownerDocument, \"h2\", \"Eventos recientes\");\n const eventsHead = element(ownerDocument, \"div\", undefined, \"events-head\");\n const signalFilterLabel = element(ownerDocument, \"label\", \" Sólo señales\");\n const signalFilter = element(ownerDocument, \"input\");\n signalFilter.type = \"checkbox\";\n signalFilter.setAttribute(\"aria-label\", \"Mostrar sólo eventos de señales\");\n signalFilterLabel.prepend(signalFilter);\n eventsHead.append(eventsTitle, signalFilterLabel);\n const eventsList = element(ownerDocument, \"ol\");\n eventsList.setAttribute(\"aria-label\", \"Eventos recientes de Meeko\");\n eventsSection.append(eventsHead, eventsList);\n const status = element(ownerDocument, \"div\", undefined, \"status\");\n status.setAttribute(\"role\", \"status\");\n status.setAttribute(\"aria-live\", \"polite\");\n panel.append(header, mobileSwitch, main, eventsSection, status);\n shadow.append(style, panel);\n container.appendChild(host);\n\n let hook: DevtoolsHook | undefined;\n let unsubscribe: (() => void) | undefined;\n let highlightedId: string | null = null;\n let mounted = true;\n let mobileView: \"instances\" | \"detail\" = \"instances\";\n\n /** Cambia la vista móvil y comunica el botón activo a tecnologías de asistencia. */\n function showMobileView(next: \"instances\" | \"detail\"): void {\n mobileView = next;\n main.dataset.view = mobileView;\n instancesButton.setAttribute(\"aria-pressed\", String(mobileView === \"instances\"));\n detailButton.setAttribute(\"aria-pressed\", String(mobileView === \"detail\"));\n }\n\n showMobileView(mobileView);\n instancesButton.addEventListener(\"click\", () => showMobileView(\"instances\"));\n detailButton.addEventListener(\"click\", () => showMobileView(\"detail\"));\n\n /** Conserva el foco al reconstruir una fila después de recibir una notificación. */\n function restoreFocus(id: string | undefined, action: string | undefined): void {\n if (!id || !action) return;\n for (const button of shadow.querySelectorAll<HTMLButtonElement>(\"button[data-instance-id]\")) {\n if (button.dataset.instanceId === id && button.dataset.action === action) {\n button.focus();\n break;\n }\n }\n }\n\n /** Reconstruye sólo el contenido variable usando nodos de texto seguros. */\n function render(): void {\n if (!mounted) return;\n const active = shadow.activeElement as HTMLButtonElement | null;\n const focusId = active?.dataset.instanceId;\n const focusAction = active?.dataset.action;\n instancesList.replaceChildren();\n detailSection.replaceChildren();\n eventsList.replaceChildren();\n if (!hook) {\n status.textContent = \"Hook no disponible. Abre una página Meeko con Vite en desarrollo y pulsa Actualizar.\";\n instancesList.append(element(ownerDocument, \"li\", \"No hay instancias disponibles.\", \"muted\"));\n detailSection.append(element(ownerDocument, \"p\", \"El runtime de desarrollo aún no está conectado.\"));\n eventsList.append(element(ownerDocument, \"li\", \"Sin eventos.\", \"muted\"));\n return;\n }\n\n let snapshot: ReturnType<DevtoolsHook[\"snapshot\"]>;\n try {\n snapshot = hook.snapshot();\n } catch (error) {\n status.textContent = `No se pudo leer el hook: ${error instanceof Error ? error.message : String(error)}`;\n return;\n }\n status.textContent = `${snapshot.instances.length} instancia(s) · ${snapshot.events.length} evento(s)`;\n if (snapshot.instances.length === 0) instancesList.append(element(ownerDocument, \"li\", \"No hay componentes hidratados.\", \"muted\"));\n const byId = new Map(snapshot.instances.map((instance) => [instance.id, instance]));\n const rendered = new Set<string>();\n function appendInstance(instance: DevtoolsInstance, list: HTMLUListElement): void {\n if (rendered.has(instance.id)) return;\n rendered.add(instance.id);\n const row = element(ownerDocument, \"li\", undefined, \"tree-node\");\n const selectButton = element(ownerDocument, \"button\", instance.name || instance.componentId);\n selectButton.type = \"button\";\n selectButton.title = `${instance.name} · ${instance.file}`;\n selectButton.setAttribute(\"aria-label\", `Seleccionar ${instance.name || instance.componentId}`);\n selectButton.dataset.instanceId = instance.id;\n selectButton.dataset.action = \"select\";\n selectButton.setAttribute(\"aria-pressed\", String(snapshot.selectedId === instance.id));\n selectButton.addEventListener(\"click\", () => {\n hook?.select(instance.id);\n showMobileView(\"detail\");\n render();\n if (view.matchMedia(\"(max-width: 540px)\").matches) detailButton.focus();\n });\n row.append(selectButton);\n list.append(row);\n const children = instance.childIds.map((id) => byId.get(id)).filter((child): child is DevtoolsInstance => child !== undefined);\n if (children.length > 0) {\n const nested = element(ownerDocument, \"ul\", undefined, \"tree-children\");\n for (const child of children) appendInstance(child, nested);\n if (nested.childElementCount > 0) row.append(nested);\n }\n }\n for (const instance of snapshot.instances) if (!instance.parentId || !byId.has(instance.parentId)) appendInstance(instance, instancesList);\n for (const instance of snapshot.instances) appendInstance(instance, instancesList);\n\n const selected = snapshot.instances.find((instance: DevtoolsInstance) => instance.id === snapshot.selectedId);\n if (selected) {\n detailSection.append(element(ownerDocument, \"h2\", selected.name || selected.componentId));\n detailSection.append(element(ownerDocument, \"p\", selected.file, \"path\"));\n detailSection.append(element(ownerDocument, \"p\", `ID: ${selected.id} · Estado: ${selected.status === \"hydrated\" ? \"Hidratado\" : selected.status} · Padre: ${selected.parentId ?? \"ninguno\"} · Hijos: ${selected.childIds.length}`));\n const actions = element(ownerDocument, \"div\", undefined, \"actions\");\n const highlightButton = element(ownerDocument, \"button\", highlightedId === selected.id ? \"Quitar resaltado\" : \"Resaltar en página\");\n highlightButton.type = \"button\";\n highlightButton.setAttribute(\"aria-pressed\", String(highlightedId === selected.id));\n highlightButton.dataset.instanceId = selected.id;\n highlightButton.dataset.action = \"highlight\";\n highlightButton.addEventListener(\"click\", () => {\n highlightedId = highlightedId === selected.id ? null : selected.id;\n hook?.highlight(highlightedId);\n render();\n });\n const breakpointButton = element(ownerDocument, \"button\", selected.breakpoint ? \"Desactivar punto de parada\" : \"Activar punto de parada\");\n breakpointButton.type = \"button\";\n breakpointButton.setAttribute(\"aria-pressed\", String(selected.breakpoint));\n breakpointButton.dataset.instanceId = selected.id;\n breakpointButton.dataset.action = \"breakpoint\";\n breakpointButton.addEventListener(\"click\", () => {\n hook?.setBreakpoint(selected.id, !selected.breakpoint);\n render();\n });\n actions.append(highlightButton, breakpointButton);\n detailSection.append(actions, element(ownerDocument, \"h3\", \"Props\"), element(ownerDocument, \"pre\", formatValue(selected.props)), element(ownerDocument, \"h3\", \"Señales\"), element(ownerDocument, \"pre\", formatValue(selected.signals)));\n } else {\n detailSection.append(element(ownerDocument, \"p\", \"Selecciona una instancia para ver props y señales.\"));\n }\n\n const recent = snapshot.events.filter((event) => !signalFilter.checked || event.kind === \"signal\").slice(-30).reverse();\n if (recent.length === 0) eventsList.append(element(ownerDocument, \"li\", \"Sin eventos.\", \"muted\"));\n for (const event of recent) {\n const row = element(ownerDocument, \"li\");\n const instance = byId.get(event.instanceId);\n const label = eventLabel(event);\n if (instance) {\n const button = element(ownerDocument, \"button\", label, \"event-button\");\n button.type = \"button\";\n button.dataset.instanceId = instance.id;\n button.dataset.action = \"event\";\n button.addEventListener(\"click\", () => {\n hook?.select(instance.id);\n showMobileView(\"detail\");\n render();\n });\n row.append(button);\n } else {\n row.textContent = label;\n }\n if (event.kind === \"signal\" && event.reads?.length) {\n const sites = element(ownerDocument, \"details\", undefined, \"event-reads\");\n sites.append(element(ownerDocument, \"summary\", `${event.reads.length} expresión(es) que dependen de la señal`));\n const list = element(ownerDocument, \"ul\");\n for (const read of event.reads) {\n const usage = element(ownerDocument, \"li\");\n usage.append(element(ownerDocument, \"code\", `${read.file}:${read.line}:${read.column}`), element(ownerDocument, \"span\", ` ${read.kind}: `), element(ownerDocument, \"code\", read.expression));\n list.append(usage);\n }\n sites.append(list);\n row.append(sites);\n }\n eventsList.append(row);\n }\n restoreFocus(focusId, focusAction);\n }\n\n /** Descubre el hook al inicio, al recibir el evento de disponibilidad o al pulsar Actualizar. */\n function connect(): void {\n if (!mounted) return;\n const next = (view as Window & { __MEEKO_DEVTOOLS__?: DevtoolsHook }).__MEEKO_DEVTOOLS__;\n if (next !== hook) {\n unsubscribe?.();\n hook = next;\n unsubscribe = hook?.subscribe(render);\n }\n render();\n }\n\n function unmount(): void {\n if (!mounted) return;\n mounted = false;\n unsubscribe?.();\n view.removeEventListener(\"meeko:devtools-ready\", connect);\n refreshButton.removeEventListener(\"click\", connect);\n closeButton.removeEventListener(\"click\", unmount);\n if (highlightedId) hook?.highlight(null);\n host.remove();\n hook = undefined;\n }\n\n view.addEventListener(\"meeko:devtools-ready\", connect);\n signalFilter.addEventListener(\"change\", render);\n refreshButton.addEventListener(\"click\", connect);\n closeButton.addEventListener(\"click\", unmount);\n connect();\n return { refresh: connect, unmount };\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) {
|
|
@@ -294,3 +292,4 @@ export function registerDevtoolsInstance(input) {
|
|
|
294
292
|
record(previous ? "hmr" : "mount", entry.id);
|
|
295
293
|
return () => { unregister(entry); };
|
|
296
294
|
}
|
|
295
|
+
//# sourceMappingURL=devtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DomScope } from \"./dom.js\";\nimport { logClientError, observeCallback } from \"./error-observer.js\";\nimport { currentEffectOwner, effect, isWritableSignal, signalReadSites, untrack } from \"./reactivity.js\";\nimport type { EffectSource, Signal } from \"./reactivity.js\";\n\n/** Valores seguros para transportar una captura al panel de desarrollo. */\nexport type DevtoolsValue = null | boolean | number | string | DevtoolsValue[] | { [key: string]: DevtoolsValue };\n\n/** Estado serializable de una instancia hidratada. */\nexport interface DevtoolsInstance {\n id: string;\n componentId: string;\n name: string;\n file: string;\n props: DevtoolsValue;\n signals: Record<string, DevtoolsValue>;\n parentId: string | null;\n childIds: string[];\n status: \"hydrated\";\n breakpoint: boolean;\n}\n\n/** Cambio reciente del árbol de componentes o de una señal. */\nexport interface DevtoolsEvent {\n id: number;\n at: number;\n kind: \"mount\" | \"unmount\" | \"signal\" | \"breakpoint\" | \"select\" | \"hmr\";\n instanceId: string;\n detail?: string;\n /** Identidad del componente conservada incluso después del desmontaje. */\n componentName?: string;\n /** Archivo fuente `.meeko` proporcionado por la compilación de desarrollo. */\n file?: string;\n /** Valor posterior de una señal, copiado con los mismos límites que una captura. */\n value?: DevtoolsValue;\n /** Expresiones de plantilla que dependían de la señal en esta instancia. No son el origen de la escritura. */\n reads?: EffectSource[];\n}\n\n/** Captura independiente de referencias DOM y de valores no serializables. */\nexport interface DevtoolsSnapshot {\n instances: DevtoolsInstance[];\n events: DevtoolsEvent[];\n selectedId: string | null;\n}\n\n/** Interfaz pública que consume una extensión o un panel de desarrollo. */\nexport interface DevtoolsHook {\n snapshot(): DevtoolsSnapshot;\n subscribe(listener: () => void): () => void;\n select(id: string | null): void;\n highlight(id: string | null): void;\n setBreakpoint(id: string, enabled: boolean): void;\n}\n\n/** Datos que entrega un componente compilado cuando se hidrata en desarrollo. */\nexport interface DevtoolsRegistration {\n componentId: string;\n name: string;\n file: string;\n scope: DomScope;\n props: unknown;\n bindings: Record<string, unknown>;\n}\n\ndeclare global {\n interface Window {\n __MEEKO_DEVTOOLS__?: DevtoolsHook;\n }\n}\n\ninterface ActiveInstance extends DevtoolsRegistration {\n id: string;\n key: Node;\n owner: object | undefined;\n breakpoint: boolean;\n stopSignals: Array<() => void>;\n}\n\nconst active = new Map<string, ActiveInstance>();\nconst identities = new WeakMap<Node, { id: string; breakpoint: boolean }>();\nconst listeners = new Set<() => void>();\nconst recent: DevtoolsEvent[] = [];\nlet nextInstance = 1;\nlet nextEvent = 1;\nlet selectedId: string | null = null;\nlet highlightedId: string | null = null;\nlet overlay: HTMLElement | undefined;\nlet highlightObserver: MutationObserver | undefined;\nlet highlightFrame: number | undefined;\n\n/** Copia datos arbitrarios con profundidad y tamaño acotados sin invocar getters. */\nfunction safeValue(value: unknown, depth = 0, seen = new WeakSet<object>()): DevtoolsValue {\n if (value === null || typeof value === \"boolean\") return value;\n if (typeof value === \"string\") return value.length > 500 ? `${value.slice(0, 500)}…` : value;\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (typeof value === \"undefined\") return \"[undefined]\";\n if (typeof value === \"bigint\") return `${value}n`;\n if (typeof value === \"symbol\") return \"[symbol]\";\n if (typeof value === \"function\") return \"[function]\";\n if (typeof value !== \"object\") return \"[unknown]\";\n if (typeof Node !== \"undefined\" && value instanceof Node) return \"[DOM node]\";\n try {\n if (typeof Reflect.get(value, \"nodeType\") === \"number\" && typeof Reflect.get(value, \"nodeName\") === \"string\") return \"[DOM node]\";\n } catch {\n return \"[uninspectable]\";\n }\n if (seen.has(value)) return \"[circular]\";\n if (depth >= 4) return \"[max depth]\";\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? \"[invalid date]\" : value.toISOString();\n if (value instanceof Error) return safeValue(`[${value.name}: ${value.message}]`);\n seen.add(value);\n try {\n if (Array.isArray(value)) {\n const items: DevtoolsValue[] = [];\n for (let index = 0; index < Math.min(value.length, 50); index++) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n items.push(descriptor && \"value\" in descriptor ? safeValue(descriptor.value, depth + 1, seen) : descriptor ? \"[accessor]\" : \"[empty]\");\n }\n if (value.length > 50) items.push(`[${value.length - 50} more]`);\n return items;\n }\n const result: Record<string, DevtoolsValue> = Object.create(null) as Record<string, DevtoolsValue>;\n const keys = Object.keys(value);\n for (const key of keys.slice(0, 50)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n result[key] = descriptor && \"value\" in descriptor ? safeValue(descriptor.value, depth + 1, seen) : \"[accessor]\";\n }\n if (keys.length > 50) result[\"…\"] = `[${keys.length - 50} more]`;\n return result;\n } catch {\n return \"[uninspectable]\";\n } finally {\n seen.delete(value);\n }\n}\n\nfunction notify(): void {\n for (const listener of [...listeners]) {\n observeCallback(() => untrack(listener), (error) => logClientError(\"Meeko DevTools subscriber failed\", error));\n }\n}\n\nfunction record(kind: DevtoolsEvent[\"kind\"], instanceId: string, detail?: string, value?: DevtoolsValue, source?: ActiveInstance, reads?: EffectSource[]): void {\n const event: DevtoolsEvent = { id: nextEvent++, at: Date.now(), kind, instanceId };\n if (detail !== undefined) event.detail = detail;\n const entry = source ?? active.get(instanceId);\n if (entry) {\n event.componentName = entry.name;\n event.file = entry.file;\n }\n if (value !== undefined) event.value = value;\n if (reads?.length) event.reads = reads;\n recent.push(event);\n if (recent.length > 100) recent.shift();\n notify();\n}\n\nfunction keyOf(scope: DomScope): Node {\n return scope.start ?? scope.root;\n}\n\nfunction isInside(parent: ActiveInstance, child: ActiveInstance): boolean {\n if (parent.id === child.id || parent.key === child.key) return false;\n const node = child.key;\n if (!parent.scope.start || !parent.scope.end) return parent.scope.root.contains(node);\n const { start, end } = parent.scope;\n return Boolean(start.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_FOLLOWING)\n && Boolean(end.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_PRECEDING);\n}\n\nfunction parentOf(child: ActiveInstance): ActiveInstance | undefined {\n let parent: ActiveInstance | undefined;\n for (const candidate of active.values()) {\n if (!isInside(candidate, child)) continue;\n if (!parent || isInside(parent, candidate)) parent = candidate;\n }\n return parent;\n}\n\nfunction bounds(instance: ActiveInstance): DOMRect {\n if (!instance.scope.start || !instance.scope.end) return instance.scope.root.getBoundingClientRect();\n const range = instance.scope.start.ownerDocument.createRange();\n range.setStartAfter(instance.scope.start);\n range.setEndBefore(instance.scope.end);\n return range.getBoundingClientRect();\n}\n\nfunction positionHighlight(): void {\n const entry = highlightedId ? active.get(highlightedId) : undefined;\n if (!entry || !overlay) return;\n try {\n const rect = bounds(entry);\n Object.assign(overlay.style, {\n left: `${rect.left}px`, top: `${rect.top}px`,\n width: `${rect.width}px`, height: `${rect.height}px`,\n });\n } catch {\n removeHighlight();\n }\n}\n\nfunction scheduleHighlight(): void {\n if (highlightFrame !== undefined) return;\n highlightFrame = window.requestAnimationFrame(() => {\n highlightFrame = undefined;\n positionHighlight();\n });\n}\n\nfunction removeHighlight(): void {\n window.removeEventListener(\"scroll\", scheduleHighlight, true);\n window.removeEventListener(\"resize\", scheduleHighlight);\n highlightObserver?.disconnect();\n highlightObserver = undefined;\n if (highlightFrame !== undefined) window.cancelAnimationFrame(highlightFrame);\n highlightFrame = undefined;\n overlay?.remove();\n overlay = undefined;\n highlightedId = null;\n}\n\nconst hook: DevtoolsHook = {\n snapshot() {\n return untrack(() => {\n const instances: DevtoolsInstance[] = [];\n for (const entry of active.values()) {\n const signals: Record<string, DevtoolsValue> = Object.create(null) as Record<string, DevtoolsValue>;\n for (const [name, value] of Object.entries(entry.bindings)) {\n if (isWritableSignal(value)) signals[name] = safeValue(value.value);\n }\n instances.push({\n id: entry.id,\n componentId: entry.componentId,\n name: entry.name,\n file: entry.file,\n props: safeValue(entry.props),\n signals,\n parentId: parentOf(entry)?.id ?? null,\n childIds: [],\n status: \"hydrated\",\n breakpoint: entry.breakpoint,\n });\n }\n const byId = new Map(instances.map((instance) => [instance.id, instance]));\n for (const instance of instances) {\n if (instance.parentId) byId.get(instance.parentId)?.childIds.push(instance.id);\n }\n return { instances, events: recent.map((event) => ({ ...event })), selectedId };\n });\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n select(id) {\n if (id !== null && !active.has(id)) return;\n selectedId = id;\n record(\"select\", id ?? \"\");\n },\n highlight(id) {\n removeHighlight();\n if (id === null) return;\n const entry = active.get(id);\n if (!entry) return;\n const document = entry.key.ownerDocument ?? window.document;\n const element = document.createElement(\"div\");\n element.setAttribute(\"data-meeko-devtools-highlight\", \"\");\n Object.assign(element.style, {\n position: \"fixed\",\n outline: \"2px solid #7c3aed\", background: \"rgba(124, 58, 237, 0.12)\",\n pointerEvents: \"none\", zIndex: \"2147483647\",\n });\n document.body.appendChild(element);\n overlay = element;\n highlightedId = id;\n positionHighlight();\n window.addEventListener(\"scroll\", scheduleHighlight, true);\n window.addEventListener(\"resize\", scheduleHighlight);\n highlightObserver = new window.MutationObserver((mutations) => {\n if (mutations.some((mutation) => mutation.target !== overlay && !overlay?.contains(mutation.target))) scheduleHighlight();\n });\n highlightObserver.observe(entry.scope.root, { attributes: true, characterData: true, childList: true, subtree: true });\n },\n setBreakpoint(id, enabled) {\n const entry = active.get(id);\n if (!entry) return;\n entry.breakpoint = enabled;\n const identity = identities.get(entry.key);\n if (identity) identity.breakpoint = enabled;\n record(\"breakpoint\", id, enabled ? \"enabled\" : \"disabled\");\n },\n};\n\nfunction unregister(entry: ActiveInstance): void {\n if (active.get(entry.id) !== entry) return;\n for (const stop of entry.stopSignals) stop();\n active.delete(entry.id);\n if (selectedId === entry.id) selectedId = null;\n if (highlightedId === entry.id) removeHighlight();\n record(\"unmount\", entry.id, undefined, undefined, entry);\n}\n\n/** Registra señales y ámbito de una instancia hidratada en Vite desarrollo. */\nexport function registerDevtoolsInstance(input: DevtoolsRegistration): () => void {\n if (typeof window === \"undefined\" || typeof Node === \"undefined\") return () => {};\n if (!window.__MEEKO_DEVTOOLS__) {\n window.__MEEKO_DEVTOOLS__ = hook;\n window.dispatchEvent(new window.Event(\"meeko:devtools-ready\"));\n }\n const key = keyOf(input.scope);\n const previous = identities.get(key);\n const identity = previous ?? { id: `meeko-${nextInstance++}`, breakpoint: false };\n identities.set(key, identity);\n const existing = active.get(identity.id);\n if (existing) unregister(existing);\n const entry: ActiveInstance = { ...input, id: identity.id, key, owner: currentEffectOwner(), breakpoint: identity.breakpoint, stopSignals: [] };\n active.set(entry.id, entry);\n for (const [name, value] of Object.entries(input.bindings)) {\n if (!isWritableSignal(value)) continue;\n const signal = value as Signal<unknown>;\n let initial = true;\n entry.stopSignals.push(effect(() => {\n const current = signal.value;\n if (initial) { initial = false; return; }\n record(\"signal\", entry.id, name, safeValue(current), entry, signalReadSites(signal, entry.owner));\n if (entry.breakpoint) {\n debugger;\n }\n }));\n }\n record(previous ? \"hmr\" : \"mount\", entry.id);\n return () => { unregister(entry); };\n}\n"]}
|