UNPKG

@podlite/schema

Version:

AST tools for Podlite markup language

107 lines 2.83 kB
"use strict"; 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