UNPKG

@glimmer/util

Version:

Common utilities used in Glimmer

91 lines (75 loc) 10.9 kB
import { unreachable } from './platform-utils'; export function castToSimple(node) { if (isDocument(node)) { return node; } else if (isElement(node)) { return node; } else { return node; } } export 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 */ ; } export 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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3V0aWwvbGliL3NpbXBsZS1jYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQUEsV0FBQSxRQUFBLGtCQUFBO0FBb0NBLE9BQU0sU0FBQSxZQUFBLENBQUEsSUFBQSxFQUN5RTtBQUU3RSxNQUFJLFVBQVUsQ0FBZCxJQUFjLENBQWQsRUFBc0I7QUFDcEIsV0FBQSxJQUFBO0FBREYsR0FBQSxNQUVPLElBQUksU0FBUyxDQUFiLElBQWEsQ0FBYixFQUFxQjtBQUMxQixXQUFBLElBQUE7QUFESyxHQUFBLE1BRUE7QUFDTCxXQUFBLElBQUE7QUFDRDtBQUNGO0FBb0JELE9BQU0sU0FBQSxhQUFBLENBQUEsSUFBQSxFQUFBLFdBQUEsRUFFVztBQUVmLE1BQUksSUFBSSxLQUFKLElBQUEsSUFBaUIsSUFBSSxLQUF6QixTQUFBLEVBQXlDO0FBQ3ZDLFdBQUEsSUFBQTtBQUNEOztBQUVELE1BQUksT0FBQSxRQUFBLEtBQUosU0FBQSxFQUFtQztBQUNqQyxVQUFNLElBQUEsS0FBQSxDQUFOLDhEQUFNLENBQU47QUFDRDs7QUFFRCxNQUFJLFVBQVUsQ0FBZCxJQUFjLENBQWQsRUFBc0I7QUFDcEIsV0FBQSxJQUFBO0FBQ0Q7O0FBRUQsTUFBSSxJQUFJLENBQUosYUFBQSxLQUFKLFFBQUEsRUFBcUM7QUFDbkMsVUFBTSxJQUFBLEtBQUEsQ0FBTix5RkFBTSxDQUFOO0FBR0Q7O0FBRUQsU0FBTyxTQUFTLENBQUEsSUFBQSxFQUFoQixXQUFnQixDQUFoQjtBQUNEOztBQUVELFNBQUEsVUFBQSxDQUFBLElBQUEsRUFBQSxLQUFBLEVBQXdEO0FBQ3RELFNBQU8sSUFBQSxLQUFBLG9CQUEyQixJQUEzQixjQUFQLEtBQU8sQ0FBUDtBQUNEOztBQUVELFNBQUEsVUFBQSxDQUFBLElBQUEsRUFBNEQ7QUFDMUQsU0FBTyxJQUFJLENBQUosUUFBQSxLQUFhO0FBQUE7QUFBcEI7QUFDRDs7QUFFRCxTQUFBLFNBQUEsQ0FBQSxJQUFBLEVBQTBEO0FBQ3hELFNBQU8sSUFBSSxDQUFKLFFBQUEsS0FBYTtBQUFBO0FBQXBCO0FBQ0Q7O0FBRUQsT0FBTSxTQUFBLFNBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUVJO0FBRVIsTUFBSSxPQUFPLEdBQVgsS0FBQTs7QUFFQSxNQUFJLElBQUksS0FBUixJQUFBLEVBQW1CO0FBQ2pCLFFBQUksT0FBQSxLQUFBLEtBQUosUUFBQSxFQUErQjtBQUM3QixNQUFBLE9BQU8sR0FBRyxlQUFlLENBQUEsSUFBQSxFQUF6QixLQUF5QixDQUF6QjtBQURGLEtBQUEsTUFFTyxJQUFJLEtBQUssQ0FBTCxPQUFBLENBQUosS0FBSSxDQUFKLEVBQTBCO0FBQy9CLE1BQUEsT0FBTyxHQUFHLEtBQUssQ0FBTCxJQUFBLENBQVksVUFBQSxDQUFEO0FBQUEsZUFBTyxlQUFlLENBQUEsSUFBQSxFQUEzQyxDQUEyQyxDQUF0QjtBQUFBLE9BQVgsQ0FBVjtBQURLLEtBQUEsTUFFQTtBQUNMLFlBQU0sV0FBTixFQUFBO0FBQ0Q7QUFDRjs7QUFFRCxNQUFBLE9BQUEsRUFBYTtBQUNYLFdBQUEsSUFBQTtBQURGLEdBQUEsTUFFTztBQUNMLFVBQU0sVUFBVSxvQkFBQSxJQUFBLFFBQWhCLEtBQWdCLENBQWhCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFBLGVBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFtRTtBQUNqRSxVQUFBLEtBQUE7QUFDRSxTQUFBLE1BQUE7QUFDRSxhQUFBLElBQUE7O0FBQ0YsU0FBQSxNQUFBO0FBQ0UsYUFBTyxJQUFJLFlBQVgsV0FBQTs7QUFDRixTQUFBLEtBQUE7QUFDRSxhQUFPLElBQUksWUFBWCxVQUFBOztBQUNGLFNBQUEsU0FBQTtBQUNFLGFBQU8sSUFBSSxZQUFYLE9BQUE7O0FBQ0Y7QUFDRSxVQUFJLEtBQUssQ0FBTCxXQUFBLE9BQUosS0FBQSxFQUFtQztBQUNqQyxjQUFNLElBQU4sS0FBTSw4REFBTjtBQUNEOztBQUNELGFBQU8sSUFBSSxZQUFKLE9BQUEsSUFBMkIsSUFBSSxDQUFKLE9BQUEsQ0FBQSxXQUFBLE9BQWxDLEtBQUE7QUFiSjtBQWVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5yZWFjaGFibGUgfSBmcm9tICcuL3BsYXRmb3JtLXV0aWxzJztcbmltcG9ydCB7IE5vZGVUeXBlLCBTaW1wbGVEb2N1bWVudCwgU2ltcGxlRWxlbWVudCwgU2ltcGxlTm9kZSB9IGZyb20gJ0BzaW1wbGUtZG9tL2ludGVyZmFjZSc7XG5cbmludGVyZmFjZSBHZW5lcmljRWxlbWVudFRhZ3Mge1xuICBIVE1MOiBIVE1MRWxlbWVudDtcbiAgU1ZHOiBTVkdFbGVtZW50O1xuICBFTEVNRU5UOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQ7XG59XG5cbmludGVyZmFjZSBHZW5lcmljTm9kZVRhZ3Mge1xuICBOT0RFOiBOb2RlO1xufVxuXG50eXBlIEdlbmVyaWNOb2RlVGFnID0ga2V5b2YgR2VuZXJpY05vZGVUYWdzO1xuXG5pbnRlcmZhY2UgQnJvd3NlckVsZW1lbnRUYWdzIGV4dGVuZHMgSFRNTEVsZW1lbnRUYWdOYW1lTWFwLCBHZW5lcmljRWxlbWVudFRhZ3Mge31cbnR5cGUgQnJvd3NlckVsZW1lbnRUYWcgPSBrZXlvZiBCcm93c2VyRWxlbWVudFRhZ3M7XG5cbmludGVyZmFjZSBCcm93c2VyVGFncyBleHRlbmRzIEJyb3dzZXJFbGVtZW50VGFncywgR2VuZXJpY05vZGVUYWdzIHt9XG50eXBlIEJyb3dzZXJUYWcgPSBrZXlvZiBCcm93c2VyVGFncztcblxudHlwZSBOb2RlQ2hlY2s8TiBleHRlbmRzIE5vZGU+ID0gKG5vZGU6IE5vZGUpID0+IG5vZGUgaXMgTjtcbnR5cGUgU3VnYXJ5Tm9kZUNoZWNrPEsgZXh0ZW5kcyBCcm93c2VyVGFnID0gQnJvd3NlclRhZz4gPSBOb2RlQ2hlY2s8QnJvd3NlclRhZ3NbS10+IHwgSyB8IEtbXTtcbnR5cGUgTm9kZUZvclN1Z2FyeUNoZWNrPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s8QnJvd3NlclRhZz4+ID0gUyBleHRlbmRzIE5vZGVDaGVjazxpbmZlciBOPlxuICA/IE5cbiAgOiBTIGV4dGVuZHMga2V5b2YgQnJvd3NlclRhZ3NcbiAgPyBCcm93c2VyVGFnc1tTXVxuICA6IFMgZXh0ZW5kcyAoa2V5b2YgQnJvd3NlclRhZ3MpW11cbiAgPyBCcm93c2VyVGFnc1tTW251bWJlcl1dXG4gIDogbmV2ZXI7XG5cbnR5cGUgQnJvd3Nlck5vZGUgPSBFbGVtZW50IHwgRG9jdW1lbnQgfCBEb2N1bWVudEZyYWdtZW50IHwgVGV4dCB8IENvbW1lbnQgfCBOb2RlO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvU2ltcGxlKGRvYzogRG9jdW1lbnQgfCBTaW1wbGVEb2N1bWVudCk6IFNpbXBsZURvY3VtZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb1NpbXBsZShlbGVtOiBFbGVtZW50IHwgU2ltcGxlRWxlbWVudCk6IFNpbXBsZUVsZW1lbnQ7XG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvU2ltcGxlKG5vZGU6IE5vZGUgfCBTaW1wbGVOb2RlKTogU2ltcGxlTm9kZTtcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9TaW1wbGUoXG4gIG5vZGU6IERvY3VtZW50IHwgRWxlbWVudCB8IE5vZGUgfCBTaW1wbGVEb2N1bWVudCB8IFNpbXBsZUVsZW1lbnQgfCBTaW1wbGVOb2RlXG4pIHtcbiAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBTaW1wbGVEb2N1bWVudDtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBTaW1wbGVFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub2RlIGFzIFNpbXBsZU5vZGU7XG4gIH1cbn1cblxuLy8gSWYgcGFzc2VkIGEgZG9jdW1lbnQsIHZlcmlmeSB3ZSdyZSBpbiB0aGUgYnJvd3NlciBhbmQgcmV0dXJuIGl0IGFzIGEgRG9jdW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyKGRvYzogRG9jdW1lbnQgfCBTaW1wbGVEb2N1bWVudCk6IERvY3VtZW50O1xuLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMsIGJ1dCB0aGUgY2hlY2sgcmVxdWlyZXMgaXQgdG8gYmUgYW4gZWxlbWVudCxcbi8vIHRoZSBjYXN0IHdpbGwgbWFuZGF0ZSB0aGF0IGl0J3MgYSBicm93c2VyIGVsZW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s8QnJvd3NlckVsZW1lbnRUYWc+PihcbiAgbm9kZTogQnJvd3Nlck5vZGUgfCBTaW1wbGVOb2RlLFxuICBjaGVjazogU1xuKTogTm9kZUZvclN1Z2FyeUNoZWNrPFM+O1xuLy8gRmluYWxseSwgaWYgaXQncyBhIG1vcmUgZ2VuZXJpYyBjaGVjaywgdGhlIGNhc3Qgd2lsbCBtYW5kYXRlIHRoYXQgaXQncyBhXG4vLyBicm93c2VyIG5vZGUgYW5kIHJldHVybiBhIEJyb3dzZXJOb2RlVXRpbHMgY29ycmVzcG9uZGluZyB0byB0aGUgY2hlY2tcbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG9Ccm93c2VyPFMgZXh0ZW5kcyBTdWdhcnlOb2RlQ2hlY2s8R2VuZXJpY05vZGVUYWc+PihcbiAgZWxlbWVudDogQnJvd3Nlck5vZGUgfCBTaW1wbGVOb2RlLFxuICBjaGVjazogU1xuKTogTm9kZUZvclN1Z2FyeUNoZWNrPFM+O1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb0Jyb3dzZXI8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXG4gIGVsZW1lbnQ6IFNpbXBsZUVsZW1lbnQgfCBFbGVtZW50LFxuICBjaGVjazogS1xuKTogSFRNTEVsZW1lbnRUYWdOYW1lTWFwW0tdO1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUb0Jyb3dzZXI8UyBleHRlbmRzIFN1Z2FyeU5vZGVDaGVjaz4oXG4gIG5vZGU6IFNpbXBsZU5vZGUgfCBCcm93c2VyTm9kZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHN1Z2FyeUNoZWNrPzogU1xuKTogRG9jdW1lbnQgfCBOb2RlRm9yU3VnYXJ5Q2hlY2s8Uz4gfCBudWxsIHtcbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBjYXN0IHRvIGEgYnJvd3NlciBub2RlIGluIGEgbm9uLWJyb3dzZXIgY29udGV4dCcpO1xuICB9XG5cbiAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZSBhcyBEb2N1bWVudDtcbiAgfVxuXG4gIGlmIChub2RlLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0F0dGVtcHRlZCB0byBjYXN0IHRvIGEgYnJvd3NlciBub2RlIHdpdGggYSBub2RlIHRoYXQgd2FzIG5vdCBjcmVhdGVkIGZyb20gdGhpcyBkb2N1bWVudCdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrTm9kZTxTPihub2RlLCBzdWdhcnlDaGVjayEpO1xufVxuXG5mdW5jdGlvbiBjaGVja0Vycm9yKGZyb206IHN0cmluZywgY2hlY2s6IFN1Z2FyeU5vZGVDaGVjayk6IEVycm9yIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihgY2Fubm90IGNhc3QgYSAke2Zyb219IGludG8gJHtjaGVja31gKTtcbn1cblxuZnVuY3Rpb24gaXNEb2N1bWVudChub2RlOiBOb2RlIHwgU2ltcGxlTm9kZSB8IFNpbXBsZURvY3VtZW50KTogbm9kZSBpcyBEb2N1bWVudCB8IFNpbXBsZURvY3VtZW50IHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGVUeXBlLkRPQ1VNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlOiBOb2RlIHwgU2ltcGxlTm9kZSB8IFNpbXBsZUVsZW1lbnQpOiBub2RlIGlzIEVsZW1lbnQgfCBTaW1wbGVFbGVtZW50IHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGVUeXBlLkVMRU1FTlRfTk9ERTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTm9kZTxTIGV4dGVuZHMgU3VnYXJ5Tm9kZUNoZWNrPihcbiAgbm9kZTogTm9kZSB8IG51bGwsXG4gIGNoZWNrOiBTXG4pOiBOb2RlRm9yU3VnYXJ5Q2hlY2s8Uz4ge1xuICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuXG4gIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjaGVjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlzTWF0Y2ggPSBzdHJpbmdDaGVja05vZGUobm9kZSwgY2hlY2sgYXMgQnJvd3NlclRhZyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoZWNrKSkge1xuICAgICAgaXNNYXRjaCA9IGNoZWNrLnNvbWUoKGMpID0+IHN0cmluZ0NoZWNrTm9kZShub2RlLCBjIGFzIEJyb3dzZXJUYWcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNNYXRjaCkge1xuICAgIHJldHVybiBub2RlIGFzIE5vZGVGb3JTdWdhcnlDaGVjazxTPjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBjaGVja0Vycm9yKGBTaW1wbGVFbGVtZW50KCR7bm9kZX0pYCwgY2hlY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0NoZWNrTm9kZTxTIGV4dGVuZHMgQnJvd3NlclRhZz4obm9kZTogTm9kZSwgY2hlY2s6IFMpOiBub2RlIGlzIEJyb3dzZXJUYWdzW1NdIHtcbiAgc3dpdGNoIChjaGVjaykge1xuICAgIGNhc2UgJ05PREUnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICAgIGNhc2UgJ1NWRyc6XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ7XG4gICAgY2FzZSAnRUxFTUVOVCc6XG4gICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChjaGVjay50b1VwcGVyQ2FzZSgpID09PSBjaGVjaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogdGhpcyBjb2RlIGlzIG1pc3NpbmcgaGFuZGxpbmcgZm9yIGEgZ2VuZXJpYyBub2RlIHR5cGVgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gY2hlY2s7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=