« get me outta code hell

withUniqueItemsOnly.js « data « composite « data « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite/data/withUniqueItemsOnly.js
blob: 7ee08b08e98d52ba2f73238ffb4f29bdbba4feaf (plain)
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
// Excludes duplicate items from a list and provides the results, overwriting
// the list in-place, if possible.

import {input, templateCompositeFrom} from '#composite';
import {unique} from '#sugar';

export default templateCompositeFrom({
  annotation: `withUniqueItemsOnly`,

  inputs: {
    list: input({type: 'array'}),
  },

  outputs: ({
    [input.staticDependency('list')]: list,
  }) => [list ?? '#uniqueItems'],

  steps: () => [
    {
      dependencies: [input('list')],
      compute: (continuation, {
        [input('list')]: list,
      }) => continuation({
        ['#values']:
          unique(list),
      }),
    },

    {
      dependencies: ['#values', input.staticDependency('list')],
      compute: (continuation, {
        '#values': values,
        [input.staticDependency('list')]: list,
      }) => continuation({
        [list ?? '#uniqueItems']:
          values,
      }),
    },
  ],
});