@veloxts/router 0.3.2 → 0.3.4

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/README.md CHANGED
@@ -133,8 +133,24 @@ const userProcedures = defineProcedures('users', {
133
133
  return ctx.db.user.create({ data: input });
134
134
  }),
135
135
 
136
- // Update user (v1.1+ - PUT endpoint)
136
+ // PUT /api/users/:id - Full update
137
137
  updateUser: procedure()
138
+ .input(z.object({
139
+ id: z.string().uuid(),
140
+ name: z.string().min(1),
141
+ email: z.string().email(),
142
+ }))
143
+ .output(UserSchema)
144
+ .mutation(async ({ input, ctx }) => {
145
+ const { id, ...data } = input;
146
+ return ctx.db.user.update({
147
+ where: { id },
148
+ data,
149
+ });
150
+ }),
151
+
152
+ // PATCH /api/users/:id - Partial update
153
+ patchUser: procedure()
138
154
  .input(z.object({
139
155
  id: z.string().uuid(),
140
156
  name: z.string().min(1).optional(),
@@ -148,6 +164,15 @@ const userProcedures = defineProcedures('users', {
148
164
  data,
149
165
  });
150
166
  }),
167
+
168
+ // DELETE /api/users/:id
169
+ deleteUser: procedure()
170
+ .input(z.object({ id: z.string().uuid() }))
171
+ .output(z.object({ success: z.boolean() }))
172
+ .mutation(async ({ input, ctx }) => {
173
+ await ctx.db.user.delete({ where: { id: input.id } });
174
+ return { success: true };
175
+ }),
151
176
  });
152
177
  ```
153
178
 
@@ -155,21 +180,35 @@ const userProcedures = defineProcedures('users', {
155
180
 
156
181
  VeloxTS automatically generates REST endpoints from procedure names using **naming conventions**:
157
182
 
158
- ### MVP (v0.1.0) - GET and POST
183
+ ### Supported Naming Patterns
159
184
 
160
- | Procedure Name | HTTP Method | REST Path | Notes |
161
- |---------------|-------------|-----------|-------|
162
- | `getUser` | GET | `/users/:id` | Single resource |
163
- | `listUsers` | GET | `/users` | Collection |
164
- | `createUser` | POST | `/users` | Create resource |
185
+ | Procedure Name | HTTP Method | REST Path | Status Code | Notes |
186
+ |---------------|-------------|-----------|-------------|-------|
187
+ | `getUser` | GET | `/users/:id` | 200 | Single resource |
188
+ | `listUsers` | GET | `/users` | 200 | Collection |
189
+ | `findUsers` | GET | `/users` | 200 | Search/filter |
190
+ | `createUser` | POST | `/users` | 201 | Create resource |
191
+ | `addUser` | POST | `/users` | 201 | Create resource |
192
+ | `updateUser` | PUT | `/users/:id` | 200 | Full update |
193
+ | `editUser` | PUT | `/users/:id` | 200 | Full update |
194
+ | `patchUser` | PATCH | `/users/:id` | 200 | Partial update |
195
+ | `deleteUser` | DELETE | `/users/:id` | 200/204 | Delete resource |
196
+ | `removeUser` | DELETE | `/users/:id` | 200/204 | Delete resource |
165
197
 
166
- ### v1.1+ - Full REST Support
198
+ ### Input Gathering
167
199
 
168
- | Procedure Name | HTTP Method | REST Path |
169
- |---------------|-------------|-----------|
170
- | `updateUser` | PUT | `/users/:id` |
171
- | `patchUser` | PATCH | `/users/:id` |
172
- | `deleteUser` | DELETE | `/users/:id` |
200
+ Different HTTP methods gather inputs from different request parts:
201
+
202
+ - **GET/DELETE**: `params` (route parameters) + `query` (query string)
203
+ - **POST**: `body` only
204
+ - **PUT/PATCH**: `params` (route parameters) + `body`
205
+
206
+ ### Status Codes
207
+
208
+ - **GET**: 200 OK
209
+ - **POST**: 201 Created
210
+ - **PUT/PATCH**: 200 OK
211
+ - **DELETE**: 200 OK (with response body) or 204 No Content (if handler returns null)
173
212
 
174
213
  ### Custom REST Paths
175
214
 
@@ -461,8 +500,27 @@ export const userProcedures = defineProcedures('users', {
461
500
  return ctx.db.user.create({ data: input });
462
501
  }),
463
502
 
464
- // PUT /users/:id (v1.1+)
465
- // DELETE /users/:id (v1.1+)
503
+ // PUT /users/:id
504
+ updateUser: procedure()
505
+ .input(z.object({
506
+ id: z.string().uuid(),
507
+ name: z.string().min(1).max(100),
508
+ email: z.string().email(),
509
+ }))
510
+ .output(UserSchema)
511
+ .mutation(async ({ input, ctx }) => {
512
+ const { id, ...data } = input;
513
+ return ctx.db.user.update({ where: { id }, data });
514
+ }),
515
+
516
+ // DELETE /users/:id
517
+ deleteUser: procedure()
518
+ .input(z.object({ id: z.string().uuid() }))
519
+ .output(z.object({ success: z.boolean() }))
520
+ .mutation(async ({ input, ctx }) => {
521
+ await ctx.db.user.delete({ where: { id: input.id } });
522
+ return { success: true };
523
+ }),
466
524
  });
467
525
  ```
