Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

@ts-rest/core

Package Overview
Dependencies
Maintainers
1
Versions
147
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ts-rest/core - npm Package Compare versions

Comparing version
0.1.5
to
0.1.6
+3
-1
package.json
{
"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"

@@ -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 {};

@@ -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"}

@@ -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;

@@ -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"}