@gracile/engine 0.6.0 → 0.7.0-next.0
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/build/static.d.ts +8 -2
- package/dist/build/static.d.ts.map +1 -1
- package/dist/build/static.js +32 -7
- package/dist/dev/dev.d.ts +4 -1
- package/dist/dev/dev.d.ts.map +1 -1
- package/dist/dev/dev.js +12 -6
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +51 -40
- package/dist/render/markers.d.ts +3 -0
- package/dist/render/markers.d.ts.map +1 -0
- package/dist/render/markers.js +4 -0
- package/dist/render/route-template.d.ts +5 -10
- package/dist/render/route-template.d.ts.map +1 -1
- package/dist/render/route-template.js +32 -40
- package/dist/render/utils.d.ts +24 -1
- package/dist/render/utils.d.ts.map +1 -1
- package/dist/render/utils.js +23 -1
- package/dist/routes/collect.d.ts +1 -1
- package/dist/routes/collect.d.ts.map +1 -1
- package/dist/routes/collect.js +2 -2
- package/dist/routes/match.js +3 -3
- package/dist/routes/route.d.ts +1 -1
- package/dist/routes/route.d.ts.map +1 -1
- package/dist/server/adapters/hono.js +3 -3
- package/dist/server/adapters/node.d.ts.map +1 -1
- package/dist/server/adapters/node.js +3 -3
- package/dist/server/constants.d.ts +1 -1
- package/dist/server/constants.d.ts.map +1 -1
- package/dist/server/constants.js +1 -1
- package/dist/server/request.d.ts +3 -1
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +55 -31
- package/dist/server/utils.js +3 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/user-config.d.ts +35 -1
- package/dist/user-config.d.ts.map +1 -1
- package/dist/vite/plugins/build-routes.d.ts +6 -2
- package/dist/vite/plugins/build-routes.d.ts.map +1 -1
- package/dist/vite/plugins/build-routes.js +67 -35
- package/dist/vite/plugins/virtual-routes.d.ts +10 -0
- package/dist/vite/plugins/virtual-routes.d.ts.map +1 -1
- package/dist/vite/plugins/virtual-routes.js +54 -3
- package/package.json +7 -9
package/dist/routes/route.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export type Handler<Data extends HandlerData | HandlerDataHtml = never> = (conte
|
|
|
50
50
|
responseInit: ResponseInit;
|
|
51
51
|
}) => MaybePromise<Data> | MaybePromise<void>;
|
|
52
52
|
export type HandlerGeneric = Handler<HandlerData | HandlerDataHtml> | Partial<Record<MethodHtml, Handler<HandlerData | HandlerDataHtml>> & Record<MethodNonHtml, Handler<Response>>>;
|
|
53
|
-
export type StaticPathsGeneric = () => StaticPathOptionsGeneric[]
|
|
53
|
+
export type StaticPathsGeneric = () => MaybePromise<StaticPathOptionsGeneric[]>;
|
|
54
54
|
export type HandlerData = Response | undefined;
|
|
55
55
|
export type HandlerDataHtml = HandlerData | object;
|
|
56
56
|
export type StaticPathOptionsGeneric = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/routes/route.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;AACxC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AACjE,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAIhD,eAAO,MAAM,aAAa;;;;;;;;;CAShB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG;IAC3B,WAAW,CAAC,EAAE,kBAAkB,CAAmB;IAEnD,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAEhC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAEjD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,mBAAmB,CAAC;CACjE,CAAC;AAEF,qBAAa,WAAW;;IAGvB,IAAW,WAAW,mCAErB;IAID,IAAW,MAAM,OAEhB;IAID,IAAW,OAAO,wKAEjB;IAID,IAAW,QAAQ,sDAElB;IAID,IAAW,SAAS,wBAEnB;IAID,IAAW,QAAQ,eApCE,mBAAmB,KAAK,mBAAmB,cAsC/D;gBAEW,OAAO,EAAE,aAAa;CAsBlC;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAExD,MAAM,MAAM,OAAO,CAElB,IAAI,SAAS,WAAW,GAAG,eAAe,GAAG,KAAK,IAC/C,CAAC,OAAO,EAAE;IACb,GAAG,EAAE,GAAG,CAAC;IAET;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,OAAO,CAAC;IAEjB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;IAEvB;;;;;SAKK;IACL,YAAY,EAAE,YAAY,CAAC;CAC3B,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAE9C,MAAM,MAAM,cAAc,GACvB,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,GACtC,OAAO,CACP,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,GACzD,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CACxC,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAAG,MAAM,wBAAwB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/routes/route.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;AACxC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AACjE,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAIhD,eAAO,MAAM,aAAa;;;;;;;;;CAShB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG;IAC3B,WAAW,CAAC,EAAE,kBAAkB,CAAmB;IAEnD,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAEhC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAEjD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,mBAAmB,CAAC;CACjE,CAAC;AAEF,qBAAa,WAAW;;IAGvB,IAAW,WAAW,mCAErB;IAID,IAAW,MAAM,OAEhB;IAID,IAAW,OAAO,wKAEjB;IAID,IAAW,QAAQ,sDAElB;IAID,IAAW,SAAS,wBAEnB;IAID,IAAW,QAAQ,eApCE,mBAAmB,KAAK,mBAAmB,cAsC/D;gBAEW,OAAO,EAAE,aAAa;CAsBlC;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAExD,MAAM,MAAM,OAAO,CAElB,IAAI,SAAS,WAAW,GAAG,eAAe,GAAG,KAAK,IAC/C,CAAC,OAAO,EAAE;IACb,GAAG,EAAE,GAAG,CAAC;IAET;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,OAAO,CAAC;IAEjB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;IAEvB;;;;;SAKK;IACL,YAAY,EAAE,YAAY,CAAC;CAC3B,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAE9C,MAAM,MAAM,cAAc,GACvB,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,GACtC,OAAO,CACP,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,GACzD,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CACxC,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,MAAM,CAAC;AAEnD,MAAM,MAAM,wBAAwB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IACjC,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAC7C,cAAc,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAC1C,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAC3B,YAAY,SAAS,mBAAmB,GAAG,mBAAmB,IAE3D,CAAC,OAAO,EAAE,YAAY,KAAK,cAAc,CAAC;AAE9C,MAAM,MAAM,YAAY,CAAC,YAAY,IAAI,CACxC,OAAO,EAAE,YAAY,KACjB,mBAAmB,CAAC;AAKzB,MAAM,WAAW,KAAK;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CAErB;AAID,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { relative } from 'node:path';
|
|
3
3
|
import { Readable } from 'node:stream';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import {
|
|
5
|
+
import { constants } from '../constants.js';
|
|
6
6
|
/**
|
|
7
7
|
* @param handler - Takes a pre-built Gracile handler from `./dist/server/entrypoint.js`.
|
|
8
8
|
* @example
|
|
@@ -24,7 +24,7 @@ import { server } from '../constants.js';
|
|
|
24
24
|
*/
|
|
25
25
|
export const honoAdapter = (handler) => async (context) => {
|
|
26
26
|
const result = await handler(context.req.raw, context.var);
|
|
27
|
-
// TODO:
|
|
27
|
+
// TODO: Handle stream abortion as gracefully as with Express.
|
|
28
28
|
if (result?.body) {
|
|
29
29
|
// NOTE: Typings mismatches
|
|
30
30
|
const body = Readable.toWeb(result.body);
|
|
@@ -50,6 +50,6 @@ export const honoAdapter = (handler) => async (context) => {
|
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export function getClientDistPath(root) {
|
|
53
|
-
return relative(process.cwd(), fileURLToPath(new URL(
|
|
53
|
+
return relative(process.cwd(), fileURLToPath(new URL(constants.CLIENT_DIST_DIR, root)));
|
|
54
54
|
}
|
|
55
55
|
export { printUrls } from '../utils.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/node.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAG5D,OAAO,EAAE,KAAK,cAAc,EAAc,MAAM,eAAe,CAAC;AAoBhE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,MAAM,kBAAkB,GAAG,CAChC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,CAAC,EAAE,OAAO,KAEZ,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAkDvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,UAE7C;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { Writable } from 'node:stream';
|
|
1
2
|
import { fileURLToPath } from 'node:url';
|
|
2
3
|
import { env } from '@gracile/internal-utils/env';
|
|
3
4
|
import { logger } from '@gracile/internal-utils/logger';
|
|
4
5
|
import { createServerAdapter } from '@whatwg-node/server';
|
|
5
|
-
import {
|
|
6
|
-
import { server } from '../constants.js';
|
|
6
|
+
import { constants } from '../constants.js';
|
|
7
7
|
import { isRedirect } from '../request.js';
|
|
8
8
|
// NOTE: Find a more canonical way to ponyfill the Node HTTP request to standard Request
|
|
9
9
|
// @ts-expect-error Abusing this feature!
|
|
@@ -89,6 +89,6 @@ export function nodeAdapter(handler) {
|
|
|
89
89
|
* ```
|
|
90
90
|
*/
|
|
91
91
|
export function getClientDistPath(root) {
|
|
92
|
-
return fileURLToPath(new URL(
|
|
92
|
+
return fileURLToPath(new URL(constants.CLIENT_DIST_DIR, root));
|
|
93
93
|
}
|
|
94
94
|
export { printUrls } from '../utils.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/server/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/server/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS;;;;;;;EAQpB,CAAC"}
|
package/dist/server/constants.js
CHANGED
package/dist/server/request.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
2
|
import type { ViteDevServer } from 'vite';
|
|
3
3
|
import type * as R from '../routes/route.js';
|
|
4
|
+
import type { GracileConfig } from '../user-config.js';
|
|
4
5
|
type StandardResponse = {
|
|
5
6
|
response: Response;
|
|
6
7
|
body?: never;
|
|
@@ -18,13 +19,14 @@ export type GracileHandler = (request: Request, locals?: unknown) => Promise<Sta
|
|
|
18
19
|
export declare function isRedirect(response: Response): {
|
|
19
20
|
location: string;
|
|
20
21
|
} | null;
|
|
21
|
-
export declare function createGracileHandler({ vite, routes, routeImports, routeAssets, root, serverMode, }: {
|
|
22
|
+
export declare function createGracileHandler({ vite, routes, routeImports, routeAssets, root, serverMode, gracileConfig, }: {
|
|
22
23
|
vite?: ViteDevServer | undefined;
|
|
23
24
|
routes: R.RoutesManifest;
|
|
24
25
|
routeImports?: R.RoutesImports | undefined;
|
|
25
26
|
routeAssets?: R.RoutesAssets;
|
|
26
27
|
root: string;
|
|
27
28
|
serverMode?: boolean | undefined;
|
|
29
|
+
gracileConfig: GracileConfig;
|
|
28
30
|
}): GracileHandler;
|
|
29
31
|
export {};
|
|
30
32
|
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/server/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/server/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKvC,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,MAAM,CAAC;AAOxD,OAAO,KAAK,KAAK,CAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAC3E,KAAK,wBAAwB,GAAG;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC5B,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,OAAO,KACZ,OAAO,CAAC,gBAAgB,GAAG,wBAAwB,GAAG,IAAI,CAAC,CAAC;AAIjE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO1E;AAED,wBAAgB,oBAAoB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,UAAU,EACV,aAAa,GACb,EAAE;IACF,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC;IAC3C,WAAW,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;CAC7B,kBA8QA"}
|
package/dist/server/request.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
2
|
import { logger } from '@gracile/internal-utils/logger';
|
|
3
|
+
// import { logger } from '@gracile/internal-utils/logger/vite-logger';
|
|
3
4
|
import c from 'picocolors';
|
|
4
5
|
import * as assert from '../assertions.js';
|
|
5
6
|
import { errorPage } from '../errors/templates.js';
|
|
6
7
|
import { renderRouteTemplate } from '../render/route-template.js';
|
|
7
|
-
import {
|
|
8
|
+
import { renderLitTemplate } from '../render/utils.js';
|
|
8
9
|
import { getRoute } from '../routes/match.js';
|
|
9
10
|
const CONTENT_TYPE_HTML = { 'Content-Type': 'text/html' };
|
|
10
11
|
export function isRedirect(response) {
|
|
@@ -14,19 +15,26 @@ export function isRedirect(response) {
|
|
|
14
15
|
}
|
|
15
16
|
return null;
|
|
16
17
|
}
|
|
17
|
-
export function createGracileHandler({ vite, routes, routeImports, routeAssets, root, serverMode, }) {
|
|
18
|
+
export function createGracileHandler({ vite, routes, routeImports, routeAssets, root, serverMode, gracileConfig, }) {
|
|
18
19
|
async function createErrorPage(urlPath, e) {
|
|
19
20
|
logger.error(e.message);
|
|
20
|
-
let errorPageHtml = await
|
|
21
|
+
let errorPageHtml = await renderLitTemplate(errorPage(e));
|
|
21
22
|
if (vite)
|
|
22
23
|
errorPageHtml = await vite.transformIndexHtml(urlPath, errorPageHtml);
|
|
23
24
|
return { errorPageHtml, headers: { ...CONTENT_TYPE_HTML } };
|
|
24
25
|
}
|
|
25
26
|
const middleware = async (request, locals) => {
|
|
26
27
|
try {
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
const { url: requestedUrl, method } = request;
|
|
29
|
+
// MARK: Rewrite hidden route siblings
|
|
30
|
+
const fullUrl = requestedUrl.replace(/\/__(.*)$/, '/');
|
|
29
31
|
// MARK: Get route infos
|
|
32
|
+
const exposePremises = gracileConfig.pages?.premises?.expose
|
|
33
|
+
? {
|
|
34
|
+
propsOnly: /\/__(.*?)\.props\.json$/.test(requestedUrl),
|
|
35
|
+
docOnly: /\/__(.*?)\.doc\.html$/.test(requestedUrl),
|
|
36
|
+
}
|
|
37
|
+
: null;
|
|
30
38
|
const routeOptions = {
|
|
31
39
|
url: fullUrl,
|
|
32
40
|
vite,
|
|
@@ -34,7 +42,7 @@ export function createGracileHandler({ vite, routes, routeImports, routeAssets,
|
|
|
34
42
|
routeImports,
|
|
35
43
|
};
|
|
36
44
|
const routeInfos = await getRoute(routeOptions).catch(async (error) => {
|
|
37
|
-
// MARK: User defined Gracile 404
|
|
45
|
+
// MARK: User defined Gracile 404 rewriting
|
|
38
46
|
logger.error(String(error));
|
|
39
47
|
const url = new URL('/404/', fullUrl).href;
|
|
40
48
|
const options = { ...routeOptions, url };
|
|
@@ -54,13 +62,14 @@ export function createGracileHandler({ vite, routes, routeImports, routeAssets,
|
|
|
54
62
|
};
|
|
55
63
|
}
|
|
56
64
|
const routeTemplateOptions = {
|
|
57
|
-
|
|
65
|
+
url: fullUrl,
|
|
58
66
|
vite,
|
|
59
67
|
mode: 'dev', // vite && vite.config.mode === 'dev' ? 'dev' : 'build',
|
|
60
68
|
routeAssets,
|
|
61
69
|
root,
|
|
62
70
|
serverMode,
|
|
63
71
|
routeInfos,
|
|
72
|
+
docOnly: exposePremises?.docOnly,
|
|
64
73
|
};
|
|
65
74
|
logger.info(`[${c.yellow(method)}] ${c.yellow(fullUrl)}`, {
|
|
66
75
|
timestamp: true,
|
|
@@ -72,10 +81,9 @@ export function createGracileHandler({ vite, routes, routeImports, routeAssets,
|
|
|
72
81
|
// MARK: Server handler
|
|
73
82
|
const handler = routeInfos.routeModule.handler;
|
|
74
83
|
const responseInit = {};
|
|
75
|
-
// TODO: should move this to `special-file` so we don't recalculate on each request
|
|
76
|
-
// + we would be able to do some route codegen.
|
|
77
84
|
if (('handler' in routeInfos.routeModule &&
|
|
78
85
|
typeof handler !== 'undefined') ||
|
|
86
|
+
// TODO: Explain this condition
|
|
79
87
|
(handler && 'GET' in handler === false && method !== 'GET')) {
|
|
80
88
|
const routeContext = Object.freeze({
|
|
81
89
|
request,
|
|
@@ -105,28 +113,34 @@ export function createGracileHandler({ vite, routes, routeImports, routeAssets,
|
|
|
105
113
|
// await useHandler();
|
|
106
114
|
// }
|
|
107
115
|
//
|
|
108
|
-
// MARK:
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
throw new TypeError('Catch-all handler must return a Response object.');
|
|
115
|
-
// MARK: Handler with method
|
|
116
|
-
}
|
|
117
|
-
else if (method in handler) {
|
|
118
|
-
const handlerWithMethod = handler[method];
|
|
116
|
+
// MARK: Handler(s)
|
|
117
|
+
const hasTopLevelHandler = typeof handler === 'function';
|
|
118
|
+
if (hasTopLevelHandler || method in handler) {
|
|
119
|
+
const handlerWithMethod = hasTopLevelHandler
|
|
120
|
+
? handler
|
|
121
|
+
: handler[method];
|
|
119
122
|
if (typeof handlerWithMethod !== 'function')
|
|
120
123
|
throw TypeError('Handler must be a function.');
|
|
121
124
|
const handlerOutput = await Promise.resolve(handlerWithMethod(routeContext));
|
|
122
125
|
if (assert.isResponseOrPatchedResponse(handlerOutput))
|
|
123
126
|
output = handlerOutput;
|
|
124
127
|
else {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
routeTemplateOptions.routeInfos.props = hasTopLevelHandler
|
|
129
|
+
? handlerOutput
|
|
130
|
+
: { [method]: handlerOutput };
|
|
131
|
+
if (exposePremises?.docOnly) {
|
|
132
|
+
const { document } = await renderRouteTemplate(routeTemplateOptions);
|
|
133
|
+
return {
|
|
134
|
+
response: new Response(document, {
|
|
135
|
+
headers: { ...CONTENT_TYPE_HTML },
|
|
136
|
+
}),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (exposePremises?.propsOnly)
|
|
140
|
+
return {
|
|
141
|
+
response: Response.json(routeTemplateOptions.routeInfos.props),
|
|
142
|
+
};
|
|
143
|
+
output = await renderRouteTemplate(routeTemplateOptions).then((r) => r.output);
|
|
130
144
|
}
|
|
131
145
|
// MARK: No GET, render page
|
|
132
146
|
}
|
|
@@ -138,11 +152,19 @@ export function createGracileHandler({ vite, routes, routeImports, routeAssets,
|
|
|
138
152
|
}
|
|
139
153
|
}
|
|
140
154
|
else {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
155
|
+
if (exposePremises?.docOnly) {
|
|
156
|
+
const { document } = await renderRouteTemplate(routeTemplateOptions);
|
|
157
|
+
return {
|
|
158
|
+
response: new Response(document, {
|
|
159
|
+
headers: { ...CONTENT_TYPE_HTML },
|
|
160
|
+
}),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (exposePremises?.propsOnly)
|
|
164
|
+
return {
|
|
165
|
+
response: Response.json(routeTemplateOptions.routeInfos.props || {}),
|
|
166
|
+
};
|
|
167
|
+
output = await renderRouteTemplate(routeTemplateOptions).then((r) => r.output);
|
|
146
168
|
}
|
|
147
169
|
// MARK: Return response
|
|
148
170
|
// NOTE: try directly with the requestPonyfill. This might not be necessary
|
|
@@ -183,7 +205,9 @@ export function createGracileHandler({ vite, routes, routeImports, routeAssets,
|
|
|
183
205
|
// NOTE: Arbitrary value. Lower seems to be too fast, higher is not guaranteed to work.
|
|
184
206
|
}, 750);
|
|
185
207
|
}
|
|
186
|
-
|
|
208
|
+
else {
|
|
209
|
+
logger.error(errorMessage);
|
|
210
|
+
}
|
|
187
211
|
}),
|
|
188
212
|
init: responseInit,
|
|
189
213
|
};
|
package/dist/server/utils.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { env as currentEnv } from '@gracile/internal-utils/env';
|
|
3
3
|
import { logger } from '@gracile/internal-utils/logger';
|
|
4
4
|
import c from 'picocolors';
|
|
5
|
-
import {
|
|
5
|
+
import { constants } from './constants.js';
|
|
6
6
|
// setTimeout(() => {
|
|
7
7
|
// logger.info('HY');
|
|
8
8
|
// });
|
|
@@ -52,8 +52,8 @@ export function printUrls(server) {
|
|
|
52
52
|
logger.info(c.green(`${envs[env]} ${c.yellow('server started')}`), {
|
|
53
53
|
timestamp: true,
|
|
54
54
|
});
|
|
55
|
-
if (address.includes(
|
|
56
|
-
logger.info(`${address.includes(
|
|
55
|
+
if (address.includes(constants.IP_EXPOSED))
|
|
56
|
+
logger.info(`${address.includes(constants.IP_EXPOSED)
|
|
57
57
|
? `\n${c.dim('┃')} Network ${c.cyan(address)}\n`
|
|
58
58
|
: ''}`);
|
|
59
59
|
else
|