UNPKG

@baseplate-dev/sync

Version:

Library for syncing Baseplate descriptions

24 lines 1.08 kB
import { notEmpty, toposortOrdered } from '@baseplate-dev/utils'; function normalizeArray(array) { return Array.isArray(array) ? array : [array]; } export function createOrderedList() { const items = []; return { addItem(key, item, orderRules) { if (items.some((i) => i.key === key)) { throw new Error(`Item with key ${key} already exists`); } items.push({ key, item, orderRules }); return this; }, getItems() { const comesBeforeRules = items.flatMap((item) => normalizeArray(item.orderRules?.comesBefore ?? []).map((rule) => [rule, item.key])); const comesAfterRules = items.flatMap((item) => normalizeArray(item.orderRules?.comesAfter ?? []).map((rule) => [item.key, rule])); return toposortOrdered(items.map((item) => item.key), [...comesBeforeRules, ...comesAfterRules]) .map((key) => items.find((item) => item.key === key)?.item) .filter(notEmpty); }, }; } //# sourceMappingURL=ordered-list.js.map