fynixui 1.0.2 → 1.0.4

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

Potentially problematic release.


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

@@ -2,5 +2,5 @@ export * from "../runtime.js";
2
2
  export * from "../router/router.js";
3
3
  export { default as createFynix } from "../router/router.js";
4
4
  export { Fynix } from "../runtime.js";
5
- export * from "../types/fnx.js";
5
+ export { For } from "../hooks/nixFor.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../fynix/index.ts"],"names":[],"mappings":"AAuBA,cAAc,eAAe,CAAC;AAE9B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../fynix/index.ts"],"names":[],"mappings":"AA2BA,cAAc,eAAe,CAAC;AAE9B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC"}
@@ -2,4 +2,4 @@ export * from "../runtime.js";
2
2
  export * from "../router/router.js";
3
3
  export { default as createFynix } from "../router/router.js";
4
4
  export { Fynix } from "../runtime.js";
5
- export * from "../types/fnx.js";
5
+ export { For } from "../hooks/nixFor.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../fynix/index.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// fynix/index.js - Single entry point for all core functionality\r\nexport * from \"../runtime.js\";\r\n// Re-export Fynix namespace and hooks under new names\r\nexport * from \"../router/router.js\";\r\nexport { default as createFynix } from \"../router/router.js\";\r\nexport { Fynix } from \"../runtime.js\";\r\n\r\n// Export types for .fnx module resolution\r\nexport * from \"../types/fnx.js\";\r\n"],
5
- "mappings": "AAuBA,cAAc;AAEd,cAAc;AACd,SAAoB,WAAXA,gBAA8B;AACvC,SAAS,aAAa;AAGtB,cAAc;",
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// fynix/index.js - Single entry point for all core functionality\r\n\r\n/// <reference path=\"../types/jsx.d.ts\" />\r\n/// <reference path=\"../types/global.d.ts\" />\r\n\r\nexport * from \"../runtime.js\";\r\n// Re-export Fynix namespace and hooks under new names\r\nexport * from \"../router/router.js\";\r\nexport { default as createFynix } from \"../router/router.js\";\r\nexport { Fynix } from \"../runtime.js\";\r\nexport { For } from \"../hooks/nixFor.js\";\r\n"],
5
+ "mappings": "AA2BA,cAAc;AAEd,cAAc;AACd,SAAoB,WAAXA,gBAA8B;AACvC,SAAS,aAAa;AACtB,SAAS,WAAW;",
6
6
  "names": ["default"]
7
7
  }
