UNPKG

@seamapi/blueprint

Version:

Build tools for the Seam API using this blueprint.

59 lines 2.32 kB
import { snakeCase } from 'change-case'; export const createPhpRequest = ({ request }, _context) => { const parts = request.path.split('/'); const requestParams = Object.entries(request.parameters) .map(([key, value]) => `${key}: ${formatPhpValue(value)}`) .join(','); return `<?php\n$seam${parts.map((p) => snakeCase(p)).join('->')}(${requestParams})`; }; export const createPhpResponse = ({ response, title }, context) => { const { endpoint } = context; if (endpoint.response.responseType === 'void') return 'null'; const { responseKey } = endpoint.response; const responseValue = response?.body?.[responseKey]; if (responseValue == null) { throw new Error(`Missing ${responseKey} for '${title}'`); } const formattedResponse = Array.isArray(responseValue) ? formatPhpArrayResponse(responseValue, title) : formatPhpResponse(responseValue); return `<?php\n${formattedResponse}`; }; const formatPhpArrayResponse = (responseArray, title) => { const formattedItems = responseArray .map((item) => { if (item == null) { throw new Error(`Null value in response array for '${title}'`); } return formatPhpResponse(item); }) .join(',\n'); return `[${formattedItems}]`; }; const formatPhpResponse = (responseParams) => { const values = Object.entries(responseParams).map(([paramKey, paramValue]) => `"${snakeCase(paramKey)}" => ${formatPhpValue(paramValue)}`); return `[${values.join(',')}]`; }; const formatPhpValue = (value) => { if (value == null) return 'null'; if (typeof value === 'boolean') return value ? 'true' : 'false'; if (typeof value === 'number') return value.toString(); if (typeof value === 'string') return `"${value}"`; if (Array.isArray(value)) { const formattedItems = value.map(formatPhpValue).join(', '); return `[${formattedItems}]`; } if (typeof value === 'object') { const formattedEntries = Object.entries(value) .map(([key, val]) => `"${snakeCase(key)}" => ${formatPhpValue(val)}`) .join(', '); return `[${formattedEntries}]`; } throw new Error(`Unsupported type: ${typeof value}`); }; //# sourceMappingURL=php.js.map