UNPKG

lemon-devkit

Version:

Lemon Serverless Micro-Service Platform for local development

77 lines 2.85 kB
"use strict"; /** * `fields/common-fields.ts` * - shared common model field canon and drift checks. * * @author Claire <claire@lemoncloud.io> * @date 2026-04-27 added common field helpers. * @copyright (C) lemoncloud.io 2026 - All Rights Reserved. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.assertCommonFields = exports.checkCommonFields = exports.formatCommonFields = exports.sortCommonFields = exports.DEFAULT_COMMON_MODEL_FIELDS = void 0; exports.DEFAULT_COMMON_MODEL_FIELDS = [ '$', 'id', 'ns', 'gid', 'sid', 'uid', 'lock', 'meta', 'next', 'type', 'error', 'stereo', 'createdAt', 'deletedAt', 'updatedAt', ]; const sortCommonFields = (xs) => [...xs].sort((a, b) => a.length - b.length || a.localeCompare(b)); exports.sortCommonFields = sortCommonFields; const uniqueWithoutExcluded = (xs, exclude) => xs.reduce((L, x) => { if (!exclude.has(x) && !L.includes(x)) L.push(x); return L; }, []); const formatCommonFields = (xs = exports.DEFAULT_COMMON_MODEL_FIELDS, options = {}) => { const exclude = new Set(options.exclude ?? []); return (0, exports.sortCommonFields)(uniqueWithoutExcluded(xs, exclude)).join(','); }; exports.formatCommonFields = formatCommonFields; const checkCommonFields = (actual, options = {}) => { const exclude = new Set(options.exclude ?? []); const expected = uniqueWithoutExcluded(options.canon ?? exports.DEFAULT_COMMON_MODEL_FIELDS, exclude); const sortedActual = (0, exports.sortCommonFields)(uniqueWithoutExcluded(actual, exclude)); const expectedSet = new Set(expected); const actualSet = new Set(sortedActual); const missing = expected.filter(field => !actualSet.has(field)); const extra = sortedActual.filter(field => !expectedSet.has(field)); return { ok: missing.length === 0 && extra.length === 0, expected, actual: sortedActual, missing, extra, }; }; exports.checkCommonFields = checkCommonFields; const assertCommonFields = (actual, options = {}) => { const result = (0, exports.checkCommonFields)(actual, options); if (result.ok) return; const entryName = options.entryName ?? 'fields'; const runHint = options.runHint ?? 'npm run fields:gen'; const lines = [ `[common-fields] ${entryName} is stale.`, ` expected: ${result.expected.join(',')}`, ` actual: ${result.actual.join(',')}`, ]; if (result.missing.length) lines.push(` missing: ${result.missing.join(',')}`); if (result.extra.length) lines.push(` extra: ${result.extra.join(',')}`); lines.push(` run \`${runHint}\``); throw new Error(lines.join('\n')); }; exports.assertCommonFields = assertCommonFields; //# sourceMappingURL=common-fields.js.map