@meekojs/meeko 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +21 -19
  2. package/dist/autoimports-ts.d.ts +4 -4
  3. package/dist/autoimports-ts.js +86 -30
  4. package/dist/autoimports-ts.js.map +1 -1
  5. package/dist/autoimports.d.ts +2 -2
  6. package/dist/autoimports.js +23 -7
  7. package/dist/autoimports.js.map +1 -1
  8. package/dist/check.js +39 -10
  9. package/dist/check.js.map +1 -1
  10. package/dist/cli.js +37 -4
  11. package/dist/cli.js.map +1 -1
  12. package/dist/compiler/events.d.ts +2 -0
  13. package/dist/compiler/events.js +6 -0
  14. package/dist/compiler/events.js.map +1 -0
  15. package/dist/compiler/props.d.ts +12 -0
  16. package/dist/compiler/props.js +32 -0
  17. package/dist/compiler/props.js.map +1 -0
  18. package/dist/compiler.js +55 -12
  19. package/dist/compiler.js.map +1 -1
  20. package/dist/component-errors.d.ts +18 -0
  21. package/dist/component-errors.js +65 -0
  22. package/dist/component-errors.js.map +1 -0
  23. package/dist/devtools.js +2 -4
  24. package/dist/devtools.js.map +1 -1
  25. package/dist/dom.d.ts +11 -5
  26. package/dist/dom.js +288 -88
  27. package/dist/dom.js.map +1 -1
  28. package/dist/error-observer.d.ts +6 -0
  29. package/dist/error-observer.js +41 -0
  30. package/dist/error-observer.js.map +1 -0
  31. package/dist/framework/check-app.js +160 -5
  32. package/dist/framework/check-app.js.map +1 -1
  33. package/dist/framework/check-project.d.ts +4 -0
  34. package/dist/framework/check-project.js +42 -0
  35. package/dist/framework/check-project.js.map +1 -0
  36. package/dist/framework/client.d.ts +3 -0
  37. package/dist/framework/client.js +136 -33
  38. package/dist/framework/client.js.map +1 -1
  39. package/dist/framework/clients.js +12 -4
  40. package/dist/framework/clients.js.map +1 -1
  41. package/dist/framework/contracts-generate.js +66 -3
  42. package/dist/framework/contracts-generate.js.map +1 -1
  43. package/dist/framework/init.js +21 -200
  44. package/dist/framework/init.js.map +1 -1
  45. package/dist/framework/middleware.d.ts +14 -0
  46. package/dist/framework/middleware.js +16 -0
  47. package/dist/framework/middleware.js.map +1 -0
  48. package/dist/framework/page-contracts-check.d.ts +8 -0
  49. package/dist/framework/page-contracts-check.js +110 -0
  50. package/dist/framework/page-contracts-check.js.map +1 -0
  51. package/dist/framework/page-contracts-generate.d.ts +2 -0
  52. package/dist/framework/page-contracts-generate.js +94 -0
  53. package/dist/framework/page-contracts-generate.js.map +1 -0
  54. package/dist/framework/page.d.ts +7 -3
  55. package/dist/framework/page.js +3 -1
  56. package/dist/framework/page.js.map +1 -1
  57. package/dist/framework/prerender.js +11 -5
  58. package/dist/framework/prerender.js.map +1 -1
  59. package/dist/framework/project-templates.d.ts +3 -0
  60. package/dist/framework/project-templates.js +119 -0
  61. package/dist/framework/project-templates.js.map +1 -0
  62. package/dist/framework/project.d.ts +9 -0
  63. package/dist/framework/project.js +272 -0
  64. package/dist/framework/project.js.map +1 -0
  65. package/dist/framework/router.d.ts +3 -1
  66. package/dist/framework/router.js +94 -8
  67. package/dist/framework/router.js.map +1 -1
  68. package/dist/framework/server.d.ts +17 -3
  69. package/dist/framework/server.js +71 -24
  70. package/dist/framework/server.js.map +1 -1
  71. package/dist/framework/socket-contracts-generate.js +8 -5
  72. package/dist/framework/socket-contracts-generate.js.map +1 -1
  73. package/dist/framework/socket.d.ts +2 -0
  74. package/dist/framework/socket.js +119 -17
  75. package/dist/framework/socket.js.map +1 -1
  76. package/dist/framework/standard-schema-types.d.ts +7 -0
  77. package/dist/framework/standard-schema-types.js +69 -0
  78. package/dist/framework/standard-schema-types.js.map +1 -0
  79. package/dist/framework/state.d.ts +7 -0
  80. package/dist/framework/state.js +78 -14
  81. package/dist/framework/state.js.map +1 -1
  82. package/dist/framework/styles.d.ts +2 -0
  83. package/dist/framework/styles.js +6 -0
  84. package/dist/framework/styles.js.map +1 -0
  85. package/dist/framework/type-declarations.d.ts +5 -0
  86. package/dist/framework/type-declarations.js +84 -0
  87. package/dist/framework/type-declarations.js.map +1 -0
  88. package/dist/framework-server/contracts.d.ts +11 -2
  89. package/dist/framework-server/contracts.js +62 -7
  90. package/dist/framework-server/contracts.js.map +1 -1
  91. package/dist/framework-server/discovery.d.ts +4 -1
  92. package/dist/framework-server/discovery.js +21 -16
  93. package/dist/framework-server/discovery.js.map +1 -1
  94. package/dist/framework-server/local.d.ts +2 -0
  95. package/dist/framework-server/local.js +5 -3
  96. package/dist/framework-server/local.js.map +1 -1
  97. package/dist/framework-server/middleware.d.ts +4 -0
  98. package/dist/framework-server/middleware.js +56 -0
  99. package/dist/framework-server/middleware.js.map +1 -0
  100. package/dist/framework-server/node-upgrade.js +27 -9
  101. package/dist/framework-server/node-upgrade.js.map +1 -1
  102. package/dist/framework-server/node-websocket.js +4 -2
  103. package/dist/framework-server/node-websocket.js.map +1 -1
  104. package/dist/framework-server/session-stores.d.ts +9 -2
  105. package/dist/framework-server/session-stores.js +37 -11
  106. package/dist/framework-server/session-stores.js.map +1 -1
  107. package/dist/framework-server/sessions.d.ts +6 -0
  108. package/dist/framework-server/sessions.js +41 -10
  109. package/dist/framework-server/sessions.js.map +1 -1
  110. package/dist/framework-server/socket.js +62 -27
  111. package/dist/framework-server/socket.js.map +1 -1
  112. package/dist/framework-server.d.ts +2 -0
  113. package/dist/framework-server.js +1 -0
  114. package/dist/framework-server.js.map +1 -1
  115. package/dist/framework.d.ts +3 -1
  116. package/dist/framework.js +1 -0
  117. package/dist/framework.js.map +1 -1
  118. package/dist/hmr.js +74 -24
  119. package/dist/hmr.js.map +1 -1
  120. package/dist/index.d.ts +2 -0
  121. package/dist/index.js +1 -0
  122. package/dist/index.js.map +1 -1
  123. package/dist/init.js +27 -1
  124. package/dist/init.js.map +1 -1
  125. package/dist/internal.d.ts +2 -2
  126. package/dist/internal.js +2 -2
  127. package/dist/internal.js.map +1 -1
  128. package/dist/node.d.ts +5 -1
  129. package/dist/node.js +80 -10
  130. package/dist/node.js.map +1 -1
  131. package/dist/reactivity.d.ts +12 -3
  132. package/dist/reactivity.js +94 -17
  133. package/dist/reactivity.js.map +1 -1
  134. package/dist/types.d.ts +2 -0
  135. package/dist/types.js +3 -1
  136. package/dist/types.js.map +1 -1
  137. package/dist/vite.js +29 -9
  138. package/dist/vite.js.map +1 -1
  139. package/package.json +2 -2