@@ -0,0 +1,13 @@
1
+ import { VNode } from "../types/fnx";
2
+ interface ReactiveState<T> {
3
+ value: T;
4
+ _isNixState: boolean;
5
+ subscribe(callback: () => void): () => void;
6
+ }
7
+ interface ForProps<T> {
8
+ each: T[] | ReactiveState<T[]>;
9
+ children?: ((item: T, index: number) => VNode) | ((item: T, index: number) => VNode)[];
10
+ }
11
+ export declare function For<T>(props: ForProps<T>): VNode;
12
+ export {};
13
+ //# sourceMappingURL=nixFor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nixFor.d.ts","sourceRoot":"","sources":["../../hooks/nixFor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,UAAU,aAAa,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;IACT,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/C;AAED,UAAU,QAAQ,CAAC,CAAC;IAChB,IAAI,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC;CAC1F;AAkBD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAyChD"}
@@ -0,0 +1,25 @@
1
+ import { Fragment } from "../runtime";
2
+ export function For(props) {
3
+ let items = [];
4
+ if (props.each && typeof props.each === "object" && "_isNixState" in props.each) {
5
+ items = props.each.value;
6
+ }
7
+ else if (Array.isArray(props.each)) {
8
+ items = props.each;
9
+ }
10
+ let renderer;
11
+ if (typeof props.children === "function") {
12
+ renderer = props.children;
13
+ }
14
+ else if (Array.isArray(props.children) && typeof props.children[0] === "function") {
15
+ renderer = props.children[0];
16
+ }
17
+ if (!renderer) {
18
+ if (items.length > 0) {
19
+ console.warn("[Fynix] <For> expects a function as its child.");
20
+ }
21
+ return { type: Fragment, props: { children: [] }, key: null };
22
+ }
23
+ const mapped = items.map((item, index) => renderer(item, index));
24
+ return { type: Fragment, props: { children: mapped }, key: null };
25
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../hooks/nixFor.ts"],
4
+ "sourcesContent": ["/* MIT License\r\n* Copyright (c) 2026 Resty Gonzales\r\n*/\r\n\r\nimport { Fragment } from \"../runtime\";\r\nimport { VNode } from \"../types/fnx\";\r\n\r\ninterface ReactiveState<T> {\r\n value: T;\r\n _isNixState: boolean;\r\n subscribe(callback: () => void): () => void;\r\n}\r\n\r\ninterface ForProps<T> {\r\n each: T[] | ReactiveState<T[]>;\r\n children?: ((item: T, index: number) => VNode) | ((item: T, index: number) => VNode)[];\r\n}\r\n\r\n/**\r\n * <For> Component\r\n *\r\n * A reactive list iteration component that efficiently renders items from an array or reactive state.\r\n *\r\n * @example\r\n * ```tsx\r\n * <For each={items}>\r\n * {(item, index) => <div key={item.id}>{item.name}</div>}\r\n * </For>\r\n * ```\r\n *\r\n * @param props - Component properties\r\n * @param props.each - The array or reactive state of array to iterate over\r\n * @param props.children - Render function that receives (item, index) and returns a VNode\r\n */\r\nexport function For<T>(props: ForProps<T>): VNode {\r\n // Accessing props.each.value (if reactive) will register the subscription\r\n // for the component that *uses* <For> or for <For> itself if it's a separate component context.\r\n // Since <For> is a functional component, when it runs, it has a context.\r\n // Accessing .value here subscribes THIS instance of <For> to the state.\r\n // When state changes, <For> re-runs, produces new Fragment with new children,\r\n // and the parent patcher updates the DOM.\r\n\r\n let items: T[] = [];\r\n\r\n if (props.each && typeof props.each === \"object\" && \"_isNixState\" in props.each) {\r\n // Access usage to subscribe\r\n items = (props.each as ReactiveState<T[]>).value;\r\n } else if (Array.isArray(props.each)) {\r\n items = props.each;\r\n }\r\n\r\n // The child (renderer function) is usually passed as the first element of children array\r\n // or as the children prop itself if it's not an array in specific transform cases,\r\n // but standard JSX transform passes children as an array.\r\n // However, Fynix runtime seems to flatten children.\r\n // If the user does <For>{(item) => ...}</For>, props.children might be [Function] or Function.\r\n\r\n let renderer: ((item: T, index: number) => VNode) | undefined;\r\n\r\n if (typeof props.children === \"function\") {\r\n renderer = props.children as unknown as ((item: T, index: number) => VNode);\r\n } else if (Array.isArray(props.children) && typeof props.children[0] === \"function\") {\r\n renderer = props.children[0] as unknown as ((item: T, index: number) => VNode);\r\n }\r\n\r\n if (!renderer) {\r\n if (items.length > 0) {\r\n console.warn(\"[Fynix] <For> expects a function as its child.\");\r\n }\r\n return { type: Fragment, props: { children: [] }, key: null };\r\n }\r\n\r\n const mapped = items.map((item, index) => renderer!(item, index));\r\n\r\n return { type: Fragment, props: { children: mapped }, key: null };\r\n}\r\n"],
5
+ "mappings": ";;AAIA,SAAS,gBAAgB;AA8BlB,SAAS,IAAO,OAA2B;AAQ9C,MAAI,QAAa,CAAC;AAElB,MAAI,MAAM,QAAQ,OAAO,MAAM,SAAS,YAAY,iBAAiB,MAAM,MAAM;AAE7E,YAAS,MAAM,KAA4B;AAAA,EAC/C,WAAW,MAAM,QAAQ,MAAM,IAAI,GAAG;AAClC,YAAQ,MAAM;AAAA,EAClB;AAQA,MAAI;AAEJ,MAAI,OAAO,MAAM,aAAa,YAAY;AACtC,eAAW,MAAM;AAAA,EACrB,WAAW,MAAM,QAAQ,MAAM,QAAQ,KAAK,OAAO,MAAM,SAAS,CAAC,MAAM,YAAY;AACjF,eAAW,MAAM,SAAS,CAAC;AAAA,EAC/B;AAEA,MAAI,CAAC,UAAU;AACX,QAAI,MAAM,SAAS,GAAG;AAClB,cAAQ,KAAK,gDAAgD;AAAA,IACjE;AACA,WAAO,EAAE,MAAM,UAAU,OAAO,EAAE,UAAU,CAAC,EAAE,GAAG,KAAK,KAAK;AAAA,EAChE;AAEA,QAAM,SAAS,MAAM,IAAI,CAAC,MAAM,UAAU,SAAU,MAAM,KAAK,CAAC;AAEhE,SAAO,EAAE,MAAM,UAAU,OAAO,EAAE,UAAU,OAAO,GAAG,KAAK,KAAK;AACpE;AAzCgB;",
6
+ "names": []
7
+ }
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fynixui",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
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",
@@ -140,6 +140,10 @@
140
140
  "./types/fnx": {
141
141
  "types": "./types/fnx.d.ts"
142
142
  },
