@fluixi/compiler 1.0.0-alpha.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/babel-OGRQKOZA.mjs +2 -0
  4. package/dist/chunk-3SAEGOMQ.mjs +1 -0
  5. package/dist/codegen/backend.cjs +1 -0
  6. package/dist/codegen/backend.d.ts +22 -0
  7. package/dist/codegen/backend.d.ts.map +1 -0
  8. package/dist/codegen/backend.js +1 -0
  9. package/dist/codegen/backend.mjs +0 -0
  10. package/dist/codegen/backends/imperative.cjs +1 -0
  11. package/dist/codegen/backends/imperative.d.ts +3 -0
  12. package/dist/codegen/backends/imperative.d.ts.map +1 -0
  13. package/dist/codegen/backends/imperative.js +152 -0
  14. package/dist/codegen/backends/imperative.mjs +1 -0
  15. package/dist/codegen/contract.cjs +1 -0
  16. package/dist/codegen/contract.d.ts +25 -0
  17. package/dist/codegen/contract.d.ts.map +1 -0
  18. package/dist/codegen/contract.js +30 -0
  19. package/dist/codegen/contract.mjs +1 -0
  20. package/dist/frontend/babel/build-ir.cjs +1 -0
  21. package/dist/frontend/babel/build-ir.d.ts +23 -0
  22. package/dist/frontend/babel/build-ir.d.ts.map +1 -0
  23. package/dist/frontend/babel/build-ir.js +224 -0
  24. package/dist/frontend/babel/build-ir.mjs +1 -0
  25. package/dist/frontend/babel/index.cjs +2 -0
  26. package/dist/frontend/babel/index.d.ts +34 -0
  27. package/dist/frontend/babel/index.d.ts.map +1 -0
  28. package/dist/frontend/babel/index.js +65 -0
  29. package/dist/frontend/babel/index.mjs +2 -0
  30. package/dist/frontend/babel/plugin.cjs +2 -0
  31. package/dist/frontend/babel/plugin.d.ts +122 -0
  32. package/dist/frontend/babel/plugin.d.ts.map +1 -0
  33. package/dist/frontend/babel/plugin.js +1509 -0
  34. package/dist/frontend/babel/plugin.mjs +2 -0
  35. package/dist/frontend/babel/server-functions.cjs +1 -0
  36. package/dist/frontend/babel/server-functions.d.ts +11 -0
  37. package/dist/frontend/babel/server-functions.d.ts.map +1 -0
  38. package/dist/frontend/babel/server-functions.js +88 -0
  39. package/dist/frontend/babel/server-functions.mjs +1 -0
  40. package/dist/frontend/babel/types.cjs +1 -0
  41. package/dist/frontend/babel/types.d.ts +34 -0
  42. package/dist/frontend/babel/types.d.ts.map +1 -0
  43. package/dist/frontend/babel/types.js +1 -0
  44. package/dist/frontend/babel/types.mjs +0 -0
  45. package/dist/frontend/types.cjs +1 -0
  46. package/dist/frontend/types.d.ts +26 -0
  47. package/dist/frontend/types.d.ts.map +1 -0
  48. package/dist/frontend/types.js +1 -0
  49. package/dist/frontend/types.mjs +0 -0
  50. package/dist/index.cjs +1 -0
  51. package/dist/index.d.ts +19 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +20 -0
  54. package/dist/index.mjs +1 -0
  55. package/dist/integrations.cjs +12 -0
  56. package/dist/integrations.d.ts +251 -0
  57. package/dist/integrations.d.ts.map +1 -0
  58. package/dist/integrations.js +790 -0
  59. package/dist/integrations.mjs +11 -0
  60. package/dist/ir/nodes.cjs +1 -0
  61. package/dist/ir/nodes.d.ts +80 -0
  62. package/dist/ir/nodes.d.ts.map +1 -0
  63. package/dist/ir/nodes.js +1 -0
  64. package/dist/ir/nodes.mjs +0 -0
  65. package/dist/options.cjs +1 -0
  66. package/dist/options.d.ts +18 -0
  67. package/dist/options.d.ts.map +1 -0
  68. package/dist/options.js +9 -0
  69. package/dist/options.mjs +1 -0
  70. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  71. package/package.json +70 -0