package/dist/types.js CHANGED
@@ -4,6 +4,8 @@ import ts from "@typescript/typescript6";
4
4
  import { compileWithAutoImports } from "./autoimports.js";
5
5
  import { moduleSpecifiers, replaceModuleSpecifiers } from "./compiler/import-graph.js";
6
6
  import { projectRoot } from "./compiler/project-root.js";
7
+ /** Stable ownership marker for generated component declarations. */
8
+ export const componentTypeDeclarationMarker = "// @meeko-generated component-declaration v1";
7
9
  /** Genera declaraciones TypeScript para un componente y sus imports .meeko relativos. */
8
10
  export async function generateTypes(source, filename) {
9
11
  if (!filename.endsWith(".meeko"))
@@ -23,7 +25,7 @@ export async function generateTypes(source, filename) {
23
25
  const error = result.diagnostics?.find((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);
24
26
  if (error)
25
27
  throw new Error(ts.flattenDiagnosticMessageText(error.messageText, "\n"));
26
- declarations.set(path, result.outputText);
28
+ declarations.set(path, `${componentTypeDeclarationMarker}\n${result.outputText}`);
27
29
  for (const { value: specifier } of moduleSpecifiers(generated, path)) {
28
30
  if (!specifier.endsWith(".meeko"))
29
31
  continue;
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport { compileWithAutoImports } from \"./autoimports.js\";\nimport { moduleSpecifiers, replaceModuleSpecifiers } from \"./compiler/import-graph.js\";\nimport { projectRoot } from \"./compiler/project-root.js\";\n\n/** Genera declaraciones TypeScript para un componente y sus imports .meeko relativos. */\nexport async function generateTypes(source: string, filename: string): Promise<string[]> {\n if (!filename.endsWith(\".meeko\")) throw new TypeError(\"Type generation requires a .meeko input file\");\n const root = projectRoot(filename);\n const outputRoot = join(root, \".meeko\", \"types\");\n const declarations = new Map<string, string>();\n async function collect(content: string, path: string): Promise<void> {\n if (declarations.has(path)) return;\n const target = relative(root, path).split(/[\\\\/]/)[0] === \"server\" ? \"server\" : \"client\";\n const generated = (await compileWithAutoImports(content, path, {}, target)).code;\n const result = ts.transpileDeclaration(generated, {\n fileName: `${path}.ts`,\n compilerOptions: { declaration: true, emitDeclarationOnly: true },\n });\n const error = result.diagnostics?.find((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);\n if (error) throw new Error(ts.flattenDiagnosticMessageText(error.messageText, \"\\n\"));\n declarations.set(path, result.outputText);\n for (const { value: specifier } of moduleSpecifiers(generated, path)) {\n if (!specifier.endsWith(\".meeko\")) continue;\n if (!specifier.startsWith(\".\")) continue;\n const child = resolve(dirname(path), specifier);\n await collect(await readFile(child, \"utf8\"), child);\n }\n }\n await collect(source, resolve(filename));\n const outputs: string[] = [];\n for (const [path, declaration] of declarations) {\n const output = join(outputRoot, relative(root, path)).replace(/\\.meeko$/, \".d.meeko.ts\");\n const rewritten = replaceModuleSpecifiers(declaration, output, ({ value }) => {\n if (!value.startsWith(\".\") || value.endsWith(\".meeko\")) return value;\n const original = resolve(dirname(path), value);\n const target = relative(dirname(output), original).replaceAll(\"\\\\\", \"/\");\n return target.startsWith(\".\") ? target : `./${target}`;\n });\n await mkdir(dirname(output), { recursive: true });\n await writeFile(output, rewritten, \"utf8\");\n outputs.push(output);\n }\n return outputs;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport { compileWithAutoImports } from \"./autoimports.js\";\nimport { moduleSpecifiers, replaceModuleSpecifiers } from \"./compiler/import-graph.js\";\nimport { projectRoot } from \"./compiler/project-root.js\";\n\n/** Stable ownership marker for generated component declarations. */\nexport const componentTypeDeclarationMarker = \"// @meeko-generated component-declaration v1\";\n\n/** Genera declaraciones TypeScript para un componente y sus imports .meeko relativos. */\nexport async function generateTypes(source: string, filename: string): Promise<string[]> {\n if (!filename.endsWith(\".meeko\")) throw new TypeError(\"Type generation requires a .meeko input file\");\n const root = projectRoot(filename);\n const outputRoot = join(root, \".meeko\", \"types\");\n const declarations = new Map<string, string>();\n async function collect(content: string, path: string): Promise<void> {\n if (declarations.has(path)) return;\n const target = relative(root, path).split(/[\\\\/]/)[0] === \"server\" ? \"server\" : \"client\";\n const generated = (await compileWithAutoImports(content, path, {}, target)).code;\n const result = ts.transpileDeclaration(generated, {\n fileName: `${path}.ts`,\n compilerOptions: { declaration: true, emitDeclarationOnly: true },\n });\n const error = result.diagnostics?.find((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);\n if (error) throw new Error(ts.flattenDiagnosticMessageText(error.messageText, \"\\n\"));\n declarations.set(path, `${componentTypeDeclarationMarker}\\n${result.outputText}`);\n for (const { value: specifier } of moduleSpecifiers(generated, path)) {\n if (!specifier.endsWith(\".meeko\")) continue;\n if (!specifier.startsWith(\".\")) continue;\n const child = resolve(dirname(path), specifier);\n await collect(await readFile(child, \"utf8\"), child);\n }\n }\n await collect(source, resolve(filename));\n const outputs: string[] = [];\n for (const [path, declaration] of declarations) {\n const output = join(outputRoot, relative(root, path)).replace(/\\.meeko$/, \".d.meeko.ts\");\n const rewritten = replaceModuleSpecifiers(declaration, output, ({ value }) => {\n if (!value.startsWith(\".\") || value.endsWith(\".meeko\")) return value;\n const original = resolve(dirname(path), value);\n const target = relative(dirname(output), original).replaceAll(\"\\\\\", \"/\");\n return target.startsWith(\".\") ? target : `./${target}`;\n });\n await mkdir(dirname(output), { recursive: true });\n await writeFile(output, rewritten, \"utf8\");\n outputs.push(output);\n }\n return outputs;\n}\n"]}
package/dist/vite.js CHANGED
@@ -7,7 +7,7 @@ import { moduleSpecifiers } from "./compiler/import-graph.js";
7
7
  import { sourceMapForCompiled } from "./compiler/sourcemap.js";
8
8
  import { discoverAutoImports, transformAutoImports } from "./autoimports.js";
9
9
  import { transformTypeScriptAutoImports, typeScriptAutoImportMap } from "./autoimports-ts.js";
10
- import { discoverConfiguredRoutes } from "./framework/config.js";
10
+ import { discoverConfiguredRoutes, loadMeekoConfig, resolveConfigSources } from "./framework/config.js";
11
11
  const stylePrefix = "\0virtual:meeko-style:";
12
12
  const pageModules = new Map([
13
13
  ["virtual:meeko-client-pages", "client"],
@@ -68,7 +68,10 @@ export function meeko() {
68
68
  const normalizedId = normalizePath(resolve(id));
69
69
  const normalizedRoot = normalizePath(root);
70
70
  const clientModule = !serverTransform && normalizedId.startsWith(`${normalizedRoot}/`);
71
- if (clientModule && (normalizedId.startsWith(`${normalizedRoot}/server/`) || /\.server\.[cm]?[jt]sx?$/.test(id))) {
71
+ const sources = normalizedId.startsWith(`${normalizedRoot}/`) ? await resolveConfigSources(root) : [];
72
+ const serverDirectories = sources.map((entry) => `${normalizePath(entry.root)}/server/`);
73
+ const serverOnly = (moduleId) => serverDirectories.some((directory) => moduleId.startsWith(directory));
74
+ if (clientModule && (serverOnly(normalizedId) || /\.server\.[cm]?[jt]sx?$/.test(id))) {
72
75
  throw new Error(`Server-only module reached the client bundle: ${id}`);
73
76
  }
74
77
  if (serverTransform && normalizedId.startsWith(`${normalizedRoot}/`) && /\.client\.[cm]?[jt]sx?$/.test(id)) {
@@ -79,7 +82,7 @@ export function meeko() {
79
82
  return;
80
83
  for (const { value } of moduleSpecifiers(code, id)) {
81
84
  const dependency = await this.resolve(value, id, { skipSelf: true });
82
- if (dependency && normalizePath(dependency.id).startsWith(`${normalizedRoot}/server/`)) {
85
+ if (dependency && serverOnly(normalizePath(dependency.id))) {
83
86
  throw new Error(`Client module ${id} imports server-only module ${value}`);
84
87
  }
85
88
  }
@@ -89,7 +92,7 @@ export function meeko() {
89
92
  await checkBoundary(source);
90
93
  if (/\.[cm]?tsx?$/.test(id) && normalizedId.startsWith(`${normalizedRoot}/`)) {
91
94
  const registry = await discoverAutoImports(root);
92
- const transformed = transformTypeScriptAutoImports(source, id, root, registry);
95
+ const transformed = transformTypeScriptAutoImports(source, id, root, registry, sources.map((entry) => entry.root));
93
96
  if (transformed) {
94
97
  await checkBoundary(transformed);
95
98
  return { code: transformed, map: typeScriptAutoImportMap(source, transformed, id) };
@@ -116,12 +119,29 @@ export function meeko() {
116
119
  const generated = `${code}${cssImport}${hotCode}`;
117
120
  return transformWithOxc(generated, `${filename}.ts`, { lang: "ts" }, sourceMapForCompiled(generated, source, filename, mappings));
118
121
  },
119
- handleHotUpdate({ file, server }) {
122
+ async handleHotUpdate({ file, server }) {
120
123
  const normalized = normalizePath(file);
121
- const relative = normalized.slice(normalizePath(root).length + 1);
122
- const registrySource = /^(?:app\/(?:components|composables|utils|stores)|shared\/(?:types|schemas|utils|constants|enums)|server\/utils)\//.test(relative);
123
- const routesSource = /^(?:app\/pages|layers\/|modules\/)/.test(relative) || relative.startsWith("meeko.config.");
124
- if (!normalized.startsWith(runtimeDirectory) && !registrySource && !routesSource)
124
+ const normalizedRoot = normalizePath(root);
125
+ const configFile = normalized.startsWith(`${normalizedRoot}/meeko.config.`);
126
+ let sourceChanged = false;
127
+ if (normalized.startsWith(`${normalizedRoot}/`) && !configFile) {
128
+ const config = await loadMeekoConfig(root);
129
+ const sources = await resolveConfigSources(root, config);
130
+ for (const source of sources) {
131
+ const prefix = `${normalizePath(source.root)}/`;
132
+ if (!normalized.startsWith(prefix))
133
+ continue;
134
+ const path = normalized.slice(prefix.length);
135
+ const registrySource = /^(?:app\/(?:components|composables|utils|stores)|shared\/(?:types|schemas|utils|constants|enums)|server\/utils)\//.test(path) ||
136
+ (config.imports?.serverDirs ?? []).some((directory) => path.startsWith(`${directory.replaceAll("\\", "/").replace(/\/$/, "")}/`));
137
+ const routesSource = /^(?:app\/(?:pages|layouts|middleware)|server\/middleware)\//.test(path);
138
+ if (registrySource || routesSource) {
139
+ sourceChanged = true;
140
+ break;
141
+ }
142
+ }
143
+ }
144
+ if (!normalized.startsWith(runtimeDirectory) && !configFile && !sourceChanged)
125
145
  return;
126
146
  server.moduleGraph.invalidateAll();
127
147
  server.ws.send({ type: "full-reload" });
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { normalizePath, transformWithOxc } from \"vite\";\nimport type { Plugin } from \"vite\";\nimport { compile } from \"./compiler.js\";\nimport { moduleSpecifiers } from \"./compiler/import-graph.js\";\nimport { sourceMapForCompiled } from \"./compiler/sourcemap.js\";\nimport { discoverAutoImports, transformAutoImports } from \"./autoimports.js\";\nimport { transformTypeScriptAutoImports, typeScriptAutoImportMap } from \"./autoimports-ts.js\";\nimport { discoverConfiguredRoutes } from \"./framework/config.js\";\n\nconst stylePrefix = \"\\0virtual:meeko-style:\";\nconst pageModules = new Map<string, \"client\" | \"server\" | \"routes\">([\n [\"virtual:meeko-client-pages\", \"client\"],\n [\"virtual:meeko-server-pages\", \"server\"],\n [\"virtual:meeko-server-routes\", \"routes\"],\n]);\nconst runtimeDirectory = `${normalizePath(dirname(fileURLToPath(import.meta.url)))}/`;\n\n/** Transforma componentes .meeko para Vite, tanto en cliente como en SSR. */\nexport function meeko(): Plugin {\n let isDev = false;\n let ssrBuild = false;\n let root = \"\";\n const styles = new Map<string, string>();\n return {\n name: \"meeko:components\",\n enforce: \"pre\",\n configResolved(config) {\n isDev = config.command === \"serve\";\n ssrBuild = Boolean(config.build.ssr);\n root = config.root;\n },\n resolveId(id) {\n if (id.startsWith(\"virtual:meeko-style:\")) return `\\0${id}`;\n if (pageModules.has(id)) return `\\0${id}`;\n return null;\n },\n async load(id) {\n const kind = pageModules.get(id.slice(1));\n if (kind) {\n const routes = await discoverConfiguredRoutes(root);\n const files = kind === \"routes\"\n ? routes.flatMap((route) => route.sidecar ? [route.sidecar] : [])\n : routes.flatMap((route) => [route.file, ...route.layouts, ...(route.error ? [route.error] : [])]);\n const unique = [...new Set(files)];\n const entries = unique.map((file, index) => {\n const path = relative(root, file).replaceAll(\"\\\\\", \"/\");\n if (path === \"..\" || path.startsWith(\"../\") || isAbsolute(path)) throw new Error(`Page outside Meeko project: ${file}`);\n const specifier = `/${path}`;\n return kind === \"client\"\n ? `${JSON.stringify(specifier)}: () => import(${JSON.stringify(specifier)})`\n : `${JSON.stringify(specifier)}: module${index}`;\n });\n const imports = kind === \"client\" ? \"\" : unique.map((file, index) => {\n const path = relative(root, file).replaceAll(\"\\\\\", \"/\");\n return `import * as module${index} from ${JSON.stringify(`/${path}`)};`;\n }).join(\"\\n\");\n return `${imports}\\nexport const modules = {${entries.join(\",\")}};`;\n }\n if (!id.startsWith(stylePrefix) || !id.endsWith(\".css\")) return null;\n return styles.get(id) ?? null;\n },\n async transform(source, id, options) {\n const serverTransform = Boolean(options?.ssr || ssrBuild);\n const normalizedId = normalizePath(resolve(id));\n const normalizedRoot = normalizePath(root);\n const clientModule = !serverTransform && normalizedId.startsWith(`${normalizedRoot}/`);\n if (clientModule && (normalizedId.startsWith(`${normalizedRoot}/server/`) || /\\.server\\.[cm]?[jt]sx?$/.test(id))) {\n throw new Error(`Server-only module reached the client bundle: ${id}`);\n }\n if (serverTransform && normalizedId.startsWith(`${normalizedRoot}/`) && /\\.client\\.[cm]?[jt]sx?$/.test(id)) {\n throw new Error(`Client-only module reached the server bundle: ${id}`);\n }\n const checkBoundary = async (code: string): Promise<void> => {\n if (!clientModule) return;\n for (const { value } of moduleSpecifiers(code, id)) {\n const dependency = await this.resolve(value, id, { skipSelf: true });\n if (dependency && normalizePath(dependency.id).startsWith(`${normalizedRoot}/server/`)) {\n throw new Error(`Client module ${id} imports server-only module ${value}`);\n }\n }\n };\n if (!id.endsWith(\".meeko\")) {\n if (/\\.[cm]?[jt]sx?$/.test(id) && clientModule) await checkBoundary(source);\n if (/\\.[cm]?tsx?$/.test(id) && normalizedId.startsWith(`${normalizedRoot}/`)) {\n const registry = await discoverAutoImports(root);\n const transformed = transformTypeScriptAutoImports(source, id, root, registry);\n if (transformed) {\n await checkBoundary(transformed);\n return { code: transformed, map: typeScriptAutoImportMap(source, transformed, id) };\n }\n }\n return null;\n }\n const filename = normalizePath(resolve(id));\n const result = compile(source, filename, { hot: isDev });\n const styleId = `${stylePrefix}${createHash(\"sha256\").update(filename).update(\"\\0\").update(result.css).digest(\"hex\")}.css`;\n if (result.css) styles.set(styleId, result.css);\n const cssImport = result.css ? `\\nimport ${JSON.stringify(styleId.slice(1))};` : \"\";\n const hotCode = isDev ? `\\nif (import.meta.hot) {\\n __meeko.enableHotModule(__hotId);\\n import.meta.hot.accept((next) => { if (next) __meeko.replaceHotModule(__hotId, next); });\\n}\\n` : \"\";\n const registry = await discoverAutoImports(root);\n const code = transformAutoImports(source, filename, result.code, registry, serverTransform ? \"server\" : \"client\");\n await checkBoundary(code);\n const shifted = code.length - result.code.length;\n const mappings = result.mappings.map((mapping) => ({\n ...mapping,\n generatedStart: mapping.generatedStart + shifted,\n generatedEnd: mapping.generatedEnd + shifted,\n }));\n const generated = `${code}${cssImport}${hotCode}`;\n return transformWithOxc(generated, `${filename}.ts`, { lang: \"ts\" }, sourceMapForCompiled(generated, source, filename, mappings));\n },\n handleHotUpdate({ file, server }) {\n const normalized = normalizePath(file);\n const relative = normalized.slice(normalizePath(root).length + 1);\n const registrySource = /^(?:app\\/(?:components|composables|utils|stores)|shared\\/(?:types|schemas|utils|constants|enums)|server\\/utils)\\//.test(relative);\n const routesSource = /^(?:app\\/pages|layers\\/|modules\\/)/.test(relative) || relative.startsWith(\"meeko.config.\");\n if (!normalized.startsWith(runtimeDirectory) && !registrySource && !routesSource) return;\n server.moduleGraph.invalidateAll();\n server.ws.send({ type: \"full-reload\" });\n return [];\n },\n };\n}\n"]}
1
+ {"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { normalizePath, transformWithOxc } from \"vite\";\nimport type { Plugin } from \"vite\";\nimport { compile } from \"./compiler.js\";\nimport { moduleSpecifiers } from \"./compiler/import-graph.js\";\nimport { sourceMapForCompiled } from \"./compiler/sourcemap.js\";\nimport { discoverAutoImports, transformAutoImports } from \"./autoimports.js\";\nimport { transformTypeScriptAutoImports, typeScriptAutoImportMap } from \"./autoimports-ts.js\";\nimport { discoverConfiguredRoutes, loadMeekoConfig, resolveConfigSources } from \"./framework/config.js\";\n\nconst stylePrefix = \"\\0virtual:meeko-style:\";\nconst pageModules = new Map<string, \"client\" | \"server\" | \"routes\">([\n [\"virtual:meeko-client-pages\", \"client\"],\n [\"virtual:meeko-server-pages\", \"server\"],\n [\"virtual:meeko-server-routes\", \"routes\"],\n]);\nconst runtimeDirectory = `${normalizePath(dirname(fileURLToPath(import.meta.url)))}/`;\n\n/** Transforma componentes .meeko para Vite, tanto en cliente como en SSR. */\nexport function meeko(): Plugin {\n let isDev = false;\n let ssrBuild = false;\n let root = \"\";\n const styles = new Map<string, string>();\n return {\n name: \"meeko:components\",\n enforce: \"pre\",\n configResolved(config) {\n isDev = config.command === \"serve\";\n ssrBuild = Boolean(config.build.ssr);\n root = config.root;\n },\n resolveId(id) {\n if (id.startsWith(\"virtual:meeko-style:\")) return `\\0${id}`;\n if (pageModules.has(id)) return `\\0${id}`;\n return null;\n },\n async load(id) {\n const kind = pageModules.get(id.slice(1));\n if (kind) {\n const routes = await discoverConfiguredRoutes(root);\n const files = kind === \"routes\"\n ? routes.flatMap((route) => route.sidecar ? [route.sidecar] : [])\n : routes.flatMap((route) => [route.file, ...route.layouts, ...(route.error ? [route.error] : [])]);\n const unique = [...new Set(files)];\n const entries = unique.map((file, index) => {\n const path = relative(root, file).replaceAll(\"\\\\\", \"/\");\n if (path === \"..\" || path.startsWith(\"../\") || isAbsolute(path)) throw new Error(`Page outside Meeko project: ${file}`);\n const specifier = `/${path}`;\n return kind === \"client\"\n ? `${JSON.stringify(specifier)}: () => import(${JSON.stringify(specifier)})`\n : `${JSON.stringify(specifier)}: module${index}`;\n });\n const imports = kind === \"client\" ? \"\" : unique.map((file, index) => {\n const path = relative(root, file).replaceAll(\"\\\\\", \"/\");\n return `import * as module${index} from ${JSON.stringify(`/${path}`)};`;\n }).join(\"\\n\");\n return `${imports}\\nexport const modules = {${entries.join(\",\")}};`;\n }\n if (!id.startsWith(stylePrefix) || !id.endsWith(\".css\")) return null;\n return styles.get(id) ?? null;\n },\n async transform(source, id, options) {\n const serverTransform = Boolean(options?.ssr || ssrBuild);\n const normalizedId = normalizePath(resolve(id));\n const normalizedRoot = normalizePath(root);\n const clientModule = !serverTransform && normalizedId.startsWith(`${normalizedRoot}/`);\n const sources = normalizedId.startsWith(`${normalizedRoot}/`) ? await resolveConfigSources(root) : [];\n const serverDirectories = sources.map((entry) => `${normalizePath(entry.root)}/server/`);\n const serverOnly = (moduleId: string): boolean => serverDirectories.some((directory) => moduleId.startsWith(directory));\n if (clientModule && (serverOnly(normalizedId) || /\\.server\\.[cm]?[jt]sx?$/.test(id))) {\n throw new Error(`Server-only module reached the client bundle: ${id}`);\n }\n if (serverTransform && normalizedId.startsWith(`${normalizedRoot}/`) && /\\.client\\.[cm]?[jt]sx?$/.test(id)) {\n throw new Error(`Client-only module reached the server bundle: ${id}`);\n }\n const checkBoundary = async (code: string): Promise<void> => {\n if (!clientModule) return;\n for (const { value } of moduleSpecifiers(code, id)) {\n const dependency = await this.resolve(value, id, { skipSelf: true });\n if (dependency && serverOnly(normalizePath(dependency.id))) {\n throw new Error(`Client module ${id} imports server-only module ${value}`);\n }\n }\n };\n if (!id.endsWith(\".meeko\")) {\n if (/\\.[cm]?[jt]sx?$/.test(id) && clientModule) await checkBoundary(source);\n if (/\\.[cm]?tsx?$/.test(id) && normalizedId.startsWith(`${normalizedRoot}/`)) {\n const registry = await discoverAutoImports(root);\n const transformed = transformTypeScriptAutoImports(source, id, root, registry, sources.map((entry) => entry.root));\n if (transformed) {\n await checkBoundary(transformed);\n return { code: transformed, map: typeScriptAutoImportMap(source, transformed, id) };\n }\n }\n return null;\n }\n const filename = normalizePath(resolve(id));\n const result = compile(source, filename, { hot: isDev });\n const styleId = `${stylePrefix}${createHash(\"sha256\").update(filename).update(\"\\0\").update(result.css).digest(\"hex\")}.css`;\n if (result.css) styles.set(styleId, result.css);\n const cssImport = result.css ? `\\nimport ${JSON.stringify(styleId.slice(1))};` : \"\";\n const hotCode = isDev ? `\\nif (import.meta.hot) {\\n __meeko.enableHotModule(__hotId);\\n import.meta.hot.accept((next) => { if (next) __meeko.replaceHotModule(__hotId, next); });\\n}\\n` : \"\";\n const registry = await discoverAutoImports(root);\n const code = transformAutoImports(source, filename, result.code, registry, serverTransform ? \"server\" : \"client\");\n await checkBoundary(code);\n const shifted = code.length - result.code.length;\n const mappings = result.mappings.map((mapping) => ({\n ...mapping,\n generatedStart: mapping.generatedStart + shifted,\n generatedEnd: mapping.generatedEnd + shifted,\n }));\n const generated = `${code}${cssImport}${hotCode}`;\n return transformWithOxc(generated, `${filename}.ts`, { lang: \"ts\" }, sourceMapForCompiled(generated, source, filename, mappings));\n },\n async handleHotUpdate({ file, server }) {\n const normalized = normalizePath(file);\n const normalizedRoot = normalizePath(root);\n const configFile = normalized.startsWith(`${normalizedRoot}/meeko.config.`);\n let sourceChanged = false;\n if (normalized.startsWith(`${normalizedRoot}/`) && !configFile) {\n const config = await loadMeekoConfig(root);\n const sources = await resolveConfigSources(root, config);\n for (const source of sources) {\n const prefix = `${normalizePath(source.root)}/`;\n if (!normalized.startsWith(prefix)) continue;\n const path = normalized.slice(prefix.length);\n const registrySource = /^(?:app\\/(?:components|composables|utils|stores)|shared\\/(?:types|schemas|utils|constants|enums)|server\\/utils)\\//.test(path) ||\n (config.imports?.serverDirs ?? []).some((directory) => path.startsWith(`${directory.replaceAll(\"\\\\\", \"/\").replace(/\\/$/, \"\")}/`));\n const routesSource = /^(?:app\\/(?:pages|layouts|middleware)|server\\/middleware)\\//.test(path);\n if (registrySource || routesSource) { sourceChanged = true; break; }\n }\n }\n if (!normalized.startsWith(runtimeDirectory) && !configFile && !sourceChanged) return;\n server.moduleGraph.invalidateAll();\n server.ws.send({ type: \"full-reload\" });\n return [];\n },\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meekojs/meeko",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "packageManager": "pnpm@12.14.0",
5
5
  "description": "Typed .meeko component engine with SSR, hydration, signals, Vite, and DevTools.",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  "prepack": "tsc -p tsconfig.build.json",
46
46
  "build": "tsc -p tsconfig.build.json",
47
47
  "check": "tsc -p tsconfig.json --noEmit",
48
- "test": "pnpm run build && pnpm run example:compile && tsx --test tests/*.test.ts",
48
+ "test": "pnpm run build && pnpm run example:compile && tsx --test --test-concurrency=1 tests/*.test.ts",
49
49
  "example:compile": "node dist/cli.js compile examples/counter/Counter.meeko examples/counter/Counter.generated.ts && node dist/cli.js compile examples/attributes/Attributes.meeko examples/attributes/Attributes.generated.ts && node dist/cli.js compile examples/regions/Regions.meeko examples/regions/Regions.generated.ts && node dist/cli.js compile examples/primitives/Primitives.meeko examples/primitives/Primitives.generated.ts",
50
50
  "example:bundle": "pnpm run build && pnpm run example:compile && esbuild examples/counter/client.ts --bundle --format=esm --platform=browser --target=es2022 --outfile=examples/counter/client.bundle.js",
51
51
  "example:check": "tsc -p examples/counter/tsconfig.json --noEmit",