@creact-labs/creact 0.1.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.
- package/LICENSE +212 -0
- package/README.md +379 -0
- package/dist/cli/commands/BuildCommand.d.ts +40 -0
- package/dist/cli/commands/BuildCommand.js +151 -0
- package/dist/cli/commands/DeployCommand.d.ts +38 -0
- package/dist/cli/commands/DeployCommand.js +194 -0
- package/dist/cli/commands/DevCommand.d.ts +52 -0
- package/dist/cli/commands/DevCommand.js +385 -0
- package/dist/cli/commands/PlanCommand.d.ts +39 -0
- package/dist/cli/commands/PlanCommand.js +164 -0
- package/dist/cli/commands/index.d.ts +36 -0
- package/dist/cli/commands/index.js +43 -0
- package/dist/cli/core/ArgumentParser.d.ts +46 -0
- package/dist/cli/core/ArgumentParser.js +127 -0
- package/dist/cli/core/BaseCommand.d.ts +75 -0
- package/dist/cli/core/BaseCommand.js +95 -0
- package/dist/cli/core/CLIContext.d.ts +68 -0
- package/dist/cli/core/CLIContext.js +183 -0
- package/dist/cli/core/CommandRegistry.d.ts +64 -0
- package/dist/cli/core/CommandRegistry.js +89 -0
- package/dist/cli/core/index.d.ts +36 -0
- package/dist/cli/core/index.js +43 -0
- package/dist/cli/index.d.ts +35 -0
- package/dist/cli/index.js +100 -0
- package/dist/cli/output.d.ts +204 -0
- package/dist/cli/output.js +437 -0
- package/dist/cli/utils.d.ts +59 -0
- package/dist/cli/utils.js +76 -0
- package/dist/context/createContext.d.ts +90 -0
- package/dist/context/createContext.js +113 -0
- package/dist/context/index.d.ts +30 -0
- package/dist/context/index.js +35 -0
- package/dist/core/CReact.d.ts +409 -0
- package/dist/core/CReact.js +1127 -0
- package/dist/core/CloudDOMBuilder.d.ts +429 -0
- package/dist/core/CloudDOMBuilder.js +1198 -0
- package/dist/core/ContextDependencyTracker.d.ts +165 -0
- package/dist/core/ContextDependencyTracker.js +448 -0
- package/dist/core/ErrorRecoveryManager.d.ts +145 -0
- package/dist/core/ErrorRecoveryManager.js +443 -0
- package/dist/core/EventBus.d.ts +91 -0
- package/dist/core/EventBus.js +185 -0
- package/dist/core/ProviderOutputTracker.d.ts +211 -0
- package/dist/core/ProviderOutputTracker.js +476 -0
- package/dist/core/ReactiveUpdateQueue.d.ts +76 -0
- package/dist/core/ReactiveUpdateQueue.js +121 -0
- package/dist/core/Reconciler.d.ts +415 -0
- package/dist/core/Reconciler.js +1037 -0
- package/dist/core/RenderScheduler.d.ts +153 -0
- package/dist/core/RenderScheduler.js +519 -0
- package/dist/core/Renderer.d.ts +276 -0
- package/dist/core/Renderer.js +791 -0
- package/dist/core/Runtime.d.ts +246 -0
- package/dist/core/Runtime.js +640 -0
- package/dist/core/StateBindingManager.d.ts +121 -0
- package/dist/core/StateBindingManager.js +309 -0
- package/dist/core/StateMachine.d.ts +424 -0
- package/dist/core/StateMachine.js +787 -0
- package/dist/core/StructuralChangeDetector.d.ts +140 -0
- package/dist/core/StructuralChangeDetector.js +363 -0
- package/dist/core/Validator.d.ts +127 -0
- package/dist/core/Validator.js +279 -0
- package/dist/core/errors.d.ts +153 -0
- package/dist/core/errors.js +202 -0
- package/dist/core/index.d.ts +38 -0
- package/dist/core/index.js +64 -0
- package/dist/core/types.d.ts +263 -0
- package/dist/core/types.js +48 -0
- package/dist/hooks/context.d.ts +147 -0
- package/dist/hooks/context.js +334 -0
- package/dist/hooks/useContext.d.ts +113 -0
- package/dist/hooks/useContext.js +169 -0
- package/dist/hooks/useEffect.d.ts +105 -0
- package/dist/hooks/useEffect.js +540 -0
- package/dist/hooks/useInstance.d.ts +139 -0
- package/dist/hooks/useInstance.js +441 -0
- package/dist/hooks/useState.d.ts +120 -0
- package/dist/hooks/useState.js +298 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.js +70 -0
- package/dist/jsx.d.ts +64 -0
- package/dist/jsx.js +76 -0
- package/dist/providers/DummyBackendProvider.d.ts +193 -0
- package/dist/providers/DummyBackendProvider.js +189 -0
- package/dist/providers/DummyCloudProvider.d.ts +128 -0
- package/dist/providers/DummyCloudProvider.js +157 -0
- package/dist/providers/IBackendProvider.d.ts +177 -0
- package/dist/providers/IBackendProvider.js +31 -0
- package/dist/providers/ICloudProvider.d.ts +146 -0
- package/dist/providers/ICloudProvider.js +31 -0
- package/dist/providers/index.d.ts +31 -0
- package/dist/providers/index.js +31 -0
- package/dist/test-event-callbacks.d.ts +0 -0
- package/dist/test-event-callbacks.js +1 -0
- package/dist/utils/Logger.d.ts +144 -0
- package/dist/utils/Logger.js +220 -0
- package/dist/utils/Output.d.ts +161 -0
- package/dist/utils/Output.js +401 -0
- package/dist/utils/deepEqual.d.ts +71 -0
- package/dist/utils/deepEqual.js +276 -0
- package/dist/utils/naming.d.ts +241 -0
- package/dist/utils/naming.js +376 -0
- package/package.json +87 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
|
|
9
|
+
*
|
|
10
|
+
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
*
|
|
14
|
+
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
|
|
17
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
|
|
21
|
+
* See the License for the specific language governing permissions and
|
|
22
|
+
|
|
23
|
+
* limitations under the License.
|
|
24
|
+
|
|
25
|
+
*
|
|
26
|
+
|
|
27
|
+
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
28
|
+
|
|
29
|
+
*/
|
|
30
|
+
import { FiberNode, JSXElement, ReRenderReason } from './types';
|
|
31
|
+
import { RenderScheduler } from './RenderScheduler';
|
|
32
|
+
/**
|
|
33
|
+
* Renderer transforms JSX into a Fiber tree
|
|
34
|
+
*
|
|
35
|
+
* The Fiber tree is an intermediate representation that includes:
|
|
36
|
+
* - All components (containers + resources)
|
|
37
|
+
* - Hierarchical paths for identity tracking
|
|
38
|
+
* - Props and children resolved recursively
|
|
39
|
+
*
|
|
40
|
+
* Enhanced with context reactivity:
|
|
41
|
+
* - Tracks context provider value changes
|
|
42
|
+
* - Integrates with ContextDependencyTracker for selective re-rendering
|
|
43
|
+
* - Detects when context values change and triggers appropriate re-renders
|
|
44
|
+
*
|
|
45
|
+
* No dependencies injected - pure transformation logic
|
|
46
|
+
*/
|
|
47
|
+
export declare class Renderer {
|
|
48
|
+
private currentFiber;
|
|
49
|
+
private currentPath;
|
|
50
|
+
private renderScheduler?;
|
|
51
|
+
private contextDependencyTracker?;
|
|
52
|
+
private structuralChangeDetector?;
|
|
53
|
+
private previousStructures;
|
|
54
|
+
/**
|
|
55
|
+
* Render JSX to Fiber tree
|
|
56
|
+
*
|
|
57
|
+
* @param jsx - JSX element to render
|
|
58
|
+
* @returns Root Fiber node
|
|
59
|
+
*/
|
|
60
|
+
render(jsx: JSXElement): FiberNode;
|
|
61
|
+
/**
|
|
62
|
+
* Recursively render a JSX element to a Fiber node
|
|
63
|
+
*
|
|
64
|
+
* @param element - JSX element
|
|
65
|
+
* @param parentPath - Path from parent
|
|
66
|
+
* @param siblingIndex - Sibling index for automatic key generation (default 0)
|
|
67
|
+
* @returns Fiber node
|
|
68
|
+
*/
|
|
69
|
+
private renderElement;
|
|
70
|
+
/**
|
|
71
|
+
* Execute a component function to resolve its children
|
|
72
|
+
*
|
|
73
|
+
* Note: setRenderContext should already be called by renderComponent before this
|
|
74
|
+
*
|
|
75
|
+
* @param type - Component type (function or class)
|
|
76
|
+
* @param props - Props to pass
|
|
77
|
+
* @param path - Current path (for context)
|
|
78
|
+
* @returns Children elements
|
|
79
|
+
*/
|
|
80
|
+
private executeComponent;
|
|
81
|
+
/**
|
|
82
|
+
* Render children elements
|
|
83
|
+
*
|
|
84
|
+
* @param children - Children to render (can be array, single element, or null)
|
|
85
|
+
* @param parentPath - Path from parent
|
|
86
|
+
* @returns Array of Fiber nodes
|
|
87
|
+
*/
|
|
88
|
+
private renderChildren;
|
|
89
|
+
/**
|
|
90
|
+
* Get a human-readable type name for warning messages
|
|
91
|
+
*
|
|
92
|
+
* @param type - Component type
|
|
93
|
+
* @returns Type name string
|
|
94
|
+
*/
|
|
95
|
+
private getTypeName;
|
|
96
|
+
/**
|
|
97
|
+
* Get current path (for hooks to access)
|
|
98
|
+
*/
|
|
99
|
+
getCurrentPath(): string[];
|
|
100
|
+
/**
|
|
101
|
+
* Get current Fiber for post-deployment effects
|
|
102
|
+
*
|
|
103
|
+
* @returns Current Fiber node or null
|
|
104
|
+
*/
|
|
105
|
+
getCurrentFiber(): FiberNode | null;
|
|
106
|
+
/**
|
|
107
|
+
* Set the RenderScheduler for selective re-rendering integration
|
|
108
|
+
*
|
|
109
|
+
* @param scheduler - RenderScheduler instance
|
|
110
|
+
*/
|
|
111
|
+
setRenderScheduler(scheduler: RenderScheduler): void;
|
|
112
|
+
/**
|
|
113
|
+
* Set the ContextDependencyTracker for context reactivity
|
|
114
|
+
*
|
|
115
|
+
* @param tracker - ContextDependencyTracker instance
|
|
116
|
+
*/
|
|
117
|
+
setContextDependencyTracker(tracker: any): void;
|
|
118
|
+
/**
|
|
119
|
+
* Set structural change detector for topology change detection
|
|
120
|
+
* @param detector - StructuralChangeDetector instance
|
|
121
|
+
*/
|
|
122
|
+
setStructuralChangeDetector(detector: any): void;
|
|
123
|
+
/**
|
|
124
|
+
* Handle context provider value changes
|
|
125
|
+
* Called when a context provider's value prop changes
|
|
126
|
+
*
|
|
127
|
+
* @param contextId - Context identifier
|
|
128
|
+
* @param newValue - New context value
|
|
129
|
+
*/
|
|
130
|
+
private handleContextProviderValueChange;
|
|
131
|
+
/**
|
|
132
|
+
* Detect structural changes in a component
|
|
133
|
+
* Compares the current structure with the previous render
|
|
134
|
+
*
|
|
135
|
+
* @param fiber - Fiber node to check for structural changes
|
|
136
|
+
* @returns True if structural changes were detected
|
|
137
|
+
*/
|
|
138
|
+
private detectStructuralChanges;
|
|
139
|
+
/**
|
|
140
|
+
* Generate a structural signature for a fiber node
|
|
141
|
+
* This captures the essential structure that affects CloudDOM generation
|
|
142
|
+
*
|
|
143
|
+
* @param fiber - Fiber node to generate signature for
|
|
144
|
+
* @returns Structural signature string
|
|
145
|
+
*/
|
|
146
|
+
private generateStructuralSignature;
|
|
147
|
+
/**
|
|
148
|
+
* Check for structural changes and schedule re-renders if needed
|
|
149
|
+
* Called during component re-execution
|
|
150
|
+
*
|
|
151
|
+
* @param fiber - Fiber node to check
|
|
152
|
+
*/
|
|
153
|
+
private handleStructuralChanges;
|
|
154
|
+
/**
|
|
155
|
+
* Handle structural changes between old and new fiber trees
|
|
156
|
+
* Called during re-rendering to detect topology changes
|
|
157
|
+
*
|
|
158
|
+
* @param oldFiber - Previous fiber tree
|
|
159
|
+
* @param newFiber - New fiber tree after re-render
|
|
160
|
+
*/
|
|
161
|
+
private handleStructuralChangesComparison;
|
|
162
|
+
/**
|
|
163
|
+
* Extract CloudDOM nodes from a fiber tree for structural comparison
|
|
164
|
+
*
|
|
165
|
+
* @param fiber - Fiber tree to extract CloudDOM from
|
|
166
|
+
* @returns Array of CloudDOM nodes
|
|
167
|
+
*/
|
|
168
|
+
private extractCloudDOMFromFiber;
|
|
169
|
+
/**
|
|
170
|
+
* Re-render specific components with selective updates
|
|
171
|
+
* This method re-executes only the specified components and their children
|
|
172
|
+
*
|
|
173
|
+
* @param components - Array of fiber nodes to re-render
|
|
174
|
+
* @param reason - Reason for the re-render
|
|
175
|
+
* @returns Updated root fiber node
|
|
176
|
+
*/
|
|
177
|
+
reRenderComponents(components: FiberNode[], reason: ReRenderReason): FiberNode;
|
|
178
|
+
/**
|
|
179
|
+
* Find components that depend on changed state/outputs
|
|
180
|
+
* This method traverses the fiber tree to find dependent components
|
|
181
|
+
*
|
|
182
|
+
* @param changedFiber - Fiber node that changed
|
|
183
|
+
* @returns Set of fiber nodes that depend on the changed fiber
|
|
184
|
+
*/
|
|
185
|
+
findDependentComponents(changedFiber: FiberNode): Set<FiberNode>;
|
|
186
|
+
/**
|
|
187
|
+
* Track component dependencies during render
|
|
188
|
+
* This builds the dependency graph for selective re-rendering
|
|
189
|
+
*
|
|
190
|
+
* @param components - Components being rendered
|
|
191
|
+
*/
|
|
192
|
+
private trackDependenciesDuringRender;
|
|
193
|
+
/**
|
|
194
|
+
* Build dependency graph for a component
|
|
195
|
+
* This analyzes the component's usage patterns to determine dependencies
|
|
196
|
+
*
|
|
197
|
+
* @param component - Component to analyze
|
|
198
|
+
*/
|
|
199
|
+
private buildDependencyGraph;
|
|
200
|
+
/**
|
|
201
|
+
* Find the context provider fiber for a given context ID
|
|
202
|
+
* This traverses up the fiber tree to find the provider
|
|
203
|
+
*
|
|
204
|
+
* @param contextId - Context identifier to find provider for
|
|
205
|
+
* @returns Provider fiber node or null if not found
|
|
206
|
+
*/
|
|
207
|
+
private findContextProvider;
|
|
208
|
+
/**
|
|
209
|
+
* Recursively search for a context provider in the fiber tree
|
|
210
|
+
*
|
|
211
|
+
* @param fiber - Current fiber to search
|
|
212
|
+
* @param contextId - Context ID to find
|
|
213
|
+
* @returns Provider fiber or null
|
|
214
|
+
*/
|
|
215
|
+
private searchForProvider;
|
|
216
|
+
/**
|
|
217
|
+
* Perform selective re-render of specific components
|
|
218
|
+
* Only re-executes components that need updates
|
|
219
|
+
*
|
|
220
|
+
* @param rootFiber - Root fiber node
|
|
221
|
+
* @param componentsToReRender - Set of components that need re-rendering
|
|
222
|
+
* @param reason - Reason for re-render
|
|
223
|
+
* @returns Updated fiber tree
|
|
224
|
+
*/
|
|
225
|
+
private selectiveReRender;
|
|
226
|
+
/**
|
|
227
|
+
* Recursively perform selective re-rendering
|
|
228
|
+
*
|
|
229
|
+
* @param fiber - Current fiber node
|
|
230
|
+
* @param componentsToReRender - Set of components to re-render
|
|
231
|
+
* @param reason - Reason for re-render
|
|
232
|
+
* @param currentPath - Current path in the tree
|
|
233
|
+
*/
|
|
234
|
+
private selectiveReRenderRecursive;
|
|
235
|
+
/**
|
|
236
|
+
* Determine if a component should be re-rendered
|
|
237
|
+
*
|
|
238
|
+
* @param fiber - Fiber node to check
|
|
239
|
+
* @param componentsToReRender - Set of components marked for re-rendering
|
|
240
|
+
* @returns True if component should be re-rendered
|
|
241
|
+
*/
|
|
242
|
+
private shouldReRenderComponent;
|
|
243
|
+
/**
|
|
244
|
+
* Re-execute a component function
|
|
245
|
+
*
|
|
246
|
+
* @param fiber - Fiber node to re-execute
|
|
247
|
+
* @param currentPath - Current path in the tree
|
|
248
|
+
*/
|
|
249
|
+
private reExecuteComponent;
|
|
250
|
+
/**
|
|
251
|
+
* Find the root component from a set of components
|
|
252
|
+
*
|
|
253
|
+
* @param components - Array of components
|
|
254
|
+
* @returns Root component or null
|
|
255
|
+
*/
|
|
256
|
+
private findRootComponent;
|
|
257
|
+
/**
|
|
258
|
+
* Recursively find dependent components
|
|
259
|
+
*
|
|
260
|
+
* @param currentFiber - Current fiber being examined
|
|
261
|
+
* @param changedFiber - Fiber that changed
|
|
262
|
+
* @param dependents - Set to collect dependents
|
|
263
|
+
*/
|
|
264
|
+
private findDependentsRecursive;
|
|
265
|
+
/**
|
|
266
|
+
* Set StateBindingManager for context dependency tracker integration
|
|
267
|
+
*/
|
|
268
|
+
setStateBindingManager(stateBindingManager: any): void;
|
|
269
|
+
/**
|
|
270
|
+
* Clone a fiber node for selective updates
|
|
271
|
+
*
|
|
272
|
+
* @param fiber - Fiber to clone
|
|
273
|
+
* @returns Cloned fiber
|
|
274
|
+
*/
|
|
275
|
+
private cloneFiberForUpdate;
|
|
276
|
+
}
|