{"version":3,"sources":["node_modules\\react-dom\\lib\\validateDOMNesting.js"],"names":["_assign","require","emptyFunction","warning","validateDOMNesting","process","env","NODE_ENV","specialTags","inScopeTags","buttonScopeTags","concat","impliedEndTags","emptyAncestorInfo","current","formTag","aTagInScope","buttonTagInScope","nobrTagInScope","pTagInButtonScope","listItemTagAutoclosing","dlItemTagAutoclosing","updatedAncestorInfo","oldInfo","tag","instance","ancestorInfo","info","indexOf","isTagValidWithParent","parentTag","findInvalidAncestorForTag","findOwnerStack","stack","push","_currentElement","_owner","reverse","didWarn","childTag","childText","childInstance","parentInfo","invalidParent","invalidAncestor","problematic","ancestorTag","ancestorInstance","childOwner","ancestorOwner","childOwners","ancestorOwners","minStackLen","Math","min","length","i","deepestCommon","UNKNOWN","childOwnerNames","slice","map","inst","getName","ancestorOwnerNames","ownerInfo","join","warnKey","tagDisplayName","whitespaceInfo","test","isTagValidInContext","module","exports"],"mappings":"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","file":"validateDOMNesting.js","sourceRoot":"D:/Work/Office/react-native-on-web/cli/tmpl/project","sourcesContent":["/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar _assign = require('object-assign');\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar warning = require('fbjs/lib/warning');\n\nvar validateDOMNesting = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n  var buttonScopeTags = inScopeTags.concat(['button']);\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n  var emptyAncestorInfo = {\n    current: null,\n\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  var updatedAncestorInfo = function (oldInfo, tag, instance) {\n    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n    var info = { tag: tag, instance: instance };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    }\n\n    // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.current = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n\n  /**\n   * Returns whether\n   */\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n      case 'option':\n        return tag === '#text';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n      case 'html':\n        return tag === 'head' || tag === 'body';\n      case '#document':\n        return tag === 'html';\n    }\n\n    // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'body':\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frame':\n      case 'head':\n      case 'html':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n\n  /**\n   * Returns whether\n   */\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n      case 'pre':\n      case 'listing':\n      case 'table':\n      case 'hr':\n      case 'xmp':\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  /**\n   * Given a ReactCompositeComponent instance, return a list of its recursive\n   * owners, starting at the root and ending with the instance itself.\n   */\n  var findOwnerStack = function (instance) {\n    if (!instance) {\n      return [];\n    }\n\n    var stack = [];\n    do {\n      stack.push(instance);\n    } while (instance = instance._currentElement._owner);\n    stack.reverse();\n    return stack;\n  };\n\n  var didWarn = {};\n\n  validateDOMNesting = function (childTag, childText, childInstance, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    if (childText != null) {\n      process.env.NODE_ENV !== 'production' ? warning(childTag == null, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;\n      childTag = '#text';\n    }\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var problematic = invalidParent || invalidAncestor;\n\n    if (problematic) {\n      var ancestorTag = problematic.tag;\n      var ancestorInstance = problematic.instance;\n\n      var childOwner = childInstance && childInstance._currentElement._owner;\n      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n      var childOwners = findOwnerStack(childOwner);\n      var ancestorOwners = findOwnerStack(ancestorOwner);\n\n      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n      var i;\n\n      var deepestCommon = -1;\n      for (i = 0; i < minStackLen; i++) {\n        if (childOwners[i] === ancestorOwners[i]) {\n          deepestCommon = i;\n        } else {\n          break;\n        }\n      }\n\n      var UNKNOWN = '(unknown)';\n      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ownerInfo = [].concat(\n      // If the parent and child instances have a common owner ancestor, start\n      // with that -- otherwise we just start with the parent's owners.\n      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n      // If we're warning about an invalid (non-parent) ancestry, add '...'\n      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n      if (didWarn[warnKey]) {\n        return;\n      }\n      didWarn[warnKey] = true;\n\n      var tagDisplayName = childTag;\n      var whitespaceInfo = '';\n      if (childTag === '#text') {\n        if (/\\S/.test(childText)) {\n          tagDisplayName = 'Text nodes';\n        } else {\n          tagDisplayName = 'Whitespace text nodes';\n          whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n        }\n      } else {\n        tagDisplayName = '<' + childTag + '>';\n      }\n\n      if (invalidParent) {\n        var info = '';\n        if (ancestorTag === 'table' && childTag === 'tr') {\n          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n        }\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s ' + 'See %s.%s', tagDisplayName, ancestorTag, whitespaceInfo, ownerInfo, info) : void 0;\n      } else {\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;\n      }\n    }\n  };\n\n  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n  // For testing\n  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n  };\n}\n\nmodule.exports = validateDOMNesting;"]}