UNPKG

@glimmer/util

Version:

Common utilities used in Glimmer

100 lines (80 loc) 11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.castToSimple = castToSimple; exports.castToBrowser = castToBrowser; exports.checkNode = checkNode; var _platformUtils = require("./platform-utils"); function castToSimple(node) { if (isDocument(node)) { return node; } else if (isElement(node)) { return node; } else { return node; } } function castToBrowser(node, sugaryCheck) { if (node === null || node === undefined) { return null; } if (typeof document === undefined) { throw new Error('Attempted to cast to a browser node in a non-browser context'); } if (isDocument(node)) { return node; } if (node.ownerDocument !== document) { throw new Error('Attempted to cast to a browser node with a node that was not created from this document'); } return checkNode(node, sugaryCheck); } function checkError(from, check) { return new Error(`cannot cast a ${from} into ${check}`); } function isDocument(node) { return node.nodeType === 9 /* DOCUMENT_NODE */ ; } function isElement(node) { return node.nodeType === 1 /* ELEMENT_NODE */ ; } function checkNode(node, check) { let isMatch = false; if (node !== null) { if (typeof check === 'string') { isMatch = stringCheckNode(node, check); } else if (Array.isArray(check)) { isMatch = check.some(c => stringCheckNode(node, c)); } else { throw (0, _platformUtils.unreachable)(); } } if (isMatch) { return node; } else { throw checkError(`SimpleElement(${node})`, check); } } function stringCheckNode(node, check) { switch (check) { case 'NODE': return true; case 'HTML': return node instanceof HTMLElement; case 'SVG': return node instanceof SVGElement; case 'ELEMENT': return node instanceof Element; default: if (check.toUpperCase() === check) { throw new Error(`BUG: this code is missing handling for a generic node type`); } return node instanceof Element && node.tagName.toLowerCase() === check; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3V0aWwvbGliL3NpbXBsZS1jYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQW9DTSxTQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQ3lFO0FBRTdFLE1BQUksVUFBVSxDQUFkLElBQWMsQ0FBZCxFQUFzQjtBQUNwQixXQUFBLElBQUE7QUFERixHQUFBLE1BRU8sSUFBSSxTQUFTLENBQWIsSUFBYSxDQUFiLEVBQXFCO0FBQzFCLFdBQUEsSUFBQTtBQURLLEdBQUEsTUFFQTtBQUNMLFdBQUEsSUFBQTtBQUNEO0FBQ0Y7O0FBb0JLLFNBQUEsYUFBQSxDQUFBLElBQUEsRUFBQSxXQUFBLEVBRVc7QUFFZixNQUFJLElBQUksS0FBSixJQUFBLElBQWlCLElBQUksS0FBekIsU0FBQSxFQUF5QztBQUN2QyxXQUFBLElBQUE7QUFDRDs7QUFFRCxNQUFJLE9BQUEsUUFBQSxLQUFKLFNBQUEsRUFBbUM7QUFDakMsVUFBTSxJQUFBLEtBQUEsQ0FBTiw4REFBTSxDQUFOO0FBQ0Q7O0FBRUQsTUFBSSxVQUFVLENBQWQsSUFBYyxDQUFkLEVBQXNCO0FBQ3BCLFdBQUEsSUFBQTtBQUNEOztBQUVELE1BQUksSUFBSSxDQUFKLGFBQUEsS0FBSixRQUFBLEVBQXFDO0FBQ25DLFVBQU0sSUFBQSxLQUFBLENBQU4seUZBQU0sQ0FBTjtBQUdEOztBQUVELFNBQU8sU0FBUyxDQUFBLElBQUEsRUFBaEIsV0FBZ0IsQ0FBaEI7QUFDRDs7QUFFRCxTQUFBLFVBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUF3RDtBQUN0RCxTQUFPLElBQUEsS0FBQSxDQUFVLGlCQUFpQixJQUFJLFNBQVMsS0FBL0MsRUFBTyxDQUFQO0FBQ0Q7O0FBRUQsU0FBQSxVQUFBLENBQUEsSUFBQSxFQUE0RDtBQUMxRCxTQUFPLElBQUksQ0FBSixRQUFBLEtBQWE7QUFBQTtBQUFwQjtBQUNEOztBQUVELFNBQUEsU0FBQSxDQUFBLElBQUEsRUFBMEQ7QUFDeEQsU0FBTyxJQUFJLENBQUosUUFBQSxLQUFhO0FBQUE7QUFBcEI7QUFDRDs7QUFFSyxTQUFBLFNBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUVJO0FBRVIsTUFBSSxPQUFPLEdBQVgsS0FBQTs7QUFFQSxNQUFJLElBQUksS0FBUixJQUFBLEVBQW1CO0FBQ2pCLFFBQUksT0FBQSxLQUFBLEtBQUosUUFBQSxFQUErQjtBQUM3QixNQUFBLE9BQU8sR0FBRyxlQUFlLENBQUEsSUFBQSxFQUF6QixLQUF5QixDQUF6QjtBQURGLEtBQUEsTUFFTyxJQUFJLEtBQUssQ0FBTCxPQUFBLENBQUosS0FBSSxDQUFKLEVBQTBCO0FBQy9CLE1BQUEsT0FBTyxHQUFHLEtBQUssQ0FBTCxJQUFBLENBQVksQ0FBRCxJQUFPLGVBQWUsQ0FBQSxJQUFBLEVBQTNDLENBQTJDLENBQWpDLENBQVY7QUFESyxLQUFBLE1BRUE7QUFDTCxZQUFBLGlDQUFBO0FBQ0Q7QUFDRjs7QUFFRCxNQUFBLE9BQUEsRUFBYTtBQUNYLFdBQUEsSUFBQTtBQURGLEdBQUEsTUFFTztBQUNMLFVBQU0sVUFBVSxDQUFDLGlCQUFpQixJQUFsQixHQUFBLEVBQWhCLEtBQWdCLENBQWhCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFBLGVBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFtRTtBQUNqRSxVQUFBLEtBQUE7QUFDRSxTQUFBLE1BQUE7QUFDRSxhQUFBLElBQUE7O0FBQ0YsU0FBQSxNQUFBO0FBQ0UsYUFBTyxJQUFJLFlBQVgsV0FBQTs7QUFDRixTQUFBLEtBQUE7QUFDRSxhQUFPLElBQUksWUFBWCxVQUFBOztBQUNGLFNBQUEsU0FBQTtBQUNFLGFBQU8sSUFBSSxZQUFYLE9BQUE7O0FBQ0Y7QUFDRSxVQUFJLEtBQUssQ0FBTCxXQUFBLE9BQUosS0FBQSxFQUFtQztBQUNqQyxjQUFNLElBQUEsS0FBQSxDQUFOLDREQUFNLENBQU47QUFDRDs7QUFDRCxhQUFPLElBQUksWUFBSixPQUFBLElBQTJCLElBQUksQ0FBSixPQUFBLENBQUEsV0FBQSxPQUFsQyxLQUFBO0FBYko7QUFlRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVucmVhY2hhYmxlIH0gZnJvbSAnLi9wbGF0Zm9ybS11dGlscyc7XG5pbXBvcnQgeyBOb2RlVHlwZSwgU2ltcGxlRG9jdW1lbnQsIFNpbXBsZUVsZW1lbnQsIFNpbXBsZU5vZGUgfSBmcm9tICdAc2ltcGxlLWRvbS9pbnRlcmZhY2UnO1xuXG5pbnRlcmZhY2UgR2VuZXJpY0VsZW1lbnRUYWdzIHtcbiAgSFRNTDogSFRNTEVsZW1lbnQ7XG4gIFNWRzogU1ZHRWxlbWVudDtcbiAgRUxFTUVOVDogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50O1xufVxuXG5pbnRlcmZhY2UgR2VuZXJpY05vZGVUYWdzIHtcbiAgTk9ERTogTm9kZTtcbn1cblxudHlwZSBHZW5lcmljTm9kZVRhZyA9IGtleW9mIEdlbmVyaWNOb2RlVGFncztcblxuaW50ZXJmYWNlIEJyb3dzZXJFbGVtZW50VGFncyBleHRlbmRzIEhUTUxFbGVtZW50VGFnTmFtZU1hcCwgR2VuZXJpY0VsZW1lbnRUYWdzIHt9XG50eXBlIEJyb3dzZXJFbGVtZW50VGFnID0ga2V5b2YgQnJvd3NlckVsZW1lbnRUYWdzO1xuXG5pbnRlcmZhY2UgQnJvd3NlclRhZ3MgZXh0ZW5kcyBCcm93c2VyRWxlbWVudFRhZ3MsIEdlbmVyaWNOb2RlVGFncyB7fVxudHlwZSBCcm93c2VyVGFnID0ga2V5b2YgQnJvd3NlclRhZ3M7XG5cbnR5cGUgTm9kZUNoZWNrPE4gZXh0ZW5kcyBOb2RlPiA9IChub2RlOiBOb2RlKSA9PiBub2RlIGlzIE47XG50eXBlIFN1Z2FyeU5vZGVDaGVjazxLIGV4dGVuZHMgQnJvd3NlclRhZyA9IEJyb3dzZXJUYWc+ID0gTm9kZUNoZWNrPEJyb3dzZXJUYWdzW0tdPiB8IEsgfCBLW107XG50eXBlIE5vZGVGb3JTdWdhcnlDaGVjazxTIGV4dGVuZHMgU3VnYXJ5Tm9kZUNoZWNrPEJyb3dzZXJUYWc+PiA9IFMgZXh0ZW5kcyBOb2RlQ2hlY2s8aW5mZXIgTj5cbiAgPyBOXG4gIDogUyBleHRlbmRzIGtleW9mIEJyb3dzZXJUYWdzXG4gID8gQnJvd3NlclRhZ3NbU11cbiAgOiBTIGV4dGVuZHMgKGtleW9mIEJyb3dzZXJUYWdzKVtdXG4gID8gQnJvd3NlclRhZ3NbU1tudW1iZXJdXVxuICA6IG5ldmVyO1xuXG50eXBlIEJyb3dzZXJOb2RlID0gRWxlbWVudCB8IERvY3VtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB8IFRleHQgfCBDb21tZW50IHwgTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb1NpbXBsZShkb2M6IERvY3VtZW50IHwgU2ltcGxlRG9jdW1lbnQpOiBTaW1wbGVEb2N1bWVudDtcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9TaW1wbGUoZWxlbTogRWxlbWVudCB8IFNpbXBsZUVsZW1lbnQpOiBTaW1wbGVFbGVtZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb1NpbXBsZShub2RlOiBOb2RlIHwgU2ltcGxlTm9kZSk6IFNpbXBsZU5vZGU7XG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvU2ltcGxlKFxuICBub2RlOiBEb2N1bWVudCB8IEVsZW1lbnQgfCBOb2RlIHwgU2ltcGxlRG9jdW1lbnQgfCBTaW1wbGVFbGVtZW50IHwgU2ltcGxlTm9kZVxuKSB7XG4gIGlmIChpc0RvY3VtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUgYXMgU2ltcGxlRG9jdW1lbnQ7XG4gIH0gZWxzZSBpZiAoaXNFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUgYXMgU2ltcGxlRWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZSBhcyBTaW1wbGVOb2RlO1xuICB9XG59XG5cbi8vIElmIHBhc3NlZCBhIGRvY3VtZW50LCB2ZXJpZnkgd2UncmUgaW4gdGhlIGJyb3dzZXIgYW5kIHJldHVybiBpdCBhcyBhIERvY3VtZW50XG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvQnJvd3Nlcihkb2M6IERvY3VtZW50IHwgU2ltcGxlRG9jdW1lbnQpOiBEb2N1bWVudDtcbi8vIElmIHdlIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzLCBidXQgdGhlIGNoZWNrIHJlcXVpcmVzIGl0IHRvIGJlIGFuIGVsZW1lbnQsXG4vLyB0aGUgY2FzdCB3aWxsIG1hbmRhdGUgdGhhdCBpdCdzIGEgYnJvd3NlciBlbGVtZW50XG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvQnJvd3NlcjxTIGV4dGVuZHMgU3VnYXJ5Tm9kZUNoZWNrPEJyb3dzZXJFbGVtZW50VGFnPj4oXG4gIG5vZGU6IEJyb3dzZXJOb2RlIHwgU2ltcGxlTm9kZSxcbiAgY2hlY2s6IFNcbik6IE5vZGVGb3JTdWdhcnlDaGVjazxTPjtcbi8vIEZpbmFsbHksIGlmIGl0J3MgYSBtb3JlIGdlbmVyaWMgY2hlY2ssIHRoZSBjYXN0IHdpbGwgbWFuZGF0ZSB0aGF0IGl0J3MgYVxuLy8gYnJvd3NlciBub2RlIGFuZCByZXR1cm4gYSBCcm93c2VyTm9kZVV0aWxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoZWNrXG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvQnJvd3NlcjxTIGV4dGVuZHMgU3VnYXJ5Tm9kZUNoZWNrPEdlbmVyaWNOb2RlVGFnPj4oXG4gIGVsZW1lbnQ6IEJyb3dzZXJOb2RlIHwgU2ltcGxlTm9kZSxcbiAgY2hlY2s6IFNcbik6IE5vZGVGb3JTdWdhcnlDaGVjazxTPjtcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuICBlbGVtZW50OiBTaW1wbGVFbGVtZW50IHwgRWxlbWVudCxcbiAgY2hlY2s6IEtcbik6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXTtcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s+KFxuICBub2RlOiBTaW1wbGVOb2RlIHwgQnJvd3Nlck5vZGUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzdWdhcnlDaGVjaz86IFNcbik6IERvY3VtZW50IHwgTm9kZUZvclN1Z2FyeUNoZWNrPFM+IHwgbnVsbCB7XG4gIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gY2FzdCB0byBhIGJyb3dzZXIgbm9kZSBpbiBhIG5vbi1icm93c2VyIGNvbnRleHQnKTtcbiAgfVxuXG4gIGlmIChpc0RvY3VtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUgYXMgRG9jdW1lbnQ7XG4gIH1cblxuICBpZiAobm9kZS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdBdHRlbXB0ZWQgdG8gY2FzdCB0byBhIGJyb3dzZXIgbm9kZSB3aXRoIGEgbm9kZSB0aGF0IHdhcyBub3QgY3JlYXRlZCBmcm9tIHRoaXMgZG9jdW1lbnQnXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjaGVja05vZGU8Uz4obm9kZSwgc3VnYXJ5Q2hlY2shKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tFcnJvcihmcm9tOiBzdHJpbmcsIGNoZWNrOiBTdWdhcnlOb2RlQ2hlY2spOiBFcnJvciB7XG4gIHJldHVybiBuZXcgRXJyb3IoYGNhbm5vdCBjYXN0IGEgJHtmcm9tfSBpbnRvICR7Y2hlY2t9YCk7XG59XG5cbmZ1bmN0aW9uIGlzRG9jdW1lbnQobm9kZTogTm9kZSB8IFNpbXBsZU5vZGUgfCBTaW1wbGVEb2N1bWVudCk6IG5vZGUgaXMgRG9jdW1lbnQgfCBTaW1wbGVEb2N1bWVudCB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlVHlwZS5ET0NVTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZTogTm9kZSB8IFNpbXBsZU5vZGUgfCBTaW1wbGVFbGVtZW50KTogbm9kZSBpcyBFbGVtZW50IHwgU2ltcGxlRWxlbWVudCB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlVHlwZS5FTEVNRU5UX05PREU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja05vZGU8UyBleHRlbmRzIFN1Z2FyeU5vZGVDaGVjaz4oXG4gIG5vZGU6IE5vZGUgfCBudWxsLFxuICBjaGVjazogU1xuKTogTm9kZUZvclN1Z2FyeUNoZWNrPFM+IHtcbiAgbGV0IGlzTWF0Y2ggPSBmYWxzZTtcblxuICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY2hlY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpc01hdGNoID0gc3RyaW5nQ2hlY2tOb2RlKG5vZGUsIGNoZWNrIGFzIEJyb3dzZXJUYWcpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGVjaykpIHtcbiAgICAgIGlzTWF0Y2ggPSBjaGVjay5zb21lKChjKSA9PiBzdHJpbmdDaGVja05vZGUobm9kZSwgYyBhcyBCcm93c2VyVGFnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzTWF0Y2gpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBOb2RlRm9yU3VnYXJ5Q2hlY2s8Uz47XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgY2hlY2tFcnJvcihgU2ltcGxlRWxlbWVudCgke25vZGV9KWAsIGNoZWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdDaGVja05vZGU8UyBleHRlbmRzIEJyb3dzZXJUYWc+KG5vZGU6IE5vZGUsIGNoZWNrOiBTKTogbm9kZSBpcyBCcm93c2VyVGFnc1tTXSB7XG4gIHN3aXRjaCAoY2hlY2spIHtcbiAgICBjYXNlICdOT0RFJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ0hUTUwnOlxuICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbiAgICBjYXNlICdTVkcnOlxuICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50O1xuICAgIGNhc2UgJ0VMRU1FTlQnOlxuICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoY2hlY2sudG9VcHBlckNhc2UoKSA9PT0gY2hlY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVUc6IHRoaXMgY29kZSBpcyBtaXNzaW5nIGhhbmRsaW5nIGZvciBhIGdlbmVyaWMgbm9kZSB0eXBlYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNoZWNrO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9