66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.loop = exports.conditional = exports.parse = void 0;
|
|
|
|
var parse = function parse(stream, schema) {
|
|
var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : result;
|
|
|
|
if (Array.isArray(schema)) {
|
|
schema.forEach(function (partSchema) {
|
|
return parse(stream, partSchema, result, parent);
|
|
});
|
|
} else if (typeof schema === 'function') {
|
|
schema(stream, result, parent, parse);
|
|
} else {
|
|
var key = Object.keys(schema)[0];
|
|
|
|
if (Array.isArray(schema[key])) {
|
|
parent[key] = {};
|
|
parse(stream, schema[key], result, parent[key]);
|
|
} else {
|
|
parent[key] = schema[key](stream, result, parent, parse);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
exports.parse = parse;
|
|
|
|
var conditional = function conditional(schema, conditionFunc) {
|
|
return function (stream, result, parent, parse) {
|
|
if (conditionFunc(stream, result, parent)) {
|
|
parse(stream, schema, result, parent);
|
|
}
|
|
};
|
|
};
|
|
|
|
exports.conditional = conditional;
|
|
|
|
var loop = function loop(schema, continueFunc) {
|
|
return function (stream, result, parent, parse) {
|
|
var arr = [];
|
|
var lastStreamPos = stream.pos;
|
|
|
|
while (continueFunc(stream, result, parent)) {
|
|
var newParent = {};
|
|
parse(stream, schema, result, newParent); // cases when whole file is parsed but no termination is there and stream position is not getting updated as well
|
|
// it falls into infinite recursion, null check to avoid the same
|
|
|
|
if (stream.pos === lastStreamPos) {
|
|
break;
|
|
}
|
|
|
|
lastStreamPos = stream.pos;
|
|
arr.push(newParent);
|
|
}
|
|
|
|
return arr;
|
|
};
|
|
};
|
|
|
|
exports.loop = loop; |