@glimmer/util
Version:
Common utilities used in Glimmer
102 lines (82 loc) • 11.1 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) {
var isMatch = false;
if (node !== null) {
if (typeof check === 'string') {
isMatch = stringCheckNode(node, check);
} else if (Array.isArray(check)) {
isMatch = check.some(function (c) {
return 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3V0aWwvbGliL3NpbXBsZS1jYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQW9DTSxTQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQ3lFO0FBRTdFLE1BQUksVUFBVSxDQUFkLElBQWMsQ0FBZCxFQUFzQjtBQUNwQixXQUFBLElBQUE7QUFERixHQUFBLE1BRU8sSUFBSSxTQUFTLENBQWIsSUFBYSxDQUFiLEVBQXFCO0FBQzFCLFdBQUEsSUFBQTtBQURLLEdBQUEsTUFFQTtBQUNMLFdBQUEsSUFBQTtBQUNEO0FBQ0Y7O0FBb0JLLFNBQUEsYUFBQSxDQUFBLElBQUEsRUFBQSxXQUFBLEVBRVc7QUFFZixNQUFJLElBQUksS0FBSixJQUFBLElBQWlCLElBQUksS0FBekIsU0FBQSxFQUF5QztBQUN2QyxXQUFBLElBQUE7QUFDRDs7QUFFRCxNQUFJLE9BQUEsUUFBQSxLQUFKLFNBQUEsRUFBbUM7QUFDakMsVUFBTSxJQUFBLEtBQUEsQ0FBTiw4REFBTSxDQUFOO0FBQ0Q7O0FBRUQsTUFBSSxVQUFVLENBQWQsSUFBYyxDQUFkLEVBQXNCO0FBQ3BCLFdBQUEsSUFBQTtBQUNEOztBQUVELE1BQUksSUFBSSxDQUFKLGFBQUEsS0FBSixRQUFBLEVBQXFDO0FBQ25DLFVBQU0sSUFBQSxLQUFBLENBQU4seUZBQU0sQ0FBTjtBQUdEOztBQUVELFNBQU8sU0FBUyxDQUFBLElBQUEsRUFBaEIsV0FBZ0IsQ0FBaEI7QUFDRDs7QUFFRCxTQUFBLFVBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUF3RDtBQUN0RCxTQUFPLElBQUEsS0FBQSxDQUFBLG1CQUFBLElBQUEsR0FBQSxRQUFBLEdBQVAsS0FBTyxDQUFQO0FBQ0Q7O0FBRUQsU0FBQSxVQUFBLENBQUEsSUFBQSxFQUE0RDtBQUMxRCxTQUFPLElBQUksQ0FBSixRQUFBLEtBQWE7QUFBQTtBQUFwQjtBQUNEOztBQUVELFNBQUEsU0FBQSxDQUFBLElBQUEsRUFBMEQ7QUFDeEQsU0FBTyxJQUFJLENBQUosUUFBQSxLQUFhO0FBQUE7QUFBcEI7QUFDRDs7QUFFSyxTQUFBLFNBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUVJO0FBRVIsTUFBSSxPQUFPLEdBQVgsS0FBQTs7QUFFQSxNQUFJLElBQUksS0FBUixJQUFBLEVBQW1CO0FBQ2pCLFFBQUksT0FBQSxLQUFBLEtBQUosUUFBQSxFQUErQjtBQUM3QixNQUFBLE9BQU8sR0FBRyxlQUFlLENBQUEsSUFBQSxFQUF6QixLQUF5QixDQUF6QjtBQURGLEtBQUEsTUFFTyxJQUFJLEtBQUssQ0FBTCxPQUFBLENBQUosS0FBSSxDQUFKLEVBQTBCO0FBQy9CLE1BQUEsT0FBTyxHQUFHLEtBQUssQ0FBTCxJQUFBLENBQVksVUFBRCxDQUFDLEVBQUQ7QUFBQSxlQUFPLGVBQWUsQ0FBQSxJQUFBLEVBQTNDLENBQTJDLENBQXRCO0FBQXJCLE9BQVUsQ0FBVjtBQURLLEtBQUEsTUFFQTtBQUNMLFlBQUEsaUNBQUE7QUFDRDtBQUNGOztBQUVELE1BQUEsT0FBQSxFQUFhO0FBQ1gsV0FBQSxJQUFBO0FBREYsR0FBQSxNQUVPO0FBQ0wsVUFBTSxVQUFVLENBQUEsbUJBQUEsSUFBQSxHQUFBLEdBQUEsRUFBaEIsS0FBZ0IsQ0FBaEI7QUFDRDtBQUNGOztBQUVELFNBQUEsZUFBQSxDQUFBLElBQUEsRUFBQSxLQUFBLEVBQW1FO0FBQ2pFLFVBQUEsS0FBQTtBQUNFLFNBQUEsTUFBQTtBQUNFLGFBQUEsSUFBQTs7QUFDRixTQUFBLE1BQUE7QUFDRSxhQUFPLElBQUksWUFBWCxXQUFBOztBQUNGLFNBQUEsS0FBQTtBQUNFLGFBQU8sSUFBSSxZQUFYLFVBQUE7O0FBQ0YsU0FBQSxTQUFBO0FBQ0UsYUFBTyxJQUFJLFlBQVgsT0FBQTs7QUFDRjtBQUNFLFVBQUksS0FBSyxDQUFMLFdBQUEsT0FBSixLQUFBLEVBQW1DO0FBQ2pDLGNBQU0sSUFBTixLQUFNLENBQU4sNERBQU0sQ0FBTjtBQUNEOztBQUNELGFBQU8sSUFBSSxZQUFKLE9BQUEsSUFBMkIsSUFBSSxDQUFKLE9BQUEsQ0FBQSxXQUFBLE9BQWxDLEtBQUE7QUFiSjtBQWVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5yZWFjaGFibGUgfSBmcm9tICcuL3BsYXRmb3JtLXV0aWxzJztcbmltcG9ydCB7IE5vZGVUeXBlLCBTaW1wbGVEb2N1bWVudCwgU2ltcGxlRWxlbWVudCwgU2ltcGxlTm9kZSB9IGZyb20gJ0BzaW1wbGUtZG9tL2ludGVyZmFjZSc7XG5cbmludGVyZmFjZSBHZW5lcmljRWxlbWVudFRhZ3Mge1xuICBIVE1MOiBIVE1MRWxlbWVudDtcbiAgU1ZHOiBTVkdFbGVtZW50O1xuICBFTEVNRU5UOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQ7XG59XG5cbmludGVyZmFjZSBHZW5lcmljTm9kZVRhZ3Mge1xuICBOT0RFOiBOb2RlO1xufVxuXG50eXBlIEdlbmVyaWNOb2RlVGFnID0ga2V5b2YgR2VuZXJpY05vZGVUYWdzO1xuXG5pbnRlcmZhY2UgQnJvd3NlckVsZW1lbnRUYWdzIGV4dGVuZHMgSFRNTEVsZW1lbnRUYWdOYW1lTWFwLCBHZW5lcmljRWxlbWVudFRhZ3Mge31cbnR5cGUgQnJvd3NlckVsZW1lbnRUYWcgPSBrZXlvZiBCcm93c2VyRWxlbWVudFRhZ3M7XG5cbmludGVyZmFjZSBCcm93c2VyVGFncyBleHRlbmRzIEJyb3dzZXJFbGVtZW50VGFncywgR2VuZXJpY05vZGVUYWdzIHt9XG50eXBlIEJyb3dzZXJUYWcgPSBrZXlvZiBCcm93c2VyVGFncztcblxudHlwZSBOb2RlQ2hlY2s8TiBleHRlbmRzIE5vZGU+ID0gKG5vZGU6IE5vZGUpID0+IG5vZGUgaXMgTjtcbnR5cGUgU3VnYXJ5Tm9kZUNoZWNrPEsgZXh0ZW5kcyBCcm93c2VyVGFnID0gQnJvd3NlclRhZz4gPSBOb2RlQ2hlY2s8QnJvd3NlclRhZ3NbS10+IHwgSyB8IEtbXTtcbnR5cGUgTm9kZUZvclN1Z2FyeUNoZWNrPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s8QnJvd3NlclRhZz4+ID0gUyBleHRlbmRzIE5vZGVDaGVjazxpbmZlciBOPlxuICA/IE5cbiAgOiBTIGV4dGVuZHMga2V5b2YgQnJvd3NlclRhZ3NcbiAgPyBCcm93c2VyVGFnc1tTXVxuICA6IFMgZXh0ZW5kcyAoa2V5b2YgQnJvd3NlclRhZ3MpW11cbiAgPyBCcm93c2VyVGFnc1tTW251bWJlcl1dXG4gIDogbmV2ZXI7XG5cbnR5cGUgQnJvd3Nlck5vZGUgPSBFbGVtZW50IHwgRG9jdW1lbnQgfCBEb2N1bWVudEZyYWdtZW50IHwgVGV4dCB8IENvbW1lbnQgfCBOb2RlO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvU2ltcGxlKGRvYzogRG9jdW1lbnQgfCBTaW1wbGVEb2N1bWVudCk6IFNpbXBsZURvY3VtZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb1NpbXBsZShlbGVtOiBFbGVtZW50IHwgU2ltcGxlRWxlbWVudCk6IFNpbXBsZUVsZW1lbnQ7XG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvU2ltcGxlKG5vZGU6IE5vZGUgfCBTaW1wbGVOb2RlKTogU2ltcGxlTm9kZTtcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9TaW1wbGUoXG4gIG5vZGU6IERvY3VtZW50IHwgRWxlbWVudCB8IE5vZGUgfCBTaW1wbGVEb2N1bWVudCB8IFNpbXBsZUVsZW1lbnQgfCBTaW1wbGVOb2RlXG4pIHtcbiAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBTaW1wbGVEb2N1bWVudDtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBTaW1wbGVFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub2RlIGFzIFNpbXBsZU5vZGU7XG4gIH1cbn1cblxuLy8gSWYgcGFzc2VkIGEgZG9jdW1lbnQsIHZlcmlmeSB3ZSdyZSBpbiB0aGUgYnJvd3NlciBhbmQgcmV0dXJuIGl0IGFzIGEgRG9jdW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyKGRvYzogRG9jdW1lbnQgfCBTaW1wbGVEb2N1bWVudCk6IERvY3VtZW50O1xuLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMsIGJ1dCB0aGUgY2hlY2sgcmVxdWlyZXMgaXQgdG8gYmUgYW4gZWxlbWVudCxcbi8vIHRoZSBjYXN0IHdpbGwgbWFuZGF0ZSB0aGF0IGl0J3MgYSBicm93c2VyIGVsZW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s8QnJvd3NlckVsZW1lbnRUYWc+PihcbiAgbm9kZTogQnJvd3Nlck5vZGUgfCBTaW1wbGVOb2RlLFxuICBjaGVjazogU1xuKTogTm9kZUZvclN1Z2FyeUNoZWNrPFM+O1xuLy8gRmluYWxseSwgaWYgaXQncyBhIG1vcmUgZ2VuZXJpYyBjaGVjaywgdGhlIGNhc3Qgd2lsbCBtYW5kYXRlIHRoYXQgaXQncyBhXG4vLyBicm93c2VyIG5vZGUgYW5kIHJldHVybiBhIEJyb3dzZXJOb2RlVXRpbHMgY29ycmVzcG9uZGluZyB0byB0aGUgY2hlY2tcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s8R2VuZXJpY05vZGVUYWc+PihcbiAgZWxlbWVudDogQnJvd3Nlck5vZGUgfCBTaW1wbGVOb2RlLFxuICBjaGVjazogU1xuKTogTm9kZUZvclN1Z2FyeUNoZWNrPFM+O1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb0Jyb3dzZXI8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXG4gIGVsZW1lbnQ6IFNpbXBsZUVsZW1lbnQgfCBFbGVtZW50LFxuICBjaGVjazogS1xuKTogSFRNTEVsZW1lbnRUYWdOYW1lTWFwW0tdO1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb0Jyb3dzZXI8UyBleHRlbmRzIFN1Z2FyeU5vZGVDaGVjaz4oXG4gIG5vZGU6IFNpbXBsZU5vZGUgfCBCcm93c2VyTm9kZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHN1Z2FyeUNoZWNrPzogU1xuKTogRG9jdW1lbnQgfCBOb2RlRm9yU3VnYXJ5Q2hlY2s8Uz4gfCBudWxsIHtcbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBjYXN0IHRvIGEgYnJvd3NlciBub2RlIGluIGEgbm9uLWJyb3dzZXIgY29udGV4dCcpO1xuICB9XG5cbiAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBEb2N1bWVudDtcbiAgfVxuXG4gIGlmIChub2RlLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0F0dGVtcHRlZCB0byBjYXN0IHRvIGEgYnJvd3NlciBub2RlIHdpdGggYSBub2RlIHRoYXQgd2FzIG5vdCBjcmVhdGVkIGZyb20gdGhpcyBkb2N1bWVudCdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrTm9kZTxTPihub2RlLCBzdWdhcnlDaGVjayEpO1xufVxuXG5mdW5jdGlvbiBjaGVja0Vycm9yKGZyb206IHN0cmluZywgY2hlY2s6IFN1Z2FyeU5vZGVDaGVjayk6IEVycm9yIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihgY2Fubm90IGNhc3QgYSAke2Zyb219IGludG8gJHtjaGVja31gKTtcbn1cblxuZnVuY3Rpb24gaXNEb2N1bWVudChub2RlOiBOb2RlIHwgU2ltcGxlTm9kZSB8IFNpbXBsZURvY3VtZW50KTogbm9kZSBpcyBEb2N1bWVudCB8IFNpbXBsZURvY3VtZW50IHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGVUeXBlLkRPQ1VNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlOiBOb2RlIHwgU2ltcGxlTm9kZSB8IFNpbXBsZUVsZW1lbnQpOiBub2RlIGlzIEVsZW1lbnQgfCBTaW1wbGVFbGVtZW50IHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGVUeXBlLkVMRU1FTlRfTk9ERTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTm9kZTxTIGV4dGVuZHMgU3VnYXJ5Tm9kZUNoZWNrPihcbiAgbm9kZTogTm9kZSB8IG51bGwsXG4gIGNoZWNrOiBTXG4pOiBOb2RlRm9yU3VnYXJ5Q2hlY2s8Uz4ge1xuICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuXG4gIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjaGVjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlzTWF0Y2ggPSBzdHJpbmdDaGVja05vZGUobm9kZSwgY2hlY2sgYXMgQnJvd3NlclRhZyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoZWNrKSkge1xuICAgICAgaXNNYXRjaCA9IGNoZWNrLnNvbWUoKGMpID0+IHN0cmluZ0NoZWNrTm9kZShub2RlLCBjIGFzIEJyb3dzZXJUYWcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNNYXRjaCkge1xuICAgIHJldHVybiBub2RlIGFzIE5vZGVGb3JTdWdhcnlDaGVjazxTPjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBjaGVja0Vycm9yKGBTaW1wbGVFbGVtZW50KCR7bm9kZX0pYCwgY2hlY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0NoZWNrTm9kZTxTIGV4dGVuZHMgQnJvd3NlclRhZz4obm9kZTogTm9kZSwgY2hlY2s6IFMpOiBub2RlIGlzIEJyb3dzZXJUYWdzW1NdIHtcbiAgc3dpdGNoIChjaGVjaykge1xuICAgIGNhc2UgJ05PREUnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICAgIGNhc2UgJ1NWRyc6XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ7XG4gICAgY2FzZSAnRUxFTUVOVCc6XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChjaGVjay50b1VwcGVyQ2FzZSgpID09PSBjaGVjaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogdGhpcyBjb2RlIGlzIG1pc3NpbmcgaGFuZGxpbmcgZm9yIGEgZ2VuZXJpYyBub2RlIHR5cGVgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gY2hlY2s7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
;