@finesoft/front 0.3.0 → 0.4.1
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/browser-BIetJHp_.mjs +2 -0
- package/dist/{server-data-HVSgxEac.d.mts → browser-DMw76sEo.d.mts} +470 -11
- package/dist/browser.d.mts +2 -2
- package/dist/browser.mjs +1 -1
- package/dist/index.d.mts +11 -2
- package/dist/index.mjs +22 -22
- package/docs/04-rendering-and-hydration.md +76 -9
- package/docs/09-server-and-deployment.md +57 -57
- package/docs/11-navigation.md +13 -13
- package/docs/12-session-restoration.md +219 -0
- package/docs/zh/04-rendering-and-hydration.md +76 -9
- package/docs/zh/09-server-and-deployment.md +57 -57
- package/docs/zh/11-navigation.md +13 -13
- package/docs/zh/12-session-restoration.md +219 -0
- package/package.json +3 -3
- package/dist/src-BI4eMjHk.mjs +0 -2
|
@@ -1274,6 +1274,25 @@ declare function isStackNode(node: NavigationNode): node is StackNode;
|
|
|
1274
1274
|
declare function isTabsNode(node: NavigationNode): node is TabsNode;
|
|
1275
1275
|
declare function isSplitNode(node: NavigationNode): node is SplitNode;
|
|
1276
1276
|
//#endregion
|
|
1277
|
+
//#region ../core/src/navigation/islands.d.ts
|
|
1278
|
+
/** 交给挂载/渲染原语的单条目解析结果。 */
|
|
1279
|
+
interface ResolvedEntry {
|
|
1280
|
+
readonly intent: string;
|
|
1281
|
+
readonly params: RouteParams;
|
|
1282
|
+
readonly entryKey: string;
|
|
1283
|
+
readonly page: BasePage;
|
|
1284
|
+
/**
|
|
1285
|
+
* SSR 水合提示:true = 该条目的容器已含服务端渲染标记,挂载原语应**水合**(如 Vue
|
|
1286
|
+
* `createSSRApp().mount()`)而非新建(`createApp().mount()`)。缺省 false(新建)。
|
|
1287
|
+
*/
|
|
1288
|
+
readonly hydrate?: boolean;
|
|
1289
|
+
}
|
|
1290
|
+
/**
|
|
1291
|
+
* island 容器的标记属性 —— 客户端 orchestrator 与服务端 helper 的单一来源。
|
|
1292
|
+
* `data-fs-entry`(标识容器)、`data-fs-intent`、`data-fs-key`(水合按它匹配)。
|
|
1293
|
+
*/
|
|
1294
|
+
declare function islandContainerAttributes(intent: string, entryKey: string): Record<string, string>;
|
|
1295
|
+
//#endregion
|
|
1277
1296
|
//#region ../core/src/navigation/operations.d.ts
|
|
1278
1297
|
/**
|
|
1279
1298
|
* 解析「激活路径」:从根沿可见分支一路向下,直到叶子或无法继续。
|
|
@@ -1301,6 +1320,12 @@ declare function findNearestStack(tree: NavigationNode, path: NavigationPath): N
|
|
|
1301
1320
|
* - split → 每个有内容的列的可见目标,按列序拼接
|
|
1302
1321
|
*/
|
|
1303
1322
|
declare function collectVisibleDestinations(tree: NavigationNode): readonly LeafNode[];
|
|
1323
|
+
/**
|
|
1324
|
+
* 收集树中**全部存在**的叶子(含不可见:栈非顶 entry、未激活 tab 分支、所有非空 split 列)。
|
|
1325
|
+
* 区别于 `collectVisibleDestinations`(只沿可见分支)—— 保活 / 缓存 prune / 作用域保留需要
|
|
1326
|
+
* 全部 present 条目。顺序:栈按序、tabs 按 `Object.values(branches)` 序、split 按列序。
|
|
1327
|
+
*/
|
|
1328
|
+
declare function collectAllLeaves(tree: NavigationNode): readonly LeafNode[];
|
|
1304
1329
|
/**
|
|
1305
1330
|
* 按 `visibility` 求出一个 split 节点当前**可见**的列(不裁剪空内容列——空 content 由调用方处理)。
|
|
1306
1331
|
*
|
|
@@ -1427,6 +1452,17 @@ interface FullStateCodecOptions {
|
|
|
1427
1452
|
* - `decode`:读取保留参数无损还原整棵树;缺失该参数时返回 `undefined`(交由调用方走默认路径)。
|
|
1428
1453
|
*/
|
|
1429
1454
|
declare function createFullStateCodec(options?: FullStateCodecOptions): NavigationCodec;
|
|
1455
|
+
/**
|
|
1456
|
+
* 扁平栈 codec —— flat-islands 用:URL ↔ 单叶栈。
|
|
1457
|
+
*
|
|
1458
|
+
* - `decode(url, router)`:同步把 URL 匹配成单叶意图,返回 `stack([leaf(intent, params)])`;
|
|
1459
|
+
* 不可路由时返回 `undefined`(调用方保留当前树,与 createActiveLeafCodec 约定一致)。
|
|
1460
|
+
* - `encode(tree, router)`:取激活叶子(activeLeaf)的 intent + params 反查 URL;
|
|
1461
|
+
* 无对应路由时回退 `"/"`。
|
|
1462
|
+
*
|
|
1463
|
+
* 全部复用本模块已有 helper:`parseRouteSummaries`、`parseUrlParts`、`reverseUrl`、`activeLeaf`。
|
|
1464
|
+
*/
|
|
1465
|
+
declare function createFlatStackCodec(): NavigationCodec;
|
|
1430
1466
|
//#endregion
|
|
1431
1467
|
//#region ../core/src/navigation/controller.d.ts
|
|
1432
1468
|
/** 导航操作 Kind 常量 */
|
|
@@ -1590,6 +1626,13 @@ interface NavigationController {
|
|
|
1590
1626
|
setVisibility(visibility: SplitVisibility, target?: NavigationPath): Promise<NavigationSnapshot>;
|
|
1591
1627
|
/** 用外部树替换当前树并重解析(history/URL 还原)。 */
|
|
1592
1628
|
hydrate(tree: NavigationNode): Promise<NavigationSnapshot>;
|
|
1629
|
+
/**
|
|
1630
|
+
* 清除页面缓存:给 `entryKey`(= `sessionEntryKey(intent, params)`)清单个,
|
|
1631
|
+
* 不传清全部。仅清缓存、不触发重解析——该条目下次被解析时重新 dispatch。
|
|
1632
|
+
*/
|
|
1633
|
+
invalidate(entryKey?: string): void;
|
|
1634
|
+
/** 清当前激活叶子的缓存并重解析当前树(「下拉刷新」式:守卫跑、数据重 fetch)。 */
|
|
1635
|
+
refresh(): Promise<NavigationSnapshot>;
|
|
1593
1636
|
/** 订阅快照变更;返回取消订阅函数。 */
|
|
1594
1637
|
subscribe(listener: (snapshot: NavigationSnapshot) => void): () => void;
|
|
1595
1638
|
/** 解析当前树(首屏 SSR/CSR),提交并返回快照。 */
|
|
@@ -1779,6 +1822,218 @@ interface DefineRoutesOptions {
|
|
|
1779
1822
|
*/
|
|
1780
1823
|
declare function defineRoutes(framework: Framework, definitions: RouteDefinition[], options?: DefineRoutesOptions): void;
|
|
1781
1824
|
//#endregion
|
|
1825
|
+
//#region ../core/src/session/types.d.ts
|
|
1826
|
+
/** 会话快照在 Storage 中的默认键。 */
|
|
1827
|
+
declare const SESSION_DEFAULT_KEY = "__finesoft_session__";
|
|
1828
|
+
/** 会话快照的默认版本号;解码时不匹配即整份丢弃。 */
|
|
1829
|
+
declare const SESSION_DEFAULT_VERSION = 1;
|
|
1830
|
+
/** 扁平单页的导航位置:一个 URL(区别于结构化树的 `SerializedNavigation`)。 */
|
|
1831
|
+
interface SessionUrlLocation {
|
|
1832
|
+
readonly url: string;
|
|
1833
|
+
}
|
|
1834
|
+
/**
|
|
1835
|
+
* 会话快照:用户「当时在干什么」的可序列化捕获。
|
|
1836
|
+
*
|
|
1837
|
+
* `navigation` 用一个轻判别区分两种导航形态:`SerializedNavigation` 自带 `kind`
|
|
1838
|
+
* (leaf/stack/tabs/split),`SessionUrlLocation` 用独有的 `url` 字段(见 `isUrlLocation`)。
|
|
1839
|
+
*/
|
|
1840
|
+
interface SessionSnapshot {
|
|
1841
|
+
/** 快照版本;解码时与期望版本不符即丢弃。 */
|
|
1842
|
+
readonly version: number;
|
|
1843
|
+
/** 导航位置:结构化 → `SerializedNavigation`;扁平 → `SessionUrlLocation`;缺省 → 不恢复导航。 */
|
|
1844
|
+
readonly navigation?: SerializedNavigation | SessionUrlLocation;
|
|
1845
|
+
/**
|
|
1846
|
+
* 该快照导航位置的可比 URL(捕获时刻与 history 同步的浏览器 URL),供恢复门控做精确匹配。
|
|
1847
|
+
*
|
|
1848
|
+
* 扁平与结构化适配器均可在 `capture` 时记录(见 `SessionNavigationAdapter.captureUrl`)。
|
|
1849
|
+
* 缺省时(旧快照 / 适配器不提供)门控回退到旧策略:扁平比 `nav.url`、结构化只在根放行。
|
|
1850
|
+
* 它让结构化导航也能像扁平一样「重载同深链即恢复、改去别的深链则跳过」(对称)。
|
|
1851
|
+
*/
|
|
1852
|
+
readonly url?: string;
|
|
1853
|
+
/** 全局切片(app-wide):`provider.key` → 该 provider `capture()` 的 JSON 值。 */
|
|
1854
|
+
readonly slices: Readonly<Record<string, unknown>>;
|
|
1855
|
+
/** 导航作用域状态:`entryKey` → 该导航条目的状态袋;条目离树即被 prune 丢弃。 */
|
|
1856
|
+
readonly scoped: Readonly<Record<string, unknown>>;
|
|
1857
|
+
/** 捕获时刻(epoch ms);用于 `maxAgeMs` 过期判断。 */
|
|
1858
|
+
readonly capturedAt: number;
|
|
1859
|
+
}
|
|
1860
|
+
/**
|
|
1861
|
+
* 判别 `navigation` 是否为扁平 URL 位置。
|
|
1862
|
+
*
|
|
1863
|
+
* `SerializedNavigation` 始终带 `kind`、从不带 `url` 字段,故 `url` 是无歧义判别位。
|
|
1864
|
+
*/
|
|
1865
|
+
declare function isUrlLocation(nav: SessionSnapshot["navigation"]): nav is SessionUrlLocation;
|
|
1866
|
+
/**
|
|
1867
|
+
* 全局状态切片 Provider。
|
|
1868
|
+
*
|
|
1869
|
+
* 同步、JSON 安全。框架不解释切片内容 —— 它只搬运。应用控制捕获什么
|
|
1870
|
+
* (敏感字段在 `capture()` 中自行排除)。
|
|
1871
|
+
*/
|
|
1872
|
+
interface SessionStateProvider<T = unknown> {
|
|
1873
|
+
/** 切片唯一键(快照里 `slices` 的 key)。 */
|
|
1874
|
+
readonly key: string;
|
|
1875
|
+
/** 捕获当前切片状态,必须返回 JSON 安全的同步值。 */
|
|
1876
|
+
capture(): T;
|
|
1877
|
+
/** 用持久化的切片数据恢复(应用自行 setState / 填表单 / 滚动)。 */
|
|
1878
|
+
restore(data: T): void;
|
|
1879
|
+
}
|
|
1880
|
+
/**
|
|
1881
|
+
* 导航作用域状态:`entryKey` → 状态袋;条目离树由框架 prune 丢弃(见 `scoped-state.ts`)。
|
|
1882
|
+
*/
|
|
1883
|
+
interface NavigationScopedState {
|
|
1884
|
+
/** 读取某条目的状态袋(不存在返回 `undefined`,`unknown` 已含此情形)。 */
|
|
1885
|
+
get(entryKey: string): unknown;
|
|
1886
|
+
/** 写入某条目的状态袋。 */
|
|
1887
|
+
set(entryKey: string, data: unknown): void;
|
|
1888
|
+
/** 删除某条目的状态袋。 */
|
|
1889
|
+
delete(entryKey: string): void;
|
|
1890
|
+
/** 仅保留 `presentKeys` 中的键,丢弃其余(导航提交后由 bridge 调用)。 */
|
|
1891
|
+
prune(presentKeys: Iterable<string>): void;
|
|
1892
|
+
/** 当前持有状态的全部条目键。 */
|
|
1893
|
+
keys(): readonly string[];
|
|
1894
|
+
}
|
|
1895
|
+
/**
|
|
1896
|
+
* 导航适配器:SessionStore 与具体导航机制(结构化 controller / 扁平 URL)解耦的接缝。
|
|
1897
|
+
*
|
|
1898
|
+
* SessionStore 不直接依赖 `NavigationController`,core 不产生 nav → session 的反向耦合;
|
|
1899
|
+
* 扁平与结构化导航经此同一套机制覆盖(见 `navigation-adapter.ts`)。
|
|
1900
|
+
*/
|
|
1901
|
+
interface SessionNavigationAdapter {
|
|
1902
|
+
/** 捕获当前导航位置。 */
|
|
1903
|
+
capture(): SessionSnapshot["navigation"] | undefined;
|
|
1904
|
+
/** 应用恢复的导航位置。 */
|
|
1905
|
+
apply(navigation: SessionSnapshot["navigation"]): void | Promise<void>;
|
|
1906
|
+
/**
|
|
1907
|
+
* 可选:计算当前导航位置的可比 URL,写入 `SessionSnapshot.url` 供恢复门控精确匹配。
|
|
1908
|
+
*
|
|
1909
|
+
* 浏览器侧适配器返回当时的 `location`(pushState 后与导航树同步);返回 `undefined`
|
|
1910
|
+
* 或不实现 = 快照不带 `url`,门控回退旧策略(见 `defaultShouldRestore`)。
|
|
1911
|
+
*/
|
|
1912
|
+
captureUrl?(): string | undefined;
|
|
1913
|
+
/** 树中**存在**的全部条目身份键(用于 scoped prune;「存在」非「可见」)。 */
|
|
1914
|
+
presentKeys(): Iterable<string>;
|
|
1915
|
+
}
|
|
1916
|
+
/** 会话错误上下文:标记出错所处阶段,供 `onError` 上报。 */
|
|
1917
|
+
interface SessionErrorContext {
|
|
1918
|
+
readonly phase: "capture" | "restore" | "persist" | "load";
|
|
1919
|
+
readonly key?: string;
|
|
1920
|
+
}
|
|
1921
|
+
/** `createSessionStore` 选项。 */
|
|
1922
|
+
interface SessionStoreOptions {
|
|
1923
|
+
/** 持久化存储(`DEP_KEYS.STORAGE`)。 */
|
|
1924
|
+
readonly storage: Storage;
|
|
1925
|
+
/** 快照键;默认 `SESSION_DEFAULT_KEY`。 */
|
|
1926
|
+
readonly key?: string;
|
|
1927
|
+
/** 快照版本;默认 `SESSION_DEFAULT_VERSION`,不符即丢弃。 */
|
|
1928
|
+
readonly version?: number;
|
|
1929
|
+
/** 快照最大存活时长(ms);省略 = 不过期。 */
|
|
1930
|
+
readonly maxAgeMs?: number;
|
|
1931
|
+
/** 导航适配器;省略 = 不恢复导航。 */
|
|
1932
|
+
readonly navigation?: SessionNavigationAdapter;
|
|
1933
|
+
/** 注入时钟(测试 / SSR 安全);默认 `() => Date.now()`。 */
|
|
1934
|
+
readonly now?: () => number;
|
|
1935
|
+
/** 错误回调;默认 no-op,应用可接 EventRecorder。 */
|
|
1936
|
+
readonly onError?: (error: unknown, ctx: SessionErrorContext) => void;
|
|
1937
|
+
}
|
|
1938
|
+
/** 会话编排器:组装 / 落盘 / 读取 / 恢复快照,并持有导航作用域状态。 */
|
|
1939
|
+
interface SessionStore {
|
|
1940
|
+
/** 注册全局切片 provider;返回反注册函数。 */
|
|
1941
|
+
register(provider: SessionStateProvider): () => void;
|
|
1942
|
+
/** 导航作用域状态读写 + prune。 */
|
|
1943
|
+
readonly scope: NavigationScopedState;
|
|
1944
|
+
/** 组装当前快照(nav + slices + scoped),不落盘。 */
|
|
1945
|
+
capture(): SessionSnapshot;
|
|
1946
|
+
/** 落盘(省略参数则先 `capture`)。 */
|
|
1947
|
+
persist(snapshot?: SessionSnapshot): void;
|
|
1948
|
+
/** 从 Storage 读取并校验(version / maxAge / 畸形 → `undefined`)。 */
|
|
1949
|
+
load(): SessionSnapshot | undefined;
|
|
1950
|
+
/** 恢复:应用 nav + 回填 scoped + 派发各 slice 给对应 provider(省略则先 `load`)。 */
|
|
1951
|
+
restore(snapshot?: SessionSnapshot): void | Promise<void>;
|
|
1952
|
+
/** 清除持久化快照。 */
|
|
1953
|
+
clear(): void;
|
|
1954
|
+
/** 手动逃生口 = `capture` + `persist`。 */
|
|
1955
|
+
save(): void;
|
|
1956
|
+
}
|
|
1957
|
+
/** 会话错误:序列化 / 编排过程中需要显式标识的错误类型。 */
|
|
1958
|
+
declare class SessionError extends Error {
|
|
1959
|
+
constructor(message: string);
|
|
1960
|
+
}
|
|
1961
|
+
//#endregion
|
|
1962
|
+
//#region ../core/src/session/snapshot.d.ts
|
|
1963
|
+
/** 把快照编码为确定性字符串(keys 排序),用作 `storage.set` 的值。 */
|
|
1964
|
+
declare function encodeSnapshot(snapshot: SessionSnapshot): string;
|
|
1965
|
+
/**
|
|
1966
|
+
* 解码并校验快照。
|
|
1967
|
+
*
|
|
1968
|
+
* 校验:`version === expectedVersion`、`slices`/`scoped` 为对象、`capturedAt` 为数值;
|
|
1969
|
+
* `navigation` 可缺省。任一不符或解析失败 → `undefined`(永不抛)。
|
|
1970
|
+
*/
|
|
1971
|
+
declare function decodeSnapshot(raw: string | undefined, expectedVersion: number): SessionSnapshot | undefined;
|
|
1972
|
+
//#endregion
|
|
1973
|
+
//#region ../core/src/session/scoped-state.d.ts
|
|
1974
|
+
/**
|
|
1975
|
+
* 导航条目身份键:`intent + " " + stableStringify(params)`。
|
|
1976
|
+
*
|
|
1977
|
+
* 与 controller 的目标键同源、跨重载稳定(`stableStringify` 对 params 键排序,
|
|
1978
|
+
* 故 `{a,b}` 与 `{b,a}` 产出同一键)。
|
|
1979
|
+
*/
|
|
1980
|
+
declare function sessionEntryKey(intent: string, params: RouteParams): string;
|
|
1981
|
+
/**
|
|
1982
|
+
* 收集导航树中**全部 leaf** 的身份键(含不可见 / 未激活分支 / 各 split 列)。
|
|
1983
|
+
* 委派给 `collectAllLeaves`(同一「全部存在」遍历),映射成 entryKey。
|
|
1984
|
+
* 「全部存在」而非「可见」,用于 scoped 状态保留。
|
|
1985
|
+
*/
|
|
1986
|
+
declare function collectLeafKeys(tree: NavigationNode): string[];
|
|
1987
|
+
/**
|
|
1988
|
+
* 创建导航作用域状态容器。
|
|
1989
|
+
*
|
|
1990
|
+
* 内部持一个 `Map`;`prune` 由 `presentKeys` 构造 `Set`,删除不在其中的全部键。
|
|
1991
|
+
* `initial` 在构造时浅拷贝进 `Map`,构造后改动源对象不会泄漏进容器。
|
|
1992
|
+
*/
|
|
1993
|
+
declare function createNavigationScopedState(initial?: Record<string, unknown>): NavigationScopedState;
|
|
1994
|
+
//#endregion
|
|
1995
|
+
//#region ../core/src/session/session-store.d.ts
|
|
1996
|
+
/**
|
|
1997
|
+
* 创建会话编排器。
|
|
1998
|
+
*
|
|
1999
|
+
* `scope` 是一个 `createNavigationScopedState()` 实例,由 store 持有;`restore` 用快照
|
|
2000
|
+
* 的 `scoped` 重建其内容。时钟 `now` 注入(默认 `() => Date.now()`),`capturedAt` 由它产出。
|
|
2001
|
+
*/
|
|
2002
|
+
declare function createSessionStore(options: SessionStoreOptions): SessionStore;
|
|
2003
|
+
//#endregion
|
|
2004
|
+
//#region ../core/src/session/navigation-adapter.d.ts
|
|
2005
|
+
/**
|
|
2006
|
+
* 结构化导航适配器:把 `NavigationController` 接到会话编排器。
|
|
2007
|
+
*
|
|
2008
|
+
* `apply` 仅处理 `SerializedNavigation`;`SessionUrlLocation` 与 `undefined` 一律 no-op
|
|
2009
|
+
* (结构化应用始终捕获一棵树,不会落到 URL 形态)。
|
|
2010
|
+
*
|
|
2011
|
+
* `currentUrl`(可选):捕获时刻读取的浏览器 URL(pushState 后与导航树同步),写入快照
|
|
2012
|
+
* `url` 字段供恢复门控精确匹配 —— 让结构化导航也能像扁平一样「重载同深链即恢复、改去别的
|
|
2013
|
+
* 深链则跳过」。省略时快照不带 `url`,门控回退到「只在根放行」的旧策略。
|
|
2014
|
+
*/
|
|
2015
|
+
declare function createNavigationSessionAdapter(controller: NavigationController, currentUrl?: () => string): SessionNavigationAdapter;
|
|
2016
|
+
/** `createUrlSessionAdapter` 选项(扁平单页)。 */
|
|
2017
|
+
interface UrlAdapterOptions {
|
|
2018
|
+
/** 读取当前 URL(如 `() => location.pathname + location.search`)。 */
|
|
2019
|
+
readonly currentUrl: () => string;
|
|
2020
|
+
/** 应用恢复的 URL(应用提供,如 `framework.perform(makeFlowAction(url))`)。 */
|
|
2021
|
+
readonly navigate: (url: string) => void | Promise<void>;
|
|
2022
|
+
/** 可选:当前屏的 intent + params,用于 `presentKeys` 产出稳定身份键。 */
|
|
2023
|
+
readonly currentIntent?: () => {
|
|
2024
|
+
intent: string;
|
|
2025
|
+
params: RouteParams;
|
|
2026
|
+
};
|
|
2027
|
+
}
|
|
2028
|
+
/**
|
|
2029
|
+
* 扁平 URL 适配器:把单页 URL 接到会话编排器。
|
|
2030
|
+
*
|
|
2031
|
+
* `apply` 仅处理 `SessionUrlLocation`;`SerializedNavigation` 与 `undefined` 一律 no-op
|
|
2032
|
+
* (扁平只认 URL 形态)。`presentKeys` 恒为单条目:有 `currentIntent` 时用
|
|
2033
|
+
* `sessionEntryKey(intent, params)`,否则退化为当前 URL 字符串。
|
|
2034
|
+
*/
|
|
2035
|
+
declare function createUrlSessionAdapter(opts: UrlAdapterOptions): SessionNavigationAdapter;
|
|
2036
|
+
//#endregion
|
|
1782
2037
|
//#region ../core/src/utils/lru-map.d.ts
|
|
1783
2038
|
/**
|
|
1784
2039
|
* LruMap — 固定容量的 LRU 缓存
|
|
@@ -2053,6 +2308,12 @@ interface FlowActionDependencies {
|
|
|
2053
2308
|
* 仍负责 dispatch + updateApp(初始渲染 / redirect / modal),只是不碰 history。
|
|
2054
2309
|
*/
|
|
2055
2310
|
manageHistory?: boolean;
|
|
2311
|
+
/**
|
|
2312
|
+
* flat-islands 正向导航钩子(可选)。提供后,正向 FlowAction(非 modal)会调用此函数
|
|
2313
|
+
* 并 return,**绕过** navigateTo / updateApp。由 activateFlatIslands 注入,把 URL
|
|
2314
|
+
* 路由到隐式单栈 `NavigationController.push`。未提供时行为与今天扁平路径字节级相同。
|
|
2315
|
+
*/
|
|
2316
|
+
onForward?: (url: string) => void | Promise<void>;
|
|
2056
2317
|
}
|
|
2057
2318
|
declare function registerFlowActionHandler(deps: FlowActionDependencies): void;
|
|
2058
2319
|
//#endregion
|
|
@@ -2069,6 +2330,8 @@ interface ActionHandlerDependencies {
|
|
|
2069
2330
|
getScrollablePageElement?: () => HTMLElement | null;
|
|
2070
2331
|
/** 是否由 FlowAction handler 管理 history;结构化导航下传 `false`(见 registerFlowActionHandler)。 */
|
|
2071
2332
|
manageHistory?: boolean;
|
|
2333
|
+
/** flat-islands 正向导航钩子(透传给 registerFlowActionHandler)。 */
|
|
2334
|
+
onForward?: (url: string) => void | Promise<void>;
|
|
2072
2335
|
}
|
|
2073
2336
|
declare function registerActionHandlers(deps: ActionHandlerDependencies): void;
|
|
2074
2337
|
//#endregion
|
|
@@ -2123,6 +2386,108 @@ interface NavigationHandle {
|
|
|
2123
2386
|
*/
|
|
2124
2387
|
declare function createNavigationBridge(deps: NavigationBridgeDependencies): NavigationHandle;
|
|
2125
2388
|
//#endregion
|
|
2389
|
+
//#region ../browser/src/session-bridge.d.ts
|
|
2390
|
+
/** 导航变更后自动落盘的默认防抖窗口(ms):合并连续导航,避免每跳一屏写一次。 */
|
|
2391
|
+
declare const SESSION_DEFAULT_DEBOUNCE_MS = 500;
|
|
2392
|
+
/** `createSessionBridge` 选项。 */
|
|
2393
|
+
interface SessionBridgeOptions {
|
|
2394
|
+
/** 会话编排器(core)。 */
|
|
2395
|
+
readonly store: SessionStore;
|
|
2396
|
+
/** 导航适配器;导航变更时用其 `presentKeys()` 驱动 scoped prune。 */
|
|
2397
|
+
readonly adapter: SessionNavigationAdapter;
|
|
2398
|
+
/** 订阅导航变更;返回反订阅函数。省略 = 不自动捕获(仅靠生命周期事件 + 手动 `save`)。 */
|
|
2399
|
+
readonly subscribeNavigation?: (onChange: () => void) => () => void;
|
|
2400
|
+
/** 自动落盘防抖窗口(ms);默认 `SESSION_DEFAULT_DEBOUNCE_MS`。 */
|
|
2401
|
+
readonly debounceMs?: number;
|
|
2402
|
+
/** 恢复门控;默认 `defaultShouldRestore`(显式深链优先,见其文档)。 */
|
|
2403
|
+
readonly shouldRestore?: (snapshot: SessionSnapshot, currentUrl: string) => boolean;
|
|
2404
|
+
}
|
|
2405
|
+
/** SessionBridge 对外句柄:导航作用域读写 + boot 恢复 + 手动逃生口 + 解绑。 */
|
|
2406
|
+
interface SessionHandle {
|
|
2407
|
+
/**
|
|
2408
|
+
* 导航作用域状态(每屏 per-entry)。应用渲染某屏时用 `scope.get(entryKey)` /
|
|
2409
|
+
* `set(entryKey, data)` 读写(`entryKey = sessionEntryKey(intent, params)`)。
|
|
2410
|
+
* 始终委托当前 store 的 scope —— restore 会重建 scope map,经此 getter 取到的恒是最新实例。
|
|
2411
|
+
*/
|
|
2412
|
+
readonly scope: NavigationScopedState;
|
|
2413
|
+
/** boot 时调用:读快照,通过门控则整体恢复(nav + slices + scoped)。 */
|
|
2414
|
+
restore(currentUrl: string): void | Promise<void>;
|
|
2415
|
+
/** 手动落盘(= `store.save()`)。 */
|
|
2416
|
+
save(): void;
|
|
2417
|
+
/** 清除持久化快照(= `store.clear()`)。 */
|
|
2418
|
+
clear(): void;
|
|
2419
|
+
/** 反订阅导航 + 解绑全部监听 + 清挂起定时器(幂等)。 */
|
|
2420
|
+
dispose(): void;
|
|
2421
|
+
}
|
|
2422
|
+
/**
|
|
2423
|
+
* 默认恢复门控策略(精确、无歧义,遵循「显式深链优先」)。
|
|
2424
|
+
*
|
|
2425
|
+
* - **带可比 URL**(快照含 `url` —— 扁平天然有,结构化由适配器在 capture 时记录浏览器
|
|
2426
|
+
* `location`):当且仅当 `currentUrl` 全等 `snapshot.url`,**或** `currentUrl` 路径为根 `/`
|
|
2427
|
+
* (重载同深链 / 全新进入 → 恢复;改去别的深链 → 跳过,显式深链不被旧会话覆盖)。
|
|
2428
|
+
* 这让结构化导航与扁平**对称**:重载 `/item/1` 即恢复其作用域状态。
|
|
2429
|
+
* - **回退(无 `url`)**:旧快照 / 适配器不提供 URL 时 —— 扁平比 `nav.url`,结构化只在根 `/`
|
|
2430
|
+
* 放行(树无单一可比 URL,门设在「入口」;要更细由应用覆盖 predicate)。
|
|
2431
|
+
* - **无 `navigation`**(仅切片):总恢复(与 URL 无关)。
|
|
2432
|
+
*
|
|
2433
|
+
* 「根」判定为路径 `=== "/"`(剥离 query/hash);带 base path 的应用应覆盖 `shouldRestore`。
|
|
2434
|
+
*/
|
|
2435
|
+
declare function defaultShouldRestore(snapshot: SessionSnapshot, currentUrl: string): boolean;
|
|
2436
|
+
/**
|
|
2437
|
+
* 创建 SessionBridge:订阅导航、装配生命周期监听、返回会话句柄。
|
|
2438
|
+
*
|
|
2439
|
+
* 调用后 bridge 已激活(已订阅导航 + 已注册 `pagehide` / `visibilitychange`)。应用应在
|
|
2440
|
+
* 首次导航完成后调一次 `restore(initialUrl)` 完成 boot 恢复。
|
|
2441
|
+
*/
|
|
2442
|
+
declare function createSessionBridge(options: SessionBridgeOptions): SessionHandle;
|
|
2443
|
+
//#endregion
|
|
2444
|
+
//#region ../browser/src/app-handle.d.ts
|
|
2445
|
+
/** 统一 app 句柄。两个子系统都配齐时成员完整;只配其一则仅含该子系统成员(另一组运行期缺席)。 */
|
|
2446
|
+
interface AppHandle {
|
|
2447
|
+
getSnapshot: NavigationHandle["getSnapshot"];
|
|
2448
|
+
subscribe: NavigationHandle["subscribe"];
|
|
2449
|
+
push: NavigationHandle["push"];
|
|
2450
|
+
pop: NavigationHandle["pop"];
|
|
2451
|
+
popToRoot: NavigationHandle["popToRoot"];
|
|
2452
|
+
replaceTop: NavigationHandle["replaceTop"];
|
|
2453
|
+
selectTab: NavigationHandle["selectTab"];
|
|
2454
|
+
selectColumn: NavigationHandle["selectColumn"];
|
|
2455
|
+
save: SessionHandle["save"];
|
|
2456
|
+
clear: SessionHandle["clear"];
|
|
2457
|
+
readonly scope: SessionHandle["scope"];
|
|
2458
|
+
}
|
|
2459
|
+
/**
|
|
2460
|
+
* 构建统一 app 句柄。`navigation`/`session` 任一缺省则其成员不并入。
|
|
2461
|
+
* 至少应有一个非空(调用方在配了 navigation 和/或 session 时才构建)。
|
|
2462
|
+
*/
|
|
2463
|
+
declare function createAppHandle(navigation: NavigationHandle | undefined, session: SessionHandle | undefined): AppHandle;
|
|
2464
|
+
//#endregion
|
|
2465
|
+
//#region ../browser/src/navigation-islands.d.ts
|
|
2466
|
+
/** `mountEntry` 返回的 island 句柄。 */
|
|
2467
|
+
interface IslandHandle {
|
|
2468
|
+
/** 销毁该 island 实例(应用用 app.unmount() / root.unmount() / comp.$destroy() 实现)。 */
|
|
2469
|
+
unmount(): void;
|
|
2470
|
+
}
|
|
2471
|
+
/** 通用挂载原语:把一个条目的视图挂进 container,返回卸载句柄。 */
|
|
2472
|
+
type MountEntry = (entry: ResolvedEntry, container: HTMLElement) => IslandHandle;
|
|
2473
|
+
/** `createIslandOrchestrator` 选项。 */
|
|
2474
|
+
interface IslandOrchestratorOptions {
|
|
2475
|
+
/** 框架在其内构建/挂载 island 容器的 outlet 元素(应用渲染、稳定、空)。 */
|
|
2476
|
+
readonly outlet: HTMLElement;
|
|
2477
|
+
/** 应用提供的挂载原语。 */
|
|
2478
|
+
readonly mountEntry: MountEntry;
|
|
2479
|
+
/** 重放调度(默认 requestAnimationFrame;测试可注入同步执行)。 */
|
|
2480
|
+
readonly schedule?: (cb: () => void) => void;
|
|
2481
|
+
}
|
|
2482
|
+
/** 编排器对外接口。 */
|
|
2483
|
+
interface IslandOrchestrator {
|
|
2484
|
+
/** 把 DOM 同步到一个导航快照(挂新/卸离树/detach 隐藏/attach 可见)。 */
|
|
2485
|
+
sync(snapshot: NavigationSnapshot): void;
|
|
2486
|
+
/** 卸载全部 island、清空 outlet。 */
|
|
2487
|
+
dispose(): void;
|
|
2488
|
+
}
|
|
2489
|
+
declare function createIslandOrchestrator(options: IslandOrchestratorOptions): IslandOrchestrator;
|
|
2490
|
+
//#endregion
|
|
2126
2491
|
//#region ../browser/src/start-app.d.ts
|
|
2127
2492
|
/**
|
|
2128
2493
|
* 结构化导航定义 —— 由应用通过 `defineNavigation(...)` 或手写提供。
|
|
@@ -2132,7 +2497,7 @@ declare function createNavigationBridge(deps: NavigationBridgeDependencies): Nav
|
|
|
2132
2497
|
* - 用 `initial` 树构建 `NavigationController`(守卫上下文走 `createBrowserContext`,
|
|
2133
2498
|
* 预取缓存复用 `framework.prefetchedIntents`);
|
|
2134
2499
|
* - 装配 `NavigationBridge`(snapshot → history/URL,popstate → hydrate);
|
|
2135
|
-
* - 解析首屏树(一次 `resolve()`),通过
|
|
2500
|
+
* - 解析首屏树(一次 `resolve()`),通过 mount context 把 handle 交给应用。
|
|
2136
2501
|
*/
|
|
2137
2502
|
interface BrowserNavigationConfig {
|
|
2138
2503
|
/** 初始导航树(单 LeafNode = 今天的扁平单页)。 */
|
|
@@ -2145,6 +2510,36 @@ interface BrowserNavigationConfig {
|
|
|
2145
2510
|
readonly afterLoad?: readonly AfterLoadGuard[];
|
|
2146
2511
|
/** dispatch 失败 / deny 时的兜底错误页工厂。 */
|
|
2147
2512
|
readonly getErrorPage?: (status: number, message: string) => BasePage;
|
|
2513
|
+
/**
|
|
2514
|
+
* opt-in islands 挂载原语:提供后框架按 per-entry 把视图挂为独立 root 并保活(见 Phase 2)。
|
|
2515
|
+
* 缺省时走原有「单 mount + 应用订阅 snapshot 重渲」路径,不变。
|
|
2516
|
+
*/
|
|
2517
|
+
readonly mountEntry?: MountEntry;
|
|
2518
|
+
}
|
|
2519
|
+
/**
|
|
2520
|
+
* 会话恢复定义(可选)。
|
|
2521
|
+
*
|
|
2522
|
+
* 仅当该字段出现时会话能力才激活;缺省时 `startBrowserApp` 启动路径字节级不变。提供后:
|
|
2523
|
+
* - 构建 `SessionStore`(导航适配器:有 `navigation` 配置 → 结构化
|
|
2524
|
+
* `createNavigationSessionAdapter(controller)`;否则 → 扁平 `createUrlSessionAdapter`
|
|
2525
|
+
* 接 `framework.perform(makeFlowAction(url))`);
|
|
2526
|
+
* - 注册 `providers` 为全局切片来源;
|
|
2527
|
+
* - 装配 `SessionBridge`(导航变更防抖落盘 + `pagehide` / `visibilitychange` 即时落盘 + scoped prune);
|
|
2528
|
+
* - mount 后 `restore(initialUrl)` 完成 boot 恢复,handle 经 mount context 交付。
|
|
2529
|
+
*/
|
|
2530
|
+
interface BrowserSessionConfig {
|
|
2531
|
+
/** 全局状态切片 provider;启动时全部注册。 */
|
|
2532
|
+
readonly providers?: readonly SessionStateProvider[];
|
|
2533
|
+
/** 快照存储;缺省 `createWebStorage("session")`(标签级,关闭即清)。 */
|
|
2534
|
+
readonly storage?: Storage;
|
|
2535
|
+
/** 快照版本;缺省 `SESSION_DEFAULT_VERSION`,不符即整份丢弃。 */
|
|
2536
|
+
readonly version?: number;
|
|
2537
|
+
/** 快照最大存活时长(ms);省略 = 不过期。 */
|
|
2538
|
+
readonly maxAgeMs?: number;
|
|
2539
|
+
/** 导航变更自动落盘防抖窗口(ms);缺省 `SESSION_DEFAULT_DEBOUNCE_MS`。 */
|
|
2540
|
+
readonly debounceMs?: number;
|
|
2541
|
+
/** 恢复门控;缺省 `defaultShouldRestore`(显式深链优先)。 */
|
|
2542
|
+
readonly shouldRestore?: (snapshot: SessionSnapshot, currentUrl: string) => boolean;
|
|
2148
2543
|
}
|
|
2149
2544
|
interface BrowserAppConfig {
|
|
2150
2545
|
/** 注册 controllers 和路由的引导函数 */
|
|
@@ -2171,11 +2566,14 @@ interface BrowserAppConfig {
|
|
|
2171
2566
|
* 框架无关 — Svelte / React / Vue 均可通过此回调实现。
|
|
2172
2567
|
*
|
|
2173
2568
|
* @param target - DOM 挂载点
|
|
2174
|
-
* @param context - Framework 实例 + 语言
|
|
2569
|
+
* @param context - Framework 实例 + 语言 + handle(配了 navigation/session 时)
|
|
2175
2570
|
* @returns 更新函数,用于后续页面切换
|
|
2176
2571
|
*/
|
|
2177
2572
|
mount: (target: HTMLElement, context: {
|
|
2178
2573
|
framework: Framework;
|
|
2574
|
+
navigation?: NavigationHandle;
|
|
2575
|
+
session?: SessionHandle;
|
|
2576
|
+
app?: AppHandle;
|
|
2179
2577
|
}) => (props: {
|
|
2180
2578
|
page: Promise<BasePage> | BasePage;
|
|
2181
2579
|
isFirstPage?: boolean;
|
|
@@ -2198,18 +2596,34 @@ interface BrowserAppConfig {
|
|
|
2198
2596
|
/**
|
|
2199
2597
|
* 结构化导航定义(可选)。
|
|
2200
2598
|
*
|
|
2201
|
-
* 提供后,`startBrowserApp`
|
|
2202
|
-
*
|
|
2203
|
-
* 扁平单页路径(FlowAction handler),行为完全不变。
|
|
2599
|
+
* 提供后,`startBrowserApp` 在 mount 前构建 NavigationController + NavigationBridge,
|
|
2600
|
+
* 并通过 mount context 把导航 handle 交给应用。缺省时走原有扁平单页路径,行为完全不变。
|
|
2204
2601
|
*/
|
|
2205
2602
|
navigation?: BrowserNavigationConfig;
|
|
2206
2603
|
/**
|
|
2207
|
-
*
|
|
2604
|
+
* 会话恢复定义(可选)。
|
|
2605
|
+
*
|
|
2606
|
+
* 提供后,`startBrowserApp` 在 mount 前装配 `SessionStore` + `SessionBridge`,
|
|
2607
|
+
* 并通过 mount context 把会话 handle 交给应用;boot 恢复(restore)在 mount 后执行。
|
|
2608
|
+
* 缺省时整段不生效,启动路径字节级不变。
|
|
2609
|
+
*/
|
|
2610
|
+
session?: BrowserSessionConfig;
|
|
2611
|
+
/**
|
|
2612
|
+
* opt-in 重载 DOM 自动恢复(spec §4.5)。仅当同时提供 `navigation.mountEntry`(islands)+
|
|
2613
|
+
* `session` 时生效:标 `data-restore-root` 的容器内表单/滚动/<details> 自动捕获进会话作用域、
|
|
2614
|
+
* 重载后回填。缺省关闭。
|
|
2615
|
+
*/
|
|
2616
|
+
domRestore?: boolean;
|
|
2617
|
+
/**
|
|
2618
|
+
* 顶层 islands 挂载原语(flat-islands opt-in,Phase 4)。
|
|
2619
|
+
*
|
|
2620
|
+
* 提供此字段且**未提供** `navigation` 时,框架合成一个隐式单栈 `NavigationController`,
|
|
2621
|
+
* 把 `FlowAction` 正向导航路由为 `controller.push`,`popstate` 路由为 `hydrate`,
|
|
2622
|
+
* island 实例在 back/forward 时保活不重挂。
|
|
2208
2623
|
*
|
|
2209
|
-
*
|
|
2210
|
-
* (push/pop/selectTab…)并订阅快照渲染 UI。
|
|
2624
|
+
* 提供了 `navigation` 时请使用 `navigation.mountEntry`,顶层该字段被忽略。
|
|
2211
2625
|
*/
|
|
2212
|
-
|
|
2626
|
+
mountEntry?: MountEntry;
|
|
2213
2627
|
}
|
|
2214
2628
|
/**
|
|
2215
2629
|
* 启动客户端应用
|
|
@@ -2218,6 +2632,51 @@ interface BrowserAppConfig {
|
|
|
2218
2632
|
*/
|
|
2219
2633
|
declare function startBrowserApp(config: BrowserAppConfig): Promise<void>;
|
|
2220
2634
|
//#endregion
|
|
2635
|
+
//#region ../browser/src/islands-shell.d.ts
|
|
2636
|
+
/**
|
|
2637
|
+
* islands 应用 shell(方案 C):chrome-root 与 outlet 为兄弟。
|
|
2638
|
+
*
|
|
2639
|
+
* SSR 已渲 → target 内已有 `[data-fs-chrome]` + `[data-fs-outlet]`,复用之,`hydrate` 取决于
|
|
2640
|
+
* chrome-root 是否有内容(SSR 渲过 → true)。纯 CSR(无 SSR shell)→ 建出二者兄弟,`hydrate=false`。
|
|
2641
|
+
* 编排器经 `[data-fs-outlet]` 找 outlet(与此约定同源)。
|
|
2642
|
+
*/
|
|
2643
|
+
interface IslandsShell {
|
|
2644
|
+
readonly chromeRoot: HTMLElement;
|
|
2645
|
+
readonly outlet: HTMLElement;
|
|
2646
|
+
/** chrome-root 是否含 SSR 内容(true → 应水合 chrome,false → 客户端新建)。 */
|
|
2647
|
+
readonly hydrate: boolean;
|
|
2648
|
+
}
|
|
2649
|
+
declare function resolveIslandsShell(target: HTMLElement): IslandsShell;
|
|
2650
|
+
//#endregion
|
|
2651
|
+
//#region ../browser/src/web-storage.d.ts
|
|
2652
|
+
/** Web Storage 类型:会话级(标签关闭即清)或本地级(跨会话持久)。 */
|
|
2653
|
+
type WebStorageKind = "session" | "local";
|
|
2654
|
+
/**
|
|
2655
|
+
* 创建一个由浏览器 Web Storage 支撑的 core `Storage`。
|
|
2656
|
+
*
|
|
2657
|
+
* @param kind `"session"` → `sessionStorage`;`"local"` → `localStorage`。
|
|
2658
|
+
*/
|
|
2659
|
+
declare function createWebStorage(kind: WebStorageKind): Storage;
|
|
2660
|
+
//#endregion
|
|
2661
|
+
//#region ../browser/src/dom-restore.d.ts
|
|
2662
|
+
interface DomRestoreOptions {
|
|
2663
|
+
/** 会话作用域(来自 SessionHandle.scope);DOM 状态写进 `scope[key].__dom`。 */
|
|
2664
|
+
readonly scope: NavigationScopedState;
|
|
2665
|
+
/** 回填调度(默认 requestAnimationFrame;测试可注入同步执行)。 */
|
|
2666
|
+
readonly schedule?: (cb: () => void) => void;
|
|
2667
|
+
}
|
|
2668
|
+
interface DomRestore {
|
|
2669
|
+
/** 捕获一个 island container 的 DOM 状态进 scope(供测试 + 内部接线复用)。 */
|
|
2670
|
+
captureEntry(container: HTMLElement): void;
|
|
2671
|
+
/** 回填一个 island container(从 scope 读,scheduled)。 */
|
|
2672
|
+
restoreEntry(container: HTMLElement): void;
|
|
2673
|
+
/** 接线进 outlet(fs:* / input / pagehide + boot catch-up)。 */
|
|
2674
|
+
attach(outlet: HTMLElement): void;
|
|
2675
|
+
/** 解绑全部监听(幂等)。 */
|
|
2676
|
+
dispose(): void;
|
|
2677
|
+
}
|
|
2678
|
+
declare function createDomRestore(options: DomRestoreOptions): DomRestore;
|
|
2679
|
+
//#endregion
|
|
2221
2680
|
//#region ../browser/src/utils/history.d.ts
|
|
2222
2681
|
interface HistoryOptions {
|
|
2223
2682
|
getScrollablePageElement: () => HTMLElement | null;
|
|
@@ -2268,5 +2727,5 @@ declare function deserializeServerData(): PrefetchedIntent[] | undefined;
|
|
|
2268
2727
|
*/
|
|
2269
2728
|
declare function createPrefetchedIntentsFromDom(): PrefetchedIntents;
|
|
2270
2729
|
//#endregion
|
|
2271
|
-
export {
|
|
2272
|
-
//# sourceMappingURL=
|
|
2730
|
+
export { IntersectionImpressionObserver as $, FeatureFlagsProvider as $i, isLeafNode as $n, ConsoleLogger as $r, HydrateOperation as $t, ActionHandlerDependencies as A, ActionHandler as Aa, AfterLoadGuard as Ai, SerializedStack as An, classifyHost as Ar, NavigationScopedState as At, getTextDirection as B, makeFlowAction as Ba, next as Bi, popTo as Bn, BaseShelf as Br, SessionUrlLocation as Bt, SessionBridgeOptions as C, SecureFetchOptions as Ca, InferOutput as Ci, createFullStateCodec as Cn, AsyncMapper as Cr, createUrlSessionAdapter as Ct, NavigationBridgeDependencies as D, IntentController as Da, StandardSchemaV1 as Di, SerializedNavigation as Dn, pipeAsync as Dr, sessionEntryKey as Dt, defaultShouldRestore as E, Intent as Ea, StandardResult as Ei, SerializedLeaf as En, pipe as Er, createNavigationScopedState as Et, ExternalUrlDependencies as F, FlowAction as Fa, NextResult as Fi, collectAllLeaves as Fn, HttpError as Fr, SessionNavigationAdapter as Ft, PluralCategory as G, FINESOFT_PUBLIC as Gi, selectColumn as Gn, PrefetchedIntent as Gr, defineRoutes as Gt, makeLocaleInfo as H, rewrite as Hi, push as Hn, safeErrorPage as Hr, DefineRoutesOptions as Ht, registerExternalUrlHandler as I, isCompoundAction as Ia, PostLoadContext as Ii, collectVisibleDestinations as In, RequestInterceptor as Ir, SessionSnapshot as It, interpolate as J, markPublic as Ji, visibleSplitColumns as Jn, LocaleInfo as Jr, NavigationBrowserConfig as Jt, PluralRuleProvider as K, getPublicFields as Ki, selectTab as Kn, PrefetchedIntents as Kr, route as Kt, SimpleTranslator as L, isExternalUrlAction as La, RedirectResult as Li, findNearestStack as Ln, ResponseInterceptor as Lr, SessionStateProvider as Lt, FlowActionCallbacks as M, Action as Ma, DenyResult as Mi, deserializeNavigation as Mn, HostGuardError as Mr, SESSION_DEFAULT_VERSION as Mt, FlowActionDependencies as N, CompoundAction as Na, MiddlewareResult as Ni, serializeNavigation as Nn, HttpClient as Nr, SessionError as Nt, NavigationHandle as O, Container as Oa, makeSchema as Oi, SerializedSplit as On, BaseController as Or, decodeSnapshot as Ot, registerFlowActionHandler as P, ExternalUrlAction as Pa, NavigationContext as Pi, serializeNavigationStable as Pn, HttpClientConfig as Pr, SessionErrorContext as Pt, ImpressionObserverOptions as Q, FeatureFlags as Qi, TabsInit as Qn, shouldLog as Qr, defineNavigation as Qt, SimpleTranslatorOptions as R, isFlowAction as Ra, RewriteResult as Ri, findNode as Rn, stableStringify as Rr, SessionStore as Rt, SESSION_DEFAULT_DEBOUNCE_MS as S, LoggerFactory as Sa, Router as Si, createFlatStackCodec as Sn, TabsNode as Sr, createNavigationSessionAdapter as St, createSessionBridge as T, IntentDispatcher as Ta, StandardIssue as Ti, encodeNavigationTreeParam as Tn, mapEach as Tr, collectLeafKeys as Tt, resolveLocaleFromUrl as U, BASE_PAGE_FIELDS as Ui, replaceTop as Un, Framework as Ur, RenderMode as Ut, isRtl as V, redirect as Vi, popToRoot as Vn, SafeErrorPageOptions as Vr, isUrlLocation as Vt, setHtmlLocaleAttributes as W, BasePage as Wi, resolveActivePath as Wn, FrameworkConfig as Wr, RouteDefinition as Wt, WithFieldsRecorder as X, defineRequestScopedKey as Xi, islandContainerAttributes as Xn, Translator as Xr, NavigationInitial as Xt, resolvePluralKey as Y, RequestScopedKey as Yi, ResolvedEntry as Yn, TextDirection as Yr, NavigationDefinition as Yt, VoidEventRecorder as Z, DEP_KEYS as Zi, SplitColumnInit as Zn, resetFilterCache as Zr, NavigationSSRDefinition as Zt, IslandOrchestratorOptions as _, ReportingLogger as _a, str as _i, DEFAULT_NAV_PARAM as _n, SPLIT_VISIBILITIES as _r, Optional as _t, DomRestore as a, MessagesLoader as aa, InferQuery as ai, NavigationOpKind as an, stack as ar, ServerContextOptions as at, AppHandle as b, BaseLogger as ba, RouteAddOptions as bi, NavigationRouterLike as bn, SplitVisibility as br, LruMap as bt, createWebStorage as c, resolveConfiguredMessages as ca, StripOptional as ci, PopToOperation as cn, NAVIGATION_NODE_KINDS as cr, generateUuid as ct, BrowserAppConfig as d, detectPlatform as da, NumOptions as di, PushOptions as dn, NavigationNodeKind as dr, removeHost as dt, MakeDependenciesOptions as ea, ConsoleLoggerFactory as ei, NAVIGATION_OP_KINDS as en, isSplitNode as er, ConsoleEventRecorder as et, BrowserNavigationConfig as f, EventRecorder as fa, StrOptions as fi, ReplaceTopOperation as fn, NavigationPath as fr, removeQueryParams as ft, IslandOrchestrator as g, ReportCallback as ga, oneOf as gi, createNavigationController as gn, ResolvedDestination as gr, None as gt, IslandHandle as h, MetricsFieldsProvider as ha, num as hi, SetVisibilityOperation as hn, Page as hr, getPWADisplayMode as ht, History as i, makeDependencies as ia, InferParams as ii, NavigationDispatchContext as in, split as ir, BrowserContextOptions as it, registerActionHandlers as j, ACTION_KINDS as ja, BeforeLoadGuard as ji, SerializedTabs as jn, classifyUrl as jr, SESSION_DEFAULT_KEY as jt, createNavigationBridge as k, ActionDispatcher as ka, runStandard as ki, SerializedSplitColumn as kn, HostCheckResult as kr, encodeSnapshot as kt, IslandsShell as l, resolveMessages as la, optional as li, PopToRootOperation as ln, NavigationError as lr, buildUrl as lt, startBrowserApp as m, ImpressionObserver as ma, int as mi, SelectTabOperation as mn, NavigationSnapshot as mr, PWADisplayMode as mt, deserializeServerData as n, Net as na, CompositeLoggerFactory as ni, NavigationController as nn, isTabsNode as nr, runAfterLoadGuards as nt, DomRestoreOptions as o, MessagesLoaderContext as oa, ParamsFor as oi, NavigationOperation as on, tabs as or, createBrowserContext as ot, BrowserSessionConfig as p, ImpressionEntry as pa, bool as pi, SelectColumnOperation as pn, NavigationPathStep as pr, removeScheme as pt, englishPlural as q, isPublicMarked as qi, setVisibility as qn, LocaleAttributes as qr, DefineNavigationOptions as qt, tryScroll as r, Storage as ra, ExtractParamNames as ri, NavigationControllerOptions as rn, leaf as rr, runBeforeLoadGuards as rt, createDomRestore as s, TranslationMessages as sa, QuerySchemaMap as si, PopOperation as sn, LeafNode as sr, createServerContext as st, createPrefetchedIntentsFromDom as t, MetricsRecorder as ta, CompositeLogger as ti, NavigationContextInput as tn, isStackNode as tr, CompositeEventRecorder as tt, resolveIslandsShell as u, PlatformInfo as ua, withDefault as ui, PushOperation as un, NavigationNode as ur, getBaseUrl as ut, MountEntry as v, ReportingLoggerFactory as va, uuid as vi, FullStateCodecOptions as vn, SplitColumn as vr, isNone as vt, SessionHandle as w, secureFetch as wa, ParamSchema as wi, decodeNavigationTreeParam as wn, Mapper as wr, createSessionStore as wt, createAppHandle as x, Logger as xa, RouteMatch as xi, createActiveLeafCodec as xn, StackNode as xr, UrlAdapterOptions as xt, createIslandOrchestrator as y, ReportingLoggerOptions as ya, RouteParams as yi, NavigationCodec as yn, SplitNode as yr, isSome as yt, getLocaleAttributes as z, makeExternalUrlAction as za, deny as zi, pop as zn, BaseItem as zr, SessionStoreOptions as zt };
|
|
2731
|
+
//# sourceMappingURL=browser-DMw76sEo.d.mts.map
|