clear-router 2.8.0 → 2.8.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.
@@ -1,4 +1,6 @@
1
1
  const require_ResourceRouteSelection = require('./ResourceRouteSelection.cjs');
2
+ const require_helpers = require('./core/helpers.cjs');
3
+ require('./core/index.cjs');
2
4
 
3
5
  //#region src/ResourceRoutes.ts
4
6
  /**
@@ -7,17 +9,78 @@ const require_ResourceRouteSelection = require('./ResourceRouteSelection.cjs');
7
9
  * @author 3m1n3nc3
8
10
  * @repository https://github.com/arkstack-tmp/clear-router
9
11
  */
10
- var ResourceRoutes = class {
11
- constructor(routes) {
12
- this.routes = routes;
12
+ var ResourceRoutes = class ResourceRoutes {
13
+ static actions = {
14
+ index: {
15
+ method: "get",
16
+ path: "/"
17
+ },
18
+ show: {
19
+ method: "get",
20
+ path: "/:{param}"
21
+ },
22
+ create: {
23
+ method: "post",
24
+ path: "/"
25
+ },
26
+ update: {
27
+ method: "put",
28
+ path: "/:{param}"
29
+ },
30
+ destroy: {
31
+ method: "delete",
32
+ path: "/:{param}"
33
+ }
34
+ };
35
+ routes = {};
36
+ options;
37
+ chainedMiddlewares = [];
38
+ constructor(basePath, controller, paramName, options, registerRoute, removeRoute) {
39
+ this.basePath = basePath;
40
+ this.controller = controller;
41
+ this.paramName = paramName;
42
+ this.registerRoute = registerRoute;
43
+ this.removeRoute = removeRoute;
44
+ this.options = options ?? {};
45
+ }
46
+ register() {
47
+ this.clear();
48
+ const preController = typeof this.controller === "function" ? new this.controller() : this.controller;
49
+ for (const action of this.selectedActions()) {
50
+ if (typeof preController[action] !== "function") continue;
51
+ const definition = this.definitionFor(action);
52
+ const route = this.registerRoute({
53
+ action,
54
+ method: definition.method,
55
+ path: `${this.basePath}${definition.path}`,
56
+ handler: [this.controller, action],
57
+ middlewares: this.resolveActionMiddlewares(action),
58
+ name: `${this.nameFor(definition.path)}.${action.toLowerCase()}`
59
+ });
60
+ this.routes[action] = route;
61
+ }
62
+ for (const middlewares of this.chainedMiddlewares) this.middleware(middlewares, false);
63
+ return this;
64
+ }
65
+ /**
66
+ * Only register routes for the provided actions.
67
+ */
68
+ only(action, ...actions) {
69
+ this.options.only = Array.from(new Set(require_helpers.wrap(action).concat(actions)));
70
+ return this.register();
71
+ }
72
+ /**
73
+ * Register all resource routes except the provided actions.
74
+ */
75
+ except(action, ...actions) {
76
+ this.options.except = Array.from(new Set(require_helpers.wrap(action).concat(actions)));
77
+ return this.register();
13
78
  }
14
79
  /**
15
80
  * Register one or more middleware that will be executed before the route.
16
- *
17
- * @param middlewares
18
- * @returns
19
81
  */
20
- middleware(middlewares) {
82
+ middleware(middlewares, remember = true) {
83
+ if (remember) this.chainedMiddlewares.push(middlewares);
21
84
  for (const route of Object.values(this.routes)) route?.middleware(middlewares);
22
85
  return this;
23
86
  }
@@ -51,9 +114,36 @@ var ResourceRoutes = class {
51
114
  delete() {
52
115
  return this.byMethod("delete");
53
116
  }
117
+ selectedActions() {
118
+ const actions = this.options.only?.length ? this.options.only : Object.keys(ResourceRoutes.actions);
119
+ const except = new Set(this.options.except ?? []);
120
+ return actions.filter((action) => !except.has(action));
121
+ }
122
+ definitionFor(action) {
123
+ const definition = ResourceRoutes.actions[action];
124
+ return {
125
+ method: definition.method,
126
+ path: definition.path.replace("{param}", this.paramName)
127
+ };
128
+ }
129
+ resolveActionMiddlewares(action) {
130
+ const middlewares = this.isActionMiddlewareMap(this.options.middlewares) ? this.options.middlewares[action] : this.options.middlewares;
131
+ return Array.isArray(middlewares) ? middlewares : middlewares ? [middlewares] : void 0;
132
+ }
133
+ isActionMiddlewareMap(middlewares) {
134
+ if (!middlewares || Array.isArray(middlewares) || typeof middlewares !== "object") return false;
135
+ return Object.keys(ResourceRoutes.actions).some((action) => action in middlewares);
136
+ }
137
+ nameFor(path) {
138
+ return `${this.basePath}${path}`.replace(/\/:[^/]+|\/\{[^}]+\}/g, "").replace(/\{(\w+):[^}]+\}/g, "$1").replace(/\/|:|[{}]/g, ".").replace(/\.{2,}/g, ".").replace(/^\.|\.$/g, "");
139
+ }
54
140
  byMethod(method) {
55
141
  return new require_ResourceRouteSelection.ResourceRouteSelection(Object.values(this.routes).filter((route) => Boolean(route?.methods.includes(method))));
56
142
  }
143
+ clear() {
144
+ for (const route of Object.values(this.routes)) if (route) this.removeRoute(route);
145
+ for (const key of Object.keys(this.routes)) delete this.routes[key];
146
+ }
57
147
  };
58
148
 
59
149
  //#endregion
@@ -1,10 +1,28 @@
1
- import { HttpMethod, ResourceAction } from "./types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "./types/basic.cjs";
2
2
  import { Middleware } from "./types/express.cjs";
3
3
  import { Middleware as Middleware$1 } from "./types/h3.cjs";
4
4
  import { Route } from "./Route.cjs";
5
5
  import { ResourceRouteSelection } from "./ResourceRouteSelection.cjs";
6
6
 
7
7
  //#region src/ResourceRoutes.d.ts
8
+ type ResourceRouteDefinition = {
9
+ method: HttpMethod;
10
+ path: string;
11
+ };
12
+ type ResourceRouteRegistrar<X, M, H> = (input: {
13
+ action: ResourceAction;
14
+ method: HttpMethod;
15
+ path: string;
16
+ handler: any;
17
+ middlewares?: M[];
18
+ name: string;
19
+ }) => Route<X, M, H>;
20
+ type ResourceRouteRemover<X, M, H> = (route: Route<X, M, H>) => void;
21
+ type ResourceRoutesOptions<M = any> = {
22
+ only?: ResourceAction[];
23
+ except?: ResourceAction[];
24
+ middlewares?: ApiResourceMiddleware<M>;
25
+ };
8
26
  /**
9
27
  * @class clear-router ResourceRoutes
10
28
  * @description A ResourceRoutes creates a collection of resourceful routes in a single call
@@ -12,15 +30,50 @@ import { ResourceRouteSelection } from "./ResourceRouteSelection.cjs";
12
30
  * @repository https://github.com/arkstack-tmp/clear-router
13
31
  */
14
32
  declare class ResourceRoutes<X = any, M = Middleware$1 | Middleware, H = any> {
33
+ readonly basePath: string;
34
+ readonly controller: any;
35
+ readonly paramName: string;
36
+ protected readonly registerRoute: ResourceRouteRegistrar<X, M, H>;
37
+ protected readonly removeRoute: ResourceRouteRemover<X, M, H>;
38
+ static actions: {
39
+ readonly index: {
40
+ readonly method: "get";
41
+ readonly path: "/";
42
+ };
43
+ readonly show: {
44
+ readonly method: "get";
45
+ readonly path: "/:{param}";
46
+ };
47
+ readonly create: {
48
+ readonly method: "post";
49
+ readonly path: "/";
50
+ };
51
+ readonly update: {
52
+ readonly method: "put";
53
+ readonly path: "/:{param}";
54
+ };
55
+ readonly destroy: {
56
+ readonly method: "delete";
57
+ readonly path: "/:{param}";
58
+ };
59
+ };
15
60
  readonly routes: Partial<Record<ResourceAction, Route<X, M, H>>>;
16
- constructor(routes: Partial<Record<ResourceAction, Route<X, M, H>>>);
61
+ protected options: ResourceRoutesOptions<M>;
62
+ protected chainedMiddlewares: Array<M[] | M>;
63
+ constructor(basePath: string, controller: any, paramName: string, options: ResourceRoutesOptions<M> | undefined, registerRoute: ResourceRouteRegistrar<X, M, H>, removeRoute: ResourceRouteRemover<X, M, H>);
64
+ register(): this;
65
+ /**
66
+ * Only register routes for the provided actions.
67
+ */
68
+ only(action: ResourceAction | ResourceAction[], ...actions: ResourceAction[]): this;
69
+ /**
70
+ * Register all resource routes except the provided actions.
71
+ */
72
+ except(action: ResourceAction | ResourceAction[], ...actions: ResourceAction[]): this;
17
73
  /**
18
74
  * Register one or more middleware that will be executed before the route.
19
- *
20
- * @param middlewares
21
- * @returns
22
75
  */
23
- middleware(middlewares: M[] | M): this;
76
+ middleware(middlewares: M[] | M, remember?: boolean): this;
24
77
  action(action: ResourceAction): Route<X, M, H> | undefined;
25
78
  index(): Route<X, M, H> | undefined;
26
79
  show(): Route<X, M, H> | undefined;
@@ -31,7 +84,13 @@ declare class ResourceRoutes<X = any, M = Middleware$1 | Middleware, H = any> {
31
84
  post(): ResourceRouteSelection<X, M, H>;
32
85
  put(): ResourceRouteSelection<X, M, H>;
33
86
  delete(): ResourceRouteSelection<X, M, H>;
87
+ protected selectedActions(): ResourceAction[];
88
+ protected definitionFor(action: ResourceAction): ResourceRouteDefinition;
89
+ protected resolveActionMiddlewares(action: ResourceAction): M[] | undefined;
90
+ protected isActionMiddlewareMap(middlewares: ApiResourceMiddleware<M> | undefined): middlewares is { [K in ResourceAction]?: M | M[] };
91
+ protected nameFor(path: string): string;
34
92
  protected byMethod(method: HttpMethod): ResourceRouteSelection<X, M, H>;
93
+ protected clear(): void;
35
94
  }
36
95
  //#endregion
37
96
  export { ResourceRoutes };
@@ -1,10 +1,28 @@
1
- import { HttpMethod, ResourceAction } from "./types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "./types/basic.mjs";
2
2
  import { Middleware } from "./types/express.mjs";
3
3
  import { Middleware as Middleware$1 } from "./types/h3.mjs";
4
4
  import { Route } from "./Route.mjs";
5
5
  import { ResourceRouteSelection } from "./ResourceRouteSelection.mjs";
6
6
 
7
7
  //#region src/ResourceRoutes.d.ts
8
+ type ResourceRouteDefinition = {
9
+ method: HttpMethod;
10
+ path: string;
11
+ };
12
+ type ResourceRouteRegistrar<X, M, H> = (input: {
13
+ action: ResourceAction;
14
+ method: HttpMethod;
15
+ path: string;
16
+ handler: any;
17
+ middlewares?: M[];
18
+ name: string;
19
+ }) => Route<X, M, H>;
20
+ type ResourceRouteRemover<X, M, H> = (route: Route<X, M, H>) => void;
21
+ type ResourceRoutesOptions<M = any> = {
22
+ only?: ResourceAction[];
23
+ except?: ResourceAction[];
24
+ middlewares?: ApiResourceMiddleware<M>;
25
+ };
8
26
  /**
9
27
  * @class clear-router ResourceRoutes
10
28
  * @description A ResourceRoutes creates a collection of resourceful routes in a single call
@@ -12,15 +30,50 @@ import { ResourceRouteSelection } from "./ResourceRouteSelection.mjs";
12
30
  * @repository https://github.com/arkstack-tmp/clear-router
13
31
  */
14
32
  declare class ResourceRoutes<X = any, M = Middleware$1 | Middleware, H = any> {
33
+ readonly basePath: string;
34
+ readonly controller: any;
35
+ readonly paramName: string;
36
+ protected readonly registerRoute: ResourceRouteRegistrar<X, M, H>;
37
+ protected readonly removeRoute: ResourceRouteRemover<X, M, H>;
38
+ static actions: {
39
+ readonly index: {
40
+ readonly method: "get";
41
+ readonly path: "/";
42
+ };
43
+ readonly show: {
44
+ readonly method: "get";
45
+ readonly path: "/:{param}";
46
+ };
47
+ readonly create: {
48
+ readonly method: "post";
49
+ readonly path: "/";
50
+ };
51
+ readonly update: {
52
+ readonly method: "put";
53
+ readonly path: "/:{param}";
54
+ };
55
+ readonly destroy: {
56
+ readonly method: "delete";
57
+ readonly path: "/:{param}";
58
+ };
59
+ };
15
60
  readonly routes: Partial<Record<ResourceAction, Route<X, M, H>>>;
16
- constructor(routes: Partial<Record<ResourceAction, Route<X, M, H>>>);
61
+ protected options: ResourceRoutesOptions<M>;
62
+ protected chainedMiddlewares: Array<M[] | M>;
63
+ constructor(basePath: string, controller: any, paramName: string, options: ResourceRoutesOptions<M> | undefined, registerRoute: ResourceRouteRegistrar<X, M, H>, removeRoute: ResourceRouteRemover<X, M, H>);
64
+ register(): this;
65
+ /**
66
+ * Only register routes for the provided actions.
67
+ */
68
+ only(action: ResourceAction | ResourceAction[], ...actions: ResourceAction[]): this;
69
+ /**
70
+ * Register all resource routes except the provided actions.
71
+ */
72
+ except(action: ResourceAction | ResourceAction[], ...actions: ResourceAction[]): this;
17
73
  /**
18
74
  * Register one or more middleware that will be executed before the route.
19
- *
20
- * @param middlewares
21
- * @returns
22
75
  */
23
- middleware(middlewares: M[] | M): this;
76
+ middleware(middlewares: M[] | M, remember?: boolean): this;
24
77
  action(action: ResourceAction): Route<X, M, H> | undefined;
25
78
  index(): Route<X, M, H> | undefined;
26
79
  show(): Route<X, M, H> | undefined;
@@ -31,7 +84,13 @@ declare class ResourceRoutes<X = any, M = Middleware$1 | Middleware, H = any> {
31
84
  post(): ResourceRouteSelection<X, M, H>;
32
85
  put(): ResourceRouteSelection<X, M, H>;
33
86
  delete(): ResourceRouteSelection<X, M, H>;
87
+ protected selectedActions(): ResourceAction[];
88
+ protected definitionFor(action: ResourceAction): ResourceRouteDefinition;
89
+ protected resolveActionMiddlewares(action: ResourceAction): M[] | undefined;
90
+ protected isActionMiddlewareMap(middlewares: ApiResourceMiddleware<M> | undefined): middlewares is { [K in ResourceAction]?: M | M[] };
91
+ protected nameFor(path: string): string;
34
92
  protected byMethod(method: HttpMethod): ResourceRouteSelection<X, M, H>;
93
+ protected clear(): void;
35
94
  }
36
95
  //#endregion
37
96
  export { ResourceRoutes };
@@ -1,4 +1,6 @@
1
1
  import { ResourceRouteSelection } from "./ResourceRouteSelection.mjs";
2
+ import { wrap } from "./core/helpers.mjs";
3
+ import "./core/index.mjs";
2
4
 
3
5
  //#region src/ResourceRoutes.ts
4
6
  /**
@@ -7,17 +9,78 @@ import { ResourceRouteSelection } from "./ResourceRouteSelection.mjs";
7
9
  * @author 3m1n3nc3
8
10
  * @repository https://github.com/arkstack-tmp/clear-router
9
11
  */
10
- var ResourceRoutes = class {
11
- constructor(routes) {
12
- this.routes = routes;
12
+ var ResourceRoutes = class ResourceRoutes {
13
+ static actions = {
14
+ index: {
15
+ method: "get",
16
+ path: "/"
17
+ },
18
+ show: {
19
+ method: "get",
20
+ path: "/:{param}"
21
+ },
22
+ create: {
23
+ method: "post",
24
+ path: "/"
25
+ },
26
+ update: {
27
+ method: "put",
28
+ path: "/:{param}"
29
+ },
30
+ destroy: {
31
+ method: "delete",
32
+ path: "/:{param}"
33
+ }
34
+ };
35
+ routes = {};
36
+ options;
37
+ chainedMiddlewares = [];
38
+ constructor(basePath, controller, paramName, options, registerRoute, removeRoute) {
39
+ this.basePath = basePath;
40
+ this.controller = controller;
41
+ this.paramName = paramName;
42
+ this.registerRoute = registerRoute;
43
+ this.removeRoute = removeRoute;
44
+ this.options = options ?? {};
45
+ }
46
+ register() {
47
+ this.clear();
48
+ const preController = typeof this.controller === "function" ? new this.controller() : this.controller;
49
+ for (const action of this.selectedActions()) {
50
+ if (typeof preController[action] !== "function") continue;
51
+ const definition = this.definitionFor(action);
52
+ const route = this.registerRoute({
53
+ action,
54
+ method: definition.method,
55
+ path: `${this.basePath}${definition.path}`,
56
+ handler: [this.controller, action],
57
+ middlewares: this.resolveActionMiddlewares(action),
58
+ name: `${this.nameFor(definition.path)}.${action.toLowerCase()}`
59
+ });
60
+ this.routes[action] = route;
61
+ }
62
+ for (const middlewares of this.chainedMiddlewares) this.middleware(middlewares, false);
63
+ return this;
64
+ }
65
+ /**
66
+ * Only register routes for the provided actions.
67
+ */
68
+ only(action, ...actions) {
69
+ this.options.only = Array.from(new Set(wrap(action).concat(actions)));
70
+ return this.register();
71
+ }
72
+ /**
73
+ * Register all resource routes except the provided actions.
74
+ */
75
+ except(action, ...actions) {
76
+ this.options.except = Array.from(new Set(wrap(action).concat(actions)));
77
+ return this.register();
13
78
  }
14
79
  /**
15
80
  * Register one or more middleware that will be executed before the route.
16
- *
17
- * @param middlewares
18
- * @returns
19
81
  */
20
- middleware(middlewares) {
82
+ middleware(middlewares, remember = true) {
83
+ if (remember) this.chainedMiddlewares.push(middlewares);
21
84
  for (const route of Object.values(this.routes)) route?.middleware(middlewares);
22
85
  return this;
23
86
  }
@@ -51,9 +114,36 @@ var ResourceRoutes = class {
51
114
  delete() {
52
115
  return this.byMethod("delete");
53
116
  }
117
+ selectedActions() {
118
+ const actions = this.options.only?.length ? this.options.only : Object.keys(ResourceRoutes.actions);
119
+ const except = new Set(this.options.except ?? []);
120
+ return actions.filter((action) => !except.has(action));
121
+ }
122
+ definitionFor(action) {
123
+ const definition = ResourceRoutes.actions[action];
124
+ return {
125
+ method: definition.method,
126
+ path: definition.path.replace("{param}", this.paramName)
127
+ };
128
+ }
129
+ resolveActionMiddlewares(action) {
130
+ const middlewares = this.isActionMiddlewareMap(this.options.middlewares) ? this.options.middlewares[action] : this.options.middlewares;
131
+ return Array.isArray(middlewares) ? middlewares : middlewares ? [middlewares] : void 0;
132
+ }
133
+ isActionMiddlewareMap(middlewares) {
134
+ if (!middlewares || Array.isArray(middlewares) || typeof middlewares !== "object") return false;
135
+ return Object.keys(ResourceRoutes.actions).some((action) => action in middlewares);
136
+ }
137
+ nameFor(path) {
138
+ return `${this.basePath}${path}`.replace(/\/:[^/]+|\/\{[^}]+\}/g, "").replace(/\{(\w+):[^}]+\}/g, "$1").replace(/\/|:|[{}]/g, ".").replace(/\.{2,}/g, ".").replace(/^\.|\.$/g, "");
139
+ }
54
140
  byMethod(method) {
55
141
  return new ResourceRouteSelection(Object.values(this.routes).filter((route) => Boolean(route?.methods.includes(method))));
56
142
  }
143
+ clear() {
144
+ for (const route of Object.values(this.routes)) if (route) this.removeRoute(route);
145
+ for (const key of Object.keys(this.routes)) delete this.routes[key];
146
+ }
57
147
  };
58
148
 
59
149
  //#endregion
@@ -0,0 +1,9 @@
1
+
2
+ //#region src/core/helpers.ts
3
+ const wrap = (value) => {
4
+ if (value === null || value === void 0) return [];
5
+ return Array.isArray(value) ? value : [value];
6
+ };
7
+
8
+ //#endregion
9
+ exports.wrap = wrap;
@@ -0,0 +1,4 @@
1
+ //#region src/core/helpers.d.ts
2
+ declare const wrap: <T>(value: T | T[] | null | undefined) => T[];
3
+ //#endregion
4
+ export { wrap };
@@ -0,0 +1,4 @@
1
+ //#region src/core/helpers.d.ts
2
+ declare const wrap: <T>(value: T | T[] | null | undefined) => T[];
3
+ //#endregion
4
+ export { wrap };
@@ -0,0 +1,8 @@
1
+ //#region src/core/helpers.ts
2
+ const wrap = (value) => {
3
+ if (value === null || value === void 0) return [];
4
+ return Array.isArray(value) ? value : [value];
5
+ };
6
+
7
+ //#endregion
8
+ export { wrap };
@@ -3,8 +3,10 @@ const require_Request = require('./Request.cjs');
3
3
  const require_Response = require('./Response.cjs');
4
4
  const require_plugins = require('./plugins.cjs');
5
5
  const require_router = require('./router.cjs');
6
+ const require_helpers = require('./helpers.cjs');
6
7
 
7
8
  exports.CoreRouter = require_router.CoreRouter;
8
9
  exports.Request = require_Request.Request;
9
10
  exports.Response = require_Response.Response;
10
- exports.definePlugin = require_plugins.definePlugin;
11
+ exports.definePlugin = require_plugins.definePlugin;
12
+ exports.wrap = require_helpers.wrap;
@@ -2,4 +2,5 @@ import { Response } from "./Response.cjs";
2
2
  import { Request } from "./Request.cjs";
3
3
  import { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, definePlugin } from "./plugins.cjs";
4
4
  import { CoreRouter } from "./router.cjs";
5
- export { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, definePlugin };
5
+ import { wrap } from "./helpers.cjs";
6
+ export { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, definePlugin, wrap };
@@ -2,4 +2,5 @@ import { Response } from "./Response.mjs";
2
2
  import { Request } from "./Request.mjs";
3
3
  import { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, definePlugin } from "./plugins.mjs";
4
4
  import { CoreRouter } from "./router.mjs";
5
- export { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, definePlugin };
5
+ import { wrap } from "./helpers.mjs";
6
+ export { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, definePlugin, wrap };
@@ -2,5 +2,6 @@ import { Request } from "./Request.mjs";
2
2
  import { Response } from "./Response.mjs";
3
3
  import { definePlugin } from "./plugins.mjs";
4
4
  import { CoreRouter } from "./router.mjs";
5
+ import { wrap } from "./helpers.mjs";
5
6
 
6
- export { CoreRouter, Request, Response, definePlugin };
7
+ export { CoreRouter, Request, Response, definePlugin, wrap };
@@ -90,6 +90,15 @@ var CoreRouter = class {
90
90
  if (route.routeName && this.routesByName.get(route.routeName) === route) this.routesByName.delete(route.routeName);
91
91
  }
92
92
  }
93
+ static removeRoute(route) {
94
+ this.routes.delete(route);
95
+ if (route.routeName && this.routesByName.get(route.routeName) === route) this.routesByName.delete(route.routeName);
96
+ for (const method of route.methods) {
97
+ const methodKey = method.toUpperCase();
98
+ this.routesByPathMethod.delete(`${methodKey} ${route.path}`);
99
+ this.routesByMethod.set(methodKey, (this.routesByMethod.get(methodKey) ?? []).filter((existingRoute) => existingRoute !== route));
100
+ }
101
+ }
93
102
  /**
94
103
  * Resets the router to it's default state
95
104
  */
@@ -537,47 +546,14 @@ var CoreRouter = class {
537
546
  * @param options
538
547
  */
539
548
  static apiResource(basePath, controller, options) {
540
- const resourceRoutes = {};
541
549
  let paramName = "id";
542
550
  if (!!this.config.inferParamName && this.hasPackageInstalled("@h3ravel/support")) {
543
551
  const { str } = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href)("@h3ravel/support");
544
552
  paramName = str(basePath).singular().afterLast("/").toString();
545
553
  }
546
- const actions = {
547
- index: {
548
- method: "get",
549
- path: "/"
550
- },
551
- show: {
552
- method: "get",
553
- path: `/:${paramName}`
554
- },
555
- create: {
556
- method: "post",
557
- path: "/"
558
- },
559
- update: {
560
- method: "put",
561
- path: `/:${paramName}`
562
- },
563
- destroy: {
564
- method: "delete",
565
- path: `/:${paramName}`
566
- }
567
- };
568
- const only = options?.only || Object.keys(actions);
569
- const except = options?.except || [];
570
- const preController = typeof controller === "function" ? new controller() : controller;
571
- for (const action of only) {
572
- if (except.includes(action)) continue;
573
- if (typeof preController[action] === "function") {
574
- const { method, path } = actions[action];
575
- const actionMiddlewares = typeof options?.middlewares === "object" && !Array.isArray(options.middlewares) ? options.middlewares[action] : options?.middlewares;
576
- const name = `${basePath}${path}`.replace(/\/:[^/]+|\/\{[^}]+\}/g, "").replace(/\{(\w+):[^}]+\}/g, "$1").replace(/\/|:|[{}]/g, ".").replace(/\.{2,}/g, ".").replace(/^\.|\.$/g, "");
577
- resourceRoutes[action] = this.add(method, `${basePath}${path}`, [controller, action], Array.isArray(actionMiddlewares) ? actionMiddlewares : actionMiddlewares ? [actionMiddlewares] : void 0).name(name + "." + action.toLowerCase());
578
- }
579
- }
580
- return new require_ResourceRoutes.ResourceRoutes(resourceRoutes);
554
+ return new require_ResourceRoutes.ResourceRoutes(basePath, controller, paramName, options, ({ method, path, handler, middlewares, name }) => {
555
+ return this.add(method, path, handler, middlewares).name(name);
556
+ }, (route) => this.removeRoute(route)).register();
581
557
  }
582
558
  /**
583
559
  * Adds a new GET route to the router.
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod, RouterConfig } from "../types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction, RouterConfig } from "../types/basic.cjs";
2
2
  import { Response } from "./Response.cjs";
3
3
  import { Route } from "../Route.cjs";
4
4
  import { Request } from "./Request.cjs";
@@ -49,6 +49,7 @@ declare abstract class CoreRouter {
49
49
  protected static routeSpecificity(route: Route<any, any, any>): [number, number, number];
50
50
  protected static orderedRoutes(): Array<Route<any, any, any>>;
51
51
  protected static removeRouteMethod(route: Route<any, any, any>, method: HttpMethod, path: string): void;
52
+ protected static removeRoute(route: Route<any, any, any>): void;
52
53
  /**
53
54
  * Resets the router to it's default state
54
55
  */
@@ -143,8 +144,8 @@ declare abstract class CoreRouter {
143
144
  * @param options
144
145
  */
145
146
  static apiResource(basePath: string, controller: any, options?: {
146
- only?: ControllerAction[];
147
- except?: ControllerAction[];
147
+ only?: ResourceAction[];
148
+ except?: ResourceAction[];
148
149
  middlewares?: ApiResourceMiddleware<any>;
149
150
  }): ResourceRoutes<any, any, any>;
150
151
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod, RouterConfig } from "../types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction, RouterConfig } from "../types/basic.mjs";
2
2
  import { Response } from "./Response.mjs";
3
3
  import { Route } from "../Route.mjs";
4
4
  import { Request } from "./Request.mjs";
@@ -49,6 +49,7 @@ declare abstract class CoreRouter {
49
49
  protected static routeSpecificity(route: Route<any, any, any>): [number, number, number];
50
50
  protected static orderedRoutes(): Array<Route<any, any, any>>;
51
51
  protected static removeRouteMethod(route: Route<any, any, any>, method: HttpMethod, path: string): void;
52
+ protected static removeRoute(route: Route<any, any, any>): void;
52
53
  /**
53
54
  * Resets the router to it's default state
54
55
  */
@@ -143,8 +144,8 @@ declare abstract class CoreRouter {
143
144
  * @param options
144
145
  */
145
146
  static apiResource(basePath: string, controller: any, options?: {
146
- only?: ControllerAction[];
147
- except?: ControllerAction[];
147
+ only?: ResourceAction[];
148
+ except?: ResourceAction[];
148
149
  middlewares?: ApiResourceMiddleware<any>;
149
150
  }): ResourceRoutes<any, any, any>;
150
151
  /**
@@ -90,6 +90,15 @@ var CoreRouter = class {
90
90
  if (route.routeName && this.routesByName.get(route.routeName) === route) this.routesByName.delete(route.routeName);
91
91
  }
92
92
  }
93
+ static removeRoute(route) {
94
+ this.routes.delete(route);
95
+ if (route.routeName && this.routesByName.get(route.routeName) === route) this.routesByName.delete(route.routeName);
96
+ for (const method of route.methods) {
97
+ const methodKey = method.toUpperCase();
98
+ this.routesByPathMethod.delete(`${methodKey} ${route.path}`);
99
+ this.routesByMethod.set(methodKey, (this.routesByMethod.get(methodKey) ?? []).filter((existingRoute) => existingRoute !== route));
100
+ }
101
+ }
93
102
  /**
94
103
  * Resets the router to it's default state
95
104
  */
@@ -537,47 +546,14 @@ var CoreRouter = class {
537
546
  * @param options
538
547
  */
539
548
  static apiResource(basePath, controller, options) {
540
- const resourceRoutes = {};
541
549
  let paramName = "id";
542
550
  if (!!this.config.inferParamName && this.hasPackageInstalled("@h3ravel/support")) {
543
551
  const { str } = createRequire(import.meta.url)("@h3ravel/support");
544
552
  paramName = str(basePath).singular().afterLast("/").toString();
545
553
  }
546
- const actions = {
547
- index: {
548
- method: "get",
549
- path: "/"
550
- },
551
- show: {
552
- method: "get",
553
- path: `/:${paramName}`
554
- },
555
- create: {
556
- method: "post",
557
- path: "/"
558
- },
559
- update: {
560
- method: "put",
561
- path: `/:${paramName}`
562
- },
563
- destroy: {
564
- method: "delete",
565
- path: `/:${paramName}`
566
- }
567
- };
568
- const only = options?.only || Object.keys(actions);
569
- const except = options?.except || [];
570
- const preController = typeof controller === "function" ? new controller() : controller;
571
- for (const action of only) {
572
- if (except.includes(action)) continue;
573
- if (typeof preController[action] === "function") {
574
- const { method, path } = actions[action];
575
- const actionMiddlewares = typeof options?.middlewares === "object" && !Array.isArray(options.middlewares) ? options.middlewares[action] : options?.middlewares;
576
- const name = `${basePath}${path}`.replace(/\/:[^/]+|\/\{[^}]+\}/g, "").replace(/\{(\w+):[^}]+\}/g, "$1").replace(/\/|:|[{}]/g, ".").replace(/\.{2,}/g, ".").replace(/^\.|\.$/g, "");
577
- resourceRoutes[action] = this.add(method, `${basePath}${path}`, [controller, action], Array.isArray(actionMiddlewares) ? actionMiddlewares : actionMiddlewares ? [actionMiddlewares] : void 0).name(name + "." + action.toLowerCase());
578
- }
579
- }
580
- return new ResourceRoutes(resourceRoutes);
554
+ return new ResourceRoutes(basePath, controller, paramName, options, ({ method, path, handler, middlewares, name }) => {
555
+ return this.add(method, path, handler, middlewares).name(name);
556
+ }, (route) => this.removeRoute(route)).register();
581
557
  }
582
558
  /**
583
559
  * Adds a new GET route to the router.
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.cjs";
2
2
  import { Handler, HttpContext, Middleware } from "../types/express.cjs";
3
3
  import { Route } from "../Route.cjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.cjs";
@@ -34,8 +34,8 @@ declare class Router$1 extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware>;
40
40
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
41
41
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.mjs";
2
2
  import { Handler, HttpContext, Middleware } from "../types/express.mjs";
3
3
  import { Route } from "../Route.mjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.mjs";
@@ -34,8 +34,8 @@ declare class Router$1 extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware>;
40
40
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
41
41
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.cjs";
2
2
  import { FastifyApp, Handler, HttpContext, Middleware } from "../types/fastify.cjs";
3
3
  import { Route } from "../Route.cjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.cjs";
@@ -32,8 +32,8 @@ declare class Router extends CoreRouter {
32
32
  * @param options Optional configuration for the resource
33
33
  */
34
34
  static apiResource(basePath: string, controller: any, options?: {
35
- only?: ControllerAction[];
36
- except?: ControllerAction[];
35
+ only?: ResourceAction[];
36
+ except?: ResourceAction[];
37
37
  middlewares?: ApiResourceMiddleware<Middleware>;
38
38
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
39
39
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.mjs";
2
2
  import { FastifyApp, Handler, HttpContext, Middleware } from "../types/fastify.mjs";
3
3
  import { Route } from "../Route.mjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.mjs";
@@ -32,8 +32,8 @@ declare class Router extends CoreRouter {
32
32
  * @param options Optional configuration for the resource
33
33
  */
34
34
  static apiResource(basePath: string, controller: any, options?: {
35
- only?: ControllerAction[];
36
- except?: ControllerAction[];
35
+ only?: ResourceAction[];
36
+ except?: ResourceAction[];
37
37
  middlewares?: ApiResourceMiddleware<Middleware>;
38
38
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
39
39
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.cjs";
2
2
  import { H3App, Handler, HttpContext, Middleware as Middleware$1 } from "../types/h3.cjs";
3
3
  import { Route } from "../Route.cjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.cjs";
@@ -34,8 +34,8 @@ declare class Router extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware$1>;
40
40
  }): ResourceRoutes<HttpContext, Middleware$1, Handler>;
41
41
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.mjs";
2
2
  import { H3App, Handler, HttpContext, Middleware as Middleware$1 } from "../types/h3.mjs";
3
3
  import { Route } from "../Route.mjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.mjs";
@@ -34,8 +34,8 @@ declare class Router extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware$1>;
40
40
  }): ResourceRoutes<HttpContext, Middleware$1, Handler>;
41
41
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.cjs";
2
2
  import { Handler, HonoApp, HttpContext, Middleware } from "../types/hono.cjs";
3
3
  import { Route } from "../Route.cjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.cjs";
@@ -34,8 +34,8 @@ declare class Router extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware>;
40
40
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
41
41
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.mjs";
2
2
  import { Handler, HonoApp, HttpContext, Middleware } from "../types/hono.mjs";
3
3
  import { Route } from "../Route.mjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.mjs";
@@ -34,8 +34,8 @@ declare class Router extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware>;
40
40
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
41
41
  /**
package/dist/index.cjs CHANGED
@@ -6,6 +6,7 @@ const require_Request = require('./core/Request.cjs');
6
6
  const require_Response = require('./core/Response.cjs');
7
7
  const require_plugins = require('./core/plugins.cjs');
8
8
  const require_router = require('./core/router.cjs');
9
+ const require_helpers = require('./core/helpers.cjs');
9
10
  require('./core/index.cjs');
10
11
 
11
12
  exports.ClearRequest = require_ClearRequest.ClearRequest;
@@ -14,4 +15,5 @@ exports.CoreRouter = require_router.CoreRouter;
14
15
  exports.Request = require_Request.Request;
15
16
  exports.Response = require_Response.Response;
16
17
  exports.Route = require_Route.Route;
17
- exports.definePlugin = require_plugins.definePlugin;
18
+ exports.definePlugin = require_plugins.definePlugin;
19
+ exports.wrap = require_helpers.wrap;
package/dist/index.d.cts CHANGED
@@ -6,4 +6,5 @@ import { ClearRequest } from "./ClearRequest.cjs";
6
6
  import { Controller } from "./Controller.cjs";
7
7
  import { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, definePlugin } from "./core/plugins.cjs";
8
8
  import { CoreRouter } from "./core/router.cjs";
9
- export { ClearHttpContext, ClearRequest, ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, Controller, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, Route, RouteParameter, definePlugin };
9
+ import { wrap } from "./core/helpers.cjs";
10
+ export { ClearHttpContext, ClearRequest, ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, Controller, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, Route, RouteParameter, definePlugin, wrap };
package/dist/index.d.mts CHANGED
@@ -6,4 +6,5 @@ import { ClearRequest } from "./ClearRequest.mjs";
6
6
  import { Controller } from "./Controller.mjs";
7
7
  import { ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, definePlugin } from "./core/plugins.mjs";
8
8
  import { CoreRouter } from "./core/router.mjs";
9
- export { ClearHttpContext, ClearRequest, ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, Controller, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, Route, RouteParameter, definePlugin };
9
+ import { wrap } from "./core/helpers.mjs";
10
+ export { ClearHttpContext, ClearRequest, ClearRouterPlugin, ClearRouterPluginArgumentsContext, ClearRouterPluginContext, ClearRouterPluginInput, ClearRouterPluginRequestContext, Controller, CoreRouter, PluginArgumentsResolver, PluginBind, PluginBindFactory, PluginBindValue, PluginSetupResult, Request, Response, Route, RouteParameter, definePlugin, wrap };
package/dist/index.mjs CHANGED
@@ -5,6 +5,7 @@ import { Request } from "./core/Request.mjs";
5
5
  import { Response } from "./core/Response.mjs";
6
6
  import { definePlugin } from "./core/plugins.mjs";
7
7
  import { CoreRouter } from "./core/router.mjs";
8
+ import { wrap } from "./core/helpers.mjs";
8
9
  import "./core/index.mjs";
9
10
 
10
- export { ClearRequest, Controller, CoreRouter, Request, Response, Route, definePlugin };
11
+ export { ClearRequest, Controller, CoreRouter, Request, Response, Route, definePlugin, wrap };
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.cjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.cjs";
2
2
  import { Handler, HttpContext, KoaRouterApp, Middleware } from "../types/koa.cjs";
3
3
  import { Route } from "../Route.cjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.cjs";
@@ -34,8 +34,8 @@ declare class Router extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware>;
40
40
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
41
41
  /**
@@ -1,4 +1,4 @@
1
- import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.mjs";
1
+ import { ApiResourceMiddleware, HttpMethod, ResourceAction } from "../types/basic.mjs";
2
2
  import { Handler, HttpContext, KoaRouterApp, Middleware } from "../types/koa.mjs";
3
3
  import { Route } from "../Route.mjs";
4
4
  import { ResourceRoutes } from "../ResourceRoutes.mjs";
@@ -34,8 +34,8 @@ declare class Router extends CoreRouter {
34
34
  * @param options
35
35
  */
36
36
  static apiResource(basePath: string, controller: any, options?: {
37
- only?: ControllerAction[];
38
- except?: ControllerAction[];
37
+ only?: ResourceAction[];
38
+ except?: ResourceAction[];
39
39
  middlewares?: ApiResourceMiddleware<Middleware>;
40
40
  }): ResourceRoutes<HttpContext, Middleware, Handler>;
41
41
  /**
@@ -4,7 +4,6 @@
4
4
  */
5
5
  type ControllerHandler = [any, string];
6
6
  type MaybePromise<T = any> = T | Promise<T>;
7
- type ResourceAction = 'index' | 'show' | 'create' | 'update' | 'destroy';
8
7
  type MiddlewareHandle<Args extends any[] = any[], Return = any> = (...args: Args) => MaybePromise<Return>;
9
8
  type MiddlewareClass<M extends MiddlewareHandle = MiddlewareHandle> = new () => {
10
9
  handle: M;
@@ -18,14 +17,14 @@ type ClassMiddleware<M extends MiddlewareHandle = MiddlewareHandle> = Middleware
18
17
  */
19
18
  type HttpMethod = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';
20
19
  /**
21
- * Common controller action names
20
+ * Common resource action names
22
21
  */
23
- type ControllerAction = 'index' | 'show' | 'create' | 'update' | 'destroy';
22
+ type ResourceAction = 'index' | 'show' | 'create' | 'update' | 'destroy';
24
23
  /**
25
24
  * Generic Object type for request data
26
25
  */
27
26
  type RequestData = Record<string, any>;
28
- type ApiResourceMiddleware<M = any> = M | M[] | { [K in ControllerAction]?: M | M[] };
27
+ type ApiResourceMiddleware<M = any> = M | M[] | { [K in ResourceAction]?: M | M[] };
29
28
  interface RouterConfig {
30
29
  /**
31
30
  * When enabled, API param name will be infered from the route path.
@@ -50,4 +49,4 @@ interface RouterConfig {
50
49
  };
51
50
  }
52
51
  //#endregion
53
- export { ApiResourceMiddleware, ClassMiddleware, ControllerAction, ControllerHandler, HttpMethod, MiddlewareHandle, RequestData, ResourceAction, RouterConfig };
52
+ export { ApiResourceMiddleware, ClassMiddleware, ControllerHandler, HttpMethod, MiddlewareHandle, RequestData, ResourceAction, RouterConfig };
@@ -4,7 +4,6 @@
4
4
  */
5
5
  type ControllerHandler = [any, string];
6
6
  type MaybePromise<T = any> = T | Promise<T>;
7
- type ResourceAction = 'index' | 'show' | 'create' | 'update' | 'destroy';
8
7
  type MiddlewareHandle<Args extends any[] = any[], Return = any> = (...args: Args) => MaybePromise<Return>;
9
8
  type MiddlewareClass<M extends MiddlewareHandle = MiddlewareHandle> = new () => {
10
9
  handle: M;
@@ -18,14 +17,14 @@ type ClassMiddleware<M extends MiddlewareHandle = MiddlewareHandle> = Middleware
18
17
  */
19
18
  type HttpMethod = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';
20
19
  /**
21
- * Common controller action names
20
+ * Common resource action names
22
21
  */
23
- type ControllerAction = 'index' | 'show' | 'create' | 'update' | 'destroy';
22
+ type ResourceAction = 'index' | 'show' | 'create' | 'update' | 'destroy';
24
23
  /**
25
24
  * Generic Object type for request data
26
25
  */
27
26
  type RequestData = Record<string, any>;
28
- type ApiResourceMiddleware<M = any> = M | M[] | { [K in ControllerAction]?: M | M[] };
27
+ type ApiResourceMiddleware<M = any> = M | M[] | { [K in ResourceAction]?: M | M[] };
29
28
  interface RouterConfig {
30
29
  /**
31
30
  * When enabled, API param name will be infered from the route path.
@@ -50,4 +49,4 @@ interface RouterConfig {
50
49
  };
51
50
  }
52
51
  //#endregion
53
- export { ApiResourceMiddleware, ClassMiddleware, ControllerAction, ControllerHandler, HttpMethod, MiddlewareHandle, RequestData, ResourceAction, RouterConfig };
52
+ export { ApiResourceMiddleware, ClassMiddleware, ControllerHandler, HttpMethod, MiddlewareHandle, RequestData, ResourceAction, RouterConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clear-router",
3
- "version": "2.8.0",
3
+ "version": "2.8.1",
4
4
  "description": "Laravel-style routing for Node.js with support for Express, H3, Fastify, Hono, and Koa, including CommonJS, ESM, and TypeScript support.",
5
5
  "keywords": [
6
6
  "h3",