@barqel/barq 0.0.0-stage → 1.0.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 +89 -2
- package/dist/app.d.ts +159 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +1370 -0
- package/dist/app.js.map +1 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +261 -0
- package/dist/context.js.map +1 -0
- package/dist/cookies.d.ts +5 -0
- package/dist/cookies.d.ts.map +1 -0
- package/dist/cookies.js +234 -0
- package/dist/cookies.js.map +1 -0
- package/dist/cors.d.ts +11 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +82 -0
- package/dist/cors.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +81 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +7 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +127 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/ip.d.ts +6 -0
- package/dist/internal/ip.d.ts.map +1 -0
- package/dist/internal/ip.js +151 -0
- package/dist/internal/ip.js.map +1 -0
- package/dist/internal/pathname.d.ts +9 -0
- package/dist/internal/pathname.d.ts.map +1 -0
- package/dist/internal/pathname.js +158 -0
- package/dist/internal/pathname.js.map +1 -0
- package/dist/internal/query.d.ts +5 -0
- package/dist/internal/query.d.ts.map +1 -0
- package/dist/internal/query.js +126 -0
- package/dist/internal/query.js.map +1 -0
- package/dist/internal/scan.d.ts +33 -0
- package/dist/internal/scan.d.ts.map +1 -0
- package/dist/internal/scan.js +1069 -0
- package/dist/internal/scan.js.map +1 -0
- package/dist/internal/shutdown.d.ts +7 -0
- package/dist/internal/shutdown.d.ts.map +1 -0
- package/dist/internal/shutdown.js +30 -0
- package/dist/internal/shutdown.js.map +1 -0
- package/dist/internal/trie.d.ts +43 -0
- package/dist/internal/trie.d.ts.map +1 -0
- package/dist/internal/trie.js +560 -0
- package/dist/internal/trie.js.map +1 -0
- package/dist/middleware.d.ts +13 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +269 -0
- package/dist/middleware.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +27 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +32 -0
- package/dist/validation.js.map +1 -0
- package/package.json +58 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip.d.ts","sourceRoot":"","sources":["../../src/internal/ip.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;AAQhD,wBAAgB,iBAAiB,CAC/B,KAAK,EACD,OAAO,GACP,MAAM,GACN,SAAS,MAAM,EAAE,GACjB,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GACzB,SAAS,GACZ,SAAS,CA2CX;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAYhD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA4BjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { isIP } from "node:net";
|
|
2
|
+
function ipv4ToNumber(bytes) {
|
|
3
|
+
return (((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0);
|
|
4
|
+
}
|
|
5
|
+
export function compileTrustProxy(trust) {
|
|
6
|
+
if (!trust)
|
|
7
|
+
return () => false;
|
|
8
|
+
if (trust === true)
|
|
9
|
+
return () => true;
|
|
10
|
+
if (typeof trust === "function")
|
|
11
|
+
return trust;
|
|
12
|
+
const ranges = typeof trust === "string" ? [trust] : trust;
|
|
13
|
+
if (ranges.length === 0)
|
|
14
|
+
return () => false;
|
|
15
|
+
const matchers = [];
|
|
16
|
+
for (const range of ranges) {
|
|
17
|
+
if (range === "loopback") {
|
|
18
|
+
matchers.push((ip) => {
|
|
19
|
+
const addr = parseIpAddress(ip);
|
|
20
|
+
if (addr === null)
|
|
21
|
+
return false;
|
|
22
|
+
if (addr.length === 4)
|
|
23
|
+
return addr[0] === 127;
|
|
24
|
+
return addr.slice(0, 15).every((b) => b === 0) && addr[15] === 1;
|
|
25
|
+
});
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const slash = range.indexOf("/");
|
|
29
|
+
const netText = slash === -1 ? range : range.slice(0, slash);
|
|
30
|
+
const netBytes = parseIpAddress(netText);
|
|
31
|
+
if (!netBytes)
|
|
32
|
+
continue;
|
|
33
|
+
const bits = slash === -1 ? netBytes.length * 8 : Number(range.slice(slash + 1));
|
|
34
|
+
if (netBytes.length === 4) {
|
|
35
|
+
const netNum = ipv4ToNumber(netBytes);
|
|
36
|
+
const mask = bits === 0 ? 0 : (~0 << (32 - bits)) >>> 0;
|
|
37
|
+
const expected = (netNum & mask) >>> 0;
|
|
38
|
+
matchers.push((ip) => {
|
|
39
|
+
const addr = parseIpAddress(ip);
|
|
40
|
+
if (addr?.length !== 4)
|
|
41
|
+
return false;
|
|
42
|
+
return (ipv4ToNumber(addr) & mask) >>> 0 === expected;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
matchers.push((ip) => ipMatchesRange(ip, range));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return (ip) => matchers.some((m) => m(ip));
|
|
50
|
+
}
|
|
51
|
+
export function isIpRange(value) {
|
|
52
|
+
if (value === "loopback")
|
|
53
|
+
return true;
|
|
54
|
+
const slash = value.indexOf("/");
|
|
55
|
+
if (slash !== value.lastIndexOf("/"))
|
|
56
|
+
return false;
|
|
57
|
+
const address = slash === -1 ? value : value.slice(0, slash);
|
|
58
|
+
const bytes = parseIpAddress(address);
|
|
59
|
+
if (bytes === null)
|
|
60
|
+
return false;
|
|
61
|
+
if (slash === -1)
|
|
62
|
+
return true;
|
|
63
|
+
const bitsText = value.slice(slash + 1);
|
|
64
|
+
if (!/^\d+$/.test(bitsText))
|
|
65
|
+
return false;
|
|
66
|
+
const bits = Number(bitsText);
|
|
67
|
+
return Number.isInteger(bits) && bits >= 0 && bits <= bytes.length * 8;
|
|
68
|
+
}
|
|
69
|
+
export function ipMatchesRange(ip, range) {
|
|
70
|
+
const address = parseIpAddress(ip);
|
|
71
|
+
if (address === null)
|
|
72
|
+
return false;
|
|
73
|
+
if (range === "loopback") {
|
|
74
|
+
if (address.length === 4)
|
|
75
|
+
return address[0] === 127;
|
|
76
|
+
return (address.slice(0, 15).every((byte) => byte === 0) && address[15] === 1);
|
|
77
|
+
}
|
|
78
|
+
const slash = range.indexOf("/");
|
|
79
|
+
const networkText = slash === -1 ? range : range.slice(0, slash);
|
|
80
|
+
const network = parseIpAddress(networkText);
|
|
81
|
+
if (network === null || address.length !== network.length)
|
|
82
|
+
return false;
|
|
83
|
+
const bits = slash === -1 ? network.length * 8 : Number(range.slice(slash + 1));
|
|
84
|
+
if (!Number.isInteger(bits) || bits < 0 || bits > network.length * 8) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const fullBytes = Math.floor(bits / 8);
|
|
88
|
+
for (let i = 0; i < fullBytes; i++) {
|
|
89
|
+
if (address[i] !== network[i])
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const remainingBits = bits % 8;
|
|
93
|
+
if (remainingBits === 0)
|
|
94
|
+
return true;
|
|
95
|
+
const mask = (0xff << (8 - remainingBits)) & 0xff;
|
|
96
|
+
return (address[fullBytes] & mask) === (network[fullBytes] & mask);
|
|
97
|
+
}
|
|
98
|
+
export function isValidIpAddress(value) {
|
|
99
|
+
return parseIpAddress(value) !== null;
|
|
100
|
+
}
|
|
101
|
+
function parseIpAddress(value) {
|
|
102
|
+
const version = isIP(value);
|
|
103
|
+
if (version === 4) {
|
|
104
|
+
const bytes = value.split(".").map(Number);
|
|
105
|
+
if (bytes.length !== 4)
|
|
106
|
+
return null;
|
|
107
|
+
return Uint8Array.from(bytes);
|
|
108
|
+
}
|
|
109
|
+
if (version !== 6)
|
|
110
|
+
return null;
|
|
111
|
+
let address = value.toLowerCase();
|
|
112
|
+
if (address.includes(".")) {
|
|
113
|
+
const separator = address.lastIndexOf(":");
|
|
114
|
+
const ipv4 = address
|
|
115
|
+
.slice(separator + 1)
|
|
116
|
+
.split(".")
|
|
117
|
+
.map(Number);
|
|
118
|
+
if (separator === -1 || ipv4.length !== 4)
|
|
119
|
+
return null;
|
|
120
|
+
const high = ((ipv4[0] << 8) | ipv4[1]).toString(16);
|
|
121
|
+
const low = ((ipv4[2] << 8) | ipv4[3]).toString(16);
|
|
122
|
+
address = `${address.slice(0, separator + 1)}${high}:${low}`;
|
|
123
|
+
}
|
|
124
|
+
const halves = address.split("::");
|
|
125
|
+
if (halves.length > 2)
|
|
126
|
+
return null;
|
|
127
|
+
const left = halves[0] ? halves[0].split(":") : [];
|
|
128
|
+
const right = halves.length === 2 && halves[1] ? halves[1].split(":") : [];
|
|
129
|
+
const missing = 8 - left.length - right.length;
|
|
130
|
+
if ((halves.length === 1 && missing !== 0) ||
|
|
131
|
+
(halves.length === 2 && missing < 1)) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const groups = [
|
|
135
|
+
...left,
|
|
136
|
+
...new Array(halves.length === 2 ? missing : 0).fill("0"),
|
|
137
|
+
...right,
|
|
138
|
+
];
|
|
139
|
+
if (groups.length !== 8 ||
|
|
140
|
+
groups.some((group) => !/^[0-9a-f]{1,4}$/.test(group))) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const bytes = new Uint8Array(16);
|
|
144
|
+
for (let i = 0; i < groups.length; i++) {
|
|
145
|
+
const group = Number.parseInt(groups[i], 16);
|
|
146
|
+
bytes[i * 2] = group >>> 8;
|
|
147
|
+
bytes[i * 2 + 1] = group & 0xff;
|
|
148
|
+
}
|
|
149
|
+
return bytes;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=ip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip.js","sourceRoot":"","sources":["../../src/internal/ip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ParsedTarget {
|
|
2
|
+
pathname: string;
|
|
3
|
+
query: string | undefined;
|
|
4
|
+
}
|
|
5
|
+
export declare function hasEncodedSlash(path: string): boolean;
|
|
6
|
+
export declare function normalizeDotSegments(path: string): string;
|
|
7
|
+
export declare function scanPathname(url: string): string;
|
|
8
|
+
export declare function parseRequestTarget(url: string): ParsedTarget;
|
|
9
|
+
//# sourceMappingURL=pathname.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathname.d.ts","sourceRoot":"","sources":["../../src/internal/pathname.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAoDD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAoBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2BzD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBhD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAuC5D"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
function decodeSegment(seg) {
|
|
2
|
+
if (seg.indexOf("%") === -1)
|
|
3
|
+
return seg;
|
|
4
|
+
try {
|
|
5
|
+
return decodeURIComponent(seg);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return seg;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function decodePercentSegment(seg) {
|
|
12
|
+
try {
|
|
13
|
+
return decodeURIComponent(seg);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return seg;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function isDotSegment(seg) {
|
|
20
|
+
return seg === "." || seg === "..";
|
|
21
|
+
}
|
|
22
|
+
function hasDotSegment(path) {
|
|
23
|
+
let i = 0;
|
|
24
|
+
const len = path.length;
|
|
25
|
+
while (i < len) {
|
|
26
|
+
while (i < len && path.charCodeAt(i) === 47)
|
|
27
|
+
i++;
|
|
28
|
+
if (i >= len)
|
|
29
|
+
break;
|
|
30
|
+
const endIdx = path.indexOf("/", i);
|
|
31
|
+
const segEnd = endIdx === -1 ? len : endIdx;
|
|
32
|
+
const segmentLength = segEnd - i;
|
|
33
|
+
if ((segmentLength === 1 && path.charCodeAt(i) === 46) ||
|
|
34
|
+
(segmentLength === 2 &&
|
|
35
|
+
path.charCodeAt(i) === 46 &&
|
|
36
|
+
path.charCodeAt(i + 1) === 46)) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const percent = path.indexOf("%", i);
|
|
40
|
+
if (percent !== -1 && percent < segEnd) {
|
|
41
|
+
const decoded = decodePercentSegment(path.slice(i, segEnd));
|
|
42
|
+
if (isDotSegment(decoded))
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (endIdx === -1)
|
|
46
|
+
break;
|
|
47
|
+
i = endIdx + 1;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
export function hasEncodedSlash(path) {
|
|
52
|
+
return path.includes("%2f") || path.includes("%2F");
|
|
53
|
+
}
|
|
54
|
+
function targetStart(url) {
|
|
55
|
+
if (url.charCodeAt(0) === 47)
|
|
56
|
+
return 0;
|
|
57
|
+
if (url.charCodeAt(4) === 58 &&
|
|
58
|
+
url.charCodeAt(5) === 47 &&
|
|
59
|
+
url.charCodeAt(6) === 47)
|
|
60
|
+
return 7;
|
|
61
|
+
if (url.charCodeAt(5) === 58 &&
|
|
62
|
+
url.charCodeAt(6) === 47 &&
|
|
63
|
+
url.charCodeAt(7) === 47)
|
|
64
|
+
return 8;
|
|
65
|
+
const scheme = url.indexOf("://");
|
|
66
|
+
return scheme === -1 ? 0 : scheme + 3;
|
|
67
|
+
}
|
|
68
|
+
export function normalizeDotSegments(path) {
|
|
69
|
+
const len = path.length;
|
|
70
|
+
const segments = [];
|
|
71
|
+
let start = 0;
|
|
72
|
+
while (start < len) {
|
|
73
|
+
while (start < len && path.charCodeAt(start) === 47)
|
|
74
|
+
start++;
|
|
75
|
+
if (start >= len)
|
|
76
|
+
break;
|
|
77
|
+
const end = path.indexOf("/", start);
|
|
78
|
+
const segEnd = end === -1 ? len : end;
|
|
79
|
+
const rawSeg = path.slice(start, segEnd);
|
|
80
|
+
const decodedSeg = decodeSegment(rawSeg);
|
|
81
|
+
if (decodedSeg === ".") {
|
|
82
|
+
}
|
|
83
|
+
else if (decodedSeg === "..") {
|
|
84
|
+
segments.pop();
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
segments.push(rawSeg);
|
|
88
|
+
}
|
|
89
|
+
if (end === -1)
|
|
90
|
+
break;
|
|
91
|
+
start = end + 1;
|
|
92
|
+
}
|
|
93
|
+
const res = `/${segments.join("/")}`;
|
|
94
|
+
const endsWithSlash = path.endsWith("/") || path.endsWith("/.") || path.endsWith("/..");
|
|
95
|
+
return path.length > 1 && endsWithSlash && res !== "/" ? `${res}/` : res;
|
|
96
|
+
}
|
|
97
|
+
export function scanPathname(url) {
|
|
98
|
+
const s = targetStart(url);
|
|
99
|
+
const slash = url.indexOf("/", s);
|
|
100
|
+
if (slash === -1)
|
|
101
|
+
return "/";
|
|
102
|
+
let end = url.indexOf("?", slash);
|
|
103
|
+
if (end === -1) {
|
|
104
|
+
end = url.indexOf("#", slash);
|
|
105
|
+
if (end === -1)
|
|
106
|
+
end = url.length;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const hash = url.indexOf("#", slash);
|
|
110
|
+
if (hash !== -1 && hash < end)
|
|
111
|
+
end = hash;
|
|
112
|
+
}
|
|
113
|
+
const raw = url.slice(slash, end);
|
|
114
|
+
if (raw.indexOf(".") === -1 && raw.indexOf("%") === -1)
|
|
115
|
+
return raw;
|
|
116
|
+
if (hasEncodedSlash(raw)) {
|
|
117
|
+
return raw;
|
|
118
|
+
}
|
|
119
|
+
return hasDotSegment(raw) ? normalizeDotSegments(raw) : raw;
|
|
120
|
+
}
|
|
121
|
+
export function parseRequestTarget(url) {
|
|
122
|
+
const s = targetStart(url);
|
|
123
|
+
const slash = url.indexOf("/", s);
|
|
124
|
+
let pathname;
|
|
125
|
+
let query;
|
|
126
|
+
if (slash === -1) {
|
|
127
|
+
pathname = "/";
|
|
128
|
+
const q = url.indexOf("?", s);
|
|
129
|
+
const h = url.indexOf("#", s);
|
|
130
|
+
if (q !== -1 && (h === -1 || q < h)) {
|
|
131
|
+
query = h === -1 ? url.slice(q + 1) : url.slice(q + 1, h);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
let end = url.indexOf("?", slash);
|
|
136
|
+
const hash = url.indexOf("#", slash);
|
|
137
|
+
if (hash !== -1 && (end === -1 || hash < end))
|
|
138
|
+
end = hash;
|
|
139
|
+
if (end === -1) {
|
|
140
|
+
end = url.length;
|
|
141
|
+
}
|
|
142
|
+
else if (url.charCodeAt(end) === 63) {
|
|
143
|
+
query =
|
|
144
|
+
hash !== -1 && hash > end
|
|
145
|
+
? url.slice(end + 1, hash)
|
|
146
|
+
: url.slice(end + 1);
|
|
147
|
+
}
|
|
148
|
+
const raw = url.slice(slash, end);
|
|
149
|
+
if (hasEncodedSlash(raw)) {
|
|
150
|
+
pathname = raw;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
pathname = hasDotSegment(raw) ? normalizeDotSegments(raw) : raw;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return { pathname, query };
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=pathname.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathname.js","sourceRoot":"","sources":["../../src/internal/pathname.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function findQueryParam(url: string, name: string, startPos?: number): string | null;
|
|
2
|
+
export declare function findQueryParamAll(url: string, name: string): string[];
|
|
3
|
+
export declare function parseAllQueryParams(url: string): Record<string, string>;
|
|
4
|
+
export declare function parseFastQuery(url: string, startPos: number): Record<string, string>;
|
|
5
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/internal/query.ts"],"names":[],"mappings":"AAaA,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAkCf;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BrE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBvE;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
function decodeQueryComponent(value) {
|
|
2
|
+
const hasPlus = value.indexOf("+") !== -1;
|
|
3
|
+
const hasPercent = value.indexOf("%") !== -1;
|
|
4
|
+
if (!hasPlus && !hasPercent)
|
|
5
|
+
return value;
|
|
6
|
+
const formValue = hasPlus ? value.replace(/\+/g, " ") : value;
|
|
7
|
+
if (!hasPercent)
|
|
8
|
+
return formValue;
|
|
9
|
+
try {
|
|
10
|
+
return decodeURIComponent(formValue);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return new URLSearchParams(`v=${value}`).get("v") ?? "";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function findQueryParam(url, name, startPos) {
|
|
17
|
+
const queryStart = startPos !== undefined && startPos >= 0 ? startPos : url.indexOf("?");
|
|
18
|
+
if (queryStart === -1)
|
|
19
|
+
return null;
|
|
20
|
+
let s = queryStart + 1;
|
|
21
|
+
const len = url.length;
|
|
22
|
+
const nameLen = name.length;
|
|
23
|
+
while (s < len) {
|
|
24
|
+
if (url.startsWith(name, s)) {
|
|
25
|
+
const eqPos = s + nameLen;
|
|
26
|
+
const nextChar = url.charCodeAt(eqPos);
|
|
27
|
+
if (nextChar === 61) {
|
|
28
|
+
// '='
|
|
29
|
+
const valStart = eqPos + 1;
|
|
30
|
+
let amp = url.indexOf("&", valStart);
|
|
31
|
+
if (amp === -1)
|
|
32
|
+
amp = len;
|
|
33
|
+
const val = url.slice(valStart, amp);
|
|
34
|
+
if (val.indexOf("+") === -1 && val.indexOf("%") === -1) {
|
|
35
|
+
return val;
|
|
36
|
+
}
|
|
37
|
+
return decodeQueryComponent(val);
|
|
38
|
+
}
|
|
39
|
+
if (nextChar === 38 || eqPos === len) {
|
|
40
|
+
return "";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const amp = url.indexOf("&", s);
|
|
44
|
+
if (amp === -1)
|
|
45
|
+
break;
|
|
46
|
+
s = amp + 1;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export function findQueryParamAll(url, name) {
|
|
51
|
+
const res = [];
|
|
52
|
+
const queryStart = url.indexOf("?");
|
|
53
|
+
if (queryStart === -1)
|
|
54
|
+
return res;
|
|
55
|
+
const len = url.length;
|
|
56
|
+
let s = queryStart + 1;
|
|
57
|
+
const nLen = name.length;
|
|
58
|
+
while (s < len) {
|
|
59
|
+
let amp = url.indexOf("&", s);
|
|
60
|
+
if (amp === -1)
|
|
61
|
+
amp = len;
|
|
62
|
+
let eq = url.indexOf("=", s);
|
|
63
|
+
if (eq === -1 || eq > amp)
|
|
64
|
+
eq = amp;
|
|
65
|
+
if (eq - s === nLen && url.startsWith(name, s)) {
|
|
66
|
+
const val = eq < amp ? url.slice(eq + 1, amp) : "";
|
|
67
|
+
if (val.indexOf("%") === -1 && val.indexOf("+") === -1) {
|
|
68
|
+
res.push(val);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
try {
|
|
72
|
+
res.push(decodeURIComponent(val.replace(/\+/g, " ")));
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
res.push(val);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
s = amp + 1;
|
|
80
|
+
}
|
|
81
|
+
return res;
|
|
82
|
+
}
|
|
83
|
+
export function parseAllQueryParams(url) {
|
|
84
|
+
const qIdx = url.indexOf("?");
|
|
85
|
+
if (qIdx === -1)
|
|
86
|
+
return Object.create(null);
|
|
87
|
+
const len = url.length;
|
|
88
|
+
const res = Object.create(null);
|
|
89
|
+
let s = qIdx + 1;
|
|
90
|
+
while (s < len) {
|
|
91
|
+
let amp = url.indexOf("&", s);
|
|
92
|
+
if (amp === -1)
|
|
93
|
+
amp = len;
|
|
94
|
+
let eq = url.indexOf("=", s);
|
|
95
|
+
if (eq === -1 || eq > amp)
|
|
96
|
+
eq = amp;
|
|
97
|
+
const k = decodeQueryComponent(url.slice(s, eq));
|
|
98
|
+
const v = eq < amp ? decodeQueryComponent(url.slice(eq + 1, amp)) : "";
|
|
99
|
+
if (res[k] === undefined)
|
|
100
|
+
res[k] = v;
|
|
101
|
+
s = amp + 1;
|
|
102
|
+
}
|
|
103
|
+
return res;
|
|
104
|
+
}
|
|
105
|
+
export function parseFastQuery(url, startPos) {
|
|
106
|
+
const out = Object.create(null);
|
|
107
|
+
let s = startPos;
|
|
108
|
+
const len = url.length;
|
|
109
|
+
while (s < len) {
|
|
110
|
+
let eq = url.indexOf("=", s);
|
|
111
|
+
if (eq === -1)
|
|
112
|
+
eq = len;
|
|
113
|
+
let amp = url.indexOf("&", eq < len ? eq + 1 : s);
|
|
114
|
+
if (amp === -1)
|
|
115
|
+
amp = len;
|
|
116
|
+
const k = url.slice(s, eq);
|
|
117
|
+
const v = eq < amp ? url.slice(eq + 1, amp) : "";
|
|
118
|
+
out[k] =
|
|
119
|
+
v.indexOf("+") === -1 && v.indexOf("%") === -1
|
|
120
|
+
? v
|
|
121
|
+
: decodeURIComponent(v.replace(/\+/g, " "));
|
|
122
|
+
s = amp + 1;
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/internal/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token-based lexical scanner + semantic analyzer for handler functions.
|
|
3
|
+
* Runs ONCE per route at registration time. Zero dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export interface LiteralInfo {
|
|
6
|
+
kind: "string" | "json";
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
export type HandlerFunction = (...args: never[]) => unknown;
|
|
10
|
+
export type ParamSerializer = (params: Record<string, string> | string) => string;
|
|
11
|
+
export interface ParamEntry {
|
|
12
|
+
key: string;
|
|
13
|
+
isParam: boolean;
|
|
14
|
+
paramKey?: string;
|
|
15
|
+
literalValue?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface HandlerAnalysis {
|
|
18
|
+
isNoArg: boolean;
|
|
19
|
+
contextProps: Set<string>;
|
|
20
|
+
hasDynamicAccess: boolean;
|
|
21
|
+
isDestructured: boolean;
|
|
22
|
+
destructuredProps: Set<string>;
|
|
23
|
+
literal: LiteralInfo | null;
|
|
24
|
+
arglessJsonCall: boolean;
|
|
25
|
+
isParamJson?: boolean;
|
|
26
|
+
paramJsonKey?: string;
|
|
27
|
+
paramSerializer?: ParamSerializer | null;
|
|
28
|
+
paramParts?: ParamEntry[] | null;
|
|
29
|
+
}
|
|
30
|
+
export declare const ESCAPE_JSON_CHARS_RE: RegExp;
|
|
31
|
+
export declare function escapeJsonString(value: string): string;
|
|
32
|
+
export declare function analyzeHandler(fn: HandlerFunction): HandlerAnalysis;
|
|
33
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/internal/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAC5D,MAAM,MAAM,eAAe,GAAG,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,KACpC,MAAM,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;CAClC;AAUD,eAAO,MAAM,oBAAoB,QAAuB,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtD;AA0XD,wBAAgB,cAAc,CAAC,EAAE,EAAE,eAAe,GAAG,eAAe,CA2FnE"}
|