All files / core/blong-kukum/primitives gateway.ts

100% Statements 65/65
100% Branches 3/3
100% Functions 2/2
100% Lines 65/65

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 661x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 1x 4x 4x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x  
import {capitalize, checkSubject, type PrimitiveDescriptor} from '../engine.ts';
 
/** `gateway` — an explicit gateway validation, or a REST/OpenAPI namespace. */
 
const gateway: PrimitiveDescriptor = {
    id: 'gateway',
    title: 'Gateway',
    skill: 'blong-rest',
    summary:
        'Explicit gateway validation overriding an auto-generated one, or a REST/OpenAPI namespace.',
    kinds: ['validation', 'openapi'],
    defaultKind: 'validation',
    roots: ['gateway'],
    check(ctx) {
        return checkSubject(ctx.subject);
    },
    files(ctx) {
        const object = ctx.object;
        if (ctx.kind === 'openapi') {
            return [
                {
                    path: `gateway/api/${object}.ts`,
                    content: `import {api} from '@feasibleone/blong';
 
export default api(() => ({
    namespace: {${object}: [new URL('./${object}.yaml', import.meta.url).pathname]},
}));
`,
                },
                {
                    path: `gateway/api/${object}.yaml`,
                    content: `openapi: 3.0.3
info: {title: ${object}, version: 1.0.0}
paths:
    /${object}/check:
        get:
            operationId: check
            responses: {'200': {description: ok}}
`,
                },
            ];
        }
        return [
            {
                path: `gateway/${ctx.subject}/${object}Check.ts`,
                content: `import {validation} from '@feasibleone/blong';
 
/**
 * Overrides the auto-generated validation for ${ctx.subject}.${object}.check.
 * Registered later than subject.validation, so it WINS for this method.
 */
export default validation(async ({lib: {type}}) => function ${ctx.subject}${capitalize(object)}Check() {
    return {
        params: type.Object({${object}Id: type.stringNotNull()}),
        result: type.Object({ok: type.booleanNotNull()}),
        description: 'Check ${ctx.subject}.${object}',
    };
});
`,
            },
        ];
    },
};
 
export default gateway;