@withl5e/l5e 0.2.2 → 0.2.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/dist/entry-server.js +142 -10
- package/dist/entry-server.js.map +1 -1
- package/dist/index-BlfNBupp.js +318 -0
- package/dist/index-BlfNBupp.js.map +1 -0
- package/dist/index.js +31 -32
- package/dist/index.js.map +1 -1
- package/dist/middleware.js +3 -5
- package/dist/render-BF7iTagJ.js +202 -0
- package/dist/render-BF7iTagJ.js.map +1 -0
- package/dist/server.js +250 -244
- package/dist/server.js.map +1 -1
- package/dist/vite-plugin.js +97 -97
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +4 -1
- package/src/core/entry-server.ts +16 -7
- package/src/core/index.ts +0 -2
- package/src/core/render.ts +36 -0
- package/src/core/request.ts +11 -10
- package/src/core/server.ts +23 -9
- package/src/core/vite-plugin.ts +13 -0
- package/src/middleware/index.ts +0 -48
- package/dist/entry-server-DJzzhCmz.js +0 -224
- package/dist/entry-server-DJzzhCmz.js.map +0 -1
- package/dist/index-BIt7MJT9.js +0 -163
- package/dist/index-BIt7MJT9.js.map +0 -1
package/dist/index-BIt7MJT9.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
function f(e) {
|
|
2
|
-
return e ? e.split(";").reduce(
|
|
3
|
-
(t, r) => {
|
|
4
|
-
const [n, ...s] = r.split("=");
|
|
5
|
-
return n && s.length > 0 && (t[n.trim()] = decodeURIComponent(s.join("=").trim())), t;
|
|
6
|
-
},
|
|
7
|
-
{}
|
|
8
|
-
) : {};
|
|
9
|
-
}
|
|
10
|
-
function b(e) {
|
|
11
|
-
const t = new Headers();
|
|
12
|
-
return Object.entries(e.headers).forEach(([r, n]) => {
|
|
13
|
-
if (n !== void 0) {
|
|
14
|
-
if (Array.isArray(n)) {
|
|
15
|
-
n.forEach((s) => t.append(r, s));
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
t.set(r, n);
|
|
19
|
-
}
|
|
20
|
-
}), t;
|
|
21
|
-
}
|
|
22
|
-
function g(e) {
|
|
23
|
-
return e;
|
|
24
|
-
}
|
|
25
|
-
function R(...e) {
|
|
26
|
-
const t = e.filter(Boolean), r = t.length;
|
|
27
|
-
return r ? (n, s) => {
|
|
28
|
-
let i;
|
|
29
|
-
return o(0, n);
|
|
30
|
-
function o(a, u) {
|
|
31
|
-
const h = t[a];
|
|
32
|
-
return h(u, async (c) => a < r - 1 ? (c && (i = c, l(u, c)), o(a + 1, u)) : s(c ?? i));
|
|
33
|
-
}
|
|
34
|
-
} : (n, s) => s();
|
|
35
|
-
}
|
|
36
|
-
function l(e, t) {
|
|
37
|
-
let r;
|
|
38
|
-
t instanceof Request ? r = t : t instanceof URL ? r = new Request(t.href, e.request.clone()) : r = new Request(new URL(t, e.url).href, e.request.clone());
|
|
39
|
-
const n = e.url, s = new URL(r.url), i = f(r.headers.get("cookie") ?? void 0);
|
|
40
|
-
if (e.request = r, e.url = s, e.cookies = i, e.requestInfo) {
|
|
41
|
-
const o = {};
|
|
42
|
-
r.headers.forEach((a, u) => {
|
|
43
|
-
o[u] = a;
|
|
44
|
-
}), e.requestInfo = {
|
|
45
|
-
...e.requestInfo,
|
|
46
|
-
url: s,
|
|
47
|
-
path: p(s, n, e.requestInfo.path),
|
|
48
|
-
pathname: s.pathname,
|
|
49
|
-
method: r.method,
|
|
50
|
-
headers: o,
|
|
51
|
-
cookies: i,
|
|
52
|
-
query: Object.fromEntries(s.searchParams.entries())
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function p(e, t, r) {
|
|
57
|
-
const n = `${e.pathname}${e.search}` || "/";
|
|
58
|
-
if (!r)
|
|
59
|
-
return n;
|
|
60
|
-
const s = r.split("?")[0] || "/";
|
|
61
|
-
if (s === t.pathname || !t.pathname.endsWith(s))
|
|
62
|
-
return n;
|
|
63
|
-
const i = t.pathname.slice(
|
|
64
|
-
0,
|
|
65
|
-
t.pathname.length - s.length
|
|
66
|
-
);
|
|
67
|
-
if (!i || !e.pathname.startsWith(i))
|
|
68
|
-
return n;
|
|
69
|
-
const o = e.pathname.slice(i.length) || "/";
|
|
70
|
-
return `${o.startsWith("/") ? o : `/${o}`}${e.search}`;
|
|
71
|
-
}
|
|
72
|
-
function P({
|
|
73
|
-
request: e,
|
|
74
|
-
requestInfo: t,
|
|
75
|
-
locals: r = {},
|
|
76
|
-
clientAddress: n
|
|
77
|
-
}) {
|
|
78
|
-
const s = {
|
|
79
|
-
cookies: f(e.headers.get("cookie") ?? void 0),
|
|
80
|
-
request: e,
|
|
81
|
-
requestInfo: t,
|
|
82
|
-
url: new URL(e.url),
|
|
83
|
-
redirect(i, o = 302) {
|
|
84
|
-
return new Response(null, {
|
|
85
|
-
status: o,
|
|
86
|
-
headers: {
|
|
87
|
-
Location: i.toString()
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
},
|
|
91
|
-
rewrite(i) {
|
|
92
|
-
return Promise.resolve(new Response(null));
|
|
93
|
-
},
|
|
94
|
-
get clientAddress() {
|
|
95
|
-
if (n)
|
|
96
|
-
return n;
|
|
97
|
-
throw new Error("clientAddress is not available for this request.");
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
return Object.defineProperty(s, "locals", {
|
|
101
|
-
enumerable: !0,
|
|
102
|
-
get() {
|
|
103
|
-
if (typeof r != "object" || r === null || Array.isArray(r))
|
|
104
|
-
throw new Error("Middleware locals must be a plain object.");
|
|
105
|
-
return r;
|
|
106
|
-
},
|
|
107
|
-
set() {
|
|
108
|
-
throw new Error("Middleware locals cannot be reassigned. Mutate its properties instead.");
|
|
109
|
-
}
|
|
110
|
-
}), s.rewrite = (i) => Promise.resolve(
|
|
111
|
-
new Response(null, {
|
|
112
|
-
status: 307,
|
|
113
|
-
headers: {
|
|
114
|
-
"X-L5E-Rewrite": w(i, s.url)
|
|
115
|
-
}
|
|
116
|
-
})
|
|
117
|
-
), s;
|
|
118
|
-
}
|
|
119
|
-
function d(e) {
|
|
120
|
-
const t = [e];
|
|
121
|
-
for (; t.length > 0; ) {
|
|
122
|
-
const r = t.pop(), n = typeof r;
|
|
123
|
-
if (!(r === null || n === "string" || n === "number" || n === "boolean")) {
|
|
124
|
-
if (Array.isArray(r)) {
|
|
125
|
-
t.push(...r);
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
if (n === "object" && m(r)) {
|
|
129
|
-
t.push(...Object.values(r));
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
return !1;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return !0;
|
|
136
|
-
}
|
|
137
|
-
function m(e) {
|
|
138
|
-
if (typeof e != "object" || e === null) return !1;
|
|
139
|
-
const t = Object.getPrototypeOf(e);
|
|
140
|
-
if (t === null) return !0;
|
|
141
|
-
let r = t;
|
|
142
|
-
for (; Object.getPrototypeOf(r) !== null; )
|
|
143
|
-
r = Object.getPrototypeOf(r);
|
|
144
|
-
return t === r;
|
|
145
|
-
}
|
|
146
|
-
function q(e) {
|
|
147
|
-
if (d(e))
|
|
148
|
-
return JSON.stringify(e);
|
|
149
|
-
throw new Error("The passed value can't be serialized.");
|
|
150
|
-
}
|
|
151
|
-
function w(e, t) {
|
|
152
|
-
return e instanceof Request ? e.url : e instanceof URL ? e.href : new URL(e, t).href;
|
|
153
|
-
}
|
|
154
|
-
export {
|
|
155
|
-
b as a,
|
|
156
|
-
P as c,
|
|
157
|
-
g as d,
|
|
158
|
-
d as i,
|
|
159
|
-
f as p,
|
|
160
|
-
R as s,
|
|
161
|
-
q as t
|
|
162
|
-
};
|
|
163
|
-
//# sourceMappingURL=index-BIt7MJT9.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BIt7MJT9.js","sources":["../src/core/request.ts","../src/middleware/defineMiddleware.ts","../src/middleware/sequence.ts","../src/middleware/index.ts"],"sourcesContent":["import type { Request } from 'express';\n\nexport function parseCookies(cookieHeader?: string): Record<string, string> {\n if (!cookieHeader) return {};\n\n return cookieHeader.split(';').reduce(\n (cookies, cookie) => {\n const [name, ...rest] = cookie.split('=');\n if (name && rest.length > 0) {\n cookies[name.trim()] = decodeURIComponent(rest.join('=').trim());\n }\n return cookies;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function createHeadersFromExpressRequest(req: Request): Headers {\n const headers = new Headers();\n\n Object.entries(req.headers).forEach(([key, value]) => {\n if (value === undefined) return;\n if (Array.isArray(value)) {\n value.forEach((item) => headers.append(key, item));\n return;\n }\n headers.set(key, value);\n });\n\n return headers;\n}\n","import type { MiddlewareHandler } from './types';\n\nexport function defineMiddleware(fn: MiddlewareHandler): MiddlewareHandler {\n return fn;\n}\n","import { parseCookies } from '../core/request';\nimport { defineMiddleware } from './defineMiddleware';\nimport type { MiddlewareContext, MiddlewareHandler, RewritePayload } from './types';\n\n// From SvelteKit via Astro: compose middleware handlers in declaration order.\nexport function sequence(...handlers: Array<MiddlewareHandler | false | null | undefined>) {\n const filtered = handlers.filter(Boolean) as MiddlewareHandler[];\n const length = filtered.length;\n\n if (!length) {\n return defineMiddleware((_context, next) => {\n return next();\n });\n }\n\n return defineMiddleware((context, next) => {\n let carriedPayload: RewritePayload | undefined;\n return applyHandle(0, context);\n\n function applyHandle(\n i: number,\n handleContext: MiddlewareContext,\n ): Promise<Response> | Response {\n const handle = filtered[i];\n\n return handle(handleContext, async (payload?: RewritePayload) => {\n if (i < length - 1) {\n if (payload) {\n carriedPayload = payload;\n updateContextForRewrite(handleContext, payload);\n }\n return applyHandle(i + 1, handleContext);\n }\n\n return next(payload ?? carriedPayload);\n });\n }\n });\n}\n\nfunction updateContextForRewrite(context: MiddlewareContext, payload: RewritePayload): void {\n let request: Request;\n\n if (payload instanceof Request) {\n request = payload;\n } else if (payload instanceof URL) {\n request = new Request(payload.href, context.request.clone());\n } else {\n request = new Request(new URL(payload, context.url).href, context.request.clone());\n }\n\n const previousUrl = context.url;\n const nextUrl = new URL(request.url);\n const nextCookies = parseCookies(request.headers.get('cookie') ?? undefined);\n context.request = request;\n context.url = nextUrl;\n context.cookies = nextCookies;\n\n if (context.requestInfo) {\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n context.requestInfo = {\n ...context.requestInfo,\n url: nextUrl,\n path: getRequestInfoPath(nextUrl, previousUrl, context.requestInfo.path),\n pathname: nextUrl.pathname,\n method: request.method,\n headers,\n cookies: nextCookies,\n query: Object.fromEntries(nextUrl.searchParams.entries()),\n };\n }\n}\n\nfunction getRequestInfoPath(nextUrl: URL, previousUrl: URL, previousPath?: string): string {\n const nextPath = `${nextUrl.pathname}${nextUrl.search}` || '/';\n if (!previousPath) {\n return nextPath;\n }\n\n const previousPathname = previousPath.split('?')[0] || '/';\n if (\n previousPathname === previousUrl.pathname ||\n !previousUrl.pathname.endsWith(previousPathname)\n ) {\n return nextPath;\n }\n\n const basePathname = previousUrl.pathname.slice(\n 0,\n previousUrl.pathname.length - previousPathname.length,\n );\n if (!basePathname || !nextUrl.pathname.startsWith(basePathname)) {\n return nextPath;\n }\n\n const strippedPathname = nextUrl.pathname.slice(basePathname.length) || '/';\n const normalizedPathname = strippedPathname.startsWith('/')\n ? strippedPathname\n : `/${strippedPathname}`;\n return `${normalizedPathname}${nextUrl.search}`;\n}\n","import { parseCookies } from '../core/request';\nimport { defineMiddleware } from './defineMiddleware';\nimport { sequence } from './sequence';\nimport type { CreateContext, MiddlewareContext, RewritePayload } from './types';\n\nexport type {\n CreateContext,\n MiddlewareContext,\n MiddlewareHandler,\n MiddlewareNext,\n RewritePayload,\n} from './types';\n\nexport { defineMiddleware, sequence };\n\nexport function createContext({\n request,\n requestInfo,\n locals = {},\n clientAddress,\n}: CreateContext): MiddlewareContext {\n const context = {\n cookies: parseCookies(request.headers.get('cookie') ?? undefined),\n request,\n requestInfo,\n url: new URL(request.url),\n redirect(path: string | URL, status = 302) {\n return new Response(null, {\n status,\n headers: {\n Location: path.toString(),\n },\n });\n },\n rewrite(payload: RewritePayload) {\n return Promise.resolve(new Response(null));\n },\n get clientAddress() {\n if (clientAddress) {\n return clientAddress;\n }\n throw new Error('clientAddress is not available for this request.');\n },\n } as Omit<MiddlewareContext, 'locals'> & {\n locals: Record<string, unknown>;\n };\n\n Object.defineProperty(context, 'locals', {\n enumerable: true,\n get() {\n if (typeof locals !== 'object' || locals === null || Array.isArray(locals)) {\n throw new Error('Middleware locals must be a plain object.');\n }\n return locals;\n },\n set() {\n throw new Error('Middleware locals cannot be reassigned. Mutate its properties instead.');\n },\n });\n\n context.rewrite = (payload: RewritePayload) => {\n return Promise.resolve(\n new Response(null, {\n status: 307,\n headers: {\n 'X-L5E-Rewrite': stringifyRewritePayload(payload, context.url),\n },\n }),\n );\n };\n\n return context;\n}\n\nexport function isLocalsSerializable(value: unknown): boolean {\n const stack: unknown[] = [value];\n\n while (stack.length > 0) {\n const current = stack.pop();\n const type = typeof current;\n\n if (current === null || type === 'string' || type === 'number' || type === 'boolean') {\n continue;\n }\n\n if (Array.isArray(current)) {\n stack.push(...current);\n continue;\n }\n\n if (type === 'object' && isPlainObject(current)) {\n stack.push(...Object.values(current as Record<string, unknown>));\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction isPlainObject(value: unknown): value is object {\n if (typeof value !== 'object' || value === null) return false;\n\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return true;\n\n let baseProto = proto;\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n return proto === baseProto;\n}\n\nexport function trySerializeLocals(value: unknown): string {\n if (isLocalsSerializable(value)) {\n return JSON.stringify(value);\n }\n throw new Error(\"The passed value can't be serialized.\");\n}\n\nfunction stringifyRewritePayload(payload: RewritePayload, currentUrl: URL): string {\n if (payload instanceof Request) {\n return payload.url;\n }\n\n if (payload instanceof URL) {\n return payload.href;\n }\n\n return new URL(payload, currentUrl).href;\n}\n"],"names":["parseCookies","cookieHeader","cookies","cookie","name","rest","createHeadersFromExpressRequest","req","headers","key","value","item","defineMiddleware","fn","sequence","handlers","filtered","length","context","next","carriedPayload","applyHandle","i","handleContext","handle","payload","updateContextForRewrite","_context","request","previousUrl","nextUrl","nextCookies","getRequestInfoPath","previousPath","nextPath","previousPathname","basePathname","strippedPathname","createContext","requestInfo","locals","clientAddress","path","status","stringifyRewritePayload","isLocalsSerializable","stack","current","type","isPlainObject","proto","baseProto","trySerializeLocals","currentUrl"],"mappings":"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"}
|