lemon-devkit
Version:
Lemon Serverless Micro-Service Platform for local development
77 lines • 2.85 kB
JavaScript
;
/**
* `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