fynixui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fynixui might be problematic. Click here for more details.

Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/README.md +36 -0
  4. package/dist/context/context.d.ts +19 -0
  5. package/dist/context/context.d.ts.map +1 -0
  6. package/dist/context/context.js +4 -0
  7. package/dist/context/context.js.map +7 -0
  8. package/dist/custom/button.d.ts +2 -0
  9. package/dist/custom/button.d.ts.map +1 -0
  10. package/dist/custom/button.js +4 -0
  11. package/dist/custom/button.js.map +7 -0
  12. package/dist/custom/index.d.ts +3 -0
  13. package/dist/custom/index.d.ts.map +1 -0
  14. package/dist/custom/index.js +2 -0
  15. package/dist/custom/index.js.map +7 -0
  16. package/dist/custom/path.d.ts +14 -0
  17. package/dist/custom/path.d.ts.map +1 -0
  18. package/dist/custom/path.js +20 -0
  19. package/dist/custom/path.js.map +7 -0
  20. package/dist/error/errorOverlay.d.ts +3 -0
  21. package/dist/error/errorOverlay.d.ts.map +1 -0
  22. package/dist/error/errorOverlay.js +84 -0
  23. package/dist/error/errorOverlay.js.map +7 -0
  24. package/dist/fynix/index.d.ts +6 -0
  25. package/dist/fynix/index.d.ts.map +1 -0
  26. package/dist/fynix/index.js +5 -0
  27. package/dist/fynix/index.js.map +7 -0
  28. package/dist/hooks/nixAsync.d.ts +20 -0
  29. package/dist/hooks/nixAsync.d.ts.map +1 -0
  30. package/dist/hooks/nixAsync.js +114 -0
  31. package/dist/hooks/nixAsync.js.map +7 -0
  32. package/dist/hooks/nixAsyncCache.d.ts +19 -0
  33. package/dist/hooks/nixAsyncCache.d.ts.map +1 -0
  34. package/dist/hooks/nixAsyncCache.js +137 -0
  35. package/dist/hooks/nixAsyncCache.js.map +7 -0
  36. package/dist/hooks/nixAsyncDebounce.d.ts +22 -0
  37. package/dist/hooks/nixAsyncDebounce.d.ts.map +1 -0
  38. package/dist/hooks/nixAsyncDebounce.js +77 -0
  39. package/dist/hooks/nixAsyncDebounce.js.map +7 -0
  40. package/dist/hooks/nixAsyncQuery.d.ts +16 -0
  41. package/dist/hooks/nixAsyncQuery.d.ts.map +1 -0
  42. package/dist/hooks/nixAsyncQuery.js +87 -0
  43. package/dist/hooks/nixAsyncQuery.js.map +7 -0
  44. package/dist/hooks/nixCallback.d.ts +2 -0
  45. package/dist/hooks/nixCallback.d.ts.map +1 -0
  46. package/dist/hooks/nixCallback.js +34 -0
  47. package/dist/hooks/nixCallback.js.map +7 -0
  48. package/dist/hooks/nixComputed.d.ts +16 -0
  49. package/dist/hooks/nixComputed.d.ts.map +1 -0
  50. package/dist/hooks/nixComputed.js +175 -0
  51. package/dist/hooks/nixComputed.js.map +7 -0
  52. package/dist/hooks/nixDebounce.d.ts +11 -0
  53. package/dist/hooks/nixDebounce.d.ts.map +1 -0
  54. package/dist/hooks/nixDebounce.js +55 -0
  55. package/dist/hooks/nixDebounce.js.map +7 -0
  56. package/dist/hooks/nixEffect.d.ts +4 -0
  57. package/dist/hooks/nixEffect.d.ts.map +1 -0
  58. package/dist/hooks/nixEffect.js +75 -0
  59. package/dist/hooks/nixEffect.js.map +7 -0
  60. package/dist/hooks/nixForm.d.ts +33 -0
  61. package/dist/hooks/nixForm.d.ts.map +1 -0
  62. package/dist/hooks/nixForm.js +123 -0
  63. package/dist/hooks/nixForm.js.map +7 -0
  64. package/dist/hooks/nixFormAsync.d.ts +42 -0
  65. package/dist/hooks/nixFormAsync.d.ts.map +1 -0
  66. package/dist/hooks/nixFormAsync.js +169 -0
  67. package/dist/hooks/nixFormAsync.js.map +7 -0
  68. package/dist/hooks/nixInterval.d.ts +2 -0
  69. package/dist/hooks/nixInterval.d.ts.map +1 -0
  70. package/dist/hooks/nixInterval.js +23 -0
  71. package/dist/hooks/nixInterval.js.map +7 -0
  72. package/dist/hooks/nixLazy.d.ts +8 -0
  73. package/dist/hooks/nixLazy.d.ts.map +1 -0
  74. package/dist/hooks/nixLazy.js +58 -0
  75. package/dist/hooks/nixLazy.js.map +7 -0
  76. package/dist/hooks/nixLazyAsync.d.ts +10 -0
  77. package/dist/hooks/nixLazyAsync.d.ts.map +1 -0
  78. package/dist/hooks/nixLazyAsync.js +71 -0
  79. package/dist/hooks/nixLazyAsync.js.map +7 -0
  80. package/dist/hooks/nixLazyFormAsync.d.ts +50 -0
  81. package/dist/hooks/nixLazyFormAsync.d.ts.map +1 -0
  82. package/dist/hooks/nixLazyFormAsync.js +221 -0
  83. package/dist/hooks/nixLazyFormAsync.js.map +7 -0
  84. package/dist/hooks/nixLocalStorage.d.ts +8 -0
  85. package/dist/hooks/nixLocalStorage.d.ts.map +1 -0
  86. package/dist/hooks/nixLocalStorage.js +136 -0
  87. package/dist/hooks/nixLocalStorage.js.map +7 -0
  88. package/dist/hooks/nixMemo.d.ts +2 -0
  89. package/dist/hooks/nixMemo.d.ts.map +1 -0
  90. package/dist/hooks/nixMemo.js +30 -0
  91. package/dist/hooks/nixMemo.js.map +7 -0
  92. package/dist/hooks/nixPrevious.d.ts +2 -0
  93. package/dist/hooks/nixPrevious.d.ts.map +1 -0
  94. package/dist/hooks/nixPrevious.js +15 -0
  95. package/dist/hooks/nixPrevious.js.map +7 -0
  96. package/dist/hooks/nixRef.d.ts +4 -0
  97. package/dist/hooks/nixRef.d.ts.map +1 -0
  98. package/dist/hooks/nixRef.js +17 -0
  99. package/dist/hooks/nixRef.js.map +7 -0
  100. package/dist/hooks/nixState.d.ts +15 -0
  101. package/dist/hooks/nixState.d.ts.map +1 -0
  102. package/dist/hooks/nixState.js +127 -0
  103. package/dist/hooks/nixState.js.map +7 -0
  104. package/dist/hooks/nixStore.d.ts +10 -0
  105. package/dist/hooks/nixStore.d.ts.map +1 -0
  106. package/dist/hooks/nixStore.js +103 -0
  107. package/dist/hooks/nixStore.js.map +7 -0
  108. package/dist/package.json +217 -0
  109. package/dist/parser/fnx-parser.d.ts +49 -0
  110. package/dist/parser/fnx-parser.d.ts.map +1 -0
  111. package/dist/parser/fnx-parser.js +483 -0
  112. package/dist/parser/fnx-parser.js.map +7 -0
  113. package/dist/plugins/vite-plugin-res.d.ts +29 -0
  114. package/dist/plugins/vite-plugin-res.d.ts.map +1 -0
  115. package/dist/plugins/vite-plugin-res.js +304 -0
  116. package/dist/plugins/vite-plugin-res.js.map +7 -0
  117. package/dist/router/router.d.ts +48 -0
  118. package/dist/router/router.d.ts.map +1 -0
  119. package/dist/router/router.js +872 -0
  120. package/dist/router/router.js.map +7 -0
  121. package/dist/runtime.d.ts +124 -0
  122. package/dist/runtime.d.ts.map +1 -0
  123. package/dist/runtime.js +1358 -0
  124. package/dist/runtime.js.map +7 -0
  125. package/dist/typescript-fynix-plugin/index.js +1065 -0
  126. package/dist/typescript-fynix-plugin/index.js.map +7 -0
  127. package/package.json +250 -0
  128. package/types/fnx.d.ts +72 -0
  129. package/types/fynix-ui.d.ts +323 -0
  130. package/types/global.d.ts +275 -0
  131. package/types/index.d.ts +37 -0
  132. package/types/jsx.d.ts +988 -0
  133. package/types/vite-env.d.ts +550 -0
