UNPKG

@whisklabs/grpc

Version:

gRPC generator and http library for typescript

123 lines 4.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParseOptions = exports.InnerOptions = exports.ParseOption = exports.OptionArray = exports.OptionValue = void 0; var typeguards_1 = require("@whisklabs/typeguards"); var comment_1 = require("../comment"); var thrower_1 = require("../thrower"); var utils_1 = require("../utils"); var validators_1 = require("../validators"); var parse = function (value) { return value === 'true' ? true : value === 'false' ? false : (0, validators_1.isNumber)(value) ? value : (0, validators_1.isStr)(value) ? (0, utils_1.cutStr)(value) : value; }; function OptionValue(tokens) { var value = tokens.shift(); if (value !== '{') { return parse(value); } var result = {}; var field; while (tokens.length > 0) { switch ((0, comment_1.next)(tokens)) { case '}': (0, utils_1.cut)(tokens, 1); return result; case ':': (0, utils_1.cut)(tokens, 1); (0, utils_1.insertOption)(result, field, tokens[0] === '[' ? OptionArray(tokens) : OptionValue(tokens)); break; case '{': (0, utils_1.insertOption)(result, field, OptionValue(tokens)); break; case undefined: continue; default: field = tokens.shift(); } } throw new thrower_1.Thrower('option array', [['no close tag "}"', 0]]); } exports.OptionValue = OptionValue; function OptionArray(tokens) { var options = []; while (tokens.length > 0) { switch ((0, comment_1.next)(tokens)) { case '[': case ',': (0, utils_1.cut)(tokens, 1); options.push(OptionValue(tokens)); break; case ']': (0, utils_1.cut)(tokens, 1); return options; case undefined: continue; default: throw new thrower_1.Thrower('options array', [["Unexpected token \"".concat(tokens[0], "\""), 0]]); } } throw new thrower_1.Thrower('options array', [['no close tag "]"', 0]]); } exports.OptionArray = OptionArray; function ParseOption(tokens) { var _a = (0, utils_1.check)({ type: 'option', tokens: tokens, rules: [ (0, utils_1.ch)('(', { ignore: true }), (0, utils_1.ch)(validators_1.isText, { result: true }), (0, utils_1.ch)(')', { ignore: true }), (0, utils_1.ch)(validators_1.isText, { result: true, ignore: true }), (0, utils_1.ch)('='), (0, utils_1.ch)([validators_1.isText, '{']), ], }), len = _a.len, results = _a.results; (0, utils_1.cut)(tokens, len - 1); var field = results[0] + results[1]; var value = OptionValue(tokens); return { field: field, value: value }; } exports.ParseOption = ParseOption; function InnerOptions(tokens) { var options = {}; (0, comment_1.setComment)(options); while (tokens.length > 0) { switch ((0, comment_1.next)(tokens)) { case '[': case ',': { (0, utils_1.cut)(tokens, 1); var _a = ParseOption(tokens), field = _a.field, value = _a.value; var path = field.split('.'); var lastFieldName = path.pop(); var opt = options; for (var _i = 0, path_1 = path; _i < path_1.length; _i++) { var p = path_1[_i]; if (!(0, typeguards_1.isPresent)(opt[p])) { opt[p] = {}; } opt = opt[p]; } (0, utils_1.insertOption)(opt, lastFieldName, value); break; } case ']': (0, utils_1.cut)(tokens, 1); (0, comment_1.writeComment)(options); return options; case undefined: continue; default: throw new thrower_1.Thrower('inner options', [["Unexpected token \"".concat(tokens[0], "\""), 0]]); } } throw new thrower_1.Thrower('inner options', [['no close tag "]"', 0]]); } exports.InnerOptions = InnerOptions; function ParseOptions(tokens) { var len = (0, utils_1.check)({ tokens: tokens, rules: [(0, utils_1.ch)('option')], type: 'option' }).len; (0, utils_1.cut)(tokens, len); var result = ParseOption(tokens); (0, utils_1.semicolon)(tokens); return result; } exports.ParseOptions = ParseOptions; //# sourceMappingURL=options.js.map