@finesoft/front 0.1.2 → 0.1.11
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/README.md +153 -9
- package/dist/browser.cjs +1214 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +751 -0
- package/dist/browser.d.ts +751 -0
- package/dist/browser.js +97 -0
- package/dist/browser.js.map +1 -0
- package/dist/chunk-OVGQ4NUA.js +1143 -0
- package/dist/chunk-OVGQ4NUA.js.map +1 -0
- package/dist/index.cjs +209 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -1184
- package/dist/index.d.ts +16 -1184
- package/dist/index.js +191 -1071
- package/dist/index.js.map +1 -1
- package/package.json +11 -6
package/dist/index.cjs
CHANGED
|
@@ -48,6 +48,7 @@ __export(index_exports, {
|
|
|
48
48
|
LruMap: () => LruMap,
|
|
49
49
|
PrefetchedIntents: () => PrefetchedIntents,
|
|
50
50
|
Router: () => Router,
|
|
51
|
+
SSR_PLACEHOLDERS: () => SSR_PLACEHOLDERS,
|
|
51
52
|
buildUrl: () => buildUrl,
|
|
52
53
|
createPrefetchedIntentsFromDom: () => createPrefetchedIntentsFromDom,
|
|
53
54
|
createSSRApp: () => createSSRApp,
|
|
@@ -89,7 +90,7 @@ __export(index_exports, {
|
|
|
89
90
|
});
|
|
90
91
|
module.exports = __toCommonJS(index_exports);
|
|
91
92
|
|
|
92
|
-
// ../core/
|
|
93
|
+
// ../core/src/actions/types.ts
|
|
93
94
|
var ACTION_KINDS = {
|
|
94
95
|
FLOW: "flow",
|
|
95
96
|
EXTERNAL_URL: "externalUrl",
|
|
@@ -110,6 +111,8 @@ function makeFlowAction(url, presentationContext) {
|
|
|
110
111
|
function makeExternalUrlAction(url) {
|
|
111
112
|
return { kind: ACTION_KINDS.EXTERNAL_URL, url };
|
|
112
113
|
}
|
|
114
|
+
|
|
115
|
+
// ../core/src/actions/dispatcher.ts
|
|
113
116
|
var ActionDispatcher = class {
|
|
114
117
|
handlers = /* @__PURE__ */ new Map();
|
|
115
118
|
wiredActions = /* @__PURE__ */ new Set();
|
|
@@ -142,6 +145,8 @@ var ActionDispatcher = class {
|
|
|
142
145
|
await handler(action);
|
|
143
146
|
}
|
|
144
147
|
};
|
|
148
|
+
|
|
149
|
+
// ../core/src/intents/dispatcher.ts
|
|
145
150
|
var IntentDispatcher = class {
|
|
146
151
|
controllers = /* @__PURE__ */ new Map();
|
|
147
152
|
/** 注册一个 IntentController */
|
|
@@ -163,6 +168,8 @@ var IntentDispatcher = class {
|
|
|
163
168
|
return this.controllers.has(intentId);
|
|
164
169
|
}
|
|
165
170
|
};
|
|
171
|
+
|
|
172
|
+
// ../core/src/dependencies/container.ts
|
|
166
173
|
var Container = class {
|
|
167
174
|
registrations = /* @__PURE__ */ new Map();
|
|
168
175
|
/** 注册依赖(默认单例) */
|
|
@@ -196,12 +203,16 @@ var Container = class {
|
|
|
196
203
|
this.registrations.clear();
|
|
197
204
|
}
|
|
198
205
|
};
|
|
206
|
+
|
|
207
|
+
// ../core/src/logger/base.ts
|
|
199
208
|
var BaseLogger = class {
|
|
200
209
|
category;
|
|
201
210
|
constructor(category) {
|
|
202
211
|
this.category = category;
|
|
203
212
|
}
|
|
204
213
|
};
|
|
214
|
+
|
|
215
|
+
// ../core/src/logger/local-storage-filter.ts
|
|
205
216
|
var LEVEL_TO_NUM = {
|
|
206
217
|
"*": 4,
|
|
207
218
|
debug: 4,
|
|
@@ -261,6 +272,8 @@ function resetFilterCache() {
|
|
|
261
272
|
cachedRules = void 0;
|
|
262
273
|
cachedRaw = void 0;
|
|
263
274
|
}
|
|
275
|
+
|
|
276
|
+
// ../core/src/logger/console.ts
|
|
264
277
|
var ConsoleLogger = class extends BaseLogger {
|
|
265
278
|
debug(...args) {
|
|
266
279
|
if (shouldLog(this.category, "debug")) {
|
|
@@ -290,6 +303,8 @@ var ConsoleLoggerFactory = class {
|
|
|
290
303
|
return new ConsoleLogger(category);
|
|
291
304
|
}
|
|
292
305
|
};
|
|
306
|
+
|
|
307
|
+
// ../core/src/dependencies/make-dependencies.ts
|
|
293
308
|
var DEP_KEYS = {
|
|
294
309
|
LOGGER: "logger",
|
|
295
310
|
LOGGER_FACTORY: "loggerFactory",
|
|
@@ -380,6 +395,8 @@ function makeDependencies(container, options = {}) {
|
|
|
380
395
|
);
|
|
381
396
|
container.register(DEP_KEYS.FETCH, () => fetchFn);
|
|
382
397
|
}
|
|
398
|
+
|
|
399
|
+
// ../core/src/router/router.ts
|
|
383
400
|
var Router = class {
|
|
384
401
|
routes = [];
|
|
385
402
|
/** 添加路由规则 */
|
|
@@ -448,6 +465,8 @@ var Router = class {
|
|
|
448
465
|
}
|
|
449
466
|
}
|
|
450
467
|
};
|
|
468
|
+
|
|
469
|
+
// ../core/src/logger/composite.ts
|
|
451
470
|
var CompositeLoggerFactory = class {
|
|
452
471
|
constructor(factories) {
|
|
453
472
|
this.factories = factories;
|
|
@@ -481,6 +500,8 @@ var CompositeLogger = class {
|
|
|
481
500
|
return "";
|
|
482
501
|
}
|
|
483
502
|
};
|
|
503
|
+
|
|
504
|
+
// ../core/src/prefetched-intents/stable-stringify.ts
|
|
484
505
|
function stableStringify(obj) {
|
|
485
506
|
if (obj === null || obj === void 0) return String(obj);
|
|
486
507
|
if (typeof obj !== "object") return JSON.stringify(obj);
|
|
@@ -493,6 +514,8 @@ function stableStringify(obj) {
|
|
|
493
514
|
);
|
|
494
515
|
return "{" + parts.join(",") + "}";
|
|
495
516
|
}
|
|
517
|
+
|
|
518
|
+
// ../core/src/prefetched-intents/prefetched-intents.ts
|
|
496
519
|
var PrefetchedIntents = class _PrefetchedIntents {
|
|
497
520
|
intents;
|
|
498
521
|
constructor(intents) {
|
|
@@ -535,6 +558,8 @@ var PrefetchedIntents = class _PrefetchedIntents {
|
|
|
535
558
|
return this.intents.size;
|
|
536
559
|
}
|
|
537
560
|
};
|
|
561
|
+
|
|
562
|
+
// ../core/src/framework.ts
|
|
538
563
|
var Framework = class _Framework {
|
|
539
564
|
container;
|
|
540
565
|
intentDispatcher;
|
|
@@ -609,6 +634,8 @@ var Framework = class _Framework {
|
|
|
609
634
|
this.container.dispose();
|
|
610
635
|
}
|
|
611
636
|
};
|
|
637
|
+
|
|
638
|
+
// ../core/src/http/client.ts
|
|
612
639
|
var HttpError = class extends Error {
|
|
613
640
|
constructor(status, statusText, body) {
|
|
614
641
|
super(`HTTP ${status}: ${statusText}`);
|
|
@@ -687,6 +714,8 @@ var HttpClient = class {
|
|
|
687
714
|
return `${url.pathname}${url.search}`;
|
|
688
715
|
}
|
|
689
716
|
};
|
|
717
|
+
|
|
718
|
+
// ../core/src/intents/base-controller.ts
|
|
690
719
|
var BaseController = class {
|
|
691
720
|
/**
|
|
692
721
|
* 错误回退 — 子类可选覆写
|
|
@@ -718,6 +747,8 @@ var BaseController = class {
|
|
|
718
747
|
}
|
|
719
748
|
}
|
|
720
749
|
};
|
|
750
|
+
|
|
751
|
+
// ../core/src/data/mapper.ts
|
|
721
752
|
function pipe(...mappers) {
|
|
722
753
|
return (input) => mappers.reduce((acc, mapper) => mapper(acc), input);
|
|
723
754
|
}
|
|
@@ -733,6 +764,8 @@ function pipeAsync(...mappers) {
|
|
|
733
764
|
function mapEach(mapper) {
|
|
734
765
|
return (items) => items.map(mapper);
|
|
735
766
|
}
|
|
767
|
+
|
|
768
|
+
// ../core/src/bootstrap/define-routes.ts
|
|
736
769
|
function defineRoutes(framework, definitions) {
|
|
737
770
|
const registeredIntents = /* @__PURE__ */ new Set();
|
|
738
771
|
for (const def of definitions) {
|
|
@@ -743,6 +776,8 @@ function defineRoutes(framework, definitions) {
|
|
|
743
776
|
framework.router.add(def.path, def.intentId);
|
|
744
777
|
}
|
|
745
778
|
}
|
|
779
|
+
|
|
780
|
+
// ../core/src/utils/lru-map.ts
|
|
746
781
|
var LruMap = class {
|
|
747
782
|
map = /* @__PURE__ */ new Map();
|
|
748
783
|
capacity;
|
|
@@ -781,12 +816,16 @@ var LruMap = class {
|
|
|
781
816
|
this.map.clear();
|
|
782
817
|
}
|
|
783
818
|
};
|
|
819
|
+
|
|
820
|
+
// ../core/src/utils/optional.ts
|
|
784
821
|
function isSome(value) {
|
|
785
822
|
return value !== null && value !== void 0;
|
|
786
823
|
}
|
|
787
824
|
function isNone(value) {
|
|
788
825
|
return value === null || value === void 0;
|
|
789
826
|
}
|
|
827
|
+
|
|
828
|
+
// ../core/src/utils/url.ts
|
|
790
829
|
function removeScheme(url) {
|
|
791
830
|
return url.replace(/^https?:\/\//, "");
|
|
792
831
|
}
|
|
@@ -815,6 +854,8 @@ function buildUrl(path, params) {
|
|
|
815
854
|
const qs = searchParams.toString();
|
|
816
855
|
return qs ? `${path}?${qs}` : path;
|
|
817
856
|
}
|
|
857
|
+
|
|
858
|
+
// ../core/src/utils/uuid.ts
|
|
818
859
|
function generateUuid() {
|
|
819
860
|
if (typeof crypto !== "undefined" && crypto.randomUUID) {
|
|
820
861
|
return crypto.randomUUID();
|
|
@@ -826,7 +867,7 @@ function generateUuid() {
|
|
|
826
867
|
});
|
|
827
868
|
}
|
|
828
869
|
|
|
829
|
-
// ../browser/
|
|
870
|
+
// ../browser/src/action-handlers/external-url-action.ts
|
|
830
871
|
function registerExternalUrlHandler(deps) {
|
|
831
872
|
const { framework, log } = deps;
|
|
832
873
|
framework.onAction(
|
|
@@ -837,6 +878,8 @@ function registerExternalUrlHandler(deps) {
|
|
|
837
878
|
}
|
|
838
879
|
);
|
|
839
880
|
}
|
|
881
|
+
|
|
882
|
+
// ../browser/src/utils/try-scroll.ts
|
|
840
883
|
var MAX_TRIES = 100;
|
|
841
884
|
var FUDGE = 16;
|
|
842
885
|
var pendingFrame = null;
|
|
@@ -876,6 +919,8 @@ function tryScroll(log, getScrollableElement, scrollY) {
|
|
|
876
919
|
pendingFrame = null;
|
|
877
920
|
});
|
|
878
921
|
}
|
|
922
|
+
|
|
923
|
+
// ../browser/src/utils/history.ts
|
|
879
924
|
var HISTORY_SIZE_LIMIT = 10;
|
|
880
925
|
var History = class {
|
|
881
926
|
entries;
|
|
@@ -962,6 +1007,8 @@ var History = class {
|
|
|
962
1007
|
}
|
|
963
1008
|
}
|
|
964
1009
|
};
|
|
1010
|
+
|
|
1011
|
+
// ../browser/src/action-handlers/flow-action.ts
|
|
965
1012
|
function registerFlowActionHandler(deps) {
|
|
966
1013
|
const { framework, log, callbacks, updateApp } = deps;
|
|
967
1014
|
let isFirstPage = true;
|
|
@@ -1066,6 +1113,8 @@ function registerFlowActionHandler(deps) {
|
|
|
1066
1113
|
})();
|
|
1067
1114
|
}
|
|
1068
1115
|
}
|
|
1116
|
+
|
|
1117
|
+
// ../browser/src/action-handlers/register.ts
|
|
1069
1118
|
function registerActionHandlers(deps) {
|
|
1070
1119
|
const { framework, log, callbacks, updateApp } = deps;
|
|
1071
1120
|
registerFlowActionHandler({
|
|
@@ -1076,6 +1125,8 @@ function registerActionHandlers(deps) {
|
|
|
1076
1125
|
});
|
|
1077
1126
|
registerExternalUrlHandler({ framework, log });
|
|
1078
1127
|
}
|
|
1128
|
+
|
|
1129
|
+
// ../browser/src/server-data.ts
|
|
1079
1130
|
var SERVER_DATA_ID = "serialized-server-data";
|
|
1080
1131
|
function deserializeServerData() {
|
|
1081
1132
|
const script = document.getElementById(SERVER_DATA_ID);
|
|
@@ -1094,8 +1145,16 @@ function createPrefetchedIntentsFromDom() {
|
|
|
1094
1145
|
}
|
|
1095
1146
|
return PrefetchedIntents.fromArray(data);
|
|
1096
1147
|
}
|
|
1148
|
+
|
|
1149
|
+
// ../browser/src/start-app.ts
|
|
1097
1150
|
async function startBrowserApp(config) {
|
|
1098
|
-
const {
|
|
1151
|
+
const {
|
|
1152
|
+
bootstrap,
|
|
1153
|
+
defaultLocale = "en",
|
|
1154
|
+
mountId = "app",
|
|
1155
|
+
mount,
|
|
1156
|
+
callbacks
|
|
1157
|
+
} = config;
|
|
1099
1158
|
const prefetchedIntents = createPrefetchedIntentsFromDom();
|
|
1100
1159
|
const framework = Framework.create({ prefetchedIntents });
|
|
1101
1160
|
bootstrap(framework);
|
|
@@ -1107,7 +1166,7 @@ async function startBrowserApp(config) {
|
|
|
1107
1166
|
window.location.pathname + window.location.search
|
|
1108
1167
|
);
|
|
1109
1168
|
const locale = document.documentElement.lang || defaultLocale;
|
|
1110
|
-
const target = document.getElementById(
|
|
1169
|
+
const target = document.getElementById(mountId);
|
|
1111
1170
|
const updateApp = mount(target, { framework, locale });
|
|
1112
1171
|
registerActionHandlers({
|
|
1113
1172
|
framework,
|
|
@@ -1125,7 +1184,7 @@ async function startBrowserApp(config) {
|
|
|
1125
1184
|
}
|
|
1126
1185
|
}
|
|
1127
1186
|
|
|
1128
|
-
// ../ssr/
|
|
1187
|
+
// ../ssr/src/render.ts
|
|
1129
1188
|
async function ssrRender(options) {
|
|
1130
1189
|
const { url, frameworkConfig, bootstrap, getErrorPage, renderApp } = options;
|
|
1131
1190
|
const framework = Framework.create(frameworkConfig);
|
|
@@ -1154,6 +1213,8 @@ async function ssrRender(options) {
|
|
|
1154
1213
|
serverData
|
|
1155
1214
|
};
|
|
1156
1215
|
}
|
|
1216
|
+
|
|
1217
|
+
// ../ssr/src/create-render.ts
|
|
1157
1218
|
function createSSRRender(config) {
|
|
1158
1219
|
const { bootstrap, getErrorPage, renderApp, frameworkConfig } = config;
|
|
1159
1220
|
return (url, locale) => ssrRender({
|
|
@@ -1164,12 +1225,25 @@ function createSSRRender(config) {
|
|
|
1164
1225
|
renderApp: (page) => renderApp(page, locale)
|
|
1165
1226
|
});
|
|
1166
1227
|
}
|
|
1228
|
+
|
|
1229
|
+
// ../ssr/src/inject.ts
|
|
1230
|
+
var SSR_PLACEHOLDERS = {
|
|
1231
|
+
LANG: "<!--ssr-lang-->",
|
|
1232
|
+
HEAD: "<!--ssr-head-->",
|
|
1233
|
+
BODY: "<!--ssr-body-->",
|
|
1234
|
+
DATA: "<!--ssr-data-->"
|
|
1235
|
+
};
|
|
1167
1236
|
function injectSSRContent(options) {
|
|
1168
1237
|
const { template, locale, head, css, html, serializedData } = options;
|
|
1169
1238
|
const cssTag = css ? `<style>${css}</style>` : "";
|
|
1170
|
-
return template.replace(
|
|
1171
|
-
${cssTag}`).replace(
|
|
1239
|
+
return template.replace(SSR_PLACEHOLDERS.LANG, locale).replace(SSR_PLACEHOLDERS.HEAD, `${head}
|
|
1240
|
+
${cssTag}`).replace(SSR_PLACEHOLDERS.BODY, html).replace(
|
|
1241
|
+
SSR_PLACEHOLDERS.DATA,
|
|
1242
|
+
`<script id="serialized-server-data" type="application/json">${serializedData}</script>`
|
|
1243
|
+
);
|
|
1172
1244
|
}
|
|
1245
|
+
|
|
1246
|
+
// ../ssr/src/server-data.ts
|
|
1173
1247
|
var HTML_REPLACEMENTS = {
|
|
1174
1248
|
"<": "\\u003C",
|
|
1175
1249
|
">": "\\u003E",
|
|
@@ -1186,15 +1260,14 @@ function serializeServerData(data) {
|
|
|
1186
1260
|
);
|
|
1187
1261
|
}
|
|
1188
1262
|
|
|
1189
|
-
// ../server/
|
|
1263
|
+
// ../server/src/app.ts
|
|
1190
1264
|
var import_hono = require("hono");
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
if (!header) return fallback;
|
|
1265
|
+
|
|
1266
|
+
// ../server/src/locale.ts
|
|
1267
|
+
function parseAcceptLanguage(header, supported, fallback) {
|
|
1268
|
+
const effectiveSupported = supported ?? ["zh", "en"];
|
|
1269
|
+
const effectiveFallback = fallback ?? effectiveSupported[0] ?? "en";
|
|
1270
|
+
if (!header) return effectiveFallback;
|
|
1198
1271
|
const langs = header.split(",").map((part) => {
|
|
1199
1272
|
const [lang, q] = part.trim().split(";q=");
|
|
1200
1273
|
return {
|
|
@@ -1204,12 +1277,15 @@ function parseAcceptLanguage(header, supported = DEFAULT_SUPPORTED, fallback = D
|
|
|
1204
1277
|
}).sort((a, b) => b.q - a.q);
|
|
1205
1278
|
for (const { lang } of langs) {
|
|
1206
1279
|
const prefix = lang.split("-")[0];
|
|
1207
|
-
if (
|
|
1280
|
+
if (effectiveSupported.includes(prefix)) {
|
|
1208
1281
|
return prefix;
|
|
1209
1282
|
}
|
|
1210
1283
|
}
|
|
1211
|
-
return
|
|
1284
|
+
return effectiveFallback;
|
|
1212
1285
|
}
|
|
1286
|
+
|
|
1287
|
+
// ../server/src/app.ts
|
|
1288
|
+
var import_meta = {};
|
|
1213
1289
|
function createSSRApp(options) {
|
|
1214
1290
|
const {
|
|
1215
1291
|
root,
|
|
@@ -1223,8 +1299,14 @@ function createSSRApp(options) {
|
|
|
1223
1299
|
const app = new import_hono.Hono();
|
|
1224
1300
|
async function readTemplate(url) {
|
|
1225
1301
|
if (!isProduction && vite) {
|
|
1226
|
-
const { readFileSync: readFileSync2 } = await import(
|
|
1227
|
-
|
|
1302
|
+
const { readFileSync: readFileSync2 } = await import(
|
|
1303
|
+
/* @vite-ignore */
|
|
1304
|
+
"fs"
|
|
1305
|
+
);
|
|
1306
|
+
const { resolve: resolve2 } = await import(
|
|
1307
|
+
/* @vite-ignore */
|
|
1308
|
+
"path"
|
|
1309
|
+
);
|
|
1228
1310
|
const raw = readFileSync2(resolve2(root, "index.html"), "utf-8");
|
|
1229
1311
|
return vite.transformIndexHtml(url, raw);
|
|
1230
1312
|
}
|
|
@@ -1234,8 +1316,14 @@ function createSSRApp(options) {
|
|
|
1234
1316
|
new URL("../dist/client/index.html", import_meta.url)
|
|
1235
1317
|
);
|
|
1236
1318
|
}
|
|
1237
|
-
const { readFileSync } = await import(
|
|
1238
|
-
|
|
1319
|
+
const { readFileSync } = await import(
|
|
1320
|
+
/* @vite-ignore */
|
|
1321
|
+
"fs"
|
|
1322
|
+
);
|
|
1323
|
+
const { resolve } = await import(
|
|
1324
|
+
/* @vite-ignore */
|
|
1325
|
+
"path"
|
|
1326
|
+
);
|
|
1239
1327
|
return readFileSync(resolve(root, "dist/client/index.html"), "utf-8");
|
|
1240
1328
|
}
|
|
1241
1329
|
async function loadSSRModule() {
|
|
@@ -1281,6 +1369,11 @@ function createSSRApp(options) {
|
|
|
1281
1369
|
});
|
|
1282
1370
|
return app;
|
|
1283
1371
|
}
|
|
1372
|
+
|
|
1373
|
+
// ../server/src/create-server.ts
|
|
1374
|
+
var import_hono3 = require("hono");
|
|
1375
|
+
|
|
1376
|
+
// ../server/src/runtime.ts
|
|
1284
1377
|
function detectRuntime() {
|
|
1285
1378
|
return {
|
|
1286
1379
|
isDeno: typeof globalThis.Deno !== "undefined",
|
|
@@ -1298,40 +1391,89 @@ async function resolveRoot(importMetaUrl, levelsUp = 0) {
|
|
|
1298
1391
|
}
|
|
1299
1392
|
return url.pathname;
|
|
1300
1393
|
}
|
|
1301
|
-
const { dirname, resolve, normalize } = await import(
|
|
1302
|
-
|
|
1394
|
+
const { dirname, resolve, normalize } = await import(
|
|
1395
|
+
/* @vite-ignore */
|
|
1396
|
+
"path"
|
|
1397
|
+
);
|
|
1398
|
+
const { fileURLToPath } = await import(
|
|
1399
|
+
/* @vite-ignore */
|
|
1400
|
+
"url"
|
|
1401
|
+
);
|
|
1303
1402
|
let dir = normalize(dirname(fileURLToPath(importMetaUrl)));
|
|
1304
1403
|
for (let i = 0; i < levelsUp; i++) {
|
|
1305
1404
|
dir = resolve(dir, "..");
|
|
1306
1405
|
}
|
|
1307
1406
|
return dir;
|
|
1308
1407
|
}
|
|
1408
|
+
|
|
1409
|
+
// ../server/src/start.ts
|
|
1410
|
+
var import_hono2 = require("hono");
|
|
1309
1411
|
async function startServer(options) {
|
|
1310
|
-
const {
|
|
1412
|
+
const {
|
|
1413
|
+
app,
|
|
1414
|
+
root,
|
|
1415
|
+
port = 3e3,
|
|
1416
|
+
isProduction,
|
|
1417
|
+
vite,
|
|
1418
|
+
routes,
|
|
1419
|
+
locales,
|
|
1420
|
+
ssrEntryPath
|
|
1421
|
+
} = options;
|
|
1311
1422
|
const { isDeno, isBun, isVercel } = options.runtime ?? detectRuntime();
|
|
1423
|
+
function printStartupBanner() {
|
|
1424
|
+
const lines = [
|
|
1425
|
+
`
|
|
1426
|
+
Server running at http://localhost:${port}
|
|
1427
|
+
`
|
|
1428
|
+
];
|
|
1429
|
+
if (routes && routes.length > 0) {
|
|
1430
|
+
lines.push(" Routes:");
|
|
1431
|
+
for (const r of routes) {
|
|
1432
|
+
lines.push(` ${r}`);
|
|
1433
|
+
}
|
|
1434
|
+
lines.push("");
|
|
1435
|
+
}
|
|
1436
|
+
if (locales && locales.length > 0) {
|
|
1437
|
+
lines.push(` Locales: ${locales.join(", ")}`);
|
|
1438
|
+
}
|
|
1439
|
+
if (ssrEntryPath) {
|
|
1440
|
+
lines.push(` SSR Entry: ${ssrEntryPath}`);
|
|
1441
|
+
}
|
|
1442
|
+
if (locales?.length || ssrEntryPath) {
|
|
1443
|
+
lines.push("");
|
|
1444
|
+
}
|
|
1445
|
+
console.log(lines.join("\n"));
|
|
1446
|
+
}
|
|
1312
1447
|
if (isVercel) {
|
|
1313
1448
|
return { vite };
|
|
1314
1449
|
}
|
|
1315
1450
|
if (!isProduction) {
|
|
1316
1451
|
let devVite = vite;
|
|
1317
1452
|
if (!devVite) {
|
|
1318
|
-
const { createServer: createViteServer } = await import(
|
|
1453
|
+
const { createServer: createViteServer } = await import(
|
|
1454
|
+
/* @vite-ignore */
|
|
1455
|
+
"vite"
|
|
1456
|
+
);
|
|
1319
1457
|
devVite = await createViteServer({
|
|
1320
1458
|
root,
|
|
1321
1459
|
server: { middlewareMode: true },
|
|
1322
1460
|
appType: "custom"
|
|
1323
1461
|
});
|
|
1324
1462
|
}
|
|
1325
|
-
const { getRequestListener } = await import(
|
|
1326
|
-
|
|
1463
|
+
const { getRequestListener } = await import(
|
|
1464
|
+
/* @vite-ignore */
|
|
1465
|
+
"@hono/node-server"
|
|
1466
|
+
);
|
|
1467
|
+
const { createServer: createServer2 } = await import(
|
|
1468
|
+
/* @vite-ignore */
|
|
1469
|
+
"http"
|
|
1470
|
+
);
|
|
1327
1471
|
const listener = getRequestListener(app.fetch);
|
|
1328
1472
|
const server = createServer2((req, res) => {
|
|
1329
1473
|
devVite.middlewares(req, res, () => listener(req, res));
|
|
1330
1474
|
});
|
|
1331
1475
|
server.listen(port, () => {
|
|
1332
|
-
|
|
1333
|
-
Server running at http://localhost:${port}
|
|
1334
|
-
`);
|
|
1476
|
+
printStartupBanner();
|
|
1335
1477
|
});
|
|
1336
1478
|
return { vite: devVite };
|
|
1337
1479
|
}
|
|
@@ -1339,20 +1481,29 @@ async function startServer(options) {
|
|
|
1339
1481
|
globalThis.Deno.serve({ port }, app.fetch);
|
|
1340
1482
|
} else if (isBun) {
|
|
1341
1483
|
} else {
|
|
1342
|
-
const { serveStatic } = await import(
|
|
1343
|
-
|
|
1344
|
-
|
|
1484
|
+
const { serveStatic } = await import(
|
|
1485
|
+
/* @vite-ignore */
|
|
1486
|
+
"@hono/node-server/serve-static"
|
|
1487
|
+
);
|
|
1488
|
+
const { resolve } = await import(
|
|
1489
|
+
/* @vite-ignore */
|
|
1490
|
+
"path"
|
|
1491
|
+
);
|
|
1492
|
+
const prodApp = new import_hono2.Hono();
|
|
1345
1493
|
prodApp.use("/*", serveStatic({ root: resolve(root, "dist/client") }));
|
|
1346
1494
|
prodApp.route("/", app);
|
|
1347
|
-
const { serve } = await import(
|
|
1495
|
+
const { serve } = await import(
|
|
1496
|
+
/* @vite-ignore */
|
|
1497
|
+
"@hono/node-server"
|
|
1498
|
+
);
|
|
1348
1499
|
serve({ fetch: prodApp.fetch, port }, () => {
|
|
1349
|
-
|
|
1350
|
-
Server running at http://localhost:${port}
|
|
1351
|
-
`);
|
|
1500
|
+
printStartupBanner();
|
|
1352
1501
|
});
|
|
1353
1502
|
}
|
|
1354
1503
|
return { vite };
|
|
1355
1504
|
}
|
|
1505
|
+
|
|
1506
|
+
// ../server/src/create-server.ts
|
|
1356
1507
|
async function createServer(config = {}) {
|
|
1357
1508
|
const {
|
|
1358
1509
|
root: rootOverride,
|
|
@@ -1363,12 +1514,21 @@ async function createServer(config = {}) {
|
|
|
1363
1514
|
ssr
|
|
1364
1515
|
} = config;
|
|
1365
1516
|
const root = rootOverride ?? process.cwd();
|
|
1366
|
-
const { existsSync } = await import(
|
|
1367
|
-
|
|
1517
|
+
const { existsSync } = await import(
|
|
1518
|
+
/* @vite-ignore */
|
|
1519
|
+
"fs"
|
|
1520
|
+
);
|
|
1521
|
+
const { resolve } = await import(
|
|
1522
|
+
/* @vite-ignore */
|
|
1523
|
+
"path"
|
|
1524
|
+
);
|
|
1368
1525
|
const envPath = resolve(root, ".env");
|
|
1369
1526
|
if (existsSync(envPath)) {
|
|
1370
1527
|
try {
|
|
1371
|
-
const { config: dotenvConfig } = await import(
|
|
1528
|
+
const { config: dotenvConfig } = await import(
|
|
1529
|
+
/* @vite-ignore */
|
|
1530
|
+
"dotenv"
|
|
1531
|
+
);
|
|
1372
1532
|
dotenvConfig({ path: envPath });
|
|
1373
1533
|
} catch {
|
|
1374
1534
|
}
|
|
@@ -1376,14 +1536,17 @@ async function createServer(config = {}) {
|
|
|
1376
1536
|
const runtime = detectRuntime();
|
|
1377
1537
|
let vite;
|
|
1378
1538
|
if (!runtime.isProduction && !runtime.isVercel) {
|
|
1379
|
-
const { createServer: createViteServer } = await import(
|
|
1539
|
+
const { createServer: createViteServer } = await import(
|
|
1540
|
+
/* @vite-ignore */
|
|
1541
|
+
"vite"
|
|
1542
|
+
);
|
|
1380
1543
|
vite = await createViteServer({
|
|
1381
1544
|
root,
|
|
1382
1545
|
server: { middlewareMode: true },
|
|
1383
1546
|
appType: "custom"
|
|
1384
1547
|
});
|
|
1385
1548
|
}
|
|
1386
|
-
const app = new
|
|
1549
|
+
const app = new import_hono3.Hono();
|
|
1387
1550
|
if (setup) {
|
|
1388
1551
|
await setup(app);
|
|
1389
1552
|
}
|
|
@@ -1402,7 +1565,9 @@ async function createServer(config = {}) {
|
|
|
1402
1565
|
port,
|
|
1403
1566
|
isProduction: runtime.isProduction,
|
|
1404
1567
|
vite,
|
|
1405
|
-
runtime
|
|
1568
|
+
runtime,
|
|
1569
|
+
locales,
|
|
1570
|
+
ssrEntryPath: ssr?.ssrEntryPath
|
|
1406
1571
|
});
|
|
1407
1572
|
return { app, vite, runtime };
|
|
1408
1573
|
}
|
|
@@ -1426,6 +1591,7 @@ async function createServer(config = {}) {
|
|
|
1426
1591
|
LruMap,
|
|
1427
1592
|
PrefetchedIntents,
|
|
1428
1593
|
Router,
|
|
1594
|
+
SSR_PLACEHOLDERS,
|
|
1429
1595
|
buildUrl,
|
|
1430
1596
|
createPrefetchedIntentsFromDom,
|
|
1431
1597
|
createSSRApp,
|