@podlite/schema
Version:
AST tools for Podlite markup language
107 lines • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeRulesArray = exports.makeRule = exports.is = exports.makePlug = void 0;
const getQuery = function (k) {
if (k === '*:*' || k === '*') {
return {};
}
if (k === '<>') {
return { type: 'fcode' };
}
// try to split 'name:type'
let [name, type] = k.split(':');
if (name && type) {
return { name, type };
}
if (!name) {
return { type };
}
if (!type) {
// check C<>
const re = name.match(/(.+)\<\>/);
if (re) {
return { type: 'fcode', name: re[1] };
}
return { name, type: 'block' };
}
return { name, type };
};
const makePlug = (k) => {
const res = getQuery(k);
// @ts-ignores
let { name, type } = res;
if (type && type === '*') {
return { name };
}
if (name && name === '*') {
return { type };
}
return res;
};
exports.makePlug = makePlug;
// is - check if node have handler
function is(query, node) {
function isEmpty(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
return false;
}
return true;
}
// check if query empty
if (isEmpty(query))
return true;
for (var prop in query) {
if (query === undefined) {
console.warn('[podlite] undefined key!!!');
}
if (query.hasOwnProperty(prop)) {
if (node === undefined) {
console.warn('[podlite] undefined node!!!');
}
if (node && node.hasOwnProperty(prop)) {
if (query[prop] !== node[prop]) {
return false;
}
}
else {
return false;
}
}
}
return true;
}
exports.is = is;
const makeRule = (query, fn) => {
rule.rule = query;
rule.isFor = isFor;
rule.fn = fn;
return rule;
function rule() { }
function isFor(node) {
if ('string' === typeof node)
return false;
return is(query, node);
}
};
exports.makeRule = makeRule;
const makeRulesArray = (key, fn) => {
if (key instanceof Array) {
return key.reduce((acc, item) => {
acc.push(...(0, exports.makeRulesArray)(item));
return acc;
}, []);
}
if (key instanceof Object) {
let rules = [];
for (var prop in key) {
if (key.hasOwnProperty(prop)) {
rules.push((0, exports.makeRule)((0, exports.makePlug)(prop), key[prop]));
}
}
return rules;
}
return [(0, exports.makeRule)((0, exports.makePlug)(key), fn)];
};
exports.makeRulesArray = makeRulesArray;
//# sourceMappingURL=makeQuery.js.map