@@ -0,0 +1,304 @@
1
+ import { transform, } from "esbuild";
2
+ import { normalizePath } from "vite";
3
+ import * as ts from "typescript";
4
+ import { parseFnxFile, validateParsedFnx, transformToComponent, } from "../parser/fnx-parser.js";
5
+ const colors = {
6
+ reset: "\x1b[0m",
7
+ red: "\x1b[31m",
8
+ green: "\x1b[32m",
9
+ yellow: "\x1b[33m",
10
+ blue: "\x1b[34m",
11
+ magenta: "\x1b[35m",
12
+ cyan: "\x1b[36m",
13
+ gray: "\x1b[90m",
14
+ bold: "\x1b[1m",
15
+ };
16
+ class TypeScriptChecker {
17
+ constructor(customOptions) {
18
+ this.virtualFiles = new Map();
19
+ this.program = null;
20
+ this.compilerOptions = {
21
+ noEmit: true,
22
+ strict: false,
23
+ target: ts.ScriptTarget.ESNext,
24
+ module: ts.ModuleKind.ESNext,
25
+ jsx: ts.JsxEmit.Preserve,
26
+ lib: ["lib.es2023.d.ts", "lib.dom.d.ts"],
27
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
28
+ esModuleInterop: true,
29
+ skipLibCheck: true,
30
+ allowSyntheticDefaultImports: true,
31
+ strictNullChecks: false,
32
+ strictFunctionTypes: false,
33
+ noImplicitAny: false,
34
+ allowJs: true,
35
+ checkJs: false,
36
+ resolveJsonModule: true,
37
+ isolatedModules: true,
38
+ ...customOptions,
39
+ };
40
+ }
41
+ addFile(fileName, content) {
42
+ this.virtualFiles.set(fileName, content);
43
+ this.program = null;
44
+ }
45
+ createCompilerHost() {
46
+ const defaultHost = ts.createCompilerHost(this.compilerOptions);
47
+ return {
48
+ ...defaultHost,
49
+ getSourceFile: (fileName, languageVersion) => {
50
+ if (this.virtualFiles.has(fileName)) {
51
+ const content = this.virtualFiles.get(fileName);
52
+ if (content === undefined)
53
+ return undefined;
54
+ return ts.createSourceFile(fileName, content, languageVersion, true);
55
+ }
56
+ try {
57
+ if (ts.sys.fileExists(fileName)) {
58
+ const content = ts.sys.readFile(fileName);
59
+ if (content !== undefined) {
60
+ return ts.createSourceFile(fileName, content, languageVersion, true);
61
+ }
62
+ }
63
+ }
64
+ catch (err) {
65
+ }
66
+ return undefined;
67
+ },
68
+ fileExists: (fileName) => {
69
+ if (this.virtualFiles.has(fileName))
70
+ return true;
71
+ return ts.sys.fileExists(fileName);
72
+ },
73
+ readFile: (fileName) => {
74
+ if (this.virtualFiles.has(fileName)) {
75
+ const content = this.virtualFiles.get(fileName);
76
+ return content === undefined ? undefined : content;
77
+ }
78
+ const sysContent = ts.sys.readFile(fileName);
79
+ return sysContent === undefined ? undefined : sysContent;
80
+ },
81
+ writeFile: () => { },
82
+ };
83
+ }
84
+ checkFile(fileName) {
85
+ const errors = [];
86
+ try {
87
+ if (!this.virtualFiles.has(fileName)) {
88
+ return ["File not found in virtual file system"];
89
+ }
90
+ const compilerHost = this.createCompilerHost();
91
+ if (!this.program) {
92
+ this.program = ts.createProgram([fileName], this.compilerOptions, compilerHost);
93
+ }
94
+ const sourceFile = this.program.getSourceFile(fileName);
95
+ if (!sourceFile) {
96
+ return [`Could not get source file for ${fileName}`];
97
+ }
98
+ const diagnostics = [
99
+ ...this.program.getSyntacticDiagnostics(sourceFile),
100
+ ...this.program.getSemanticDiagnostics(sourceFile),
101
+ ];
102
+ const skipCodes = new Set([2307, 2792, 7016, 2304, 7026, 2874]);
103
+ diagnostics.forEach((diagnostic) => {
104
+ if (skipCodes.has(diagnostic.code)) {
105
+ return;
106
+ }
107
+ if (diagnostic.file && diagnostic.start !== undefined) {
108
+ const pos = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
109
+ const line = pos?.line ?? 0;
110
+ const character = pos?.character ?? 0;
111
+ const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
112
+ errors.push(`${colors.yellow}Line ${line + 1}:${character + 1}${colors.reset} - ${message} ${colors.gray}(TS${diagnostic.code})${colors.reset}`);
113
+ }
114
+ else {
115
+ const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
116
+ errors.push(`${message} ${colors.gray}(TS${diagnostic.code})${colors.reset}`);
117
+ }
118
+ });
119
+ }
120
+ catch (error) {
121
+ errors.push(`${colors.red}Type checking error:${colors.reset} ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ return errors;
124
+ }
125
+ clear() {
126
+ this.virtualFiles.clear();
127
+ this.program = null;
128
+ }
129
+ }
130
+ export default function fynixPlugin(options = {}) {
131
+ const { jsxFactory = "Fynix", jsxFragment = "Fynix.Fragment", include = [".ts", ".js", ".jsx", ".tsx", ".fnx"], exclude = ["node_modules"], sourcemap = true, esbuildOptions = {}, enableSFC = true, showGeneratedCode = false, typeCheck = false, tsConfig, } = options;
132
+ let typeChecker = null;
133
+ if (typeCheck) {
134
+ typeChecker = new TypeScriptChecker(tsConfig);
135
+ }
136
+ return {
137
+ name: "vite-plugin-fynix-sfc",
138
+ enforce: "pre",
139
+ async transform(code, id) {
140
+ const normalizedId = normalizePath(id);
141
+ const shouldExclude = exclude.some((pattern) => normalizedId.includes(pattern));
142
+ if (shouldExclude)
143
+ return null;
144
+ const shouldInclude = include.some((ext) => normalizedId.endsWith(ext));
145
+ if (!shouldInclude)
146
+ return null;
147
+ const ctx = this;
148
+ if (typeof ctx.addWatchFile === "function") {
149
+ ctx.addWatchFile(id);
150
+ }
151
+ try {
152
+ let codeToTransform = code;
153
+ let loader = "tsx";
154
+ let shouldTypeCheck = false;
155
+ if (normalizedId.endsWith(".fnx") && enableSFC) {
156
+ const parsed = parseFnxFile(code);
157
+ validateParsedFnx(parsed, normalizedId);
158
+ const transformResult = transformToComponent(parsed, {
159
+ filePath: normalizedId,
160
+ jsxFactory,
161
+ includeStyleInjection: true,
162
+ includeMetaInjection: true,
163
+ });
164
+ codeToTransform = transformResult.code;
165
+ if (showGeneratedCode) {
166
+ console.log(`\n${colors.cyan}${"=".repeat(80)}${colors.reset}`);
167
+ console.log(`${colors.cyan}[Fynix SFC]${colors.reset} Generated code for: ${colors.gray}${normalizedId}${colors.reset}`);
168
+ console.log(`${colors.cyan}${"=".repeat(80)}${colors.reset}`);
169
+ console.log(codeToTransform);
170
+ console.log(`${colors.cyan}${"=".repeat(80)}${colors.reset}\n`);
171
+ }
172
+ shouldTypeCheck = typeCheck && parsed.logicLang === "ts";
173
+ loader = parsed.logicLang === "ts" ? "tsx" : "jsx";
174
+ if (shouldTypeCheck && typeChecker) {
175
+ const virtualFileName = normalizedId.replace(/\.fnx$/, ".virtual.tsx");
176
+ typeChecker.addFile(virtualFileName, codeToTransform);
177
+ const typeErrors = typeChecker.checkFile(virtualFileName);
178
+ if (typeErrors.length > 0) {
179
+ console.error(`\n${colors.red}${colors.bold}[Fynix SFC] TypeScript Errors${colors.reset} in ${colors.cyan}${normalizedId}${colors.reset}:`);
180
+ typeErrors.forEach((error) => console.error(` ${error}`));
181
+ console.error("");
182
+ if (process.env.NODE_ENV === "production") {
183
+ throw new Error(`TypeScript errors in ${normalizedId}`);
184
+ }
185
+ }
186
+ shouldTypeCheck = false;
187
+ }
188
+ }
189
+ else {
190
+ if (normalizedId.endsWith(".ts")) {
191
+ loader = "ts";
192
+ shouldTypeCheck = typeCheck;
193
+ }
194
+ else if (normalizedId.endsWith(".tsx")) {
195
+ loader = "tsx";
196
+ shouldTypeCheck = typeCheck;
197
+ }
198
+ else if (normalizedId.endsWith(".jsx")) {
199
+ loader = "jsx";
200
+ }
201
+ else if (normalizedId.endsWith(".js")) {
202
+ loader = "js";
203
+ }
204
+ }
205
+ if (shouldTypeCheck && typeChecker) {
206
+ typeChecker.addFile(normalizedId, codeToTransform);
207
+ const typeErrors = typeChecker.checkFile(normalizedId);
208
+ if (typeErrors.length > 0) {
209
+ console.error(`\n${colors.red}${colors.bold}[Fynix SFC] TypeScript Errors${colors.reset} in ${colors.cyan}${normalizedId}${colors.reset}:`);
210
+ typeErrors.forEach((error) => console.error(` ${error}`));
211
+ console.error("");
212
+ if (process.env.NODE_ENV === "production") {
213
+ throw new Error(`TypeScript errors in ${normalizedId}`);
214
+ }
215
+ }
216
+ }
217
+ const result = await transform(codeToTransform, {
218
+ loader,
219
+ jsxFactory,
220
+ jsxFragment,
221
+ sourcemap,
222
+ sourcefile: id,
223
+ target: "esnext",
224
+ format: "esm",
225
+ ...esbuildOptions,
226
+ });
227
+ return {
228
+ code: result.code,
229
+ map: result.map || null,
230
+ };
231
+ }
232
+ catch (error) {
233
+ const err = error;
234
+ console.error(`\n${colors.red}${colors.bold}[Fynix SFC] Transform Error${colors.reset} in ${colors.cyan}${id}${colors.reset}:`);
235
+ console.error(` ${colors.red}${err.message}${colors.reset}\n`);
236
+ const ctx = this;
237
+ if (typeof ctx.error === "function") {
238
+ ctx.error({
239
+ message: `Failed to transform ${id}: ${err.message}`,
240
+ stack: err.stack,
241
+ id,
242
+ });
243
+ }
244
+ else {
245
+ throw err;
246
+ }
247
+ return null;
248
+ }
249
+ },
250
+ handleHotUpdate(ctx) {
251
+ const { file, server } = ctx;
252
+ const normalizedFile = normalizePath(file);
253
+ const shouldReload = include.some((ext) => normalizedFile.endsWith(ext));
254
+ if (shouldReload) {
255
+ console.log(`${colors.green}[HMR]${colors.reset} ${colors.gray}${normalizedFile}${colors.reset}`);
256
+ if (typeChecker) {
257
+ typeChecker.clear();
258
+ }
259
+ server.ws.send({
260
+ type: "full-reload",
261
+ path: "*",
262
+ });
263
+ return [];
264
+ }
265
+ return undefined;
266
+ },
267
+ config() {
268
+ const config = {
269
+ esbuild: {
270
+ jsxFactory,
271
+ jsxFragment,
272
+ jsxInject: `import { ${jsxFactory} } from '@fynixorg/ui'`,
273
+ },
274
+ optimizeDeps: {
275
+ include: ["@fynixorg/ui"],
276
+ esbuildOptions: {
277
+ jsx: "transform",
278
+ jsxFactory,
279
+ jsxFragment,
280
+ },
281
+ },
282
+ resolve: {
283
+ extensions: [".fnx", ".ts", ".tsx", ".js", ".jsx", ".json"],
284
+ },
285
+ };
286
+ return config;
287
+ },
288
+ buildStart() {
289
+ console.log(`${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} Initialized`);
290
+ if (enableSFC) {
291
+ console.log(`${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} SFC support: ${colors.green}enabled${colors.reset}`);
292
+ }
293
+ if (typeCheck) {
294
+ console.log(`${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} Type checking: ${colors.green}enabled${colors.reset}`);
295
+ }
296
+ },
297
+ buildEnd() {
298
+ if (typeChecker) {
299
+ typeChecker.clear();
300
+ }
301
+ },
302
+ };
303
+ }
304
+ export { fynixPlugin, TypeScriptChecker };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../plugins/vite-plugin-res.ts"],
4
+ "sourcesContent": ["import {\r\n transform,\r\n type TransformOptions as EsbuildTransformOptions,\r\n} from \"esbuild\";\r\nimport type { HmrContext, UserConfig } from \"vite\";\r\nimport { normalizePath } from \"vite\";\r\nimport * as ts from \"typescript\";\r\nimport {\r\n parseFnxFile,\r\n validateParsedFnx,\r\n transformToComponent,\r\n} from \"../parser/fnx-parser.js\";\r\n\r\n/**\r\n * ANSI color codes for terminal output\r\n */\r\nconst colors = {\r\n reset: \"\\x1b[0m\",\r\n red: \"\\x1b[31m\",\r\n green: \"\\x1b[32m\",\r\n yellow: \"\\x1b[33m\",\r\n blue: \"\\x1b[34m\",\r\n magenta: \"\\x1b[35m\",\r\n cyan: \"\\x1b[36m\",\r\n gray: \"\\x1b[90m\",\r\n bold: \"\\x1b[1m\",\r\n};\r\n\r\n/**\r\n * Vite plugin options for Fynix with SFC support\r\n */\r\ninterface FynixPluginOptions {\r\n /**\r\n * JSX factory function name\r\n * @default \"Fynix\"\r\n */\r\n jsxFactory?: string;\r\n\r\n /**\r\n * JSX fragment factory name\r\n * @default \"Fynix.Fragment\"\r\n */\r\n jsxFragment?: string;\r\n\r\n /**\r\n * File extensions to transform\r\n * @default [\".ts\", \".js\", \".jsx\", \".tsx\", \".fnx\"]\r\n */\r\n include?: string[];\r\n\r\n /**\r\n * Paths to exclude from transformation\r\n * @default [\"node_modules\"]\r\n */\r\n exclude?: string[];\r\n\r\n /**\r\n * Enable source maps\r\n * @default true\r\n */\r\n sourcemap?: boolean;\r\n\r\n /**\r\n * Custom esbuild transform options\r\n */\r\n esbuildOptions?: Partial<EsbuildTransformOptions>;\r\n\r\n /**\r\n * Enable SFC parsing for .fnx files\r\n * @default true\r\n */\r\n enableSFC?: boolean;\r\n\r\n /**\r\n * Enable debug logging\r\n * @default false\r\n */\r\n debug?: boolean;\r\n\r\n /**\r\n * Show generated code in console (useful for debugging SFC transformation)\r\n * @default false\r\n */\r\n showGeneratedCode?: boolean;\r\n\r\n /**\r\n * Enable TypeScript type checking (slower but catches type errors)\r\n * @default false\r\n */\r\n typeCheck?: boolean;\r\n\r\n /**\r\n * TypeScript compiler options override\r\n */\r\n tsConfig?: ts.CompilerOptions;\r\n}\r\n\r\n/**\r\n * Extended context type that includes Vite's transform context methods\r\n */\r\ninterface TransformContext {\r\n addWatchFile?: (id: string) => void;\r\n error?: (error: { message: string; stack?: string; id?: string }) => void;\r\n}\r\n\r\n/**\r\n * Improved type checker with better error handling and virtual file system\r\n */\r\nclass TypeScriptChecker {\r\n private compilerOptions: ts.CompilerOptions;\r\n private virtualFiles: Map<string, string> = new Map();\r\n private program: ts.Program | null = null;\r\n\r\n constructor(customOptions?: ts.CompilerOptions) {\r\n this.compilerOptions = {\r\n noEmit: true,\r\n strict: false,\r\n target: ts.ScriptTarget.ESNext,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: ts.JsxEmit.Preserve,\r\n lib: [\"lib.es2023.d.ts\", \"lib.dom.d.ts\"],\r\n moduleResolution: ts.ModuleResolutionKind.Bundler,\r\n esModuleInterop: true,\r\n skipLibCheck: true,\r\n allowSyntheticDefaultImports: true,\r\n strictNullChecks: false,\r\n strictFunctionTypes: false,\r\n noImplicitAny: false,\r\n allowJs: true,\r\n checkJs: false,\r\n resolveJsonModule: true,\r\n isolatedModules: true,\r\n ...customOptions,\r\n };\r\n }\r\n\r\n addFile(fileName: string, content: string): void {\r\n this.virtualFiles.set(fileName, content);\r\n this.program = null;\r\n }\r\n\r\n private createCompilerHost(): ts.CompilerHost {\r\n const defaultHost = ts.createCompilerHost(this.compilerOptions);\r\n\r\n return {\r\n ...defaultHost,\r\n getSourceFile: (fileName, languageVersion) => {\r\n if (this.virtualFiles.has(fileName)) {\r\n const content = this.virtualFiles.get(fileName);\r\n if (content === undefined) return undefined;\r\n return ts.createSourceFile(fileName, content, languageVersion, true);\r\n }\r\n\r\n try {\r\n if (ts.sys.fileExists(fileName)) {\r\n const content = ts.sys.readFile(fileName);\r\n if (content !== undefined) {\r\n return ts.createSourceFile(\r\n fileName,\r\n content,\r\n languageVersion,\r\n true\r\n );\r\n }\r\n }\r\n } catch (err) {\r\n // Silent fail\r\n }\r\n\r\n return undefined;\r\n },\r\n fileExists: (fileName) => {\r\n if (this.virtualFiles.has(fileName)) return true;\r\n return ts.sys.fileExists(fileName);\r\n },\r\n readFile: (fileName) => {\r\n if (this.virtualFiles.has(fileName)) {\r\n const content = this.virtualFiles.get(fileName);\r\n return content === undefined ? undefined : content;\r\n }\r\n const sysContent = ts.sys.readFile(fileName);\r\n return sysContent === undefined ? undefined : sysContent;\r\n },\r\n writeFile: () => { },\r\n };\r\n }\r\n\r\n checkFile(fileName: string): string[] {\r\n const errors: string[] = [];\r\n\r\n try {\r\n if (!this.virtualFiles.has(fileName)) {\r\n return [\"File not found in virtual file system\"];\r\n }\r\n\r\n const compilerHost = this.createCompilerHost();\r\n\r\n if (!this.program) {\r\n this.program = ts.createProgram(\r\n [fileName],\r\n this.compilerOptions,\r\n compilerHost\r\n );\r\n }\r\n\r\n const sourceFile = this.program.getSourceFile(fileName);\r\n if (!sourceFile) {\r\n return [`Could not get source file for ${fileName}`];\r\n }\r\n\r\n const diagnostics = [\r\n ...this.program.getSyntacticDiagnostics(sourceFile),\r\n ...this.program.getSemanticDiagnostics(sourceFile),\r\n ];\r\n\r\n const skipCodes = new Set([2307, 2792, 7016, 2304, 7026, 2874]);\r\n\r\n diagnostics.forEach((diagnostic) => {\r\n if (skipCodes.has(diagnostic.code)) {\r\n return;\r\n }\r\n\r\n if (diagnostic.file && diagnostic.start !== undefined) {\r\n const pos = diagnostic.file.getLineAndCharacterOfPosition(\r\n diagnostic.start\r\n );\r\n const line = pos?.line ?? 0;\r\n const character = pos?.character ?? 0;\r\n const message = ts.flattenDiagnosticMessageText(\r\n diagnostic.messageText,\r\n \"\\n\"\r\n );\r\n errors.push(\r\n `${colors.yellow}Line ${line + 1}:${character + 1}${colors.reset} - ${message} ${colors.gray}(TS${diagnostic.code})${colors.reset}`\r\n );\r\n } else {\r\n const message = ts.flattenDiagnosticMessageText(\r\n diagnostic.messageText,\r\n \"\\n\"\r\n );\r\n errors.push(\r\n `${message} ${colors.gray}(TS${diagnostic.code})${colors.reset}`\r\n );\r\n }\r\n });\r\n } catch (error) {\r\n errors.push(\r\n `${colors.red}Type checking error:${colors.reset} ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n clear(): void {\r\n this.virtualFiles.clear();\r\n this.program = null;\r\n }\r\n}\r\n\r\n/**\r\n * Vite plugin for Fynix framework with improved SFC support\r\n */\r\nexport default function fynixPlugin(options: FynixPluginOptions = {}): any {\r\n const {\r\n jsxFactory = \"Fynix\",\r\n jsxFragment = \"Fynix.Fragment\",\r\n include = [\".ts\", \".js\", \".jsx\", \".tsx\", \".fnx\"],\r\n exclude = [\"node_modules\"],\r\n sourcemap = true,\r\n esbuildOptions = {},\r\n enableSFC = true,\r\n showGeneratedCode = false,\r\n typeCheck = false,\r\n tsConfig,\r\n } = options;\r\n\r\n let typeChecker: TypeScriptChecker | null = null;\r\n\r\n if (typeCheck) {\r\n typeChecker = new TypeScriptChecker(tsConfig);\r\n }\r\n\r\n return {\r\n name: \"vite-plugin-fynix-sfc\",\r\n enforce: \"pre\" as const,\r\n\r\n async transform(code: string, id: string) {\r\n const normalizedId = normalizePath(id);\r\n\r\n const shouldExclude = exclude.some((pattern) =>\r\n normalizedId.includes(pattern)\r\n );\r\n if (shouldExclude) return null;\r\n\r\n const shouldInclude = include.some((ext) => normalizedId.endsWith(ext));\r\n if (!shouldInclude) return null;\r\n\r\n const ctx = this as unknown as TransformContext;\r\n if (typeof ctx.addWatchFile === \"function\") {\r\n ctx.addWatchFile(id);\r\n }\r\n\r\n try {\r\n let codeToTransform = code;\r\n let loader: EsbuildTransformOptions[\"loader\"] = \"tsx\";\r\n let shouldTypeCheck = false;\r\n\r\n if (normalizedId.endsWith(\".fnx\") && enableSFC) {\r\n const parsed = parseFnxFile(code);\r\n validateParsedFnx(parsed, normalizedId);\r\n\r\n const transformResult = transformToComponent(parsed, {\r\n filePath: normalizedId,\r\n jsxFactory,\r\n includeStyleInjection: true,\r\n includeMetaInjection: true,\r\n });\r\n\r\n codeToTransform = transformResult.code;\r\n\r\n if (showGeneratedCode) {\r\n console.log(`\\n${colors.cyan}${\"=\".repeat(80)}${colors.reset}`);\r\n console.log(\r\n `${colors.cyan}[Fynix SFC]${colors.reset} Generated code for: ${colors.gray}${normalizedId}${colors.reset}`\r\n );\r\n console.log(`${colors.cyan}${\"=\".repeat(80)}${colors.reset}`);\r\n console.log(codeToTransform);\r\n console.log(`${colors.cyan}${\"=\".repeat(80)}${colors.reset}\\n`);\r\n }\r\n\r\n shouldTypeCheck = typeCheck && parsed.logicLang === \"ts\";\r\n loader = parsed.logicLang === \"ts\" ? \"tsx\" : \"jsx\";\r\n\r\n if (shouldTypeCheck && typeChecker) {\r\n const virtualFileName = normalizedId.replace(\r\n /\\.fnx$/,\r\n \".virtual.tsx\"\r\n );\r\n typeChecker.addFile(virtualFileName, codeToTransform);\r\n const typeErrors = typeChecker.checkFile(virtualFileName);\r\n\r\n if (typeErrors.length > 0) {\r\n console.error(\r\n `\\n${colors.red}${colors.bold}[Fynix SFC] TypeScript Errors${colors.reset} in ${colors.cyan}${normalizedId}${colors.reset}:`\r\n );\r\n typeErrors.forEach((error) => console.error(` ${error}`));\r\n console.error(\"\");\r\n\r\n if (process.env.NODE_ENV === \"production\") {\r\n throw new Error(`TypeScript errors in ${normalizedId}`);\r\n }\r\n }\r\n\r\n shouldTypeCheck = false;\r\n }\r\n } else {\r\n if (normalizedId.endsWith(\".ts\")) {\r\n loader = \"ts\";\r\n shouldTypeCheck = typeCheck;\r\n } else if (normalizedId.endsWith(\".tsx\")) {\r\n loader = \"tsx\";\r\n shouldTypeCheck = typeCheck;\r\n } else if (normalizedId.endsWith(\".jsx\")) {\r\n loader = \"jsx\";\r\n } else if (normalizedId.endsWith(\".js\")) {\r\n loader = \"js\";\r\n }\r\n }\r\n\r\n if (shouldTypeCheck && typeChecker) {\r\n typeChecker.addFile(normalizedId, codeToTransform);\r\n const typeErrors = typeChecker.checkFile(normalizedId);\r\n\r\n if (typeErrors.length > 0) {\r\n console.error(\r\n `\\n${colors.red}${colors.bold}[Fynix SFC] TypeScript Errors${colors.reset} in ${colors.cyan}${normalizedId}${colors.reset}:`\r\n );\r\n typeErrors.forEach((error) => console.error(` ${error}`));\r\n console.error(\"\");\r\n\r\n if (process.env.NODE_ENV === \"production\") {\r\n throw new Error(`TypeScript errors in ${normalizedId}`);\r\n }\r\n }\r\n }\r\n\r\n const result = await transform(codeToTransform, {\r\n loader,\r\n jsxFactory,\r\n jsxFragment,\r\n sourcemap,\r\n sourcefile: id,\r\n target: \"esnext\",\r\n format: \"esm\",\r\n ...esbuildOptions,\r\n });\r\n\r\n return {\r\n code: result.code,\r\n map: result.map || null,\r\n };\r\n } catch (error) {\r\n const err = error as Error;\r\n console.error(\r\n `\\n${colors.red}${colors.bold}[Fynix SFC] Transform Error${colors.reset} in ${colors.cyan}${id}${colors.reset}:`\r\n );\r\n console.error(` ${colors.red}${err.message}${colors.reset}\\n`);\r\n\r\n const ctx = this as unknown as TransformContext;\r\n if (typeof ctx.error === \"function\") {\r\n ctx.error({\r\n message: `Failed to transform ${id}: ${err.message}`,\r\n stack: err.stack,\r\n id,\r\n });\r\n } else {\r\n throw err;\r\n }\r\n return null;\r\n }\r\n },\r\n\r\n handleHotUpdate(ctx: HmrContext) {\r\n const { file, server } = ctx;\r\n const normalizedFile = normalizePath(file);\r\n const shouldReload = include.some((ext) => normalizedFile.endsWith(ext));\r\n\r\n if (shouldReload) {\r\n console.log(\r\n `${colors.green}[HMR]${colors.reset} ${colors.gray}${normalizedFile}${colors.reset}`\r\n );\r\n\r\n if (typeChecker) {\r\n typeChecker.clear();\r\n }\r\n\r\n server.ws.send({\r\n type: \"full-reload\",\r\n path: \"*\",\r\n });\r\n return [];\r\n }\r\n\r\n return undefined;\r\n },\r\n\r\n config() {\r\n const config: Omit<UserConfig, \"plugins\"> = {\r\n esbuild: {\r\n jsxFactory,\r\n jsxFragment,\r\n jsxInject: `import { ${jsxFactory} } from '@fynixorg/ui'`,\r\n },\r\n optimizeDeps: {\r\n include: [\"@fynixorg/ui\"],\r\n esbuildOptions: {\r\n jsx: \"transform\",\r\n jsxFactory,\r\n jsxFragment,\r\n },\r\n },\r\n resolve: {\r\n extensions: [\".fnx\", \".ts\", \".tsx\", \".js\", \".jsx\", \".json\"],\r\n },\r\n };\r\n\r\n return config;\r\n },\r\n\r\n buildStart() {\r\n console.log(\r\n `${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} Initialized`\r\n );\r\n if (enableSFC) {\r\n console.log(\r\n `${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} SFC support: ${colors.green}enabled${colors.reset}`\r\n );\r\n }\r\n if (typeCheck) {\r\n console.log(\r\n `${colors.cyan}[vite-plugin-fynix-sfc]${colors.reset} Type checking: ${colors.green}enabled${colors.reset}`\r\n );\r\n }\r\n },\r\n\r\n buildEnd() {\r\n if (typeChecker) {\r\n typeChecker.clear();\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { fynixPlugin, TypeScriptChecker };\r\nexport type { FynixPluginOptions };\r\n"],
5
+ "mappings": "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",
6
+ "names": ["ctx"]
7
+ }
@@ -0,0 +1,48 @@
1
+ interface NestedRoute {
2
+ path: string;
3
+ component: ComponentFunction;
4
+ children?: NestedRoute[];
5
+ layout?: ComponentFunction;
6
+ keepAlive?: boolean;
7
+ }
8
+ interface ComponentFunction {
9
+ (props: any): any;
10
+ }
11
+ interface RouteComponent {
12
+ (props: any): any;
13
+ props?: Record<string, any> | (() => Record<string, any>);
14
+ meta?: RouteMeta | ((params: Record<string, string>) => RouteMeta);
15
+ }
16
+ interface RouteMeta {
17
+ title?: string;
18
+ description?: string;
19
+ keywords?: string;
20
+ twitterCard?: string;
21
+ ogTitle?: string;
22
+ ogDescription?: string;
23
+ ogImage?: string;
24
+ }
25
+ interface DynamicRoute {
26
+ pattern: string;
27
+ regex: RegExp;
28
+ component: RouteComponent;
29
+ params: string[];
30
+ }
31
+ interface FynixRouter {
32
+ mountRouter(selector?: string): void;
33
+ navigate(path: string, props?: Record<string, any>): void;
34
+ replace(path: string, props?: Record<string, any>): void;
35
+ back(): void;
36
+ cleanup(): void;
37
+ routes: Record<string, RouteComponent>;
38
+ dynamicRoutes: DynamicRoute[];
39
+ preloadRoute?(path: string): Promise<void>;
40
+ clearCache?(): void;
41
+ enableNestedRouting?(routes: NestedRoute[]): void;
42
+ }
43
+ declare function createFynix(): FynixRouter;
44
+ export { createFynix };
45
+ export default createFynix;
46
+ export declare function setLinkProps(key: string, props: Record<string, any>): void;
47
+ export declare function clearLinkProps(key: string): void;
48
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../router/router.ts"],"names":[],"mappings":"AA2DA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;CACpE;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAaD,UAAU,WAAW;IACnB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,YAAY,EAAE,CAAC;IAE9B,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,UAAU,CAAC,IAAI,IAAI,CAAC;IACpB,mBAAmB,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;CACnD;AA0pBD,iBAAS,WAAW,IAAI,WAAW,CAmjBlC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC;AAM3B,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAqB1E;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAoBhD"}