@lark.js/mvc 0.0.5 → 0.0.6

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/index.d.cts CHANGED
@@ -457,7 +457,7 @@ declare class Cache<T = unknown> implements CacheInterface<T> {
457
457
  * - View: base view class with extend/merge inheritance and mixin support
458
458
  * - Router: hash-based two-phase route confirmation
459
459
  * - State: simple cross-view observable singleton (recommended for simple cases)
460
- * - Store: complex Proxy-based reactive state with observe/handlers/multi-instance
460
+ * - Store: zustand-aligned state management with create/getState/setState/subscribe
461
461
  * (recommended for complex cases)
462
462
  * - Service: API request management with caching, queuing, and deduplication
463
463
  * - Frame: view frame managing view mount/unmount lifecycle
@@ -777,7 +777,7 @@ interface RouterInterface extends EventEmitterInterface<RouterInterface> {
777
777
  * Returns an unsubscribe function so the guard can be torn down (e.g.
778
778
  * inside a view's `destroy` handler).
779
779
  */
780
- beforeEach(guard: (to: Location, from: Location) => boolean | void | Promise<boolean | void>): () => void;
780
+ beforeEach(guard: (to: Location, from: Location) => boolean | Promise<boolean>): () => void;
781
781
  /** Internal: bind hashchange (called by Framework.boot) */
782
782
  _bind(): void;
783
783
  /** Internal: set framework config */
@@ -1203,8 +1203,7 @@ interface EventEmitterInterface<T = unknown> {
1203
1203
  *
1204
1204
  * Use State for SIMPLE cross-view data (lightweight shared values: counters,
1205
1205
  * toggles, page title, session info, etc.). For COMPLEX reactive state —
1206
- * handlers, derived data, multi-instance isolation, or Proxy-based fine-grained
1207
- * dependency tracking — use `defineStore` instead.
1206
+ * handlers, derived data, or fine-grained subscriptions use `create` instead.
1208
1207
  */
1209
1208
  interface StateInterface extends EventEmitterInterface<StateInterface> {
1210
1209
  /**
@@ -1643,6 +1642,12 @@ interface FrameworkConfig {
1643
1642
  * This field is required, defaults to "root".
1644
1643
  */
1645
1644
  rootId: string;
1645
+ /**
1646
+ * Routing mode.
1647
+ * - `"history"` (default): uses `history.pushState` / `popstate`, clean URLs like `/home`
1648
+ * - `"hash"`: uses URL hash fragment with `#!` prefix, e.g. `#!/home`
1649
+ */
1650
+ routeMode?: "history" | "hash";
1646
1651
  /**
1647
1652
  * Default view path.
1648
1653
  * Default root view path to load when URL doesn't match any route.
@@ -1661,7 +1666,7 @@ interface FrameworkConfig {
1661
1666
  * Use rewrite config item for path rewriting logic.
1662
1667
  */
1663
1668
  routes?: Record<string, string | RouteViewConfig>;
1664
- /** Hashbang prefix */
1669
+ /** Hashbang prefix (only used in hash mode) */
1665
1670
  hashbang?: string;
1666
1671
  /**
1667
1672
  * Error handler.
@@ -1831,8 +1836,9 @@ declare function toMap<T>(list: T[] | null | undefined, key?: keyof T): Record<s
1831
1836
  /** Get current timestamp */
1832
1837
  declare function now(): number;
1833
1838
 
1834
- /** Internal splitter character (invisible, used as namespace separator) */
1835
- declare const SPLITTER = "\u001E";
1839
+ /** Internal splitter character (U+001E Record Separator, invisible, used as namespace separator).
1840
+ * Uses String.fromCharCode to survive bundlers that strip control-char literals. */
1841
+ declare const SPLITTER: string;
1836
1842
  declare const RouterEvents: {
1837
1843
  CHANGE: string;
1838
1844
  CHANGED: string;
@@ -1883,14 +1889,14 @@ declare function applyStyle(styleIdOrPairs: string | string[], css?: string): ()
1883
1889
  * @param host - Object to associate the mark with (typically a view)
1884
1890
  * @param key - Key to track (typically "render" or a specific async-op identifier)
1885
1891
  */
1886
- declare function mark$1(host: object, key: string): () => boolean;
1892
+ declare function mark(host: object, key: string): () => boolean;
1887
1893
  /**
1888
1894
  * Clear all marks for a host object, invalidating every existing checker.
1889
1895
  * Called when a view re-renders or is destroyed.
1890
1896
  *
1891
1897
  * @param host - Object whose marks should be invalidated
1892
1898
  */
1893
- declare function unmark$1(host: object): void;
1899
+ declare function unmark(host: object): void;
1894
1900
 
1895
1901
  /**
1896
1902
  * Safeguard: Proxy-based debug protection for data objects.
@@ -1921,7 +1927,7 @@ declare function markBooted(): void;
1921
1927
  declare const State: StateInterface;
1922
1928
 
1923
1929
  /**
1924
- * Hash-based router with two-phase change confirmation.
1930
+ * Router with two-phase change confirmation (supports history and hash modes).
1925
1931
  *
1926
1932
  * @example
1927
1933
  * Router.to('/list', { page: 2 });
@@ -1931,6 +1937,8 @@ declare const State: StateInterface;
1931
1937
  declare const Router: RouterInterface;
1932
1938
  /** Mark framework as booted (called by Framework.boot) */
1933
1939
  declare function markRouterBooted(): void;
1940
+ /** Get current routing mode */
1941
+ declare function getRouteMode(): "history" | "hash";
1934
1942
 
1935
1943
  /**
1936
1944
  * Module loader: async view loading via FrameworkConfig.require or dynamic import.
@@ -2328,192 +2336,100 @@ declare const EventDelegator: {
2328
2336
  declare const Framework: FrameworkInterface;
2329
2337
 
2330
2338
  /**
2331
- * @lark.js/mvc Store
2332
- *
2333
- * Reactive state management with Proxy-based dependency tracking.
2334
- * Adapted for Lark / React / Node.js.
2339
+ * Sync view state with URL query parameters.
2335
2340
  *
2336
- * Store is the recommended choice for COMPLEX cross-view state:
2337
- * reactive handlers, derived data, multi-instance isolation (`multi()`),
2338
- * store-internal reactions (inner `observe`), and Proxy-based fine-grained
2339
- * dependency tracking. For SIMPLE shared values (counters, toggles, page
2340
- * title, session info, etc.) prefer `State` from `./state` fewer concepts
2341
- * and no Proxy overhead.
2341
+ * @param view - The view instance to bind to (for auto location observation and lifecycle)
2342
+ * @param initialState - Default values for each URL param key. Keys not present
2343
+ * in the URL will use these defaults. Keys present in the URL override defaults.
2344
+ * @returns A tuple `[state, setState]`:
2345
+ * - `state`: current values read from the URL, merged with defaults
2346
+ * - `setState`: update URL params. Accepts a partial object or an updater function.
2347
+ * Only the specified keys are changed; other URL params are preserved.
2342
2348
  *
2343
- * Core concepts:
2344
- * - createState: Proxy-based deep reactive state
2345
- * - track/trigger/clear: publish-subscribe dependency tracking
2346
- * - defineStore: declarative store definition with platform adapters
2347
- * - cell/observeCell: lightweight standalone reactive cells
2349
+ * @example
2350
+ * ```ts
2351
+ * export default View.extend({
2352
+ * template,
2353
+ * init() {
2354
+ * const [state, setState] = useUrlState(this, { page: "1", size: "20" });
2355
+ * this.updater.set({ page: state.page, size: state.size }).digest();
2356
+ * this.setState = setState;
2357
+ * },
2358
+ * assign() {
2359
+ * const [state] = useUrlState(this, { page: "1", size: "20" });
2360
+ * this.updater.set({ page: state.page, size: state.size });
2361
+ * },
2362
+ * "nextPage<click>"() {
2363
+ * this.setState((prev) => ({ page: String(Number(prev.page) + 1) }));
2364
+ * },
2365
+ * });
2366
+ * ```
2348
2367
  */
2368
+ declare function useUrlState<S extends Record<string, string>>(view: ViewInterface, initialState?: S): [Readonly<S>, (patch: Partial<S> | ((prev: S) => Partial<S>)) => void];
2349
2369
 
2350
- interface Task {
2351
- cb: AnyFunc;
2352
- params?: Record<string, unknown>;
2353
- }
2354
- interface SchedulerObject {
2355
- add: (tasks: Task[]) => void;
2356
- clear: () => void;
2357
- delete: (tasks: Task[]) => void;
2358
- }
2359
- type Scheduler = SchedulerObject | ((cb: AnyFunc, payload: unknown) => void);
2360
- interface StateConfig {
2361
- belong?: string;
2362
- linkKeys?: string;
2363
- shallow?: boolean;
2364
- }
2365
- interface StoreConfig {
2366
- platform?: Platform;
2367
- scheduler?: Scheduler;
2368
- }
2369
- interface ObservePayload {
2370
- key: string;
2371
- alias?: string;
2372
- cb?: (changedMap: Record<string, unknown>) => void;
2373
- lazy?: boolean;
2374
- transform?: (val: unknown) => Record<string, unknown>;
2375
- }
2376
- declare enum StoreStatus {
2377
- BEFORE_CREATE = 0,
2378
- CREATED = 1,
2379
- ACTIVE = 2,
2380
- DESTROYED = 3
2381
- }
2382
- declare enum Platform {
2383
- Lark = "lark",
2384
- React = "react",
2385
- Node = "node"
2386
- }
2387
- declare const cloneData: <T>(data: T) => T;
2388
- declare class Queue {
2389
- private pendingTasks;
2390
- private queue;
2391
- flushTasks(): void;
2392
- add(tasks: Task[]): void;
2393
- delete(tasks: Task[]): void;
2394
- clear(): void;
2370
+ /**
2371
+ * @lark.js/mvc Store
2372
+ *
2373
+ * Zustand-aligned state management for Lark MVC.
2374
+ *
2375
+ * Core API:
2376
+ * - create(name, creator): define a store with (set, get) => initialState
2377
+ * - store.getState(): read current state snapshot
2378
+ * - store.setState(partial | updater): shallow-merge state and notify listeners
2379
+ * - store.subscribe(listener): listen for state changes
2380
+ * - store.destroy(): tear down the store
2381
+ * - computed(deps, fn): derived state that auto-recomputes when deps change
2382
+ * - bindStore(view, store, selector?): Lark View lifecycle binding
2383
+ */
2384
+ type Listener<T> = (state: T, prevState: T) => void;
2385
+ interface StoreApi<T = Record<string, unknown>> {
2386
+ getState(): T;
2387
+ setState(partial: Partial<T> | ((prev: T) => Partial<T>)): void;
2388
+ subscribe(listener: Listener<T>): () => void;
2389
+ destroy(): void;
2395
2390
  }
2396
- /** Check if value is a reactive state */
2397
- declare const isState: (target: unknown) => boolean;
2398
- declare const mark: (host: Record<string, unknown>, key: string) => (() => boolean);
2399
- declare const unmark: (host: Record<string, unknown>) => void;
2400
- declare function createState(initialData: unknown, config?: StateConfig): Record<string, unknown>;
2401
- declare function lazySet(target: Record<string, unknown>, data: Record<string, unknown>): void;
2402
- /** Shallow set: only top-level properties are reactive */
2403
- declare function shallowSet(target: Record<string, unknown>, key: string, data: unknown): unknown;
2404
- declare const _storeName: unique symbol;
2405
- declare const _storeStatus: unique symbol;
2406
- declare const _storeScheduler: unique symbol;
2407
- declare const _storeCreate: unique symbol;
2408
- declare const _storeBoot: unique symbol;
2409
- declare const _storeDestroy: unique symbol;
2410
- declare const _innerStore: unique symbol;
2411
- declare const _outerStore: unique symbol;
2412
- declare const _originState: unique symbol;
2413
- declare const _stateKeys: unique symbol;
2414
- declare const _storeState: unique symbol;
2415
- declare const _storeDefScheduler: unique symbol;
2416
- declare const _storeProxy: unique symbol;
2417
- declare const _computedKeys: unique symbol;
2391
+ type StateCreator<T> = (set: (partial: Partial<T> | ((prev: T) => Partial<T>)) => void, get: () => T) => T;
2418
2392
  /**
2419
2393
  * Declare a derived (computed) store property.
2420
2394
  *
2421
- * Usage (inside a `defineStore` creator):
2422
- *
2395
+ * Usage inside a `create` creator:
2423
2396
  * ```ts
2424
- * defineStore("count", (store, { computed }) => ({
2397
+ * const store = create("counter", (set, get) => ({
2425
2398
  * count: 0,
2426
- * doubled: computed(["count"], () => store.count * 2),
2427
- * increment() { store.count++ },
2399
+ * doubled: computed(["count"], () => get().count * 2),
2428
2400
  * }));
2429
2401
  * ```
2430
2402
  *
2431
- * `deps` lists the state keys the computed reads. Whenever any of those keys
2432
- * changes, the computed function re-runs and the new value flows out through
2433
- * the store like a regular state update meaning views that
2434
- * `store.observe(this, ["doubled"])` re-render automatically.
2435
- *
2436
- * The returned value is typed as `T`, so the store body still type-checks as
2437
- * `{ doubled: number; ... }`. Writes to a computed key are ignored at runtime.
2403
+ * `deps` lists the state keys the computed reads. Whenever any dep changes
2404
+ * via `setState`, the computed re-evaluates before listeners are notified.
2405
+ * Writes to a computed key via `setState` are silently ignored.
2438
2406
  */
2439
2407
  declare function computed<T>(deps: readonly string[], fn: () => T): T;
2440
- declare abstract class BaseStore {
2441
- [_storeName]: string;
2442
- [_storeStatus]: StoreStatus;
2443
- [_storeScheduler]: Scheduler;
2444
- [_originState]: Record<string, unknown>;
2445
- [_stateKeys]: string[];
2446
- [_storeState]: Record<string, unknown>;
2447
- [_computedKeys]: Set<string>;
2448
- [_storeDefScheduler]: () => Queue;
2449
- private [_outerStore];
2450
- [_storeBoot](): Record<string, unknown>;
2451
- [_storeDestroy](): void;
2452
- /**
2453
- *
2454
- * @param body - The object returned by the creator function
2455
- * @param excludeFns - Function keys to exclude from handlers (e.g. ['observe'])
2456
- */
2457
- [_storeCreate](body: Record<string, unknown>, excludeFns?: string[]): void;
2458
- constructor(name: string, config?: StoreConfig);
2459
- [_innerStore](): Record<string, unknown>;
2460
- get status(): StoreStatus;
2461
- get storeName(): string;
2462
- get scheduler(): Scheduler;
2463
- [_storeProxy](toOut?: boolean): Record<string, unknown>;
2464
- }
2465
- interface LarkView {
2466
- updater: {
2467
- set: (data: Record<string, unknown>) => unknown;
2468
- digest: (data?: Record<string, unknown>) => void;
2469
- };
2470
- on: (event: string, handler: AnyFunc) => unknown;
2471
- }
2472
- type LarkUseStore<S = Record<string, unknown>> = (view?: LarkView) => S & StoreMethods;
2473
- type ReactUseStore<S = Record<string, unknown>, StateSlice = S> = (selector?: (store: S & StoreMethods) => StateSlice) => StateSlice;
2474
- type NodeUseStore<S = Record<string, unknown>> = () => S & NodeStoreMethods;
2475
- interface NodeStoreMethods {
2476
- observe: (key: string, callback: AnyFunc, immediate?: boolean) => () => void;
2477
- }
2478
- interface StoreMethods {
2479
- /**
2480
- * Subscribe a view to store changes.
2481
- *
2482
- * - `store.observe(view)` — observe every state key (D5 default).
2483
- * - `store.observe(view, ["k1", "k2"])` — observe specific keys only.
2484
- * - `store.observe(view, ["k1"], (changes) => ...)` — explicit callback.
2485
- * - `store.observe(undefined, ["k1"], cb)` — inner observe (no view binding).
2486
- */
2487
- observe: (view: LarkView | undefined, keys?: (string | ObservePayload)[] | (() => (string | ObservePayload)[]), defCallback?: (changedMap: Record<string, unknown>) => void) => () => void;
2488
- }
2489
- /** Detect platform from a component instance */
2490
- declare const getPlatform: (comp: unknown) => Platform | undefined;
2491
- declare const extendApis: {
2492
- lazySet: typeof lazySet;
2493
- shallowSet: typeof shallowSet;
2494
- computed: typeof computed;
2495
- };
2496
- /** Inner store type available inside defineStore creator */
2497
- type InnerStore<S = Record<string, unknown>> = S & StoreMethods;
2498
- declare function defineStore<S = Record<string, unknown>>(name: string, creator: (store: InnerStore<S>, apis: typeof extendApis) => S, config?: StoreConfig & {
2499
- platform: Platform.Lark;
2500
- }): LarkUseStore<S>;
2501
- declare function defineStore<S = Record<string, unknown>>(name: string, creator: (store: InnerStore<S>, apis: typeof extendApis) => S, config?: StoreConfig & {
2502
- platform: Platform.React;
2503
- }): ReactUseStore<S>;
2504
- declare function defineStore<S = Record<string, unknown>>(name: string, creator: (store: InnerStore<S>, apis: typeof extendApis) => S, config?: StoreConfig & {
2505
- platform: Platform.Node;
2506
- }): NodeUseStore<S>;
2507
- declare function getStore(name: string): BaseStore | undefined;
2508
- declare function delStore(name: string): void;
2509
- declare function getUseStore(name: string): AnyFunc | undefined;
2510
- declare function cloneStore(name: string, useStore: AnyFunc, config?: StoreConfig): unknown;
2511
- declare function isStoreActive(name: string): boolean;
2512
- declare function cell<T = unknown>(data: T): T;
2513
- declare function observeCell(state: Record<string, unknown>, cb: AnyFunc, immediate?: boolean): () => void;
2514
- declare function multi<S = Record<string, unknown>>(useStore: LarkUseStore<S>): [LarkUseStore<S>, {
2515
- make: AnyFunc;
2516
- }];
2408
+ declare function create<T>(name: string, creator: StateCreator<T>): StoreApi<T>;
2409
+ /**
2410
+ * Bind a store to a Lark View. Subscribes to state changes and auto-unsubscribes
2411
+ * when the view is destroyed.
2412
+ *
2413
+ * @param view - Lark View instance (must have updater.set/digest and on("destroy"))
2414
+ * @param store - Store created via `create()`
2415
+ * @param selector - Optional function to pick a subset of state for the updater.
2416
+ * If omitted, only non-function state keys are forwarded.
2417
+ * @returns unsubscribe function
2418
+ *
2419
+ * @example
2420
+ * ```ts
2421
+ * // Observe all state
2422
+ * bindStore(this, useCountStore);
2423
+ *
2424
+ * // Observe with selector
2425
+ * bindStore(this, useCountStore, (s) => ({ count: s.count }));
2426
+ * ```
2427
+ */
2428
+ declare function bindStore<T extends Record<string, unknown>>(view: unknown, store: StoreApi<T>, selector?: (state: T) => Record<string, unknown>): () => void;
2429
+ /**
2430
+ * @deprecated Use `create()` instead. This is a temporary alias.
2431
+ */
2432
+ declare const defineStore: typeof create;
2517
2433
 
2518
2434
  /** Serialized view info attached to a frame node */
2519
2435
  interface SerializedViewInfo {
@@ -2533,6 +2449,14 @@ interface SerializedViewInfo {
2533
2449
  };
2534
2450
  /** Whether view has a template function */
2535
2451
  hasTemplate: boolean;
2452
+ /** Delegated event types (keys from $evtObjMap) */
2453
+ eventMethodKeys: string[];
2454
+ /** Captured resource keys */
2455
+ resourceKeys: string[];
2456
+ /** Whether view exposes an assign method (supports CrossSite reuse) */
2457
+ hasAssign: boolean;
2458
+ /** Updater refData snapshot (shallow copy of current data) */
2459
+ updaterData: Record<string, unknown> | null;
2536
2460
  }
2537
2461
  /** A single node in the serialized frame tree */
2538
2462
  interface SerializedFrameNode {
@@ -2654,4 +2578,4 @@ declare function compileTemplate(source: string, options?: CompileOptions): stri
2654
2578
  */
2655
2579
  declare function extractGlobalVars(source: string): string[];
2656
2580
 
2657
- export { type AnyFunc, CALL_BREAK_TIME, Cache, type CacheEntry, type CacheInterface, type CacheOptions, type ChangeEvent, type CompileOptions, CrossSite, type CrossSiteConfig, EVENT_METHOD_REGEXP, EventDelegator, EventEmitter, type EventEmitterInterface, type EventListenerEntry, Frame, type FrameBoundElement, type FrameInterface, type FrameInvokeEntry, type FrameStaticEvent, FrameVisualBridge, Framework, type FrameworkConfig, type FrameworkInterface, LARK_VIEW, type LarkUseStore, type Location, type LocationDiff, type MixinEventHandler, type NodeUseStore, type ObservePayload, type ParamDiff, type ParsedUri, Payload, type PayloadEntry, type PayloadInterface, type PendingCacheEntry, Platform, RouterEvents as ROUTER_EVENTS, type ReactUseStore, type RouteChangeEvent, type RouteChangedEvent, type RouteViewConfig, Router, type RouterInterface, SPLITTER, type SerializedFrameNode, type SerializedFrameTree, type SerializedViewInfo, Service, type ServiceCacheInfo, type ServiceEntry, type ServiceEvent, type ServiceInterface, type ServiceMetaEntry, type ServiceOptions, State, type StateInterface, type StoreConfig, type StoreMethods, TAG_NAME_REGEXP, Updater, type UpdaterInterface, type VDomOp, type VDomRef, VIEW_EVENT_METHOD_REGEXP, type VdomElement, View, type ViewEvent, type ViewEventSelectorEntry, type ViewGlobalEventEntry, type ViewInterface, type ViewLocationObserved, type ViewObserveLocation, type ViewResourceEntry, type ViewTemplate, type VoidFunc, applyIdUpdates, applyStyle, applyVdomOps, assign, cell, cloneData, cloneStore, compileTemplate, computed, createState, createVdomRef, defineStore, defineView, delStore, encodeHTML, encodeQ, encodeSafe, encodeURIExtra, ensureElementId, extractGlobalVars, config as frameworkConfig, funcWithTry, generateId, getAttribute, getById, getPlatform, getStore, getUseStore, hasOwnProperty, installFrameVisualizerBridge, invalidateViewClass, isPlainObject, isPrimitive, isPrimitiveOrFunc, isState, isStoreActive, keys, lazySet, mark$1 as mark, markBooted, markRouterBooted, multi, nextCounter, nodeInside, noop, now, observeCell, parseUri, registerViewClass, resetProjectsMap, safeguard, serializeFrameTree, setData, shallowSet, mark as storeMark, unmark as storeUnmark, syncCounter, toMap, toUri, translateData, unmark$1 as unmark, use, vdomGetCompareKey, vdomGetNode, vdomSetAttributes, vdomSetChildNodes, vdomSetNode, vdomSpecialDiff, vdomUnmountFrames };
2581
+ export { type AnyFunc, CALL_BREAK_TIME, Cache, type CacheEntry, type CacheInterface, type CacheOptions, type ChangeEvent, type CompileOptions, CrossSite, type CrossSiteConfig, EVENT_METHOD_REGEXP, EventDelegator, EventEmitter, type EventEmitterInterface, type EventListenerEntry, Frame, type FrameBoundElement, type FrameInterface, type FrameInvokeEntry, type FrameStaticEvent, FrameVisualBridge, Framework, type FrameworkConfig, type FrameworkInterface, LARK_VIEW, type Location, type LocationDiff, type MixinEventHandler, type ParamDiff, type ParsedUri, Payload, type PayloadEntry, type PayloadInterface, type PendingCacheEntry, RouterEvents as ROUTER_EVENTS, type RouteChangeEvent, type RouteChangedEvent, type RouteViewConfig, Router, type RouterInterface, SPLITTER, type SerializedFrameNode, type SerializedFrameTree, type SerializedViewInfo, Service, type ServiceCacheInfo, type ServiceEntry, type ServiceEvent, type ServiceInterface, type ServiceMetaEntry, type ServiceOptions, State, type StateInterface, type StoreApi, TAG_NAME_REGEXP, Updater, type UpdaterInterface, type VDomOp, type VDomRef, VIEW_EVENT_METHOD_REGEXP, type VdomElement, View, type ViewEvent, type ViewEventSelectorEntry, type ViewGlobalEventEntry, type ViewInterface, type ViewLocationObserved, type ViewObserveLocation, type ViewResourceEntry, type ViewTemplate, type VoidFunc, applyIdUpdates, applyStyle, applyVdomOps, assign, bindStore, compileTemplate, computed, create, createVdomRef, defineStore, defineView, encodeHTML, encodeQ, encodeSafe, encodeURIExtra, ensureElementId, extractGlobalVars, config as frameworkConfig, funcWithTry, generateId, getAttribute, getById, getRouteMode, hasOwnProperty, installFrameVisualizerBridge, invalidateViewClass, isPlainObject, isPrimitive, isPrimitiveOrFunc, keys, mark, markBooted, markRouterBooted, nextCounter, nodeInside, noop, now, parseUri, registerViewClass, resetProjectsMap, safeguard, serializeFrameTree, setData, syncCounter, toMap, toUri, translateData, unmark, use, useUrlState, vdomGetCompareKey, vdomGetNode, vdomSetAttributes, vdomSetChildNodes, vdomSetNode, vdomSpecialDiff, vdomUnmountFrames };