@@ -0,0 +1,251 @@
1
+ /**
2
+ * @fileoverview Bundler integrations for the Fluixi compiler.
3
+ * @module @fluixi/compiler/integrations
4
+ *
5
+ * Build-tool adapters (vite/webpack/rollup/esbuild) plus the prop/template
6
+ * analysis helpers that drive them. These wrap the babel front-end so a single
7
+ * package owns all compile-time code. @fluixi/core re-exports
8
+ * createVitePlugin from here.
9
+ *
10
+ * Helpers:
11
+ * - Detecting reactive expressions
12
+ * - Wrapping signals for optimal updates
13
+ * - Template optimization
14
+ * - Static vs dynamic prop detection
15
+ */
16
+ export interface CompilerOptions {
17
+ /**
18
+ * Whether to use lit-html templates when possible
19
+ * @default true
20
+ */
21
+ useLitHTML?: boolean;
22
+ /**
23
+ * Whether to generate source maps
24
+ * @default false
25
+ */
26
+ sourceMaps?: boolean;
27
+ /**
28
+ * Whether to enable aggressive optimizations
29
+ * @default true
30
+ */
31
+ optimize?: boolean;
32
+ /**
33
+ * Whether to delegate events
34
+ * @default true
35
+ */
36
+ delegateEvents?: boolean;
37
+ /**
38
+ * Events to delegate (if delegateEvents is true)
39
+ * @default ['click', 'input', 'change', 'submit']
40
+ */
41
+ delegatedEvents?: string[];
42
+ /**
43
+ * Whether to generate dev-mode code with additional checks
44
+ * @default false
45
+ */
46
+ development?: boolean;
47
+ /**
48
+ * Custom pragma for JSX
49
+ * @default 'jsx'
50
+ */
51
+ pragma?: string;
52
+ /**
53
+ * Custom pragma fragment
54
+ * @default 'Fragment'
55
+ */
56
+ pragmaFrag?: string;
57
+ /**
58
+ * Module to import JSX runtime from
59
+ * @default '@fluixi/jsx'
60
+ */
61
+ importSource?: string;
62
+ /**
63
+ * Code-generation backend.
64
+ * - 'imperative': compile straight into @fluixi/dom runtime calls (default).
65
+ * - 'jsx': emit the automatic runtime jsx()/jsxs().
66
+ * @default 'imperative'
67
+ */
68
+ backend?: 'jsx' | 'imperative';
69
+ /**
70
+ * Imperative codegen path: 'inline' (plugin builds calls directly) or 'ir'
71
+ * (shared build-IR + backend emit() pipeline). Same output.
72
+ * @default 'inline'
73
+ */
74
+ codegen?: 'inline' | 'ir';
75
+ /**
76
+ * Module emitted runtime symbols are imported from in 'imperative' mode.
77
+ * @default '@fluixi/dom'
78
+ */
79
+ signalModule?: string;
80
+ /**
81
+ * Module control-flow components are imported from in 'imperative' mode.
82
+ * @default '@fluixi/dom'
83
+ */
84
+ controlFlowModule?: string;
85
+ /**
86
+ * Where reactive primitives (createMemo) are imported from in 'imperative' mode.
87
+ * @default '@fluixi/reactive/signal'
88
+ */
89
+ reactiveModule?: string;
90
+ }
91
+ export interface TransformResult {
92
+ code: string;
93
+ map?: any;
94
+ metadata?: TransformMetadata;
95
+ }
96
+ export interface TransformMetadata {
97
+ hasSignals: boolean;
98
+ hasStores: boolean;
99
+ hasLitHTML: boolean;
100
+ staticProps: Set<string>;
101
+ dynamicProps: Set<string>;
102
+ components: Set<string>;
103
+ }
104
+ export interface PropAnalysis {
105
+ name: string;
106
+ isStatic: boolean;
107
+ isReactive: boolean;
108
+ isEvent: boolean;
109
+ isRef: boolean;
110
+ isSpread: boolean;
111
+ }
112
+ /**
113
+ * Analyze a prop to determine if it's static or dynamic
114
+ */
115
+ export declare function analyzeProp(name: string, value: any): PropAnalysis;
116
+ /**
117
+ * Analyze all props on an element
118
+ */
119
+ export declare function analyzeProps(props: Record<string, any>): Map<string, PropAnalysis>;
120
+ /**
121
+ * Check if JSX should be compiled to lit-html template
122
+ */
123
+ export declare function shouldUseLitTemplate(tag: string, props: Record<string, any>, children: any[]): boolean;
124
+ /**
125
+ * Check if a value is a lit-html template
126
+ */
127
+ export declare function isLitTemplate(value: any): boolean;
128
+ /**
129
+ * Generate code for creating an element
130
+ */
131
+ export declare function generateCreateElement(tag: string, props: Record<string, any>, children: any[], options?: CompilerOptions): string;
132
+ /**
133
+ * Generate code for props object
134
+ */
135
+ export declare function generatePropsCode(props: Record<string, any>, options?: CompilerOptions): string;
136
+ /**
137
+ * Generate code for children
138
+ */
139
+ export declare function generateChildrenCode(children: any[]): string;
140
+ /**
141
+ * Generate lit-html template code
142
+ */
143
+ export declare function generateLitHTMLTemplate(tag: string, props: Record<string, any>, children: any[], isSVG?: boolean): string;
144
+ /**
145
+ * Optimize static content
146
+ */
147
+ export declare function optimizeStatic(code: string): string;
148
+ /**
149
+ * Optimize prop spreads
150
+ */
151
+ export declare function optimizeSpreads(code: string): string;
152
+ /**
153
+ * Hoist static elements
154
+ */
155
+ export declare function hoistStatic(code: string): string;
156
+ /**
157
+ * Generate event delegation setup
158
+ */
159
+ export declare function generateEventDelegation(events: string[], options?: CompilerOptions): string;
160
+ /**
161
+ * Transform JSX code with optimizations
162
+ */
163
+ export declare function transform(code: string, options?: CompilerOptions): TransformResult;
164
+ /**
165
+ * Helper for creating a Babel plugin
166
+ */
167
+ export declare function createBabelPlugin(options?: CompilerOptions): Promise<{
168
+ name: string;
169
+ plugin: ((api: object, options: import("./frontend/babel/plugin.js").PluginOptions | null | undefined, dirname: string) => import("@babel/core").PluginObj<import("@babel/core").PluginPass>) | null;
170
+ getOptions(): {
171
+ reactiveModule?: string | undefined;
172
+ controlFlowModule?: string | undefined;
173
+ signalModule?: string | undefined;
174
+ codegen?: "inline" | "ir" | undefined;
175
+ runtime: string;
176
+ importSource: string;
177
+ pragma: string;
178
+ pragmaFrag: string;
179
+ development: boolean;
180
+ detectReactivity: boolean;
181
+ useLitHTML: boolean;
182
+ hoistStatics: boolean;
183
+ delegateEvents: boolean;
184
+ delegatedEvents: string[];
185
+ optimizeControlFlow: boolean;
186
+ sourceMaps: boolean;
187
+ backend: "imperative" | "jsx";
188
+ };
189
+ }>;
190
+ /**
191
+ * Helper for creating a TypeScript transformer
192
+ */
193
+ export declare function createTypeScriptTransformer(options?: CompilerOptions): (context: any) => (sourceFile: any) => any;
194
+ /**
195
+ * Create a Vite plugin for JSX transformation
196
+ */
197
+ export declare function createVitePlugin<T>(options?: CompilerOptions): T;
198
+ /**
199
+ * Create a Webpack loader for JSX transformation
200
+ */
201
+ export declare function createWebpackLoader(options?: CompilerOptions): (this: any, source: string) => Promise<void>;
202
+ /**
203
+ * Create a Rollup plugin for JSX transformation
204
+ */
205
+ export declare function createRollupPlugin(options?: CompilerOptions): {
206
+ name: string;
207
+ transform(code: string, id: string): Promise<{
208
+ code: any;
209
+ map: any;
210
+ } | null>;
211
+ };
212
+ /**
213
+ * Create an ESBuild plugin for JSX transformation
214
+ */
215
+ export declare function createESBuildPlugin(options?: CompilerOptions): {
216
+ name: string;
217
+ setup(build: any): void;
218
+ };
219
+ export { transformServerFunctions } from './frontend/babel/server-functions.js';
220
+ /**
221
+ * Vite plugin for `"use server"`: applies the transform (client→RPC stub, server→register
222
+ * the body), and provides `virtual:fluixi-server-fns` — side-effect imports of every
223
+ * module that defines a server function. The server entry imports it so ALL server
224
+ * functions register at startup (including those in lazy routes, which would otherwise
225
+ * register only when their chunk loads → an RPC registry miss). The client never imports
226
+ * it. `enforce:'pre'` so it runs on the raw source before other transforms.
227
+ */
228
+ export declare function serverFunctionsVitePlugin<T = any>(): T;
229
+ declare const _default: {
230
+ analyzeProp: typeof analyzeProp;
231
+ analyzeProps: typeof analyzeProps;
232
+ shouldUseLitTemplate: typeof shouldUseLitTemplate;
233
+ isLitTemplate: typeof isLitTemplate;
234
+ generateCreateElement: typeof generateCreateElement;
235
+ generatePropsCode: typeof generatePropsCode;
236
+ generateChildrenCode: typeof generateChildrenCode;
237
+ generateLitHTMLTemplate: typeof generateLitHTMLTemplate;
238
+ optimizeStatic: typeof optimizeStatic;
239
+ optimizeSpreads: typeof optimizeSpreads;
240
+ hoistStatic: typeof hoistStatic;
241
+ generateEventDelegation: typeof generateEventDelegation;
242
+ transform: typeof transform;
243
+ createBabelPlugin: typeof createBabelPlugin;
244
+ createTypeScriptTransformer: typeof createTypeScriptTransformer;
245
+ createVitePlugin: typeof createVitePlugin;
246
+ createWebpackLoader: typeof createWebpackLoader;
247
+ createRollupPlugin: typeof createRollupPlugin;
248
+ createESBuildPlugin: typeof createESBuildPlugin;
249
+ };
250
+ export default _default;
251
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../src/integrations.ts"],"names":[],"mappings":"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"}