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 66 | 1x 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;
|