@hypen-space/core 0.4.13 → 0.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +8 -82
- package/dist/app.js.map +2 -2
- package/dist/components/builtin.js +8 -82
- package/dist/components/builtin.js.map +2 -2
- package/dist/context.js +8 -3
- package/dist/context.js.map +2 -2
- package/dist/discovery.js +249 -249
- package/dist/discovery.js.map +4 -4
- package/dist/disposable.js +8 -3
- package/dist/disposable.js.map +2 -2
- package/dist/engine.browser.js +167 -131
- package/dist/engine.browser.js.map +2 -2
- package/dist/engine.js +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/events.js +8 -3
- package/dist/events.js.map +2 -2
- package/dist/index.browser.js +278 -154
- package/dist/index.browser.js.map +6 -5
- package/dist/index.js +426 -433
- package/dist/index.js.map +9 -9
- package/dist/loader.js +1 -1
- package/dist/loader.js.map +1 -1
- package/dist/logger.js +8 -3
- package/dist/logger.js.map +2 -2
- package/dist/plugin.js +350 -5
- package/dist/plugin.js.map +4 -3
- package/dist/remote/client.js +8 -93
- package/dist/remote/client.js.map +2 -2
- package/dist/remote/index.js +480 -341
- package/dist/remote/index.js.map +6 -5
- package/dist/remote/server.js +480 -330
- package/dist/remote/server.js.map +6 -5
- package/dist/renderer.js +8 -3
- package/dist/renderer.js.map +2 -2
- package/dist/resolver.js +350 -5
- package/dist/resolver.js.map +4 -3
- package/dist/router.js +8 -3
- package/dist/router.js.map +2 -2
- package/dist/state.js +8 -3
- package/dist/state.js.map +2 -2
- package/package.json +1 -1
- package/wasm-browser/hypen_engine_bg.wasm +0 -0
- package/wasm-browser/package.json +1 -1
- package/wasm-node/hypen_engine_bg.wasm +0 -0
- package/wasm-node/package.json +1 -1
package/dist/context.js.map
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"/**\n * Type-safe Event System\n *\n * Provides strongly-typed event emission and subscription with autocomplete support.\n */\n\nimport { frameworkLoggers } from \"./logger.js\";\n\nconst log = frameworkLoggers.events;\n\nexport type EventHandler<T = unknown> = (payload: T) => void;\n\n/**\n * Type-safe event emitter with generics\n */\nexport class TypedEventEmitter<TEvents extends Record<string, unknown> = Record<string, unknown>> {\n private eventBus = new Map<keyof TEvents, Set<EventHandler<any>>>();\n\n /**\n * Emit an event with type-safe payload\n */\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\n const handlers = this.eventBus.get(event);\n if (!handlers || handlers.size === 0) {\n return;\n }\n\n handlers.forEach((handler) => {\n try {\n handler(payload);\n } catch (error) {\n log.error(`Error in event handler for \"${String(event)}\":`, error);\n }\n });\n }\n\n /**\n * Subscribe to an event with type-safe payload\n * Returns an unsubscribe function\n */\n on<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): () => void {\n if (!this.eventBus.has(event)) {\n this.eventBus.set(event, new Set());\n }\n\n const handlers = this.eventBus.get(event)!;\n handlers.add(handler);\n\n // Return unsubscribe function\n return () => {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.eventBus.delete(event);\n }\n };\n }\n\n /**\n * Subscribe to an event once (auto-unsubscribe after first emit)\n */\n once<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): () => void {\n const wrappedHandler = (payload: TEvents[K]) => {\n handler(payload);\n unsubscribe();\n };\n\n const unsubscribe = this.on(event, wrappedHandler);\n return unsubscribe;\n }\n\n /**\n * Unsubscribe a specific handler from an event\n */\n off<K extends keyof TEvents>(event: K, handler: EventHandler<TEvents[K]>): void {\n const handlers = this.eventBus.get(event);\n if (handlers) {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.eventBus.delete(event);\n }\n }\n }\n\n /**\n * Remove all listeners for a specific event\n */\n removeAllListeners<K extends keyof TEvents>(event: K): void {\n this.eventBus.delete(event);\n }\n\n /**\n * Remove all listeners for all events\n */\n clearAll(): void {\n this.eventBus.clear();\n }\n\n /**\n * Get the number of listeners for an event\n */\n listenerCount<K extends keyof TEvents>(event: K): number {\n return this.eventBus.get(event)?.size ?? 0;\n }\n\n /**\n * Get all registered event names\n */\n eventNames(): Array<keyof TEvents> {\n return Array.from(this.eventBus.keys());\n }\n}\n\n/**\n * Default events for Hypen framework (can be extended by users)\n */\nexport type HypenFrameworkEvents = {\n 'module:created': { moduleId: string };\n 'module:destroyed': { moduleId: string };\n 'route:changed': { from: string | null; to: string };\n 'state:updated': { moduleId: string; paths: string[] };\n 'action:dispatched': { moduleId: string; actionName: string; payload?: unknown };\n 'error': { message: string; error?: Error; context?: string };\n};\n\n/**\n * Create a typed event emitter with custom event map\n */\nexport function createEventEmitter<TEvents extends Record<string, unknown> = HypenFrameworkEvents>(): TypedEventEmitter<TEvents> {\n return new TypedEventEmitter<TEvents>();\n}\n",
|
|
7
7
|
"/**\n * Global Context - Cross-module communication and state access\n */\n\nimport type { HypenModuleInstance } from \"./app.js\";\nimport { getStateSnapshot } from \"./state.js\";\nimport { TypedEventEmitter, type HypenFrameworkEvents } from \"./events.js\";\nimport { frameworkLoggers } from \"./logger.js\";\n\nconst log = frameworkLoggers.context;\n\nexport type ModuleReference<T = unknown> = {\n state: T; // Live proxy state\n setState: (patch: Partial<T>) => void;\n getState: () => T; // Snapshot\n};\n\n/**\n * @deprecated Use TypedEventEmitter from events.ts for type-safe events\n */\nexport type EventHandler = (payload?: unknown) => void;\n\n/**\n * Global Context - Provides access to all modules and cross-module communication\n *\n * @template TEvents - Custom event map (extends HypenFrameworkEvents)\n */\nexport class HypenGlobalContext<TEvents extends Record<string, unknown> = HypenFrameworkEvents> {\n private modules = new Map<string, HypenModuleInstance>();\n private typedEvents: TypedEventEmitter<TEvents>;\n\n /**\n * @deprecated Legacy event bus for backward compatibility\n */\n private legacyEventBus = new Map<string, Set<EventHandler>>();\n\n constructor() {\n this.typedEvents = new TypedEventEmitter<TEvents>();\n }\n\n /**\n * Get the typed event emitter for type-safe event handling\n */\n get events(): TypedEventEmitter<TEvents> {\n return this.typedEvents;\n }\n\n /**\n * Register a module instance with an ID\n */\n registerModule(id: string, instance: HypenModuleInstance) {\n if (this.modules.has(id)) {\n log.warn(`Module \"${id}\" is already registered. Overwriting.`);\n }\n this.modules.set(id, instance);\n log.debug(`Registered module: ${id}`);\n }\n\n /**\n * Unregister a module\n */\n unregisterModule(id: string) {\n this.modules.delete(id);\n log.debug(`Unregistered module: ${id}`);\n }\n\n /**\n * Get a module by ID with type safety\n */\n getModule<T = unknown>(id: string): ModuleReference<T> {\n const module = this.modules.get(id);\n if (!module) {\n throw new Error(\n `Module \"${id}\" not found. Available modules: ${Array.from(this.modules.keys()).join(\", \")}`\n );\n }\n\n return {\n state: module.getLiveState() as T,\n setState: (patch: Partial<T>) => module.updateState(patch),\n getState: () => module.getState() as T,\n };\n }\n\n /**\n * Check if a module exists\n */\n hasModule(id: string): boolean {\n return this.modules.has(id);\n }\n\n /**\n * Get all registered module IDs\n */\n getModuleIds(): string[] {\n return Array.from(this.modules.keys());\n }\n\n /**\n * Get the entire app state tree (snapshot)\n */\n getGlobalState(): Record<string, unknown> {\n const state: Record<string, unknown> = {};\n this.modules.forEach((module, id) => {\n state[id] = module.getState();\n });\n return state;\n }\n\n /**\n * Emit an event to the event bus (legacy API for backward compatibility)\n * @deprecated Use `context.events.emit()` for type-safe events\n */\n emit(event: string, payload?: unknown): void {\n const handlers = this.legacyEventBus.get(event);\n if (!handlers || handlers.size === 0) {\n log.debug(`Event \"${event}\" emitted but no listeners`);\n } else {\n log.debug(`Emitting event: ${event}`, payload);\n handlers.forEach((handler) => {\n try {\n handler(payload);\n } catch (error) {\n log.error(`Error in event handler for \"${event}\":`, error);\n }\n });\n }\n\n // Also emit to typed event system if the event is registered there\n if (this.typedEvents.listenerCount(event as keyof TEvents) > 0) {\n this.typedEvents.emit(event as keyof TEvents, payload as TEvents[keyof TEvents]);\n }\n }\n\n /**\n * Subscribe to an event (legacy API for backward compatibility)\n * @deprecated Use `context.events.on()` for type-safe events\n */\n on(event: string, handler: EventHandler): () => void {\n if (!this.legacyEventBus.has(event)) {\n this.legacyEventBus.set(event, new Set());\n }\n\n const handlers = this.legacyEventBus.get(event)!;\n handlers.add(handler);\n\n log.debug(`Listening to event: ${event}`);\n\n // Return unsubscribe function\n return () => {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.legacyEventBus.delete(event);\n }\n };\n }\n\n /**\n * Unsubscribe from an event (legacy API)\n * @deprecated Use the unsubscribe function returned by `context.events.on()`\n */\n off(event: string, handler: EventHandler): void {\n const handlers = this.legacyEventBus.get(event);\n if (handlers) {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.legacyEventBus.delete(event);\n }\n }\n }\n\n /**\n * Clear all event listeners for an event (legacy API)\n * @deprecated Use `context.events.removeAllListeners()`\n */\n clearEvent(event: string): void {\n this.legacyEventBus.delete(event);\n }\n\n /**\n * Clear all event listeners (legacy API)\n * @deprecated Use `context.events.clearAll()`\n */\n clearAllEvents(): void {\n this.legacyEventBus.clear();\n }\n\n /**\n * Get debug info about the context\n */\n debug(): {\n modules: string[];\n events: string[];\n typedEvents: Array<keyof TEvents>;\n state: Record<string, unknown>;\n } {\n return {\n modules: this.getModuleIds(),\n events: Array.from(this.legacyEventBus.keys()),\n typedEvents: this.typedEvents.eventNames(),\n state: this.getGlobalState(),\n };\n }\n}\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "6654C7168091E6FB64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/discovery.js
CHANGED
|
@@ -27,254 +27,6 @@ var __export = (target, all) => {
|
|
|
27
27
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
28
28
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
29
29
|
|
|
30
|
-
// src/state.ts
|
|
31
|
-
function deepClone(obj) {
|
|
32
|
-
if (obj === null || typeof obj !== "object") {
|
|
33
|
-
return obj;
|
|
34
|
-
}
|
|
35
|
-
if (typeof obj === "function") {
|
|
36
|
-
return obj;
|
|
37
|
-
}
|
|
38
|
-
if (typeof obj.__getSnapshot === "function") {
|
|
39
|
-
return obj.__getSnapshot();
|
|
40
|
-
}
|
|
41
|
-
if (obj instanceof WeakMap || obj instanceof WeakSet) {
|
|
42
|
-
return obj;
|
|
43
|
-
}
|
|
44
|
-
const visited = new WeakMap;
|
|
45
|
-
function cloneInternal(value) {
|
|
46
|
-
if (value === null || typeof value !== "object") {
|
|
47
|
-
return value;
|
|
48
|
-
}
|
|
49
|
-
if (typeof value === "function") {
|
|
50
|
-
return value;
|
|
51
|
-
}
|
|
52
|
-
if (visited.has(value)) {
|
|
53
|
-
return visited.get(value);
|
|
54
|
-
}
|
|
55
|
-
if (value instanceof WeakMap || value instanceof WeakSet) {
|
|
56
|
-
return value;
|
|
57
|
-
}
|
|
58
|
-
if (value instanceof Date || value instanceof RegExp || value instanceof Map || value instanceof Set || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {
|
|
59
|
-
try {
|
|
60
|
-
return structuredClone(value);
|
|
61
|
-
} catch {}
|
|
62
|
-
}
|
|
63
|
-
if (Array.isArray(value)) {
|
|
64
|
-
const arrClone = [];
|
|
65
|
-
visited.set(value, arrClone);
|
|
66
|
-
for (let i = 0;i < value.length; i++) {
|
|
67
|
-
arrClone[i] = cloneInternal(value[i]);
|
|
68
|
-
}
|
|
69
|
-
return arrClone;
|
|
70
|
-
}
|
|
71
|
-
const objClone = {};
|
|
72
|
-
visited.set(value, objClone);
|
|
73
|
-
for (const key in value) {
|
|
74
|
-
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
75
|
-
objClone[key] = cloneInternal(value[key]);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const symbolKeys = Object.getOwnPropertySymbols(value);
|
|
79
|
-
for (const sym of symbolKeys) {
|
|
80
|
-
objClone[sym] = cloneInternal(value[sym]);
|
|
81
|
-
}
|
|
82
|
-
return objClone;
|
|
83
|
-
}
|
|
84
|
-
return cloneInternal(obj);
|
|
85
|
-
}
|
|
86
|
-
function diffState(oldState, newState, basePath = "") {
|
|
87
|
-
const paths = [];
|
|
88
|
-
const newValues = {};
|
|
89
|
-
function diff(oldVal, newVal, path) {
|
|
90
|
-
if (oldVal === newVal)
|
|
91
|
-
return;
|
|
92
|
-
if (typeof oldVal !== "object" || typeof newVal !== "object" || oldVal === null || newVal === null) {
|
|
93
|
-
if (oldVal !== newVal) {
|
|
94
|
-
paths.push(path);
|
|
95
|
-
newValues[path] = newVal;
|
|
96
|
-
}
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (Array.isArray(oldVal) || Array.isArray(newVal)) {
|
|
100
|
-
if (!Array.isArray(oldVal) || !Array.isArray(newVal) || oldVal.length !== newVal.length) {
|
|
101
|
-
paths.push(path);
|
|
102
|
-
newValues[path] = newVal;
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
for (let i = 0;i < newVal.length; i++) {
|
|
106
|
-
const itemPath = path ? `${path}.${i}` : `${i}`;
|
|
107
|
-
diff(oldVal[i], newVal[i], itemPath);
|
|
108
|
-
}
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
const oldKeys = new Set(Object.keys(oldVal));
|
|
112
|
-
const newKeys = new Set(Object.keys(newVal));
|
|
113
|
-
for (const key of newKeys) {
|
|
114
|
-
const propPath = path ? `${path}.${key}` : key;
|
|
115
|
-
if (!oldKeys.has(key)) {
|
|
116
|
-
paths.push(propPath);
|
|
117
|
-
newValues[propPath] = newVal[key];
|
|
118
|
-
} else {
|
|
119
|
-
diff(oldVal[key], newVal[key], propPath);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
for (const key of oldKeys) {
|
|
123
|
-
if (!newKeys.has(key)) {
|
|
124
|
-
const propPath = path ? `${path}.${key}` : key;
|
|
125
|
-
paths.push(propPath);
|
|
126
|
-
newValues[propPath] = undefined;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
diff(oldState, newState, basePath);
|
|
131
|
-
return { paths, newValues };
|
|
132
|
-
}
|
|
133
|
-
function createObservableState(initialState, options) {
|
|
134
|
-
const opts = options || { onChange: () => {} };
|
|
135
|
-
if (initialState === null || initialState === undefined) {
|
|
136
|
-
initialState = {};
|
|
137
|
-
}
|
|
138
|
-
if (initialState instanceof Number || initialState instanceof String || initialState instanceof Boolean) {
|
|
139
|
-
throw new TypeError("Cannot create observable state from primitive wrapper objects (Number, String, Boolean). " + "Use plain primitives or regular objects instead.");
|
|
140
|
-
}
|
|
141
|
-
initialState = deepClone(initialState);
|
|
142
|
-
let lastSnapshot = deepClone(initialState);
|
|
143
|
-
const pathPrefix = opts.pathPrefix || "";
|
|
144
|
-
let batchDepth = 0;
|
|
145
|
-
let pendingChange = null;
|
|
146
|
-
function notifyChange() {
|
|
147
|
-
if (batchDepth > 0)
|
|
148
|
-
return;
|
|
149
|
-
const change = diffState(lastSnapshot, state, pathPrefix);
|
|
150
|
-
if (change.paths.length > 0) {
|
|
151
|
-
lastSnapshot = deepClone(state);
|
|
152
|
-
if (pendingChange) {
|
|
153
|
-
change.paths.push(...pendingChange.paths);
|
|
154
|
-
Object.assign(change.newValues, pendingChange.newValues);
|
|
155
|
-
pendingChange = null;
|
|
156
|
-
}
|
|
157
|
-
opts.onChange(change);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
let notificationPending = false;
|
|
161
|
-
function scheduleBatch() {
|
|
162
|
-
if (batchDepth === 0) {
|
|
163
|
-
if (!notificationPending) {
|
|
164
|
-
notificationPending = true;
|
|
165
|
-
queueMicrotask(() => {
|
|
166
|
-
notificationPending = false;
|
|
167
|
-
if (batchDepth === 0) {
|
|
168
|
-
notifyChange();
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
const proxyCache = new WeakMap;
|
|
175
|
-
function createProxy(target, basePath) {
|
|
176
|
-
const cached = proxyCache.get(target);
|
|
177
|
-
if (cached)
|
|
178
|
-
return cached;
|
|
179
|
-
const proxy = new Proxy(target, {
|
|
180
|
-
get(obj, prop) {
|
|
181
|
-
if (prop === IS_PROXY)
|
|
182
|
-
return true;
|
|
183
|
-
if (prop === RAW_TARGET)
|
|
184
|
-
return obj;
|
|
185
|
-
if (prop === "__beginBatch") {
|
|
186
|
-
return () => {
|
|
187
|
-
batchDepth++;
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
if (prop === "__endBatch") {
|
|
191
|
-
return () => {
|
|
192
|
-
batchDepth--;
|
|
193
|
-
if (batchDepth === 0) {
|
|
194
|
-
notifyChange();
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
if (prop === "__getSnapshot") {
|
|
199
|
-
return () => deepClone(obj);
|
|
200
|
-
}
|
|
201
|
-
const value = obj[prop];
|
|
202
|
-
if (value && typeof value === "object") {
|
|
203
|
-
if (value[IS_PROXY]) {
|
|
204
|
-
return value;
|
|
205
|
-
}
|
|
206
|
-
if (value instanceof Date || value instanceof RegExp || value instanceof Map || value instanceof Set || value instanceof WeakMap || value instanceof WeakSet) {
|
|
207
|
-
return value;
|
|
208
|
-
}
|
|
209
|
-
const cachedNested = proxyCache.get(value);
|
|
210
|
-
if (cachedNested) {
|
|
211
|
-
return cachedNested;
|
|
212
|
-
}
|
|
213
|
-
const nestedProxy = createProxy(value, basePath ? `${basePath}.${String(prop)}` : String(prop));
|
|
214
|
-
return nestedProxy;
|
|
215
|
-
}
|
|
216
|
-
return value;
|
|
217
|
-
},
|
|
218
|
-
set(obj, prop, value) {
|
|
219
|
-
const oldValue = obj[prop];
|
|
220
|
-
if (value && typeof value === "object" && value[IS_PROXY]) {
|
|
221
|
-
value = value[RAW_TARGET];
|
|
222
|
-
}
|
|
223
|
-
obj[prop] = value;
|
|
224
|
-
if (oldValue !== value) {
|
|
225
|
-
scheduleBatch();
|
|
226
|
-
}
|
|
227
|
-
return true;
|
|
228
|
-
},
|
|
229
|
-
deleteProperty(obj, prop) {
|
|
230
|
-
if (prop in obj) {
|
|
231
|
-
delete obj[prop];
|
|
232
|
-
scheduleBatch();
|
|
233
|
-
}
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
proxyCache.set(target, proxy);
|
|
238
|
-
return proxy;
|
|
239
|
-
}
|
|
240
|
-
const state = createProxy(initialState, pathPrefix);
|
|
241
|
-
return state;
|
|
242
|
-
}
|
|
243
|
-
function batchStateUpdates(state, fn) {
|
|
244
|
-
const s = state;
|
|
245
|
-
if (s.__beginBatch && s.__endBatch) {
|
|
246
|
-
s.__beginBatch();
|
|
247
|
-
try {
|
|
248
|
-
fn();
|
|
249
|
-
} finally {
|
|
250
|
-
s.__endBatch();
|
|
251
|
-
}
|
|
252
|
-
} else {
|
|
253
|
-
fn();
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
function getStateSnapshot(state) {
|
|
257
|
-
const s = state;
|
|
258
|
-
if (s.__getSnapshot) {
|
|
259
|
-
return s.__getSnapshot();
|
|
260
|
-
}
|
|
261
|
-
return deepClone(state);
|
|
262
|
-
}
|
|
263
|
-
function isStateProxy(value) {
|
|
264
|
-
return value !== null && typeof value === "object" && value[IS_PROXY] === true;
|
|
265
|
-
}
|
|
266
|
-
function unwrapProxy(value) {
|
|
267
|
-
if (value !== null && typeof value === "object" && value[IS_PROXY]) {
|
|
268
|
-
return value[RAW_TARGET];
|
|
269
|
-
}
|
|
270
|
-
return value;
|
|
271
|
-
}
|
|
272
|
-
var IS_PROXY, RAW_TARGET;
|
|
273
|
-
var init_state = __esm(() => {
|
|
274
|
-
IS_PROXY = Symbol.for("hypen.isProxy");
|
|
275
|
-
RAW_TARGET = Symbol.for("hypen.rawTarget");
|
|
276
|
-
});
|
|
277
|
-
|
|
278
30
|
// src/logger.ts
|
|
279
31
|
function isProduction() {
|
|
280
32
|
if (typeof process !== "undefined" && process.env) {
|
|
@@ -644,6 +396,254 @@ var init_result = __esm(() => {
|
|
|
644
396
|
};
|
|
645
397
|
});
|
|
646
398
|
|
|
399
|
+
// src/state.ts
|
|
400
|
+
function deepClone(obj) {
|
|
401
|
+
if (obj === null || typeof obj !== "object") {
|
|
402
|
+
return obj;
|
|
403
|
+
}
|
|
404
|
+
if (typeof obj === "function") {
|
|
405
|
+
return obj;
|
|
406
|
+
}
|
|
407
|
+
if (typeof obj.__getSnapshot === "function") {
|
|
408
|
+
return obj.__getSnapshot();
|
|
409
|
+
}
|
|
410
|
+
if (obj instanceof WeakMap || obj instanceof WeakSet) {
|
|
411
|
+
return obj;
|
|
412
|
+
}
|
|
413
|
+
const visited = new WeakMap;
|
|
414
|
+
function cloneInternal(value) {
|
|
415
|
+
if (value === null || typeof value !== "object") {
|
|
416
|
+
return value;
|
|
417
|
+
}
|
|
418
|
+
if (typeof value === "function") {
|
|
419
|
+
return value;
|
|
420
|
+
}
|
|
421
|
+
if (visited.has(value)) {
|
|
422
|
+
return visited.get(value);
|
|
423
|
+
}
|
|
424
|
+
if (value instanceof WeakMap || value instanceof WeakSet) {
|
|
425
|
+
return value;
|
|
426
|
+
}
|
|
427
|
+
if (value instanceof Date || value instanceof RegExp || value instanceof Map || value instanceof Set || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {
|
|
428
|
+
try {
|
|
429
|
+
return structuredClone(value);
|
|
430
|
+
} catch {}
|
|
431
|
+
}
|
|
432
|
+
if (Array.isArray(value)) {
|
|
433
|
+
const arrClone = [];
|
|
434
|
+
visited.set(value, arrClone);
|
|
435
|
+
for (let i = 0;i < value.length; i++) {
|
|
436
|
+
arrClone[i] = cloneInternal(value[i]);
|
|
437
|
+
}
|
|
438
|
+
return arrClone;
|
|
439
|
+
}
|
|
440
|
+
const objClone = {};
|
|
441
|
+
visited.set(value, objClone);
|
|
442
|
+
for (const key in value) {
|
|
443
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
444
|
+
objClone[key] = cloneInternal(value[key]);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const symbolKeys = Object.getOwnPropertySymbols(value);
|
|
448
|
+
for (const sym of symbolKeys) {
|
|
449
|
+
objClone[sym] = cloneInternal(value[sym]);
|
|
450
|
+
}
|
|
451
|
+
return objClone;
|
|
452
|
+
}
|
|
453
|
+
return cloneInternal(obj);
|
|
454
|
+
}
|
|
455
|
+
function diffState(oldState, newState, basePath = "") {
|
|
456
|
+
const paths = [];
|
|
457
|
+
const newValues = {};
|
|
458
|
+
function diff(oldVal, newVal, path) {
|
|
459
|
+
if (oldVal === newVal)
|
|
460
|
+
return;
|
|
461
|
+
if (typeof oldVal !== "object" || typeof newVal !== "object" || oldVal === null || newVal === null) {
|
|
462
|
+
if (oldVal !== newVal) {
|
|
463
|
+
paths.push(path);
|
|
464
|
+
newValues[path] = newVal;
|
|
465
|
+
}
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
if (Array.isArray(oldVal) || Array.isArray(newVal)) {
|
|
469
|
+
if (!Array.isArray(oldVal) || !Array.isArray(newVal) || oldVal.length !== newVal.length) {
|
|
470
|
+
paths.push(path);
|
|
471
|
+
newValues[path] = newVal;
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
for (let i = 0;i < newVal.length; i++) {
|
|
475
|
+
const itemPath = path ? `${path}.${i}` : `${i}`;
|
|
476
|
+
diff(oldVal[i], newVal[i], itemPath);
|
|
477
|
+
}
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
const oldKeys = new Set(Object.keys(oldVal));
|
|
481
|
+
const newKeys = new Set(Object.keys(newVal));
|
|
482
|
+
for (const key of newKeys) {
|
|
483
|
+
const propPath = path ? `${path}.${key}` : key;
|
|
484
|
+
if (!oldKeys.has(key)) {
|
|
485
|
+
paths.push(propPath);
|
|
486
|
+
newValues[propPath] = newVal[key];
|
|
487
|
+
} else {
|
|
488
|
+
diff(oldVal[key], newVal[key], propPath);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
for (const key of oldKeys) {
|
|
492
|
+
if (!newKeys.has(key)) {
|
|
493
|
+
const propPath = path ? `${path}.${key}` : key;
|
|
494
|
+
paths.push(propPath);
|
|
495
|
+
newValues[propPath] = undefined;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
diff(oldState, newState, basePath);
|
|
500
|
+
return { paths, newValues };
|
|
501
|
+
}
|
|
502
|
+
function createObservableState(initialState, options) {
|
|
503
|
+
const opts = options || { onChange: () => {} };
|
|
504
|
+
if (initialState === null || initialState === undefined) {
|
|
505
|
+
initialState = {};
|
|
506
|
+
}
|
|
507
|
+
if (initialState instanceof Number || initialState instanceof String || initialState instanceof Boolean) {
|
|
508
|
+
throw new TypeError("Cannot create observable state from primitive wrapper objects (Number, String, Boolean). " + "Use plain primitives or regular objects instead.");
|
|
509
|
+
}
|
|
510
|
+
initialState = deepClone(initialState);
|
|
511
|
+
let lastSnapshot = deepClone(initialState);
|
|
512
|
+
const pathPrefix = opts.pathPrefix || "";
|
|
513
|
+
let batchDepth = 0;
|
|
514
|
+
let pendingChange = null;
|
|
515
|
+
function notifyChange() {
|
|
516
|
+
if (batchDepth > 0)
|
|
517
|
+
return;
|
|
518
|
+
const change = diffState(lastSnapshot, state, pathPrefix);
|
|
519
|
+
if (change.paths.length > 0) {
|
|
520
|
+
lastSnapshot = deepClone(state);
|
|
521
|
+
if (pendingChange) {
|
|
522
|
+
change.paths.push(...pendingChange.paths);
|
|
523
|
+
Object.assign(change.newValues, pendingChange.newValues);
|
|
524
|
+
pendingChange = null;
|
|
525
|
+
}
|
|
526
|
+
opts.onChange(change);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
let notificationPending = false;
|
|
530
|
+
function scheduleBatch() {
|
|
531
|
+
if (batchDepth === 0) {
|
|
532
|
+
if (!notificationPending) {
|
|
533
|
+
notificationPending = true;
|
|
534
|
+
queueMicrotask(() => {
|
|
535
|
+
notificationPending = false;
|
|
536
|
+
if (batchDepth === 0) {
|
|
537
|
+
notifyChange();
|
|
538
|
+
}
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
const proxyCache = new WeakMap;
|
|
544
|
+
function createProxy(target, basePath) {
|
|
545
|
+
const cached = proxyCache.get(target);
|
|
546
|
+
if (cached)
|
|
547
|
+
return cached;
|
|
548
|
+
const proxy = new Proxy(target, {
|
|
549
|
+
get(obj, prop) {
|
|
550
|
+
if (prop === IS_PROXY)
|
|
551
|
+
return true;
|
|
552
|
+
if (prop === RAW_TARGET)
|
|
553
|
+
return obj;
|
|
554
|
+
if (prop === "__beginBatch") {
|
|
555
|
+
return () => {
|
|
556
|
+
batchDepth++;
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
if (prop === "__endBatch") {
|
|
560
|
+
return () => {
|
|
561
|
+
batchDepth--;
|
|
562
|
+
if (batchDepth === 0) {
|
|
563
|
+
notifyChange();
|
|
564
|
+
}
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
if (prop === "__getSnapshot") {
|
|
568
|
+
return () => deepClone(obj);
|
|
569
|
+
}
|
|
570
|
+
const value = obj[prop];
|
|
571
|
+
if (value && typeof value === "object") {
|
|
572
|
+
if (value[IS_PROXY]) {
|
|
573
|
+
return value;
|
|
574
|
+
}
|
|
575
|
+
if (value instanceof Date || value instanceof RegExp || value instanceof Map || value instanceof Set || value instanceof WeakMap || value instanceof WeakSet) {
|
|
576
|
+
return value;
|
|
577
|
+
}
|
|
578
|
+
const cachedNested = proxyCache.get(value);
|
|
579
|
+
if (cachedNested) {
|
|
580
|
+
return cachedNested;
|
|
581
|
+
}
|
|
582
|
+
const nestedProxy = createProxy(value, basePath ? `${basePath}.${String(prop)}` : String(prop));
|
|
583
|
+
return nestedProxy;
|
|
584
|
+
}
|
|
585
|
+
return value;
|
|
586
|
+
},
|
|
587
|
+
set(obj, prop, value) {
|
|
588
|
+
const oldValue = obj[prop];
|
|
589
|
+
if (value && typeof value === "object" && value[IS_PROXY]) {
|
|
590
|
+
value = value[RAW_TARGET];
|
|
591
|
+
}
|
|
592
|
+
obj[prop] = value;
|
|
593
|
+
if (oldValue !== value) {
|
|
594
|
+
scheduleBatch();
|
|
595
|
+
}
|
|
596
|
+
return true;
|
|
597
|
+
},
|
|
598
|
+
deleteProperty(obj, prop) {
|
|
599
|
+
if (prop in obj) {
|
|
600
|
+
delete obj[prop];
|
|
601
|
+
scheduleBatch();
|
|
602
|
+
}
|
|
603
|
+
return true;
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
proxyCache.set(target, proxy);
|
|
607
|
+
return proxy;
|
|
608
|
+
}
|
|
609
|
+
const state = createProxy(initialState, pathPrefix);
|
|
610
|
+
return state;
|
|
611
|
+
}
|
|
612
|
+
function batchStateUpdates(state, fn) {
|
|
613
|
+
const s = state;
|
|
614
|
+
if (s.__beginBatch && s.__endBatch) {
|
|
615
|
+
s.__beginBatch();
|
|
616
|
+
try {
|
|
617
|
+
fn();
|
|
618
|
+
} finally {
|
|
619
|
+
s.__endBatch();
|
|
620
|
+
}
|
|
621
|
+
} else {
|
|
622
|
+
fn();
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
function getStateSnapshot(state) {
|
|
626
|
+
const s = state;
|
|
627
|
+
if (s.__getSnapshot) {
|
|
628
|
+
return s.__getSnapshot();
|
|
629
|
+
}
|
|
630
|
+
return deepClone(state);
|
|
631
|
+
}
|
|
632
|
+
function isStateProxy(value) {
|
|
633
|
+
return value !== null && typeof value === "object" && value[IS_PROXY] === true;
|
|
634
|
+
}
|
|
635
|
+
function unwrapProxy(value) {
|
|
636
|
+
if (value !== null && typeof value === "object" && value[IS_PROXY]) {
|
|
637
|
+
return value[RAW_TARGET];
|
|
638
|
+
}
|
|
639
|
+
return value;
|
|
640
|
+
}
|
|
641
|
+
var IS_PROXY, RAW_TARGET;
|
|
642
|
+
var init_state = __esm(() => {
|
|
643
|
+
IS_PROXY = Symbol.for("hypen.isProxy");
|
|
644
|
+
RAW_TARGET = Symbol.for("hypen.rawTarget");
|
|
645
|
+
});
|
|
646
|
+
|
|
647
647
|
// src/app.ts
|
|
648
648
|
var exports_app = {};
|
|
649
649
|
__export(exports_app, {
|
|
@@ -1241,4 +1241,4 @@ export {
|
|
|
1241
1241
|
discoverComponents
|
|
1242
1242
|
};
|
|
1243
1243
|
|
|
1244
|
-
//# debugId=
|
|
1244
|
+
//# debugId=0FA9D411E5D4FFA664756E2164756E21
|