@meekojs/meeko 0.0.2 → 0.0.4
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 +40 -2
- package/dist/autoimports-ts.d.ts +26 -0
- package/dist/autoimports-ts.js +127 -0
- package/dist/autoimports-ts.js.map +1 -0
- package/dist/autoimports.d.ts +21 -0
- package/dist/autoimports.js +285 -0
- package/dist/autoimports.js.map +1 -0
- package/dist/check.js +35 -23
- package/dist/check.js.map +1 -0
- package/dist/cli.js +59 -19
- package/dist/cli.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/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 +22 -11
- package/dist/compiler.js.map +1 -0
- package/dist/devtools-ui/index.js +56 -6
- package/dist/devtools-ui/index.js.map +1 -0
- package/dist/devtools.d.ts +9 -0
- package/dist/devtools.js +16 -6
- package/dist/devtools.js.map +1 -0
- package/dist/dom.d.ts +17 -6
- package/dist/dom.js +86 -19
- package/dist/dom.js.map +1 -0
- package/dist/framework/check-app.d.ts +5 -0
- package/dist/framework/check-app.js +59 -0
- package/dist/framework/check-app.js.map +1 -0
- package/dist/framework/client.d.ts +45 -0
- package/dist/framework/client.js +146 -0
- package/dist/framework/client.js.map +1 -0
- package/dist/framework/clients.d.ts +82 -0
- package/dist/framework/clients.js +182 -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 +227 -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 +362 -0
- package/dist/framework/init.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.d.ts +60 -0
- package/dist/framework/page.js +42 -0
- package/dist/framework/page.js.map +1 -0
- package/dist/framework/prerender.d.ts +14 -0
- package/dist/framework/prerender.js +104 -0
- package/dist/framework/prerender.js.map +1 -0
- package/dist/framework/router.d.ts +39 -0
- package/dist/framework/router.js +173 -0
- package/dist/framework/router.js.map +1 -0
- package/dist/framework/server.d.ts +51 -0
- package/dist/framework/server.js +192 -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 +159 -0
- package/dist/framework/socket-contracts-generate.js.map +1 -0
- package/dist/framework/socket.d.ts +70 -0
- package/dist/framework/socket.js +150 -0
- package/dist/framework/socket.js.map +1 -0
- package/dist/framework/state.d.ts +15 -0
- package/dist/framework/state.js +72 -0
- package/dist/framework/state.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 +64 -0
- package/dist/framework-server/contracts.js +129 -0
- package/dist/framework-server/contracts.js.map +1 -0
- package/dist/framework-server/discovery.d.ts +40 -0
- package/dist/framework-server/discovery.js +252 -0
- package/dist/framework-server/discovery.js.map +1 -0
- package/dist/framework-server/local.d.ts +19 -0
- package/dist/framework-server/local.js +98 -0
- package/dist/framework-server/local.js.map +1 -0
- package/dist/framework-server/node-upgrade.d.ts +23 -0
- package/dist/framework-server/node-upgrade.js +78 -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 +125 -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 +66 -0
- package/dist/framework-server/session-stores.js +96 -0
- package/dist/framework-server/session-stores.js.map +1 -0
- package/dist/framework-server/sessions.d.ts +64 -0
- package/dist/framework-server/sessions.js +136 -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 +161 -0
- package/dist/framework-server/socket.js.map +1 -0
- package/dist/framework-server.d.ts +21 -0
- package/dist/framework-server.js +12 -0
- package/dist/framework-server.js.map +1 -0
- package/dist/framework.d.ts +29 -0
- package/dist/framework.js +13 -0
- package/dist/framework.js.map +1 -0
- package/dist/hmr.js +1 -0
- package/dist/hmr.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +2 -0
- package/dist/init.js +209 -0
- package/dist/init.js.map +1 -0
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -0
- package/dist/node.d.ts +12 -0
- package/dist/node.js +52 -0
- package/dist/node.js.map +1 -0
- package/dist/reactivity.d.ts +25 -1
- package/dist/reactivity.js +69 -10
- package/dist/reactivity.js.map +1 -0
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -0
- package/dist/types.js +23 -8
- package/dist/types.js.map +1 -0
- package/dist/vite.js +91 -6
- package/dist/vite.js.map +1 -0
- package/package.json +19 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoimports.js","sourceRoot":"","sources":["../src/autoimports.ts"],"names":[],"mappings":"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","sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { extname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport { compile } from \"./compiler.js\";\nimport type { CompileOptions, CompileResult } from \"./compiler.js\";\nimport { projectRoot } from \"./compiler/project-root.js\";\nimport { parseSfc } from \"./compiler/sfc.js\";\nimport { loadMeekoConfig, readMeekoConfigSync, resolveConfigSources } from \"./framework/config.js\";\n\nexport type ImportScope = \"client\" | \"server\" | \"shared\";\nexport interface AutoImport {\n name: string;\n imported: string;\n file: string;\n scope: ImportScope;\n typeOnly: boolean;\n component: boolean;\n specifier?: string;\n}\n\nconst directories = [\n \"app/components\", \"app/composables\", \"app/utils\", \"app/stores\",\n \"shared/types\", \"shared/schemas\", \"shared/utils\", \"shared/constants\", \"shared/enums\",\n \"server/utils\",\n] as const;\n\nfunction scopeOf(file: string): ImportScope {\n if (/\\.shared\\.[cm]?tsx?$/.test(file)) return \"shared\";\n if (/\\.server\\.[cm]?tsx?$/.test(file)) return \"server\";\n if (/\\.client\\.[cm]?tsx?$/.test(file)) return \"client\";\n if (file.includes(`${sep}server${sep}`)) return \"server\";\n if (file.includes(`${sep}app${sep}`)) return \"client\";\n return \"shared\";\n}\n\nasync function filesIn(path: string): Promise<string[]> {\n const entries = await readdir(path, { withFileTypes: true }).catch(() => []);\n const files: string[] = [];\n for (const entry of entries) {\n const filename = join(path, entry.name);\n if (entry.isDirectory()) files.push(...await filesIn(filename));\n else if (/\\.(?:meeko|[cm]?ts)$/.test(entry.name) && !/\\.(?:test|spec|d)\\.[cm]?ts$/.test(entry.name)) files.push(filename);\n }\n return files;\n}\n\nfunction filesInSync(path: string): string[] {\n let entries;\n try { entries = readdirSync(path, { withFileTypes: true }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return []; throw error; }\n const files: string[] = [];\n for (const entry of entries) {\n const filename = join(path, entry.name);\n if (entry.isDirectory()) files.push(...filesInSync(filename));\n else if (/\\.(?:meeko|[cm]?ts)$/.test(entry.name) && !/\\.(?:test|spec|d)\\.[cm]?ts$/.test(entry.name)) files.push(filename);\n }\n return files;\n}\n\nfunction builtins(root: string): AutoImport[] {\n const entries: AutoImport[] = [\n ...[\"signal\", \"computed\", \"effect\", \"batch\", \"onCleanup\", \"provide\", \"inject\", \"createContext\"].map((name): AutoImport => ({ name, imported: name, file: \"@meekojs/meeko\", specifier: \"@meekojs/meeko\", scope: \"shared\", typeOnly: false, component: false })),\n ...[\"useState\", \"href\"].map((name): AutoImport => ({ name, imported: name, file: \"@meekojs/meeko/framework\", specifier: \"@meekojs/meeko/framework\", scope: \"shared\", typeOnly: false, component: false })),\n ];\n for (const scope of [\"client\", \"server\"] as const) {\n const file = join(root, \".meeko\", \"generated\", `clients.${scope}.ts`);\n if (!existsSync(file)) continue;\n for (const name of [\"api\", \"rpc\", \"socket\", \"useSocket\"]) entries.push({ name, imported: name, file, scope, typeOnly: false, component: false });\n }\n if (!entries.some((entry) => entry.name === \"useSocket\")) {\n entries.push({ name: \"useSocket\", imported: \"useSocket\", file: \"@meekojs/meeko/framework\", specifier: \"@meekojs/meeko/framework\", scope: \"shared\", typeOnly: false, component: false });\n }\n return entries;\n}\n\nfunction addFileImports(result: AutoImport[], root: string, directory: string, file: string, source?: string): void {\n const scope = scopeOf(file);\n if (extname(file) === \".meeko\") {\n if (directory !== \"app/components\") return;\n const path = relative(join(root, directory), file).replace(/\\.meeko$/, \"\");\n const name = path.split(/[\\\\/]/).map((part) => part.replace(/(^|[-_])(\\w)/g, (_, _dash: string, letter: string) => letter.toUpperCase())).join(\"\");\n result.push({ name, imported: \"*\", file, scope, typeOnly: false, component: true });\n return;\n }\n const ast = ts.createSourceFile(file, source ?? \"\", ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n for (const statement of ast.statements) {\n const exported = ts.canHaveModifiers(statement) && ts.getModifiers(statement)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword);\n if (exported && (ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement) || ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement) || ts.isEnumDeclaration(statement)) && statement.name) {\n result.push({ name: statement.name.text, imported: statement.name.text, file, scope, typeOnly: ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement), component: false });\n }\n if (exported && ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) if (ts.isIdentifier(declaration.name)) {\n result.push({ name: declaration.name.text, imported: declaration.name.text, file, scope, typeOnly: false, component: false });\n }\n }\n if (ts.isExportDeclaration(statement) && statement.exportClause && ts.isNamedExports(statement.exportClause)) {\n for (const element of statement.exportClause.elements) result.push({ name: element.name.text, imported: element.name.text, file, scope, typeOnly: statement.isTypeOnly || element.isTypeOnly, component: false });\n }\n }\n}\n\n/** Construye el registro a partir de exports sintácticos, sin ejecutar módulos de la aplicación. */\nexport async function discoverAutoImports(root: string): Promise<AutoImport[]> {\n const result: AutoImport[] = builtins(root);\n const config = await loadMeekoConfig(root);\n const sources = await resolveConfigSources(root, config);\n for (const source of sources) {\n for (const directory of configuredDirectories(config.imports?.serverDirs)) {\n for (const file of await filesIn(join(source.root, directory))) {\n addFileImports(result, source.root, directory, file, extname(file) === \".meeko\" ? undefined : await readFile(file, \"utf8\"));\n }\n }\n }\n return result;\n}\n\n/** Same static registry used by the synchronous VS Code Language Service. */\nexport function discoverAutoImportsSync(root: string): AutoImport[] {\n const result = builtins(root);\n const config = readMeekoConfigSync(root);\n const sourceRoots = [resolve(root)];\n for (const entry of [...(config.extends ?? []), ...(config.modules ?? [])]) {\n const sourceRoot = resolve(root, entry);\n const path = relative(root, sourceRoot);\n if (path === \"..\" || path.startsWith(`..${sep}`) || isAbsolute(path)) throw new Error(`Configured autoimport source escapes project root: ${entry}`);\n sourceRoots.push(sourceRoot);\n }\n for (const sourceRoot of sourceRoots) {\n for (const directory of configuredDirectories(config.imports?.serverDirs)) {\n for (const file of filesInSync(join(sourceRoot, directory))) {\n addFileImports(result, sourceRoot, directory, file, extname(file) === \".meeko\" ? undefined : readFileSync(file, \"utf8\"));\n }\n }\n }\n return result;\n}\n\nfunction configuredDirectories(serverDirs: readonly string[] | undefined): readonly string[] {\n const result = new Set<string>(directories);\n for (const raw of serverDirs ?? []) {\n const directory = raw.replaceAll(\"\\\\\", \"/\").replace(/\\/$/, \"\");\n const parts = directory.split(\"/\");\n if (parts[0] !== \"server\" || parts.length < 2 || parts.some((part) => !part || part === \".\" || part === \"..\")) {\n throw new Error(`Autoimport serverDir must be a relative path under server/: ${raw}`);\n }\n result.add(directory);\n }\n return [...result];\n}\n\nfunction bindingNames(name: ts.BindingName, names: Set<string>): void {\n if (ts.isIdentifier(name)) names.add(name.text);\n else for (const element of name.elements) if (ts.isBindingElement(element)) bindingNames(element.name, names);\n}\n\nfunction scopeNames(node: ts.Node): Set<string> {\n const names = new Set<string>();\n if (ts.isFunctionLike(node)) {\n for (const parameter of node.parameters) bindingNames(parameter.name, names);\n for (const parameter of node.typeParameters ?? []) names.add(parameter.name.text);\n }\n if (ts.isCatchClause(node) && node.variableDeclaration) bindingNames(node.variableDeclaration.name, names);\n if (ts.isForStatement(node) && node.initializer && ts.isVariableDeclarationList(node.initializer)) {\n for (const declaration of node.initializer.declarations) bindingNames(declaration.name, names);\n }\n if ((ts.isForOfStatement(node) || ts.isForInStatement(node)) && ts.isVariableDeclarationList(node.initializer)) {\n for (const declaration of node.initializer.declarations) bindingNames(declaration.name, names);\n }\n if (ts.isSourceFile(node) || ts.isBlock(node)) {\n for (const statement of node.statements) {\n if (ts.isVariableStatement(statement)) for (const declaration of statement.declarationList.declarations) bindingNames(declaration.name, names);\n if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement) || ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement) || ts.isEnumDeclaration(statement)) && statement.name) names.add(statement.name.text);\n if (ts.isImportDeclaration(statement)) {\n const clause = statement.importClause;\n if (clause?.name) names.add(clause.name.text);\n if (clause?.namedBindings) {\n if (ts.isNamespaceImport(clause.namedBindings)) names.add(clause.namedBindings.name.text);\n else for (const element of clause.namedBindings.elements) names.add(element.name.text);\n }\n }\n }\n }\n return names;\n}\n\nfunction introducesScope(node: ts.Node): boolean {\n return ts.isSourceFile(node) || ts.isBlock(node) || ts.isFunctionLike(node) || ts.isCatchClause(node)\n || ts.isForStatement(node) || ts.isForOfStatement(node) || ts.isForInStatement(node);\n}\n\nfunction isReference(node: ts.Identifier): boolean {\n const parent = node.parent;\n if (!parent) return false;\n if (ts.isPropertyAccessExpression(parent) && parent.name === node) return false;\n if (ts.isQualifiedName(parent) && parent.right === node) return false;\n if (ts.isPropertyAssignment(parent) && parent.name === node) return false;\n if (ts.isPropertyDeclaration(parent) && parent.name === node) return false;\n if (ts.isMethodDeclaration(parent) && parent.name === node) return false;\n if (ts.isImportSpecifier(parent) || ts.isExportSpecifier(parent) || ts.isImportClause(parent) || ts.isNamespaceImport(parent)) return false;\n if (ts.isTypeReferenceNode(parent) && parent.typeName === node) return true;\n if (ts.isParameter(parent) && parent.name === node) return false;\n if (ts.isTypeParameterDeclaration(parent) && parent.name === node) return false;\n if (ts.isVariableDeclaration(parent) && parent.name === node) return false;\n if ((ts.isFunctionDeclaration(parent) || ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent) || ts.isTypeAliasDeclaration(parent)) && parent.name === node) return false;\n if (ts.isPropertySignature(parent) && parent.name === node) return false;\n return true;\n}\n\n/** Añade imports ESM para referencias libres del módulo generado. */\nexport function applyAutoImports(code: string, filename: string, registry: readonly AutoImport[], target: \"client\" | \"server\"): string {\n const ast = ts.createSourceFile(filename, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const referenced = new Set<string>();\n const visit = (node: ts.Node, scopes: readonly Set<string>[]): void => {\n const active = introducesScope(node) ? [...scopes, scopeNames(node)] : scopes;\n if (ts.isIdentifier(node) && isReference(node) && !active.some((scope) => scope.has(node.text))) referenced.add(node.text);\n ts.forEachChild(node, (child) => visit(child, active));\n };\n visit(ast, []);\n const imports: string[] = [];\n for (const name of [...referenced].sort()) {\n const candidates = registry.filter((entry) => entry.name === name);\n if (candidates.length === 0) continue;\n const allowed = candidates.filter((entry) => entry.scope === \"shared\" || entry.scope === target);\n if (allowed.length === 0) throw new Error(`Autoimport ${name} is unavailable in ${target} scope`);\n if (allowed.length > 1) throw new Error(`Ambiguous autoimport ${name}: ${allowed.map((entry) => entry.file).join(\", \")}`);\n const entry = allowed[0]!;\n let specifier = entry.specifier ?? relative(resolve(filename, \"..\"), entry.file).replaceAll(\"\\\\\", \"/\");\n if (!entry.specifier && !specifier.startsWith(\".\")) specifier = `./${specifier}`;\n if (!entry.component && !entry.specifier) specifier = specifier.replace(/\\.[cm]?ts$/, \".js\");\n if (entry.component) imports.push(`import * as ${name} from ${JSON.stringify(specifier)};`);\n else imports.push(`import ${entry.typeOnly ? \"type \" : \"\"}{ ${entry.imported} as ${name} } from ${JSON.stringify(specifier)};`);\n }\n return imports.length ? `${imports.join(\"\\n\")}\\n${code}` : code;\n}\n\n/** Transforma un SFC usando exactamente el mismo compilador que el plugin Vite. */\nexport function transformAutoImports(source: string, filename: string, code: string, registry: readonly AutoImport[], target: \"client\" | \"server\"): string {\n parseSfc(source, filename);\n return applyAutoImports(code, filename, registry, target);\n}\n\n/** Compile result shared by Vite, CLI checks and declaration generation. */\nexport async function compileWithAutoImports(source: string, filename: string, options: CompileOptions = {}, target: \"client\" | \"server\" = \"client\"): Promise<CompileResult> {\n const compiled = compile(source, filename, options);\n const registry = await discoverAutoImports(projectRoot(filename));\n const code = transformAutoImports(source, filename, compiled.code, registry, target);\n const offset = code.length - compiled.code.length;\n return {\n ...compiled,\n code,\n mappings: offset ? compiled.mappings.map((mapping) => ({ ...mapping, generatedStart: mapping.generatedStart + offset, generatedEnd: mapping.generatedEnd + offset })) : compiled.mappings,\n };\n}\n"]}
|
package/dist/check.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
import { readFile,
|
|
4
|
-
import {
|
|
3
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
|
-
import {
|
|
7
|
+
import { compileWithAutoImports } from "./autoimports.js";
|
|
8
8
|
import { originalOffset } from "./compiler/mapping.js";
|
|
9
|
+
import { moduleSpecifiers } from "./compiler/import-graph.js";
|
|
10
|
+
import { projectRoot } from "./compiler/project-root.js";
|
|
9
11
|
import { compileError, MeekoCompileError, locate } from "./compiler/sfc.js";
|
|
10
12
|
const execFileAsync = promisify(execFile);
|
|
11
13
|
const tscPath = join(dirname(fileURLToPath(import.meta.resolve("typescript/package.json"))), "bin", "tsc");
|
|
@@ -13,39 +15,49 @@ async function compileGraph(source, filename) {
|
|
|
13
15
|
const byOriginal = new Map();
|
|
14
16
|
const byGenerated = new Map();
|
|
15
17
|
const nonce = randomUUID();
|
|
18
|
+
const rootDirectory = projectRoot(filename);
|
|
19
|
+
const generatedDirectory = join(rootDirectory, ".meeko", "check", nonce);
|
|
16
20
|
async function add(original, content) {
|
|
17
21
|
const previous = byOriginal.get(original);
|
|
18
22
|
if (previous)
|
|
19
23
|
return previous;
|
|
20
|
-
const
|
|
24
|
+
const target = relative(rootDirectory, original).split(/[\\/]/)[0] === "server" ? "server" : "client";
|
|
25
|
+
const compiled = await compileWithAutoImports(content, original, {}, target);
|
|
21
26
|
const entry = {
|
|
22
27
|
original, source: content, code: compiled.code,
|
|
23
|
-
generated: join(
|
|
28
|
+
generated: join(generatedDirectory, relative(rootDirectory, original) + ".ts"),
|
|
24
29
|
mappings: compiled.mappings.map((mapping) => ({ ...mapping })),
|
|
25
30
|
};
|
|
26
31
|
byOriginal.set(original, entry);
|
|
27
32
|
byGenerated.set(entry.generated, entry);
|
|
28
|
-
const importPattern = /\b(?:from\s*|import\s*)["']([^"']+\.meeko)["']/g;
|
|
29
33
|
const edits = [];
|
|
30
|
-
for (const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
for (const specifier of moduleSpecifiers(entry.code, entry.generated)) {
|
|
35
|
+
const { value, start, end } = specifier;
|
|
36
|
+
if (!value.endsWith(".meeko") && !value.startsWith("."))
|
|
37
|
+
continue;
|
|
38
|
+
if (value.endsWith(".meeko") && !value.startsWith(".")) {
|
|
34
39
|
throw compileError(content, original, "MEEK033", "Component imports must use relative .meeko paths", originalOffset(entry.mappings, start) ?? 0);
|
|
35
40
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
childSource
|
|
41
|
+
let destination;
|
|
42
|
+
if (value.endsWith(".meeko")) {
|
|
43
|
+
const childFilename = resolve(dirname(original), value);
|
|
44
|
+
let childSource;
|
|
45
|
+
try {
|
|
46
|
+
childSource = await readFile(childFilename, "utf8");
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
throw compileError(content, original, "MEEK034", `Component import not found: ${value}`, originalOffset(entry.mappings, start) ?? 0);
|
|
50
|
+
}
|
|
51
|
+
const child = await add(childFilename, childSource);
|
|
52
|
+
destination = child.generated.replace(/\.ts$/, ".js");
|
|
40
53
|
}
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
else {
|
|
55
|
+
destination = resolve(dirname(original), value);
|
|
43
56
|
}
|
|
44
|
-
|
|
45
|
-
let target = relative(dirname(entry.generated), child.generated).replaceAll("\\", "/").replace(/\.ts$/, ".js");
|
|
57
|
+
let target = relative(dirname(entry.generated), destination).replaceAll("\\", "/");
|
|
46
58
|
if (!target.startsWith("./") && !target.startsWith("../"))
|
|
47
59
|
target = `./${target}`;
|
|
48
|
-
edits.push({ start, end
|
|
60
|
+
edits.push({ start, end, text: target });
|
|
49
61
|
}
|
|
50
62
|
for (const edit of edits.reverse()) {
|
|
51
63
|
const delta = edit.text.length - (edit.end - edit.start);
|
|
@@ -60,7 +72,7 @@ async function compileGraph(source, filename) {
|
|
|
60
72
|
return entry;
|
|
61
73
|
}
|
|
62
74
|
const root = await add(filename, source);
|
|
63
|
-
return { root, entries: byGenerated };
|
|
75
|
+
return { root, entries: byGenerated, tempDirectory: generatedDirectory };
|
|
64
76
|
}
|
|
65
77
|
function generatedOffset(code, line, column) {
|
|
66
78
|
const lines = code.split("\n");
|
|
@@ -92,12 +104,11 @@ export async function checkSource(source, filename) {
|
|
|
92
104
|
return [error.diagnostic];
|
|
93
105
|
throw error;
|
|
94
106
|
}
|
|
95
|
-
const written = [];
|
|
96
107
|
let output = "";
|
|
97
108
|
try {
|
|
98
109
|
for (const entry of graph.entries.values()) {
|
|
110
|
+
await mkdir(dirname(entry.generated), { recursive: true });
|
|
99
111
|
await writeFile(entry.generated, entry.code, { encoding: "utf8", flag: "wx" });
|
|
100
|
-
written.push(entry.generated);
|
|
101
112
|
}
|
|
102
113
|
try {
|
|
103
114
|
const result = await execFileAsync(process.execPath, [
|
|
@@ -116,7 +127,7 @@ export async function checkSource(source, filename) {
|
|
|
116
127
|
}
|
|
117
128
|
}
|
|
118
129
|
finally {
|
|
119
|
-
await
|
|
130
|
+
await rm(graph.tempDirectory, { recursive: true, force: true });
|
|
120
131
|
}
|
|
121
132
|
const typed = parseTypeScriptOutput(output);
|
|
122
133
|
if (typed.length === 0 && output.trim())
|
|
@@ -128,3 +139,4 @@ export async function checkSource(source, filename) {
|
|
|
128
139
|
return { code: diagnostic.code, message, filename: entry?.original ?? absolute, location: locate(entry?.source ?? source, offset ?? 0) };
|
|
129
140
|
});
|
|
130
141
|
}
|
|
142
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { fileURLToPath } from \"node:url\";\nimport { compileWithAutoImports } from \"./autoimports.js\";\nimport { originalOffset } from \"./compiler/mapping.js\";\nimport type { SourceMapping } from \"./compiler/mapping.js\";\nimport { moduleSpecifiers } from \"./compiler/import-graph.js\";\nimport { projectRoot } from \"./compiler/project-root.js\";\nimport { compileError, MeekoCompileError, locate } from \"./compiler/sfc.js\";\nimport type { CompileDiagnostic } from \"./compiler/sfc.js\";\n\nconst execFileAsync = promisify(execFile);\nconst tscPath = join(dirname(fileURLToPath(import.meta.resolve(\"typescript/package.json\"))), \"bin\", \"tsc\");\n\ninterface GeneratedEntry {\n original: string;\n generated: string;\n source: string;\n code: string;\n mappings: SourceMapping[];\n}\n\nasync function compileGraph(source: string, filename: string): Promise<{ root: GeneratedEntry; entries: Map<string, GeneratedEntry>; tempDirectory: string }> {\n const byOriginal = new Map<string, GeneratedEntry>();\n const byGenerated = new Map<string, GeneratedEntry>();\n const nonce = randomUUID();\n const rootDirectory = projectRoot(filename);\n const generatedDirectory = join(rootDirectory, \".meeko\", \"check\", nonce);\n async function add(original: string, content: string): Promise<GeneratedEntry> {\n const previous = byOriginal.get(original);\n if (previous) return previous;\n const target = relative(rootDirectory, original).split(/[\\\\/]/)[0] === \"server\" ? \"server\" : \"client\";\n const compiled = await compileWithAutoImports(content, original, {}, target);\n const entry: GeneratedEntry = {\n original, source: content, code: compiled.code,\n generated: join(generatedDirectory, relative(rootDirectory, original) + \".ts\"),\n mappings: compiled.mappings.map((mapping) => ({ ...mapping })),\n };\n byOriginal.set(original, entry);\n byGenerated.set(entry.generated, entry);\n const edits: Array<{ start: number; end: number; text: string }> = [];\n for (const specifier of moduleSpecifiers(entry.code, entry.generated)) {\n const { value, start, end } = specifier;\n if (!value.endsWith(\".meeko\") && !value.startsWith(\".\")) continue;\n if (value.endsWith(\".meeko\") && !value.startsWith(\".\")) {\n throw compileError(content, original, \"MEEK033\", \"Component imports must use relative .meeko paths\", originalOffset(entry.mappings, start) ?? 0);\n }\n let destination: string;\n if (value.endsWith(\".meeko\")) {\n const childFilename = resolve(dirname(original), value);\n let childSource: string;\n try {\n childSource = await readFile(childFilename, \"utf8\");\n } catch {\n throw compileError(content, original, \"MEEK034\", `Component import not found: ${value}`, originalOffset(entry.mappings, start) ?? 0);\n }\n const child = await add(childFilename, childSource);\n destination = child.generated.replace(/\\.ts$/, \".js\");\n } else {\n destination = resolve(dirname(original), value);\n }\n let target = relative(dirname(entry.generated), destination).replaceAll(\"\\\\\", \"/\");\n if (!target.startsWith(\"./\") && !target.startsWith(\"../\")) target = `./${target}`;\n edits.push({ start, end, text: target });\n }\n for (const edit of edits.reverse()) {\n const delta = edit.text.length - (edit.end - edit.start);\n entry.code = entry.code.slice(0, edit.start) + edit.text + entry.code.slice(edit.end);\n for (const mapping of entry.mappings) {\n if (mapping.generatedStart >= edit.end) mapping.generatedStart += delta;\n if (mapping.generatedEnd >= edit.end) mapping.generatedEnd += delta;\n }\n }\n return entry;\n }\n const root = await add(filename, source);\n return { root, entries: byGenerated, tempDirectory: generatedDirectory };\n}\n\nfunction generatedOffset(code: string, line: number, column: number): number {\n const lines = code.split(\"\\n\");\n let offset = 0;\n for (let index = 0; index < line - 1; index++) offset += (lines[index]?.length ?? 0) + 1;\n return offset + column - 1;\n}\n\nfunction parseTypeScriptOutput(output: string): Array<{ file: string; line: number; column: number; code: string; message: string }> {\n const diagnostics: Array<{ file: string; line: number; column: number; code: string; message: string }> = [];\n for (const line of output.split(/\\r?\\n/)) {\n const match = /^(.*)\\((\\d+),(\\d+)\\): error TS(\\d+): (.*)$/.exec(line);\n if (match) diagnostics.push({ file: match[1] ?? \"\", line: Number(match[2]), column: Number(match[3]), code: `TS${match[4]}`, message: match[5] ?? \"\" });\n else if (line.trim() && diagnostics.length > 0) diagnostics[diagnostics.length - 1]!.message += `\\n${line}`;\n }\n return diagnostics;\n}\n\n/** Comprueba un componente con TypeScript 7 y devuelve errores ubicados en el .meeko original. */\nexport async function checkSource(source: string, filename: string): Promise<CompileDiagnostic[]> {\n const absolute = resolve(filename);\n let graph: Awaited<ReturnType<typeof compileGraph>>;\n try {\n graph = await compileGraph(source, absolute);\n } catch (error) {\n if (error instanceof MeekoCompileError) return [error.diagnostic];\n throw error;\n }\n\n let output = \"\";\n try {\n for (const entry of graph.entries.values()) {\n await mkdir(dirname(entry.generated), { recursive: true });\n await writeFile(entry.generated, entry.code, { encoding: \"utf8\", flag: \"wx\" });\n }\n try {\n const result = await execFileAsync(process.execPath, [\n tscPath, \"--ignoreConfig\", \"--noEmit\", \"--pretty\", \"false\", \"--strict\", \"--skipLibCheck\",\n \"--noUncheckedIndexedAccess\", \"--exactOptionalPropertyTypes\", \"--verbatimModuleSyntax\",\n \"--module\", \"nodenext\", \"--moduleResolution\", \"nodenext\", \"--target\", \"es2022\",\n \"--lib\", \"es2022,dom\", graph.root.generated,\n ], { cwd: dirname(absolute), maxBuffer: 8 * 1024 * 1024 });\n output = result.stdout + result.stderr;\n } catch (error) {\n const failure = error as Error & { stdout?: string; stderr?: string };\n output = `${failure.stdout ?? \"\"}${failure.stderr ?? \"\"}`;\n if (!output.trim()) throw error;\n }\n } finally {\n await rm(graph.tempDirectory, { recursive: true, force: true });\n }\n\n const typed = parseTypeScriptOutput(output);\n if (typed.length === 0 && output.trim()) throw new Error(`TypeScript 7 check failed: ${output.trim()}`);\n return typed.map((diagnostic) => {\n const entry = graph.entries.get(resolve(dirname(absolute), diagnostic.file));\n const offset = entry ? originalOffset(entry.mappings, generatedOffset(entry.code, diagnostic.line, diagnostic.column)) : undefined;\n const message = entry && offset !== undefined ? diagnostic.message : `Generated TypeScript: ${diagnostic.message}`;\n return { code: diagnostic.code, message, filename: entry?.original ?? absolute, location: locate(entry?.source ?? source, offset ?? 0) };\n });\n}\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -1,43 +1,83 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
3
5
|
import { checkSource } from "./check.js";
|
|
4
6
|
import { compile } from "./compiler.js";
|
|
5
7
|
import { generateTypes } from "./types.js";
|
|
8
|
+
import { initProject } from "./init.js";
|
|
9
|
+
import { initFrameworkProject } from "./framework/init.js";
|
|
10
|
+
import { generateRoutes } from "./framework/generate.js";
|
|
11
|
+
import { generateServerContracts } from "./framework/contracts-generate.js";
|
|
12
|
+
import { checkApp, generateAppTypes } from "./framework/check-app.js";
|
|
13
|
+
import { prerenderProject } from "./framework/prerender.js";
|
|
14
|
+
import { generateTypeScriptAutoImports } from "./autoimports-ts.js";
|
|
6
15
|
const [command, input, output] = process.argv.slice(2);
|
|
7
|
-
if ((command !== "compile" && command !== "check" && command !== "types") || !input || (command === "compile" && !output) || (command === "check" && output !== undefined && output !== "--json") || (command === "types" && output !== undefined)) {
|
|
8
|
-
process.stderr.write("Usage: meeko check <component.meeko> [--json]\n meeko compile <component.meeko> <output.ts>\n meeko types <component.meeko>\n");
|
|
16
|
+
if ((command !== "compile" && command !== "check" && command !== "check-app" && command !== "types" && command !== "init" && command !== "init-framework" && command !== "routes" && command !== "prerender") || !input || (command === "compile" && !output) || (command === "check" && output !== undefined && output !== "--json") || ((command === "types" || command === "init" || command === "init-framework" || command === "routes" || command === "check-app" || command === "prerender") && output !== undefined)) {
|
|
17
|
+
process.stderr.write("Usage: meeko check <component.meeko> [--json]\n meeko check-app <project-directory>\n meeko compile <component.meeko> <output.ts>\n meeko types <component.meeko>\n meeko routes <project-directory>\n meeko prerender <project-directory>\n meeko init <directory>\n meeko init-framework <directory>\n");
|
|
9
18
|
process.exitCode = 1;
|
|
10
19
|
}
|
|
11
20
|
else {
|
|
12
21
|
try {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
if (command === "init" || command === "init-framework") {
|
|
23
|
+
const target = command === "init" ? await initProject(input) : await initFrameworkProject(input);
|
|
24
|
+
const manager = existsSync(join(target, "pnpm-lock.yaml")) ? "pnpm" : "npm";
|
|
25
|
+
const prefix = target === resolve(".") ? "" : `cd ${target} && `;
|
|
26
|
+
process.stdout.write(`Created ${target}\nNext: ${prefix}${manager} install && ${manager} run dev\n`);
|
|
17
27
|
}
|
|
18
|
-
else if (
|
|
28
|
+
else if (command === "routes") {
|
|
29
|
+
const generated = await generateRoutes(input);
|
|
30
|
+
const server = await generateServerContracts(input);
|
|
31
|
+
const components = await generateAppTypes(input);
|
|
32
|
+
const imports = await generateTypeScriptAutoImports(input);
|
|
33
|
+
process.stdout.write(`${generated.types}\n${generated.manifest}\n${server.types}\n${server.manifest}\n${components.map((file) => `${file}\n`).join("")}${imports.client}\n${imports.server}\n${imports.shared}\n`);
|
|
34
|
+
}
|
|
35
|
+
else if (command === "prerender") {
|
|
36
|
+
for (const file of await prerenderProject(input))
|
|
37
|
+
process.stdout.write(`${file}\n`);
|
|
38
|
+
}
|
|
39
|
+
else if (command === "check-app") {
|
|
40
|
+
const diagnostics = await checkApp(input);
|
|
19
41
|
for (const diagnostic of diagnostics) {
|
|
20
42
|
const { line, column } = diagnostic.location;
|
|
21
43
|
process.stderr.write(`${diagnostic.filename}:${line}:${column} ${diagnostic.code}: ${diagnostic.message}\n`);
|
|
22
44
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
process.stdout.write(`${output}\n`);
|
|
28
|
-
}
|
|
29
|
-
else if (command === "types") {
|
|
30
|
-
for (const generated of await generateTypes(source, input))
|
|
31
|
-
process.stdout.write(`${generated}\n`);
|
|
45
|
+
if (diagnostics.length > 0)
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
else
|
|
48
|
+
process.stdout.write(`${input}: OK\n`);
|
|
32
49
|
}
|
|
33
50
|
else {
|
|
34
|
-
|
|
51
|
+
const source = await readFile(input, "utf8");
|
|
52
|
+
const diagnostics = await checkSource(source, input);
|
|
53
|
+
if (command === "check" && output === "--json") {
|
|
54
|
+
process.stdout.write(`${JSON.stringify(diagnostics)}\n`);
|
|
55
|
+
}
|
|
56
|
+
else if (diagnostics.length > 0) {
|
|
57
|
+
for (const diagnostic of diagnostics) {
|
|
58
|
+
const { line, column } = diagnostic.location;
|
|
59
|
+
process.stderr.write(`${diagnostic.filename}:${line}:${column} ${diagnostic.code}: ${diagnostic.message}\n`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (command === "compile") {
|
|
63
|
+
const result = compile(source, input);
|
|
64
|
+
await writeFile(output, result.code, "utf8");
|
|
65
|
+
process.stdout.write(`${output}\n`);
|
|
66
|
+
}
|
|
67
|
+
else if (command === "types") {
|
|
68
|
+
for (const generated of await generateTypes(source, input))
|
|
69
|
+
process.stdout.write(`${generated}\n`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
process.stdout.write(`${input}: OK\n`);
|
|
73
|
+
}
|
|
74
|
+
if (diagnostics.length > 0)
|
|
75
|
+
process.exitCode = 1;
|
|
35
76
|
}
|
|
36
|
-
if (diagnostics.length > 0)
|
|
37
|
-
process.exitCode = 1;
|
|
38
77
|
}
|
|
39
78
|
catch (error) {
|
|
40
79
|
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
41
80
|
process.exitCode = 1;
|
|
42
81
|
}
|
|
43
82
|
}
|
|
83
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { checkSource } from \"./check.js\";\nimport { compile } from \"./compiler.js\";\nimport { generateTypes } from \"./types.js\";\nimport { initProject } from \"./init.js\";\nimport { initFrameworkProject } from \"./framework/init.js\";\nimport { generateRoutes } from \"./framework/generate.js\";\nimport { generateServerContracts } from \"./framework/contracts-generate.js\";\nimport { checkApp, generateAppTypes } from \"./framework/check-app.js\";\nimport { prerenderProject } from \"./framework/prerender.js\";\nimport { generateTypeScriptAutoImports } from \"./autoimports-ts.js\";\n\nconst [command, input, output] = process.argv.slice(2);\nif ((command !== \"compile\" && command !== \"check\" && command !== \"check-app\" && command !== \"types\" && command !== \"init\" && command !== \"init-framework\" && command !== \"routes\" && command !== \"prerender\") || !input || (command === \"compile\" && !output) || (command === \"check\" && output !== undefined && output !== \"--json\") || ((command === \"types\" || command === \"init\" || command === \"init-framework\" || command === \"routes\" || command === \"check-app\" || command === \"prerender\") && output !== undefined)) {\n process.stderr.write(\"Usage: meeko check <component.meeko> [--json]\\n meeko check-app <project-directory>\\n meeko compile <component.meeko> <output.ts>\\n meeko types <component.meeko>\\n meeko routes <project-directory>\\n meeko prerender <project-directory>\\n meeko init <directory>\\n meeko init-framework <directory>\\n\");\n process.exitCode = 1;\n} else {\n try {\n if (command === \"init\" || command === \"init-framework\") {\n const target = command === \"init\" ? await initProject(input) : await initFrameworkProject(input);\n const manager = existsSync(join(target, \"pnpm-lock.yaml\")) ? \"pnpm\" : \"npm\";\n const prefix = target === resolve(\".\") ? \"\" : `cd ${target} && `;\n process.stdout.write(`Created ${target}\\nNext: ${prefix}${manager} install && ${manager} run dev\\n`);\n } else if (command === \"routes\") {\n const generated = await generateRoutes(input);\n const server = await generateServerContracts(input);\n const components = await generateAppTypes(input);\n const imports = await generateTypeScriptAutoImports(input);\n process.stdout.write(`${generated.types}\\n${generated.manifest}\\n${server.types}\\n${server.manifest}\\n${components.map((file) => `${file}\\n`).join(\"\")}${imports.client}\\n${imports.server}\\n${imports.shared}\\n`);\n } else if (command === \"prerender\") {\n for (const file of await prerenderProject(input)) process.stdout.write(`${file}\\n`);\n } else if (command === \"check-app\") {\n const diagnostics = await checkApp(input);\n for (const diagnostic of diagnostics) {\n const { line, column } = diagnostic.location;\n process.stderr.write(`${diagnostic.filename}:${line}:${column} ${diagnostic.code}: ${diagnostic.message}\\n`);\n }\n if (diagnostics.length > 0) process.exitCode = 1;\n else process.stdout.write(`${input}: OK\\n`);\n } else {\n const source = await readFile(input, \"utf8\");\n const diagnostics = await checkSource(source, input);\n if (command === \"check\" && output === \"--json\") {\n process.stdout.write(`${JSON.stringify(diagnostics)}\\n`);\n } else if (diagnostics.length > 0) {\n for (const diagnostic of diagnostics) {\n const { line, column } = diagnostic.location;\n process.stderr.write(`${diagnostic.filename}:${line}:${column} ${diagnostic.code}: ${diagnostic.message}\\n`);\n }\n } else if (command === \"compile\") {\n const result = compile(source, input);\n await writeFile(output!, result.code, \"utf8\");\n process.stdout.write(`${output}\\n`);\n } else if (command === \"types\") {\n for (const generated of await generateTypes(source, input)) process.stdout.write(`${generated}\\n`);\n } else {\n process.stdout.write(`${input}: OK\\n`);\n }\n if (diagnostics.length > 0) process.exitCode = 1;\n }\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ModuleSpecifier {
|
|
2
|
+
value: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
}
|
|
6
|
+
/** Read static ESM edges from TypeScript instead of matching source text. */
|
|
7
|
+
export declare function moduleSpecifiers(code: string, filename: string): ModuleSpecifier[];
|
|
8
|
+
export declare function replaceModuleSpecifiers(code: string, filename: string, convert: (specifier: ModuleSpecifier) => string): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import ts from "@typescript/typescript6";
|
|
2
|
+
/** Read static ESM edges from TypeScript instead of matching source text. */
|
|
3
|
+
export function moduleSpecifiers(code, filename) {
|
|
4
|
+
const file = ts.createSourceFile(filename, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
5
|
+
const result = [];
|
|
6
|
+
for (const statement of file.statements) {
|
|
7
|
+
if (!ts.isImportDeclaration(statement) && !ts.isExportDeclaration(statement))
|
|
8
|
+
continue;
|
|
9
|
+
const literal = statement.moduleSpecifier;
|
|
10
|
+
if (!literal || !ts.isStringLiteral(literal))
|
|
11
|
+
continue;
|
|
12
|
+
result.push({ value: literal.text, start: literal.getStart(file) + 1, end: literal.getEnd() - 1 });
|
|
13
|
+
}
|
|
14
|
+
const visit = (node) => {
|
|
15
|
+
if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword && node.arguments.length === 1 && ts.isStringLiteral(node.arguments[0])) {
|
|
16
|
+
const literal = node.arguments[0];
|
|
17
|
+
result.push({ value: literal.text, start: literal.getStart(file) + 1, end: literal.getEnd() - 1 });
|
|
18
|
+
}
|
|
19
|
+
ts.forEachChild(node, visit);
|
|
20
|
+
};
|
|
21
|
+
visit(file);
|
|
22
|
+
result.sort((a, b) => a.start - b.start);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
export function replaceModuleSpecifiers(code, filename, convert) {
|
|
26
|
+
let output = code;
|
|
27
|
+
for (const specifier of moduleSpecifiers(code, filename).reverse()) {
|
|
28
|
+
const replacement = convert(specifier);
|
|
29
|
+
output = output.slice(0, specifier.start) + replacement + output.slice(specifier.end);
|
|
30
|
+
}
|
|
31
|
+
return output;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=import-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/compiler/import-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAQzC,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACjG,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAAE,SAAS;QACvF,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC;QAC1C,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;YAAE,SAAS;QACvD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YAC/J,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,QAAgB,EAAE,OAA+C;IACrH,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,SAAS,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACnE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import ts from \"@typescript/typescript6\";\n\nexport interface ModuleSpecifier {\n value: string;\n start: number;\n end: number;\n}\n\n/** Read static ESM edges from TypeScript instead of matching source text. */\nexport function moduleSpecifiers(code: string, filename: string): ModuleSpecifier[] {\n const file = ts.createSourceFile(filename, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const result: ModuleSpecifier[] = [];\n for (const statement of file.statements) {\n if (!ts.isImportDeclaration(statement) && !ts.isExportDeclaration(statement)) continue;\n const literal = statement.moduleSpecifier;\n if (!literal || !ts.isStringLiteral(literal)) continue;\n result.push({ value: literal.text, start: literal.getStart(file) + 1, end: literal.getEnd() - 1 });\n }\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword && node.arguments.length === 1 && ts.isStringLiteral(node.arguments[0]!)) {\n const literal = node.arguments[0];\n result.push({ value: literal.text, start: literal.getStart(file) + 1, end: literal.getEnd() - 1 });\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n result.sort((a, b) => a.start - b.start);\n return result;\n}\n\nexport function replaceModuleSpecifiers(code: string, filename: string, convert: (specifier: ModuleSpecifier) => string): string {\n let output = code;\n for (const specifier of moduleSpecifiers(code, filename).reverse()) {\n const replacement = convert(specifier);\n output = output.slice(0, specifier.start) + replacement + output.slice(specifier.end);\n }\n return output;\n}\n"]}
|
package/dist/compiler/mapping.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/compiler/mapping.ts"],"names":[],"mappings":"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","sourcesContent":["/** Segmento que relaciona una porción del módulo generado con el archivo .meeko. */\nexport interface SourceMapping {\n generatedStart: number;\n generatedEnd: number;\n originalStart: number;\n originalLength: number;\n}\n\nconst markerToken = randomUUID().replaceAll(\"-\", \"\");\nconst marker = new RegExp(`/\\\\*__MEEK_SOURCE_${markerToken}_(START|END):(\\\\d+):(\\\\d+)__\\\\*/`, \"g\");\n\n/** Marca código conservando la ubicación de su expresión o declaración original. */\nexport function markSource(code: string, originalStart: number, originalLength = code.length): string {\n return `/*__MEEK_SOURCE_${markerToken}_START:${originalStart}:${originalLength}__*/${code}/*__MEEK_SOURCE_${markerToken}_END:${originalStart}:${originalLength}__*/`;\n}\n\n/** Retira marcas internas y produce el mapa de segmentos del módulo emitido. */\nexport function extractSourceMappings(markedCode: string): { code: string; mappings: SourceMapping[] } {\n const mappings: SourceMapping[] = [];\n const open: Array<{ generatedStart: number; originalStart: number; originalLength: number }> = [];\n const parts: string[] = [];\n let generatedOffset = 0;\n let cursor = 0;\n for (const match of markedCode.matchAll(marker)) {\n const index = match.index;\n const chunk = markedCode.slice(cursor, index);\n parts.push(chunk);\n generatedOffset += chunk.length;\n const originalStart = Number(match[2]);\n const originalLength = Number(match[3]);\n if (match[1] === \"START\") {\n open.push({ generatedStart: generatedOffset, originalStart, originalLength });\n } else {\n const span = open.pop();\n if (!span || span.originalStart !== originalStart || span.originalLength !== originalLength) {\n throw new Error(\"Invalid Meeko source mapping markers\");\n }\n mappings.push({ ...span, generatedEnd: generatedOffset });\n }\n cursor = index + match[0].length;\n }\n const tail = markedCode.slice(cursor);\n parts.push(tail);\n if (open.length !== 0) throw new Error(\"Unclosed Meeko source mapping marker\");\n return { code: parts.join(\"\"), mappings: mappings.sort((a, b) => a.generatedStart - b.generatedStart) };\n}\n\n/** Convierte un desplazamiento generado en uno del archivo .meeko si existe origen preciso. */\nexport function originalOffset(mappings: readonly SourceMapping[], generatedOffset: number): number | undefined {\n const span = mappings\n .filter((entry) => generatedOffset >= entry.generatedStart && generatedOffset < entry.generatedEnd)\n .sort((a, b) => (a.generatedEnd - a.generatedStart) - (b.generatedEnd - b.generatedStart))[0];\n if (!span) return undefined;\n return span.originalStart + Math.min(generatedOffset - span.generatedStart, Math.max(0, span.originalLength - 1));\n}\nimport { randomUUID } from \"node:crypto\";\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { dirname, parse, resolve } from "node:path";
|
|
3
|
+
/** The package owns generated Meeko artifacts; a standalone TS project is a fallback. */
|
|
4
|
+
export function projectRoot(filename) {
|
|
5
|
+
let directory = dirname(resolve(filename));
|
|
6
|
+
let tsProject;
|
|
7
|
+
for (;;) {
|
|
8
|
+
if (existsSync(resolve(directory, "package.json")))
|
|
9
|
+
return directory;
|
|
10
|
+
if (!tsProject && existsSync(resolve(directory, "tsconfig.json")))
|
|
11
|
+
tsProject = directory;
|
|
12
|
+
const parent = dirname(directory);
|
|
13
|
+
if (parent === directory || directory === parse(directory).root)
|
|
14
|
+
return tsProject ?? dirname(resolve(filename));
|
|
15
|
+
directory = parent;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=project-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/compiler/project-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAI,SAA6B,CAAC;IAClC,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACrE,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAAE,SAAS,GAAG,SAAS,CAAC;QACzF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI;YAAE,OAAO,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChH,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;AACH,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, parse, resolve } from \"node:path\";\n\n/** The package owns generated Meeko artifacts; a standalone TS project is a fallback. */\nexport function projectRoot(filename: string): string {\n let directory = dirname(resolve(filename));\n let tsProject: string | undefined;\n for (;;) {\n if (existsSync(resolve(directory, \"package.json\"))) return directory;\n if (!tsProject && existsSync(resolve(directory, \"tsconfig.json\"))) tsProject = directory;\n const parent = dirname(directory);\n if (parent === directory || directory === parse(directory).root) return tsProject ?? dirname(resolve(filename));\n directory = parent;\n }\n}\n"]}
|
package/dist/compiler/sfc.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sfc.js","sourceRoot":"","sources":["../../src/compiler/sfc.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseFragment } from \"parse5\";\n\n/** Ubicación de un diagnóstico en el archivo .meeko original. */\nexport interface SourceLocation {\n offset: number;\n line: number;\n column: number;\n}\n\n/** Error de compilación con ubicación y código estable para herramientas. */\nexport interface CompileDiagnostic {\n code: string;\n message: string;\n filename: string;\n location: SourceLocation;\n}\n\n/** Error que conserva el diagnóstico estructurado para CLI y editor. */\nexport class MeekoCompileError extends Error {\n readonly diagnostic: CompileDiagnostic;\n\n constructor(diagnostic: CompileDiagnostic) {\n super(`${diagnostic.filename}:${diagnostic.location.line}:${diagnostic.location.column} ${diagnostic.code}: ${diagnostic.message}`);\n this.name = \"MeekoCompileError\";\n this.diagnostic = diagnostic;\n }\n}\n\ninterface ParseLocation {\n startOffset: number;\n endOffset: number;\n startTag?: { endOffset: number };\n endTag?: { startOffset: number };\n}\n\ninterface ParsedNode {\n nodeName: string;\n tagName?: string;\n value?: string;\n attrs?: Array<{ name: string; value: string }>;\n sourceCodeLocation?: ParseLocation;\n childNodes?: ParsedNode[];\n}\n\n/** Una sección SFC con posiciones conservadas en el archivo fuente. */\nexport interface SfcSection {\n name: \"script\" | \"template\" | \"style\";\n start: number;\n end: number;\n content: string;\n contentStart: number;\n contentEnd: number;\n attributes: ReadonlyArray<{ name: string; value: string }>;\n}\n\n/** Estructura validada de las secciones de un componente. */\nexport interface SfcDocument {\n script: SfcSection;\n template: SfcSection;\n style?: SfcSection;\n}\n\n/** Convierte un desplazamiento UTF-16 en línea y columna, empezando en uno. */\nexport function locate(source: string, offset: number): SourceLocation {\n const before = source.slice(0, offset);\n const lines = before.split(/\\r\\n|\\r|\\n/);\n return { offset, line: lines.length, column: (lines.at(-1)?.length ?? 0) + 1 };\n}\n\n/** Crea un error de compilación asociado al archivo original. */\nexport function compileError(source: string, filename: string, code: string, message: string, offset: number): MeekoCompileError {\n return new MeekoCompileError({ code, message, filename, location: locate(source, offset) });\n}\n\n/** Analiza y valida las secciones superiores de un archivo .meeko. */\nexport function parseSfc(source: string, filename = \"anonymous.meeko\"): SfcDocument {\n const parseErrors: Array<{ code: string; startOffset: number }> = [];\n const root = parseFragment(source, {\n sourceCodeLocationInfo: true,\n onParseError(error) {\n parseErrors.push({ code: error.code, startOffset: error.startOffset });\n },\n }) as unknown as ParsedNode;\n if (parseErrors[0]) {\n const error = parseErrors[0];\n throw compileError(source, filename, \"MEEK001\", `Invalid component HTML: ${error.code}`, error.startOffset);\n }\n\n const sections = new Map<SfcSection[\"name\"], SfcSection>();\n for (const node of root.childNodes ?? []) {\n if (node.nodeName === \"#comment\" || (node.nodeName === \"#text\" && !(node.value ?? \"\").trim())) continue;\n const tag = node.tagName;\n const location = node.sourceCodeLocation;\n if (tag !== \"script\" && tag !== \"template\" && tag !== \"style\") {\n throw compileError(source, filename, \"MEEK002\", \"Only script, template and style sections are allowed at the top level\", location?.startOffset ?? 0);\n }\n if (!location?.startTag || !location.endTag) {\n throw compileError(source, filename, \"MEEK003\", `Section <${tag}> must have a closing tag`, location?.startOffset ?? 0);\n }\n if (sections.has(tag)) {\n throw compileError(source, filename, \"MEEK004\", `Duplicate <${tag}> section`, location.startOffset);\n }\n sections.set(tag, {\n name: tag,\n start: location.startOffset,\n end: location.endOffset,\n content: source.slice(location.startTag.endOffset, location.endTag.startOffset),\n contentStart: location.startTag.endOffset,\n contentEnd: location.endTag.startOffset,\n attributes: node.attrs ?? [],\n });\n }\n\n const script = sections.get(\"script\");\n const template = sections.get(\"template\");\n if (!script) throw compileError(source, filename, \"MEEK005\", \"A <script lang=\\\"ts\\\"> section is required\", 0);\n if (!script.attributes.some((attribute) => attribute.name === \"lang\" && attribute.value === \"ts\")) {\n throw compileError(source, filename, \"MEEK006\", \"The script section must use lang=\\\"ts\\\"\", script.contentStart);\n }\n if (!template) throw compileError(source, filename, \"MEEK007\", \"A <template> section is required\", source.length);\n const style = sections.get(\"style\");\n return style ? { script, template, style } : { script, template };\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { SourceMapping } from "./mapping.js";
|
|
2
|
+
/** Input sourcemap for Oxc: generated TypeScript locations point to the original SFC. */
|
|
3
|
+
export declare function sourceMapForCompiled(code: string, source: string, filename: string, mappings: readonly SourceMapping[]): object;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
2
|
+
function vlq(value) {
|
|
3
|
+
let bits = value < 0 ? (-value << 1) | 1 : value << 1;
|
|
4
|
+
let output = "";
|
|
5
|
+
do {
|
|
6
|
+
let digit = bits & 31;
|
|
7
|
+
bits >>>= 5;
|
|
8
|
+
if (bits)
|
|
9
|
+
digit |= 32;
|
|
10
|
+
output += base64[digit];
|
|
11
|
+
} while (bits);
|
|
12
|
+
return output;
|
|
13
|
+
}
|
|
14
|
+
function lineStarts(source) {
|
|
15
|
+
const starts = [0];
|
|
16
|
+
for (let index = 0; index < source.length; index++)
|
|
17
|
+
if (source[index] === "\n")
|
|
18
|
+
starts.push(index + 1);
|
|
19
|
+
return starts;
|
|
20
|
+
}
|
|
21
|
+
function position(starts, offset) {
|
|
22
|
+
let low = 0;
|
|
23
|
+
let high = starts.length;
|
|
24
|
+
while (low + 1 < high) {
|
|
25
|
+
const middle = (low + high) >>> 1;
|
|
26
|
+
if (starts[middle] <= offset)
|
|
27
|
+
low = middle;
|
|
28
|
+
else
|
|
29
|
+
high = middle;
|
|
30
|
+
}
|
|
31
|
+
return { line: low, column: offset - starts[low] };
|
|
32
|
+
}
|
|
33
|
+
/** Input sourcemap for Oxc: generated TypeScript locations point to the original SFC. */
|
|
34
|
+
export function sourceMapForCompiled(code, source, filename, mappings) {
|
|
35
|
+
const offsets = new Array(code.length);
|
|
36
|
+
// Broad marks first; nested expression marks override them.
|
|
37
|
+
for (const span of [...mappings].sort((a, b) => (b.generatedEnd - b.generatedStart) - (a.generatedEnd - a.generatedStart))) {
|
|
38
|
+
for (let generated = span.generatedStart; generated < span.generatedEnd; generated++) {
|
|
39
|
+
offsets[generated] = span.originalStart + Math.min(generated - span.generatedStart, Math.max(0, span.originalLength - 1));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const sourceLines = lineStarts(source);
|
|
43
|
+
const generatedLines = lineStarts(code);
|
|
44
|
+
const rows = [];
|
|
45
|
+
let previousOriginalLine = 0;
|
|
46
|
+
let previousOriginalColumn = 0;
|
|
47
|
+
for (let line = 0; line < generatedLines.length; line++) {
|
|
48
|
+
const begin = generatedLines[line];
|
|
49
|
+
const end = generatedLines[line + 1] === undefined ? code.length : generatedLines[line + 1] - 1;
|
|
50
|
+
const segments = [];
|
|
51
|
+
let previousGeneratedColumn = 0;
|
|
52
|
+
let mapped = false;
|
|
53
|
+
for (let offset = begin; offset < end; offset++) {
|
|
54
|
+
const original = offsets[offset];
|
|
55
|
+
const generatedColumn = offset - begin;
|
|
56
|
+
if (original === undefined) {
|
|
57
|
+
if (mapped) {
|
|
58
|
+
segments.push(vlq(generatedColumn - previousGeneratedColumn));
|
|
59
|
+
previousGeneratedColumn = generatedColumn;
|
|
60
|
+
mapped = false;
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const { line: originalLine, column: originalColumn } = position(sourceLines, original);
|
|
65
|
+
segments.push(vlq(generatedColumn - previousGeneratedColumn) + vlq(0) + vlq(originalLine - previousOriginalLine) + vlq(originalColumn - previousOriginalColumn));
|
|
66
|
+
previousGeneratedColumn = generatedColumn;
|
|
67
|
+
previousOriginalLine = originalLine;
|
|
68
|
+
previousOriginalColumn = originalColumn;
|
|
69
|
+
mapped = true;
|
|
70
|
+
}
|
|
71
|
+
rows.push(segments.join(","));
|
|
72
|
+
}
|
|
73
|
+
return { version: 3, file: `${filename}.ts`, sources: [filename], sourcesContent: [source], names: [], mappings: rows.join(";") };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=sourcemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap.js","sourceRoot":"","sources":["../../src/compiler/sourcemap.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,kEAAkE,CAAC;AAElF,SAAS,GAAG,CAAC,KAAa;IACxB,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACtD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC;QACF,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,CAAC;QACZ,IAAI,IAAI;YAAE,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,MAAM,CAAC,KAAK,CAAE,CAAC;IAC3B,CAAC,QAAQ,IAAI,EAAE;IACf,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE;QAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACvG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAyB,EAAE,MAAc;IACzD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,MAAM,CAAE,IAAI,MAAM;YAAE,GAAG,GAAG,MAAM,CAAC;;YACvC,IAAI,GAAG,MAAM,CAAC;IACrB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAE,EAAE,CAAC;AACtD,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAkC;IACrH,MAAM,OAAO,GAA8B,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,4DAA4D;IAC5D,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAC3H,KAAK,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC;YACrF,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAE,CAAC;QACpC,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,CAAC;YACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,uBAAuB,CAAC,CAAC,CAAC;oBAC9D,uBAAuB,GAAG,eAAe,CAAC;oBAC1C,MAAM,GAAG,KAAK,CAAC;gBACjB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACvF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,uBAAuB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,oBAAoB,CAAC,GAAG,GAAG,CAAC,cAAc,GAAG,sBAAsB,CAAC,CAAC,CAAC;YACjK,uBAAuB,GAAG,eAAe,CAAC;YAC1C,oBAAoB,GAAG,YAAY,CAAC;YACpC,sBAAsB,GAAG,cAAc,CAAC;YACxC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACpI,CAAC","sourcesContent":["import type { SourceMapping } from \"./mapping.js\";\n\nconst base64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction vlq(value: number): string {\n let bits = value < 0 ? (-value << 1) | 1 : value << 1;\n let output = \"\";\n do {\n let digit = bits & 31;\n bits >>>= 5;\n if (bits) digit |= 32;\n output += base64[digit]!;\n } while (bits);\n return output;\n}\n\nfunction lineStarts(source: string): number[] {\n const starts = [0];\n for (let index = 0; index < source.length; index++) if (source[index] === \"\\n\") starts.push(index + 1);\n return starts;\n}\n\nfunction position(starts: readonly number[], offset: number): { line: number; column: number } {\n let low = 0;\n let high = starts.length;\n while (low + 1 < high) {\n const middle = (low + high) >>> 1;\n if (starts[middle]! <= offset) low = middle;\n else high = middle;\n }\n return { line: low, column: offset - starts[low]! };\n}\n\n/** Input sourcemap for Oxc: generated TypeScript locations point to the original SFC. */\nexport function sourceMapForCompiled(code: string, source: string, filename: string, mappings: readonly SourceMapping[]): object {\n const offsets: Array<number | undefined> = new Array(code.length);\n // Broad marks first; nested expression marks override them.\n for (const span of [...mappings].sort((a, b) => (b.generatedEnd - b.generatedStart) - (a.generatedEnd - a.generatedStart))) {\n for (let generated = span.generatedStart; generated < span.generatedEnd; generated++) {\n offsets[generated] = span.originalStart + Math.min(generated - span.generatedStart, Math.max(0, span.originalLength - 1));\n }\n }\n const sourceLines = lineStarts(source);\n const generatedLines = lineStarts(code);\n const rows: string[] = [];\n let previousOriginalLine = 0;\n let previousOriginalColumn = 0;\n for (let line = 0; line < generatedLines.length; line++) {\n const begin = generatedLines[line]!;\n const end = generatedLines[line + 1] === undefined ? code.length : generatedLines[line + 1]! - 1;\n const segments: string[] = [];\n let previousGeneratedColumn = 0;\n let mapped = false;\n for (let offset = begin; offset < end; offset++) {\n const original = offsets[offset];\n const generatedColumn = offset - begin;\n if (original === undefined) {\n if (mapped) {\n segments.push(vlq(generatedColumn - previousGeneratedColumn));\n previousGeneratedColumn = generatedColumn;\n mapped = false;\n }\n continue;\n }\n const { line: originalLine, column: originalColumn } = position(sourceLines, original);\n segments.push(vlq(generatedColumn - previousGeneratedColumn) + vlq(0) + vlq(originalLine - previousOriginalLine) + vlq(originalColumn - previousOriginalColumn));\n previousGeneratedColumn = generatedColumn;\n previousOriginalLine = originalLine;\n previousOriginalColumn = originalColumn;\n mapped = true;\n }\n rows.push(segments.join(\",\"));\n }\n return { version: 3, file: `${filename}.ts`, sources: [filename], sourcesContent: [source], names: [], mappings: rows.join(\";\") };\n}\n"]}
|
|
@@ -42,3 +42,4 @@ export function parseTemplate(source, template, filename) {
|
|
|
42
42
|
throw compileError(source, filename, "MEEK008", `Invalid template HTML: ${error.code}`, template.contentStart + error.startOffset);
|
|
43
43
|
return normalize(parsed, template);
|
|
44
44
|
}
|
|
45
|
+
//# sourceMappingURL=template.js.map
|