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

93.15% Statements 68/73
66.66% Branches 2/3
100% Functions 2/2
93.15% Lines 68/73

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 67 68 69 70 71 72 73 741x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x           3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {capitalize, checkSubject, type PrimitiveDescriptor} from '../engine.ts';
 
/** `realm` — a business domain boundary, scaffolded from the blong-kopi template. */
 
const realm: PrimitiveDescriptor = {
    id: 'realm',
    title: 'Realm',
    skill: 'blong-realm',
    summary:
        'Business domain boundary reusing blong-server (no realm-local adapter/db.ts or dispatch ' +
        'orchestrator). Scaffolds the full canonical tree from the blong-kopi template.',
    kinds: ['default'],
    defaultKind: 'default',
    roots: [],
    check(ctx) {
        const problems = checkSubject(ctx.subject);
        // The realm template substitutes `$subject` into identifiers and derives
        // seed method names from `<subject><Object>Merge`, so a multi-word name
        // produces a realm whose seeds dispatch to a non-existent method.
        if (!/^[a-z][a-z0-9]*$/.test(ctx.subject)) {
            problems.push(
                `realm name '${ctx.subject}' must be a single lowercase word — the template ` +
                    'substitutes it into identifiers and derives seed method names from it',
            );
        }
        return problems;
    },
    files(ctx) {
        const name = ctx.subject;
        return [
            {
                path: 'server.ts',
                content: `import {realm} from '@feasibleone/blong';
 
/**
 * ${name} realm entry point (server platform). Layers are auto-discovered.
 * Reuse blong-server's subject orchestrator + db adapter (REUSE_SERVER).
 */
export default realm(() => ({url: import.meta.url}));
`,
            },
            {
                path: 'browser.ts',
                content: `import {realm} from '@feasibleone/blong';
 
export default realm(() => ({url: import.meta.url}));
`,
            },
            {
                path: 'orchestrator/subject/init.ts',
                content: `import {handler} from '@feasibleone/blong';
 
/**
 * The folder name 'subject' stays LITERAL — only the namespace value is the
 * realm's subject.
 */
export default handler(() => ({
    namespace: '${name}',
}));
`,
            },
            {
                path: 'error/error.ts',
                content: `export default {
    '${name}.notFound': '${capitalize(name)} entry {id} not found',
};
`,
            },
        ];
    },
};
 
export default realm;