@glimmer/util
Version:
Common utilities used in Glimmer
100 lines (80 loc) • 11 kB
JavaScript
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
;