@seamapi/blueprint
Version:
Build tools for the Seam API using this blueprint.
45 lines • 1.96 kB
JavaScript
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