1 // Generated by LiveScript 1.2.0
3 var reject, tokenRegex;
4 reject = require('prelude-ls').reject;
5 function consumeWord(tokens){
8 if (!(token != null && /^[a-zA-Z]+$/.test(token))) {
9 throw new Error("Exected textual string.");
11 return tokens.shift();
13 function consumeOp(tokens, op){
17 throw new Error("Expected " + op);
19 return tokens.shift();
21 function maybeConsumeOp(tokens, op){
25 return tokens.shift();
30 function consumeArray(tokens){
32 consumeOp(tokens, '[');
33 contentType = consumeTypes(tokens);
35 throw new Error("Must specify content type for Array.");
37 consumeOp(tokens, ']');
40 contentType: contentType
43 function consumeTuple(tokens){
44 var contentTypes, that;
46 consumeOp(tokens, '(');
47 while (that = consumeTypes(tokens)) {
48 contentTypes.push(that);
49 if (!maybeConsumeOp(tokens, ',')) {
53 consumeOp(tokens, ')');
56 contentTypes: contentTypes
59 function consumeProperty(tokens){
61 key = consumeWord(tokens);
62 consumeOp(tokens, ':');
63 type = consumeTypes(tokens);
69 function consumeObject(tokens){
72 consumeOp(tokens, '{');
73 while (that = consumeProperty(tokens)) {
74 properties.push(that);
75 if (!maybeConsumeOp(tokens, ',')) {
79 consumeOp(tokens, '}');
82 properties: properties
85 function consumeType(tokens){
88 return consumeArray(tokens);
90 return consumeObject(tokens);
92 return consumeTuple(tokens);
95 type: consumeWord(tokens)
99 function consumeMaybe(tokens){
101 if (tokens[0] === 'Maybe') {
105 type = consumeType(tokens);
115 function consumeTypes(tokens){
119 types.push(consumeMaybe(tokens));
120 if (!maybeConsumeOp('|')) {
125 throw new Error("Expected type(s).");
129 tokenRegex = /[:,\[\]\(\)}{]|[a-zA-Z]+/g;
130 module.exports = function(input){
132 tokens = reject(function(it){
133 return /^\s*$/.test(it);
135 input.match(tokenRegex));
137 return consumeTypes(tokens);
140 throw new Error(e.message + " - '" + tokens.join('#') + "' - '" + input + "'");