UNPKG

@seamapi/blueprint

Version:

Build tools for the Seam API using this blueprint.

45 lines 1.96 kB
import { pascalCase, snakeCase } from 'change-case'; const responseKeyToPythonResourceNameMap = { event: 'SeamEvent', }; export const createPythonRequest = ({ request }, _context) => { const parts = request.path.split('/'); const params = formatPythonArgs(request.parameters); return `seam${parts.map((p) => snakeCase(p)).join('.')}(${params})`; }; const formatPythonArgs = (jsonParams) => Object.entries(jsonParams) .map(([paramKey, paramValue]) => { const formattedValue = paramValue == null ? 'None' : JSON.stringify(paramValue); return `${snakeCase(paramKey)}=${formattedValue}`; }) .join(', '); export const createPythonResponse = ({ response, title }, context) => { const { endpoint } = context; if (endpoint.response.responseType === 'void') return 'None'; const { responseKey, resourceType } = endpoint.response; const responseValue = response?.body?.[responseKey]; if (responseValue == null) { throw new Error(`Missing ${responseKey} for '${title}'`); } const responsePythonClassName = pascalCase(responseKeyToPythonResourceNameMap[resourceType] ?? resourceType); return Array.isArray(responseValue) ? formatPythonArrayResponse(responseValue, responsePythonClassName, title) : formatPythonResponse(responseValue, responsePythonClassName); }; const formatPythonArrayResponse = (responseArray, responsePythonClassName, title) => { const formattedItems = responseArray .map((v) => { if (v == null) { throw new Error(`Null value in response array for '${title}'`); } return formatPythonResponse(v, responsePythonClassName); }) .join(', '); return `[${formattedItems}]`; }; const formatPythonResponse = (responseParams, responsePythonClassName) => { const params = formatPythonArgs(responseParams); return `${responsePythonClassName}(${params})`; }; //# sourceMappingURL=python.js.map