.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / levn / lib / parse-string.js
1 // Generated by LiveScript 1.6.0
2 (function(){
3   var reject, special, tokenRegex;
4   reject = require('prelude-ls').reject;
5   function consumeOp(tokens, op){
6     if (tokens[0] === op) {
7       return tokens.shift();
8     } else {
9       throw new Error("Expected '" + op + "', but got '" + tokens[0] + "' instead in " + JSON.stringify(tokens) + ".");
10     }
11   }
12   function maybeConsumeOp(tokens, op){
13     if (tokens[0] === op) {
14       return tokens.shift();
15     }
16   }
17   function consumeList(tokens, arg$, hasDelimiters){
18     var open, close, result, untilTest;
19     open = arg$[0], close = arg$[1];
20     if (hasDelimiters) {
21       consumeOp(tokens, open);
22     }
23     result = [];
24     untilTest = "," + (hasDelimiters ? close : '');
25     while (tokens.length && (hasDelimiters && tokens[0] !== close)) {
26       result.push(consumeElement(tokens, untilTest));
27       maybeConsumeOp(tokens, ',');
28     }
29     if (hasDelimiters) {
30       consumeOp(tokens, close);
31     }
32     return result;
33   }
34   function consumeArray(tokens, hasDelimiters){
35     return consumeList(tokens, ['[', ']'], hasDelimiters);
36   }
37   function consumeTuple(tokens, hasDelimiters){
38     return consumeList(tokens, ['(', ')'], hasDelimiters);
39   }
40   function consumeFields(tokens, hasDelimiters){
41     var result, untilTest, key;
42     if (hasDelimiters) {
43       consumeOp(tokens, '{');
44     }
45     result = {};
46     untilTest = "," + (hasDelimiters ? '}' : '');
47     while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {
48       key = consumeValue(tokens, ':');
49       consumeOp(tokens, ':');
50       result[key] = consumeElement(tokens, untilTest);
51       maybeConsumeOp(tokens, ',');
52     }
53     if (hasDelimiters) {
54       consumeOp(tokens, '}');
55     }
56     return result;
57   }
58   function consumeValue(tokens, untilTest){
59     var out;
60     untilTest == null && (untilTest = '');
61     out = '';
62     while (tokens.length && -1 === untilTest.indexOf(tokens[0])) {
63       out += tokens.shift();
64     }
65     return out;
66   }
67   function consumeElement(tokens, untilTest){
68     switch (tokens[0]) {
69     case '[':
70       return consumeArray(tokens, true);
71     case '(':
72       return consumeTuple(tokens, true);
73     case '{':
74       return consumeFields(tokens, true);
75     default:
76       return consumeValue(tokens, untilTest);
77     }
78   }
79   function consumeTopLevel(tokens, types, options){
80     var ref$, type, structure, origTokens, result, finalResult, x$, y$;
81     ref$ = types[0], type = ref$.type, structure = ref$.structure;
82     origTokens = tokens.concat();
83     if (!options.explicit && types.length === 1 && ((!type && structure) || (type === 'Array' || type === 'Object'))) {
84       result = structure === 'array' || type === 'Array'
85         ? consumeArray(tokens, tokens[0] === '[')
86         : structure === 'tuple'
87           ? consumeTuple(tokens, tokens[0] === '(')
88           : consumeFields(tokens, tokens[0] === '{');
89       finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array'
90         ? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$)
91         : (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result;
92     } else {
93       finalResult = consumeElement(tokens);
94     }
95     return finalResult;
96   }
97   special = /\[\]\(\)}{:,/.source;
98   tokenRegex = RegExp('("(?:\\\\"|[^"])*")|(\'(?:\\\\\'|[^\'])*\')|(/(?:\\\\/|[^/])*/[a-zA-Z]*)|(#.*#)|([' + special + '])|([^\\s' + special + '](?:\\s*[^\\s' + special + ']+)*)|\\s*');
99   module.exports = function(types, string, options){
100     var tokens, node;
101     options == null && (options = {});
102     if (!options.explicit && types.length === 1 && types[0].type === 'String') {
103       return string;
104     }
105     tokens = reject(not$, string.split(tokenRegex));
106     node = consumeTopLevel(tokens, types, options);
107     if (!node) {
108       throw new Error("Error parsing '" + string + "'.");
109     }
110     return node;
111   };
112   function not$(x){ return !x; }
113 }).call(this);