@finesoft/front 0.1.38 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/app-re7jUCuM.mjs +178 -0
  2. package/dist/app-re7jUCuM.mjs.map +1 -0
  3. package/dist/index.d.mts +1276 -0
  4. package/dist/index.d.mts.map +1 -0
  5. package/dist/index.mjs +2749 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/locale-D2Bu7w47.mjs +27 -0
  8. package/dist/locale-D2Bu7w47.mjs.map +1 -0
  9. package/dist/rolldown-runtime-wcPFST8Q.mjs +13 -0
  10. package/dist/server-peer-modules-BSSsxBaF.d.mts +41 -0
  11. package/dist/server-peer-modules-BSSsxBaF.d.mts.map +1 -0
  12. package/package.json +21 -32
  13. package/README.md +0 -1066
  14. package/dist/app-D4K35MX3.js +0 -10
  15. package/dist/app-D4K35MX3.js.map +0 -1
  16. package/dist/browser.cjs +0 -1265
  17. package/dist/browser.cjs.map +0 -1
  18. package/dist/browser.d.cts +0 -771
  19. package/dist/browser.d.ts +0 -771
  20. package/dist/browser.js +0 -99
  21. package/dist/browser.js.map +0 -1
  22. package/dist/chunk-AYO3UUQC.js +0 -118
  23. package/dist/chunk-AYO3UUQC.js.map +0 -1
  24. package/dist/chunk-OXKFPW4U.js +0 -824
  25. package/dist/chunk-OXKFPW4U.js.map +0 -1
  26. package/dist/chunk-PHDR7PIL.js +0 -382
  27. package/dist/chunk-PHDR7PIL.js.map +0 -1
  28. package/dist/chunk-PSPVIVC2.js +0 -25
  29. package/dist/chunk-PSPVIVC2.js.map +0 -1
  30. package/dist/chunk-SFGR32K6.js +0 -188
  31. package/dist/chunk-SFGR32K6.js.map +0 -1
  32. package/dist/index.cjs +0 -3369
  33. package/dist/index.cjs.map +0 -1
  34. package/dist/index.d.cts +0 -570
  35. package/dist/index.d.ts +0 -570
  36. package/dist/index.js +0 -1632
  37. package/dist/index.js.map +0 -1
  38. package/dist/locale-CAZ4INCX.js +0 -7
  39. package/dist/locale-CAZ4INCX.js.map +0 -1
  40. package/dist/src-MVACJWBF.js +0 -21
  41. package/dist/src-MVACJWBF.js.map +0 -1
