UNPKG

@bbob/core

Version:

⚡️Blazing-fast js-bbcode-parser, bbcode js, that transforms and parses to AST with plugin support in pure javascript, no dependencies

87 lines (86 loc) 2.45 kB
/* eslint-disable no-plusplus */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { iterate: function() { return iterate; }, match: function() { return match; }, same: function() { return same; } }); function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } var isObj = function(value) { return typeof value === "object" && value !== null; }; var isBool = function(value) { return typeof value === "boolean"; }; function iterate(t, cb) { var tree = t; if (Array.isArray(tree)) { for(var idx = 0; idx < tree.length; idx++){ tree[idx] = iterate(cb(tree[idx]), cb); } } else if (isObj(tree) && "content" in tree) { iterate(tree.content, cb); } return tree; } function same(expected, actual) { if ((typeof expected === "undefined" ? "undefined" : _type_of(expected)) !== (typeof actual === "undefined" ? "undefined" : _type_of(actual))) { return false; } if (!isObj(expected) || expected === null) { return expected === actual; } if (Array.isArray(expected)) { return expected.every(function(exp) { return [].some.call(actual, function(act) { return same(exp, act); }); }); } if (isObj(expected) && isObj(actual)) { return Object.keys(expected).every(function(key) { var ao = actual[key]; var eo = expected[key]; if (isObj(eo) && isObj(ao)) { return same(eo, ao); } if (isBool(eo)) { return eo !== (ao === null); } return ao === eo; }); } return false; } function match(t, expression, cb) { if (Array.isArray(expression)) { return iterate(t, function(node) { for(var idx = 0; idx < expression.length; idx++){ if (same(expression[idx], node)) { return cb(node); } } return node; }); } return iterate(t, function(node) { return same(expression, node) ? cb(node) : node; }); }