@lokalise/api-contracts
Version:
138 lines • 5.04 kB
JavaScript
const EMPTY_PARAMS = {};
/**
* @deprecated Use `defineApiContract` instead. This function will be removed in a future version.
* @example
* ```typescript
* // Before (deprecated):
* const route = buildPayloadRoute({
* method: 'post',
* requestBodySchema: bodySchema,
* successResponseBodySchema: responseSchema,
* pathResolver: () => '/api/users',
* })
*
* // After (recommended):
* const route = defineApiContract({
* method: 'post',
* requestBodySchema: bodySchema,
* pathResolver: () => '/api/users',
* responsesByStatusCode: { 201: responseSchema },
* })
* ```
*/
export function buildPayloadRoute(params) {
return {
isEmptyResponseExpected: params.isEmptyResponseExpected ?? false,
isNonJSONResponseExpected: params.isNonJSONResponseExpected ?? false,
method: params.method,
pathResolver: params.pathResolver,
requestBodySchema: params.requestBodySchema,
requestHeaderSchema: params.requestHeaderSchema,
responseHeaderSchema: params.responseHeaderSchema,
requestPathParamsSchema: params.requestPathParamsSchema,
requestQuerySchema: params.requestQuerySchema,
successResponseBodySchema: params.successResponseBodySchema,
description: params.description,
summary: params.summary,
responseSchemasByStatusCode: params.responseSchemasByStatusCode,
metadata: params.metadata,
tags: params.tags,
};
}
/**
* @deprecated Use `defineApiContract` instead. This function will be removed in a future version.
* @example
* ```typescript
* // Before (deprecated):
* const route = buildGetRoute({
* successResponseBodySchema: responseSchema,
* pathResolver: () => '/api/users',
* })
*
* // After (recommended):
* const route = defineApiContract({
* method: 'get',
* pathResolver: () => '/api/users',
* responsesByStatusCode: { 200: responseSchema },
* })
* ```
*/
export function buildGetRoute(params) {
return {
isEmptyResponseExpected: params.isEmptyResponseExpected ?? false,
isNonJSONResponseExpected: params.isNonJSONResponseExpected ?? false,
method: 'get',
pathResolver: params.pathResolver,
requestHeaderSchema: params.requestHeaderSchema,
responseHeaderSchema: params.responseHeaderSchema,
requestPathParamsSchema: params.requestPathParamsSchema,
requestQuerySchema: params.requestQuerySchema,
successResponseBodySchema: params.successResponseBodySchema,
description: params.description,
summary: params.summary,
responseSchemasByStatusCode: params.responseSchemasByStatusCode,
metadata: params.metadata,
tags: params.tags,
};
}
/**
* @deprecated Use `defineApiContract` instead. This function will be removed in a future version.
* @example
* ```typescript
* // Before (deprecated):
* const route = buildDeleteRoute({
* requestPathParamsSchema: z.object({ userId: z.string() }),
* pathResolver: (params) => `/api/users/${params.userId}`,
* })
*
* // After (recommended):
* const route = defineApiContract({
* method: 'delete',
* requestPathParamsSchema: z.object({ userId: z.string() }),
* pathResolver: ({ userId }) => `/api/users/${userId}`,
* responsesByStatusCode: { 204: ContractNoBody },
* })
* ```
*/
export function buildDeleteRoute(params) {
return {
isEmptyResponseExpected: params.isEmptyResponseExpected ?? true,
isNonJSONResponseExpected: params.isNonJSONResponseExpected ?? false,
method: 'delete',
pathResolver: params.pathResolver,
requestHeaderSchema: params.requestHeaderSchema,
responseHeaderSchema: params.responseHeaderSchema,
requestPathParamsSchema: params.requestPathParamsSchema,
requestQuerySchema: params.requestQuerySchema,
successResponseBodySchema: params.successResponseBodySchema,
description: params.description,
summary: params.summary,
responseSchemasByStatusCode: params.responseSchemasByStatusCode,
metadata: params.metadata,
tags: params.tags,
};
}
/**
* @deprecated Use `mapApiContractToPath` instead.
* Maps a route definition to a path string of the format '/static-path-part/:path-param-value'.
*/
export function mapRouteToPath(
// biome-ignore lint/suspicious/noExplicitAny: We don't care about types here, we just need Zod schema
routeDefinition) {
if (!routeDefinition.requestPathParamsSchema) {
return routeDefinition.pathResolver(EMPTY_PARAMS);
}
const shape = routeDefinition.requestPathParamsSchema.shape;
const resolverParams = {};
for (const key of Object.keys(shape)) {
resolverParams[key] = `:${key}`;
}
return routeDefinition.pathResolver(resolverParams);
}
/**
* @deprecated Use `describeApiContract` instead.
*/
export function describeContract(contract) {
return `${contract.method.toUpperCase()} ${mapRouteToPath(contract)}`;
}
//# sourceMappingURL=apiContracts.js.map