@fynixorg/ui 1.0.22 → 1.0.24

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/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fynixorg/ui",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "type": "module",
5
5
  "description": "Core package for Fynix UI framework - A lightweight, reactive UI framework with TypeScript support.",
6
6
  "main": "./dist/fynix/index.js",
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../parser/fnx-parser.ts"],
4
+ "sourcesContent": ["/* MIT License\r\n\r\n* Copyright (c) 2026 Resty Gonzales\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n* SOFTWARE.\r\n */\r\n\r\n// =====================================================\r\n// parser/fnx-parser.ts - Unified FNX Single File Component Parser\r\n// =====================================================\r\n// This module provides a single source of truth for parsing .fnx files,\r\n// ensuring consistency between the Vite plugin and TypeScript plugin.\r\n\r\n/**\r\n * Source map for mapping positions between original and transformed code\r\n */\r\nexport interface SourceMap {\r\n originalToTransformed: Map<number, number>;\r\n transformedToOriginal: Map<number, number>;\r\n}\r\n\r\n/**\r\n * Parsed sections from an FNX file\r\n */\r\nexport interface ParsedFnxFile {\r\n /** Content inside <logic> block (excluding imports/exports) */\r\n logic: string;\r\n /** Content inside <view> block */\r\n view: string;\r\n /** Content inside <style> block */\r\n style: string;\r\n /** Setup language: 'ts' or 'js' */\r\n logicLang: \"ts\" | \"js\";\r\n /** Whether logic block exists */\r\n hasLogic: boolean;\r\n /** Whether view block exists */\r\n hasView: boolean;\r\n /** Whether style block exists */\r\n hasStyle: boolean;\r\n /** Whether style has scoped attribute */\r\n isStyleScoped: boolean;\r\n /** Extracted import statements */\r\n imports: string[];\r\n /** Extracted export statements */\r\n exports: string[];\r\n /** Line offset where logic starts in original file */\r\n logicStartLine: number;\r\n /** Line offset where view starts in original file */\r\n viewStartLine: number;\r\n /** Line offset where style starts in original file */\r\n styleStartLine: number;\r\n}\r\n\r\n/**\r\n * Result of transforming FNX to TypeScript/JavaScript\r\n */\r\nexport interface TransformResult {\r\n /** Transformed code (TSX/JSX) */\r\n code: string;\r\n /** Line mapping: transformedLine -> originalLine (-1 for injected lines) */\r\n lineMap: number[];\r\n /** Detailed source map for position mapping */\r\n sourceMap: SourceMap;\r\n}\r\n\r\n/**\r\n * Options for parsing FNX files\r\n */\r\nexport interface ParseOptions {\r\n /** Enable debug logging */\r\n debug?: boolean;\r\n /** Logger function for debug output */\r\n logger?: (message: string) => void;\r\n}\r\n\r\n/**\r\n * Options for transforming parsed FNX to component code\r\n */\r\nexport interface TransformOptions extends ParseOptions {\r\n /** File path for generating scoped style IDs */\r\n filePath: string;\r\n /** JSX factory function name (default: \"Fynix\") */\r\n jsxFactory?: string;\r\n /** Whether to include style injection code */\r\n includeStyleInjection?: boolean;\r\n /** Whether to include meta tag injection for route pages */\r\n includeMetaInjection?: boolean;\r\n}\r\n\r\n// =====================================================\r\n// PARSING IMPLEMENTATION\r\n// =====================================================\r\n\r\n/**\r\n * Parse an FNX Single File Component into its constituent parts.\r\n * This is the canonical parsing implementation used by all consumers.\r\n *\r\n * @param source - Raw FNX file content\r\n * @param options - Optional parsing options\r\n * @returns Parsed FNX file structure\r\n */\r\nexport function parseFnxFile(\r\n source: string,\r\n options: ParseOptions = {}\r\n): ParsedFnxFile {\r\n const { debug = false, logger = console.log } = options;\r\n\r\n const result: ParsedFnxFile = {\r\n logic: \"\",\r\n view: \"\",\r\n style: \"\",\r\n logicLang: \"ts\",\r\n hasLogic: false,\r\n hasView: false,\r\n hasStyle: false,\r\n isStyleScoped: false,\r\n imports: [],\r\n exports: [],\r\n logicStartLine: 0,\r\n viewStartLine: 0,\r\n styleStartLine: 0,\r\n };\r\n\r\n // Parse <logic> block with setup attribute\r\n const logicMatch = source.match(\r\n /<logic\\s+setup\\s*=\\s*[\"']?(ts|js)[\"']?\\s*>([\\s\\S]*?)<\\/logic>/i\r\n );\r\n\r\n if (logicMatch && logicMatch[1] && logicMatch[2] !== undefined) {\r\n result.hasLogic = true;\r\n result.logicLang = logicMatch[1].toLowerCase() as \"ts\" | \"js\";\r\n\r\n // Calculate line offset\r\n const beforeLogic = source.slice(0, logicMatch.index);\r\n const beforeLineCount = beforeLogic.split(\"\\n\").length - 1;\r\n const openingTag = logicMatch[0].substring(\r\n 0,\r\n logicMatch[0].indexOf(\">\") + 1\r\n );\r\n const tagLineCount = openingTag.split(\"\\n\").length - 1;\r\n result.logicStartLine = beforeLineCount + tagLineCount + 1;\r\n\r\n const rawLogic = logicMatch[2].trim();\r\n\r\n // Account for leading newlines in content\r\n const leadingNewlines = logicMatch[2].match(/^\\n*/)?.[0].length || 0;\r\n result.logicStartLine += leadingNewlines;\r\n\r\n // Extract imports, exports, and body logic (handling multi-line exports)\r\n const logicLines = rawLogic.split(\"\\n\");\r\n const imports: string[] = [];\r\n const exports: string[] = [];\r\n const otherLogic: string[] = [];\r\n\r\n let inExportBlock = false;\r\n let exportBuffer: string[] = [];\r\n let exportBraceDepth = 0;\r\n\r\n for (let i = 0; i < logicLines.length; i++) {\r\n const line: string = logicLines[i] ?? \"\";\r\n const trimmed: string = line.trim();\r\n\r\n if (inExportBlock) {\r\n exportBuffer.push(line);\r\n // Count braces to handle nested objects\r\n const openBraces = ((line && line.match(/{/g)) || []).length;\r\n const closeBraces = ((line && line.match(/}/g)) || []).length;\r\n exportBraceDepth += openBraces - closeBraces;\r\n if (exportBraceDepth <= 0) {\r\n exports.push(exportBuffer.join(\"\\n\"));\r\n exportBuffer = [];\r\n inExportBlock = false;\r\n exportBraceDepth = 0;\r\n }\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"import \")) {\r\n imports.push(line ?? \"\");\r\n } else if (trimmed.startsWith(\"export \")) {\r\n // Check if this is a multi-line export (object or function)\r\n if (/export\\s+\\w+\\s*=\\s*{/.test(trimmed) || trimmed.endsWith(\"{\")) {\r\n inExportBlock = true;\r\n exportBuffer = [line];\r\n exportBraceDepth =\r\n ((line && line.match(/{/g)) || []).length -\r\n ((line && line.match(/}/g)) || []).length;\r\n if (exportBraceDepth <= 0) {\r\n exports.push(exportBuffer.join(\"\\n\"));\r\n exportBuffer = [];\r\n inExportBlock = false;\r\n exportBraceDepth = 0;\r\n }\r\n } else {\r\n exports.push(line ?? \"\");\r\n }\r\n } else if (trimmed) {\r\n otherLogic.push(line ?? \"\");\r\n }\r\n }\r\n\r\n // Flush export buffer if file ends mid-export\r\n if (exportBuffer.length > 0) {\r\n exports.push(exportBuffer.join(\"\\n\"));\r\n }\r\n\r\n result.imports = imports;\r\n result.exports = exports;\r\n result.logic = otherLogic.join(\"\\n\");\r\n\r\n if (debug) {\r\n logger(\r\n `[FnxParser] Logic block: lang=${result.logicLang}, start=${result.logicStartLine}, imports=${imports.length}, exports=${exports.length}`\r\n );\r\n }\r\n }\r\n\r\n // Parse <view> block\r\n const viewMatch = source.match(/<view\\s*>([\\s\\S]*?)<\\/view>/i);\r\n if (viewMatch && viewMatch[1] !== undefined) {\r\n result.hasView = true;\r\n result.view = viewMatch[1].trim();\r\n\r\n // Calculate line offset\r\n const beforeView = source.slice(0, viewMatch.index);\r\n result.viewStartLine = beforeView.split(\"\\n\").length;\r\n\r\n // Account for leading newlines\r\n const leadingNewlines = viewMatch[1].match(/^\\n*/)?.[0].length || 0;\r\n result.viewStartLine += leadingNewlines;\r\n\r\n if (debug) {\r\n logger(`[FnxParser] View block: start=${result.viewStartLine}`);\r\n }\r\n }\r\n\r\n // Parse <style> block with optional scoped attribute\r\n const styleMatch = source.match(/<style(\\s+scoped)?\\s*>([\\s\\S]*?)<\\/style>/i);\r\n if (styleMatch && styleMatch[2] !== undefined) {\r\n result.hasStyle = true;\r\n result.isStyleScoped = !!styleMatch[1];\r\n result.style = styleMatch[2].trim();\r\n\r\n // Calculate line offset\r\n const beforeStyle = source.slice(0, styleMatch.index);\r\n result.styleStartLine = beforeStyle.split(\"\\n\").length;\r\n\r\n if (debug) {\r\n logger(\r\n `[FnxParser] Style block: scoped=${result.isStyleScoped}, start=${result.styleStartLine}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// =====================================================\r\n// VALIDATION\r\n// =====================================================\r\n\r\n/**\r\n * Validate parsed FNX structure\r\n * @throws Error if validation fails\r\n */\r\nexport function validateParsedFnx(\r\n parsed: ParsedFnxFile,\r\n filePath: string\r\n): void {\r\n if (!parsed.hasView) {\r\n throw new Error(\r\n `[FnxParser] Missing <view> block in ${filePath}. Every .fnx file must have a <view> section.`\r\n );\r\n }\r\n\r\n if (parsed.hasLogic && ![\"ts\", \"js\"].includes(parsed.logicLang)) {\r\n throw new Error(\r\n `[FnxParser] Invalid setup attribute in <logic> block in ${filePath}. Must be \"ts\" or \"js\".`\r\n );\r\n }\r\n\r\n // Check for TypeScript syntax in JavaScript mode\r\n if (parsed.hasLogic && parsed.logicLang === \"js\") {\r\n const tsPatterns = [\r\n { pattern: /\\binterface\\s+\\w+/, name: \"interface declaration\" },\r\n { pattern: /\\btype\\s+\\w+\\s*=/, name: \"type alias\" },\r\n { pattern: /:\\s*\\w+(\\[\\]|<[^>]+>)?\\s*[;,=)]/, name: \"type annotation\" },\r\n { pattern: /<\\w+>(?!\\s*<)/, name: \"generic type\" },\r\n { pattern: /\\benum\\s+\\w+/, name: \"enum declaration\" },\r\n { pattern: /\\bas\\s+\\w+/, name: \"type assertion\" },\r\n { pattern: /\\bnamespace\\s+\\w+/, name: \"namespace\" },\r\n { pattern: /\\babstract\\s+class/, name: \"abstract class\" },\r\n {\r\n pattern: /\\bpublic\\s+|private\\s+|protected\\s+/,\r\n name: \"access modifier\",\r\n },\r\n ];\r\n\r\n const allCode = parsed.logic + \"\\n\" + parsed.imports.join(\"\\n\");\r\n\r\n for (const { pattern, name } of tsPatterns) {\r\n if (pattern.test(allCode)) {\r\n throw new Error(\r\n `[FnxParser] TypeScript syntax detected (${name}) in ${filePath} with setup=\"js\". ` +\r\n `Either change to setup=\"ts\" or remove TypeScript-specific syntax.`\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\n// =====================================================\r\n// TRANSFORMATION\r\n// =====================================================\r\n\r\n/**\r\n * Generate a unique style ID for scoped styles based on file path\r\n */\r\nexport function generateStyleId(filePath: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < filePath.length; i++) {\r\n const char = filePath.charCodeAt(i);\r\n hash = (hash << 5) - hash + char;\r\n hash = hash & hash;\r\n }\r\n return `fynix-${Math.abs(hash).toString(36)}`;\r\n}\r\n\r\n/**\r\n * Scope CSS styles by adding data attribute selector\r\n */\r\nexport function scopeStyles(css: string, scopeId: string): string {\r\n const dataAttr = `[data-${scopeId}]`;\r\n\r\n return css.replace(/([^{}]+)\\{([^{}]*)\\}/g, (match, selector, rules) => {\r\n if (selector.trim().startsWith(\"@\")) {\r\n return match;\r\n }\r\n\r\n const selectors = selector.split(\",\").map((s: string) => {\r\n const trimmed = s.trim();\r\n\r\n // Handle pseudo-elements/classes\r\n const pseudoMatch = trimmed.match(/^(.+?)(::?[a-z-]+(?:\\([^)]*\\))?)$/i);\r\n if (pseudoMatch) {\r\n return `${dataAttr} ${pseudoMatch[1]}${pseudoMatch[2]}`;\r\n }\r\n\r\n return `${dataAttr} ${trimmed}`;\r\n });\r\n\r\n return `${selectors.join(\", \")}{${rules}}`;\r\n });\r\n}\r\n\r\n/**\r\n * Build source map for position mapping between original and transformed\r\n */\r\nexport function buildSourceMap(\r\n originalContent: string,\r\n transformedContent: string,\r\n lineMap: number[]\r\n): SourceMap {\r\n const originalToTransformed = new Map<number, number>();\r\n const transformedToOriginal = new Map<number, number>();\r\n\r\n const originalLines = originalContent.split(\"\\n\");\r\n const transformedLines = transformedContent.split(\"\\n\");\r\n\r\n let transformedPos = 0;\r\n for (let tLine = 0; tLine < transformedLines.length; tLine++) {\r\n const originalLine = lineMap[tLine];\r\n\r\n if (originalLine !== undefined && originalLine >= 0 && originalLine < originalLines.length) {\r\n // Calculate original position\r\n let originalPos = 0;\r\n for (let i = 0; i < originalLine; i++) {\r\n const lineLen = originalLines[i];\r\n originalPos += (lineLen?.length ?? 0) + 1;\r\n }\r\n\r\n // Map start of lines\r\n transformedToOriginal.set(transformedPos, originalPos);\r\n originalToTransformed.set(originalPos, transformedPos);\r\n\r\n // Map characters within line (accounting for indentation)\r\n const transformedLineText = transformedLines[tLine] ?? \"\";\r\n const originalLineText = originalLines[originalLine] ?? \"\";\r\n\r\n const tTrimmed = transformedLineText.trimStart();\r\n const oTrimmed = originalLineText.trimStart();\r\n\r\n for (\r\n let char = 0;\r\n char < Math.min(tTrimmed.length, oTrimmed.length);\r\n char++\r\n ) {\r\n const tPos =\r\n transformedPos + char + (transformedLineText.length - tTrimmed.length);\r\n const oPos =\r\n originalPos + char + (originalLineText.length - oTrimmed.length);\r\n transformedToOriginal.set(tPos, oPos);\r\n originalToTransformed.set(oPos, tPos);\r\n }\r\n }\r\n\r\n const currentTransLine = transformedLines[tLine];\r\n transformedPos += (currentTransLine?.length ?? 0) + 1;\r\n }\r\n\r\n return { originalToTransformed, transformedToOriginal };\r\n}\r\n\r\n/**\r\n * Transform parsed FNX file to TypeScript/JavaScript component code.\r\n * Used by the Vite plugin for build-time transformation.\r\n *\r\n * @param parsed - Parsed FNX file\r\n * @param options - Transform options\r\n * @returns Transformed component code with source maps\r\n */\r\nexport function transformToComponent(\r\n parsed: ParsedFnxFile,\r\n options: TransformOptions\r\n): TransformResult {\r\n const {\r\n filePath,\r\n jsxFactory = \"Fynix\",\r\n includeStyleInjection = true,\r\n includeMetaInjection = true,\r\n debug = false,\r\n logger = console.log,\r\n } = options;\r\n\r\n const styleId = generateStyleId(filePath);\r\n const lines: string[] = [];\r\n const lineMap: number[] = [];\r\n\r\n const push = (line: string, origin = -1) => {\r\n lines.push(line);\r\n lineMap.push(origin);\r\n };\r\n\r\n // Framework import\r\n push(`import { ${jsxFactory} } from '@fynixorg/ui';`);\r\n\r\n // User imports\r\n if (parsed.imports.length > 0) {\r\n parsed.imports.forEach((importLine, i) => {\r\n push(importLine, parsed.logicStartLine + i);\r\n });\r\n }\r\n\r\n push(\"\");\r\n\r\n // Style injection\r\n if (parsed.hasStyle && includeStyleInjection) {\r\n let processedStyle = parsed.style;\r\n\r\n if (parsed.isStyleScoped) {\r\n processedStyle = scopeStyles(parsed.style, styleId);\r\n }\r\n\r\n push(`// Inject styles`);\r\n push(`if (typeof document !== 'undefined') {`);\r\n push(` const styleId = '${styleId}';`);\r\n push(` if (!document.getElementById(styleId)) {`);\r\n push(` const styleEl = document.createElement('style');`);\r\n push(` styleEl.id = styleId;`);\r\n push(` styleEl.textContent = ${JSON.stringify(processedStyle)};`);\r\n push(` document.head.appendChild(styleEl);`);\r\n push(` }`);\r\n push(`}`);\r\n push(\"\");\r\n }\r\n\r\n // Exports (module level, before component)\r\n if (parsed.exports.length > 0) {\r\n parsed.exports.forEach((exportLine) => {\r\n const exportLines = exportLine.split(\"\\n\");\r\n exportLines.forEach((line) => push(line));\r\n });\r\n push(\"\");\r\n }\r\n\r\n // Component function\r\n push(`function FynixComponent(props = {}) {`);\r\n\r\n // Logic body\r\n if (parsed.hasLogic && parsed.logic.trim()) {\r\n push(` // Component logic`);\r\n const logicLines = parsed.logic.split(\"\\n\");\r\n logicLines.forEach((line, i) => {\r\n if (line.trim()) {\r\n // Map to original logic position\r\n push(` ${line}`, parsed.logicStartLine + parsed.imports.length + i);\r\n }\r\n });\r\n push(\"\");\r\n }\r\n\r\n // Meta tag injection (for route pages)\r\n if (\r\n includeMetaInjection &&\r\n parsed.exports.some((e) => e.trim().startsWith(\"export const meta\"))\r\n ) {\r\n push(\r\n ` if (typeof document !== \"undefined\" && typeof meta !== \"undefined\") {`\r\n );\r\n push(` document.title = meta.title;`);\r\n push(` const metaTags = [`);\r\n push(` { name: \"description\", content: meta.description },`);\r\n push(` { name: \"keywords\", content: meta.keywords },`);\r\n push(` { property: \"og:title\", content: meta.ogTitle },`);\r\n push(` { property: \"og:description\", content: meta.ogDescription },`);\r\n push(` { property: \"og:image\", content: meta.ogImage },`);\r\n push(` ];`);\r\n push(` metaTags.forEach(({ name, property, content }) => {`);\r\n push(` if (!content) return;`);\r\n push(` let tag;`);\r\n push(` if (name) {`);\r\n push(` tag = document.querySelector(\\`meta[name='\\${name}']\\`);`);\r\n push(` if (!tag) {`);\r\n push(` tag = document.createElement(\"meta\");`);\r\n push(` tag.setAttribute(\"name\", name);`);\r\n push(` document.head.appendChild(tag);`);\r\n push(` }`);\r\n push(` } else if (property) {`);\r\n push(\r\n ` tag = document.querySelector(\\`meta[property='\\${property}']\\`);`\r\n );\r\n push(` if (!tag) {`);\r\n push(` tag = document.createElement(\"meta\");`);\r\n push(` tag.setAttribute(\"property\", property);`);\r\n push(` document.head.appendChild(tag);`);\r\n push(` }`);\r\n push(` }`);\r\n push(` if (tag) tag.setAttribute(\"content\", content);`);\r\n push(` });`);\r\n push(` }`);\r\n push(\"\");\r\n }\r\n\r\n // View (return statement)\r\n if (parsed.hasView) {\r\n push(` // Component view`);\r\n\r\n if (parsed.isStyleScoped) {\r\n push(` return (`);\r\n push(` <div data-${styleId}=\"\">`);\r\n const viewLines = parsed.view.split(\"\\n\");\r\n viewLines.forEach((line, i) => {\r\n push(` ${line}`, parsed.viewStartLine + i);\r\n });\r\n push(` </div>`);\r\n push(` );`);\r\n } else {\r\n push(` return (`);\r\n const viewLines = parsed.view.split(\"\\n\");\r\n viewLines.forEach((line, i) => {\r\n push(` ${line}`, parsed.viewStartLine + i);\r\n });\r\n push(` );`);\r\n }\r\n } else {\r\n push(` return null;`);\r\n }\r\n\r\n push(`}`);\r\n push(\"\");\r\n push(`export default FynixComponent;`);\r\n\r\n const code = lines.join(\"\\n\");\r\n const sourceMap = buildSourceMap(\r\n // Reconstruct original content for source mapping\r\n createOriginalContent(parsed),\r\n code,\r\n lineMap\r\n );\r\n\r\n if (debug) {\r\n logger(`[FnxParser] Transformed ${filePath}: ${code.length} bytes`);\r\n }\r\n\r\n return { code, lineMap, sourceMap };\r\n}\r\n\r\n/**\r\n * Transform parsed FNX file to TSX for TypeScript language service.\r\n * This is a simplified transformation focused on type checking.\r\n *\r\n * @param source - Original FNX source\r\n * @param options - Parse options\r\n * @returns Transformed TSX code with source maps\r\n */\r\nexport function transformToTsx(\r\n source: string,\r\n options: ParseOptions = {}\r\n): TransformResult {\r\n const { debug = false, logger = console.log } = options;\r\n\r\n const lines: string[] = [];\r\n const lineMap: number[] = [];\r\n\r\n const push = (line: string, origin = -1) => {\r\n lines.push(line);\r\n lineMap.push(origin);\r\n };\r\n\r\n // Extract <logic> section\r\n const logicMatch = source.match(\r\n /<logic\\s+setup\\s*=\\s*[\"']?(ts|js)[\"']?\\s*>([\\s\\S]*?)<\\/logic>/i\r\n );\r\n\r\n let logicStart = 0;\r\n let logicContent = \"\";\r\n\r\n if (logicMatch) {\r\n const before = source.slice(0, logicMatch.index);\r\n const beforeLineCount = before.split(\"\\n\").length - 1;\r\n const openingTag = logicMatch[0].substring(\r\n 0,\r\n logicMatch[0].indexOf(\">\") + 1\r\n );\r\n const tagLineCount = openingTag.split(\"\\n\").length - 1;\r\n\r\n logicStart = beforeLineCount + tagLineCount + 1;\r\n logicContent = logicMatch[2] ?? \"\";\r\n\r\n const leadingNewlines = logicContent.match(/^\\n*/)?.[0].length || 0;\r\n logicStart += leadingNewlines;\r\n logicContent = logicContent.trimStart();\r\n\r\n if (debug) {\r\n logger(`[FnxParser TSX] Logic starts at line ${logicStart}`);\r\n }\r\n }\r\n\r\n // Collect user imports and body\r\n const userImports: { line: string; origin: number }[] = [];\r\n const userBody: { line: string; origin: number }[] = [];\r\n let hasFynixImport = false;\r\n\r\n if (logicContent) {\r\n const logicLines = logicContent.split(\"\\n\");\r\n const lastLine = logicLines[logicLines.length - 1];\r\n if (\r\n logicLines.length > 0 &&\r\n lastLine !== undefined &&\r\n lastLine.trim() === \"\"\r\n ) {\r\n logicLines.pop();\r\n }\r\n\r\n logicLines.forEach((line, i) => {\r\n const trimmed = line.trim();\r\n const origin = logicStart + i;\r\n if (trimmed.startsWith(\"import \")) {\r\n userImports.push({ line, origin });\r\n if (trimmed.includes(\"@fynixorg/ui\")) {\r\n hasFynixImport = true;\r\n }\r\n } else {\r\n userBody.push({ line, origin });\r\n }\r\n });\r\n }\r\n\r\n // User imports at top level\r\n userImports.forEach((item) => {\r\n push(item.line, item.origin);\r\n });\r\n\r\n // Inject Fynix import if not present\r\n if (!hasFynixImport) {\r\n push(`import { Fynix } from \"@fynixorg/ui\";`);\r\n }\r\n\r\n push(\"\");\r\n\r\n // Component wrapper\r\n push(\"export default function FynixComponent(props: any = {}) {\");\r\n\r\n // Logic body\r\n userBody.forEach((item) => {\r\n push(\" \" + item.line, item.origin);\r\n });\r\n\r\n // Extract <view> section\r\n const viewMatch = source.match(/<view\\s*>([\\s\\S]*?)<\\/view>/i);\r\n\r\n if (viewMatch) {\r\n let viewContent = viewMatch[1] ?? \"\";\r\n const before = source.slice(0, viewMatch.index);\r\n const beforeLineCount = before.split(\"\\n\").length - 1;\r\n let viewStart = beforeLineCount + 1;\r\n\r\n const leadingNewlines = viewContent.match(/^\\n*/)?.[0].length || 0;\r\n viewStart += leadingNewlines;\r\n viewContent = viewContent.trimStart();\r\n\r\n if (debug) {\r\n logger(`[FnxParser TSX] View starts at line ${viewStart}`);\r\n }\r\n\r\n push(\" return (\");\r\n\r\n const viewLines = viewContent.split(\"\\n\");\r\n viewLines.forEach((line, i) => {\r\n push(\" \" + line, viewStart + i);\r\n });\r\n\r\n push(\" );\");\r\n } else {\r\n push(\" return null;\");\r\n }\r\n\r\n push(\"}\");\r\n\r\n const code = lines.join(\"\\n\");\r\n const sourceMap = buildSourceMap(source, code, lineMap);\r\n\r\n return { code, lineMap, sourceMap };\r\n}\r\n\r\n// =====================================================\r\n// UTILITY FUNCTIONS\r\n// =====================================================\r\n\r\n/**\r\n * Reconstruct approximate original content from parsed result\r\n * (Used for source map building when original isn't available)\r\n */\r\nfunction createOriginalContent(parsed: ParsedFnxFile): string {\r\n const parts: string[] = [];\r\n\r\n if (parsed.hasLogic) {\r\n parts.push(`<logic setup=\"${parsed.logicLang}\">`);\r\n if (parsed.imports.length > 0) {\r\n parts.push(parsed.imports.join(\"\\n\"));\r\n }\r\n if (parsed.exports.length > 0) {\r\n parts.push(parsed.exports.join(\"\\n\"));\r\n }\r\n if (parsed.logic.trim()) {\r\n parts.push(parsed.logic);\r\n }\r\n parts.push(\"</logic>\");\r\n }\r\n\r\n if (parsed.hasView) {\r\n parts.push(`<view>`);\r\n parts.push(parsed.view);\r\n parts.push(\"</view>\");\r\n }\r\n\r\n if (parsed.hasStyle) {\r\n parts.push(parsed.isStyleScoped ? `<style scoped>` : `<style>`);\r\n parts.push(parsed.style);\r\n parts.push(\"</style>\");\r\n }\r\n\r\n return parts.join(\"\\n\");\r\n}\r\n\r\n/**\r\n * Get line and character from text position\r\n */\r\nexport function getLineAndCharacterOfPosition(\r\n text: string,\r\n pos: number\r\n): { line: number; character: number } {\r\n const lines = text.split(\"\\n\");\r\n let currentPos = 0;\r\n\r\n for (let line = 0; line < lines.length; line++) {\r\n const currentLine = lines[line];\r\n const lineLength = (currentLine?.length ?? 0) + 1;\r\n if (currentPos + lineLength > pos) {\r\n return {\r\n line,\r\n character: pos - currentPos,\r\n };\r\n }\r\n currentPos += lineLength;\r\n }\r\n\r\n return { line: Math.max(0, lines.length - 1), character: 0 };\r\n}\r\n\r\n/**\r\n * Get text position from line and character\r\n */\r\nexport function getPositionOfLineAndCharacter(\r\n text: string,\r\n line: number,\r\n character: number\r\n): number {\r\n const lines = text.split(\"\\n\");\r\n let pos = 0;\r\n\r\n for (let i = 0; i < line && i < lines.length; i++) {\r\n const currentLine = lines[i];\r\n pos += (currentLine?.length ?? 0) + 1;\r\n }\r\n\r\n const targetLine = lines[line];\r\n return pos + Math.min(character, targetLine?.length ?? 0);\r\n}\r\n\r\n/**\r\n * Map position from transformed code to original\r\n */\r\nexport function mapTransformedToOriginal(\r\n position: number,\r\n transformedCode: string,\r\n originalContent: string,\r\n lineMap: number[],\r\n sourceMap: SourceMap\r\n): number {\r\n // Try exact mapping first\r\n if (sourceMap.transformedToOriginal.has(position)) {\r\n return sourceMap.transformedToOriginal.get(position)!;\r\n }\r\n\r\n // Fallback: map by line\r\n const { line: tLine, character: tChar } = getLineAndCharacterOfPosition(\r\n transformedCode,\r\n position\r\n );\r\n\r\n const originalLine = lineMap[tLine];\r\n\r\n if (originalLine === undefined || originalLine < 0) {\r\n return 0;\r\n }\r\n\r\n return getPositionOfLineAndCharacter(originalContent, originalLine, tChar);\r\n}\r\n\r\n/**\r\n * Map position from original code to transformed\r\n */\r\nexport function mapOriginalToTransformed(\r\n position: number,\r\n transformedCode: string,\r\n originalContent: string,\r\n lineMap: number[],\r\n sourceMap: SourceMap\r\n): number {\r\n // Try exact mapping first\r\n if (sourceMap.originalToTransformed.has(position)) {\r\n return sourceMap.originalToTransformed.get(position)!;\r\n }\r\n\r\n // Fallback: map by line\r\n const { line: oLine, character: oChar } = getLineAndCharacterOfPosition(\r\n originalContent,\r\n position\r\n );\r\n\r\n const tLine = lineMap.indexOf(oLine);\r\n if (tLine < 0) {\r\n return 0;\r\n }\r\n\r\n return getPositionOfLineAndCharacter(transformedCode, tLine, oChar);\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -13,16 +13,20 @@ import {
13
13
  function init(modules) {
14
14
  const tsx = modules.typescript;
15
15
  function create(info) {
16
+ var _a, _b, _c, _d, _e;
16
17
  const config = info.config || {};
17
18
  const log = config.debug ? info.project.projectService.logger : { info() {
18
19
  }, msg() {
19
20
  } };
20
- log.info?.("[Fynix TS Engine] Loaded with full TypeScript support");
21
+ (_a = log.info) == null ? void 0 : _a.call(log, "[Fynix TS Engine] Loaded with full TypeScript support");
21
22
  const fnxCache = /* @__PURE__ */ new Map();
22
23
  function transformFnx(source) {
23
24
  return transformToTsx(source, {
24
25
  debug: config.debug,
25
- logger: /* @__PURE__ */ __name((message) => log.info?.(message), "logger")
26
+ logger: /* @__PURE__ */ __name((message) => {
27
+ var _a2;
28
+ return (_a2 = log.info) == null ? void 0 : _a2.call(log, message);
29
+ }, "logger")
26
30
  });
27
31
  }
28
32
  __name(transformFnx, "transformFnx");
@@ -48,9 +52,9 @@ function init(modules) {
48
52
  __name(mapOriginalToTransformedWithCache, "mapOriginalToTransformedWithCache");
49
53
  const host = info.languageServiceHost;
50
54
  const oldGetScriptSnapshot = host.getScriptSnapshot.bind(host);
51
- const oldGetScriptKind = host.getScriptKind?.bind(host);
55
+ const oldGetScriptKind = (_b = host.getScriptKind) == null ? void 0 : _b.bind(host);
52
56
  const oldGetScriptVersion = host.getScriptVersion.bind(host);
53
- const oldResolveModuleNames = host.resolveModuleNames?.bind(host);
57
+ const oldResolveModuleNames = (_c = host.resolveModuleNames) == null ? void 0 : _c.bind(host);
54
58
  if (oldResolveModuleNames) {
55
59
  host.resolveModuleNames = (moduleNames, containingFile, reusedNames, redirectedReference, options) => {
56
60
  const resolved = oldResolveModuleNames(
@@ -61,9 +65,11 @@ function init(modules) {
61
65
  options
62
66
  );
63
67
  return resolved.map((resolvedModule, index) => {
68
+ var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i;
64
69
  const moduleName = moduleNames[index];
65
70
  if (config.debug) {
66
- log.info?.(
71
+ (_a2 = log.info) == null ? void 0 : _a2.call(
72
+ log,
67
73
  `[Fynix Plugin] Processing module: ${moduleName}, resolved: ${!!resolvedModule}`
68
74
  );
69
75
  }
@@ -76,13 +82,14 @@ function init(modules) {
76
82
  fnxFilePath = path.resolve(containingDir, moduleName);
77
83
  }
78
84
  if (config.debug) {
79
- log.info?.(
85
+ (_b2 = log.info) == null ? void 0 : _b2.call(
86
+ log,
80
87
  `[Fynix Plugin] Trying to resolve .fnx file: ${fnxFilePath}`
81
88
  );
82
89
  }
83
90
  if (fs.existsSync(fnxFilePath)) {
84
91
  if (config.debug) {
85
- log.info?.(`[Fynix Plugin] Found .fnx file: ${fnxFilePath}`);
92
+ (_c2 = log.info) == null ? void 0 : _c2.call(log, `[Fynix Plugin] Found .fnx file: ${fnxFilePath}`);
86
93
  }
87
94
  return {
88
95
  resolvedFileName: fnxFilePath,
@@ -98,7 +105,8 @@ function init(modules) {
98
105
  );
99
106
  if (resolvedFnx.resolvedModule) {
100
107
  if (config.debug) {
101
- log.info?.(
108
+ (_d2 = log.info) == null ? void 0 : _d2.call(
109
+ log,
102
110
  `[Fynix Plugin] Resolved with TS: ${resolvedFnx.resolvedModule.resolvedFileName}`
103
111
  );
104
112
  }
@@ -120,13 +128,15 @@ function init(modules) {
120
128
  fnxFilePath = path.resolve(containingDir, fnxPath);
121
129
  }
122
130
  if (config.debug) {
123
- log.info?.(
131
+ (_e2 = log.info) == null ? void 0 : _e2.call(
132
+ log,
124
133
  `[Fynix Plugin] Trying to resolve with .fnx extension: ${fnxFilePath}`
125
134
  );
126
135
  }
127
136
  if (fs.existsSync(fnxFilePath)) {
128
137
  if (config.debug) {
129
- log.info?.(
138
+ (_f = log.info) == null ? void 0 : _f.call(
139
+ log,
130
140
  `[Fynix Plugin] Found file with .fnx extension: ${fnxFilePath}`
131
141
  );
132
142
  }
@@ -144,7 +154,8 @@ function init(modules) {
144
154
  );
145
155
  if (resolvedFnx.resolvedModule) {
146
156
  if (config.debug) {
147
- log.info?.(
157
+ (_g = log.info) == null ? void 0 : _g.call(
158
+ log,
148
159
  `[Fynix Plugin] Resolved .fnx with TS: ${resolvedFnx.resolvedModule.resolvedFileName}`
149
160
  );
150
161
  }
@@ -155,9 +166,10 @@ function init(modules) {
155
166
  }
156
167
  }
157
168
  }
158
- if (resolvedModule?.resolvedFileName?.endsWith(".fnx")) {
169
+ if ((_h = resolvedModule == null ? void 0 : resolvedModule.resolvedFileName) == null ? void 0 : _h.endsWith(".fnx")) {
159
170
  if (config.debug) {
160
- log.info?.(
171
+ (_i = log.info) == null ? void 0 : _i.call(
172
+ log,
161
173
  `[Fynix Plugin] Marking .fnx file as TSX: ${resolvedModule.resolvedFileName}`
162
174
  );
163
175
  }
@@ -218,9 +230,9 @@ function init(modules) {
218
230
  }
219
231
  host.getScriptKind = (fileName) => {
220
232
  if (fileName.endsWith(".fnx")) return tsx.ScriptKind.TSX;
221
- return oldGetScriptKind?.(fileName) ?? tsx.ScriptKind.Unknown;
233
+ return (oldGetScriptKind == null ? void 0 : oldGetScriptKind(fileName)) ?? tsx.ScriptKind.Unknown;
222
234
  };
223
- const oldFileExists = host.fileExists?.bind(host);
235
+ const oldFileExists = (_d = host.fileExists) == null ? void 0 : _d.bind(host);
224
236
  if (oldFileExists) {
225
237
  host.fileExists = (fileName) => {
226
238
  if (oldFileExists(fileName)) {
@@ -236,7 +248,7 @@ function init(modules) {
236
248
  return false;
237
249
  };
238
250
  }
239
- const oldReadFile = host.readFile?.bind(host);
251
+ const oldReadFile = (_e = host.readFile) == null ? void 0 : _e.bind(host);
240
252
  if (oldReadFile) {
241
253
  host.readFile = (fileName) => {
242
254
  const content = oldReadFile(fileName);
@@ -254,6 +266,7 @@ function init(modules) {
254
266
  };
255
267
  }
256
268
  host.getScriptSnapshot = (fileName) => {
269
+ var _a2, _b2;
257
270
  if (!fileName.endsWith(".fnx")) return oldGetScriptSnapshot(fileName);
258
271
  const version = oldGetScriptVersion(fileName);
259
272
  const cached = fnxCache.get(fileName);
@@ -272,16 +285,18 @@ function init(modules) {
272
285
  version,
273
286
  originalContent: content
274
287
  });
275
- log.info?.(
288
+ (_a2 = log.info) == null ? void 0 : _a2.call(
289
+ log,
276
290
  `[Fynix] Transformed ${fileName} (${content.length} \u2192 ${parsed.code.length} bytes)`
277
291
  );
278
292
  return tsx.ScriptSnapshot.fromString(parsed.code);
279
293
  } catch (error) {
280
- log.info?.(`[Fynix] Transform error in ${fileName}: ${error}`);
294
+ (_b2 = log.info) == null ? void 0 : _b2.call(log, `[Fynix] Transform error in ${fileName}: ${error}`);
281
295
  return snap;
282
296
  }
283
297
  };
284
298
  function remapDiagnostics(diags, fileName) {
299
+ var _a2, _b2;
285
300
  if (!fileName.endsWith(".fnx")) {
286
301
  return diags;
287
302
  }
@@ -305,7 +320,8 @@ function init(modules) {
305
320
  const isModuleResolutionError = messageText.includes("Cannot find module") || messageText.includes("Module not found") || d.code === 2307;
306
321
  if (!isModuleResolutionError) {
307
322
  if (config.debug) {
308
- log.info?.(
323
+ (_a2 = log.info) == null ? void 0 : _a2.call(
324
+ log,
309
325
  `[Fynix] Skipping diagnostic on injected line ${transformedLine}: ${messageText}`
310
326
  );
311
327
  }
@@ -387,7 +403,8 @@ function init(modules) {
387
403
  start: originalStart,
388
404
  length: originalLength
389
405
  };
390
- log.info?.(
406
+ (_b2 = log.info) == null ? void 0 : _b2.call(
407
+ log,
391
408
  `[Fynix] Remapped diagnostic: ${typeof d.messageText === "string" ? d.messageText : d.messageText.messageText} at original pos ${originalStart} (line ${originalLine})`
392
409
  );
393
410
  remapped.push(remappedDiag);
@@ -396,6 +413,7 @@ function init(modules) {
396
413
  }
397
414
  __name(remapDiagnostics, "remapDiagnostics");
398
415
  function remapDiagnosticsWithLocation(diags, fileName) {
416
+ var _a2, _b2, _c2;
399
417
  if (!fileName.endsWith(".fnx")) {
400
418
  return diags;
401
419
  }
@@ -430,7 +448,8 @@ function init(modules) {
430
448
  }
431
449
  }
432
450
  if (nearestOriginalLine < 0) {
433
- log.info?.(
451
+ (_a2 = log.info) == null ? void 0 : _a2.call(
452
+ log,
434
453
  `[Fynix] No valid line mapping found for diagnostic: ${typeof d.messageText === "string" ? d.messageText : d.messageText.messageText}`
435
454
  );
436
455
  continue;
@@ -456,7 +475,8 @@ function init(modules) {
456
475
  start: nearestOriginalPos,
457
476
  length: d.length || 1
458
477
  };
459
- log.info?.(
478
+ (_b2 = log.info) == null ? void 0 : _b2.call(
479
+ log,
460
480
  `[Fynix] Remapped injected line diagnostic to nearest line ${nearestOriginalLine}: ${typeof d.messageText === "string" ? d.messageText : d.messageText.messageText}`
461
481
  );
462
482
  remapped.push(remappedDiag2);
@@ -488,7 +508,8 @@ function init(modules) {
488
508
  start: originalStart,
489
509
  length: originalLength
490
510
  };
491
- log.info?.(
511
+ (_c2 = log.info) == null ? void 0 : _c2.call(
512
+ log,
492
513
  `[Fynix] Remapped diagnostic: ${typeof d.messageText === "string" ? d.messageText : d.messageText.messageText} at original pos ${originalStart} (line ${originalLine})`
493
514
  );
494
515
  remapped.push(remappedDiag);
@@ -921,7 +942,7 @@ function init(modules) {
921
942
  }
922
943
  }
923
944
  const program = info.languageService.getProgram();
924
- const sf = program?.getSourceFile(fileName);
945
+ const sf = program == null ? void 0 : program.getSourceFile(fileName);
925
946
  if (!sf || !fileName.endsWith(".fnx")) {
926
947
  return info.languageService.getQuickInfoAtPosition(
927
948
  fileName,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../typescript-fynix-plugin/index.ts"],
4
4
  "sourcesContent": ["import * as ts from \"typescript/lib/tsserverlibrary\";\r\nimport fs from \"fs\";\r\nimport path from \"path\";\r\nimport {\r\n transformToTsx,\r\n getLineAndCharacterOfPosition,\r\n getPositionOfLineAndCharacter,\r\n mapTransformedToOriginal,\r\n mapOriginalToTransformed,\r\n type TransformResult,\r\n type SourceMap,\r\n} from \"../../core/parser/fnx-parser\";\r\n\r\ninterface PluginConfig {\r\n debug?: boolean;\r\n}\r\n\r\ninterface CacheEntry {\r\n code: string;\r\n lineMap: number[];\r\n sourceMap: SourceMap;\r\n version: string;\r\n originalContent: string;\r\n}\r\n\r\nexport default function init(modules: { typescript: typeof ts }) {\r\n const tsx = modules.typescript;\r\n\r\n function create(info: ts.server.PluginCreateInfo) {\r\n const config: PluginConfig = info.config || {};\r\n const log = config.debug\r\n ? info.project.projectService.logger\r\n : { info() {}, msg() {} };\r\n\r\n log.info?.(\"[Fynix TS Engine] Loaded with full TypeScript support\");\r\n\r\n // ================================\r\n // CORE ENGINE STATE\r\n // ================================\r\n const fnxCache = new Map<string, CacheEntry>();\r\n\r\n // ================================\r\n // FNX \u2192 TSX TRANSFORM (ENHANCED)\r\n // ================================\r\n function transformFnx(source: string): TransformResult {\r\n return transformToTsx(source, {\r\n debug: config.debug,\r\n logger: (message) => log.info?.(message),\r\n });\r\n }\r\n\r\n // ================================\r\n // POSITION MAPPING\r\n // ================================\r\n function mapTransformedToOriginalWithCache(\r\n position: number,\r\n cache: CacheEntry\r\n ): number {\r\n return mapTransformedToOriginal(\r\n position,\r\n cache.code,\r\n cache.originalContent,\r\n cache.lineMap,\r\n cache.sourceMap\r\n );\r\n }\r\n\r\n function mapOriginalToTransformedWithCache(\r\n position: number,\r\n cache: CacheEntry\r\n ): number {\r\n return mapOriginalToTransformed(\r\n position,\r\n cache.code,\r\n cache.originalContent,\r\n cache.lineMap,\r\n cache.sourceMap\r\n );\r\n }\r\n\r\n // ================================\r\n // TS HOST PATCH\r\n // ================================\r\n const host = info.languageServiceHost;\r\n\r\n const oldGetScriptSnapshot = host.getScriptSnapshot.bind(host);\r\n const oldGetScriptKind = host.getScriptKind?.bind(host);\r\n const oldGetScriptVersion = host.getScriptVersion.bind(host);\r\n const oldResolveModuleNames = host.resolveModuleNames?.bind(host);\r\n\r\n // Enhance module resolution for .fnx files\r\n if (oldResolveModuleNames) {\r\n host.resolveModuleNames = (\r\n moduleNames,\r\n containingFile,\r\n reusedNames,\r\n redirectedReference,\r\n options\r\n ) => {\r\n const resolved = oldResolveModuleNames(\r\n moduleNames,\r\n containingFile,\r\n reusedNames,\r\n redirectedReference,\r\n options\r\n );\r\n\r\n // Process resolved modules to handle .fnx files\r\n return resolved.map((resolvedModule, index) => {\r\n const moduleName = moduleNames[index];\r\n\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Processing module: ${moduleName}, resolved: ${!!resolvedModule}`\r\n );\r\n }\r\n\r\n // If module wasn't resolved and it might be a .fnx file\r\n if (!resolvedModule && moduleName.endsWith(\".fnx\")) {\r\n // Try to resolve it as a .fnx file using file system\r\n // use imported path and fs\r\n\r\n let fnxFilePath: string;\r\n if (path.isAbsolute(moduleName)) {\r\n fnxFilePath = moduleName;\r\n } else {\r\n const containingDir = path.dirname(containingFile);\r\n fnxFilePath = path.resolve(containingDir, moduleName);\r\n }\r\n\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Trying to resolve .fnx file: ${fnxFilePath}`\r\n );\r\n }\r\n\r\n // Check if file exists\r\n if (fs.existsSync(fnxFilePath)) {\r\n if (config.debug) {\r\n log.info?.(`[Fynix Plugin] Found .fnx file: ${fnxFilePath}`);\r\n }\r\n return {\r\n resolvedFileName: fnxFilePath,\r\n extension: tsx.Extension.Tsx,\r\n isExternalLibraryImport: false,\r\n };\r\n }\r\n\r\n // Try with TypeScript's resolver as fallback\r\n const resolvedFnx = tsx.resolveModuleName(\r\n moduleName,\r\n containingFile,\r\n options,\r\n host\r\n );\r\n\r\n if (resolvedFnx.resolvedModule) {\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Resolved with TS: ${resolvedFnx.resolvedModule.resolvedFileName}`\r\n );\r\n }\r\n return {\r\n ...resolvedFnx.resolvedModule,\r\n extension: tsx.Extension.Tsx,\r\n };\r\n }\r\n }\r\n\r\n // If module wasn't resolved, try adding .fnx extension\r\n if (!resolvedModule && !moduleName.endsWith(\".fnx\")) {\r\n // Only try .fnx extension for relative imports (starting with . or ..)\r\n // or imports without protocol/package scope\r\n const isRelativeOrLocal =\r\n moduleName.startsWith(\".\") ||\r\n (!moduleName.startsWith(\"@\") &&\r\n !moduleName.includes(\"/\") &&\r\n !moduleName.includes(\"://\"));\r\n\r\n if (isRelativeOrLocal) {\r\n const fnxPath = moduleName + \".fnx\";\r\n\r\n // Try file system check first\r\n // use imported path and fs\r\n\r\n let fnxFilePath: string;\r\n if (path.isAbsolute(fnxPath)) {\r\n fnxFilePath = fnxPath;\r\n } else {\r\n const containingDir = path.dirname(containingFile);\r\n fnxFilePath = path.resolve(containingDir, fnxPath);\r\n }\r\n\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Trying to resolve with .fnx extension: ${fnxFilePath}`\r\n );\r\n }\r\n\r\n // Check if file exists\r\n if (fs.existsSync(fnxFilePath)) {\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Found file with .fnx extension: ${fnxFilePath}`\r\n );\r\n }\r\n return {\r\n resolvedFileName: fnxFilePath,\r\n extension: tsx.Extension.Tsx,\r\n isExternalLibraryImport: false,\r\n };\r\n }\r\n\r\n // Try with TypeScript's resolver as fallback\r\n const resolvedFnx = tsx.resolveModuleName(\r\n fnxPath,\r\n containingFile,\r\n options,\r\n host\r\n );\r\n\r\n if (resolvedFnx.resolvedModule) {\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Resolved .fnx with TS: ${resolvedFnx.resolvedModule.resolvedFileName}`\r\n );\r\n }\r\n return {\r\n ...resolvedFnx.resolvedModule,\r\n extension: tsx.Extension.Tsx,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // If resolved module points to a .fnx file, mark it as TSX\r\n if (resolvedModule?.resolvedFileName?.endsWith(\".fnx\")) {\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix Plugin] Marking .fnx file as TSX: ${resolvedModule.resolvedFileName}`\r\n );\r\n }\r\n return {\r\n ...resolvedModule,\r\n extension: tsx.Extension.Tsx,\r\n };\r\n }\r\n\r\n return resolvedModule;\r\n });\r\n };\r\n } else {\r\n // Fallback: Create a basic module resolver if one doesn't exist\r\n host.resolveModuleNames = (\r\n moduleNames,\r\n containingFile,\r\n reusedNames,\r\n redirectedReference,\r\n options\r\n ) => {\r\n return moduleNames.map((moduleName) => {\r\n // use imported path and fs\r\n\r\n // Handle .fnx files\r\n if (moduleName.endsWith(\".fnx\")) {\r\n let fnxFilePath: string;\r\n if (path.isAbsolute(moduleName)) {\r\n fnxFilePath = moduleName;\r\n } else {\r\n const containingDir = path.dirname(containingFile);\r\n fnxFilePath = path.resolve(containingDir, moduleName);\r\n }\r\n\r\n if (fs.existsSync(fnxFilePath)) {\r\n return {\r\n resolvedFileName: fnxFilePath,\r\n extension: tsx.Extension.Tsx,\r\n isExternalLibraryImport: false,\r\n };\r\n }\r\n }\r\n\r\n // Try adding .fnx extension for relative/local imports only\r\n const isRelativeOrLocal =\r\n moduleName.startsWith(\".\") ||\r\n (!moduleName.startsWith(\"@\") &&\r\n !moduleName.includes(\"/\") &&\r\n !moduleName.includes(\"://\"));\r\n\r\n if (isRelativeOrLocal && !moduleName.endsWith(\".fnx\")) {\r\n const fnxPath = moduleName + \".fnx\";\r\n let fnxFilePath: string;\r\n if (path.isAbsolute(fnxPath)) {\r\n fnxFilePath = fnxPath;\r\n } else {\r\n const containingDir = path.dirname(containingFile);\r\n fnxFilePath = path.resolve(containingDir, fnxPath);\r\n }\r\n\r\n if (fs.existsSync(fnxFilePath)) {\r\n return {\r\n resolvedFileName: fnxFilePath,\r\n extension: tsx.Extension.Tsx,\r\n isExternalLibraryImport: false,\r\n };\r\n }\r\n }\r\n\r\n // Use TypeScript's default resolution as fallback\r\n const resolved = tsx.resolveModuleName(\r\n moduleName,\r\n containingFile,\r\n options,\r\n host\r\n );\r\n\r\n return resolved.resolvedModule;\r\n });\r\n };\r\n }\r\n\r\n // Treat .fnx as TSX files\r\n host.getScriptKind = (fileName) => {\r\n if (fileName.endsWith(\".fnx\")) return tsx.ScriptKind.TSX;\r\n return oldGetScriptKind?.(fileName) ?? tsx.ScriptKind.Unknown;\r\n };\r\n\r\n // Override fileExists to handle .fnx files\r\n const oldFileExists = host.fileExists?.bind(host);\r\n if (oldFileExists) {\r\n host.fileExists = (fileName) => {\r\n // Check original file existence first\r\n if (oldFileExists(fileName)) {\r\n return true;\r\n }\r\n\r\n // If it's a .fnx file, check file system directly\r\n if (fileName.endsWith(\".fnx\")) {\r\n try {\r\n // use imported fs\r\n return fs.existsSync(fileName);\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n }\r\n\r\n // Override readFile to handle .fnx files\r\n const oldReadFile = host.readFile?.bind(host);\r\n if (oldReadFile) {\r\n host.readFile = (fileName) => {\r\n // Try original readFile first\r\n const content = oldReadFile(fileName);\r\n if (content !== undefined) {\r\n return content;\r\n }\r\n\r\n // If it's a .fnx file, try reading directly from file system\r\n if (fileName.endsWith(\".fnx\")) {\r\n try {\r\n // use imported fs\r\n return fs.readFileSync(fileName, \"utf8\");\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n }\r\n\r\n // Transform FNX \u2192 TSX in memory\r\n host.getScriptSnapshot = (fileName) => {\r\n if (!fileName.endsWith(\".fnx\")) return oldGetScriptSnapshot(fileName);\r\n\r\n const version = oldGetScriptVersion(fileName);\r\n const cached = fnxCache.get(fileName);\r\n\r\n if (cached && cached.version === version) {\r\n return tsx.ScriptSnapshot.fromString(cached.code);\r\n }\r\n\r\n const snap = oldGetScriptSnapshot(fileName);\r\n if (!snap) return snap;\r\n\r\n try {\r\n const content = snap.getText(0, snap.getLength());\r\n const parsed = transformFnx(content);\r\n\r\n fnxCache.set(fileName, {\r\n code: parsed.code,\r\n lineMap: parsed.lineMap,\r\n sourceMap: parsed.sourceMap,\r\n version,\r\n originalContent: content,\r\n });\r\n\r\n log.info?.(\r\n `[Fynix] Transformed ${fileName} (${content.length} \u2192 ${parsed.code.length} bytes)`\r\n );\r\n\r\n return tsx.ScriptSnapshot.fromString(parsed.code);\r\n } catch (error) {\r\n log.info?.(`[Fynix] Transform error in ${fileName}: ${error}`);\r\n return snap;\r\n }\r\n };\r\n\r\n // ================================\r\n // DIAGNOSTIC REMAPPING (FIXED)\r\n // ================================\r\n function remapDiagnostics(\r\n diags: readonly ts.Diagnostic[],\r\n fileName: string\r\n ): ts.Diagnostic[] {\r\n if (!fileName.endsWith(\".fnx\")) {\r\n return diags as ts.Diagnostic[];\r\n }\r\n\r\n const cache = fnxCache.get(fileName);\r\n if (!cache) {\r\n return diags as ts.Diagnostic[];\r\n }\r\n\r\n const remapped: ts.Diagnostic[] = [];\r\n\r\n for (const d of diags) {\r\n // Handle diagnostics without location info\r\n if (!d.file || d.start === undefined) {\r\n remapped.push(d);\r\n continue;\r\n }\r\n\r\n // Map position from transformed to original\r\n const { line: transformedLine } = getLineAndCharacterOfPosition(\r\n cache.code,\r\n d.start\r\n );\r\n\r\n const originalLine = cache.lineMap[transformedLine];\r\n\r\n // Skip diagnostics on injected lines EXCEPT for module resolution errors\r\n if (originalLine < 0) {\r\n const messageText =\r\n typeof d.messageText === \"string\"\r\n ? d.messageText\r\n : d.messageText.messageText;\r\n\r\n // Don't skip module resolution errors - these are important for user feedback\r\n const isModuleResolutionError =\r\n messageText.includes(\"Cannot find module\") ||\r\n messageText.includes(\"Module not found\") ||\r\n d.code === 2307; // TS2307: Cannot find module\r\n\r\n if (!isModuleResolutionError) {\r\n if (config.debug) {\r\n log.info?.(\r\n `[Fynix] Skipping diagnostic on injected line ${transformedLine}: ${messageText}`\r\n );\r\n }\r\n continue;\r\n }\r\n\r\n // For module resolution errors on injected lines, map to the user's import line if it exists\r\n // or to the beginning of the logic block\r\n let mappedLine = 0;\r\n let mappedChar = 0;\r\n\r\n // Find user's import line with @fynixorg/ui if it exists\r\n const lines = cache.originalContent.split(\"\\n\");\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].includes(\"@fynixorg/ui\")) {\r\n mappedLine = i;\r\n mappedChar = lines[i].indexOf(\"@fynixorg/ui\");\r\n break;\r\n }\r\n }\r\n\r\n // If no user import found, map to start of logic block\r\n if (mappedLine === 0 && mappedChar === 0) {\r\n const logicMatch = cache.originalContent.match(\r\n /<logic\\s+setup\\s*=\\s*[\"']?(ts|js)[\"']?\\s*>/i\r\n );\r\n if (logicMatch) {\r\n const before = cache.originalContent.slice(\r\n 0,\r\n logicMatch.index! + logicMatch[0].length\r\n );\r\n mappedLine = before.split(\"\\n\").length - 1;\r\n mappedChar = 0;\r\n }\r\n }\r\n\r\n const mappedStart = getPositionOfLineAndCharacter(\r\n cache.originalContent,\r\n mappedLine,\r\n mappedChar\r\n );\r\n const remappedDiag: ts.Diagnostic = {\r\n ...d,\r\n file: {\r\n ...d.file,\r\n fileName: fileName,\r\n text: cache.originalContent,\r\n getLineAndCharacterOfPosition: (pos: number) =>\r\n getLineAndCharacterOfPosition(cache.originalContent, pos),\r\n getPositionOfLineAndCharacter: (\r\n line: number,\r\n character: number\r\n ) =>\r\n getPositionOfLineAndCharacter(\r\n cache.originalContent,\r\n line,\r\n character\r\n ),\r\n } as any,\r\n start: mappedStart,\r\n length: \"@fynixorg/ui\".length,\r\n };\r\n\r\n remapped.push(remappedDiag);\r\n continue;\r\n }\r\n\r\n const originalStart = mapTransformedToOriginalWithCache(d.start, cache);\r\n\r\n // Calculate the correct length in original content\r\n let originalLength = d.length || 1;\r\n if (d.length) {\r\n const transformedEnd = d.start + d.length;\r\n const originalEnd = mapTransformedToOriginalWithCache(\r\n transformedEnd,\r\n cache\r\n );\r\n originalLength = Math.max(1, originalEnd - originalStart);\r\n }\r\n\r\n // Create a proper snapshot for the original file\r\n const originalSnapshot = tsx.ScriptSnapshot.fromString(\r\n cache.originalContent\r\n );\r\n\r\n // Create remapped diagnostic with proper file reference\r\n const remappedDiag: ts.Diagnostic = {\r\n ...d,\r\n file: {\r\n ...d.file,\r\n fileName: fileName,\r\n text: cache.originalContent,\r\n getLineAndCharacterOfPosition: (pos: number) =>\r\n getLineAndCharacterOfPosition(cache.originalContent, pos),\r\n getPositionOfLineAndCharacter: (line: number, character: number) =>\r\n getPositionOfLineAndCharacter(\r\n cache.originalContent,\r\n line,\r\n character\r\n ),\r\n } as any,\r\n start: originalStart,\r\n length: originalLength,\r\n };\r\n\r\n log.info?.(\r\n `[Fynix] Remapped diagnostic: ${\r\n typeof d.messageText === \"string\"\r\n ? d.messageText\r\n : d.messageText.messageText\r\n } at original pos ${originalStart} (line ${originalLine})`\r\n );\r\n\r\n remapped.push(remappedDiag);\r\n }\r\n\r\n return remapped;\r\n }\r\n\r\n function remapDiagnosticsWithLocation(\r\n diags: readonly ts.DiagnosticWithLocation[],\r\n fileName: string\r\n ): ts.DiagnosticWithLocation[] {\r\n if (!fileName.endsWith(\".fnx\")) {\r\n return diags as ts.DiagnosticWithLocation[];\r\n }\r\n\r\n const cache = fnxCache.get(fileName);\r\n if (!cache) {\r\n return diags as ts.DiagnosticWithLocation[];\r\n }\r\n\r\n const remapped: ts.DiagnosticWithLocation[] = [];\r\n\r\n for (const d of diags) {\r\n // Map position from transformed to original\r\n const { line: transformedLine } = getLineAndCharacterOfPosition(\r\n cache.code,\r\n d.start\r\n );\r\n\r\n const originalLine = cache.lineMap[transformedLine];\r\n\r\n // FIXED: Don't skip errors on injected lines - map to nearest real line\r\n if (originalLine < 0) {\r\n // Find the nearest non-injected line after this position\r\n let nearestLineIndex = transformedLine;\r\n let nearestOriginalLine = -1;\r\n\r\n for (let i = transformedLine; i < cache.lineMap.length; i++) {\r\n if (cache.lineMap[i] >= 0) {\r\n nearestLineIndex = i;\r\n nearestOriginalLine = cache.lineMap[i];\r\n break;\r\n }\r\n }\r\n\r\n // If no line found after, try before\r\n if (nearestOriginalLine < 0) {\r\n for (let i = transformedLine - 1; i >= 0; i--) {\r\n if (cache.lineMap[i] >= 0) {\r\n nearestLineIndex = i;\r\n nearestOriginalLine = cache.lineMap[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If still no valid line found, skip this diagnostic\r\n if (nearestOriginalLine < 0) {\r\n log.info?.(\r\n `[Fynix] No valid line mapping found for diagnostic: ${\r\n typeof d.messageText === \"string\"\r\n ? d.messageText\r\n : d.messageText.messageText\r\n }`\r\n );\r\n continue;\r\n }\r\n\r\n // Map to the beginning of the nearest real line\r\n const nearestOriginalPos = getPositionOfLineAndCharacter(\r\n cache.originalContent,\r\n nearestOriginalLine,\r\n 0\r\n );\r\n\r\n const remappedDiag: ts.DiagnosticWithLocation = {\r\n ...d,\r\n file: {\r\n ...d.file,\r\n fileName: fileName,\r\n text: cache.originalContent,\r\n getLineAndCharacterOfPosition: (pos: number) =>\r\n getLineAndCharacterOfPosition(cache.originalContent, pos),\r\n getPositionOfLineAndCharacter: (\r\n line: number,\r\n character: number\r\n ) =>\r\n getPositionOfLineAndCharacter(\r\n cache.originalContent,\r\n line,\r\n character\r\n ),\r\n } as any,\r\n start: nearestOriginalPos,\r\n length: d.length || 1,\r\n };\r\n\r\n log.info?.(\r\n `[Fynix] Remapped injected line diagnostic to nearest line ${nearestOriginalLine}: ${\r\n typeof d.messageText === \"string\"\r\n ? d.messageText\r\n : d.messageText.messageText\r\n }`\r\n );\r\n\r\n remapped.push(remappedDiag);\r\n continue;\r\n }\r\n\r\n const originalStart = mapTransformedToOriginalWithCache(d.start, cache);\r\n\r\n // Calculate the correct length in original content\r\n let originalLength = d.length || 1;\r\n if (d.length) {\r\n const transformedEnd = d.start + d.length;\r\n const originalEnd = mapTransformedToOriginalWithCache(\r\n transformedEnd,\r\n cache\r\n );\r\n originalLength = Math.max(1, originalEnd - originalStart);\r\n }\r\n\r\n // Create remapped diagnostic with proper file reference\r\n const remappedDiag: ts.DiagnosticWithLocation = {\r\n ...d,\r\n file: {\r\n ...d.file,\r\n fileName: fileName,\r\n text: cache.originalContent,\r\n getLineAndCharacterOfPosition: (pos: number) =>\r\n getLineAndCharacterOfPosition(cache.originalContent, pos),\r\n getPositionOfLineAndCharacter: (line: number, character: number) =>\r\n getPositionOfLineAndCharacter(\r\n cache.originalContent,\r\n line,\r\n character\r\n ),\r\n } as any,\r\n start: originalStart,\r\n length: originalLength,\r\n };\r\n\r\n log.info?.(\r\n `[Fynix] Remapped diagnostic: ${\r\n typeof d.messageText === \"string\"\r\n ? d.messageText\r\n : d.messageText.messageText\r\n } at original pos ${originalStart} (line ${originalLine})`\r\n );\r\n\r\n remapped.push(remappedDiag);\r\n }\r\n\r\n return remapped;\r\n }\r\n\r\n // ================================\r\n // LANGUAGE SERVICE PROXY\r\n // ================================\r\n const proxy = Object.create(null) as ts.LanguageService;\r\n for (const k of Object.keys(\r\n info.languageService\r\n ) as (keyof ts.LanguageService)[]) {\r\n proxy[k] = (...args: any[]) =>\r\n (info.languageService[k] as any).apply(info.languageService, args);\r\n }\r\n\r\n // Override diagnostics with proper remapping\r\n proxy.getSemanticDiagnostics = (fileName) => {\r\n const diags = info.languageService.getSemanticDiagnostics(fileName);\r\n return remapDiagnostics(diags, fileName);\r\n };\r\n\r\n proxy.getSyntacticDiagnostics = (fileName) => {\r\n const diags = info.languageService.getSyntacticDiagnostics(fileName);\r\n return remapDiagnosticsWithLocation(diags, fileName);\r\n };\r\n\r\n proxy.getSuggestionDiagnostics = (fileName) => {\r\n const diags = info.languageService.getSuggestionDiagnostics(fileName);\r\n return remapDiagnosticsWithLocation(diags, fileName);\r\n };\r\n\r\n // ================================\r\n // COMPLETION SUPPORT\r\n // ================================\r\n proxy.getCompletionsAtPosition = (fileName, position, opts) => {\r\n let mappedPosition = position;\r\n\r\n // Map position if in .fnx file\r\n if (fileName.endsWith(\".fnx\")) {\r\n const cache = fnxCache.get(fileName);\r\n if (cache) {\r\n mappedPosition = mapOriginalToTransformedWithCache(position, cache);\r\n }\r\n }\r\n\r\n const prior = info.languageService.getCompletionsAtPosition(\r\n fileName,\r\n mappedPosition,\r\n opts\r\n );\r\n\r\n if (!fileName.endsWith(\".fnx\")) return prior;\r\n\r\n // Add Fynix-specific completions\r\n const fynixCompletions = [\r\n // Fynix hooks\r\n {\r\n name: \"nixState\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixState\",\r\n labelDetails: { description: \"Fynix reactive state\" },\r\n },\r\n {\r\n name: \"nixStore\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixStore\",\r\n labelDetails: { description: \"Fynix global store\" },\r\n },\r\n {\r\n name: \"nixAsync\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixAsync\",\r\n labelDetails: { description: \"Fynix async state\" },\r\n },\r\n {\r\n name: \"nixEffect\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixEffect\",\r\n labelDetails: { description: \"Fynix side effect\" },\r\n },\r\n {\r\n name: \"nixComputed\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixComputed\",\r\n labelDetails: { description: \"Fynix computed value\" },\r\n },\r\n {\r\n name: \"nixForm\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixForm\",\r\n labelDetails: { description: \"Fynix form handler\" },\r\n },\r\n {\r\n name: \"nixRef\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixRef\",\r\n labelDetails: { description: \"Fynix DOM reference\" },\r\n },\r\n {\r\n name: \"nixCallback\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixCallback\",\r\n labelDetails: { description: \"Fynix memoized callback\" },\r\n },\r\n {\r\n name: \"nixMemo\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixMemo\",\r\n labelDetails: { description: \"Fynix memoized value\" },\r\n },\r\n {\r\n name: \"nixDebounce\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixDebounce\",\r\n labelDetails: { description: \"Fynix debounced callback\" },\r\n },\r\n {\r\n name: \"nixLocalStorage\",\r\n kind: tsx.ScriptElementKind.functionElement,\r\n sortText: \"0_nixLocalStorage\",\r\n labelDetails: { description: \"Fynix localStorage state\" },\r\n },\r\n // Fynix reactive event handlers (r-* attributes)\r\n {\r\n name: \"r-click\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-click\",\r\n labelDetails: { description: \"Reactive click handler\" },\r\n insertText: \"r-click={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-dblclick\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-dblclick\",\r\n labelDetails: { description: \"Reactive double-click handler\" },\r\n insertText: \"r-dblclick={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-submit\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-submit\",\r\n labelDetails: { description: \"Reactive form submit handler\" },\r\n insertText: \"r-submit={($event) => { $event.preventDefault(); }}\",\r\n },\r\n {\r\n name: \"r-input\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-input\",\r\n labelDetails: { description: \"Reactive input handler\" },\r\n insertText: \"r-input={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-change\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-change\",\r\n labelDetails: { description: \"Reactive change handler\" },\r\n insertText: \"r-change={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-focus\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-focus\",\r\n labelDetails: { description: \"Reactive focus handler\" },\r\n insertText: \"r-focus={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-blur\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-blur\",\r\n labelDetails: { description: \"Reactive blur handler\" },\r\n insertText: \"r-blur={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-keydown\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-keydown\",\r\n labelDetails: { description: \"Reactive keydown handler\" },\r\n insertText: \"r-keydown={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-keyup\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-keyup\",\r\n labelDetails: { description: \"Reactive keyup handler\" },\r\n insertText: \"r-keyup={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-keypress\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-keypress\",\r\n labelDetails: { description: \"Reactive keypress handler\" },\r\n insertText: \"r-keypress={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mouseenter\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mouseenter\",\r\n labelDetails: { description: \"Reactive mouseenter handler\" },\r\n insertText: \"r-mouseenter={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mouseleave\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mouseleave\",\r\n labelDetails: { description: \"Reactive mouseleave handler\" },\r\n insertText: \"r-mouseleave={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mouseover\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mouseover\",\r\n labelDetails: { description: \"Reactive mouseover handler\" },\r\n insertText: \"r-mouseover={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mouseout\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mouseout\",\r\n labelDetails: { description: \"Reactive mouseout handler\" },\r\n insertText: \"r-mouseout={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mousemove\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mousemove\",\r\n labelDetails: { description: \"Reactive mousemove handler\" },\r\n insertText: \"r-mousemove={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mousedown\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mousedown\",\r\n labelDetails: { description: \"Reactive mousedown handler\" },\r\n insertText: \"r-mousedown={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-mouseup\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-mouseup\",\r\n labelDetails: { description: \"Reactive mouseup handler\" },\r\n insertText: \"r-mouseup={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-scroll\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-scroll\",\r\n labelDetails: { description: \"Reactive scroll handler\" },\r\n insertText: \"r-scroll={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-wheel\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-wheel\",\r\n labelDetails: { description: \"Reactive wheel handler\" },\r\n insertText: \"r-wheel={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-touchstart\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-touchstart\",\r\n labelDetails: { description: \"Reactive touchstart handler\" },\r\n insertText: \"r-touchstart={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-touchend\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-touchend\",\r\n labelDetails: { description: \"Reactive touchend handler\" },\r\n insertText: \"r-touchend={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-touchmove\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-touchmove\",\r\n labelDetails: { description: \"Reactive touchmove handler\" },\r\n insertText: \"r-touchmove={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-drag\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-drag\",\r\n labelDetails: { description: \"Reactive drag handler\" },\r\n insertText: \"r-drag={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-dragstart\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-dragstart\",\r\n labelDetails: { description: \"Reactive dragstart handler\" },\r\n insertText: \"r-dragstart={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-dragend\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-dragend\",\r\n labelDetails: { description: \"Reactive dragend handler\" },\r\n insertText: \"r-dragend={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-dragover\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-dragover\",\r\n labelDetails: { description: \"Reactive dragover handler\" },\r\n insertText: \"r-dragover={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-drop\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-drop\",\r\n labelDetails: { description: \"Reactive drop handler\" },\r\n insertText: \"r-drop={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-load\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-load\",\r\n labelDetails: { description: \"Reactive load handler\" },\r\n insertText: \"r-load={($event) => {}}\",\r\n },\r\n {\r\n name: \"r-error\",\r\n kind: tsx.ScriptElementKind.jsxAttribute,\r\n sortText: \"1_r-error\",\r\n labelDetails: { description: \"Reactive error handler\" },\r\n insertText: \"r-error={($event) => {}}\",\r\n },\r\n ];\r\n\r\n if (!prior) {\r\n return {\r\n isGlobalCompletion: false,\r\n isMemberCompletion: false,\r\n isNewIdentifierLocation: false,\r\n entries: fynixCompletions,\r\n };\r\n }\r\n\r\n return {\r\n ...prior,\r\n entries: [...fynixCompletions, ...prior.entries],\r\n };\r\n };\r\n\r\n // ================================\r\n // HOVER SUPPORT (ENHANCED)\r\n // ================================\r\n const FYNIX_HOVER_INFO: Record<string, Omit<ts.QuickInfo, \"textSpan\">> = {\r\n nixState: {\r\n kind: tsx.ScriptElementKind.functionElement,\r\n kindModifiers: \"declare\",\r\n displayParts: [\r\n {\r\n text: \"function nixState<T>(initialValue: T): NixState<T>\",\r\n kind: \"text\",\r\n },\r\n ],\r\n documentation: [\r\n {\r\n text: \"Creates a reactive state primitive. The value can be accessed via .value and will trigger re-renders when updated.\",\r\n kind: \"text\",\r\n },\r\n ],\r\n },\r\n nixStore: {\r\n kind: tsx.ScriptElementKind.functionElement,\r\n kindModifiers: \"declare\",\r\n displayParts: [\r\n {\r\n text: \"function nixStore<T>(initialValue: T): NixStore<T>\",\r\n kind: \"text\",\r\n },\r\n ],\r\n documentation: [\r\n {\r\n text: \"Creates a global reactive store that persists across component instances.\",\r\n kind: \"text\",\r\n },\r\n ],\r\n },\r\n nixAsync: {\r\n kind: tsx.ScriptElementKind.functionElement,\r\n kindModifiers: \"declare\",\r\n displayParts: [\r\n {\r\n text: \"function nixAsync<T>(asyncFn: () => Promise<T>): NixAsync<T>\",\r\n kind: \"text\",\r\n },\r\n ],\r\n documentation: [\r\n {\r\n text: \"Handles async operations with loading, error, and data states.\",\r\n kind: \"text\",\r\n },\r\n ],\r\n },\r\n nixEffect: {\r\n kind: tsx.ScriptElementKind.functionElement,\r\n kindModifiers: \"declare\",\r\n displayParts: [\r\n {\r\n text: \"function nixEffect(fn: () => void | (() => void), deps?: any[]): void\",\r\n kind: \"text\",\r\n },\r\n ],\r\n documentation: [\r\n {\r\n text: \"Runs side effects when dependencies change. Returns cleanup function.\",\r\n kind: \"text\",\r\n },\r\n ],\r\n },\r\n nixComputed: {\r\n kind: tsx.ScriptElementKind.functionElement,\r\n kindModifiers: \"declare\",\r\n displayParts: [\r\n {\r\n text: \"function nixComputed<T>(fn: () => T, deps: any[]): NixComputed<T>\",\r\n kind: \"text\",\r\n },\r\n ],\r\n documentation: [\r\n {\r\n text: \"Creates a computed value that automatically updates when dependencies change.\",\r\n kind: \"text\",\r\n },\r\n ],\r\n },\r\n nixForm: {\r\n kind: tsx.ScriptElementKind.functionElement,\r\n kindModifiers: \"declare\",\r\n displayParts: [\r\n {\r\n text: \"function nixForm<T>(config: NixFormConfig<T>): NixForm<T>\",\r\n kind: \"text\",\r\n },\r\n ],\r\n documentation: [\r\n {\r\n text: \"Creates a form handler with validation and state management.\",\r\n kind: \"text\",\r\n },\r\n ],\r\n },\r\n };\r\n\r\n proxy.getQuickInfoAtPosition = (fileName, position) => {\r\n let mappedPosition = position;\r\n\r\n // Map position if in .fnx file\r\n if (fileName.endsWith(\".fnx\")) {\r\n const cache = fnxCache.get(fileName);\r\n if (cache) {\r\n mappedPosition = mapOriginalToTransformedWithCache(position, cache);\r\n }\r\n }\r\n\r\n const program = info.languageService.getProgram();\r\n const sf = program?.getSourceFile(fileName);\r\n\r\n if (!sf || !fileName.endsWith(\".fnx\")) {\r\n return info.languageService.getQuickInfoAtPosition(\r\n fileName,\r\n mappedPosition\r\n );\r\n }\r\n\r\n const node = findNode(sf, mappedPosition);\r\n if (!node) {\r\n return info.languageService.getQuickInfoAtPosition(\r\n fileName,\r\n mappedPosition\r\n );\r\n }\r\n\r\n const text = node.getText(sf);\r\n\r\n // Check if this is a Fynix primitive\r\n if (text in FYNIX_HOVER_INFO) {\r\n return {\r\n ...FYNIX_HOVER_INFO[text],\r\n textSpan: { start: node.getStart(), length: node.getWidth() },\r\n };\r\n }\r\n\r\n return info.languageService.getQuickInfoAtPosition(\r\n fileName,\r\n mappedPosition\r\n );\r\n };\r\n\r\n // ================================\r\n // DEFINITION SUPPORT\r\n // ================================\r\n proxy.getDefinitionAtPosition = (fileName, position) => {\r\n let mappedPosition = position;\r\n\r\n if (fileName.endsWith(\".fnx\")) {\r\n const cache = fnxCache.get(fileName);\r\n if (cache) {\r\n mappedPosition = mapOriginalToTransformedWithCache(position, cache);\r\n }\r\n }\r\n\r\n const defs = info.languageService.getDefinitionAtPosition(\r\n fileName,\r\n mappedPosition\r\n );\r\n\r\n if (!defs || !fileName.endsWith(\".fnx\")) return defs;\r\n\r\n // Remap definition positions back to original\r\n const cache = fnxCache.get(fileName);\r\n if (!cache) return defs;\r\n\r\n return defs.map((def) => {\r\n if (def.fileName === fileName) {\r\n const originalStart = mapTransformedToOriginalWithCache(\r\n def.textSpan.start,\r\n cache\r\n );\r\n return {\r\n ...def,\r\n textSpan: {\r\n start: originalStart,\r\n length: def.textSpan.length,\r\n },\r\n };\r\n }\r\n return def;\r\n });\r\n };\r\n\r\n // ================================\r\n // REFERENCES SUPPORT\r\n // ================================\r\n proxy.getReferencesAtPosition = (fileName, position) => {\r\n let mappedPosition = position;\r\n\r\n if (fileName.endsWith(\".fnx\")) {\r\n const cache = fnxCache.get(fileName);\r\n if (cache) {\r\n mappedPosition = mapOriginalToTransformedWithCache(position, cache);\r\n }\r\n }\r\n\r\n const refs = info.languageService.getReferencesAtPosition(\r\n fileName,\r\n mappedPosition\r\n );\r\n\r\n if (!refs || !fileName.endsWith(\".fnx\")) return refs;\r\n\r\n const cache = fnxCache.get(fileName);\r\n if (!cache) return refs;\r\n\r\n return refs.map((ref) => {\r\n if (ref.fileName === fileName) {\r\n const originalStart = mapTransformedToOriginalWithCache(\r\n ref.textSpan.start,\r\n cache\r\n );\r\n return {\r\n ...ref,\r\n textSpan: {\r\n start: originalStart,\r\n length: ref.textSpan.length,\r\n },\r\n };\r\n }\r\n return ref;\r\n });\r\n };\r\n\r\n // ================================\r\n // RENAME SUPPORT\r\n // ================================\r\n proxy.getRenameInfo = (fileName, position) => {\r\n let mappedPosition = position;\r\n\r\n if (fileName.endsWith(\".fnx\")) {\r\n const cache = fnxCache.get(fileName);\r\n if (cache) {\r\n mappedPosition = mapOriginalToTransformedWithCache(position, cache);\r\n }\r\n }\r\n\r\n return info.languageService.getRenameInfo(fileName, mappedPosition);\r\n };\r\n\r\n return proxy;\r\n }\r\n\r\n return { create };\r\n}\r\n\r\n// ================================\r\n// UTILITIES\r\n// ================================\r\nfunction findNode(sf: ts.SourceFile, pos: number): ts.Node | undefined {\r\n function walk(node: ts.Node): ts.Node | undefined {\r\n if (pos >= node.getStart() && pos < node.getEnd()) {\r\n return ts.forEachChild(node, walk) || node;\r\n }\r\n return undefined;\r\n }\r\n return walk(sf);\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["remappedDiag", "cache"]
5
+ "mappings": "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",
6
+ "names": ["_a", "_b", "_c", "_d", "_e", "remappedDiag", "cache"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fynixorg/ui",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "type": "module",
5
5
  "description": "Core package for Fynix UI framework - A lightweight, reactive UI framework with TypeScript support.",
6
6
  "main": "./dist/fynix/index.js",
@@ -1,21 +0,0 @@
1
- export interface VNode {
2
- type: string | symbol | ((props: any) => any);
3
- props: Record<string, any>;
4
- key: string | number | null;
5
- _domNode?: Node;
6
- _rendered?: VNode;
7
- _state?: any;
8
- }
9
- export interface FynixComponentProps {
10
- children?: VNode | VNode[];
11
- key?: string | number;
12
- [prop: string]: any;
13
- }
14
- export type FynixComponent<P extends FynixComponentProps = FynixComponentProps> = (props: P) => VNode | Promise<VNode>;
15
- export interface FnxSFCStructure {
16
- logic: string;
17
- view: string;
18
- style: string;
19
- isScoped: boolean;
20
- }
21
- //# sourceMappingURL=fnx.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fnx.d.ts","sourceRoot":"","sources":["../../types/fnx.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAKD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CACrB;AAKD,MAAM,MAAM,cAAc,CACxB,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,IACjD,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAMzC,MAAM,WAAW,eAAe;IAE9B,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,OAAO,CAAC;CACnB"}
package/dist/types/fnx.js DELETED
@@ -1 +0,0 @@
1
- export {};
package/types/fnx.ts DELETED
@@ -1,65 +0,0 @@
1
- /* MIT License
2
-
3
- * Copyright (c) 2026 Resty Gonzales
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- * SOFTWARE.
22
- */
23
-
24
- /**
25
- * Virtual DOM node type for Fynix
26
- */
27
- export interface VNode {
28
- type: string | symbol | ((props: any) => any);
29
- props: Record<string, any>;
30
- key: string | number | null;
31
- _domNode?: Node;
32
- _rendered?: VNode;
33
- _state?: any;
34
- }
35
-
36
- /**
37
- * Props type for Fynix components
38
- */
39
- export interface FynixComponentProps {
40
- children?: VNode | VNode[];
41
- key?: string | number;
42
- [prop: string]: any;
43
- }
44
-
45
- /**
46
- * Fynix component function type
47
- */
48
- export type FynixComponent<
49
- P extends FynixComponentProps = FynixComponentProps,
50
- > = (props: P) => VNode | Promise<VNode>;
51
-
52
- /**
53
- * Simple SFC structure for user-facing APIs
54
- * This is different from the internal parser's ParsedFnxFile interface
55
- */
56
- export interface FnxSFCStructure {
57
- /** The <logic> block content */
58
- logic: string;
59
- /** The <view> block content (JSX) */
60
- view: string;
61
- /** The <style> block content */
62
- style: string;
63
- /** Whether the style is scoped */
64
- isScoped: boolean;
65
- }