@mdanai/sdk 0.5.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/LICENSE +21 -0
- package/README.md +126 -0
- package/dist/core/errors.d.ts +14 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +13 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +69 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/markdown-body.d.ts +3 -0
- package/dist/core/markdown-body.d.ts.map +1 -0
- package/dist/core/markdown-body.js +65 -0
- package/dist/core/markdown-body.js.map +1 -0
- package/dist/core/markdown-renderer.d.ts +5 -0
- package/dist/core/markdown-renderer.d.ts.map +1 -0
- package/dist/core/markdown-renderer.js +75 -0
- package/dist/core/markdown-renderer.js.map +1 -0
- package/dist/core/negotiate.d.ts +3 -0
- package/dist/core/negotiate.d.ts.map +1 -0
- package/dist/core/negotiate.js +63 -0
- package/dist/core/negotiate.js.map +1 -0
- package/dist/core/parse/anchors.d.ts +2 -0
- package/dist/core/parse/anchors.d.ts.map +1 -0
- package/dist/core/parse/anchors.js +26 -0
- package/dist/core/parse/anchors.js.map +1 -0
- package/dist/core/parse/block-parser.d.ts +3 -0
- package/dist/core/parse/block-parser.d.ts.map +1 -0
- package/dist/core/parse/block-parser.js +117 -0
- package/dist/core/parse/block-parser.js.map +1 -0
- package/dist/core/parse/executable-block.d.ts +6 -0
- package/dist/core/parse/executable-block.d.ts.map +1 -0
- package/dist/core/parse/executable-block.js +48 -0
- package/dist/core/parse/executable-block.js.map +1 -0
- package/dist/core/parse/frontmatter.d.ts +7 -0
- package/dist/core/parse/frontmatter.d.ts.map +1 -0
- package/dist/core/parse/frontmatter.js +45 -0
- package/dist/core/parse/frontmatter.js.map +1 -0
- package/dist/core/serialize.d.ts +4 -0
- package/dist/core/serialize.d.ts.map +1 -0
- package/dist/core/serialize.js +126 -0
- package/dist/core/serialize.js.map +1 -0
- package/dist/core/types.d.ts +67 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validate.d.ts +3 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +107 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/elements/components/mdan-action.d.ts +6 -0
- package/dist/elements/components/mdan-action.d.ts.map +1 -0
- package/dist/elements/components/mdan-action.js +34 -0
- package/dist/elements/components/mdan-action.js.map +1 -0
- package/dist/elements/components/mdan-block.d.ts +9 -0
- package/dist/elements/components/mdan-block.d.ts.map +1 -0
- package/dist/elements/components/mdan-block.js +36 -0
- package/dist/elements/components/mdan-block.js.map +1 -0
- package/dist/elements/components/mdan-error.d.ts +9 -0
- package/dist/elements/components/mdan-error.d.ts.map +1 -0
- package/dist/elements/components/mdan-error.js +36 -0
- package/dist/elements/components/mdan-error.js.map +1 -0
- package/dist/elements/components/mdan-field.d.ts +6 -0
- package/dist/elements/components/mdan-field.d.ts.map +1 -0
- package/dist/elements/components/mdan-field.js +35 -0
- package/dist/elements/components/mdan-field.js.map +1 -0
- package/dist/elements/components/mdan-form.d.ts +6 -0
- package/dist/elements/components/mdan-form.d.ts.map +1 -0
- package/dist/elements/components/mdan-form.js +22 -0
- package/dist/elements/components/mdan-form.js.map +1 -0
- package/dist/elements/components/mdan-page.d.ts +9 -0
- package/dist/elements/components/mdan-page.d.ts.map +1 -0
- package/dist/elements/components/mdan-page.js +46 -0
- package/dist/elements/components/mdan-page.js.map +1 -0
- package/dist/elements/index.d.ts +3 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +3 -0
- package/dist/elements/index.js.map +1 -0
- package/dist/elements/mount.d.ts +11 -0
- package/dist/elements/mount.d.ts.map +1 -0
- package/dist/elements/mount.js +436 -0
- package/dist/elements/mount.js.map +1 -0
- package/dist/elements/register.d.ts +2 -0
- package/dist/elements/register.d.ts.map +1 -0
- package/dist/elements/register.js +27 -0
- package/dist/elements/register.js.map +1 -0
- package/dist/elements/theme.d.ts +2 -0
- package/dist/elements/theme.d.ts.map +1 -0
- package/dist/elements/theme.js +13 -0
- package/dist/elements/theme.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/server/bun.d.ts +19 -0
- package/dist/server/bun.d.ts.map +1 -0
- package/dist/server/bun.js +214 -0
- package/dist/server/bun.js.map +1 -0
- package/dist/server/content-type.d.ts +3 -0
- package/dist/server/content-type.d.ts.map +1 -0
- package/dist/server/content-type.js +5 -0
- package/dist/server/content-type.js.map +1 -0
- package/dist/server/hosted-app.d.ts +35 -0
- package/dist/server/hosted-app.d.ts.map +1 -0
- package/dist/server/hosted-app.js +113 -0
- package/dist/server/hosted-app.js.map +1 -0
- package/dist/server/html-render.d.ts +21 -0
- package/dist/server/html-render.d.ts.map +1 -0
- package/dist/server/html-render.js +360 -0
- package/dist/server/html-render.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +6 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/node-runtime.d.ts +2 -0
- package/dist/server/node-runtime.d.ts.map +1 -0
- package/dist/server/node-runtime.js +2 -0
- package/dist/server/node-runtime.js.map +1 -0
- package/dist/server/node.d.ts +23 -0
- package/dist/server/node.d.ts.map +1 -0
- package/dist/server/node.js +210 -0
- package/dist/server/node.js.map +1 -0
- package/dist/server/result.d.ts +7 -0
- package/dist/server/result.d.ts.map +1 -0
- package/dist/server/result.js +26 -0
- package/dist/server/result.js.map +1 -0
- package/dist/server/router.d.ts +12 -0
- package/dist/server/router.d.ts.map +1 -0
- package/dist/server/router.js +24 -0
- package/dist/server/router.js.map +1 -0
- package/dist/server/runtime.d.ts +16 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +532 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/session.d.ts +5 -0
- package/dist/server/session.d.ts.map +1 -0
- package/dist/server/session.js +18 -0
- package/dist/server/session.js.map +1 -0
- package/dist/server/types.d.ts +72 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/web/headless.d.ts +32 -0
- package/dist/web/headless.d.ts.map +1 -0
- package/dist/web/headless.js +391 -0
- package/dist/web/headless.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +2 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { extname, resolve } from "node:path";
|
|
3
|
+
import { serializeMarkdownBody } from "../core/index.js";
|
|
4
|
+
import { toMarkdownContentType } from "./content-type.js";
|
|
5
|
+
const DEFAULT_MAX_BODY_BYTES = 1024 * 1024;
|
|
6
|
+
class PayloadTooLargeError extends Error {
|
|
7
|
+
constructor() {
|
|
8
|
+
super("Payload Too Large");
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function parseCookies(header) {
|
|
12
|
+
if (!header?.trim()) {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
const cookies = {};
|
|
16
|
+
for (const pair of header.split(";")) {
|
|
17
|
+
const [rawName, ...rawValue] = pair.split("=");
|
|
18
|
+
const name = rawName?.trim();
|
|
19
|
+
if (!name) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const serializedValue = rawValue.join("=").trim();
|
|
23
|
+
try {
|
|
24
|
+
cookies[name] = decodeURIComponent(serializedValue);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
cookies[name] = serializedValue;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return cookies;
|
|
31
|
+
}
|
|
32
|
+
function normalizeBody(body, contentType) {
|
|
33
|
+
if (!body) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (!contentType?.includes("application/x-www-form-urlencoded")) {
|
|
37
|
+
return body;
|
|
38
|
+
}
|
|
39
|
+
const params = new URLSearchParams(body);
|
|
40
|
+
return serializeMarkdownBody(Object.fromEntries(params.entries()));
|
|
41
|
+
}
|
|
42
|
+
async function readBody(request, maxBodyBytes) {
|
|
43
|
+
const contentLengthHeader = request.headers.get("content-length");
|
|
44
|
+
const contentLength = contentLengthHeader ? Number(contentLengthHeader) : Number.NaN;
|
|
45
|
+
if (Number.isFinite(contentLength) && contentLength > maxBodyBytes) {
|
|
46
|
+
throw new PayloadTooLargeError();
|
|
47
|
+
}
|
|
48
|
+
const text = await request.text();
|
|
49
|
+
if (!text) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (Buffer.byteLength(text) > maxBodyBytes) {
|
|
53
|
+
throw new PayloadTooLargeError();
|
|
54
|
+
}
|
|
55
|
+
return text;
|
|
56
|
+
}
|
|
57
|
+
function getContentType(filePath) {
|
|
58
|
+
const extension = extname(filePath);
|
|
59
|
+
return extension === ".js" || extension === ".mjs"
|
|
60
|
+
? "text/javascript"
|
|
61
|
+
: extension === ".css"
|
|
62
|
+
? "text/css"
|
|
63
|
+
: extension === ".map" || extension === ".json"
|
|
64
|
+
? "application/json"
|
|
65
|
+
: extension === ".html"
|
|
66
|
+
? "text/html"
|
|
67
|
+
: extension === ".svg"
|
|
68
|
+
? "image/svg+xml"
|
|
69
|
+
: extension === ".txt"
|
|
70
|
+
? "text/plain"
|
|
71
|
+
: "application/octet-stream";
|
|
72
|
+
}
|
|
73
|
+
function resolveMountedFile(directory, urlPrefix, pathname) {
|
|
74
|
+
const normalizedPrefix = urlPrefix.length > 1 && urlPrefix.endsWith("/") ? urlPrefix.slice(0, -1) : urlPrefix;
|
|
75
|
+
if (normalizedPrefix === "/") {
|
|
76
|
+
const baseDirectory = resolve(directory);
|
|
77
|
+
const target = resolve(baseDirectory, pathname.replace(/^\/+/, ""));
|
|
78
|
+
if (target !== baseDirectory && !target.startsWith(`${baseDirectory}/`)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return target;
|
|
82
|
+
}
|
|
83
|
+
if (pathname !== normalizedPrefix && !pathname.startsWith(`${normalizedPrefix}/`)) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const relativePath = pathname.slice(normalizedPrefix.length).replace(/^\/+/, "");
|
|
87
|
+
const baseDirectory = resolve(directory);
|
|
88
|
+
const target = resolve(baseDirectory, relativePath);
|
|
89
|
+
if (target !== baseDirectory && !target.startsWith(`${baseDirectory}/`)) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return target;
|
|
93
|
+
}
|
|
94
|
+
async function tryServeStaticFile(filePath) {
|
|
95
|
+
try {
|
|
96
|
+
const fileStat = await stat(filePath);
|
|
97
|
+
if (!fileStat.isFile()) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const body = await readFile(filePath);
|
|
101
|
+
return new Response(body, {
|
|
102
|
+
status: 200,
|
|
103
|
+
headers: {
|
|
104
|
+
"content-type": getContentType(filePath),
|
|
105
|
+
"cache-control": "public, max-age=0, must-revalidate"
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function toMdanRequest(request, body) {
|
|
114
|
+
const headers = {};
|
|
115
|
+
request.headers.forEach((value, key) => {
|
|
116
|
+
headers[key] = value;
|
|
117
|
+
});
|
|
118
|
+
headers.accept ??= "text/html";
|
|
119
|
+
if (body && headers["content-type"]?.includes("application/x-www-form-urlencoded")) {
|
|
120
|
+
headers["content-type"] = "text/markdown";
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
method: request.method === "POST" ? "POST" : "GET",
|
|
124
|
+
url: request.url,
|
|
125
|
+
headers,
|
|
126
|
+
...(body ? { body } : {}),
|
|
127
|
+
cookies: parseCookies(request.headers.get("cookie"))
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function toReadableStream(body) {
|
|
131
|
+
const encoder = new TextEncoder();
|
|
132
|
+
const iterator = body[Symbol.asyncIterator]();
|
|
133
|
+
return new ReadableStream({
|
|
134
|
+
async pull(controller) {
|
|
135
|
+
const chunk = await iterator.next();
|
|
136
|
+
if (chunk.done) {
|
|
137
|
+
controller.close();
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
controller.enqueue(encoder.encode(chunk.value));
|
|
141
|
+
},
|
|
142
|
+
async cancel() {
|
|
143
|
+
if (typeof iterator.return === "function") {
|
|
144
|
+
await iterator.return();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function toResponse(result, transformHtml) {
|
|
150
|
+
const headers = new Headers(result.headers);
|
|
151
|
+
const contentType = headers.get("content-type") ?? "";
|
|
152
|
+
if (typeof result.body === "string") {
|
|
153
|
+
return new Response(contentType.includes("text/html") && transformHtml ? transformHtml(result.body) : result.body, {
|
|
154
|
+
status: result.status,
|
|
155
|
+
headers
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return new Response(toReadableStream(result.body), {
|
|
159
|
+
status: result.status,
|
|
160
|
+
headers
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
export function createHost(handler, options = {}) {
|
|
164
|
+
return async (request) => {
|
|
165
|
+
const url = new URL(request.url);
|
|
166
|
+
if (options.rootRedirect && url.pathname === "/") {
|
|
167
|
+
return new Response(null, {
|
|
168
|
+
status: 302,
|
|
169
|
+
headers: {
|
|
170
|
+
location: options.rootRedirect
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (options.ignoreFavicon !== false && url.pathname === "/favicon.ico") {
|
|
175
|
+
return new Response(null, { status: 204 });
|
|
176
|
+
}
|
|
177
|
+
const staticFile = options.staticFiles?.[url.pathname];
|
|
178
|
+
if (staticFile) {
|
|
179
|
+
const response = await tryServeStaticFile(staticFile);
|
|
180
|
+
if (response) {
|
|
181
|
+
return response;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
for (const mount of options.staticMounts ?? []) {
|
|
185
|
+
const target = resolveMountedFile(mount.directory, mount.urlPrefix, url.pathname);
|
|
186
|
+
if (!target) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const response = await tryServeStaticFile(target);
|
|
190
|
+
if (response) {
|
|
191
|
+
return response;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
|
|
195
|
+
let normalizedBody;
|
|
196
|
+
try {
|
|
197
|
+
normalizedBody = normalizeBody(await readBody(request, maxBodyBytes), request.headers.get("content-type"));
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (error instanceof PayloadTooLargeError) {
|
|
201
|
+
return new Response("## Payload Too Large\n\nRequest body exceeded maxBodyBytes.", {
|
|
202
|
+
status: 413,
|
|
203
|
+
headers: {
|
|
204
|
+
"content-type": toMarkdownContentType()
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
const result = await handler.handle(toMdanRequest(request, normalizedBody));
|
|
211
|
+
return toResponse(result, options.transformHtml);
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=bun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/server/bun.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-type.d.ts","sourceRoot":"","sources":["../../src/server/content-type.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,gCAAgC,CAAC;AAE3E,wBAAgB,qBAAqB,CAAC,OAAO,SAAgC,GAAG,MAAM,CAErF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-type.js","sourceRoot":"","sources":["../../src/server/content-type.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAE3E,MAAM,UAAU,qBAAqB,CAAC,OAAO,GAAG,6BAA6B;IAC3E,OAAO,2BAA2B,OAAO,GAAG,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MdanComposedPage } from "../core/index.js";
|
|
2
|
+
import { type CreateMdanServerOptions } from "./runtime.js";
|
|
3
|
+
import type { MdanActionResult, MdanHandlerContext, MdanHandlerResult, MdanPageHandlerContext } from "./types.js";
|
|
4
|
+
export interface HostedPageContext extends MdanPageHandlerContext {
|
|
5
|
+
routePath: string;
|
|
6
|
+
}
|
|
7
|
+
export interface HostedPageFactory {
|
|
8
|
+
(context: HostedPageContext): MdanComposedPage;
|
|
9
|
+
}
|
|
10
|
+
export interface HostedActionContext extends MdanHandlerContext, HostedPageContext {
|
|
11
|
+
routePath: string;
|
|
12
|
+
blockName: string;
|
|
13
|
+
page(routePath?: string): MdanComposedPage;
|
|
14
|
+
pageResult(pageOrRoute?: string | MdanComposedPage, result?: Omit<MdanActionResult, "page" | "fragment">): MdanActionResult;
|
|
15
|
+
block(result?: Omit<MdanActionResult, "fragment">): MdanActionResult;
|
|
16
|
+
}
|
|
17
|
+
export type HostedAction = (context: HostedActionContext) => Promise<MdanHandlerResult> | MdanHandlerResult;
|
|
18
|
+
export interface HostedActionDefinition {
|
|
19
|
+
target: string;
|
|
20
|
+
routePath: string;
|
|
21
|
+
blockName: string;
|
|
22
|
+
methods: Array<"GET" | "POST">;
|
|
23
|
+
handler: HostedAction;
|
|
24
|
+
}
|
|
25
|
+
export interface CreateHostedAppOptions extends CreateMdanServerOptions {
|
|
26
|
+
pages: Record<string, HostedPageFactory>;
|
|
27
|
+
actions?: HostedActionDefinition[];
|
|
28
|
+
}
|
|
29
|
+
export declare function createHostedApp(options: CreateHostedAppOptions): {
|
|
30
|
+
get(path: string, handler: import("./types.js").MdanHandler): void;
|
|
31
|
+
page(path: string, handler: import("./types.js").MdanPageHandler): void;
|
|
32
|
+
post(path: string, handler: import("./types.js").MdanHandler): void;
|
|
33
|
+
handle(request: import("./types.js").MdanRequest): Promise<import("./types.js").MdanResponse>;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=hosted-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-app.d.ts","sourceRoot":"","sources":["../../src/server/hosted-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAElH,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAAC;CAChD;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB,EAAE,iBAAiB;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC3C,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,gBAAgB,CAAC;IAC5H,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC;CACtE;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;AAE5G,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAmED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;EAyE9D"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { block as createBlockResult } from "./result.js";
|
|
2
|
+
import { createMdanServer } from "./runtime.js";
|
|
3
|
+
function createBindingKey(method, target) {
|
|
4
|
+
return `${method}:${target}`;
|
|
5
|
+
}
|
|
6
|
+
function renderPage(factory, context) {
|
|
7
|
+
const page = factory(context);
|
|
8
|
+
if (typeof page.fragment !== "function") {
|
|
9
|
+
throw new Error(`Hosted page "${context.routePath}" must return a composed page created by composePage().`);
|
|
10
|
+
}
|
|
11
|
+
return page;
|
|
12
|
+
}
|
|
13
|
+
function buildBindings(pages, actions) {
|
|
14
|
+
const bindings = new Map();
|
|
15
|
+
for (const action of actions ?? []) {
|
|
16
|
+
if (!pages[action.routePath]) {
|
|
17
|
+
throw new Error(`Unknown hosted page route "${action.routePath}" for action "${action.target}".`);
|
|
18
|
+
}
|
|
19
|
+
if (action.methods.length === 0) {
|
|
20
|
+
throw new Error(`Hosted action "${action.target}" must declare at least one method.`);
|
|
21
|
+
}
|
|
22
|
+
if (!action.blockName.trim()) {
|
|
23
|
+
throw new Error(`Hosted action "${action.target}" must declare a non-empty blockName.`);
|
|
24
|
+
}
|
|
25
|
+
const uniqueMethods = new Set(action.methods);
|
|
26
|
+
if (uniqueMethods.size !== action.methods.length) {
|
|
27
|
+
throw new Error(`Hosted action "${action.target}" cannot declare duplicate methods.`);
|
|
28
|
+
}
|
|
29
|
+
for (const method of uniqueMethods) {
|
|
30
|
+
if (method === "GET" && pages[action.target]) {
|
|
31
|
+
throw new Error(`GET ${action.target} cannot share the same path as a hosted page route.`);
|
|
32
|
+
}
|
|
33
|
+
const key = createBindingKey(method, action.target);
|
|
34
|
+
if (bindings.has(key)) {
|
|
35
|
+
throw new Error(`${method} ${action.target} must bind to one stable block context.`);
|
|
36
|
+
}
|
|
37
|
+
bindings.set(key, {
|
|
38
|
+
routePath: action.routePath,
|
|
39
|
+
blockName: action.blockName,
|
|
40
|
+
method,
|
|
41
|
+
target: action.target,
|
|
42
|
+
handler: action.handler
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return bindings;
|
|
47
|
+
}
|
|
48
|
+
export function createHostedApp(options) {
|
|
49
|
+
const server = createMdanServer(options);
|
|
50
|
+
const bindings = buildBindings(options.pages, options.actions);
|
|
51
|
+
for (const [routePath, factory] of Object.entries(options.pages)) {
|
|
52
|
+
server.page(routePath, async (context) => renderPage(factory, { ...context, routePath }));
|
|
53
|
+
}
|
|
54
|
+
for (const binding of bindings.values()) {
|
|
55
|
+
const register = binding.method === "GET" ? server.get.bind(server) : server.post.bind(server);
|
|
56
|
+
register(binding.target, async (context) => {
|
|
57
|
+
const routeFactory = options.pages[binding.routePath];
|
|
58
|
+
if (!routeFactory) {
|
|
59
|
+
throw new Error(`Missing hosted page renderer for "${binding.routePath}".`);
|
|
60
|
+
}
|
|
61
|
+
return binding.handler({
|
|
62
|
+
...context,
|
|
63
|
+
routePath: binding.routePath,
|
|
64
|
+
blockName: binding.blockName,
|
|
65
|
+
page(routePath = binding.routePath) {
|
|
66
|
+
const pageFactory = options.pages[routePath];
|
|
67
|
+
if (!pageFactory) {
|
|
68
|
+
throw new Error(`Unknown hosted page route "${routePath}".`);
|
|
69
|
+
}
|
|
70
|
+
return renderPage(pageFactory, {
|
|
71
|
+
request: context.request,
|
|
72
|
+
session: context.session,
|
|
73
|
+
routePath
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
pageResult(pageOrRoute = binding.routePath, result = {}) {
|
|
77
|
+
const resolvedRoutePath = typeof pageOrRoute === "string" ? pageOrRoute : binding.routePath;
|
|
78
|
+
const page = typeof pageOrRoute === "string"
|
|
79
|
+
? (() => {
|
|
80
|
+
const pageFactory = options.pages[pageOrRoute];
|
|
81
|
+
if (!pageFactory) {
|
|
82
|
+
throw new Error(`Unknown hosted page route "${pageOrRoute}".`);
|
|
83
|
+
}
|
|
84
|
+
return renderPage(pageFactory, {
|
|
85
|
+
request: context.request,
|
|
86
|
+
session: context.session,
|
|
87
|
+
routePath: pageOrRoute
|
|
88
|
+
});
|
|
89
|
+
})()
|
|
90
|
+
: pageOrRoute;
|
|
91
|
+
return {
|
|
92
|
+
status: 200,
|
|
93
|
+
...result,
|
|
94
|
+
route: resolvedRoutePath,
|
|
95
|
+
page
|
|
96
|
+
};
|
|
97
|
+
},
|
|
98
|
+
block(result = {}) {
|
|
99
|
+
return createBlockResult(renderPage(routeFactory, {
|
|
100
|
+
request: context.request,
|
|
101
|
+
session: context.session,
|
|
102
|
+
routePath: binding.routePath
|
|
103
|
+
}), binding.blockName, {
|
|
104
|
+
...result,
|
|
105
|
+
route: binding.routePath
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return server;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=hosted-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-app.js","sourceRoot":"","sources":["../../src/server/hosted-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { MdanMarkdownRenderer, MdanFragment } from "../core/index.js";
|
|
2
|
+
import type { MdanProtocolDiscovery } from "./types.js";
|
|
3
|
+
interface MdanRenderableDocument extends MdanFragment {
|
|
4
|
+
blockContent?: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export interface RenderHtmlDocumentOptions {
|
|
7
|
+
kind?: "page" | "fragment";
|
|
8
|
+
route?: string;
|
|
9
|
+
alternateMarkdownHref?: string;
|
|
10
|
+
llmsTxtHref?: string;
|
|
11
|
+
protocol?: {
|
|
12
|
+
discovery?: MdanProtocolDiscovery;
|
|
13
|
+
};
|
|
14
|
+
markdownRenderer?: MdanMarkdownRenderer;
|
|
15
|
+
}
|
|
16
|
+
export declare function renderProtocolHeadLinks(discovery: Partial<MdanProtocolDiscovery>): string;
|
|
17
|
+
export declare function renderHtmlDiscoveryLinks(options: Pick<RenderHtmlDocumentOptions, "alternateMarkdownHref" | "llmsTxtHref" | "protocol">): string;
|
|
18
|
+
export declare function injectHtmlDiscoveryLinks(html: string, options: Pick<RenderHtmlDocumentOptions, "alternateMarkdownHref" | "llmsTxtHref" | "protocol">): string;
|
|
19
|
+
export declare function renderHtmlDocument(fragment: MdanRenderableDocument, options?: RenderHtmlDocumentOptions): string;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=html-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-render.d.ts","sourceRoot":"","sources":["../../src/server/html-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,YAAY,EAKb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,UAAU,sBAAuB,SAAQ,YAAY;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAID,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,qBAAqB,CAAC;KACnC,CAAC;IACF,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAqKD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,CASzF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,uBAAuB,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,MAAM,CAE/I;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,uBAAuB,GAAG,aAAa,GAAG,UAAU,CAAC,GAC7F,MAAM,CAeR;AAuCD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAgLpH"}
|