diff options
Diffstat (limited to 'src/data/files/group.js')
| -rw-r--r-- | src/data/files/group.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/data/files/group.js b/src/data/files/group.js new file mode 100644 index 00000000..c10cbf98 --- /dev/null +++ b/src/data/files/group.js @@ -0,0 +1,45 @@ +import Thing from '#thing'; + +export default ({ + documentModes: {allInOne}, + thingConstructors: {Group, GroupCategory}, +}) => ({ + title: `Process groups file`, + file: 'groups.yaml', + + documentMode: allInOne, + documentThing: document => + ('Category' in document + ? GroupCategory + : Group), + + connect(results) { + let groupCategory; + let groupRefs = []; + + if (results[0] && !(results[0] instanceof GroupCategory)) { + throw new Error(`Expected a category at top of group data file`); + } + + for (const thing of results) { + if (thing instanceof GroupCategory) { + if (groupCategory) { + Object.assign(groupCategory, {groups: groupRefs}); + } + + groupCategory = thing; + groupRefs = []; + } else { + groupRefs.push(Thing.getReference(thing)); + } + } + + if (groupCategory) { + Object.assign(groupCategory, {groups: groupRefs}); + } + }, + + // Groups aren't sorted at all, always preserving the order in the data + // file as-is. + sort: null, +}); |