UNPKG

@seamapi/blueprint

Version:

Build tools for the Seam API using this blueprint.

56 lines 2.29 kB
import { camelCase, pascalCase } from 'change-case'; import { createJsonResponse } from './json.js'; export const createJavaRequest = ({ request }, _context) => { const pathParts = request.path.split('/').slice(1); const requestBuilderOptions = { path: request.path, parameters: request.parameters, }; const clientArgs = createJavaRequestBuilder(requestBuilderOptions); return `seam.${pathParts.map((p) => camelCase(p)).join('().')}(${clientArgs});`; }; const createJavaRequestBuilder = ({ path, parameters, }) => { const requestBuilderName = getRequestBuilderName(path); const isReqWithParams = Object.keys(parameters).length !== 0; if (!isReqWithParams) return ''; const formattedParams = formatJavaArgs(parameters); return `${requestBuilderName}.builder()${formattedParams}.build()`; }; const getRequestBuilderName = (path) => { const requestBuilderNameSuffix = 'Request'; const pathParts = path.split('/').slice(1); return isPathNested(pathParts) ? `${pascalCase(pathParts.slice(1).join('_'))}${requestBuilderNameSuffix}` : `${pascalCase(path)}${requestBuilderNameSuffix}`; }; const isPathNested = (pathParts) => pathParts.length > 2; const formatJavaArgs = (jsonParams) => Object.entries(jsonParams) .map(([paramKey, paramValue]) => { const formattedValue = formatJavaValue(paramValue); return `.${camelCase(paramKey)}(${formattedValue})`; }) .join('\n'); const formatJavaValue = (value) => { if (value === null) return 'null'; if (typeof value === 'boolean') return value.toString(); if (typeof value === 'number') return value.toString(); if (typeof value === 'string') return `"${value}"`; if (Array.isArray(value)) { const formattedItems = value.map(formatJavaValue).join(', '); return `List.of(${formattedItems})`; } if (typeof value === 'object') { const formattedEntries = Object.entries(value) .map(([key, val]) => `"${key}", ${formatJavaValue(val)}`) .join(', '); return `Map.of(${formattedEntries})`; } throw new Error(`Unsupported type: ${typeof value}`); }; export const createJavaResponse = createJsonResponse; //# sourceMappingURL=java.js.map