UNPKG

@lokalise/api-contracts

Version:
138 lines 5.04 kB
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