@ts-rest/core
Advanced tools
+3
-1
| { | ||
| "name": "@ts-rest/core", | ||
| "version": "0.1.5", | ||
| "version": "0.1.6", | ||
| "description": "RPC-like experience over a regular REST API, with type safe server implementations 🪄", | ||
@@ -20,2 +20,4 @@ "type": "commonjs", | ||
| "peerDependencies": { | ||
| "zod": "^3.17.10", | ||
| "@tscont/ts-rest-utils": "0.0.1", | ||
| "express": "4.18.1", | ||
@@ -22,0 +24,0 @@ "tslib": "^2.3.0" |
+12
-5
@@ -1,11 +0,16 @@ | ||
| import { AppRoute, AppRouter } from './dsl'; | ||
| import { z } from 'zod'; | ||
| import { AppRoute, AppRouteMutation, AppRouter } from './dsl'; | ||
| import { Without } from '@tscont/ts-rest-utils'; | ||
| declare type RecursiveProxyObj<T extends AppRouter> = { | ||
| [TKey in keyof T]: T[TKey] extends AppRouter ? RecursiveProxyObj<T[TKey]> : T[TKey] extends AppRoute ? DataReturn<T[TKey]> : never; | ||
| }; | ||
| declare type DataReturn<TRoute extends AppRoute> = Parameters<TRoute['path']>[0] extends undefined ? () => Promise<{ | ||
| declare type AppRouteMutationType<T> = T extends z.AnyZodObject ? z.infer<T> : T; | ||
| declare type DataReturnArgs<TRoute extends AppRoute> = { | ||
| body: TRoute extends AppRouteMutation ? AppRouteMutationType<TRoute['body']> : never; | ||
| params: Parameters<TRoute['path']>[0] extends undefined ? never : Parameters<TRoute['path']>[0]; | ||
| query: TRoute['query'] extends z.AnyZodObject ? AppRouteMutationType<TRoute['query']> : never; | ||
| }; | ||
| declare type DataReturn<TRoute extends AppRoute> = (args: Without<DataReturnArgs<TRoute>, never>) => Promise<{ | ||
| data: TRoute['response']; | ||
| status: number; | ||
| }> : (path: Parameters<TRoute['path']>[0]) => Promise<{ | ||
| data: TRoute['response']; | ||
| status: number; | ||
| }>; | ||
@@ -21,2 +26,3 @@ declare type ClientArgs = { | ||
| headers: Record<string, string>; | ||
| body: string | undefined; | ||
| }) => Promise<{ | ||
@@ -26,3 +32,4 @@ status: number; | ||
| }>; | ||
| export declare type InitClientReturn<T extends AppRouter> = RecursiveProxyObj<T>; | ||
| export declare const initClient: <T extends AppRouter>(router: T, args: ClientArgs) => RecursiveProxyObj<T>; | ||
| export {}; |
+24
-6
@@ -6,9 +6,26 @@ "use strict"; | ||
| const dsl_1 = require("./dsl"); | ||
| const getRouteQuery = (route, args) => { | ||
| return (pathParams) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { | ||
| const path = route.path(pathParams); | ||
| const result = yield args.api({ | ||
| path: args.baseUrl + path, | ||
| const getRouteQuery = (route, clientArgs) => { | ||
| return (inputArgs) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { | ||
| const path = route.path(inputArgs.params); | ||
| const queryString = typeof inputArgs.query === 'object' | ||
| ? Object.keys(inputArgs.query) | ||
| .map((key) => { | ||
| return (encodeURIComponent(key) + | ||
| '=' + | ||
| encodeURIComponent(inputArgs.query[key])); | ||
| }) | ||
| .join('&') | ||
| : ''; | ||
| const completeUrl = `${clientArgs.baseUrl}${path}${queryString.length > 0 && | ||
| queryString !== null && | ||
| queryString !== undefined | ||
| ? '?' + queryString | ||
| : ''}`; | ||
| const result = yield clientArgs.api({ | ||
| path: completeUrl, | ||
| method: route.method, | ||
| headers: args.baseHeaders, | ||
| headers: Object.assign(Object.assign({}, clientArgs.baseHeaders), { 'Content-Type': 'application/json' }), | ||
| body: inputArgs.body !== null && inputArgs.body !== undefined | ||
| ? JSON.stringify(inputArgs.body) | ||
| : undefined, | ||
| }); | ||
@@ -24,2 +41,3 @@ return { data: result.data, status: result.status }; | ||
| if ((0, dsl_1.isAppRoute)(subRouter)) { | ||
| // If the current router.X is a route, return a function to handle the users args | ||
| return getRouteQuery(subRouter, args); | ||
@@ -26,0 +44,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/client.ts"],"names":[],"mappings":";;;;AAAA,+BAAwD;AAiCxD,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,IAAgB,EAAE,EAAE;IAC1D,OAAO,CAAO,UAAkC,EAAE,EAAE;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,IAAI,CAAC,WAAW;SAC1B,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACtD,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAiB,EAAE,IAAgB,EAAE,EAAE;IAC7D,OAAO,IAAI,KAAK,CACd,EAAE,EACF;QACE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAO,EAAE;YAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,EAAE;gBACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAElC,IAAI,IAAA,gBAAU,EAAC,SAAS,CAAC,EAAE;oBACzB,OAAO,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBACvC;qBAAM;oBACL,OAAO,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBACxC;aACF;YAED,OAAO,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;KACF,CACF,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,UAAU,GAAG,CACxB,MAAS,EACT,IAAgB,EAChB,EAAE;IACF,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE3C,2CAA2C;IAC3C,OAAO,KAA6B,CAAC;AACvC,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB"} | ||
| {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/client.ts"],"names":[],"mappings":";;;;AACA,+BAA0E;AA6C1E,MAAM,aAAa,GAAG,CACpB,KAAgB,EAChB,UAAsB,EACtB,EAAE;IACF,OAAO,CAAO,SAA8B,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE1C,MAAM,WAAW,GACf,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBACzB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,OAAO,CACL,kBAAkB,CAAC,GAAG,CAAC;oBACvB,GAAG;oBACH,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CACzC,CAAC;YACJ,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,OAAO,GAAG,IAAI,GAC9C,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,SAAS;YACvB,CAAC,CAAC,GAAG,GAAG,WAAW;YACnB,CAAC,CAAC,EACN,EAAE,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC;YAClC,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,kCACF,UAAU,CAAC,WAAW,KACzB,cAAc,EAAE,kBAAkB,GACnC;YACD,IAAI,EACF,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;gBACrD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,SAAS;SAChB,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACtD,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAiB,EAAE,IAAgB,EAAE,EAAE;IAC7D,OAAO,IAAI,KAAK,CACd,EAAE,EACF;QACE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAO,EAAE;YAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,EAAE;gBACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAElC,IAAI,IAAA,gBAAU,EAAC,SAAS,CAAC,EAAE;oBACzB,iFAAiF;oBACjF,OAAO,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBACvC;qBAAM;oBACL,OAAO,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBACxC;aACF;YAED,OAAO,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;KACF,CACF,CAAC;AACJ,CAAC,CAAC;AAIK,MAAM,UAAU,GAAG,CACxB,MAAS,EACT,IAAgB,EACK,EAAE;IACvB,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE3C,2CAA2C;IAC3C,OAAO,KAA4B,CAAC;AACtC,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB"} |
+26
-6
@@ -1,6 +0,17 @@ | ||
| export declare type AppRoute = { | ||
| method: string; | ||
| export declare type AppRouteQuery = { | ||
| __type: 'AppRouteQuery'; | ||
| method: 'GET'; | ||
| path: PathFunction; | ||
| response: unknown; | ||
| query?: unknown; | ||
| }; | ||
| export declare type AppRouteMutation = { | ||
| __type: 'AppRouteMutation'; | ||
| method: 'POST' | 'DELETE' | 'PUT' | 'PATCH'; | ||
| path: PathFunction; | ||
| response: unknown; | ||
| body: unknown; | ||
| query?: unknown; | ||
| }; | ||
| export declare type AppRoute = AppRouteQuery | AppRouteMutation; | ||
| export declare type AppRouter = { | ||
@@ -12,3 +23,5 @@ [key: string]: AppRouter | AppRoute; | ||
| declare type TsCont = { | ||
| router: <T extends AppRouter>(endpoints: T) => T; | ||
| router: <T extends { | ||
| [key: string]: AppRoute | AppRouter; | ||
| }>(endpoints: T) => T; | ||
| query: <T extends { | ||
@@ -18,7 +31,14 @@ method: 'GET'; | ||
| response: unknown; | ||
| }, P extends PathFunction>(query: T) => T; | ||
| query: unknown; | ||
| }, P extends PathFunction>(query: T) => T & { | ||
| __type: 'AppRouteQuery'; | ||
| }; | ||
| mutation: <T extends { | ||
| method: 'POST' | 'PUT' | 'DELETE'; | ||
| method: 'POST' | 'DELETE' | 'PUT' | 'PATCH'; | ||
| path: P; | ||
| }, P extends PathFunction>(mutation: T) => T; | ||
| response: unknown; | ||
| body: unknown; | ||
| }, P extends PathFunction>(mutation: T) => T & { | ||
| __type: 'AppRouteMutation'; | ||
| }; | ||
| response: <T>() => T; | ||
@@ -25,0 +45,0 @@ path: <T>() => T; |
+2
-2
@@ -11,4 +11,4 @@ "use strict"; | ||
| router: (args) => args, | ||
| query: (args) => args, | ||
| mutation: (args) => args, | ||
| query: (args) => (Object.assign({ __type: 'AppRouteQuery' }, args)), | ||
| mutation: (args) => (Object.assign({ __type: 'AppRouteMutation' }, args)), | ||
| response: () => '', | ||
@@ -15,0 +15,0 @@ path: () => '', |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/dsl.ts"],"names":[],"mappings":";;;AAWO,MAAM,UAAU,GAAG,CAAC,GAAyB,EAAmB,EAAE;IACvE,OAAQ,GAAgB,CAAC,MAAM,KAAK,SAAS,CAAC;AAChD,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AA8BK,MAAM,UAAU,GAAG,GAAW,EAAE;IACrC,OAAO;QACL,MAAM,EAAE,CAAsB,IAAO,EAAE,EAAE,CAAC,IAAI;QAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;QACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;QACxB,QAAQ,EAAE,GAAM,EAAE,CAAC,EAAkB;QACrC,IAAI,EAAE,GAAM,EAAE,CAAC,EAAkB;KAClC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB"} | ||
| {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/dsl.ts"],"names":[],"mappings":";;;AAuBO,MAAM,UAAU,GAAG,CAAC,GAAyB,EAAmB,EAAE;IACvE,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;AAClC,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AAsCK,MAAM,UAAU,GAAG,GAAW,EAAE;IACrC,OAAO;QACL,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;QACtB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAG,MAAM,EAAE,eAAe,IAAK,IAAI,EAAG;QACvD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAG,MAAM,EAAE,kBAAkB,IAAK,IAAI,EAAG;QAC7D,QAAQ,EAAE,GAAM,EAAE,CAAC,EAAkB;QACrC,IAAI,EAAE,GAAM,EAAE,CAAC,EAAkB;KAClC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB"} |
| import { Express } from 'express'; | ||
| import { AppRoute, AppRouter } from './dsl'; | ||
| declare type AppRouteImplementation<T extends AppRoute> = (params: Parameters<T['path']>[0]) => Promise<T['response']>; | ||
| import { z } from 'zod'; | ||
| import { AppRoute, AppRouteMutation, AppRouteQuery, AppRouter } from './dsl'; | ||
| declare type AppRouteQueryImplementation<T extends AppRouteQuery> = (input: { | ||
| params: Parameters<T['path']>[0]; | ||
| }) => Promise<T['response']>; | ||
| declare type AppRouteMutationImplementation<T extends AppRouteMutation> = (input: { | ||
| params: Parameters<T['path']>[0]; | ||
| body: T['body'] extends z.AnyZodObject ? z.infer<T['body']> : null; | ||
| }) => Promise<T['response']>; | ||
| declare type AppRouteImplementation<T extends AppRoute> = T extends AppRouteMutation ? AppRouteMutationImplementation<T> : T extends AppRouteQuery ? AppRouteQueryImplementation<T> : never; | ||
| declare type RecursiveRouterObj<T extends AppRouter> = { | ||
@@ -5,0 +13,0 @@ [TKey in keyof T]: T[TKey] extends AppRouter ? RecursiveRouterObj<T[TKey]> : T[TKey] extends AppRoute ? AppRouteImplementation<T[TKey]> : never; |
@@ -7,3 +7,3 @@ "use strict"; | ||
| const server_1 = require("./server"); | ||
| const type_utils_1 = require("./type-utils"); | ||
| const ts_rest_utils_1 = require("@tscont/ts-rest-utils"); | ||
| const initServer = () => { | ||
@@ -25,15 +25,51 @@ return { | ||
| }; | ||
| const transformAppRouteImplementation = (route, schema, app) => { | ||
| const transformAppRouteQueryImplementation = (route, schema, app) => { | ||
| const path = (0, server_1.getAppRoutePathRoute)(schema); | ||
| console.log(`[tscont] Initialized ${schema.method} ${path}`); | ||
| app.get(path, (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { | ||
| const result = yield route(req.params); | ||
| return res.json(result); | ||
| return res.json(yield route({ params: req.params })); | ||
| })); | ||
| }; | ||
| const transformAppRouteMutationImplementation = (route, schema, app) => { | ||
| const path = (0, server_1.getAppRoutePathRoute)(schema); | ||
| console.log(`[tscont] Initialized ${schema.method} ${path}`); | ||
| const method = schema.method; | ||
| const callback = (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { | ||
| try { | ||
| const result = yield route({ params: req.params, body: req.body }); | ||
| return res.json(result); | ||
| } | ||
| catch (e) { | ||
| console.error(`[tscont] Error on ${method} ${path}`, e); | ||
| return res.status(500).send('Internal Server Error'); | ||
| } | ||
| }); | ||
| switch (method) { | ||
| case 'DELETE': | ||
| app.delete(path, callback); | ||
| break; | ||
| case 'POST': | ||
| app.post(path, callback); | ||
| break; | ||
| case 'PUT': | ||
| app.put(path, callback); | ||
| break; | ||
| case 'PATCH': | ||
| app.patch(path, callback); | ||
| break; | ||
| default: | ||
| // eslint-disable-next-line no-case-declarations, @typescript-eslint/no-unused-vars | ||
| const _exhaustiveCheck = method; | ||
| } | ||
| }; | ||
| const createExpressEndpoints = (schema, router, app) => { | ||
| recursivelyApplyExpressRouter(router, [], (route, path) => { | ||
| const routerViaPath = (0, type_utils_1.getValue)(schema, path.join('.')); | ||
| const routerViaPath = (0, ts_rest_utils_1.getValue)(schema, path.join('.')); | ||
| if ((0, dsl_1.isAppRoute)(routerViaPath)) { | ||
| transformAppRouteImplementation(route, routerViaPath, app); | ||
| if (routerViaPath.__type === 'AppRouteMutation') { | ||
| transformAppRouteMutationImplementation(route, routerViaPath, app); | ||
| } | ||
| else { | ||
| transformAppRouteQueryImplementation(route, routerViaPath, app); | ||
| } | ||
| } | ||
@@ -40,0 +76,0 @@ else { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server-express.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/server-express.ts"],"names":[],"mappings":";;;;AACA,+BAAwD;AACxD,qCAAgD;AAChD,6CAAwC;AAcjC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,OAAO;QACL,MAAM,EAAE,CAAsB,MAAS,EAAE,IAA2B,EAAE,EAAE,CACtE,IAAI;KACP,CAAC;AACJ,CAAC,CAAC;AALW,QAAA,UAAU,cAKrB;AAEF,MAAM,6BAA6B,GAAG,CACpC,MAA6D,EAC7D,IAAc,EACd,gBAA8E,EACxE,EAAE;IACR,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,6BAA6B,CAC3B,MAAM,CAAC,GAAG,CAAC,EACX,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EACd,gBAAgB,CACjB,CAAC;SACH;KACF;SAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;QACvC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAChC;AACH,CAAC,CAAC;AAQF,MAAM,+BAA+B,GAA4B,CAC/D,KAAK,EACL,MAAM,EACN,GAAG,EACH,EAAE;IACF,MAAM,IAAI,GAAG,IAAA,6BAAoB,EAAC,MAAM,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAE7D,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEvC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,sBAAsB,GAAG,CAIpC,MAAiB,EACjB,MAAS,EACT,GAAY,EACZ,EAAE;IACF,6BAA6B,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACxD,MAAM,aAAa,GAAG,IAAA,qBAAQ,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvD,IAAI,IAAA,gBAAU,EAAC,aAAa,CAAC,EAAE;YAC7B,+BAA+B,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;SAC5D;aAAM;YACL,MAAM,IAAI,KAAK,CACb,iDAAiD,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CACnE,CAAC;SACH;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAnBW,QAAA,sBAAsB,0BAmBjC"} | ||
| {"version":3,"file":"server-express.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/server-express.ts"],"names":[],"mappings":"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"} |
| import { AppRoute, AppRouter } from './dsl'; | ||
| import { Without } from './type-utils'; | ||
| import { Without } from '@tscont/ts-rest-utils'; | ||
| declare type AppRouteShape<T extends AppRoute> = (params: Parameters<T['path']>[0]) => Promise<T['response']>; | ||
@@ -4,0 +4,0 @@ declare type AppRouterControllerShape<T extends AppRouter> = { |
| declare type GetIndexedField<T, K> = K extends keyof T ? T[K] : K extends `${number}` ? '0' extends keyof T ? undefined : number extends keyof T ? T[number] : undefined : undefined; | ||
| declare type FieldWithPossiblyUndefined<T, Key> = GetFieldType<Exclude<T, undefined>, Key> | Extract<T, undefined>; | ||
| declare type IndexedFieldWithPossiblyUndefined<T, Key> = GetIndexedField<Exclude<T, undefined>, Key> | Extract<T, undefined>; | ||
| export declare type GetFieldType<T, P> = P extends `${infer Left}.${infer Right}` ? Left extends keyof T ? FieldWithPossiblyUndefined<T[Left], Right> : Left extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? FieldWithPossiblyUndefined<IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey>, Right> : undefined : undefined : P extends keyof T ? T[P] : P extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey> : undefined : undefined; | ||
| export declare function getValue<TData, TPath extends string, TDefault = GetFieldType<TData, TPath>>(data: TData, path: TPath, defaultValue?: TDefault): GetFieldType<TData, TPath> | TDefault; | ||
| declare type ExcludeKeysWithTypeOf<T, V> = { | ||
| [K in keyof T]: Exclude<T[K], undefined> extends V ? never : K; | ||
| }[keyof T]; | ||
| export declare type Without<T, V> = Pick<T, ExcludeKeysWithTypeOf<T, V>>; | ||
| export {}; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.getValue = void 0; | ||
| function getValue(data, path, defaultValue) { | ||
| const value = path | ||
| .split(/[.[\]]/) | ||
| .filter(Boolean) | ||
| .reduce((value, key) => value === null || value === void 0 ? void 0 : value[key], data); | ||
| return value !== undefined ? value : defaultValue; | ||
| } | ||
| exports.getValue = getValue; | ||
| //# sourceMappingURL=type-utils.js.map |
| {"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../../../../../libs/ts-rest/core/src/lib/type-utils.ts"],"names":[],"mappings":";;;AAqCA,SAAgB,QAAQ,CAKtB,IAAW,EACX,IAAW,EACX,YAAuB;IAEvB,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CACL,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAE,KAAa,aAAb,KAAK,uBAAL,KAAK,CAAW,GAAG,CAAC,EACrC,IAAW,CACZ,CAAC;IAEJ,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,YAAyB,CAAC;AAClE,CAAC;AAlBD,4BAkBC"} |
26181
15.9%324
26.07%4
100%20
-13.04%