468
526
 
@@ -613,21 +671,20 @@ await registerRestRoutes(app.server, {
613
671
  // Generates: GET /api/v1/users/:id
614
672
  ```
615
673
 
616
- ## MVP Limitations
617
-
618
- The current v0.1.0 release supports:
674
+ ## Current Features
619
675
 
620
676
  **Included:**
621
677
  - Query procedures (GET)
622
- - Mutation procedures (POST)
678
+ - Mutation procedures (POST, PUT, PATCH, DELETE)
679
+ - Full REST verb support with smart input gathering
680
+ - Proper HTTP status codes (201, 204, etc.)
623
681
  - Input/output validation with Zod
624
682
  - Naming convention-based REST mapping
625
683
  - Custom REST path overrides
626
684
  - tRPC adapter for type-safe internal calls
627
685
  - Middleware support
628
686
 
629
- **Deferred to v1.1+:**
630
- - Full REST verbs (PUT, PATCH, DELETE)
687
+ **Planned for Future Releases:**
631
688
  - Nested resource routing
632
689
  - OpenAPI/Swagger documentation generation
633
690
  - Rate limiting middleware
package/dist/index.d.ts CHANGED
@@ -37,13 +37,14 @@
37
37
  *
38
38
  * @module @veloxts/router
39
39
  */
40
- export declare const ROUTER_VERSION: "0.1.0";
40
+ /** Router package version */
41
+ export declare const ROUTER_VERSION: string;
41
42
  export type { CompiledProcedure, ContextExtensions, ContextFactory, ExtendedContext, HttpMethod, InferProcedureContext, InferProcedureInput, InferProcedureOutput, InferProcedureTypes, MiddlewareArgs, MiddlewareFunction, MiddlewareNext, MiddlewareResult, ProcedureCollection, ProcedureHandler, ProcedureHandlerArgs, ProcedureRecord, ProcedureType, RestRouteOverride, } from './types.js';
42
43
  export { PROCEDURE_METHOD_MAP, } from './types.js';
43
44
  export { defineProcedures, executeProcedure, isCompiledProcedure, isProcedureCollection, procedure, } from './procedure/builder.js';
44
45
  export type { BuilderRuntimeState, InferProcedures, InferSchemaOutput, ProcedureBuilder, ProcedureBuilderState, ProcedureDefinitions, ValidSchema, } from './procedure/types.js';
45
46
  export type { RestAdapterOptions, RestMapping, RestRoute } from './rest/index.js';
46
- export { buildRestPath, createRoutesRegistrar, followsNamingConvention, generateRestRoutes, getRouteSummary, inferResourceName, parseNamingConvention, registerRestRoutes, } from './rest/index.js';
47
+ export { rest, createRoutesRegistrar, buildRestPath, followsNamingConvention, generateRestRoutes, getRouteSummary, inferResourceName, parseNamingConvention, registerRestRoutes, } from './rest/index.js';
47
48
  export type { AnyRouter, InferAppRouter, TRPCInstance, TRPCPluginOptions, } from './trpc/index.js';
48
49
  export { buildTRPCRouter, createAppRouter, createTRPC, createTRPCContextFactory, registerTRPCPlugin, veloxErrorToTRPCError, } from './trpc/index.js';
49
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,eAAO,MAAM,cAAc,EAAG,OAAgB,CAAC;AAO/C,YAAY,EAEV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEnB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAEhB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAEL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAEV,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAS9B,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAMzB,YAAY,EAEV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,eAAe,EACf,eAAe,EACf,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAQH,6BAA6B;AAC7B,eAAO,MAAM,cAAc,EAAE,MAA+C,CAAC;AAO7E,YAAY,EAEV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEnB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAEhB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAEL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAEV,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAS9B,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAEL,IAAI,EAEJ,qBAAqB,EAErB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAMzB,YAAY,EAEV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,eAAe,EACf,eAAe,EACf,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -37,8 +37,12 @@
37
37
  *
38
38
  * @module @veloxts/router
39
39
  */
40
- // Version constant
41
- export const ROUTER_VERSION = '0.1.0';
40
+ import { createRequire } from 'node:module';
41
+ // Read version from package.json dynamically
42
+ const require = createRequire(import.meta.url);
43
+ const packageJson = require('../package.json');
44
+ /** Router package version */
45
+ export const ROUTER_VERSION = packageJson.version ?? '0.0.0-unknown';
42
46
  export {
43
47
  // Constants
44
48
  PROCEDURE_METHOD_MAP, } from './types.js';
@@ -48,7 +52,13 @@ PROCEDURE_METHOD_MAP, } from './types.js';
48
52
  export {
49
53
  // Builder functions
50
54
  defineProcedures, executeProcedure, isCompiledProcedure, isProcedureCollection, procedure, } from './procedure/builder.js';
51
- export { buildRestPath, createRoutesRegistrar, followsNamingConvention, generateRestRoutes, getRouteSummary, inferResourceName, parseNamingConvention, registerRestRoutes, } from './rest/index.js';
55
+ export {
56
+ // Succinct API (preferred)
57
+ rest,
58
+ // Legacy API (deprecated)
59
+ createRoutesRegistrar,
60
+ // Internal utilities
61
+ buildRestPath, followsNamingConvention, generateRestRoutes, getRouteSummary, inferResourceName, parseNamingConvention, registerRestRoutes, } from './rest/index.js';
52
62
  export {
53
63
  // tRPC utilities
54
64
  buildTRPCRouter, createAppRouter, createTRPC, createTRPCContextFactory, registerTRPCPlugin, veloxErrorToTRPCError, } from './trpc/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG,OAAgB,CAAC;AA+B/C,OAAO;AACL,YAAY;AACZ,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,OAAO;AACL,oBAAoB;AACpB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAoBhC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAazB,OAAO;AACL,iBAAiB;AACjB,eAAe,EACf,eAAe,EACf,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,6CAA6C;AAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,6BAA6B;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAW,WAAW,CAAC,OAAO,IAAI,eAAe,CAAC;AA+B7E,OAAO;AACL,YAAY;AACZ,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,OAAO;AACL,oBAAoB;AACpB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAoBhC,OAAO;AACL,2BAA2B;AAC3B,IAAI;AACJ,0BAA0B;AAC1B,qBAAqB;AACrB,qBAAqB;AACrB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAazB,OAAO;AACL,iBAAiB;AACjB,eAAe,EACf,eAAe,EACf,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
@@ -104,21 +104,54 @@ export declare function getRouteSummary(collections: ProcedureCollection[], pref
104
104
  * @param options - Registration options
105
105
  * @returns A function that registers routes on a Fastify instance
106
106
  *
107
+ * @deprecated Use `rest()` instead. This alias will be removed in v0.9.
108
+ *
107
109
  * @example
108
110
  * ```typescript
109
- * import { createVeloxApp } from '@veloxts/core';
110
- * import { createRoutesRegistrar, defineProcedures, procedure } from '@veloxts/router';
111
+ * import { veloxApp } from '@veloxts/core';
112
+ * import { rest, defineProcedures, procedure } from '@veloxts/router';
111
113
  *
112
114
  * const users = defineProcedures('users', {
113
115
  * listUsers: procedure().query(async () => []),
114
116
  * });
115
117
  *
116
- * const app = await createVeloxApp();
118
+ * const app = await veloxApp();
117
119
  *
118
- * app.routes(createRoutesRegistrar([users], { prefix: '/api' }));
120
+ * app.routes(rest([users], { prefix: '/api' }));
119
121
  *
120
122
  * await app.start();
121
123
  * ```
122
124
  */
123
125
  export declare function createRoutesRegistrar(collections: ProcedureCollection[], options?: RestAdapterOptions): (server: FastifyInstance) => void;
126
+ /**
127
+ * Creates a routes registrar for REST endpoints (succinct API)
128
+ *
129
+ * This is the preferred way to register procedure collections as REST routes.
130
+ * Use with `app.routes()` for a fluent API experience.
131
+ *
132
+ * @param collections - Procedure collections to register as REST routes
133
+ * @param options - REST adapter options (prefix, validation, etc.)
134
+ * @returns A function that registers routes on a Fastify instance
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * import { veloxApp } from '@veloxts/core';
139
+ * import { rest, defineProcedures, procedure } from '@veloxts/router';
140
+ *
141
+ * const users = defineProcedures('users', {
142
+ * listUsers: procedure().query(async () => []),
143
+ * createUser: procedure()
144
+ * .input(z.object({ name: z.string() }))
145
+ * .mutation(async ({ input }) => ({ id: '1', ...input })),
146
+ * });
147
+ *
148
+ * const app = await veloxApp();
149
+ *
150
+ * // Succinct registration
151
+ * app.routes(rest([users], { prefix: '/api' }));
152
+ *
153
+ * await app.start();
154
+ * ```
155
+ */
156
+ export declare function rest(collections: ProcedureCollection[], options?: RestAdapterOptions): (server: FastifyInstance) => void;
124
157
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/rest/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOtF;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAClF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS,EAAE,CAW/E;AAsJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CA0BN;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,mBAAmB,EAAE,EAClC,MAAM,SAAS,GACd,KAAK,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,GAAE,kBAAuB,GAC/B,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAInC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/rest/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOtF;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kBAAkB;IAClB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAClF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS,EAAE,CAW/E;AA6KD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CA8BN;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,mBAAmB,EAAE,EAClC,MAAM,SAAS,GACd,KAAK,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,GAAE,kBAAuB,GAC/B,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAInC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,IAAI,CAClB,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,GAAE,kBAAuB,GAC/B,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAInC"}
@@ -68,10 +68,6 @@ function generateRouteForProcedure(name, procedure, namespace) {
68
68
  // Try to infer from naming convention
69
69
  const mapping = parseNamingConvention(name, procedure.type);
70
70
  if (mapping) {
71
- // MVP: Only allow GET and POST
72
- if (mapping.method !== 'GET' && mapping.method !== 'POST') {
73
- return undefined;
74
- }
75
71
  return {
76
72
  method: mapping.method,
77
73
  path: buildRestPath(namespace, mapping),
@@ -92,7 +88,8 @@ function generateRouteForProcedure(name, procedure, namespace) {
92
88
  * 1. Extracts input from request (params, query, body)
93
89
  * 2. Gets context from request decorator
94
90
  * 3. Executes the procedure (validation, middleware, handler)
95
- * 4. Returns the result
91
+ * 4. Sets appropriate HTTP status code
92
+ * 5. Returns the result
96
93
  */
97
94
  function createRouteHandler(route) {
98
95
  return async (request, reply) => {
@@ -102,9 +99,22 @@ function createRouteHandler(route) {
102
99
  const ctx = getContextFromRequest(request);
103
100
  // Execute the procedure
104
101
  const result = await executeProcedure(route.procedure, input, ctx);
105
- // For mutations (POST), set 201 status for creates
106
- if (route.method === 'POST' && route.procedureName.startsWith('create')) {
107
- reply.status(201);
102
+ // Set appropriate HTTP status codes based on method and result
103
+ switch (route.method) {
104
+ case 'POST':
105
+ // 201 Created for new resources
106
+ if (route.procedureName.startsWith('create') || route.procedureName.startsWith('add')) {
107
+ reply.status(201);
108
+ }
109
+ break;
110
+ case 'DELETE':
111
+ // 204 No Content if result is null/undefined/empty, otherwise 200 OK
112
+ if (result === null || result === undefined) {
113
+ reply.status(204);
114
+ return null;
115
+ }
116
+ break;
117
+ // GET, PUT, PATCH default to 200 OK (Fastify default)
108
118
  }
109
119
  return result;
110
120
  };
@@ -120,19 +130,29 @@ function isPlainObject(value) {
120
130
  *
121
131
  * - GET: Merge params and query
122
132
  * - POST: Use body
133
+ * - PUT/PATCH: Merge params (for ID) and body (for data)
134
+ * - DELETE: Merge params and query (no body per REST conventions)
123
135
  */
124
136
  function gatherInput(request, route) {
125
- if (route.method === 'GET') {
126
- // Safely merge route params and query params with type guards
127
- const params = isPlainObject(request.params) ? request.params : {};
128
- const query = isPlainObject(request.query) ? request.query : {};
129
- return {
130
- ...params,
131
- ...query,
132
- };
137
+ const params = isPlainObject(request.params) ? request.params : {};
138
+ const query = isPlainObject(request.query) ? request.query : {};
139
+ const body = isPlainObject(request.body) ? request.body : {};
140
+ switch (route.method) {
141
+ case 'GET':
142
+ // GET: params (for :id) + query (for filters/pagination)
143
+ return { ...params, ...query };
144
+ case 'DELETE':
145
+ // DELETE: params (for :id) + query (for options), no body per REST conventions
146
+ return { ...params, ...query };
147
+ case 'PUT':
148
+ case 'PATCH':
149
+ // PUT/PATCH: params (for :id) + body (for data)
150
+ return { ...params, ...body };
151
+ case 'POST':
152
+ default:
153
+ // POST: body only (no ID in params for creates)
154
+ return request.body;
133
155
  }
134
- // POST, PUT, PATCH, DELETE: Use body
135
- return request.body;
136
156
  }
137
157
  /**
138
158
  * Extract context from Fastify request
@@ -203,10 +223,14 @@ export function registerRestRoutes(server, collections, options = {}) {
203
223
  case 'POST':
204
224
  server.post(fullPath, handler);
205
225
  break;
206
- // MVP: Only GET and POST
207
- // v1.1+ will add PUT, PATCH, DELETE
208
- default:
209
- // Skip unsupported methods in MVP
226
+ case 'PUT':
227
+ server.put(fullPath, handler);
228
+ break;
229
+ case 'PATCH':
230
+ server.patch(fullPath, handler);
231
+ break;
232
+ case 'DELETE':
233
+ server.delete(fullPath, handler);
210
234
  break;
211
235
  }
212
236
  }
@@ -246,18 +270,20 @@ export function getRouteSummary(collections, prefix = '/api') {
246
270
  * @param options - Registration options
247
271
  * @returns A function that registers routes on a Fastify instance
248
272
  *
273
+ * @deprecated Use `rest()` instead. This alias will be removed in v0.9.
274
+ *
249
275
  * @example
250
276
  * ```typescript
251
- * import { createVeloxApp } from '@veloxts/core';
252
- * import { createRoutesRegistrar, defineProcedures, procedure } from '@veloxts/router';
277
+ * import { veloxApp } from '@veloxts/core';
278
+ * import { rest, defineProcedures, procedure } from '@veloxts/router';
253
279
  *
254
280
  * const users = defineProcedures('users', {
255
281
  * listUsers: procedure().query(async () => []),
256
282
  * });
257
283
  *
258
- * const app = await createVeloxApp();
284
+ * const app = await veloxApp();
259
285
  *
260
- * app.routes(createRoutesRegistrar([users], { prefix: '/api' }));
286
+ * app.routes(rest([users], { prefix: '/api' }));
261
287
  *
262
288
  * await app.start();
263
289
  * ```
@@ -267,4 +293,39 @@ export function createRoutesRegistrar(collections, options = {}) {
267
293
  registerRestRoutes(server, collections, options);
268
294
  };
269
295
  }
296
+ /**
297
+ * Creates a routes registrar for REST endpoints (succinct API)
298
+ *
299
+ * This is the preferred way to register procedure collections as REST routes.
300
+ * Use with `app.routes()` for a fluent API experience.
301
+ *
302
+ * @param collections - Procedure collections to register as REST routes
303
+ * @param options - REST adapter options (prefix, validation, etc.)
304
+ * @returns A function that registers routes on a Fastify instance
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * import { veloxApp } from '@veloxts/core';
309
+ * import { rest, defineProcedures, procedure } from '@veloxts/router';
310
+ *
311
+ * const users = defineProcedures('users', {
312
+ * listUsers: procedure().query(async () => []),
313
+ * createUser: procedure()
314
+ * .input(z.object({ name: z.string() }))
315
+ * .mutation(async ({ input }) => ({ id: '1', ...input })),
316
+ * });
317
+ *
318
+ * const app = await veloxApp();
319
+ *
320
+ * // Succinct registration
321
+ * app.routes(rest([users], { prefix: '/api' }));
322
+ *
323
+ * await app.start();
324
+ * ```
325
+ */
326
+ export function rest(collections, options = {}) {
327
+ return (server) => {
328
+ registerRestRoutes(server, collections, options);
329
+ };
330
+ }
270
331
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/rest/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/rest/adapter.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * @module rest
5
5
  */
6
6
  export type { RestAdapterOptions, RestRoute } from './adapter.js';
7
- export { createRoutesRegistrar, generateRestRoutes, getRouteSummary, registerRestRoutes, } from './adapter.js';
7
+ export { rest, createRoutesRegistrar, generateRestRoutes, getRouteSummary, registerRestRoutes, } from './adapter.js';
8
8
  export type { RestMapping } from './naming.js';
9
9
  export { buildRestPath, followsNamingConvention, inferResourceName, parseNamingConvention, } from './naming.js';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAEL,IAAI,EAEJ,qBAAqB,EAErB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
@@ -4,6 +4,12 @@
4
4
  * @module rest
5
5
  */
6
6
  // REST adapter - public API
7
- export { createRoutesRegistrar, generateRestRoutes, getRouteSummary, registerRestRoutes, } from './adapter.js';
7
+ export {
8
+ // Succinct API (preferred)
9
+ rest,
10
+ // Legacy API (deprecated)
11
+ createRoutesRegistrar,
12
+ // Internal utilities
13
+ generateRestRoutes, getRouteSummary, registerRestRoutes, } from './adapter.js';
8
14
  export { buildRestPath, followsNamingConvention, inferResourceName, parseNamingConvention, } from './naming.js';
9
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,4BAA4B;AAC5B,OAAO;AACL,2BAA2B;AAC3B,IAAI;AACJ,0BAA0B;AAC1B,qBAAqB;AACrB,qBAAqB;AACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/rest/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AA4ED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,CAoBhG;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAU7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQlE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAElF"}
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/rest/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAgHD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,CAoBhG;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAU7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQlE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAElF"}
@@ -10,20 +10,21 @@
10
10
  // Naming Patterns
11
11
  // ============================================================================
12
12
  /**
13
- * MVP (v0.1.0) naming patterns - GET and POST only
13
+ * REST naming patterns - Full verb support
14
14
  *
15
15
  * Pattern matching is done by prefix:
16
- * - get<Resource> -> GET /:id (single resource)
17
- * - list<Resources> -> GET / (collection)
18
- * - find<Resource> -> GET / (search/filter)
19
- * - create<Resource> -> POST / (create new)
20
- * - add<Resource> -> POST / (alias for create)
21
- *
22
- * v1.1+ will add:
23
- * - update<Resource> -> PUT /:id
24
- * - delete<Resource> -> DELETE /:id
16
+ * - get<Resource> -> GET /:id (single resource)
17
+ * - list<Resources> -> GET / (collection)
18
+ * - find<Resource> -> GET / (search/filter)
19
+ * - create<Resource> -> POST / (create new)
20
+ * - add<Resource> -> POST / (alias for create)
21
+ * - update<Resource> -> PUT /:id (full update)
22
+ * - edit<Resource> -> PUT /:id (alias for update)
23
+ * - patch<Resource> -> PATCH /:id (partial update)
24
+ * - delete<Resource> -> DELETE /:id (remove resource)
25
+ * - remove<Resource> -> DELETE /:id (alias for delete)
25
26
  */
26
- const MVP_NAMING_PATTERNS = [
27
+ const NAMING_PATTERNS = [
27
28
  // GET with ID - single resource retrieval
28
29
  {
29
30
  pattern: /^get([A-Z][a-zA-Z]*)$/,
@@ -59,6 +60,41 @@ const MVP_NAMING_PATTERNS = [
59
60
  hasIdParam: false,
60
61
  procedureType: 'mutation',
61
62
  },
63
+ // PUT - full update
64
+ {
65
+ pattern: /^update([A-Z][a-zA-Z]*)$/,
66
+ method: 'PUT',
67
+ hasIdParam: true,
68
+ procedureType: 'mutation',
69
+ },
70
+ // PUT - edit resource (alias)
71
+ {
72
+ pattern: /^edit([A-Z][a-zA-Z]*)$/,
73
+ method: 'PUT',
74
+ hasIdParam: true,
75
+ procedureType: 'mutation',
76
+ },
77
+ // PATCH - partial update
78
+ {
79
+ pattern: /^patch([A-Z][a-zA-Z]*)$/,
80
+ method: 'PATCH',
81
+ hasIdParam: true,
82
+ procedureType: 'mutation',
83
+ },
84
+ // DELETE - remove resource
85
+ {
86
+ pattern: /^delete([A-Z][a-zA-Z]*)$/,
87
+ method: 'DELETE',
88
+ hasIdParam: true,
89
+ procedureType: 'mutation',
90
+ },
91
+ // DELETE - remove resource (alias)
92
+ {
93
+ pattern: /^remove([A-Z][a-zA-Z]*)$/,
94
+ method: 'DELETE',
95
+ hasIdParam: true,
96
+ procedureType: 'mutation',
97
+ },
62
98
  ];
63
99
  // ============================================================================
64
100
  // Parsing Functions
@@ -86,7 +122,7 @@ const MVP_NAMING_PATTERNS = [
86
122
  * ```
87
123
  */
88
124
  export function parseNamingConvention(name, type) {
89
- for (const pattern of MVP_NAMING_PATTERNS) {
125
+ for (const pattern of NAMING_PATTERNS) {
90
126
  // Check if procedure type matches
91
127
  if (pattern.procedureType !== type) {
92
128
  continue;
@@ -143,7 +179,7 @@ export function buildRestPath(namespace, mapping) {
143
179
  * ```
144
180
  */
145
181
  export function inferResourceName(name) {
146
- for (const pattern of MVP_NAMING_PATTERNS) {
182
+ for (const pattern of NAMING_PATTERNS) {
147
183
  const match = pattern.pattern.exec(name);
148
184
  if (match) {
149
185
  return match[1];
@@ -1 +1 @@
1
- {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/rest/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkCH,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;;;;;;;;;;;GAaG;AACH,MAAM,mBAAmB,GAA6B;IACpD,0CAA0C;IAC1C;QACE,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,OAAO;KACvB;IACD,mCAAmC;IACnC;QACE,OAAO,EAAE,wBAAwB;QACjC,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,OAAO;KACvB;IACD,+BAA+B;IAC/B;QACE,OAAO,EAAE,wBAAwB;QACjC,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,OAAO;KACvB;IACD,yBAAyB;IACzB;QACE,OAAO,EAAE,0BAA0B;QACnC,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,UAAU;KAC1B;IACD,8BAA8B;IAC9B;QACE,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,UAAU;KAC1B;CACO,CAAC;AAEX,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAmB;IACrE,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,kCAAkC;QAClC,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;gBACvC,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAoB;IACnE,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;IAEjC,mEAAmE;IACnE,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,2CAA2C;IAC3C,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,IAAmB;IACvE,OAAO,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/rest/naming.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veloxts/router",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "Procedure definitions with tRPC and REST routing for VeloxTS framework",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,17 +14,18 @@
14
14
  "dependencies": {
15
15
  "@trpc/server": "11.7.2",
16
16
  "fastify": "5.6.2",
17
- "@veloxts/core": "0.3.2",
18
- "@veloxts/validation": "0.3.2"
17
+ "@veloxts/core": "0.3.4",
18
+ "@veloxts/validation": "0.3.4"
19
19
  },
20
20
  "devDependencies": {
21
+ "@vitest/coverage-v8": "4.0.15",
21
22
  "typescript": "5.9.3",
22
- "zod": "3.24.4",
23
- "vitest": "4.0.15"
23
+ "vitest": "4.0.15",
24
+ "zod": "3.24.4"
24
25
  },
25
26
  "peerDependencies": {
26
- "zod": "^3.24.0",
27
- "fastify": "^5.0.0"
27
+ "fastify": "^5.0.0",
28
+ "zod": "^3.24.0"
28
29
  },
29
30
  "peerDependenciesMeta": {
30
31
  "zod": {