summaryrefslogtreecommitdiff
path: root/tools/eslint/node_modules/optionator/lib/parse-type.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/node_modules/optionator/lib/parse-type.js')
-rw-r--r--tools/eslint/node_modules/optionator/lib/parse-type.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/tools/eslint/node_modules/optionator/lib/parse-type.js b/tools/eslint/node_modules/optionator/lib/parse-type.js
new file mode 100644
index 0000000000..e648723cf1
--- /dev/null
+++ b/tools/eslint/node_modules/optionator/lib/parse-type.js
@@ -0,0 +1,143 @@
+// Generated by LiveScript 1.2.0
+(function(){
+ var reject, tokenRegex;
+ reject = require('prelude-ls').reject;
+ function consumeWord(tokens){
+ var token;
+ token = tokens[0];
+ if (!(token != null && /^[a-zA-Z]+$/.test(token))) {
+ throw new Error("Exected textual string.");
+ }
+ return tokens.shift();
+ }
+ function consumeOp(tokens, op){
+ var token;
+ token = tokens[0];
+ if (token !== op) {
+ throw new Error("Expected " + op);
+ }
+ return tokens.shift();
+ }
+ function maybeConsumeOp(tokens, op){
+ var token;
+ token = tokens[0];
+ if (token === op) {
+ return tokens.shift();
+ } else {
+ return null;
+ }
+ }
+ function consumeArray(tokens){
+ var contentType;
+ consumeOp(tokens, '[');
+ contentType = consumeTypes(tokens);
+ if (!contentType) {
+ throw new Error("Must specify content type for Array.");
+ }
+ consumeOp(tokens, ']');
+ return {
+ type: 'Array',
+ contentType: contentType
+ };
+ }
+ function consumeTuple(tokens){
+ var contentTypes, that;
+ contentTypes = [];
+ consumeOp(tokens, '(');
+ while (that = consumeTypes(tokens)) {
+ contentTypes.push(that);
+ if (!maybeConsumeOp(tokens, ',')) {
+ break;
+ }
+ }
+ consumeOp(tokens, ')');
+ return {
+ type: 'Tuple',
+ contentTypes: contentTypes
+ };
+ }
+ function consumeProperty(tokens){
+ var key, type;
+ key = consumeWord(tokens);
+ consumeOp(tokens, ':');
+ type = consumeTypes(tokens);
+ return {
+ key: key,
+ type: type
+ };
+ }
+ function consumeObject(tokens){
+ var properties, that;
+ properties = [];
+ consumeOp(tokens, '{');
+ while (that = consumeProperty(tokens)) {
+ properties.push(that);
+ if (!maybeConsumeOp(tokens, ',')) {
+ break;
+ }
+ }
+ consumeOp(tokens, '}');
+ return {
+ type: 'Object',
+ properties: properties
+ };
+ }
+ function consumeType(tokens){
+ switch (tokens[0]) {
+ case '[':
+ return consumeArray(tokens);
+ case '{':
+ return consumeObject(tokens);
+ case '(':
+ return consumeTuple(tokens);
+ default:
+ return {
+ type: consumeWord(tokens)
+ };
+ }
+ }
+ function consumeMaybe(tokens){
+ var maybe, type;
+ if (tokens[0] === 'Maybe') {
+ tokens.shift();
+ maybe = true;
+ }
+ type = consumeType(tokens);
+ if (maybe) {
+ return {
+ type: 'Maybe',
+ contentType: type
+ };
+ } else {
+ return type;
+ }
+ }
+ function consumeTypes(tokens){
+ var types;
+ types = [];
+ for (;;) {
+ types.push(consumeMaybe(tokens));
+ if (!maybeConsumeOp('|')) {
+ break;
+ }
+ }
+ if (!types.length) {
+ throw new Error("Expected type(s).");
+ }
+ return types;
+ }
+ tokenRegex = /[:,\[\]\(\)}{]|[a-zA-Z]+/g;
+ module.exports = function(input){
+ var tokens, e;
+ tokens = reject(function(it){
+ return /^\s*$/.test(it);
+ })(
+ input.match(tokenRegex));
+ try {
+ return consumeTypes(tokens);
+ } catch (e$) {
+ e = e$;
+ throw new Error(e.message + " - '" + tokens.join('#') + "' - '" + input + "'");
+ }
+ };
+}).call(this);