@whisklabs/grpc
Version:
gRPC generator and http library for typescript
123 lines • 4.67 kB
JavaScript
;
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