UNPKG

rn-web-cli

Version:

React Native for Web

1 lines 23.8 kB
{"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;"]}