UNPKG

@angular/core

Version:

Angular - the core framework

903 lines 100 kB
/** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { assertDefined } from '../../util/assert'; import { createNamedArrayType } from '../../util/named_array_type'; import { initNgDevMode } from '../../util/ng_dev_mode'; import { CONTAINER_HEADER_OFFSET, HAS_TRANSPLANTED_VIEWS, MOVED_VIEWS, NATIVE } from '../interfaces/container'; import { COMMENT_MARKER, ELEMENT_MARKER } from '../interfaces/i18n'; import { getTStylingRangeNext, getTStylingRangeNextDuplicate, getTStylingRangePrev, getTStylingRangePrevDuplicate } from '../interfaces/styling'; import { CHILD_HEAD, CHILD_TAIL, CLEANUP, CONTEXT, DECLARATION_VIEW, FLAGS, HEADER_OFFSET, HOST, INJECTOR, NEXT, PARENT, QUERIES, RENDERER, RENDERER_FACTORY, SANITIZER, T_HOST, TVIEW } from '../interfaces/view'; import { attachDebugObject } from '../util/debug_utils'; import { getTNode, unwrapRNode } from '../util/view_utils'; var NG_DEV_MODE = ((typeof ngDevMode === 'undefined' || !!ngDevMode) && initNgDevMode()); /* * This file contains conditionally attached classes which provide human readable (debug) level * information for `LView`, `LContainer` and other internal data structures. These data structures * are stored internally as array which makes it very difficult during debugging to reason about the * current state of the system. * * Patching the array with extra property does change the array's hidden class' but it does not * change the cost of access, therefore this patching should not have significant if any impact in * `ngDevMode` mode. (see: https://jsperf.com/array-vs-monkey-patch-array) * * So instead of seeing: * ``` * Array(30) [Object, 659, null, …] * ``` * * You get to see: * ``` * LViewDebug { * views: [...], * flags: {attached: true, ...} * nodes: [ * {html: '<div id="123">', ..., nodes: [ * {html: '<span>', ..., nodes: null} * ]} * ] * } * ``` */ var LVIEW_COMPONENT_CACHE; var LVIEW_EMBEDDED_CACHE; var LVIEW_ROOT; /** * This function clones a blueprint and creates LView. * * Simple slice will keep the same type, and we need it to be LView */ export function cloneToLViewFromTViewBlueprint(tView) { var debugTView = tView; var lView = getLViewToClone(debugTView.type, tView.template && tView.template.name); return lView.concat(tView.blueprint); } function getLViewToClone(type, name) { switch (type) { case 0 /* Root */: if (LVIEW_ROOT === undefined) LVIEW_ROOT = new (createNamedArrayType('LRootView'))(); return LVIEW_ROOT; case 1 /* Component */: if (LVIEW_COMPONENT_CACHE === undefined) LVIEW_COMPONENT_CACHE = new Map(); var componentArray = LVIEW_COMPONENT_CACHE.get(name); if (componentArray === undefined) { componentArray = new (createNamedArrayType('LComponentView' + nameSuffix(name)))(); LVIEW_COMPONENT_CACHE.set(name, componentArray); } return componentArray; case 2 /* Embedded */: if (LVIEW_EMBEDDED_CACHE === undefined) LVIEW_EMBEDDED_CACHE = new Map(); var embeddedArray = LVIEW_EMBEDDED_CACHE.get(name); if (embeddedArray === undefined) { embeddedArray = new (createNamedArrayType('LEmbeddedView' + nameSuffix(name)))(); LVIEW_EMBEDDED_CACHE.set(name, embeddedArray); } return embeddedArray; } throw new Error('unreachable code'); } function nameSuffix(text) { if (text == null) return ''; var index = text.lastIndexOf('_Template'); return '_' + (index === -1 ? text : text.substr(0, index)); } /** * This class is a debug version of Object literal so that we can have constructor name show up * in * debug tools in ngDevMode. */ export var TViewConstructor = /** @class */ (function () { function TView(type, // id, // blueprint, // template, // queries, // viewQuery, // node, // data, // bindingStartIndex, // expandoStartIndex, // expandoInstructions, // firstCreatePass, // firstUpdatePass, // staticViewQueries, // staticContentQueries, // preOrderHooks, // preOrderCheckHooks, // contentHooks, // contentCheckHooks, // viewHooks, // viewCheckHooks, // destroyHooks, // cleanup, // contentQueries, // components, // directiveRegistry, // pipeRegistry, // firstChild, // schemas, // consts, // incompleteFirstPass // ) { this.type = type; this.id = id; this.blueprint = blueprint; this.template = template; this.queries = queries; this.viewQuery = viewQuery; this.node = node; this.data = data; this.bindingStartIndex = bindingStartIndex; this.expandoStartIndex = expandoStartIndex; this.expandoInstructions = expandoInstructions; this.firstCreatePass = firstCreatePass; this.firstUpdatePass = firstUpdatePass; this.staticViewQueries = staticViewQueries; this.staticContentQueries = staticContentQueries; this.preOrderHooks = preOrderHooks; this.preOrderCheckHooks = preOrderCheckHooks; this.contentHooks = contentHooks; this.contentCheckHooks = contentCheckHooks; this.viewHooks = viewHooks; this.viewCheckHooks = viewCheckHooks; this.destroyHooks = destroyHooks; this.cleanup = cleanup; this.contentQueries = contentQueries; this.components = components; this.directiveRegistry = directiveRegistry; this.pipeRegistry = pipeRegistry; this.firstChild = firstChild; this.schemas = schemas; this.consts = consts; this.incompleteFirstPass = incompleteFirstPass; } Object.defineProperty(TView.prototype, "template_", { get: function () { var buf = []; processTNodeChildren(this.firstChild, buf); return buf.join(''); }, enumerable: true, configurable: true }); return TView; }()); var TNode = /** @class */ (function () { function TNode(tView_, // type, // index, // injectorIndex, // directiveStart, // directiveEnd, // directiveStylingLast, // propertyBindings, // flags, // providerIndexes, // tagName, // attrs, // mergedAttrs, // localNames, // initialInputs, // inputs, // outputs, // tViews, // next, // projectionNext, // child, // parent, // projection, // styles, // stylesWithoutHost, // residualStyles, // classes, // classesWithoutHost, // residualClasses, // classBindings, // styleBindings) { this.tView_ = tView_; this.type = type; this.index = index; this.injectorIndex = injectorIndex; this.directiveStart = directiveStart; this.directiveEnd = directiveEnd; this.directiveStylingLast = directiveStylingLast; this.propertyBindings = propertyBindings; this.flags = flags; this.providerIndexes = providerIndexes; this.tagName = tagName; this.attrs = attrs; this.mergedAttrs = mergedAttrs; this.localNames = localNames; this.initialInputs = initialInputs; this.inputs = inputs; this.outputs = outputs; this.tViews = tViews; this.next = next; this.projectionNext = projectionNext; this.child = child; this.parent = parent; this.projection = projection; this.styles = styles; this.stylesWithoutHost = stylesWithoutHost; this.residualStyles = residualStyles; this.classes = classes; this.classesWithoutHost = classesWithoutHost; this.residualClasses = residualClasses; this.classBindings = classBindings; this.styleBindings = styleBindings; } Object.defineProperty(TNode.prototype, "type_", { get: function () { switch (this.type) { case 0 /* Container */: return 'TNodeType.Container'; case 3 /* Element */: return 'TNodeType.Element'; case 4 /* ElementContainer */: return 'TNodeType.ElementContainer'; case 5 /* IcuContainer */: return 'TNodeType.IcuContainer'; case 1 /* Projection */: return 'TNodeType.Projection'; case 2 /* View */: return 'TNodeType.View'; default: return 'TNodeType.???'; } }, enumerable: true, configurable: true }); Object.defineProperty(TNode.prototype, "flags_", { get: function () { var flags = []; if (this.flags & 16 /* hasClassInput */) flags.push('TNodeFlags.hasClassInput'); if (this.flags & 8 /* hasContentQuery */) flags.push('TNodeFlags.hasContentQuery'); if (this.flags & 32 /* hasStyleInput */) flags.push('TNodeFlags.hasStyleInput'); if (this.flags & 128 /* hasHostBindings */) flags.push('TNodeFlags.hasHostBindings'); if (this.flags & 2 /* isComponentHost */) flags.push('TNodeFlags.isComponentHost'); if (this.flags & 1 /* isDirectiveHost */) flags.push('TNodeFlags.isDirectiveHost'); if (this.flags & 64 /* isDetached */) flags.push('TNodeFlags.isDetached'); if (this.flags & 4 /* isProjected */) flags.push('TNodeFlags.isProjected'); return flags.join('|'); }, enumerable: true, configurable: true }); Object.defineProperty(TNode.prototype, "template_", { get: function () { var buf = []; buf.push('<', this.tagName || this.type_); if (this.attrs) { for (var i = 0; i < this.attrs.length;) { var attrName = this.attrs[i++]; if (typeof attrName == 'number') { break; } var attrValue = this.attrs[i++]; buf.push(' ', attrName, '="', attrValue, '"'); } } buf.push('>'); processTNodeChildren(this.child, buf); buf.push('</', this.tagName || this.type_, '>'); return buf.join(''); }, enumerable: true, configurable: true }); Object.defineProperty(TNode.prototype, "styleBindings_", { get: function () { return toDebugStyleBinding(this, false); }, enumerable: true, configurable: true }); Object.defineProperty(TNode.prototype, "classBindings_", { get: function () { return toDebugStyleBinding(this, true); }, enumerable: true, configurable: true }); return TNode; }()); export var TNodeDebug = TNode; function toDebugStyleBinding(tNode, isClassBased) { var tData = tNode.tView_.data; var bindings = []; var range = isClassBased ? tNode.classBindings : tNode.styleBindings; var prev = getTStylingRangePrev(range); var next = getTStylingRangeNext(range); var isTemplate = next !== 0; var cursor = isTemplate ? next : prev; while (cursor !== 0) { var itemKey = tData[cursor]; var itemRange = tData[cursor + 1]; bindings.unshift({ key: itemKey, index: cursor, isTemplate: isTemplate, prevDuplicate: getTStylingRangePrevDuplicate(itemRange), nextDuplicate: getTStylingRangeNextDuplicate(itemRange), nextIndex: getTStylingRangeNext(itemRange), prevIndex: getTStylingRangePrev(itemRange), }); if (cursor === prev) isTemplate = false; cursor = getTStylingRangePrev(itemRange); } bindings.push((isClassBased ? tNode.residualClasses : tNode.residualStyles) || null); return bindings; } function processTNodeChildren(tNode, buf) { while (tNode) { buf.push(tNode.template_); tNode = tNode.next; } } var TViewData = NG_DEV_MODE && createNamedArrayType('TViewData') || null; var TVIEWDATA_EMPTY; // can't initialize here or it will not be tree shaken, because // `LView` constructor could have side-effects. /** * This function clones a blueprint and creates TData. * * Simple slice will keep the same type, and we need it to be TData */ export function cloneToTViewData(list) { if (TVIEWDATA_EMPTY === undefined) TVIEWDATA_EMPTY = new TViewData(); return TVIEWDATA_EMPTY.concat(list); } export var LViewBlueprint = NG_DEV_MODE && createNamedArrayType('LViewBlueprint') || null; export var MatchesArray = NG_DEV_MODE && createNamedArrayType('MatchesArray') || null; export var TViewComponents = NG_DEV_MODE && createNamedArrayType('TViewComponents') || null; export var TNodeLocalNames = NG_DEV_MODE && createNamedArrayType('TNodeLocalNames') || null; export var TNodeInitialInputs = NG_DEV_MODE && createNamedArrayType('TNodeInitialInputs') || null; export var TNodeInitialData = NG_DEV_MODE && createNamedArrayType('TNodeInitialData') || null; export var LCleanup = NG_DEV_MODE && createNamedArrayType('LCleanup') || null; export var TCleanup = NG_DEV_MODE && createNamedArrayType('TCleanup') || null; export function attachLViewDebug(lView) { attachDebugObject(lView, new LViewDebug(lView)); } export function attachLContainerDebug(lContainer) { attachDebugObject(lContainer, new LContainerDebug(lContainer)); } export function toDebug(obj) { if (obj) { var debug = obj.debug; assertDefined(debug, 'Object does not have a debug representation.'); return debug; } else { return obj; } } /** * Use this method to unwrap a native element in `LView` and convert it into HTML for easier * reading. * * @param value possibly wrapped native DOM node. * @param includeChildren If `true` then the serialized HTML form will include child elements * (same * as `outerHTML`). If `false` then the serialized HTML form will only contain the element * itself * (will not serialize child elements). */ function toHtml(value, includeChildren) { if (includeChildren === void 0) { includeChildren = false; } var node = unwrapRNode(value); if (node) { var isTextNode = node.nodeType === Node.TEXT_NODE; var outerHTML = (isTextNode ? node.textContent : node.outerHTML) || ''; if (includeChildren || isTextNode) { return outerHTML; } else { var innerHTML = '>' + node.innerHTML + '<'; return (outerHTML.split(innerHTML)[0]) + '>'; } } else { return null; } } var LViewDebug = /** @class */ (function () { function LViewDebug(_raw_lView) { this._raw_lView = _raw_lView; } Object.defineProperty(LViewDebug.prototype, "flags", { /** * Flags associated with the `LView` unpacked into a more readable state. */ get: function () { var flags = this._raw_lView[FLAGS]; return { __raw__flags__: flags, initPhaseState: flags & 3 /* InitPhaseStateMask */, creationMode: !!(flags & 4 /* CreationMode */), firstViewPass: !!(flags & 8 /* FirstLViewPass */), checkAlways: !!(flags & 16 /* CheckAlways */), dirty: !!(flags & 64 /* Dirty */), attached: !!(flags & 128 /* Attached */), destroyed: !!(flags & 256 /* Destroyed */), isRoot: !!(flags & 512 /* IsRoot */), indexWithinInitPhase: flags >> 11 /* IndexWithinInitPhaseShift */, }; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "parent", { get: function () { return toDebug(this._raw_lView[PARENT]); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "host", { get: function () { return toHtml(this._raw_lView[HOST], true); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "html", { get: function () { return (this.nodes || []).map(function (node) { return toHtml(node.native, true); }).join(''); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "context", { get: function () { return this._raw_lView[CONTEXT]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "nodes", { /** * The tree of nodes associated with the current `LView`. The nodes have been normalized into * a * tree structure with relevant details pulled out for readability. */ get: function () { var lView = this._raw_lView; var tNode = lView[TVIEW].firstChild; return toDebugNodes(tNode, lView); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "tView", { get: function () { return this._raw_lView[TVIEW]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "cleanup", { get: function () { return this._raw_lView[CLEANUP]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "injector", { get: function () { return this._raw_lView[INJECTOR]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "rendererFactory", { get: function () { return this._raw_lView[RENDERER_FACTORY]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "renderer", { get: function () { return this._raw_lView[RENDERER]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "sanitizer", { get: function () { return this._raw_lView[SANITIZER]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "childHead", { get: function () { return toDebug(this._raw_lView[CHILD_HEAD]); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "next", { get: function () { return toDebug(this._raw_lView[NEXT]); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "childTail", { get: function () { return toDebug(this._raw_lView[CHILD_TAIL]); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "declarationView", { get: function () { return toDebug(this._raw_lView[DECLARATION_VIEW]); }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "queries", { get: function () { return this._raw_lView[QUERIES]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "tHost", { get: function () { return this._raw_lView[T_HOST]; }, enumerable: true, configurable: true }); Object.defineProperty(LViewDebug.prototype, "childViews", { /** * Normalized view of child views (and containers) attached at this location. */ get: function () { var childViews = []; var child = this.childHead; while (child) { childViews.push(child); child = child.next; } return childViews; }, enumerable: true, configurable: true }); return LViewDebug; }()); export { LViewDebug }; /** * Turns a flat list of nodes into a tree by walking the associated `TNode` tree. * * @param tNode * @param lView */ export function toDebugNodes(tNode, lView) { if (tNode) { var debugNodes = []; var tNodeCursor = tNode; while (tNodeCursor) { debugNodes.push(buildDebugNode(tNodeCursor, lView, tNodeCursor.index)); tNodeCursor = tNodeCursor.next; } return debugNodes; } else { return null; } } export function buildDebugNode(tNode, lView, nodeIndex) { var rawValue = lView[nodeIndex]; var native = unwrapRNode(rawValue); var componentLViewDebug = toDebug(readLViewValue(rawValue)); return { html: toHtml(native), native: native, nodes: toDebugNodes(tNode.child, lView), component: componentLViewDebug, }; } var LContainerDebug = /** @class */ (function () { function LContainerDebug(_raw_lContainer) { this._raw_lContainer = _raw_lContainer; } Object.defineProperty(LContainerDebug.prototype, "hasTransplantedViews", { get: function () { return this._raw_lContainer[HAS_TRANSPLANTED_VIEWS]; }, enumerable: true, configurable: true }); Object.defineProperty(LContainerDebug.prototype, "views", { get: function () { return this._raw_lContainer.slice(CONTAINER_HEADER_OFFSET) .map(toDebug); }, enumerable: true, configurable: true }); Object.defineProperty(LContainerDebug.prototype, "parent", { get: function () { return toDebug(this._raw_lContainer[PARENT]); }, enumerable: true, configurable: true }); Object.defineProperty(LContainerDebug.prototype, "movedViews", { get: function () { return this._raw_lContainer[MOVED_VIEWS]; }, enumerable: true, configurable: true }); Object.defineProperty(LContainerDebug.prototype, "host", { get: function () { return this._raw_lContainer[HOST]; }, enumerable: true, configurable: true }); Object.defineProperty(LContainerDebug.prototype, "native", { get: function () { return this._raw_lContainer[NATIVE]; }, enumerable: true, configurable: true }); Object.defineProperty(LContainerDebug.prototype, "next", { get: function () { return toDebug(this._raw_lContainer[NEXT]); }, enumerable: true, configurable: true }); return LContainerDebug; }()); export { LContainerDebug }; /** * Return an `LView` value if found. * * @param value `LView` if any */ export function readLViewValue(value) { while (Array.isArray(value)) { // This check is not quite right, as it does not take into account `StylingContext` // This is why it is in debug, not in util.ts if (value.length >= HEADER_OFFSET - 1) return value; value = value[HOST]; } return null; } var I18NDebugItem = /** @class */ (function () { function I18NDebugItem(__raw_opCode, _lView, nodeIndex, type) { this.__raw_opCode = __raw_opCode; this._lView = _lView; this.nodeIndex = nodeIndex; this.type = type; } Object.defineProperty(I18NDebugItem.prototype, "tNode", { get: function () { return getTNode(this._lView[TVIEW], this.nodeIndex); }, enumerable: true, configurable: true }); return I18NDebugItem; }()); export { I18NDebugItem }; /** * Turns a list of "Create" & "Update" OpCodes into a human-readable list of operations for * debugging purposes. * @param mutateOpCodes mutation opCodes to read * @param updateOpCodes update opCodes to read * @param icus list of ICU expressions * @param lView The view the opCodes are acting on */ export function attachI18nOpCodesDebug(mutateOpCodes, updateOpCodes, icus, lView) { attachDebugObject(mutateOpCodes, new I18nMutateOpCodesDebug(mutateOpCodes, lView)); attachDebugObject(updateOpCodes, new I18nUpdateOpCodesDebug(updateOpCodes, icus, lView)); if (icus) { icus.forEach(function (icu) { icu.create.forEach(function (icuCase) { attachDebugObject(icuCase, new I18nMutateOpCodesDebug(icuCase, lView)); }); icu.update.forEach(function (icuCase) { attachDebugObject(icuCase, new I18nUpdateOpCodesDebug(icuCase, icus, lView)); }); }); } } var I18nMutateOpCodesDebug = /** @class */ (function () { function I18nMutateOpCodesDebug(__raw_opCodes, __lView) { this.__raw_opCodes = __raw_opCodes; this.__lView = __lView; } Object.defineProperty(I18nMutateOpCodesDebug.prototype, "operations", { /** * A list of operation information about how the OpCodes will act on the view. */ get: function () { var _a = this, __lView = _a.__lView, __raw_opCodes = _a.__raw_opCodes; var results = []; for (var i = 0; i < __raw_opCodes.length; i++) { var opCode = __raw_opCodes[i]; var result = void 0; if (typeof opCode === 'string') { result = { __raw_opCode: opCode, type: 'Create Text Node', nodeIndex: __raw_opCodes[++i], text: opCode, }; } if (typeof opCode === 'number') { switch (opCode & 7 /* MASK_OPCODE */) { case 1 /* AppendChild */: var destinationNodeIndex = opCode >>> 17 /* SHIFT_PARENT */; result = new I18NDebugItem(opCode, __lView, destinationNodeIndex, 'AppendChild'); break; case 0 /* Select */: var nodeIndex = opCode >>> 3 /* SHIFT_REF */; result = new I18NDebugItem(opCode, __lView, nodeIndex, 'Select'); break; case 5 /* ElementEnd */: var elementIndex = opCode >>> 3 /* SHIFT_REF */; result = new I18NDebugItem(opCode, __lView, elementIndex, 'ElementEnd'); break; case 4 /* Attr */: elementIndex = opCode >>> 3 /* SHIFT_REF */; result = new I18NDebugItem(opCode, __lView, elementIndex, 'Attr'); result['attrName'] = __raw_opCodes[++i]; result['attrValue'] = __raw_opCodes[++i]; break; } } if (!result) { switch (opCode) { case COMMENT_MARKER: result = { __raw_opCode: opCode, type: 'COMMENT_MARKER', commentValue: __raw_opCodes[++i], nodeIndex: __raw_opCodes[++i], }; break; case ELEMENT_MARKER: result = { __raw_opCode: opCode, type: 'ELEMENT_MARKER', }; break; } } if (!result) { result = { __raw_opCode: opCode, type: 'Unknown Op Code', code: opCode, }; } results.push(result); } return results; }, enumerable: true, configurable: true }); return I18nMutateOpCodesDebug; }()); export { I18nMutateOpCodesDebug }; var I18nUpdateOpCodesDebug = /** @class */ (function () { function I18nUpdateOpCodesDebug(__raw_opCodes, icus, __lView) { this.__raw_opCodes = __raw_opCodes; this.icus = icus; this.__lView = __lView; } Object.defineProperty(I18nUpdateOpCodesDebug.prototype, "operations", { /** * A list of operation information about how the OpCodes will act on the view. */ get: function () { var _a = this, __lView = _a.__lView, __raw_opCodes = _a.__raw_opCodes, icus = _a.icus; var results = []; for (var i = 0; i < __raw_opCodes.length; i++) { // bit code to check if we should apply the next update var checkBit = __raw_opCodes[i]; // Number of opCodes to skip until next set of update codes var skipCodes = __raw_opCodes[++i]; var value = ''; for (var j = i + 1; j <= (i + skipCodes); j++) { var opCode = __raw_opCodes[j]; if (typeof opCode === 'string') { value += opCode; } else if (typeof opCode == 'number') { if (opCode < 0) { // It's a binding index whose value is negative // We cannot know the value of the binding so we only show the index value += "\uFFFD" + (-opCode - 1) + "\uFFFD"; } else { var nodeIndex = opCode >>> 2 /* SHIFT_REF */; var tIcuIndex = void 0; var tIcu = void 0; switch (opCode & 3 /* MASK_OPCODE */) { case 1 /* Attr */: var attrName = __raw_opCodes[++j]; var sanitizeFn = __raw_opCodes[++j]; results.push({ __raw_opCode: opCode, checkBit: checkBit, type: 'Attr', attrValue: value, attrName: attrName, sanitizeFn: sanitizeFn, }); break; case 0 /* Text */: results.push({ __raw_opCode: opCode, checkBit: checkBit, type: 'Text', nodeIndex: nodeIndex, text: value, }); break; case 2 /* IcuSwitch */: tIcuIndex = __raw_opCodes[++j]; tIcu = icus[tIcuIndex]; var result = new I18NDebugItem(opCode, __lView, nodeIndex, 'IcuSwitch'); result['tIcuIndex'] = tIcuIndex; result['checkBit'] = checkBit; result['mainBinding'] = value; result['tIcu'] = tIcu; results.push(result); break; case 3 /* IcuUpdate */: tIcuIndex = __raw_opCodes[++j]; tIcu = icus[tIcuIndex]; result = new I18NDebugItem(opCode, __lView, nodeIndex, 'IcuUpdate'); result['tIcuIndex'] = tIcuIndex; result['checkBit'] = checkBit; result['tIcu'] = tIcu; results.push(result); break; } } } } i += skipCodes; } return results; }, enumerable: true, configurable: true }); return I18nUpdateOpCodesDebug; }()); export { I18nUpdateOpCodesDebug }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHZpZXdfZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2luc3RydWN0aW9ucy9sdmlld19kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFNSCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBYyxXQUFXLEVBQUUsTUFBTSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFekgsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQWlGLE1BQU0sb0JBQW9CLENBQUM7QUFLbEosT0FBTyxFQUFDLG9CQUFvQixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLDZCQUE2QixFQUE2QixNQUFNLHVCQUF1QixDQUFDO0FBQzNLLE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdDLEtBQUssRUFBRSxhQUFhLEVBQVksSUFBSSxFQUFFLFFBQVEsRUFBcUIsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVMsS0FBSyxFQUFvQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlULE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsSUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxD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