@mokup/server 1.1.1 → 1.1.3
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 +9 -0
- package/README.zh-CN.md +9 -0
- package/dist/connect.cjs +25 -0
- package/dist/connect.d.cts +19 -0
- package/dist/connect.d.mts +19 -0
- package/dist/connect.d.ts +19 -0
- package/dist/connect.mjs +23 -0
- package/dist/express.cjs +11 -0
- package/dist/express.d.cts +18 -0
- package/dist/express.d.mts +18 -0
- package/dist/express.d.ts +18 -0
- package/dist/express.mjs +9 -0
- package/dist/fastify.cjs +39 -0
- package/dist/fastify.d.cts +29 -0
- package/dist/fastify.d.mts +29 -0
- package/dist/fastify.d.ts +29 -0
- package/dist/fastify.mjs +37 -0
- package/dist/fetch-server.cjs +1659 -0
- package/dist/fetch-server.d.cts +108 -0
- package/dist/fetch-server.d.mts +108 -0
- package/dist/fetch-server.d.ts +108 -0
- package/dist/fetch-server.mjs +1652 -0
- package/dist/fetch.cjs +26 -0
- package/dist/fetch.d.cts +17 -0
- package/dist/fetch.d.mts +17 -0
- package/dist/fetch.d.ts +17 -0
- package/dist/fetch.mjs +24 -0
- package/dist/hono.cjs +27 -0
- package/dist/hono.d.cts +32 -0
- package/dist/hono.d.mts +32 -0
- package/dist/hono.d.ts +32 -0
- package/dist/hono.mjs +25 -0
- package/dist/index.cjs +29 -1677
- package/dist/index.d.cts +42 -136
- package/dist/index.d.mts +42 -136
- package/dist/index.d.ts +42 -136
- package/dist/index.mjs +28 -1666
- package/dist/koa.cjs +38 -0
- package/dist/koa.d.cts +29 -0
- package/dist/koa.d.mts +29 -0
- package/dist/koa.d.ts +29 -0
- package/dist/koa.mjs +36 -0
- package/dist/node.cjs +26 -0
- package/dist/node.d.cts +13 -0
- package/dist/node.d.mts +13 -0
- package/dist/node.d.ts +13 -0
- package/dist/node.mjs +19 -0
- package/dist/shared/server.CyVIKPsp.d.cts +214 -0
- package/dist/shared/server.CyVIKPsp.d.mts +214 -0
- package/dist/shared/server.CyVIKPsp.d.ts +214 -0
- package/dist/shared/server.D0gAciOr.d.cts +46 -0
- package/dist/shared/server.D0gAciOr.d.mts +46 -0
- package/dist/shared/server.D0gAciOr.d.ts +46 -0
- package/dist/shared/server.DkerfsA-.d.cts +73 -0
- package/dist/shared/server.DkerfsA-.d.mts +73 -0
- package/dist/shared/server.DkerfsA-.d.ts +73 -0
- package/dist/shared/{server.Dje1y79O.mjs → server.LbftO9Jh.mjs} +58 -77
- package/dist/shared/{server.BdTl0qJd.cjs → server.aaygIV2Q.cjs} +59 -77
- package/dist/worker-node.cjs +74 -0
- package/dist/worker-node.d.cts +40 -0
- package/dist/worker-node.d.mts +40 -0
- package/dist/worker-node.d.ts +40 -0
- package/dist/worker-node.mjs +72 -0
- package/dist/worker.cjs +6 -2
- package/dist/worker.d.cts +24 -2
- package/dist/worker.d.mts +24 -2
- package/dist/worker.d.ts +24 -2
- package/dist/worker.mjs +6 -2
- package/package.json +44 -4
- package/dist/shared/server.DNITwCtQ.d.cts +0 -15
- package/dist/shared/server.DNITwCtQ.d.mts +0 -15
- package/dist/shared/server.DNITwCtQ.d.ts +0 -15
package/dist/koa.cjs
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const runtime = require('@mokup/runtime');
|
|
4
|
+
const runtime$1 = require('./shared/server.aaygIV2Q.cjs');
|
|
5
|
+
|
|
6
|
+
function createKoaMiddleware(options) {
|
|
7
|
+
const runtime$2 = runtime.createRuntime(runtime$1.toRuntimeOptions(options));
|
|
8
|
+
const onNotFound = options.onNotFound ?? "next";
|
|
9
|
+
return async (ctx, next) => {
|
|
10
|
+
const runtimeRequest = await runtime$1.toRuntimeRequestFromNode(
|
|
11
|
+
ctx.req,
|
|
12
|
+
ctx.request?.body
|
|
13
|
+
);
|
|
14
|
+
const result = await runtime$2.handle(runtimeRequest);
|
|
15
|
+
if (!result) {
|
|
16
|
+
if (onNotFound === "response") {
|
|
17
|
+
ctx.status = 404;
|
|
18
|
+
ctx.body = null;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await next();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
ctx.status = result.status;
|
|
25
|
+
ctx.set(result.headers);
|
|
26
|
+
if (result.body === null) {
|
|
27
|
+
ctx.body = null;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (typeof result.body === "string") {
|
|
31
|
+
ctx.body = result.body;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
ctx.body = runtime$1.toBinaryBody(result.body);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
exports.createKoaMiddleware = createKoaMiddleware;
|
package/dist/koa.d.cts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { N as NodeRequestLike } from './shared/server.D0gAciOr.cjs';
|
|
2
|
+
import { S as ServerOptions } from './shared/server.DkerfsA-.cjs';
|
|
3
|
+
import '@mokup/runtime';
|
|
4
|
+
|
|
5
|
+
interface KoaContextLike {
|
|
6
|
+
req: NodeRequestLike;
|
|
7
|
+
request?: {
|
|
8
|
+
body?: unknown;
|
|
9
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
10
|
+
};
|
|
11
|
+
status?: number;
|
|
12
|
+
body?: unknown;
|
|
13
|
+
set: (header: Record<string, string>) => void;
|
|
14
|
+
}
|
|
15
|
+
type KoaNext = () => Promise<unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a Koa middleware from server options.
|
|
18
|
+
*
|
|
19
|
+
* @param options - Server options.
|
|
20
|
+
* @returns Koa middleware handler.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* import { createKoaMiddleware } from '@mokup/server'
|
|
24
|
+
*
|
|
25
|
+
* const middleware = createKoaMiddleware({ manifest: { version: 1, routes: [] } })
|
|
26
|
+
*/
|
|
27
|
+
declare function createKoaMiddleware(options: ServerOptions): (ctx: KoaContextLike, next: KoaNext) => Promise<void>;
|
|
28
|
+
|
|
29
|
+
export { createKoaMiddleware };
|
package/dist/koa.d.mts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { N as NodeRequestLike } from './shared/server.D0gAciOr.mjs';
|
|
2
|
+
import { S as ServerOptions } from './shared/server.DkerfsA-.mjs';
|
|
3
|
+
import '@mokup/runtime';
|
|
4
|
+
|
|
5
|
+
interface KoaContextLike {
|
|
6
|
+
req: NodeRequestLike;
|
|
7
|
+
request?: {
|
|
8
|
+
body?: unknown;
|
|
9
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
10
|
+
};
|
|
11
|
+
status?: number;
|
|
12
|
+
body?: unknown;
|
|
13
|
+
set: (header: Record<string, string>) => void;
|
|
14
|
+
}
|
|
15
|
+
type KoaNext = () => Promise<unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a Koa middleware from server options.
|
|
18
|
+
*
|
|
19
|
+
* @param options - Server options.
|
|
20
|
+
* @returns Koa middleware handler.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* import { createKoaMiddleware } from '@mokup/server'
|
|
24
|
+
*
|
|
25
|
+
* const middleware = createKoaMiddleware({ manifest: { version: 1, routes: [] } })
|
|
26
|
+
*/
|
|
27
|
+
declare function createKoaMiddleware(options: ServerOptions): (ctx: KoaContextLike, next: KoaNext) => Promise<void>;
|
|
28
|
+
|
|
29
|
+
export { createKoaMiddleware };
|
package/dist/koa.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { N as NodeRequestLike } from './shared/server.D0gAciOr.js';
|
|
2
|
+
import { S as ServerOptions } from './shared/server.DkerfsA-.js';
|
|
3
|
+
import '@mokup/runtime';
|
|
4
|
+
|
|
5
|
+
interface KoaContextLike {
|
|
6
|
+
req: NodeRequestLike;
|
|
7
|
+
request?: {
|
|
8
|
+
body?: unknown;
|
|
9
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
10
|
+
};
|
|
11
|
+
status?: number;
|
|
12
|
+
body?: unknown;
|
|
13
|
+
set: (header: Record<string, string>) => void;
|
|
14
|
+
}
|
|
15
|
+
type KoaNext = () => Promise<unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a Koa middleware from server options.
|
|
18
|
+
*
|
|
19
|
+
* @param options - Server options.
|
|
20
|
+
* @returns Koa middleware handler.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* import { createKoaMiddleware } from '@mokup/server'
|
|
24
|
+
*
|
|
25
|
+
* const middleware = createKoaMiddleware({ manifest: { version: 1, routes: [] } })
|
|
26
|
+
*/
|
|
27
|
+
declare function createKoaMiddleware(options: ServerOptions): (ctx: KoaContextLike, next: KoaNext) => Promise<void>;
|
|
28
|
+
|
|
29
|
+
export { createKoaMiddleware };
|
package/dist/koa.mjs
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createRuntime } from '@mokup/runtime';
|
|
2
|
+
import { t as toRuntimeOptions, a as toRuntimeRequestFromNode, c as toBinaryBody } from './shared/server.LbftO9Jh.mjs';
|
|
3
|
+
|
|
4
|
+
function createKoaMiddleware(options) {
|
|
5
|
+
const runtime = createRuntime(toRuntimeOptions(options));
|
|
6
|
+
const onNotFound = options.onNotFound ?? "next";
|
|
7
|
+
return async (ctx, next) => {
|
|
8
|
+
const runtimeRequest = await toRuntimeRequestFromNode(
|
|
9
|
+
ctx.req,
|
|
10
|
+
ctx.request?.body
|
|
11
|
+
);
|
|
12
|
+
const result = await runtime.handle(runtimeRequest);
|
|
13
|
+
if (!result) {
|
|
14
|
+
if (onNotFound === "response") {
|
|
15
|
+
ctx.status = 404;
|
|
16
|
+
ctx.body = null;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
await next();
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
ctx.status = result.status;
|
|
23
|
+
ctx.set(result.headers);
|
|
24
|
+
if (result.body === null) {
|
|
25
|
+
ctx.body = null;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (typeof result.body === "string") {
|
|
29
|
+
ctx.body = result.body;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
ctx.body = toBinaryBody(result.body);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { createKoaMiddleware };
|
package/dist/node.cjs
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const connect = require('./connect.cjs');
|
|
4
|
+
const express = require('./express.cjs');
|
|
5
|
+
const fastify = require('./fastify.cjs');
|
|
6
|
+
const fetchServer = require('./fetch-server.cjs');
|
|
7
|
+
const hono = require('./hono.cjs');
|
|
8
|
+
const koa = require('./koa.cjs');
|
|
9
|
+
const workerNode = require('./worker-node.cjs');
|
|
3
10
|
const nodeServer = require('@hono/node-server');
|
|
11
|
+
require('@mokup/runtime');
|
|
12
|
+
require('./shared/server.aaygIV2Q.cjs');
|
|
13
|
+
require('@mokup/shared/pathe');
|
|
14
|
+
require('node:fs');
|
|
15
|
+
require('node:module');
|
|
16
|
+
require('node:process');
|
|
17
|
+
require('node:buffer');
|
|
18
|
+
require('node:url');
|
|
19
|
+
require('@mokup/shared/esbuild');
|
|
20
|
+
require('@mokup/shared/jsonc-parser');
|
|
21
|
+
require('@mokup/shared/hono');
|
|
22
|
+
require('./fetch.cjs');
|
|
4
23
|
|
|
5
24
|
|
|
6
25
|
|
|
26
|
+
exports.createConnectMiddleware = connect.createConnectMiddleware;
|
|
27
|
+
exports.createExpressMiddleware = express.createExpressMiddleware;
|
|
28
|
+
exports.createFastifyPlugin = fastify.createFastifyPlugin;
|
|
29
|
+
exports.createFetchServer = fetchServer.createFetchServer;
|
|
30
|
+
exports.createHonoMiddleware = hono.createHonoMiddleware;
|
|
31
|
+
exports.createKoaMiddleware = koa.createKoaMiddleware;
|
|
32
|
+
exports.createMokupWorker = workerNode.createMokupWorker;
|
|
7
33
|
exports.serve = nodeServer.serve;
|
package/dist/node.d.cts
CHANGED
|
@@ -1 +1,14 @@
|
|
|
1
|
+
export { createConnectMiddleware } from './connect.cjs';
|
|
2
|
+
export { createExpressMiddleware } from './express.cjs';
|
|
3
|
+
export { createFastifyPlugin } from './fastify.cjs';
|
|
4
|
+
export { FetchServer, FetchServerOptions, FetchServerOptionsConfig, FetchServerOptionsInput, createFetchServer } from './fetch-server.cjs';
|
|
5
|
+
export { createHonoMiddleware } from './hono.cjs';
|
|
6
|
+
export { createKoaMiddleware } from './koa.cjs';
|
|
7
|
+
export { NodeWorkerInput, createMokupWorker } from './worker-node.cjs';
|
|
1
8
|
export { serve } from '@hono/node-server';
|
|
9
|
+
import './shared/server.D0gAciOr.cjs';
|
|
10
|
+
import './shared/server.DkerfsA-.cjs';
|
|
11
|
+
import '@mokup/runtime';
|
|
12
|
+
import './shared/server.CyVIKPsp.cjs';
|
|
13
|
+
import '@mokup/shared/hono';
|
|
14
|
+
import '@mokup/shared';
|
package/dist/node.d.mts
CHANGED
|
@@ -1 +1,14 @@
|
|
|
1
|
+
export { createConnectMiddleware } from './connect.mjs';
|
|
2
|
+
export { createExpressMiddleware } from './express.mjs';
|
|
3
|
+
export { createFastifyPlugin } from './fastify.mjs';
|
|
4
|
+
export { FetchServer, FetchServerOptions, FetchServerOptionsConfig, FetchServerOptionsInput, createFetchServer } from './fetch-server.mjs';
|
|
5
|
+
export { createHonoMiddleware } from './hono.mjs';
|
|
6
|
+
export { createKoaMiddleware } from './koa.mjs';
|
|
7
|
+
export { NodeWorkerInput, createMokupWorker } from './worker-node.mjs';
|
|
1
8
|
export { serve } from '@hono/node-server';
|
|
9
|
+
import './shared/server.D0gAciOr.mjs';
|
|
10
|
+
import './shared/server.DkerfsA-.mjs';
|
|
11
|
+
import '@mokup/runtime';
|
|
12
|
+
import './shared/server.CyVIKPsp.mjs';
|
|
13
|
+
import '@mokup/shared/hono';
|
|
14
|
+
import '@mokup/shared';
|
package/dist/node.d.ts
CHANGED
|
@@ -1 +1,14 @@
|
|
|
1
|
+
export { createConnectMiddleware } from './connect.js';
|
|
2
|
+
export { createExpressMiddleware } from './express.js';
|
|
3
|
+
export { createFastifyPlugin } from './fastify.js';
|
|
4
|
+
export { FetchServer, FetchServerOptions, FetchServerOptionsConfig, FetchServerOptionsInput, createFetchServer } from './fetch-server.js';
|
|
5
|
+
export { createHonoMiddleware } from './hono.js';
|
|
6
|
+
export { createKoaMiddleware } from './koa.js';
|
|
7
|
+
export { NodeWorkerInput, createMokupWorker } from './worker-node.js';
|
|
1
8
|
export { serve } from '@hono/node-server';
|
|
9
|
+
import './shared/server.D0gAciOr.js';
|
|
10
|
+
import './shared/server.DkerfsA-.js';
|
|
11
|
+
import '@mokup/runtime';
|
|
12
|
+
import './shared/server.CyVIKPsp.js';
|
|
13
|
+
import '@mokup/shared/hono';
|
|
14
|
+
import '@mokup/shared';
|
package/dist/node.mjs
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
|
+
export { createConnectMiddleware } from './connect.mjs';
|
|
2
|
+
export { createExpressMiddleware } from './express.mjs';
|
|
3
|
+
export { createFastifyPlugin } from './fastify.mjs';
|
|
4
|
+
export { createFetchServer } from './fetch-server.mjs';
|
|
5
|
+
export { createHonoMiddleware } from './hono.mjs';
|
|
6
|
+
export { createKoaMiddleware } from './koa.mjs';
|
|
7
|
+
export { createMokupWorker } from './worker-node.mjs';
|
|
1
8
|
export { serve } from '@hono/node-server';
|
|
9
|
+
import '@mokup/runtime';
|
|
10
|
+
import './shared/server.LbftO9Jh.mjs';
|
|
11
|
+
import '@mokup/shared/pathe';
|
|
12
|
+
import 'node:fs';
|
|
13
|
+
import 'node:module';
|
|
14
|
+
import 'node:process';
|
|
15
|
+
import 'node:buffer';
|
|
16
|
+
import 'node:url';
|
|
17
|
+
import '@mokup/shared/esbuild';
|
|
18
|
+
import '@mokup/shared/jsonc-parser';
|
|
19
|
+
import '@mokup/shared/hono';
|
|
20
|
+
import './fetch.mjs';
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { RouteToken } from '@mokup/runtime';
|
|
2
|
+
import { MiddlewareHandler, Context } from '@mokup/shared/hono';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Supported HTTP methods for server dev routes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import type { HttpMethod } from '@mokup/server'
|
|
9
|
+
*
|
|
10
|
+
* const method: HttpMethod = 'GET'
|
|
11
|
+
*/
|
|
12
|
+
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
|
|
13
|
+
/**
|
|
14
|
+
* Static response payloads supported by route rules.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import type { RouteStaticResponse } from '@mokup/server'
|
|
18
|
+
*
|
|
19
|
+
* const value: RouteStaticResponse = { ok: true }
|
|
20
|
+
*/
|
|
21
|
+
type RouteStaticResponse = string | number | boolean | bigint | symbol | null | undefined | object;
|
|
22
|
+
/**
|
|
23
|
+
* Allowed return value from a route handler.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* import type { RouteHandlerResult } from '@mokup/server'
|
|
27
|
+
*
|
|
28
|
+
* const result: RouteHandlerResult = 'ok'
|
|
29
|
+
*/
|
|
30
|
+
type RouteHandlerResult = RouteStaticResponse | Response;
|
|
31
|
+
/**
|
|
32
|
+
* Request handler signature for server dev routes.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* import type { RequestHandler } from '@mokup/server'
|
|
36
|
+
*
|
|
37
|
+
* const handler: RequestHandler = (c) => c.json({ ok: true })
|
|
38
|
+
*/
|
|
39
|
+
type RequestHandler = (context: Context) => RouteHandlerResult | Promise<RouteHandlerResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Route response as a static value or handler.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* import type { RouteResponse } from '@mokup/server'
|
|
45
|
+
*
|
|
46
|
+
* const response: RouteResponse = { ok: true }
|
|
47
|
+
*/
|
|
48
|
+
type RouteResponse = RouteStaticResponse | RequestHandler;
|
|
49
|
+
/**
|
|
50
|
+
* Rule metadata for a route handler.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* import type { RouteRule } from '@mokup/server'
|
|
54
|
+
*
|
|
55
|
+
* const rule: RouteRule = {
|
|
56
|
+
* handler: () => ({ ok: true }),
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
interface RouteRule {
|
|
60
|
+
/** Handler for the route. */
|
|
61
|
+
handler: RouteResponse;
|
|
62
|
+
/**
|
|
63
|
+
* Enable or disable this rule.
|
|
64
|
+
*
|
|
65
|
+
* @default true
|
|
66
|
+
*/
|
|
67
|
+
enabled?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Override response status code.
|
|
70
|
+
*
|
|
71
|
+
* @default 200
|
|
72
|
+
*/
|
|
73
|
+
status?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Additional response headers.
|
|
76
|
+
*
|
|
77
|
+
* @default {}
|
|
78
|
+
*/
|
|
79
|
+
headers?: Record<string, string>;
|
|
80
|
+
/**
|
|
81
|
+
* Delay in milliseconds before responding.
|
|
82
|
+
*
|
|
83
|
+
* @default 0
|
|
84
|
+
*/
|
|
85
|
+
delay?: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Directory-level config for server dev scanning.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* import type { RouteDirectoryConfig } from '@mokup/server'
|
|
92
|
+
*
|
|
93
|
+
* const config: RouteDirectoryConfig = { headers: { 'x-mokup': 'dir' } }
|
|
94
|
+
*/
|
|
95
|
+
interface RouteDirectoryConfig {
|
|
96
|
+
/**
|
|
97
|
+
* Headers applied to routes in this directory.
|
|
98
|
+
*
|
|
99
|
+
* @default {}
|
|
100
|
+
*/
|
|
101
|
+
headers?: Record<string, string>;
|
|
102
|
+
/**
|
|
103
|
+
* Default status code override.
|
|
104
|
+
*
|
|
105
|
+
* @default 200
|
|
106
|
+
*/
|
|
107
|
+
status?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Default delay in milliseconds.
|
|
110
|
+
*
|
|
111
|
+
* @default 0
|
|
112
|
+
*/
|
|
113
|
+
delay?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Enable or disable this directory.
|
|
116
|
+
*
|
|
117
|
+
* @default true
|
|
118
|
+
*/
|
|
119
|
+
enabled?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Ignore prefixes for files.
|
|
122
|
+
*
|
|
123
|
+
* @default ["."]
|
|
124
|
+
*/
|
|
125
|
+
ignorePrefix?: string | string[];
|
|
126
|
+
/**
|
|
127
|
+
* Include filter.
|
|
128
|
+
*
|
|
129
|
+
* @default undefined
|
|
130
|
+
*/
|
|
131
|
+
include?: RegExp | RegExp[];
|
|
132
|
+
/**
|
|
133
|
+
* Exclude filter.
|
|
134
|
+
*
|
|
135
|
+
* @default undefined
|
|
136
|
+
*/
|
|
137
|
+
exclude?: RegExp | RegExp[];
|
|
138
|
+
/**
|
|
139
|
+
* Middleware for this directory.
|
|
140
|
+
*
|
|
141
|
+
* @default undefined
|
|
142
|
+
*/
|
|
143
|
+
middleware?: MiddlewareHandler | MiddlewareHandler[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Middleware execution position.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* import type { MiddlewarePosition } from '@mokup/server'
|
|
150
|
+
*
|
|
151
|
+
* const position: MiddlewarePosition = 'pre'
|
|
152
|
+
*/
|
|
153
|
+
type MiddlewarePosition = 'pre' | 'normal' | 'post';
|
|
154
|
+
/**
|
|
155
|
+
* Middleware registry used by defineConfig.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* import type { MiddlewareRegistry } from '@mokup/server'
|
|
159
|
+
*
|
|
160
|
+
* const registry: MiddlewareRegistry = { use: () => {} }
|
|
161
|
+
*/
|
|
162
|
+
interface MiddlewareRegistry {
|
|
163
|
+
use: (...handlers: MiddlewareHandler[]) => void;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Normalized middleware metadata.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* import type { ResolvedMiddleware } from '@mokup/server'
|
|
170
|
+
*
|
|
171
|
+
* const item: ResolvedMiddleware = { handle: () => {}, source: 'index.config.ts', index: 0 }
|
|
172
|
+
*/
|
|
173
|
+
interface ResolvedMiddleware {
|
|
174
|
+
handle: MiddlewareHandler;
|
|
175
|
+
source: string;
|
|
176
|
+
index: number;
|
|
177
|
+
/**
|
|
178
|
+
* Position in the middleware chain.
|
|
179
|
+
*
|
|
180
|
+
* @default "normal"
|
|
181
|
+
*/
|
|
182
|
+
position: MiddlewarePosition;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Fully resolved route metadata.
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* import type { ResolvedRoute } from '@mokup/server'
|
|
189
|
+
*
|
|
190
|
+
* const route: ResolvedRoute = {
|
|
191
|
+
* file: '/mock/ping.get.ts',
|
|
192
|
+
* template: '/ping',
|
|
193
|
+
* method: 'GET',
|
|
194
|
+
* tokens: [{ type: 'static', value: 'ping' }],
|
|
195
|
+
* score: [4],
|
|
196
|
+
* handler: () => ({ ok: true }),
|
|
197
|
+
* }
|
|
198
|
+
*/
|
|
199
|
+
interface ResolvedRoute {
|
|
200
|
+
file: string;
|
|
201
|
+
template: string;
|
|
202
|
+
method: HttpMethod;
|
|
203
|
+
tokens: RouteToken[];
|
|
204
|
+
score: number[];
|
|
205
|
+
handler: RouteResponse;
|
|
206
|
+
middlewares?: ResolvedMiddleware[];
|
|
207
|
+
status?: number;
|
|
208
|
+
headers?: Record<string, string>;
|
|
209
|
+
delay?: number;
|
|
210
|
+
ruleIndex?: number;
|
|
211
|
+
}
|
|
212
|
+
type RouteTable = ResolvedRoute[];
|
|
213
|
+
|
|
214
|
+
export type { MiddlewareRegistry as M, RouteDirectoryConfig as R, MiddlewarePosition as a, ResolvedMiddleware as b, RouteRule as c, RouteTable as d };
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { RouteToken } from '@mokup/runtime';
|
|
2
|
+
import { MiddlewareHandler, Context } from '@mokup/shared/hono';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Supported HTTP methods for server dev routes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import type { HttpMethod } from '@mokup/server'
|
|
9
|
+
*
|
|
10
|
+
* const method: HttpMethod = 'GET'
|
|
11
|
+
*/
|
|
12
|
+
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
|
|
13
|
+
/**
|
|
14
|
+
* Static response payloads supported by route rules.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import type { RouteStaticResponse } from '@mokup/server'
|
|
18
|
+
*
|
|
19
|
+
* const value: RouteStaticResponse = { ok: true }
|
|
20
|
+
*/
|
|
21
|
+
type RouteStaticResponse = string | number | boolean | bigint | symbol | null | undefined | object;
|
|
22
|
+
/**
|
|
23
|
+
* Allowed return value from a route handler.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* import type { RouteHandlerResult } from '@mokup/server'
|
|
27
|
+
*
|
|
28
|
+
* const result: RouteHandlerResult = 'ok'
|
|
29
|
+
*/
|
|
30
|
+
type RouteHandlerResult = RouteStaticResponse | Response;
|
|
31
|
+
/**
|
|
32
|
+
* Request handler signature for server dev routes.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* import type { RequestHandler } from '@mokup/server'
|
|
36
|
+
*
|
|
37
|
+
* const handler: RequestHandler = (c) => c.json({ ok: true })
|
|
38
|
+
*/
|
|
39
|
+
type RequestHandler = (context: Context) => RouteHandlerResult | Promise<RouteHandlerResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Route response as a static value or handler.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* import type { RouteResponse } from '@mokup/server'
|
|
45
|
+
*
|
|
46
|
+
* const response: RouteResponse = { ok: true }
|
|
47
|
+
*/
|
|
48
|
+
type RouteResponse = RouteStaticResponse | RequestHandler;
|
|
49
|
+
/**
|
|
50
|
+
* Rule metadata for a route handler.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* import type { RouteRule } from '@mokup/server'
|
|
54
|
+
*
|
|
55
|
+
* const rule: RouteRule = {
|
|
56
|
+
* handler: () => ({ ok: true }),
|
|
57
|
+
* }
|
|
58
|
+
*/
|
|
59
|
+
interface RouteRule {
|
|
60
|
+
/** Handler for the route. */
|
|
61
|
+
handler: RouteResponse;
|
|
62
|
+
/**
|
|
63
|
+
* Enable or disable this rule.
|
|
64
|
+
*
|
|
65
|
+
* @default true
|
|
66
|
+
*/
|
|
67
|
+
enabled?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Override response status code.
|
|
70
|
+
*
|
|
71
|
+
* @default 200
|
|
72
|
+
*/
|
|
73
|
+
status?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Additional response headers.
|
|
76
|
+
*
|
|
77
|
+
* @default {}
|
|
78
|
+
*/
|
|
79
|
+
headers?: Record<string, string>;
|
|
80
|
+
/**
|
|
81
|
+
* Delay in milliseconds before responding.
|
|
82
|
+
*
|
|
83
|
+
* @default 0
|
|
84
|
+
*/
|
|
85
|
+
delay?: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Directory-level config for server dev scanning.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* import type { RouteDirectoryConfig } from '@mokup/server'
|
|
92
|
+
*
|
|
93
|
+
* const config: RouteDirectoryConfig = { headers: { 'x-mokup': 'dir' } }
|
|
94
|
+
*/
|
|
95
|
+
interface RouteDirectoryConfig {
|
|
96
|
+
/**
|
|
97
|
+
* Headers applied to routes in this directory.
|
|
98
|
+
*
|
|
99
|
+
* @default {}
|
|
100
|
+
*/
|
|
101
|
+
headers?: Record<string, string>;
|
|
102
|
+
/**
|
|
103
|
+
* Default status code override.
|
|
104
|
+
*
|
|
105
|
+
* @default 200
|
|
106
|
+
*/
|
|
107
|
+
status?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Default delay in milliseconds.
|
|
110
|
+
*
|
|
111
|
+
* @default 0
|
|
112
|
+
*/
|
|
113
|
+
delay?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Enable or disable this directory.
|
|
116
|
+
*
|
|
117
|
+
* @default true
|
|
118
|
+
*/
|
|
119
|
+
enabled?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Ignore prefixes for files.
|
|
122
|
+
*
|
|
123
|
+
* @default ["."]
|
|
124
|
+
*/
|
|
125
|
+
ignorePrefix?: string | string[];
|
|
126
|
+
/**
|
|
127
|
+
* Include filter.
|
|
128
|
+
*
|
|
129
|
+
* @default undefined
|
|
130
|
+
*/
|
|
131
|
+
include?: RegExp | RegExp[];
|
|
132
|
+
/**
|
|
133
|
+
* Exclude filter.
|
|
134
|
+
*
|
|
135
|
+
* @default undefined
|
|
136
|
+
*/
|
|
137
|
+
exclude?: RegExp | RegExp[];
|
|
138
|
+
/**
|
|
139
|
+
* Middleware for this directory.
|
|
140
|
+
*
|
|
141
|
+
* @default undefined
|
|
142
|
+
*/
|
|
143
|
+
middleware?: MiddlewareHandler | MiddlewareHandler[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Middleware execution position.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* import type { MiddlewarePosition } from '@mokup/server'
|
|
150
|
+
*
|
|
151
|
+
* const position: MiddlewarePosition = 'pre'
|
|
152
|
+
*/
|
|
153
|
+
type MiddlewarePosition = 'pre' | 'normal' | 'post';
|
|
154
|
+
/**
|
|
155
|
+
* Middleware registry used by defineConfig.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* import type { MiddlewareRegistry } from '@mokup/server'
|
|
159
|
+
*
|
|
160
|
+
* const registry: MiddlewareRegistry = { use: () => {} }
|
|
161
|
+
*/
|
|
162
|
+
interface MiddlewareRegistry {
|
|
163
|
+
use: (...handlers: MiddlewareHandler[]) => void;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Normalized middleware metadata.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* import type { ResolvedMiddleware } from '@mokup/server'
|
|
170
|
+
*
|
|
171
|
+
* const item: ResolvedMiddleware = { handle: () => {}, source: 'index.config.ts', index: 0 }
|
|
172
|
+
*/
|
|
173
|
+
interface ResolvedMiddleware {
|
|
174
|
+
handle: MiddlewareHandler;
|
|
175
|
+
source: string;
|
|
176
|
+
index: number;
|
|
177
|
+
/**
|
|
178
|
+
* Position in the middleware chain.
|
|
179
|
+
*
|
|
180
|
+
* @default "normal"
|
|
181
|
+
*/
|
|
182
|
+
position: MiddlewarePosition;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Fully resolved route metadata.
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* import type { ResolvedRoute } from '@mokup/server'
|
|
189
|
+
*
|
|
190
|
+
* const route: ResolvedRoute = {
|
|
191
|
+
* file: '/mock/ping.get.ts',
|
|
192
|
+
* template: '/ping',
|
|
193
|
+
* method: 'GET',
|
|
194
|
+
* tokens: [{ type: 'static', value: 'ping' }],
|
|
195
|
+
* score: [4],
|
|
196
|
+
* handler: () => ({ ok: true }),
|
|
197
|
+
* }
|
|
198
|
+
*/
|
|
199
|
+
interface ResolvedRoute {
|
|
200
|
+
file: string;
|
|
201
|
+
template: string;
|
|
202
|
+
method: HttpMethod;
|
|
203
|
+
tokens: RouteToken[];
|
|
204
|
+
score: number[];
|
|
205
|
+
handler: RouteResponse;
|
|
206
|
+
middlewares?: ResolvedMiddleware[];
|
|
207
|
+
status?: number;
|
|
208
|
+
headers?: Record<string, string>;
|
|
209
|
+
delay?: number;
|
|
210
|
+
ruleIndex?: number;
|
|
211
|
+
}
|
|
212
|
+
type RouteTable = ResolvedRoute[];
|
|
213
|
+
|
|
214
|
+
export type { MiddlewareRegistry as M, RouteDirectoryConfig as R, MiddlewarePosition as a, ResolvedMiddleware as b, RouteRule as c, RouteTable as d };
|