spooder 6.1.5 → 6.1.7
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/bun.lock +4 -7
- package/package.json +1 -1
- package/src/api.ts +18 -5
- package/src/cli.ts +2 -0
package/bun.lock
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"lockfileVersion": 1,
|
|
3
|
+
"configVersion": 1,
|
|
3
4
|
"workspaces": {
|
|
4
5
|
"": {
|
|
5
6
|
"name": "spooder",
|
|
@@ -9,15 +10,11 @@
|
|
|
9
10
|
},
|
|
10
11
|
},
|
|
11
12
|
"packages": {
|
|
12
|
-
"@types/bun": ["@types/bun@1.3.
|
|
13
|
+
"@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="],
|
|
13
14
|
|
|
14
|
-
"@types/node": ["@types/node@24.
|
|
15
|
+
"@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="],
|
|
15
16
|
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
"bun-types": ["bun-types@1.3.1", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-NMrcy7smratanWJ2mMXdpatalovtxVggkj11bScuWuiOoXTiKIu2eVS1/7qbyI/4yHedtsn175n4Sm4JcdHLXw=="],
|
|
19
|
-
|
|
20
|
-
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
|
|
17
|
+
"bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="],
|
|
21
18
|
|
|
22
19
|
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
|
23
20
|
}
|
package/package.json
CHANGED
package/src/api.ts
CHANGED
|
@@ -1841,24 +1841,37 @@ export function http_serve(port: number, hostname?: string) {
|
|
|
1841
1841
|
/** Register a JSON endpoint with automatic content validation. */
|
|
1842
1842
|
json: (path: string, handler: JSONRequestHandler, method: HTTP_METHODS = 'POST'): void => {
|
|
1843
1843
|
const json_wrapper: RequestHandler = async (req: Request, url: URL) => {
|
|
1844
|
+
// handle CORS preflight
|
|
1845
|
+
if (req.method === 'OPTIONS') {
|
|
1846
|
+
return new Response(null, {
|
|
1847
|
+
status: 204,
|
|
1848
|
+
headers: {
|
|
1849
|
+
'Access-Control-Allow-Origin': '*',
|
|
1850
|
+
'Access-Control-Allow-Methods': `${Array.isArray(method) ? method.join(', ') : method}, OPTIONS`,
|
|
1851
|
+
'Access-Control-Allow-Headers': 'Content-Type, User-Agent'
|
|
1852
|
+
}
|
|
1853
|
+
});
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1844
1856
|
try {
|
|
1845
1857
|
if (req.headers.get('Content-Type') !== 'application/json')
|
|
1846
1858
|
return 400; // Bad Request
|
|
1847
|
-
|
|
1859
|
+
|
|
1848
1860
|
const json = await req.json();
|
|
1849
1861
|
if (json === null || typeof json !== 'object' || Array.isArray(json))
|
|
1850
1862
|
return 400; // Bad Request
|
|
1851
|
-
|
|
1863
|
+
|
|
1852
1864
|
return handler(req, url, json as JsonObject);
|
|
1853
1865
|
} catch (e) {
|
|
1854
1866
|
return 400; // Bad Request
|
|
1855
1867
|
}
|
|
1856
1868
|
};
|
|
1857
|
-
|
|
1869
|
+
|
|
1858
1870
|
if (path.length > 1 && path.endsWith('/'))
|
|
1859
1871
|
path = path.slice(0, -1);
|
|
1860
|
-
|
|
1861
|
-
|
|
1872
|
+
|
|
1873
|
+
const methods: HTTP_METHODS = Array.isArray(method) ? [...method, 'OPTIONS'] : [method, 'OPTIONS'];
|
|
1874
|
+
routes.push([path.split('/'), json_wrapper, methods]);
|
|
1862
1875
|
},
|
|
1863
1876
|
|
|
1864
1877
|
/** Unregister a specific route */
|