.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / enquirer / lib / completer.js
1 'use strict';
2
3 const unique = arr => arr.filter((v, i) => arr.lastIndexOf(v) === i);
4 const compact = arr => unique(arr).filter(Boolean);
5
6 module.exports = (action, data = {}, value = '') => {
7   let { past = [], present = '' } = data;
8   let rest, prev;
9
10   switch (action) {
11     case 'prev':
12     case 'undo':
13       rest = past.slice(0, past.length - 1);
14       prev = past[past.length - 1] || '';
15       return {
16         past: compact([value, ...rest]),
17         present: prev
18       };
19
20     case 'next':
21     case 'redo':
22       rest = past.slice(1);
23       prev = past[0] || '';
24       return {
25         past: compact([...rest, value]),
26         present: prev
27       };
28
29     case 'save':
30       return {
31         past: compact([...past, value]),
32         present: ''
33       };
34
35     case 'remove':
36       prev = compact(past.filter(v => v !== value));
37       present = '';
38
39       if (prev.length) {
40         present = prev.pop();
41       }
42
43       return {
44         past: prev,
45         present
46       };
47
48     default: {
49       throw new Error(`Invalid action: "${action}"`);
50     }
51   }
52 };