package/dist/browser.js DELETED
@@ -1,99 +0,0 @@
1
- import {
2
- History,
3
- createPrefetchedIntentsFromDom,
4
- deserializeServerData,
5
- registerActionHandlers,
6
- registerExternalUrlHandler,
7
- registerFlowActionHandler,
8
- startBrowserApp,
9
- tryScroll
10
- } from "./chunk-PHDR7PIL.js";
11
- import {
12
- ACTION_KINDS,
13
- ActionDispatcher,
14
- BaseController,
15
- BaseLogger,
16
- CompositeLogger,
17
- CompositeLoggerFactory,
18
- ConsoleLogger,
19
- ConsoleLoggerFactory,
20
- Container,
21
- DEP_KEYS,
22
- Framework,
23
- HttpClient,
24
- HttpError,
25
- IntentDispatcher,
26
- LruMap,
27
- PrefetchedIntents,
28
- Router,
29
- buildUrl,
30
- defineRoutes,
31
- generateUuid,
32
- getBaseUrl,
33
- isCompoundAction,
34
- isExternalUrlAction,
35
- isFlowAction,
36
- isNone,
37
- isSome,
38
- makeDependencies,
39
- makeExternalUrlAction,
40
- makeFlowAction,
41
- mapEach,
42
- pipe,
43
- pipeAsync,
44
- removeHost,
45
- removeQueryParams,
46
- removeScheme,
47
- resetFilterCache,
48
- shouldLog,
49
- stableStringify
50
- } from "./chunk-OXKFPW4U.js";
51
- export {
52
- ACTION_KINDS,
53
- ActionDispatcher,
54
- BaseController,
55
- BaseLogger,
56
- CompositeLogger,
57
- CompositeLoggerFactory,
58
- ConsoleLogger,
59
- ConsoleLoggerFactory,
60
- Container,
61
- DEP_KEYS,
62
- Framework,
63
- History,
64
- HttpClient,
65
- HttpError,
66
- IntentDispatcher,
67
- LruMap,
68
- PrefetchedIntents,
69
- Router,
70
- buildUrl,
71
- createPrefetchedIntentsFromDom,
72
- defineRoutes,
73
- deserializeServerData,
74
- generateUuid,
75
- getBaseUrl,
76
- isCompoundAction,
77
- isExternalUrlAction,
78
- isFlowAction,
79
- isNone,
80
- isSome,
81
- makeDependencies,
82
- makeExternalUrlAction,
83
- makeFlowAction,
84
- mapEach,
85
- pipe,
86
- pipeAsync,
87
- registerActionHandlers,
88
- registerExternalUrlHandler,
89
- registerFlowActionHandler,
90
- removeHost,
91
- removeQueryParams,
92
- removeScheme,
93
- resetFilterCache,
94
- shouldLog,
95
- stableStringify,
96
- startBrowserApp,
97
- tryScroll
98
- };
99
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,118 +0,0 @@
1
- import {
2
- Framework
3
- } from "./chunk-OXKFPW4U.js";
4
-
5
- // ../ssr/src/render.ts
6
- async function ssrRender(options) {
7
- const {
8
- url,
9
- frameworkConfig,
10
- bootstrap,
11
- getErrorPage,
12
- renderApp,
13
- ssrContext
14
- } = options;
15
- const mergedConfig = ssrContext?.fetch ? { ...frameworkConfig, fetch: ssrContext.fetch } : frameworkConfig;
16
- const framework = Framework.create(mergedConfig);
17
- bootstrap(framework);
18
- try {
19
- const parsed = new URL(url, "http://localhost");
20
- const fullPath = parsed.pathname + parsed.search;
21
- const match = framework.routeUrl(fullPath);
22
- if (match?.renderMode === "csr") {
23
- return {
24
- html: "",
25
- head: "",
26
- css: "",
27
- serverData: [],
28
- renderMode: "csr"
29
- };
30
- }
31
- let page;
32
- let serverData = [];
33
- if (match) {
34
- try {
35
- page = await framework.dispatch(match.intent);
36
- serverData = [{ intent: match.intent, data: page }];
37
- } catch (e) {
38
- console.error(
39
- `[SSR] dispatch failed for intent "${match.intent.id}":`,
40
- e
41
- );
42
- page = getErrorPage(500, "Internal error");
43
- }
44
- } else {
45
- page = getErrorPage(404, "Page not found");
46
- }
47
- const result = renderApp(page, framework);
48
- return {
49
- html: result.html,
50
- head: result.head,
51
- css: result.css,
52
- serverData,
53
- renderMode: match?.renderMode
54
- };
55
- } finally {
56
- framework.dispose();
57
- }
58
- }
59
-
60
- // ../ssr/src/create-render.ts
61
- function createSSRRender(config) {
62
- const { bootstrap, getErrorPage, renderApp, frameworkConfig } = config;
63
- return (url, locale, ssrContext) => ssrRender({
64
- url,
65
- frameworkConfig: frameworkConfig ?? {},
66
- bootstrap,
67
- getErrorPage,
68
- renderApp: (page) => renderApp(page, locale),
69
- ssrContext
70
- });
71
- }
72
-
73
- // ../ssr/src/inject.ts
74
- var SSR_PLACEHOLDERS = {
75
- LANG: "<!--ssr-lang-->",
76
- HEAD: "<!--ssr-head-->",
77
- BODY: "<!--ssr-body-->",
78
- DATA: "<!--ssr-data-->"
79
- };
80
- function injectSSRContent(options) {
81
- const { template, locale, head, css, html, serializedData } = options;
82
- const cssTag = css ? `<style>${css}</style>` : "";
83
- return template.replace(SSR_PLACEHOLDERS.LANG, locale).replace(SSR_PLACEHOLDERS.HEAD, `${head}
84
- ${cssTag}`).replace(SSR_PLACEHOLDERS.BODY, html).replace(
85
- SSR_PLACEHOLDERS.DATA,
86
- `<script id="serialized-server-data" type="application/json">${serializedData}</script>`
87
- );
88
- }
89
- function injectCSRShell(template, locale) {
90
- return template.replace(SSR_PLACEHOLDERS.LANG, locale).replace(SSR_PLACEHOLDERS.HEAD, "").replace(SSR_PLACEHOLDERS.BODY, "").replace(SSR_PLACEHOLDERS.DATA, "");
91
- }
92
-
93
- // ../ssr/src/server-data.ts
94
- var HTML_REPLACEMENTS = {
95
- "<": "\\u003C",
96
- ">": "\\u003E",
97
- "/": "\\u002F",
98
- "\u2028": "\\u2028",
99
- "\u2029": "\\u2029"
100
- };
101
- var HTML_ESCAPE_PATTERN = /[<>/\u2028\u2029]/g;
102
- function serializeServerData(data) {
103
- const json = JSON.stringify(data);
104
- return json.replace(
105
- HTML_ESCAPE_PATTERN,
106
- (match) => HTML_REPLACEMENTS[match] ?? match
107
- );
108
- }
109
-
110
- export {
111
- ssrRender,
112
- createSSRRender,
113
- SSR_PLACEHOLDERS,
114
- injectSSRContent,
115
- injectCSRShell,
116
- serializeServerData
117
- };
118
- //# sourceMappingURL=chunk-AYO3UUQC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../ssr/src/render.ts","../../ssr/src/create-render.ts","../../ssr/src/inject.ts","../../ssr/src/server-data.ts"],"sourcesContent":["/**\n * ssrRender — 通用 SSR 渲染管线\n *\n * 1. 创建 Framework + 注册 Controllers\n * 2. routeUrl → Intent\n * 3. dispatch → Page 数据\n * 4. 调用应用层提供的渲染函数\n */\n\nimport {\n\tFramework,\n\ttype BasePage,\n\ttype FrameworkConfig,\n\ttype PrefetchedIntent,\n} from \"@finesoft/core\";\n\nexport interface SSRRenderOptions {\n\t/** 请求 URL */\n\turl: string;\n\t/** Framework 配置(含路由注册等) */\n\tframeworkConfig: FrameworkConfig;\n\t/** 注册 controllers 和路由的引导函数 */\n\tbootstrap: (framework: Framework) => void;\n\t/** 获取错误页面 */\n\tgetErrorPage: (status: number, message: string) => BasePage;\n\t/** 应用层渲染函数(如 Svelte SSR render) */\n\trenderApp: (page: BasePage, framework: Framework) => SSRAppResult;\n\t/** 可选的 SSR 请求上下文(如自定义 fetch) */\n\tssrContext?: SSRContext;\n}\n\n/** SSR 请求级上下文 */\nexport interface SSRContext {\n\t/** 自定义 fetch(如 Hono 内部路由回环) */\n\tfetch?: typeof globalThis.fetch;\n}\n\nexport interface SSRAppResult {\n\thtml: string;\n\thead: string;\n\tcss: string;\n}\n\nexport interface SSRRenderResult {\n\thtml: string;\n\thead: string;\n\tcss: string;\n\tserverData: PrefetchedIntent[];\n\t/** 该路由的渲染模式(由 Router 返回) */\n\trenderMode?: string;\n}\n\nexport async function ssrRender(\n\toptions: SSRRenderOptions,\n): Promise<SSRRenderResult> {\n\tconst {\n\t\turl,\n\t\tframeworkConfig,\n\t\tbootstrap,\n\t\tgetErrorPage,\n\t\trenderApp,\n\t\tssrContext,\n\t} = options;\n\n\t// 将 SSR 上下文中的 fetch 合并到 frameworkConfig,注入 DI 容器\n\tconst mergedConfig: FrameworkConfig = ssrContext?.fetch\n\t\t? { ...frameworkConfig, fetch: ssrContext.fetch }\n\t\t: frameworkConfig;\n\n\tconst framework = Framework.create(mergedConfig);\n\tbootstrap(framework);\n\n\ttry {\n\t\tconst parsed = new URL(url, \"http://localhost\");\n\t\tconst fullPath = parsed.pathname + parsed.search;\n\t\tconst match = framework.routeUrl(fullPath);\n\n\t\t// CSR 模式:跳过服务端渲染,返回空内容由客户端 JS 渲染\n\t\tif (match?.renderMode === \"csr\") {\n\t\t\treturn {\n\t\t\t\thtml: \"\",\n\t\t\t\thead: \"\",\n\t\t\t\tcss: \"\",\n\t\t\t\tserverData: [],\n\t\t\t\trenderMode: \"csr\",\n\t\t\t};\n\t\t}\n\n\t\tlet page: BasePage;\n\t\tlet serverData: PrefetchedIntent[] = [];\n\n\t\tif (match) {\n\t\t\ttry {\n\t\t\t\tpage = (await framework.dispatch(match.intent)) as BasePage;\n\t\t\t\tserverData = [{ intent: match.intent, data: page }];\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[SSR] dispatch failed for intent \"${match.intent.id}\":`,\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\tpage = getErrorPage(500, \"Internal error\");\n\t\t\t}\n\t\t} else {\n\t\t\tpage = getErrorPage(404, \"Page not found\");\n\t\t}\n\n\t\tconst result = renderApp(page, framework);\n\n\t\treturn {\n\t\t\thtml: result.html,\n\t\t\thead: result.head,\n\t\t\tcss: result.css,\n\t\t\tserverData,\n\t\t\trenderMode: match?.renderMode,\n\t\t};\n\t} finally {\n\t\tframework.dispose();\n\t}\n}\n","/**\n * createSSRRender — 工厂函数,返回可直接被 SSR 服务器调用的 render 函数\n *\n * 将一次性配置(bootstrap / getErrorPage / renderApp)绑定后,\n * 返回 `(url, locale) => Promise<SSRRenderResult>` 签名,\n * 与 @finesoft/server 的 SSRModule 接口对齐。\n */\n\nimport type { BasePage, Framework, FrameworkConfig } from \"@finesoft/core\";\nimport {\n\tssrRender,\n\ttype SSRAppResult,\n\ttype SSRContext,\n\ttype SSRRenderResult,\n} from \"./render\";\n\nexport interface SSRRenderConfig {\n\t/** 注册 controllers 和路由的引导函数 */\n\tbootstrap: (framework: Framework) => void;\n\n\t/** 获取错误页面 */\n\tgetErrorPage: (status: number, message: string) => BasePage;\n\n\t/**\n\t * 应用层渲染函数\n\t *\n\t * @param page - 当前页面数据\n\t * @param locale - 当前语言\n\t * @returns SSR 渲染结果 { html, head, css }\n\t */\n\trenderApp: (page: BasePage, locale: string) => SSRAppResult;\n\n\t/** Framework 构造配置(可选) */\n\tframeworkConfig?: FrameworkConfig;\n}\n\n/**\n * 创建 render 函数\n *\n * @returns `render(url, locale, ssrContext?)` — 供 @finesoft/server SSRModule 使用\n */\nexport function createSSRRender(\n\tconfig: SSRRenderConfig,\n): (\n\turl: string,\n\tlocale: string,\n\tssrContext?: SSRContext,\n) => Promise<SSRRenderResult> {\n\tconst { bootstrap, getErrorPage, renderApp, frameworkConfig } = config;\n\n\treturn (url: string, locale: string, ssrContext?: SSRContext) =>\n\t\tssrRender({\n\t\t\turl,\n\t\t\tframeworkConfig: frameworkConfig ?? {},\n\t\t\tbootstrap,\n\t\t\tgetErrorPage,\n\t\t\trenderApp: (page) => renderApp(page, locale),\n\t\t\tssrContext,\n\t\t});\n}\n","/**\n * injectSSRContent — 将 SSR 渲染结果注入 HTML 模板\n */\n\n/** SSR HTML 模板占位符常量 */\nexport const SSR_PLACEHOLDERS = {\n\tLANG: \"<!--ssr-lang-->\",\n\tHEAD: \"<!--ssr-head-->\",\n\tBODY: \"<!--ssr-body-->\",\n\tDATA: \"<!--ssr-data-->\",\n} as const;\n\nexport interface InjectSSROptions {\n\ttemplate: string;\n\tlocale: string;\n\thead: string;\n\tcss: string;\n\thtml: string;\n\tserializedData: string;\n}\n\nexport function injectSSRContent(options: InjectSSROptions): string {\n\tconst { template, locale, head, css, html, serializedData } = options;\n\tconst cssTag = css ? `<style>${css}</style>` : \"\";\n\n\treturn template\n\t\t.replace(SSR_PLACEHOLDERS.LANG, locale)\n\t\t.replace(SSR_PLACEHOLDERS.HEAD, `${head}\\n${cssTag}`)\n\t\t.replace(SSR_PLACEHOLDERS.BODY, html)\n\t\t.replace(\n\t\t\tSSR_PLACEHOLDERS.DATA,\n\t\t\t`<script id=\"serialized-server-data\" type=\"application/json\">${serializedData}</script>`,\n\t\t);\n}\n\n/**\n * CSR 空壳注入 — 只替换 lang,清空 body/head/data 占位符\n * 用于 renderMode === \"csr\" 的路由\n */\nexport function injectCSRShell(template: string, locale: string): string {\n\treturn template\n\t\t.replace(SSR_PLACEHOLDERS.LANG, locale)\n\t\t.replace(SSR_PLACEHOLDERS.HEAD, \"\")\n\t\t.replace(SSR_PLACEHOLDERS.BODY, \"\")\n\t\t.replace(SSR_PLACEHOLDERS.DATA, \"\");\n}\n","/**\n * serializeServerData — 将 PrefetchedIntents 数据序列化为安全的 JSON\n *\n * 返回值可安全嵌入 <script> 标签。\n */\n\nimport type { PrefetchedIntent } from \"@finesoft/core\";\n\nconst HTML_REPLACEMENTS: Record<string, string> = {\n\t\"<\": \"\\\\u003C\",\n\t\">\": \"\\\\u003E\",\n\t\"/\": \"\\\\u002F\",\n\t\"\\u2028\": \"\\\\u2028\",\n\t\"\\u2029\": \"\\\\u2029\",\n};\n\nconst HTML_ESCAPE_PATTERN = /[<>/\\u2028\\u2029]/g;\n\nexport function serializeServerData(data: PrefetchedIntent[]): string {\n\tconst json = JSON.stringify(data);\n\treturn json.replace(\n\t\tHTML_ESCAPE_PATTERN,\n\t\t(match) => HTML_REPLACEMENTS[match] ?? match,\n\t);\n}\n"],"mappings":"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","names":[]}