143
+ "./hooks/nixFor": {
144
+ "types": "./dist/hooks/nixFor.d.ts",
145
+ "import": "./dist/hooks/nixFor.js"
146
+ },
143
147
  "./package.json": "./package.json"
144
148
  },
145
149
  "files": [
@@ -1,29 +1,38 @@
1
- import { type TransformOptions as EsbuildTransformOptions } from "esbuild";
2
- import * as ts from "typescript";
1
+ import { type TransformOptions } from "esbuild";
2
+ import type { HmrContext, ViteDevServer } from "vite";
3
3
  interface FynixPluginOptions {
4
4
  jsxFactory?: string;
5
5
  jsxFragment?: string;
6
6
  include?: string[];
7
7
  exclude?: string[];
8
8
  sourcemap?: boolean;
9
- esbuildOptions?: Partial<EsbuildTransformOptions>;
10
- enableSFC?: boolean;
11
- debug?: boolean;
12
- showGeneratedCode?: boolean;
13
- typeCheck?: boolean;
14
- tsConfig?: ts.CompilerOptions;
9
+ esbuildOptions?: Partial<TransformOptions>;
15
10
  }
16
- declare class TypeScriptChecker {
17
- private compilerOptions;
18
- private virtualFiles;
19
- private program;
20
- constructor(customOptions?: ts.CompilerOptions);
21
- addFile(fileName: string, content: string): void;
22
- private createCompilerHost;
23
- checkFile(fileName: string): string[];
24
- clear(): void;
25
- }
26
- export default function fynixPlugin(options?: FynixPluginOptions): any;
27
- export { fynixPlugin, TypeScriptChecker };
11
+ export default function fynixPlugin(options?: FynixPluginOptions): {
12
+ name: string;
13
+ enforce: "pre";
14
+ configureServer(server: ViteDevServer): void;
15
+ transform(code: string, id: string): Promise<{
16
+ code: string;
17
+ map: string | null;
18
+ } | null>;
19
+ handleHotUpdate(ctx: HmrContext): never[] | undefined;
20
+ config(): {
21
+ esbuild: false;
22
+ optimizeDeps: {
23
+ include: string[];
24
+ esbuildOptions: {
25
+ jsx: string;
26
+ jsxFactory: string;
27
+ jsxFragment: string;
28
+ };
29
+ };
30
+ resolve: {
31
+ extensions: string[];
32
+ };
33
+ };
34
+ buildStart(): void;
35
+ };
36
+ export { fynixPlugin };
28
37
  export type { FynixPluginOptions };
29
38
  //# sourceMappingURL=vite-plugin-res.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin-res.d.ts","sourceRoot":"","sources":["../../plugins/vite-plugin-res.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,IAAI,uBAAuB,EACjD,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAyBjC,UAAU,kBAAkB;IAK1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAMnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAMnB,SAAS,CAAC,EAAE,OAAO,CAAC;IAKpB,cAAc,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAMlD,SAAS,CAAC,EAAE,OAAO,CAAC;IAMpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAMhB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAM5B,SAAS,CAAC,EAAE,OAAO,CAAC;IAKpB,QAAQ,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;CAC/B;AAaD,cAAM,iBAAiB;IACrB,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,OAAO,CAA2B;gBAE9B,aAAa,CAAC,EAAE,EAAE,CAAC,eAAe;IAuB9C,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKhD,OAAO,CAAC,kBAAkB;IA8C1B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAmErC,KAAK,IAAI,IAAI;CAId;AAKD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,GAAG,CAqOzE;AAED,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"vite-plugin-res.d.ts","sourceRoot":"","sources":["../../plugins/vite-plugin-res.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAMtD,UAAU,kBAAkB;IAK1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAMnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAMnB,SAAS,CAAC,EAAE,OAAO,CAAC;IAKpB,cAAc,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC5C;AAaD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,GAAE,kBAAuB;;;4BAoBxC,aAAa;oBAIf,MAAM,MAAM,MAAM;;;;yBAqEnB,UAAU;;;;;;;;;;;;;;;;EA0ClC;AAKD,OAAO,EAAE,WAAW,EAAE,CAAC;AAKvB,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,141 +1,14 @@
1
- import { transform, } from "esbuild";
1
+ import { transform } from "esbuild";
2
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
3
  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
- }
4
+ const { jsxFactory = "Fynix", jsxFragment = "Fynix.Fragment", include = [".ts", ".js", ".jsx", ".tsx", ".fnx"], exclude = ["node_modules"], sourcemap = true, esbuildOptions = {}, } = options;
5
+ let viteServer = null;
136
6
  return {
137
- name: "vite-plugin-fynix-sfc",
7
+ name: "vite-plugin-fynix",
138
8
  enforce: "pre",
9
+ configureServer(server) {
10
+ viteServer = server;
11
+ },
139
12
  async transform(code, id) {
140
13
  const normalizedId = normalizePath(id);
141
14
  const shouldExclude = exclude.some((pattern) => normalizedId.includes(pattern));
@@ -149,72 +22,20 @@ export default function fynixPlugin(options = {}) {
149
22
  ctx.addWatchFile(id);
150
23
  }
151
24
  try {
152
- let codeToTransform = code;
153
25
  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
- }
26
+ if (normalizedId.endsWith(".ts") || normalizedId.endsWith(".fnx")) {
27
+ loader = "tsx";
28
+ }
29
+ else if (normalizedId.endsWith(".tsx")) {
30
+ loader = "tsx";
188
31
  }
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
- }
32
+ else if (normalizedId.endsWith(".jsx")) {
33
+ loader = "jsx";
204
34
  }
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
- }
35
+ else if (normalizedId.endsWith(".js")) {
36
+ loader = "jsx";
216
37
  }
