itty-router 3.0.0-next.0 → 3.0.0-next.1
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/CHANGELOG.md +1 -0
- package/dist/itty-router.d.ts +28 -59
- package/dist/itty-router.js +4 -25
- package/dist/itty-router.mjs +4 -25
- package/package.json +9 -10
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,7 @@ Until this library makes it to a production release of v1.x, **minor versions ma
|
|
|
3
3
|
|
|
4
4
|
[@SupremeTechnopriest)(https://github.com/SupremeTechnopriest) - improved TypeScript support and documentation! :D\
|
|
5
5
|
|
|
6
|
+
- **v3.0.0** - total TS conversion with improved types, adding greedy params (credit [@markusahlstrand](https://github.com/markusahlstrand))
|
|
6
7
|
- **v2.6.4** - merely a republish, attempting to solve NPM test scores vs CI/CD
|
|
7
8
|
- **v2.6.2** - fixes issue with using base path of "/" with route definitions starting with "/" (creating double slash)
|
|
8
9
|
- **v2.6.1** - fixes named export in ESM/mjs export
|
package/dist/itty-router.d.ts
CHANGED
|
@@ -1,59 +1,28 @@
|
|
|
1
|
-
type
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
text?(): Promise<any>
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
interface IHTTPMethods {
|
|
33
|
-
get: Route
|
|
34
|
-
head: Route
|
|
35
|
-
post: Route
|
|
36
|
-
put: Route
|
|
37
|
-
delete: Route
|
|
38
|
-
connect: Route
|
|
39
|
-
options: Route
|
|
40
|
-
trace: Route
|
|
41
|
-
patch: Route
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
interface RouterOptions<TRequest> {
|
|
45
|
-
base?: string
|
|
46
|
-
routes?: RouteEntry<TRequest>[]
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
type Router<TRequest = Request, TMethods = {}> = {
|
|
50
|
-
handle: (request: TRequest, ...extra: any) => Promise<any>
|
|
51
|
-
routes: RouteEntry<TRequest>[]
|
|
52
|
-
all: Route
|
|
53
|
-
} & TMethods & {
|
|
54
|
-
[any:string]: Route
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
declare function Router<TRequest = Request, TMethods = {}>(options?:RouterOptions<TRequest>): Router<TRequest, TMethods>
|
|
58
|
-
|
|
59
|
-
export { IHTTPMethods, Obj, Request, Route, RouteEntry, RouteHandler, Router, RouterOptions };
|
|
1
|
+
declare type RequestTraps = {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
};
|
|
4
|
+
declare type RequestLike = {
|
|
5
|
+
method: string;
|
|
6
|
+
url: string;
|
|
7
|
+
} & RequestTraps;
|
|
8
|
+
interface RouterOptions {
|
|
9
|
+
base?: string;
|
|
10
|
+
routes?: RouteEntry[];
|
|
11
|
+
}
|
|
12
|
+
interface RouteHandler {
|
|
13
|
+
(request: RequestLike, ...args: any): any;
|
|
14
|
+
}
|
|
15
|
+
declare type RouteEntry = [string, RegExp, RouteHandler[]];
|
|
16
|
+
declare type Route = (path: string, ...handlers: RouteHandler[]) => RouterType;
|
|
17
|
+
declare type RouterTraps = {
|
|
18
|
+
get?: Route;
|
|
19
|
+
post?: Route;
|
|
20
|
+
};
|
|
21
|
+
declare type RouterType = {
|
|
22
|
+
__proto__: RouterType;
|
|
23
|
+
routes: RouteEntry[];
|
|
24
|
+
handle: (request: RequestLike, ...extra: any) => Promise<any>;
|
|
25
|
+
} & RouterTraps;
|
|
26
|
+
declare function Router({ base, routes }?: RouterOptions): RouterType;
|
|
27
|
+
|
|
28
|
+
export { RequestLike, RequestTraps, Route, RouteEntry, RouteHandler, Router, RouterOptions, RouterTraps, RouterType };
|
package/dist/itty-router.js
CHANGED
|
@@ -22,31 +22,10 @@ __export(itty_router_exports, {
|
|
|
22
22
|
Router: () => Router
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(itty_router_exports);
|
|
25
|
-
var
|
|
26
|
-
var query = (params, out = {}) => {
|
|
27
|
-
for (const [k, v] of params.entries()) {
|
|
28
|
-
if (typeof out[k] === "object") {
|
|
29
|
-
out[k].push(v);
|
|
30
|
-
} else if (out[k] === void 0) {
|
|
31
|
-
out[k] = v;
|
|
32
|
-
} else {
|
|
33
|
-
out[k] = [out[k], v];
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return out;
|
|
37
|
-
};
|
|
38
|
-
var query2 = (params) => [...params.entries()].reduce((acc, [k, v]) => {
|
|
39
|
-
if (acc[k] === void 0)
|
|
40
|
-
return (acc[k] = v) && acc;
|
|
41
|
-
return (acc[k] = [...[acc[k]], v].flat()) && acc;
|
|
42
|
-
}, {});
|
|
43
|
-
var query3 = (params) => [...params.entries()].reduce(
|
|
25
|
+
var toQuery = (params) => [...params.entries()].reduce(
|
|
44
26
|
(acc, [k, v]) => (acc[k] === void 0 ? acc[k] = v : acc[k] = [...[acc[k]], v].flat()) && acc,
|
|
45
27
|
{}
|
|
46
28
|
);
|
|
47
|
-
console.log(query(url.searchParams));
|
|
48
|
-
console.log(query2(url.searchParams));
|
|
49
|
-
console.log(query3(url.searchParams));
|
|
50
29
|
function Router({ base = "", routes = [] } = {}) {
|
|
51
30
|
return {
|
|
52
31
|
__proto__: new Proxy({}, {
|
|
@@ -58,10 +37,10 @@ function Router({ base = "", routes = [] } = {}) {
|
|
|
58
37
|
}),
|
|
59
38
|
routes,
|
|
60
39
|
async handle(request, ...args) {
|
|
61
|
-
let response, match,
|
|
62
|
-
request.query =
|
|
40
|
+
let response, match, url = new URL(request.url);
|
|
41
|
+
request.query = toQuery(url.searchParams);
|
|
63
42
|
for (let [method, route, handlers] of routes) {
|
|
64
|
-
if ((method === request.method || method === "ALL") && (match =
|
|
43
|
+
if ((method === request.method || method === "ALL") && (match = url.pathname.match(route))) {
|
|
65
44
|
request.params = match.groups;
|
|
66
45
|
for (let handler of handlers) {
|
|
67
46
|
if ((response = await handler(request.proxy || request, ...args)) !== void 0)
|
package/dist/itty-router.mjs
CHANGED
|
@@ -1,29 +1,8 @@
|
|
|
1
1
|
// src/itty-router.ts
|
|
2
|
-
var
|
|
3
|
-
var query = (params, out = {}) => {
|
|
4
|
-
for (const [k, v] of params.entries()) {
|
|
5
|
-
if (typeof out[k] === "object") {
|
|
6
|
-
out[k].push(v);
|
|
7
|
-
} else if (out[k] === void 0) {
|
|
8
|
-
out[k] = v;
|
|
9
|
-
} else {
|
|
10
|
-
out[k] = [out[k], v];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return out;
|
|
14
|
-
};
|
|
15
|
-
var query2 = (params) => [...params.entries()].reduce((acc, [k, v]) => {
|
|
16
|
-
if (acc[k] === void 0)
|
|
17
|
-
return (acc[k] = v) && acc;
|
|
18
|
-
return (acc[k] = [...[acc[k]], v].flat()) && acc;
|
|
19
|
-
}, {});
|
|
20
|
-
var query3 = (params) => [...params.entries()].reduce(
|
|
2
|
+
var toQuery = (params) => [...params.entries()].reduce(
|
|
21
3
|
(acc, [k, v]) => (acc[k] === void 0 ? acc[k] = v : acc[k] = [...[acc[k]], v].flat()) && acc,
|
|
22
4
|
{}
|
|
23
5
|
);
|
|
24
|
-
console.log(query(url.searchParams));
|
|
25
|
-
console.log(query2(url.searchParams));
|
|
26
|
-
console.log(query3(url.searchParams));
|
|
27
6
|
function Router({ base = "", routes = [] } = {}) {
|
|
28
7
|
return {
|
|
29
8
|
__proto__: new Proxy({}, {
|
|
@@ -35,10 +14,10 @@ function Router({ base = "", routes = [] } = {}) {
|
|
|
35
14
|
}),
|
|
36
15
|
routes,
|
|
37
16
|
async handle(request, ...args) {
|
|
38
|
-
let response, match,
|
|
39
|
-
request.query =
|
|
17
|
+
let response, match, url = new URL(request.url);
|
|
18
|
+
request.query = toQuery(url.searchParams);
|
|
40
19
|
for (let [method, route, handlers] of routes) {
|
|
41
|
-
if ((method === request.method || method === "ALL") && (match =
|
|
20
|
+
if ((method === request.method || method === "ALL") && (match = url.pathname.match(route))) {
|
|
42
21
|
request.params = match.groups;
|
|
43
22
|
for (let handler of handlers) {
|
|
44
23
|
if ((response = await handler(request.proxy || request, ...args)) !== void 0)
|
package/package.json
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "itty-router",
|
|
3
|
-
"version": "3.0.0-next.
|
|
3
|
+
"version": "3.0.0-next.1",
|
|
4
4
|
"description": "Tiny, zero-dependency API router - built for Cloudflare Workers, but works everywhere!",
|
|
5
5
|
"sourceType": "module",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"dist/itty-router.mjs",
|
|
9
|
-
"dist/itty-router.d.ts"
|
|
10
|
-
],
|
|
11
|
-
"main": "./dist/itty-router.min.js",
|
|
6
|
+
"main": "./dist/itty-router.js",
|
|
7
|
+
"types": "./dist/itty-router.d.ts",
|
|
12
8
|
"exports": {
|
|
13
9
|
".": {
|
|
14
10
|
"types": "./dist/itty-router.d.ts",
|
|
15
11
|
"import": "./dist/itty-router.mjs",
|
|
16
|
-
"require": "./dist/itty-router.js"
|
|
17
|
-
"default": "./dist/itty-router.mjs"
|
|
12
|
+
"require": "./dist/itty-router.js"
|
|
18
13
|
}
|
|
19
14
|
},
|
|
20
|
-
"
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"LICENSE",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
21
20
|
"keywords": [
|
|
22
21
|
"api",
|
|
23
22
|
"router",
|