217
- const result = await transform(codeToTransform, {
38
+ const result = await transform(code, {
218
39
  loader,
219
40
  jsxFactory,
220
41
  jsxFragment,
@@ -231,19 +52,19 @@ export default function fynixPlugin(options = {}) {
231
52
  }
232
53
  catch (error) {
233
54
  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,
55
+ if (viteServer) {
56
+ viteServer.ws.send({
57
+ type: "error",
58
+ err: {
59
+ message: err.message,
60
+ stack: err.stack || "",
61
+ plugin: "vite-plugin-fynix",
62
+ id,
63
+ },
242
64
  });
243
65
  }
244
- else {
245
- throw err;
246
- }
66
+ console.error(`\x1b[32m[vite-plugin-fynix]\x1b[0m \x1b[31mFailed to transform ${id}:\x1b[0m`);
67
+ console.error(err.message);
247
68
  return null;
248
69
  }
249
70
  },
@@ -252,10 +73,7 @@ export default function fynixPlugin(options = {}) {
252
73
  const normalizedFile = normalizePath(file);
253
74
  const shouldReload = include.some((ext) => normalizedFile.endsWith(ext));
254
75
  if (shouldReload) {
255
- console.log(`${colors.green}[HMR]${colors.reset} ${colors.gray}${normalizedFile}${colors.reset}`);
256
- if (typeChecker) {
257
- typeChecker.clear();
258
- }
76
+ console.log(`\x1b[32m[vite-plugin-fynix]\x1b[0m HMR: full-reload triggered by ${normalizedFile}`);
259
77
  server.ws.send({
260
78
  type: "full-reload",
261
79
  path: "*",
@@ -265,12 +83,8 @@ export default function fynixPlugin(options = {}) {
265
83
  return undefined;
266
84
  },
267
85
  config() {
268
- const config = {
269
- esbuild: {
270
- jsxFactory,
271
- jsxFragment,
272
- jsxInject: `import { ${jsxFactory} } from 'fynixui'`,
273
- },
86
+ return {
87
+ esbuild: false,
274
88
  optimizeDeps: {
275
89
  include: ["fynixui"],
276
90
  esbuildOptions: {
@@ -283,22 +97,10 @@ export default function fynixPlugin(options = {}) {
283
97
  extensions: [".fnx", ".ts", ".tsx", ".js", ".jsx", ".json"],
284
98
  },
285
99
  };
286
- return config;
287
100
  },
288
101
  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
- }
102
+ console.log(`\x1b[32m[vite-plugin-fynix]\x1b[0m Initialized with JSX factory: ${jsxFactory}`);
301
103
  },
302
104
  };
303
105
  }
304
- export { fynixPlugin, TypeScriptChecker };
106
+ export { fynixPlugin };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 'fynixui'`,\r\n },\r\n optimizeDeps: {\r\n include: [\"fynixui\"],\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"]
4
+ "sourcesContent": ["import { transform, type TransformOptions } from \"esbuild\";\r\nimport type { HmrContext, ViteDevServer } from \"vite\";\r\nimport { normalizePath } from \"vite\";\r\n\r\n/**\r\n * Vite plugin options for Fynix\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<TransformOptions>;\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}\r\n\r\n/**\r\n * Vite plugin for Fynix framework\r\n * Transforms JSX/TSX files using esbuild with custom JSX pragma\r\n */\r\nexport default function fynixPlugin(options: FynixPluginOptions = {}) {\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 } = options;\r\n\r\n let viteServer: ViteDevServer | null = null;\r\n\r\n return {\r\n name: \"vite-plugin-fynix\",\r\n enforce: \"pre\" as const,\r\n\r\n /**\r\n * Capture the Vite dev server instance for sending\r\n * WebSocket messages (error overlays, reloads, etc.)\r\n */\r\n configureServer(server: ViteDevServer) {\r\n viteServer = server;\r\n },\r\n\r\n async transform(code: string, id: string) {\r\n const normalizedId = normalizePath(id);\r\n const shouldExclude = exclude.some((pattern) =>\r\n normalizedId.includes(pattern)\r\n );\r\n if (shouldExclude) return null;\r\n const shouldInclude = include.some((ext) => normalizedId.endsWith(ext));\r\n if (!shouldInclude) return null;\r\n\r\n // Type-safe way to access Vite context methods\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 loader: TransformOptions[\"loader\"] = \"tsx\";\r\n if (normalizedId.endsWith(\".ts\") || normalizedId.endsWith(\".fnx\")) {\r\n loader = \"tsx\";\r\n } else if (normalizedId.endsWith(\".tsx\")) {\r\n loader = \"tsx\";\r\n } else if (normalizedId.endsWith(\".jsx\")) {\r\n loader = \"jsx\";\r\n } else if (normalizedId.endsWith(\".js\")) {\r\n loader = \"jsx\";\r\n }\r\n\r\n const result = await transform(code, {\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\r\n // Send error overlay to the browser via WebSocket\r\n // This shows the red error overlay in the browser instead of just logging to terminal\r\n if (viteServer) {\r\n viteServer.ws.send({\r\n type: \"error\",\r\n err: {\r\n message: err.message,\r\n stack: err.stack || \"\",\r\n plugin: \"vite-plugin-fynix\",\r\n id,\r\n },\r\n });\r\n }\r\n\r\n // Log to terminal as well\r\n console.error(`\\x1b[32m[vite-plugin-fynix]\\x1b[0m \\x1b[31mFailed to transform ${id}:\\x1b[0m`);\r\n console.error(err.message);\r\n\r\n // Return null instead of throwing so Vite's HMR pipeline\r\n // stays intact and can recover when the error is fixed\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 `\\x1b[32m[vite-plugin-fynix]\\x1b[0m HMR: full-reload triggered by ${normalizedFile}`\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 return {\r\n esbuild: false as const,\r\n optimizeDeps: {\r\n include: [\"fynixui\"],\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\r\n buildStart() {\r\n console.log(\r\n `\\x1b[32m[vite-plugin-fynix]\\x1b[0m Initialized with JSX factory: ${jsxFactory}`\r\n );\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Named export for convenience\r\n */\r\nexport { fynixPlugin };\r\n\r\n/**\r\n * Export types for TypeScript users\r\n */\r\nexport type { FynixPluginOptions };\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -502,6 +502,9 @@ export function h(type, props = null, ...children) {
502
502
  flatChildren.push(c);
503
503
  }
504
504
  }
505
+ else if (typeof c === "function") {
506
+ flatChildren.push(c);
507
+ }
505
508
  else {
506
509
  flatChildren.push(createTextVNode(String(c)));
507
510
  }