Repository: YMFE/qreact Branch: master Commit: 9d579a361948 Files: 167 Total size: 6.4 MB Directory structure: gitextract_s_rwaydx/ ├── .babelrc ├── .eslintrc.js ├── .gitignore ├── .npmignore ├── .prettierrc ├── LICENSE ├── README.md ├── dist/ │ ├── React.js │ ├── ReactDOMServer.js │ ├── ReactIE.js │ ├── ReactNoop.js │ └── Router.js ├── lib/ │ ├── ReactBrowserEventEmitter.js │ ├── ReactChildren.js │ ├── ReactDOMFactories.js │ ├── ReactInputSelection.js │ ├── ReactPropTypes.js │ ├── ReactProxy.js │ ├── ReactShallowRenderer.js │ ├── ReactTestUtils.js │ ├── ReduxIE.js │ ├── babel.js │ ├── createClass.js │ ├── createReactNoop.js │ ├── createResource.js │ ├── createSubscription.js │ ├── deepForceUpdate.js │ ├── devtools.js │ ├── injectTapEventPlugin.js │ ├── onlyChild.js │ ├── polyfill.js │ ├── shallowCompare.js │ ├── sliceChildren.js │ └── traverseAllChildren.js ├── package.json ├── packages/ │ ├── core/ │ │ ├── Children.js │ │ ├── Component.js │ │ ├── PropTypes.js │ │ ├── PureComponent.js │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── ReactChildren-test.js │ │ │ ├── ReactContextValidator-test.js │ │ │ ├── ReactES6Class-test.js │ │ │ ├── ReactElement-test.js │ │ │ ├── ReactElementClone-test.js │ │ │ ├── ReactElementValidator-test.internal.js │ │ │ ├── ReactJSXElement-test.js │ │ │ ├── ReactJSXElementValidator-test.js │ │ │ ├── ReactProxy-test.js │ │ │ ├── ReactPureComponent-test.js │ │ │ ├── createReactClassIntegration-test.js │ │ │ ├── forwardRef-test.internal.js │ │ │ └── onlyChild-test.js │ │ ├── createClass.js │ │ ├── createContext.js │ │ ├── createElement.js │ │ ├── createPortal.js │ │ ├── createRef.js │ │ ├── createRenderer.js │ │ ├── shallowEqual.js │ │ └── util.js │ ├── fiber/ │ │ ├── ErrorBoundary.js │ │ ├── Fiber.js │ │ ├── README.md │ │ ├── Refs.js │ │ ├── beginWork.js │ │ ├── commitWork.js │ │ ├── createInstance.js │ │ ├── effectTag.js │ │ ├── findHostInstance.js │ │ ├── insertPoint.js │ │ ├── scheduleWork.js │ │ ├── scheduler.js │ │ └── unbatch.js │ ├── readme.md │ ├── render/ │ │ ├── canvas/ │ │ │ └── readme.md │ │ ├── console/ │ │ │ └── readme.md │ │ ├── dom/ │ │ │ ├── DOMRenderer.js │ │ │ ├── __tests__/ │ │ │ │ ├── README.md │ │ │ │ ├── ReactComponent-test.js │ │ │ │ ├── ReactComponentLifeCycle-test.js │ │ │ │ ├── ReactCompositeComponent-test.js │ │ │ │ ├── ReactCompositeComponentNestedState-test.js │ │ │ │ ├── ReactCompositeComponentState-test.js │ │ │ │ ├── ReactDOMComponentTree-test.js │ │ │ │ ├── ReactDOMEventListener-test.js │ │ │ │ ├── ReactDOMFiber-test.js │ │ │ │ ├── ReactDOMInput-test.js │ │ │ │ ├── ReactDOMOption-test.js │ │ │ │ ├── ReactDOMSVG-test.js │ │ │ │ ├── ReactDOMSelect-test.js │ │ │ │ ├── ReactDOMTextComponent-test.js │ │ │ │ ├── ReactDOMTextarea-test.js │ │ │ │ ├── ReactEmptyComponent-test.js │ │ │ │ ├── ReactErrorBoundaries-test.internal.js │ │ │ │ ├── ReactIdentity-test.js │ │ │ │ ├── ReactMount-test.js │ │ │ │ ├── ReactMountDestruction-test.js │ │ │ │ ├── ReactMultiChild-test.js │ │ │ │ ├── ReactMultiChildReconcile-test.js │ │ │ │ ├── ReactStatelessComponent-test.js │ │ │ │ ├── ReactTestUtils-test.js │ │ │ │ ├── ReactUpdates-test.js │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── ReactTestUtils-test.js.snap │ │ │ │ ├── findDOMNode-test.js │ │ │ │ ├── refs-destruction-test.js │ │ │ │ ├── refs-test.js │ │ │ │ └── renderSubtreeIntoContainer-test.js │ │ │ ├── browser.js │ │ │ ├── compat.js │ │ │ ├── duplex.js │ │ │ ├── event.js │ │ │ ├── findDOMNode.js │ │ │ ├── index.ie8.js │ │ │ ├── index.js │ │ │ ├── props.js │ │ │ ├── readme.md │ │ │ └── style.js │ │ ├── noop/ │ │ │ ├── NoopRenderer.js │ │ │ ├── index.js │ │ │ └── readme.md │ │ ├── readme.md │ │ └── server/ │ │ ├── Renderer.js │ │ ├── __tests2__/ │ │ │ ├── index.js │ │ │ └── utils/ │ │ │ └── ReactDOMServerIntegrationTestUtils.js │ │ ├── duplex.js │ │ ├── encode.js │ │ ├── html.js │ │ ├── index.js │ │ ├── namespaces.js │ │ ├── readme.md │ │ └── style.js │ ├── router/ │ │ ├── history.js │ │ ├── index.jsx │ │ ├── readme.md │ │ └── utils.js │ └── store/ │ ├── createRedux.js │ ├── index.js │ ├── pluginFactory.js │ ├── plugins.js │ ├── readme.md │ ├── rematch.js │ └── utils.js ├── scripts/ │ ├── build/ │ │ ├── ReactSelection.js │ │ ├── create-class.js │ │ ├── rollup.ie.js │ │ ├── rollup.js │ │ ├── rollup.noop.js │ │ ├── rollup.reach.js │ │ ├── rollup.selection.js │ │ ├── rollup.ssr.js │ │ ├── shallowCompare.index.js │ │ └── shallowCompare.js │ ├── build.js │ └── jest/ │ ├── codes.json │ ├── config.build.js │ ├── config.source.js │ ├── matchers/ │ │ └── toWarnDev.js │ ├── noHaste.js │ ├── preprocessor.js │ ├── setupEnvironment.js │ ├── setupTests.js │ ├── spec-equivalence-reporter/ │ │ └── setupTests.js │ └── typescript/ │ ├── jest.d.ts │ └── preprocessor.js ├── server.js └── version.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .babelrc ================================================ { "presets": [ ["env",{ "modules": false }], "react" ], "plugins": [ [ "transform-class-properties", "transform-es2015-classes", { "loose": true } ], ["transform-object-rest-spread", { "useBuiltIns": true }], ["module-resolver", { "root": ["."], "alias": { "react-core":"./packages/core", "react-fiber": "./packages/fiber", "prop-types": "./lib/ReactPropTypes", "create-react-class": "./lib/createClass", "react-server-renderer":"./dist/ReactDOMServer", "react-noop-renderer": "./dist/ReactNoop", "react": "./dist/React", "lib": "./lib", "react-dom": "./dist/React", "test-utils": "./lib/ReactTestUtils" } }] ] } ================================================ FILE: .eslintrc.js ================================================ module.exports = { "env": { "browser": true, "commonjs": true, "es6": true, "node": true }, "extends": "eslint:recommended", "parser": "babel-eslint", "parserOptions": { "ecmaFeatures": { "experimentalObjectRestSpread": true, "jsx": true }, "sourceType": "module" }, "plugins": [ "react" ], "globals": { define: true }, "rules": { "indent": [ "error", 4, { "SwitchCase": 1 } ], "linebreak-style": [ "error", "unix" ], "quotes": [ "error", "double" ], "semi": [ "error", "always" ], "comma-dangle": [ "error", "never" ], "strict": 0 } }; ================================================ FILE: .gitignore ================================================ # kdiff3 ignore *.orig # maven ignore target/ # eclipse ignore .settings/ .project .classpath # idea ignore .idea/ *.ipr *.iml *.iws # temp ignore *.log *.cache *.diff *.patch *.tmp # system ignore .DS_Store Thumbs.db # package ignore (optional) # *.jar # *.war # *.zip # *.tar # *.tar.gz *node_modules* __tmp__* /coverage ================================================ FILE: .npmignore ================================================ /test/ /scripts/ /examples/ .babelrc /coverage/ /build/ ================================================ FILE: .prettierrc ================================================ { "tabWidth": 4, "useTabs": false, "singleQuote": false } ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2018, The YMFE Team. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: README.md ================================================ # 简介 `QReact`是去哪儿网推出的一款**高度兼容 React**迷你的 React 框架,让 React 在业务线上更具通用价值。 众所周知,React 一直存在体积过大的诟病,集成了许多在线上环境不需要功能。YMFE 团队在熟读其源码的基础上,去芜存精,重新实现了 React 所有公开接口,体积只有 React 的约三分之一,从而解决它在移动端上加载过慢的问题。由于没有使用高级 API,因此只需在 webpack ,uglify 上修改配置,便能运用于 IE8 上,从而解决 PC 端同学使用 React 的问题。 它对比官方 react, preact, inferno, react-lite 等框架,它具有以下优势。 * 对比 `preact`等迷你框架,QReact 的事件系统更为完善,更具扩展性。像 `mouseenter/mouseleave`,`focus/blur` 等不冒泡的事件,`preact` 简单的基于**addEventListener(type, fn, true)**是无法正常运行。 * 对比 `preact`等迷你框架,QReact 在处理混杂着 ref 与生命周期钩子的逻辑时,与官方的行为是保持一致。React.Children 与 React.cloneElement 在 key 生成策略上也是与官方行为一致。其他迷你框架则出入很大,或干脆没有实现。简而言之,QReact 与 React 高度兼容,在细节上做得原汁原味。因此它 99%上运行阿里的**antd**这样复杂的 UI 框架,当然我们不限于此,会努力做到完全兼容。 * QReact 实现了官方 `react/lib` 下的许多子模块,它们的实现也非常简洁,从而整体减少 bundle 的大小。如果没有实现它们,许多第三方库就会直接引用官方提供的 `react/lib` 子模块,但由于迷你 React 们的内部实现与官方不一样,因此即便引用,也会运行出错。其次,RN 也用到它们,,这也为 QReact 支持三端合一的 QRN-WEB 做技术支撑。 * QReact 包含了 `react` 及 `react-dom` 的全部功能,同时有着更小的体积,QReact@2.1.4 的体积为(`minified: 34.45KB gzipped : 12.88KB`),作为对比, `react@16.2.0` + `react-dom@16.2.0` 的体积则大了很多(`minified: 5.1KB + 88.7KB = 93.8KB gzipped: 2.2KB + 28.3KB = 30.5KB`)。 * QReact 支持 IE6 - IE8,详细信息请[参见使用](https://qreact.ymfe.org/documents/IE.html)中的“在 IE 6 - IE 8 及以下使用”。 * QReact 是一个充满活力的库,它的开发版本[anujs](https://github.com/RubyLouvre/anu)几乎每天都有更新,不断跟进官方 React 的新特性,React 16 的一些新功能也渐渐加入。 ## 如何使用 详细使用方式请[参见使用](https://qreact.ymfe.org/)。 ## 组件规范 为了减少常见的编码错误,请尽量遵循[编码规范](https://qreact.ymfe.org/guide/index.html)。 ## 鸣谢 QReact 基于开源项目 [developit preact@7.1.0](https://github.com/developit/preact/tree/7.1.0/) [developit preact-compat@3.14.1](https://github.com/developit/preact-compat/tree/3.14.1) 及 [Facebook React@v15.3.1](https://github.com/facebook/react/tree/v15.3.1)。 QReact 在开发过程,从 preact, react-lite 的源码受到许多启迪,特此鸣谢。 欢迎大家对 QReact 与 anujs 进行试用与提 issue 与 PR! ================================================ FILE: dist/React.js ================================================ /** * Powered by YMFE (https://ymfe.org) */ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory()) : typeof define === "function" && define.amd ? define(factory) : (global.React = factory()); })(this, function() { var arrayPush = Array.prototype.push; var hasOwnProperty = Object.prototype.hasOwnProperty; var gSBU = "getSnapshotBeforeUpdate"; var gDSFP = "getDerivedStateFromProps"; var hasSymbol = typeof Symbol === "function" && Symbol["for"]; var effects = []; var topFibers = []; var topNodes = []; var emptyObject = {}; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol["for"]("react.element") : 0xeac7; function noop() {} function Fragment(props) { return props.children; } function returnFalse() { return false; } function returnTrue() { return true; } function resetStack(info) { keepLast(info.containerStack); keepLast(info.contextStack); } function keepLast(list) { var n = list.length; list.splice(0, n - 1); } function get(key) { return key._reactInternalFiber; } var __type = Object.prototype.toString; var fakeWindow = {}; function getWindow() { try { return window; } catch (e) { try { return global; } catch (e) { return fakeWindow; } } } function isMounted(instance) { var fiber = get(instance); return !!(fiber && fiber.hasMounted); } function toWarnDev(msg, deprecated) { msg = deprecated ? msg + " is deprecated" : msg; var process = getWindow().process; if (process && process.env.NODE_ENV === "development") { throw msg; } } function extend(obj, props) { for (var i in props) { if (hasOwnProperty.call(props, i)) { obj[i] = props[i]; } } return obj; } function inherit(SubClass, SupClass) { function Bridge() {} var orig = SubClass.prototype; Bridge.prototype = SupClass.prototype; var fn = (SubClass.prototype = new Bridge()); extend(fn, orig); fn.constructor = SubClass; return fn; } try { var supportEval = Function("a", "return a + 1")(2) == 3; } catch (e) {} function miniCreateClass(ctor, superClass, methods, statics) { var className = ctor.name || "IEComponent"; var Ctor = supportEval ? Function( "superClass", "ctor", "return function " + className + " (props, context) {\n superClass.apply(this, arguments); \n ctor.apply(this, arguments);\n }" )(superClass, ctor) : function Ctor() { superClass.apply(this, arguments); ctor.apply(this, arguments); }; Ctor.displayName = className; var fn = inherit(Ctor, superClass); extend(fn, methods); if (statics) { extend(Ctor, statics); } return Ctor; } var lowerCache = {}; function toLowerCase(s) { return lowerCache[s] || (lowerCache[s] = s.toLowerCase()); } function isFn(obj) { return __type.call(obj) === "[object Function]"; } var rword = /[^, ]+/g; function oneObject(array, val) { if (array + "" === array) { array = array.match(rword) || []; } var result = {}, value = val !== void 666 ? val : 1; for (var i = 0, n = array.length; i < n; i++) { result[array[i]] = value; } return result; } var rcamelize = /[-_][^-_]/g; function camelize(target) { if (!target || (target.indexOf("-") < 0 && target.indexOf("_") < 0)) { return target; } var str = target.replace(rcamelize, function(match) { return match.charAt(1).toUpperCase(); }); return firstLetterLower(str); } function firstLetterLower(str) { return str.charAt(0).toLowerCase() + str.slice(1); } var numberMap = { "[object Boolean]": 2, "[object Number]": 3, "[object String]": 4, "[object Function]": 5, "[object Symbol]": 6, "[object Array]": 7 }; function typeNumber(data) { if (data === null) { return 1; } if (data === void 666) { return 0; } var a = numberMap[__type.call(data)]; return a || 8; } function createRenderer(methods) { return extend(Renderer, methods); } var middlewares = []; var Renderer = { controlledCbs: [], mountOrder: 1, macrotasks: [], boundaries: [], middleware: function middleware(obj) { if (obj.begin && obj.end) { middlewares.push(obj); } }, updateControlled: function updateControlled() {}, fireMiddlewares: function fireMiddlewares(begin) { var index = begin ? middlewares.length - 1 : 0, delta = begin ? -1 : 1, method = begin ? "begin" : "end", obj = void 0; while ((obj = middlewares[index])) { obj[method](); index += delta; } }, currentOwner: null }; var fakeObject = { enqueueSetState: returnFalse, isMounted: returnFalse }; function Component(props, context) { Renderer.currentOwner = this; this.context = context; this.props = props; this.refs = {}; this.updater = fakeObject; this.state = null; } Component.prototype = { constructor: Component, replaceState: function replaceState() { toWarnDev("replaceState", true); }, isReactComponent: returnTrue, isMounted: function isMounted$$1() { toWarnDev("isMounted", true); return this.updater.isMounted(this); }, setState: function setState(state, cb) { this.updater.enqueueSetState(this, state, cb); }, forceUpdate: function forceUpdate(cb) { this.updater.enqueueSetState(this, true, cb); }, render: function render() { throw "must implement render"; } }; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var RESERVED_PROPS = { key: true, ref: true, __self: true, __source: true }; function makeProps(type, config, props, children, len) { var defaultProps = void 0, propName = void 0; for (propName in config) { if ( hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName) ) { props[propName] = config[propName]; } } if (type && type.defaultProps) { defaultProps = type.defaultProps; for (propName in defaultProps) { if (props[propName] === undefined) { props[propName] = defaultProps[propName]; } } } if (len === 1) { props.children = children[0]; } else if (len > 1) { props.children = children; } return props; } function hasValidRef(config) { return config.ref !== undefined; } function hasValidKey(config) { return config.key !== undefined; } function createElement(type, config) { for ( var _len = arguments.length, children = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++ ) { children[_key - 2] = arguments[_key]; } var props = {}, tag = 5, key = null, ref = null, argsLen = children.length; if (type && type.call) { tag = type.prototype && type.prototype.render ? 2 : 1; } else if (type + "" !== type) { toWarnDev("React.createElement: type is invalid."); } if (config != null) { if (hasValidRef(config)) { ref = config.ref; } if (hasValidKey(config)) { key = "" + config.key; } } props = makeProps(type, config || {}, props, children, argsLen); return ReactElement(type, tag, props, key, ref, Renderer.currentOwner); } function cloneElement(element, config) { var props = Object.assign({}, element.props); var type = element.type; var key = element.key; var ref = element.ref; var tag = element.tag; var owner = element._owner; for ( var _len2 = arguments.length, children = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++ ) { children[_key2 - 2] = arguments[_key2]; } var argsLen = children.length; if (config != null) { if (hasValidRef(config)) { ref = config.ref; owner = Renderer.currentOwner; } if (hasValidKey(config)) { key = "" + config.key; } } props = makeProps(type, config || {}, props, children, argsLen); return ReactElement(type, tag, props, key, ref, owner); } function createFactory(type) { var factory = createElement.bind(null, type); factory.type = type; return factory; } function ReactElement(type, tag, props, key, ref, owner) { var ret = { type: type, tag: tag, props: props }; if (tag !== 6) { ret.$$typeof = REACT_ELEMENT_TYPE; ret.key = key || null; var refType = typeNumber(ref); if ( refType === 2 || refType === 3 || refType === 4 || refType === 5 || refType === 8 ) { if (refType < 4) { ref += ""; } ret.ref = ref; } else { ret.ref = null; } ret._owner = owner; } return ret; } function isValidElement(vnode) { return !!vnode && vnode.$$typeof === REACT_ELEMENT_TYPE; } function createVText(text) { return ReactElement("#text", 6, text + ""); } function escape(key) { var escapeRegex = /[=:]/g; var escaperLookup = { "=": "=0", ":": "=2" }; var escapedString = ("" + key).replace(escapeRegex, function(match) { return escaperLookup[match]; }); return "$" + escapedString; } var lastText = void 0, flattenIndex = void 0, flattenObject = void 0; function flattenCb(context, child, key, childType) { if (child === null) { lastText = null; return; } if (childType === 3 || childType === 4) { if (lastText) { lastText.props += child; return; } lastText = child = createVText(child); } else { lastText = null; } if (!flattenObject[key]) { flattenObject[key] = child; } else { key = "." + flattenIndex; flattenObject[key] = child; } flattenIndex++; } function fiberizeChildren(children, fiber) { flattenObject = {}; flattenIndex = 0; if (children !== void 666) { lastText = null; traverseAllChildren(children, "", flattenCb); } flattenIndex = 0; return (fiber.children = flattenObject); } function getComponentKey(component, index) { if ( (typeof component === "undefined" ? "undefined" : _typeof(component)) === "object" && component !== null && component.key != null ) { return escape(component.key); } return index.toString(36); } var SEPARATOR = "."; var SUBSEPARATOR = ":"; function traverseAllChildren(children, nameSoFar, callback, bookKeeping) { var childType = typeNumber(children); var invokeCallback = false; switch (childType) { case 0: case 1: case 2: case 5: case 6: children = null; invokeCallback = true; break; case 3: case 4: invokeCallback = true; break; case 8: if (children.$$typeof || children instanceof Component) { invokeCallback = true; } else if (children.hasOwnProperty("toString")) { children = children + ""; invokeCallback = true; childType = 3; } break; } if (invokeCallback) { callback( bookKeeping, children, nameSoFar === "" ? SEPARATOR + getComponentKey(children, 0) : nameSoFar, childType ); return 1; } var subtreeCount = 0; var nextNamePrefix = nameSoFar === "" ? SEPARATOR : nameSoFar + SUBSEPARATOR; if (children.forEach) { children.forEach(function(child, i) { var nextName = nextNamePrefix + getComponentKey(child, i); subtreeCount += traverseAllChildren( child, nextName, callback, bookKeeping ); }); return subtreeCount; } var iteratorFn = getIteractor(children); if (iteratorFn) { iterator = iteratorFn.call(children); var ii = 0, step; while (!(step = iterator.next()).done) { child = step.value; nextName = nextNamePrefix + getComponentKey(child, ii++); subtreeCount += traverseAllChildren( child, nextName, callback, bookKeeping ); } return subtreeCount; } throw "children: type is invalid."; } var REAL_SYMBOL = hasSymbol && Symbol.iterator; var FAKE_SYMBOL = "@@iterator"; function getIteractor(a) { var iteratorFn = (REAL_SYMBOL && a[REAL_SYMBOL]) || a[FAKE_SYMBOL]; if (iteratorFn && iteratorFn.call) { return iteratorFn; } } var Children = { only: function only(children) { if (isValidElement(children)) { return children; } throw new Error("expect only one child"); }, count: function count(children) { if (children == null) { return 0; } return traverseAllChildren(children, "", noop); }, map: function map(children, func, context) { return proxyIt(children, func, [], context); }, forEach: function forEach(children, func, context) { return proxyIt(children, func, null, context); }, toArray: function toArray$$1(children) { return proxyIt(children, K, []); } }; function proxyIt(children, func, result, context) { if (children == null) { return []; } mapChildren(children, null, func, result, context); return result; } function K(el) { return el; } function mapChildren(children, prefix, func, result, context) { var keyPrefix = ""; if (prefix != null) { keyPrefix = escapeUserProvidedKey(prefix) + "/"; } traverseAllChildren(children, "", traverseCallback, { context: context, keyPrefix: keyPrefix, func: func, result: result, count: 0 }); } var userProvidedKeyEscapeRegex = /\/+/g; function escapeUserProvidedKey(text) { return ("" + text).replace(userProvidedKeyEscapeRegex, "$&/"); } function traverseCallback(bookKeeping, child, childKey) { var result = bookKeeping.result, keyPrefix = bookKeeping.keyPrefix, func = bookKeeping.func, context = bookKeeping.context; var mappedChild = func.call(context, child, bookKeeping.count++); if (!result) { return; } if (Array.isArray(mappedChild)) { mapChildren(mappedChild, childKey, K, result); } else if (mappedChild != null) { if (isValidElement(mappedChild)) { mappedChild = extend({}, mappedChild); mappedChild.key = keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + "/" : "") + childKey; } result.push(mappedChild); } } var check = function check() { return check; }; check.isRequired = check; var PropTypes = { array: check, bool: check, func: check, number: check, object: check, string: check, any: check, arrayOf: check, element: check, instanceOf: check, node: check, objectOf: check, oneOf: check, oneOfType: check, shape: check }; function shallowEqual(objA, objB) { if (Object.is(objA, objB)) { return true; } if (typeNumber(objA) < 7 || typeNumber(objB) < 7) { return false; } var keysA = Object.keys(objA); var keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } for (var i = 0; i < keysA.length; i++) { if ( !hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]]) ) { return false; } } return true; } var PureComponent = miniCreateClass( function PureComponent() { this.isPureComponent = true; }, Component, { shouldComponentUpdate: function shouldComponentUpdate( nextProps, nextState ) { var a = shallowEqual(this.props, nextProps); var b = shallowEqual(this.state, nextState); return !a || !b; } } ); function createRef() { return { current: null }; } function forwardRef(fn) { createRef.render = fn; return createRef; } function AnuPortal(props) { return props.children; } function createPortal(children, parent) { var child = createElement(AnuPortal, { children: children, parent: parent }); child.isPortal = true; return child; } var uuid = 1; function gud() { return uuid++; } var MAX_NUMBER = 1073741823; function createEventEmitter(value) { var handlers = []; return { on: function on(handler) { handlers.push(handler); }, off: function off(handler) { handlers = handlers.filter(function(h) { return h !== handler; }); }, get: function get$$1() { return value; }, set: function set(newValue, changedBits) { value = newValue; handlers.forEach(function(handler) { return handler(value, changedBits); }); } }; } function createContext(defaultValue, calculateChangedBits) { var contextProp = "__create-react-context-" + gud() + "__"; function create(obj, value) { obj[contextProp] = value; return obj; } var Provider = miniCreateClass( function Provider(props) { this.emitter = createEventEmitter(props.value); }, Component, { getChildContext: function getChildContext() { return create({}, this.emitter); }, UNSAFE_componentWillReceiveProps: function UNSAFE_componentWillReceiveProps( nextProps ) { if (this.props.value !== nextProps.value) { var oldValue = this.props.value; var newValue = nextProps.value; var changedBits = void 0; if (Object.is(oldValue, newValue)) { changedBits = 0; } else { changedBits = isFn(calculateChangedBits) ? calculateChangedBits(oldValue, newValue) : MAX_NUMBER; changedBits |= 0; if (changedBits !== 0) { this.emitter.set(nextProps.value, changedBits); } } } }, render: function render() { return this.props.children; } }, { childContextTypes: create({}, PropTypes.object.isRequired) } ); var Consumer = miniCreateClass( function Consumer(props, context) { var _this = this; this.observedBits = 0; this.state = { value: this.getValue() }; this.emitter = context[contextProp]; this.onUpdate = function(newValue, changedBits) { var observedBits = _this.observedBits | 0; if ((observedBits & changedBits) !== 0) { _this.setState({ value: _this.getValue() }); } }; }, Component, { UNSAFE_componentWillReceiveProps: function UNSAFE_componentWillReceiveProps( nextProps ) { var observedBits = nextProps.observedBits; this.observedBits = observedBits == null ? MAX_NUMBER : observedBits; }, getValue: function getValue() { if (this.emitter) { return this.emitter.get(); } else { return defaultValue; } }, componentDidMount: function componentDidMount() { if (this.emitter) { this.emitter.on(this.onUpdate); } var observedBits = this.props.observedBits; this.observedBits = observedBits == null ? MAX_NUMBER : observedBits; }, componentWillUnmount: function componentWillUnmount() { if (this.emitter) { this.emitter.off(this.onUpdate); } }, render: function render() { return this.props.children(this.state.value); } }, { contextTypes: create({}, PropTypes.object) } ); return { Provider: Provider, Consumer: Consumer }; } function findHostInstance(fiber) { if (!fiber) { return null; } else if (fiber.nodeType) { return fiber; } else if (fiber.tag > 3) { return fiber.stateNode; } else if (fiber.tag < 3) { return findHostInstance(fiber.stateNode); } else if (fiber.refs && fiber.render) { fiber = get(fiber); var childrenMap = fiber.children; if (childrenMap) { for (var i in childrenMap) { var dom = findHostInstance(childrenMap[i]); if (dom) { return dom; } } } } return null; } function findDOMNode(fiber) { if (fiber == null) { return null; } if (fiber.nodeType === 1) { return fiber; } if (!fiber.render) { throw "findDOMNode:invalid type"; } return findHostInstance(fiber); } function DOMElement(type) { this.nodeName = type; this.style = {}; this.children = []; } var NAMESPACE = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xlink: "http://www.w3.org/1999/xlink", xhtml: "http://www.w3.org/1999/xhtml", math: "http://www.w3.org/1998/Math/MathML" }; var fn = (DOMElement.prototype = { contains: Boolean }); String( "replaceChild,appendChild,removeAttributeNS,setAttributeNS,removeAttribute,setAttribute" + ",getAttribute,insertBefore,removeChild,addEventListener,removeEventListener,attachEvent" + ",detachEvent" ).replace(/\w+/g, function(name) { fn[name] = function() { toWarnDev("need implement " + name); }; }); var fakeDoc = new DOMElement(); fakeDoc.createElement = fakeDoc.createElementNS = fakeDoc.createDocumentFragment = function( type ) { return new DOMElement(type); }; fakeDoc.createTextNode = fakeDoc.createComment = Boolean; fakeDoc.documentElement = new DOMElement("html"); fakeDoc.body = new DOMElement("body"); fakeDoc.nodeName = "#document"; fakeDoc.textContent = ""; var win = getWindow(); var inBrowser = !!win.alert; if (!inBrowser) { win.document = fakeDoc; } var document = win.document; var versions = { 88: 7, 80: 6, "00": NaN, "08": NaN }; var msie = document.documentMode || versions[ typeNumber(document.all) + "" + typeNumber(win.XMLHttpRequest) ]; var modern = /NaN|undefined/.test(msie) || msie > 8; function contains(a, b) { if (b) { while ((b = b.parentNode)) { if (b === a) { return true; } } } return false; } var rnumber = /^-?\d+(\.\d+)?$/; function patchStyle(dom, lastStyle, nextStyle) { if (lastStyle === nextStyle) { return; } for (var name in nextStyle) { var val = nextStyle[name]; if (lastStyle[name] !== val) { name = cssName(name, dom); if (val !== 0 && !val) { val = ""; } else if (rnumber.test(val) && !cssNumber[name]) { val = val + "px"; } try { dom.style[name] = val; } catch (e) { console.log( "dom.style[" + name + "] = " + val + "throw error" ); } } } for (var _name in lastStyle) { if (!(_name in nextStyle)) { _name = cssName(_name, dom); dom.style[_name] = ""; } } } var cssNumber = oneObject( "animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom" ); var prefixes = ["", "-webkit-", "-o-", "-moz-", "-ms-"]; var cssMap = oneObject("float", "cssFloat"); function cssName(name, dom) { if (cssMap[name]) { return cssMap[name]; } var host = (dom && dom.style) || {}; for (var i = 0, n = prefixes.length; i < n; i++) { var camelCase = camelize(prefixes[i] + name); if (camelCase in host) { return (cssMap[name] = camelCase); } } return null; } function getSafeValue(value) { switch (typeNumber(value)) { case 2: case 3: case 8: case 4: case 0: return value; default: return ""; } } var duplexMap = { input: { init: function init(node, props) { var defaultValue = props.defaultValue == null ? "" : props.defaultValue; return (node._wrapperState = { initialValue: getSafeValue( props.value != null ? props.value : defaultValue ) }); }, mount: function mount(node, props, state) { if ( props.hasOwnProperty("value") || props.hasOwnProperty("defaultValue") ) { var stateValue = "" + state.initialValue; if (node.value === "" && node.value !== stateValue) { syncValue(node, "value", stateValue); } node.defaultValue = stateValue; } var name = node.name; if (name !== "") { node.name = ""; } node.defaultChecked = !node.defaultChecked; node.defaultChecked = !node.defaultChecked; if (name !== "") { node.name = name; } }, update: function update(node, props) { if (props.checked != null) { syncValue(node, "checked", !!props.checked); } var isActive = node === node.ownerDocument.activeElement; var value = isActive ? node.value : getSafeValue(props.value); if (value != null) { if (props.type === "number") { if ( (value === 0 && node.value === "") || node.value != value ) { syncValue(node, "value", "" + value); } } else if (node.value !== "" + value) { syncValue(node, "value", "" + value); } } if (props.hasOwnProperty("value")) { setDefaultValue(node, props.type, value, isActive); } else if (props.hasOwnProperty("defaultValue")) { setDefaultValue( node, props.type, getSafeValue(props.defaultValue), isActive ); } if (props.checked == null && props.defaultChecked != null) { node.defaultChecked = !!props.defaultChecked; } } }, select: { init: function init(node, props) { var value = props.value; return (node._wrapperState = { initialValue: value != null ? value : props.defaultValue, wasMultiple: !!props.multiple }); }, mount: function mount(node, props) { var multiple = (node.multiple = !!props.multiple); var value = props.value; if (value != null) { updateOptions(node, multiple, value, false); } else if (props.defaultValue != null) { updateOptions(node, multiple, props.defaultValue, true); } }, update: function update(node, props) { node._wrapperState.initialValue = void 666; var wasMultiple = node._wrapperState.wasMultiple; var multiple = (node._wrapperState.wasMultiple = !!props.multiple); var value = props.value; if (value != null) { updateOptions(node, multiple, value, false); } else if (wasMultiple !== multiple) { if (props.defaultValue != null) { updateOptions(node, multiple, props.defaultValue, true); } else { updateOptions( node, multiple, multiple ? [] : "", false ); } } } }, textarea: { init: function init(node, props) { var initialValue = props.value; if (initialValue == null) { var defaultValue = props.defaultValue; var children = props.children; if (children != null) { defaultValue = textContent(node); node.innerHTML = ""; } if (defaultValue == null) { defaultValue = ""; } initialValue = defaultValue; } return (node._wrapperState = { initialValue: "" + initialValue }); }, mount: function mount(node, props, state) { var text = textContent(node); var stateValue = "" + state.initialValue; if (text !== stateValue) { syncValue(node, "value", stateValue); } }, update: function update(node, props) { var value = props.value; if (value != null) { var newValue = "" + value; if (newValue !== node.value) { syncValue(node, "value", newValue); } if (props.defaultValue == null) { node.defaultValue = newValue; } } if (props.defaultValue != null) { node.defaultValue = props.defaultValue; } } }, option: { init: function init() {}, update: function update(node, props) { duplexMap.option.mount(node, props); }, mount: function mount(node, props) { var elems = node.getElementsByTagName("*"); var n = elems.length, el = void 0; if (n) { for (n = n - 1, el; (el = elems[n--]); ) { node.removeChild(el); } } if ("value" in props) { node.duplexValue = node.value = props.value; } else { node.duplexValue = node.text; } } } }; function textContent(node) { return node.textContent || node.innerText; } function setDefaultValue(node, type, value, isActive) { if (type !== "number" || !isActive) { if (value == null) { node.defaultValue = "" + node._wrapperState.initialValue; } else if (node.defaultValue !== "" + value) { node.defaultValue = "" + value; } } } function updateOptions(node, multiple, propValue, setDefaultSelected) { var options = node.options; if (multiple) { var selectedValues = propValue; var selectedValue = {}; for (var i = 0; i < selectedValues.length; i++) { selectedValue["$" + selectedValues[i]] = true; } for (var _i = 0; _i < options.length; _i++) { var selected = selectedValue.hasOwnProperty( "$" + options[_i].duplexValue ); if (options[_i].selected !== selected) { options[_i].selected = selected; } if (selected && setDefaultSelected) { options[_i].defaultSelected = true; } } } else { var _selectedValue = "" + propValue; var defaultSelected = null; for (var _i2 = 0; _i2 < options.length; _i2++) { if (options[_i2].duplexValue === _selectedValue) { options[_i2].selected = true; if (setDefaultSelected) { options[_i2].defaultSelected = true; } return; } if (defaultSelected === null && !options[_i2].disabled) { defaultSelected = options[_i2]; } } if (defaultSelected !== null) { defaultSelected.selected = true; } } } function syncValue(dom, name, value) { dom.__anuSetValue = true; dom[name] = value; dom.__anuSetValue = false; } function duplexAction(fiber) { var dom = fiber.stateNode, name = fiber.name, props = fiber.props, lastProps = fiber.lastProps; var fns = duplexMap[name]; if (name !== "option") { enqueueDuplex(dom); } if (!lastProps || lastProps == emptyObject) { var state = fns.init(dom, props); fns.mount(dom, props, state); } else { fns.update(dom, props); } } var duplexNodes = []; function enqueueDuplex(dom) { if (duplexNodes.indexOf(dom) == -1) { duplexNodes.push(dom); } } function fireDuplex() { var radioMap = {}; if (duplexNodes.length) { do { var dom = duplexNodes.shift(); var e = dom.__events; var fiber = e && e.vnode; if (fiber && !fiber.disposed) { var props = fiber.props; var tag = fiber.name; if (name === "select") { var value = props.value; if (value != null) { updateOptions(dom, !!props.multiple, value, false); } } else { duplexMap[tag].update(dom, props); var _name = props.name; if ( props.type === "radio" && _name != null && !radioMap[_name] ) { radioMap[_name] = 1; collectNamedCousins(dom, _name); } } } } while (duplexNodes.length); } } function collectNamedCousins(rootNode, name) { var queryRoot = rootNode; while (queryRoot.parentNode) { queryRoot = queryRoot.parentNode; } var group = queryRoot.getElementsByTagName("input"); for (var i = 0; i < group.length; i++) { var otherNode = group[i]; if ( otherNode === rootNode || otherNode.name !== name || otherNode.type !== "radio" || otherNode.form !== rootNode.form ) { continue; } enqueueDuplex(otherNode); } } var rform = /textarea|input|select|option/i; var globalEvents = {}; var eventPropHooks = {}; var eventHooks = {}; var eventLowerCache = { onClick: "click", onChange: "change", onWheel: "wheel" }; function eventAction(dom, name, val, lastProps, fiber) { var events = dom.__events || (dom.__events = {}); events.vnode = fiber; var refName = toLowerCase(name.slice(2)); if (val === false) { delete events[refName]; } else { if (!lastProps[name]) { var eventName = getBrowserName(name); var hook = eventHooks[eventName]; if (hook) { hook(dom, eventName); } addGlobalEvent(eventName); } events[refName] = val; } } var isTouch = "ontouchstart" in document; function dispatchEvent(e, type, endpoint) { e = new SyntheticEvent(e); if (type) { e.type = type; } var bubble = e.type, terminal = endpoint || document, hook = eventPropHooks[e.type]; if (hook && false === hook(e)) { return; } Renderer.batchedUpdates(function() { var paths = collectPaths(e.target, terminal, {}); var captured = bubble + "capture"; triggerEventFlow(paths, captured, e); if (!e._stopPropagation) { triggerEventFlow(paths.reverse(), bubble, e); } }, e); } var nodeID = 1; function collectPaths(begin, end, unique) { var paths = []; var node = begin; while (node && node.nodeType == 1) { var checkChange = node; if (node.__events) { var vnode = node.__events.vnode; inner: while (vnode.return) { if (vnode.tag === 5) { node = vnode.stateNode; if (node === end) { return paths; } if (!node) { break inner; } var uid = node.uniqueID || (node.uniqueID = ++nodeID); if (node.__events && !unique[uid]) { unique[uid] = 1; paths.push({ node: node, events: node.__events }); } } vnode = vnode.return; } } if (node === checkChange) { node = node.parentNode; } } return paths; } function triggerEventFlow(paths, prop, e) { for (var i = paths.length; i--; ) { var path = paths[i]; var fn = path.events[prop]; if (isFn(fn)) { e.currentTarget = path.node; fn.call(void 666, e); if (e._stopPropagation) { break; } } } } function addGlobalEvent(name, capture) { if (!globalEvents[name]) { globalEvents[name] = true; addEvent(document, name, dispatchEvent, capture); } } function addEvent(el, type, fn, bool) { if (el.addEventListener) { el.addEventListener(type, fn, bool || false); } else if (el.attachEvent) { el.attachEvent("on" + type, fn); } } var rcapture = /Capture$/; function getBrowserName(onStr) { var lower = eventLowerCache[onStr]; if (lower) { return lower; } var camel = onStr.slice(2).replace(rcapture, ""); lower = camel.toLowerCase(); eventLowerCache[onStr] = lower; return lower; } function getRelatedTarget(e) { if (!e.timeStamp) { e.relatedTarget = e.type === "mouseover" ? e.fromElement : e.toElement; } return e.relatedTarget; } function getTarget(e) { return e.target || e.srcElement; } String("load,error").replace(/\w+/g, function(name) { eventHooks[name] = function(dom, type) { var mark = "__" + type; if (!dom[mark]) { dom[mark] = true; addEvent(dom, type, dispatchEvent); } }; }); String("mouseenter,mouseleave").replace(/\w+/g, function(name) { eventHooks[name] = function(dom, type) { var mark = "__" + type; if (!dom[mark]) { dom[mark] = true; var mask = type === "mouseenter" ? "mouseover" : "mouseout"; addEvent(dom, mask, function(e) { var t = getRelatedTarget(e); if (!t || (t !== dom && !contains(dom, t))) { var common = getLowestCommonAncestor(dom, t); dispatchEvent(e, type, common); } }); } }; }); var specialHandles = {}; function createHandle(name, fn) { return (specialHandles[name] = function(e) { if (fn && fn(e) === false) { return; } dispatchEvent(e, name); }); } function onCompositionStart(e) { e.target.__onComposition = true; } function onCompositionEnd(e) { e.target.__onComposition = false; } var input2change = /text|password|search|url|email/i; if (!document["__input"]) { globalEvents.input = document["__input"] = true; addEvent(document, "compositionstart", onCompositionStart); addEvent(document, "compositionend", onCompositionEnd); addEvent(document, "input", function(e) { var dom = getTarget(e); if (input2change.test(dom.type)) { if (!dom.__onComposition) { dispatchEvent(e, "change"); } } dispatchEvent(e); }); } function getLowestCommonAncestor(instA, instB) { var depthA = 0; for (var tempA = instA; tempA; tempA = tempA.parentNode) { depthA++; } var depthB = 0; for (var tempB = instB; tempB; tempB = tempB.parentNode) { depthB++; } while (depthA - depthB > 0) { instA = instA.parentNode; depthA--; } while (depthB - depthA > 0) { instB = instB.parentNode; depthB--; } var depth = depthA; while (depth--) { if (instA === instB) { return instA; } instA = instA.parentNode; instB = instB.parentNode; } return null; } eventPropHooks.change = function(e) { enqueueDuplex(e.target); }; createHandle("doubleclick"); createHandle("scroll"); createHandle("wheel"); globalEvents.wheel = true; globalEvents.scroll = true; globalEvents.doubleclick = true; if (isTouch) { eventHooks.click = eventHooks.clickcapture = function(dom) { dom.onclick = dom.onclick || noop; }; } eventPropHooks.click = function(e) { return !e.target.disabled; }; var fixWheelType = document.onwheel !== void 666 ? "wheel" : "onmousewheel" in document ? "mousewheel" : "DOMMouseScroll"; eventHooks.wheel = function(dom) { addEvent(dom, fixWheelType, specialHandles.wheel); }; eventPropHooks.wheel = function(event) { event.deltaX = "deltaX" in event ? event.deltaX : "wheelDeltaX" in event ? -event.wheelDeltaX : 0; event.deltaY = "deltaY" in event ? event.deltaY : "wheelDeltaY" in event ? -event.wheelDeltaY : "wheelDelta" in event ? -event.wheelDelta : 0; }; var focusMap = { focus: "focus", blur: "blur" }; var innerFocus = void 0; function blurFocus(e) { var dom = getTarget(e); var type = focusMap[e.type]; if (Renderer.inserting) { if (type === "blur") { innerFocus = true; Renderer.inserting.focus(); return; } } if (innerFocus) { innerFocus = false; return; } do { if (dom.nodeType === 1) { if (dom.__events && dom.__events[type]) { dispatchEvent(e, type); break; } } else { break; } } while ((dom = dom.parentNode)); } "blur,focus".replace(/\w+/g, function(type) { globalEvents[type] = true; if (modern) { var mark = "__" + type; if (!document[mark]) { document[mark] = true; addEvent(document, type, blurFocus, true); } } else { eventHooks[type] = function(dom, name) { addEvent(dom, focusMap[name], blurFocus); }; } }); eventHooks.scroll = function(dom, name) { addEvent(dom, name, specialHandles[name]); }; eventHooks.doubleclick = function(dom, name) { addEvent(document, "dblclick", specialHandles[name]); }; function SyntheticEvent(event) { if (event.nativeEvent) { return event; } for (var i in event) { if (!eventProto[i]) { this[i] = event[i]; } } if (!this.target) { this.target = event.srcElement; } this.fixEvent(); this.timeStamp = new Date() - 0; this.nativeEvent = event; } var eventProto = (SyntheticEvent.prototype = { fixEvent: noop, fixHooks: noop, persist: noop, preventDefault: function preventDefault() { var e = this.nativeEvent || {}; e.returnValue = this.returnValue = false; if (e.preventDefault) { e.preventDefault(); } }, stopPropagation: function stopPropagation() { var e = this.nativeEvent || {}; e.cancelBubble = this._stopPropagation = true; if (e.stopPropagation) { e.stopPropagation(); } }, stopImmediatePropagation: function stopImmediatePropagation() { this.stopPropagation(); this.stopImmediate = true; }, toString: function toString() { return "[object Event]"; } }); Renderer.eventSystem = { eventPropHooks: eventPropHooks, addEvent: addEvent, dispatchEvent: dispatchEvent, SyntheticEvent: SyntheticEvent }; var NOWORK = 1; var WORKING = 2; var PLACE = 3; var CONTENT = 5; var ATTR = 7; var DUPLEX = 11; var DETACH = 13; var HOOK = 17; var REF = 19; var CALLBACK = 23; var CAPTURE = 29; var effectNames = [DUPLEX, HOOK, REF, DETACH, CALLBACK, CAPTURE].sort( function(a, b) { return a - b; } ); var effectLength = effectNames.length; var isSpecialAttr = { style: 1, autoFocus: 1, innerHTML: 1, dangerouslySetInnerHTML: 1 }; var svgCache = {}; var strategyCache = {}; var svgCamelCase = { w: { r: 1, b: 1, t: 1 }, e: { n: 1, t: 1, f: 1, p: 1, c: 1, m: 1, a: 2, u: 1, s: 1, v: 1 }, o: { r: 1 }, c: { m: 1 }, p: { p: 1 }, t: { s: 2, t: 1, u: 1, c: 1, d: 1, o: 1, x: 1, y: 1, l: 1 }, l: { r: 1, m: 1, u: 1, b: -1, l: -1, s: -1 }, r: { r: 1, u: 2, h: 1, w: 1, c: 1, e: 1 }, h: { r: 1, a: 1, l: 1, t: 1 }, y: { p: 1, s: 1, t: 1, c: 1 }, g: { c: 1 }, k: { a: -1, h: -1, r: -1, s: -1, t: -1, c: 1, u: 1 }, m: { o: 1, l: 1, a: 1 }, n: { c: 1, t: 1, u: 1 }, s: { a: 3 }, f: { x: 1, y: 1 }, d: { e: 1, f: 1, m: 1, d: 1 }, x: { c: 1 } }; var specialSVGPropertyName = { "overline-thickness": 2, "underline-thickness": 2, "overline-position": 2, "underline-position": 2, "stroke-miterlimit": 2, "baseline-shift": 2, "clip-path": 2, "font-size": 2, "font-size-adjust": 2, "font-stretch": 2, "font-style": 2, "text-decoration": 2, "vert-origin-x": 2, "vert-origin-y": 2, "paint-order": 2, "fill-rule": 2, "color-rendering": 2, "marker-end": 2, "pointer-events": 2, "units-per-em": 2, "strikethrough-thickness": 2, "lighting-color": 2 }; var repeatedKey = [ "et", "ep", "em", "es", "pp", "ts", "td", "to", "lr", "rr", "re", "ht", "gc" ]; function createRepaceFn(split) { return function(match) { return match.slice(0, 1) + split + match.slice(1).toLowerCase(); }; } var rhump = /([a-z])([A-Z])/; var toHyphen = createRepaceFn("-"); var toColon = createRepaceFn(":"); function getSVGAttributeName(name) { if (svgCache[name]) { return svgCache[name]; } var match = name.match(rhump); if (!match) { return (svgCache[name] = name); } var prefix = match[1]; var postfix = match[2].toLowerCase(); var orig = name; var count = svgCamelCase[prefix] && svgCamelCase[prefix][postfix]; if (count) { if (count === -1) { return (svgCache[orig] = { name: name.replace(rhump, toColon), ifSpecial: true }); } if (~repeatedKey.indexOf(prefix + postfix)) { var dashName = name.replace(rhump, toHyphen); if (specialSVGPropertyName[dashName]) { name = dashName; } } } else { name = name.replace(rhump, toHyphen); } return (svgCache[orig] = name); } function diffProps(dom, lastProps, nextProps, fiber) { var isSVG = fiber.namespaceURI === NAMESPACE.svg; var tag = fiber.type; var continueProps = skipProps; if (!isSVG && rform.test(fiber.type)) { continueProps = duplexProps; if (!("onChange" in nextProps)) { eventAction(dom, "onChange", noop, lastProps, fiber); } fiber.effectTag *= DUPLEX; fiber.onDuplex = continueProps.onDuplex; } for (var name in nextProps) { if (continueProps[name]) { continue; } var val = nextProps[name]; if (val !== lastProps[name]) { var which = tag + isSVG + name; var action = strategyCache[which]; if (!action) { action = strategyCache[which] = getPropAction( dom, name, isSVG ); } actionStrategy[action](dom, name, val, lastProps, fiber); } } for (var _name in lastProps) { if (continueProps[_name]) { continue; } if (!nextProps.hasOwnProperty(_name)) { var _which = tag + isSVG + _name; var _action = strategyCache[_which]; if (!_action) { continue; } actionStrategy[_action](dom, _name, false, lastProps, fiber); } } } function isBooleanAttr(dom, name) { var val = dom[name]; return val === true || val === false; } function isEventName(name) { return /^on[A-Z]/.test(name); } function getPropAction(dom, name, isSVG) { if (isSVG && name === "className") { return "svgClass"; } if (isSpecialAttr[name]) { return name; } if (isEventName(name)) { return "event"; } if (isSVG) { return "svgAttr"; } if (name === "width" || name === "height") { return "attribute"; } if (isBooleanAttr(dom, name)) { return "booleanAttr"; } return name.indexOf("data-") === 0 || dom[name] === void 666 ? "attribute" : "property"; } var builtinStringProps = { className: 1, title: 1, name: 1, type: 1, alt: 1, lang: 1 }; var skipProps = { innerHTML: 1, children: 1, onDuplex: noop }; var duplexProps = { value: 1, defaultValue: 1, checked: 1, innerHTML: 1, children: 1 }; var actionStrategy = { style: function style(dom, _, val, lastProps) { patchStyle(dom, lastProps.style || emptyObject, val || emptyObject); }, autoFocus: function autoFocus(dom) { if ( /input|text/i.test(dom.nodeName) || dom.contentEditable === "true" ) { dom.focus(); } }, svgClass: function svgClass(dom, name, val) { if (!val) { dom.removeAttribute("class"); } else { dom.setAttribute("class", val); } }, svgAttr: function svgAttr(dom, name, val) { var method = typeNumber(val) < 3 && !val ? "removeAttribute" : "setAttribute"; var nameRes = getSVGAttributeName(name); if (nameRes.ifSpecial) { var prefix = nameRes.name.split(":")[0]; dom[method + "NS"](NAMESPACE[prefix], nameRes.name, val || ""); } else { dom[method](nameRes, val || ""); } }, booleanAttr: function booleanAttr(dom, name, val) { dom[name] = !!val; if (dom[name] === false) { dom.removeAttribute(name); } else if (dom[name] === "false") { dom[name] = ""; } }, attribute: function attribute(dom, name, val) { if (val == null || val === false) { return dom.removeAttribute(name); } try { dom.setAttribute(name, val); } catch (e) { console.warn("setAttribute error", name, val); } }, property: function property(dom, name, val) { try { if (!val && val !== 0) { if (builtinStringProps[name]) { dom[name] = ""; } else { dom.removeAttribute(name); } } else { dom[name] = val; } } catch (e) { try { dom.setAttribute(name, val); } catch (e) {} } }, event: eventAction, dangerouslySetInnerHTML: function dangerouslySetInnerHTML( dom, name, val, lastProps ) { var oldhtml = lastProps[name] && lastProps[name].__html; var html = val && val.__html; html = html == null ? "" : html; if (html !== oldhtml) { dom.innerHTML = html; } } }; function UpdateQueue() { return { pendingStates: [], pendingCbs: [] }; } function createInstance(fiber, context) { var updater = { mountOrder: Renderer.mountOrder++, enqueueSetState: returnFalse, isMounted: isMounted }; var props = fiber.props, type = fiber.type, tag = fiber.tag, ref = fiber.ref, isStateless = tag === 1, lastOwn = Renderer.currentOwner, instance = { refs: {}, props: props, context: context, ref: ref, __proto__: type.prototype }; fiber.errorHook = "constructor"; try { if (isStateless) { extend(instance, { __isStateless: true, __init: true, renderImpl: type, render: function f() { var a = this.__keep; if (a) { delete this.__keep; return a.value; } a = this.renderImpl(this.props, this.context); if (a && a.render) { delete this.__isStateless; for (var i in a) { instance[i == "render" ? "renderImpl" : i] = a[i]; } } else if (this.__init) { this.__keep = { value: a }; } return a; } }); Renderer.currentOwner = instance; if (type.render) { instance.render = function() { return type.render(this.props, this.ref); }; } else { instance.render(); delete instance.__init; } } else { instance = new type(props, context); if (!(instance instanceof Component)) { throw type.name + " doesn't extend React.Component"; } } } finally { Renderer.currentOwner = lastOwn; fiber.stateNode = instance; fiber.updateQueue = UpdateQueue(); instance._reactInternalFiber = fiber; instance.updater = updater; instance.context = context; updater.enqueueSetState = Renderer.updateComponent; if (type[gDSFP] || instance[gSBU]) { instance.__useNewHooks = true; } } return instance; } function Fiber(vnode) { extend(this, vnode); var type = vnode.type || "ProxyComponent(react-hot-loader)"; this.name = type.displayName || type.name || type; this.effectTag = 1; } function pushError(fiber, hook, error) { var names = []; var boundary = findCatchComponent(fiber, names, hook); var stack = describeError(names, hook); if (boundary) { if (fiber.hasMounted) { } else { fiber.stateNode = { updater: fakeObject }; fiber.effectTag = NOWORK; } var values = boundary.capturedValues || (boundary.capturedValues = []); values.push(error, { componentStack: stack }); } else { var p = fiber.return; for (var i in p.children) { if (p.children[i] == fiber) { fiber.type = noop; } } while (p) { p._hydrating = false; p = p.return; } if (!Renderer.catchError) { Renderer.catchStack = stack; Renderer.catchError = error; } } } function guardCallback(host, hook, args) { try { return applyCallback(host, hook, args); } catch (error) { pushError(get(host), hook, error); } } function applyCallback(host, hook, args) { var fiber = host._reactInternalFiber; fiber.errorHook = hook; var fn = host[hook]; if (hook == "componentWillUnmount") { host[hook] = noop; } if (fn) { return fn.apply(host, args); } return true; } function describeError(names, hook) { var segments = ["**" + hook + "** method occur error "]; names.forEach(function(name, i) { if (names[i + 1]) { segments.push( "in " + name + " (created By " + names[i + 1] + ")" ); } }); return segments.join("\n\r").trim(); } function findCatchComponent(fiber, names, hook) { var instance = void 0, name = void 0, topFiber = fiber, retry = void 0, boundary = void 0; while (fiber) { name = fiber.name; if (fiber.tag < 4) { names.push(name); instance = fiber.stateNode || {}; if (instance.componentDidCatch && !boundary) { if (!fiber.caughtError && topFiber !== fiber) { boundary = fiber; } else if (fiber.caughtError) { retry = fiber; } } } else if (fiber.tag === 5) { names.push(name); } fiber = fiber.return; if (boundary) { var boundaries = Renderer.boundaries; if (!retry || retry !== boundary) { var effectTag = boundary.effectTag; var f = boundary.alternate; if (f && !f.catchError) { f.forward = boundary.forward; f.sibling = boundary.sibling; if (boundary.return.child == boundary) { boundary.return.child = f; } boundary = f; } if (!boundary.catchError) { if ( hook == "componentWillUnmount" || hook == "componentDidUpdate" ) { boundary.effectTag = CAPTURE; } else { boundary.effectTag = effectTag * CAPTURE; } boundaries.unshift(boundary); boundary.catchError = true; } if (retry) { var arr = boundary.effects || (boundary.effects = []); arr.push(retry); } } return boundary; } } } function removeFormBoundaries(fiber) { delete fiber.catchError; var arr = Renderer.boundaries; var index = arr.indexOf(fiber); if (index !== -1) { arr.splice(index, 1); } } function detachFiber(fiber, effects$$1) { fiber.effectTag = DETACH; effects$$1.push(fiber); fiber.disposed = true; for (var child = fiber.child; child; child = child.sibling) { detachFiber(child, effects$$1); } } function getInsertPoint(fiber) { var parent = fiber.parent; while (fiber) { if (fiber.stateNode === parent || fiber.isPortal) { return null; } var found = forward(fiber); if (found) { return found; } fiber = fiber.return; } } function setInsertPoints(children) { for (var i in children) { var child = children[i]; if (child.disposed) { continue; } if (child.tag > 4) { var p = child.parent; child.effectTag = PLACE; child.forwardFiber = p.insertPoint; p.insertPoint = child; for ( var pp = child.return; pp && pp.effectTag === NOWORK; pp = pp.return ) { pp.effectTag = WORKING; } } else { if (child.child) { setInsertPoints(child.children); } } } } function forward(fiber) { var found; while (fiber.forward) { fiber = fiber.forward; if (fiber.disposed || fiber.isPortal) { continue; } if (fiber.tag > 3) { return fiber; } if (fiber.child) { found = downward(fiber); if (found) { return found; } } } } function downward(fiber) { var found; while (fiber.lastChild) { fiber = fiber.lastChild; if (fiber.disposed || fiber.isPortal) { return; } if (fiber.tag > 3) { return fiber; } if (fiber.forward) { found = forward(fiber); if (found) { return found; } } } } function reconcileDFS(fiber, info, deadline, ENOUGH_TIME) { var topWork = fiber; outerLoop: while (fiber) { if (fiber.disposed || deadline.timeRemaining() <= ENOUGH_TIME) { break; } var occurError = void 0; if (fiber.tag < 3) { var keepbook = Renderer.currentOwner; try { updateClassComponent(fiber, info); } catch (e) { occurError = true; pushError(fiber, fiber.errorHook, e); } Renderer.currentOwner = keepbook; if (fiber.batching) { delete fiber.updateFail; delete fiber.batching; } } else { updateHostComponent(fiber, info); } if (fiber.child && !fiber.updateFail && !occurError) { fiber = fiber.child; continue outerLoop; } var f = fiber; while (f) { var instance = f.stateNode; if (f.tag > 3 || f.shiftContainer) { if (f.shiftContainer) { delete f.shiftContainer; info.containerStack.shift(); } } else { var updater = instance && instance.updater; if (f.shiftContext) { delete f.shiftContext; info.contextStack.shift(); } if (f.hasMounted && instance[gSBU]) { updater.snapshot = guardCallback(instance, gSBU, [ updater.prevProps, updater.prevState ]); } } if (f === topWork) { break outerLoop; } if (f.sibling) { fiber = f.sibling; continue outerLoop; } f = f.return; } } } function updateHostComponent(fiber, info) { var props = fiber.props, tag = fiber.tag, prev = fiber.alternate; if (!fiber.stateNode) { fiber.parent = info.containerStack[0]; fiber.stateNode = Renderer.createElement(fiber); } var parent = fiber.parent; fiber.forwardFiber = parent.insertPoint; parent.insertPoint = fiber; fiber.effectTag = PLACE; if (tag === 5) { fiber.stateNode.insertPoint = null; info.containerStack.unshift(fiber.stateNode); fiber.shiftContainer = true; fiber.effectTag *= ATTR; if (fiber.ref) { fiber.effectTag *= REF; } diffChildren(fiber, props.children); } else { if (!prev || prev.props !== props) { fiber.effectTag *= CONTENT; } } } function mergeStates(fiber, nextProps) { var instance = fiber.stateNode, pendings = fiber.updateQueue.pendingStates, n = pendings.length, state = fiber.memoizedState || instance.state; if (n === 0) { return state; } var nextState = extend({}, state); var fail = true; for (var i = 0; i < n; i++) { var pending = pendings[i]; if (pending) { if (isFn(pending)) { var a = pending.call(instance, nextState, nextProps); if (!a) { continue; } else { pending = a; } } fail = false; extend(nextState, pending); } } if (fail) { return state; } else { return (fiber.memoizedState = nextState); } } function updateClassComponent(fiber, info) { var type = fiber.type, instance = fiber.stateNode, props = fiber.props; var contextStack = info.contextStack, containerStack = info.containerStack; var newContext = getMaskedContext( instance, type.contextTypes, contextStack ); if (instance == null) { fiber.parent = type === AnuPortal ? props.parent : containerStack[0]; instance = createInstance(fiber, newContext); cacheContext(instance, contextStack[0], newContext); } instance._reactInternalFiber = fiber; var isStateful = !instance.__isStateless; if (isStateful) { var updateQueue = fiber.updateQueue; delete fiber.updateFail; if (fiber.hasMounted) { applybeforeUpdateHooks( fiber, instance, props, newContext, contextStack ); } else { applybeforeMountHooks( fiber, instance, props, newContext, contextStack ); } if (fiber.memoizedState) { instance.state = fiber.memoizedState; } fiber.batching = updateQueue.batching; var cbs = updateQueue.pendingCbs; if (cbs.length) { fiber.pendingCbs = cbs; fiber.effectTag *= CALLBACK; } if (fiber.ref) { fiber.effectTag *= REF; } } else if (type === AnuPortal) { containerStack.unshift(fiber.parent); fiber.shiftContainer = true; } instance.context = newContext; fiber.memoizedProps = instance.props = props; fiber.memoizedState = instance.state; if (instance.getChildContext) { var context = instance.getChildContext(); context = Object.assign({}, contextStack[0], context); fiber.shiftContext = true; contextStack.unshift(context); } if (isStateful) { if (fiber.parent && fiber.hasMounted && fiber.dirty) { fiber.parent.insertPoint = getInsertPoint(fiber); } if (fiber.updateFail) { cloneChildren(fiber); fiber._hydrating = false; return; } delete fiber.dirty; fiber.effectTag *= HOOK; } else { fiber.effectTag = WORKING; } if (fiber.catchError) { return; } fiber._hydrating = true; Renderer.currentOwner = instance; var rendered = applyCallback(instance, "render", []); diffChildren(fiber, rendered); } function applybeforeMountHooks(fiber, instance, newProps) { fiber.setout = true; if (instance.__useNewHooks) { setStateByProps(instance, fiber, newProps, instance.state); } else { callUnsafeHook(instance, "componentWillMount", []); } delete fiber.setout; mergeStates(fiber, newProps); fiber.updateQueue = UpdateQueue(); } function applybeforeUpdateHooks( fiber, instance, newProps, newContext, contextStack ) { var oldProps = fiber.memoizedProps; var oldState = fiber.memoizedState; var updater = instance.updater; updater.prevProps = oldProps; updater.prevState = oldState; var propsChanged = oldProps !== newProps; var contextChanged = instance.context !== newContext; fiber.setout = true; if (!instance.__useNewHooks) { if (propsChanged || contextChanged) { var prevState = instance.state; callUnsafeHook(instance, "componentWillReceiveProps", [ newProps, newContext ]); if (prevState !== instance.state) { fiber.memoizedState = instance.state; } } } var newState = (instance.state = oldState); var updateQueue = fiber.updateQueue; mergeStates(fiber, newProps); newState = fiber.memoizedState; setStateByProps(instance, fiber, newProps, newState); newState = fiber.memoizedState; delete fiber.setout; fiber._hydrating = true; if ( !propsChanged && newState === oldState && contextStack.length == 1 && !updateQueue.isForced ) { fiber.updateFail = true; } else { var args = [newProps, newState, newContext]; fiber.updateQueue = UpdateQueue(); if ( !updateQueue.isForced && !applyCallback(instance, "shouldComponentUpdate", args) ) { fiber.updateFail = true; } else if (!instance.__useNewHooks) { callUnsafeHook(instance, "componentWillUpdate", args); } } } function callUnsafeHook(a, b, c) { applyCallback(a, b, c); applyCallback(a, "UNSAFE_" + b, c); } function isSameNode(a, b) { if (a.type === b.type && a.key === b.key) { return true; } } function setStateByProps(instance, fiber, nextProps, prevState) { fiber.errorHook = gDSFP; var fn = fiber.type[gDSFP]; if (fn) { var partialState = fn.call(null, nextProps, prevState); if (typeNumber(partialState) === 8) { fiber.memoizedState = Object.assign( {}, prevState, partialState ); } } } function cloneChildren(fiber) { var prev = fiber.alternate; if (prev && prev.child) { var pc = prev.children; var cc = (fiber.children = {}); fiber.child = prev.child; fiber.lastChild = prev.lastChild; for (var i in pc) { var a = pc[i]; a.return = fiber; cc[i] = a; } setInsertPoints(cc); } } function cacheContext(instance, unmaskedContext, context) { instance.__unmaskedContext = unmaskedContext; instance.__maskedContext = context; } function getMaskedContext(instance, contextTypes, contextStack) { if (instance && !contextTypes) { return instance.context; } var context = {}; if (!contextTypes) { return context; } var unmaskedContext = contextStack[0]; if (instance) { var cachedUnmasked = instance.__unmaskedContext; if (cachedUnmasked === unmaskedContext) { return instance.__maskedContext; } } for (var key in contextTypes) { if (contextTypes.hasOwnProperty(key)) { context[key] = unmaskedContext[key]; } } if (instance) { cacheContext(instance, unmaskedContext, context); } return context; } function diffChildren(parentFiber, children) { var oldFibers = parentFiber.children; if (oldFibers) { parentFiber.oldChildren = oldFibers; } else { oldFibers = {}; } var newFibers = fiberizeChildren(children, parentFiber); var effects$$1 = parentFiber.effects || (parentFiber.effects = []); var matchFibers = new Object(); delete parentFiber.child; for (var i in oldFibers) { var newFiber = newFibers[i]; var oldFiber = oldFibers[i]; if (newFiber && newFiber.type === oldFiber.type) { matchFibers[i] = oldFiber; if (newFiber.key != null) { oldFiber.key = newFiber.key; } continue; } detachFiber(oldFiber, effects$$1); } var prevFiber = void 0, index = 0; for (var _i in newFibers) { var _newFiber = newFibers[_i]; var _oldFiber = matchFibers[_i]; var alternate = null; if (_oldFiber) { if (isSameNode(_oldFiber, _newFiber)) { alternate = new Fiber(_oldFiber); var oldRef = _oldFiber.ref; _newFiber = extend(_oldFiber, _newFiber); delete _newFiber.disposed; _newFiber.alternate = alternate; if (_newFiber.ref && _newFiber.deleteRef) { delete _newFiber.ref; delete _newFiber.deleteRef; } if (oldRef && oldRef !== _newFiber.ref) { effects$$1.push(alternate); } if (_newFiber.tag === 5) { _newFiber.lastProps = alternate.props; } } else { detachFiber(_oldFiber, effects$$1); } } else { _newFiber = new Fiber(_newFiber); } newFibers[_i] = _newFiber; _newFiber.index = index++; _newFiber.return = parentFiber; if (prevFiber) { prevFiber.sibling = _newFiber; _newFiber.forward = prevFiber; } else { parentFiber.child = _newFiber; _newFiber.forward = null; } prevFiber = _newFiber; } parentFiber.lastChild = prevFiber; if (prevFiber) { prevFiber.sibling = null; } } var Unbatch = miniCreateClass( function Unbatch(props) { this.state = { child: props.child }; }, Component, { render: function render() { return this.state.child; } } ); function getDOMNode() { return this; } var Refs = { fireRef: function fireRef(fiber, dom) { var ref = fiber.ref; var owner = fiber._owner; try { var number = typeNumber(ref); refStrategy[number](owner, ref, dom); if (owner && owner.__isStateless) { delete fiber.ref; fiber.deleteRef = true; } } catch (e) { pushError(fiber, "ref", e); } } }; var refStrategy = { 4: function _(owner, ref, dom) { if (dom === null) { delete owner.refs[ref]; } else { if (dom.nodeType) { dom.getDOMNode = getDOMNode; } owner.refs[ref] = dom; } }, 5: function _(owner, ref, dom) { ref(dom); }, 8: function _(owner, ref, dom) { ref.current = dom; } }; var domFns = ["insertElement", "updateContent", "updateAttribute"]; var domEffects = [PLACE, CONTENT, ATTR]; var domRemoved = []; function commitDFSImpl(fiber) { var topFiber = fiber; outerLoop: while (true) { if (fiber.effects && fiber.effects.length) { fiber.effects.forEach(disposeFiber); delete fiber.effects; } if (fiber.effectTag % PLACE == 0) { domEffects.forEach(function(effect, i) { if (fiber.effectTag % effect == 0) { Renderer[domFns[i]](fiber); fiber.effectTag /= effect; } }); fiber.hasMounted = true; } else { if (fiber.catchError) { removeFormBoundaries(fiber); disposeFibers(fiber); } } if (fiber.updateFail) { delete fiber.updateFail; } if (fiber.child && fiber.child.effectTag > NOWORK) { fiber = fiber.child; continue; } var f = fiber; while (f) { if (f.effectTag === WORKING) { f.effectTag = NOWORK; } else if (f.effectTag > WORKING) { commitEffects(f); if (f.capturedValues) { f.effectTag = CAPTURE; } } if (f === topFiber || f.hostRoot) { break outerLoop; } if (f.sibling) { fiber = f.sibling; continue outerLoop; } f = f.return; } } } function commitDFS(effects$$1) { Renderer.batchedUpdates(function() { var el; while ((el = effects$$1.shift())) { if (el.effectTag === DETACH && el.caughtError) { disposeFiber(el); } else { commitDFSImpl(el); } if (domRemoved.length) { domRemoved.forEach(Renderer.removeElement); domRemoved.length = 0; } } }, {}); var error = Renderer.catchError; if (error) { delete Renderer.catchError; throw error; } } function commitEffects(fiber) { var instance = fiber.stateNode || emptyObject; var amount = fiber.effectTag; var updater = instance.updater || fakeObject; for (var i = 0; i < effectLength; i++) { var effectNo = effectNames[i]; if (effectNo > amount) { break; } if (amount % effectNo === 0) { amount /= effectNo; switch (effectNo) { case WORKING: break; case DUPLEX: Renderer.updateControlled(fiber); break; case HOOK: if (fiber.hasMounted) { guardCallback(instance, "componentDidUpdate", [ updater.prevProps, updater.prevState, updater.snapshot ]); } else { fiber.hasMounted = true; guardCallback(instance, "componentDidMount", []); } delete fiber._hydrating; if (fiber.catchError) { fiber.effectTag = amount; return; } break; case REF: Refs.fireRef(fiber, instance); break; case CALLBACK: var queue = fiber.pendingCbs; fiber._hydrating = true; queue.forEach(function(fn) { fn.call(instance); }); delete fiber._hydrating; delete fiber.pendingCbs; break; case CAPTURE: var values = fiber.capturedValues; fiber.caughtError = true; var a = values.shift(); var b = values.shift(); if (!values.length) { fiber.effectTag = amount; delete fiber.capturedValues; } instance.componentDidCatch(a, b); break; } } } fiber.effectTag = NOWORK; } function disposeFibers(fiber) { var list = [fiber.oldChildren, fiber.children]; for (var i = 0; i < 2; i++) { var c = list[i]; if (c) { for (var _i in c) { var child = c[_i]; if (!child.disposed && child.hasMounted) { disposeFiber(child, true); disposeFibers(child); } } } } delete fiber.child; delete fiber.lastChild; delete fiber.oldChildren; fiber.children = {}; } function disposeFiber(fiber, force) { var stateNode = fiber.stateNode, effectTag = fiber.effectTag; if (!stateNode) { return; } if (!stateNode.__isStateless && fiber.ref) { Refs.fireRef(fiber, null); } if (effectTag % DETACH == 0 || force === true) { if (fiber.tag > 3) { domRemoved.push(fiber); } else { if (fiber.hasMounted) { stateNode.updater.enqueueSetState = returnFalse; guardCallback(stateNode, "componentWillUnmount", []); delete fiber.stateNode; } } delete fiber.alternate; delete fiber.hasMounted; fiber.disposed = true; } fiber.effectTag = NOWORK; } var macrotasks = Renderer.macrotasks; var boundaries = Renderer.boundaries; var batchedtasks = []; function render(vnode, root, callback) { var container = createContainer(root), immediateUpdate = false; if (!container.hostRoot) { var fiber = new Fiber({ type: Unbatch, tag: 2, props: {}, hasMounted: true, memoizedState: {}, return: container }); fiber.index = 0; container.child = fiber; var instance = createInstance(fiber, {}); container.hostRoot = instance; immediateUpdate = true; Renderer.emptyElement(container); } var carrier = {}; updateComponent( container.hostRoot, { child: vnode }, wrapCb(callback, carrier), immediateUpdate ); return carrier.instance; } function wrapCb(fn, carrier) { return function() { var fiber = get(this); var target = fiber.child ? fiber.child.stateNode : null; fn && fn.call(target); carrier.instance = target; }; } function performWork(deadline) { workLoop(deadline); if (boundaries.length) { macrotasks.unshift.apply(macrotasks, boundaries); boundaries.length = 0; } topFibers.forEach(function(el) { var microtasks = el.microtasks; while ((el = microtasks.shift())) { if (!el.disposed) { macrotasks.push(el); } } }); if (macrotasks.length) { requestIdleCallback(performWork); } } var ENOUGH_TIME = 1; var deadline = { didTimeout: false, timeRemaining: function timeRemaining() { return 2; } }; function requestIdleCallback(fn) { fn(deadline); } Renderer.scheduleWork = function() { performWork(deadline); }; var isBatching = false; Renderer.batchedUpdates = function(callback, event) { var keepbook = isBatching; isBatching = true; try { event && Renderer.fireMiddlewares(true); return callback(event); } finally { isBatching = keepbook; if (!isBatching) { var el = void 0; while ((el = batchedtasks.shift())) { if (!el.disabled) { macrotasks.push(el); } } event && Renderer.fireMiddlewares(); Renderer.scheduleWork(); } } }; function workLoop(deadline) { var fiber = macrotasks.shift(), info = void 0; if (fiber) { if (fiber.type === Unbatch) { info = fiber.return; } else { var dom = getContainer(fiber); info = { containerStack: [dom], contextStack: [fiber.stateNode.__unmaskedContext] }; } reconcileDFS(fiber, info, deadline, ENOUGH_TIME); updateCommitQueue(fiber); resetStack(info); if (macrotasks.length && deadline.timeRemaining() > ENOUGH_TIME) { workLoop(deadline); } else { commitDFS(effects); } } } function updateCommitQueue(fiber) { var hasBoundary = boundaries.length; if (fiber.type !== Unbatch) { if (hasBoundary) { arrayPush.apply(effects, boundaries); } else { effects.push(fiber); } } else { effects.push(fiber); } boundaries.length = 0; } function mergeUpdates(fiber, state, isForced, callback) { var updateQueue = fiber.updateQueue; if (isForced) { updateQueue.isForced = true; } if (state) { updateQueue.pendingStates.push(state); } if (isFn(callback)) { updateQueue.pendingCbs.push(callback); } } function fiberContains(p, son) { while (son.return) { if (son.return === p) { return true; } son = son.return; } } function getQueue(fiber) { while (fiber) { if (fiber.microtasks) { return fiber.microtasks; } fiber = fiber.return; } } function pushChildQueue(fiber, queue) { var maps = {}; for (var i = queue.length, el; (el = queue[--i]); ) { if (fiber === el) { queue.splice(i, 1); continue; } else if (fiberContains(fiber, el)) { queue.splice(i, 1); continue; } maps[el.stateNode.updater.mountOrder] = true; } var enqueue = true, p = fiber, hackSCU = []; while (p.return) { p = p.return; var instance = p.stateNode; if ( instance.refs && !instance.__isStateless && p.type !== Unbatch ) { hackSCU.push(p); var u = instance.updater; if (maps[u.mountOrder]) { enqueue = false; break; } } } hackSCU.forEach(function(el) { el.updateQueue.batching = true; }); if (enqueue) { queue.push(fiber); } } function updateComponent(instance, state, callback, immediateUpdate) { var fiber = get(instance); fiber.dirty = true; var sn = typeNumber(state); var isForced = state === true; var microtasks = getQueue(fiber); state = isForced ? null : sn === 5 || sn === 8 ? state : null; if (fiber.setout) { immediateUpdate = false; } else if ((isBatching && !immediateUpdate) || fiber._hydrating) { pushChildQueue(fiber, batchedtasks); } else { immediateUpdate = immediateUpdate || !fiber._hydrating; pushChildQueue(fiber, microtasks); } mergeUpdates(fiber, state, isForced, callback); if (immediateUpdate) { Renderer.scheduleWork(); } } Renderer.updateComponent = updateComponent; function validateTag(el) { return el && el.appendChild; } function createContainer(root, onlyGet, validate) { validate = validate || validateTag; if (!validate(root)) { throw "container is not a element"; } root.anuProp = 2018; var useProp = root.anuProp === 2018; if (useProp) { root.anuProp = void 0; if (get(root)) { return get(root); } } else { var index = topNodes.indexOf(root); if (index !== -1) { return topFibers[index]; } } if (onlyGet) { return null; } var container = new Fiber({ stateNode: root, tag: 5, name: "hostRoot", contextStack: [{}], containerStack: [root], microtasks: [], type: root.nodeName || root.type }); if (useProp) { root._reactInternalFiber = container; } topNodes.push(root); topFibers.push(container); return container; } function getContainer(p) { if (p.parent) { return p.parent; } while ((p = p.return)) { if (p.tag === 5) { return p.stateNode; } } } var reuseTextNodes = []; function createElement$1(vnode) { var p = vnode.return; var type = vnode.type, props = vnode.props, ns = vnode.ns; switch (type) { case "#text": var node = reuseTextNodes.pop(); if (node) { node.nodeValue = props; return node; } return document.createTextNode(props); case "#comment": return document.createComment(props); case "svg": ns = NAMESPACE.svg; break; case "math": ns = NAMESPACE.math; break; default: do { var s = p.name == "AnuPortal" ? p.props.parent : p.tag === 5 ? p.stateNode : null; if (s) { ns = s.namespaceURI; if ( p.type === "foreignObject" || ns === NAMESPACE.xhtml ) { ns = ""; } break; } } while ((p = p.return)); break; } try { if (ns) { vnode.namespaceURI = ns; return document.createElementNS(ns, type); } } catch (e1) {} var elem = document.createElement(type); var inputType = props && props.type; if (inputType && elem.uniqueID) { try { elem = document.createElement( "<" + type + " type='" + inputType + "'/>" ); } catch (e2) {} } return elem; } var hyperspace = document.createElement("div"); function _emptyElement(node) { while (node.firstChild) { node.removeChild(node.firstChild); } } Renderer.middleware({ begin: noop, end: fireDuplex }); function _removeElement(node) { if (!node) { return; } var nodeType = node.nodeType; if (nodeType === 1 && node.__events) { node.__events = null; } else if (nodeType === 3 && reuseTextNodes.length < 100) { reuseTextNodes.push(node); } hyperspace.appendChild(node); hyperspace.removeChild(node); } function insertElement(fiber) { var dom = fiber.stateNode, parent = fiber.parent; try { var insertPoint = fiber.forwardFiber ? fiber.forwardFiber.stateNode : null; var after = insertPoint ? insertPoint.nextSibling : parent.firstChild; if (after == dom) { return; } if (after === null && dom === parent.lastChild) { return; } Renderer.inserting = fiber.tag === 5 && document.activeElement; parent.insertBefore(dom, after); Renderer.inserting = null; } catch (e) { throw e; } } render.Render = Renderer; function mergeContext(container, context) { container.contextStack[0] = Object.assign({}, context); } var DOMRenderer = createRenderer({ render: render, updateAttribute: function updateAttribute(fiber) { var props = fiber.props, lastProps = fiber.lastProps, stateNode = fiber.stateNode; diffProps(stateNode, lastProps || emptyObject, props, fiber); }, updateContent: function updateContent(fiber) { fiber.stateNode.nodeValue = fiber.props; }, updateControlled: duplexAction, createElement: createElement$1, insertElement: insertElement, emptyElement: function emptyElement(fiber) { _emptyElement(fiber.stateNode); }, unstable_renderSubtreeIntoContainer: function unstable_renderSubtreeIntoContainer( instance, vnode, root, callback ) { var container = createContainer(root), context = container.contextStack[0], fiber = get(instance), backup = void 0; do { var inst = fiber.stateNode; if (inst.getChildContext) { backup = mergeContext(container, inst.getChildContext()); break; } else { backup = fiber; } } while ((fiber = fiber.return)); if (backup && backup.contextStack) { mergeContext(container, backup.contextStack[0]); } return Renderer.render(vnode, root, callback); }, unmountComponentAtNode: function unmountComponentAtNode(root) { var container = createContainer(root, true); var instance = container && container.hostRoot; if (instance) { Renderer.updateComponent( instance, { child: null }, function() { removeTop(root); }, true ); return true; } return false; }, removeElement: function removeElement(fiber) { var dom = fiber.stateNode; if (dom) { _removeElement(dom); delete fiber.stateNode; if (dom._reactInternalFiber) { removeTop(dom); } } } }); function removeTop(dom) { var j = topNodes.indexOf(dom); if (j !== -1) { topFibers.splice(j, 1); topNodes.splice(j, 1); } dom._reactInternalFiber = null; } var win$1 = getWindow(); var prevReact = win$1.React; var React = void 0; if (prevReact && prevReact.eventSystem) { React = prevReact; } else { var render$1 = DOMRenderer.render, eventSystem = DOMRenderer.eventSystem, unstable_renderSubtreeIntoContainer = DOMRenderer.unstable_renderSubtreeIntoContainer, unmountComponentAtNode = DOMRenderer.unmountComponentAtNode; React = win$1.React = win$1.ReactDOM = { eventSystem: eventSystem, findDOMNode: findDOMNode, unmountComponentAtNode: unmountComponentAtNode, unstable_renderSubtreeIntoContainer: unstable_renderSubtreeIntoContainer, version: "2.2.1", render: render$1, hydrate: render$1, unstable_batchedUpdates: DOMRenderer.batchedUpdates, Fragment: Fragment, PropTypes: PropTypes, Children: Children, createPortal: createPortal, createContext: createContext, Component: Component, createRef: createRef, forwardRef: forwardRef, createElement: createElement, cloneElement: cloneElement, PureComponent: PureComponent, isValidElement: isValidElement, createFactory: createFactory }; } var React$1 = React; return React$1; }); ================================================ FILE: dist/ReactDOMServer.js ================================================ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory(require("stream"))) : typeof define === "function" && define.amd ? define(["stream"], factory) : (global.ReactDOMServer = factory(global.stream)); })(this, function(stream) { var hasSymbol = typeof Symbol === "function" && Symbol["for"]; var hasOwnProperty = Object.prototype.hasOwnProperty; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol["for"]("react.element") : 0xeac7; function Fragment(props) { return props.children; } function extend(obj, props) { for (var i in props) { if (hasOwnProperty.call(props, i)) { obj[i] = props[i]; } } return obj; } var __type = Object.prototype.toString; function noop() {} var rword = /[^, ]+/g; function oneObject(array, val) { if (array + "" === array) { array = array.match(rword) || []; } var result = {}, value = val !== void 666 ? val : 1; for (var i = 0, n = array.length; i < n; i++) { result[array[i]] = value; } return result; } var options = oneObject( [ "beforeProps", "afterCreate", "beforeInsert", "beforeDelete", "beforeUpdate", "afterUpdate", "beforePatch", "afterPatch", "beforeUnmount", "afterMount" ], noop ); var numberMap = { "[object Boolean]": 2, "[object Number]": 3, "[object String]": 4, "[object Function]": 5, "[object Symbol]": 6, "[object Array]": 7 }; function typeNumber(data) { if (data === null) { return 1; } if (data === void 666) { return 0; } var a = numberMap[__type.call(data)]; return a || 8; } function getDOMNode() { return this; } var pendingRefs = []; var Refs = { mountOrder: 1, currentOwner: null, controlledCbs: [], fireRef: function fireRef(fiber, dom, vnode) { if (fiber._disposed || fiber._isStateless) { dom = null; } var ref = vnode.ref; if (typeof ref === "function") { return ref(dom); } if (ref && Object.prototype.hasOwnProperty.call(ref, "current")) { ref.current = dom; return; } if (!ref) { return; } var owner = vnode._owner; if (!owner) { throw "Element ref was specified as a string (" + ref + ") but no owner was set"; } if (dom) { if (dom.nodeType) { dom.getDOMNode = getDOMNode; } owner.refs[ref] = dom; } else { delete owner.refs[ref]; } } }; function Vnode(type, tag, props, key, ref) { this.type = type; this.tag = tag; if (tag !== 6) { this.props = props; this._owner = Refs.currentOwner; if (key) { this.key = key; } var refType = typeNumber(ref); if ( refType === 3 || refType === 4 || refType === 5 || refType === 8 ) { this._hasRef = true; this.ref = ref; } } options.afterCreate(this); } Vnode.prototype = { getDOMNode: function getDOMNode() { return this.stateNode || null; }, $$typeof: REACT_ELEMENT_TYPE }; function createVText(type, text) { var vnode = new Vnode(type, 6); vnode.text = text; return vnode; } var lastText = void 0; var flattenIndex = void 0; var flattenObject = void 0; function flattenCb(child, key) { var childType = typeNumber(child); if (childType < 3) { lastText = null; return; } else if (childType < 5) { if (lastText) { lastText.text += child; return; } lastText = child = createVText("#text", child + ""); } else { lastText = null; } if (!flattenObject["." + key]) { flattenObject["." + key] = child; } else { key = "." + flattenIndex; flattenObject[key] = child; } child.index = flattenIndex++; } function fiberizeChildren(c, fiber) { flattenObject = {}; flattenIndex = 0; if (c !== void 666) { lastText = null; operateChildren(c, "", flattenCb, isIterable(c), true); } flattenIndex = 0; return (fiber._children = flattenObject); } function computeName(el, i, prefix, isTop) { var k = i + ""; if (el) { if (el.type == Fragment) { k = el.key ? "" : k; } else { k = el.key ? "$" + el.key : k; } } if (!isTop && prefix) { return prefix + ":" + k; } return k; } function isIterable(el) { if (el instanceof Object) { if (el.forEach) { return 1; } if (el.type === Fragment) { return 2; } var t = getIteractor(el); if (t) { return t; } } return 0; } function operateChildren(children, prefix, callback, iterableType, isTop) { var key = void 0, el = void 0, t = void 0, iterator = void 0; switch (iterableType) { case 0: if ( Object(children) === children && !children.call && !children.type ) { throw "children中存在非法的对象"; } key = prefix || (children && children.key ? "$" + children.key : "0"); callback(children, key); break; case 1: children.forEach(function(el, i) { operateChildren( el, computeName(el, i, prefix, isTop), callback, isIterable(el), false ); }); break; case 2: key = children && children.key ? "$" + children.key : ""; key = isTop ? key : prefix ? prefix + ":0" : key || "0"; el = children.props.children; t = isIterable(el); if (!t) { el = [el]; t = 1; } operateChildren(el, key, callback, t, false); break; default: iterator = iterableType.call(children); var ii = 0, step; while (!(step = iterator.next()).done) { el = step.value; operateChildren( el, computeName(el, ii, prefix, isTop), callback, isIterable(el), false ); ii++; } break; } } var REAL_SYMBOL = hasSymbol && Symbol.iterator; var FAKE_SYMBOL = "@@iterator"; function getIteractor(a) { var iteratorFn = (REAL_SYMBOL && a[REAL_SYMBOL]) || a[FAKE_SYMBOL]; if (iteratorFn && iteratorFn.call) { return iteratorFn; } } function DOMElement(type) { this.nodeName = type; this.style = {}; this.children = []; } var fn = (DOMElement.prototype = { contains: Boolean }); String( "replaceChild,appendChild,removeAttributeNS,setAttributeNS,removeAttribute,setAttribute" + ",getAttribute,insertBefore,removeChild,addEventListener,removeEventListener,attachEvent" + ",detachEvent" ).replace(/\w+/g, function(name) { fn[name] = function() { console.log("fire " + name); }; }); var fakeDoc = new DOMElement(); fakeDoc.createElement = fakeDoc.createElementNS = fakeDoc.createDocumentFragment = function( type ) { return new DOMElement(type); }; fakeDoc.createTextNode = fakeDoc.createComment = Boolean; fakeDoc.documentElement = new DOMElement("html"); fakeDoc.body = new DOMElement("body"); fakeDoc.nodeName = "#document"; fakeDoc.textContent = ""; try { var w = window; var b = !!w.alert; } catch (e) { b = false; w = { document: fakeDoc }; } var win = w; var document = w.document || fakeDoc; var fragment = document.createDocumentFragment(); var versions = { 88: 7, 80: 6, "00": NaN, "08": NaN }; var msie = document.documentMode || versions[ typeNumber(document.all) + "" + typeNumber(win.XMLHttpRequest) ]; var modern = /NaN|undefined/.test(msie) || msie > 8; function getMaskedContext(curContext, contextTypes) { var context = {}; if (!contextTypes || !curContext) { return context; } for (var key in contextTypes) { if (contextTypes.hasOwnProperty(key)) { context[key] = curContext[key]; } } return context; } function getUnmaskedContext(instance, parentContext) { var context = instance.getChildContext(); if (context) { parentContext = extend(extend({}, parentContext), context); } return parentContext; } function getContextProvider(fiber) { do { var c = fiber._unmaskedContext; if (c) { return c; } } while ((fiber = fiber.return)); } var matchHtmlRegExp = /["'&<>]/; function escapeHtml(string) { var str = "" + string; var match = matchHtmlRegExp.exec(str); if (!match) { return str; } var escape; var html = ""; var index = 0; var lastIndex = 0; for (index = match.index; index < str.length; index++) { switch (str.charCodeAt(index)) { case 34: escape = """; break; case 38: escape = "&"; break; case 39: escape = "'"; break; case 60: escape = "<"; break; case 62: escape = ">"; break; default: continue; } if (lastIndex !== index) { html += str.substring(lastIndex, index); } lastIndex = index + 1; html += escape; } return lastIndex !== index ? html + str.substring(lastIndex, index) : html; } function encodeEntities(text) { if (typeof text === "boolean" || typeof text === "number") { return "" + text; } return escapeHtml(text); } var rnumber = /^-?\d+(\.\d+)?$/; var cssNumber = oneObject( "animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom" ); var cssMap = oneObject("float", "cssFloat"); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var skipAttributes = { ref: 1, key: 1, children: 1, dangerouslySetInnerHTML: 1, innerHTML: 1 }; var cssCached = { styleFloat: "float", cssFloat: "float" }; var rXlink = /^xlink:?(.+)/; function cssName$$1(name) { if (cssCached[name]) { return cssCached[name]; } return (cssCached[name] = name .replace(/([A-Z])/g, "-$1") .toLowerCase()); } function stringifyClassName(obj) { var arr = []; for (var i in obj) { if (obj[i]) { arr.push(i); } } return arr.join(" "); } var attrCached = {}; function encodeAttributes(value) { if (attrCached[value]) { return attrCached[value]; } return (attrCached[value] = '"' + encodeEntities(value) + '"'); } function skipFalseAndFunction(a) { return a !== false && Object(a) !== a; } function stringifyStyleObject(obj) { var arr = []; for (var i in obj) { var val = obj[i]; if (obj != null) { var unit = ""; if (rnumber.test(val) && !cssNumber[i]) { unit = "px"; } arr.push(cssName$$1(i) + ": " + val + unit); } } return arr.join("; "); } var forElement = { select: 1, input: 1, textarea: 1 }; function stringifyAttributes(props, type) { var attrs = []; for (var _name in props) { var v = props[_name]; if (skipAttributes[_name]) { continue; } var checkType = false; if (_name === "className" || _name === "class") { _name = "class"; if ( v && (typeof v === "undefined" ? "undefined" : _typeof(v)) === "object" ) { v = stringifyClassName(v); checkType = true; } } else if (_name === "style") { if (Object(v) == v) { v = stringifyStyleObject(v); checkType = true; } else { continue; } } else if (_name === "defaultValue") { if (forElement[type]) { _name = "value"; } } else if (_name === "defaultChecked") { if (forElement[type]) { _name = "checked"; v = ""; checkType = true; } } else if (_name.match(rXlink)) { _name = _name.toLowerCase().replace(rXlink, "xlink:$1"); } if (checkType || skipFalseAndFunction(v)) { attrs.push(_name + "=" + encodeAttributes(v + "")); } } return attrs.length ? " " + attrs.join(" ") : ""; } var regeneratorRuntime = { mark: function() {} }; var _marked = regeneratorRuntime.mark(renderVNodeGen); function renderVNode(vnode, context) { var _vnode = vnode, tag = _vnode.tag, type = _vnode.type, props = _vnode.props; switch (type) { case "#text": return encodeEntities(vnode.text); case "#comment": return ""; default: var innerHTML$$1 = props && props.dangerouslySetInnerHTML; innerHTML$$1 = innerHTML$$1 && innerHTML$$1.__html; if (tag === 5) { if (type === "option") { for ( var p = vnode.return; p && p.type !== "select"; p = p.return ) {} if (p && p.valuesSet) { var curValue = getOptionValue(vnode); if (p.valuesSet["&" + curValue]) { props = Object.assign({ selected: "" }, props); } } } else if (type === "select") { var selectValue = vnode.props.value || vnode.props.defaultValue; if (selectValue != null) { var values = [].concat(selectValue), valuesSet = {}; values.forEach(function(el) { valuesSet["&" + el] = true; }); vnode.valuesSet = valuesSet; } } var str = "<" + type + stringifyAttributes(props, type); if (voidTags[type]) { return str + "/>\n"; } str += ">"; if (innerHTML$$1) { str += innerHTML$$1; } else { var cstr = ""; var fakeUpdater = { _reactInternalFiber: vnode }; var children = fiberizeChildren( props.children, fakeUpdater ); for (var i in children) { var child = children[i]; child.return = vnode; cstr += renderVNode(child, context); } vnode.updater = fakeUpdater; } if (vnode.type === "textarea" && !cstr) { str += vnode.props.value || vnode.props.defaultValue || ""; } else { str += cstr; } return str + "\n"; } else if (tag < 3) { var data = { context: context }; vnode = toVnode(vnode, data); context = data.context; return renderVNode(vnode, context); } else if (Array.isArray(vnode)) { var multiChild = ""; vnode.forEach(function(el) { multiChild += renderVNode(el, context); }); return multiChild; } else { throw "数据不合法"; } } } function renderVNodeGen(vnode, context) { var _vnode2, tag, type, props, innerHTML$$1, p, curValue, selectValue, values, valuesSet, str, fakeUpdater, children, i, child, data, multiChild; return regeneratorRuntime.wrap( function renderVNodeGen$(_context) { while (1) { switch ((_context.prev = _context.next)) { case 0: (_vnode2 = vnode), (tag = _vnode2.tag), (type = _vnode2.type), (props = _vnode2.props); _context.t0 = type; _context.next = _context.t0 === "#text" ? 4 : _context.t0 === "#comment" ? 7 : 10; break; case 4: _context.next = 6; return encodeEntities(vnode.text); case 6: return _context.abrupt("break", 40); case 7: _context.next = 9; return ""; case 9: return _context.abrupt("break", 40); case 10: innerHTML$$1 = props && props.dangerouslySetInnerHTML; innerHTML$$1 = innerHTML$$1 && innerHTML$$1.__html; if (!(tag === 5)) { _context.next = 24; break; } if (type === "option") { for ( p = vnode.return; p && p.type !== "select"; p = p.return ) {} if (p && p.valuesSet) { curValue = getOptionValue(vnode); if (p.valuesSet["&" + curValue]) { props = Object.assign( { selected: "" }, props ); } } } else if (type === "select") { selectValue = vnode.props.value || vnode.props.defaultValue; if (selectValue != null) { (values = [].concat(selectValue)), (valuesSet = {}); values.forEach(function(el) { valuesSet["&" + el] = true; }); vnode.valuesSet = valuesSet; } } str = "<" + type + stringifyAttributes(props, type); if (!voidTags[type]) { _context.next = 18; break; } _context.next = 18; return str + "/>\n"; case 18: str += ">"; if (innerHTML$$1) { str += innerHTML$$1; } else { fakeUpdater = { vnode: vnode }; children = fiberizeChildren( props.children, fakeUpdater ); for (i in children) { child = children[i]; child.return = vnode; str += renderVNode(child, context); } vnode.updater = fakeUpdater; } _context.next = 22; return str + "\n"; case 22: _context.next = 40; break; case 24: if (!(tag < 3)) { _context.next = 32; break; } data = { context: context }; vnode = toVnode(vnode, data); context = data.context; _context.next = 30; return renderVNode(vnode, context); case 30: _context.next = 40; break; case 32: if (!Array.isArray(vnode)) { _context.next = 39; break; } multiChild = ""; vnode.forEach(function(el) { multiChild += renderVNode(el, context); }); _context.next = 37; return multiChild; case 37: _context.next = 40; break; case 39: throw "数据不合法"; case 40: case "end": return _context.stop(); } } }, _marked, this ); } function getOptionValue(option) { if ("value" in option.props) { return option.props.value; } else { var a = option.props.children; if (a + "" === "a") { return a; } else { return a.text; } } } var voidTags = [ "area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param", "source", "track", "wbr" ]; function toVnode(vnode, data) { var parentContext = data.context, Type = vnode.type, instance, rendered; if (vnode.tag < 3) { var props = vnode.props; var instanceContext = getMaskedContext( parentContext, Type.contextTypes ); if (vnode.tag === 1) { rendered = Type(props, instanceContext); if (rendered && rendered.render) { rendered = rendered.render(); } instance = {}; } else { instance = new Type(props, instanceContext); instance.props = instance.props || props; instance.context = instance.context || instanceContext; if (instance.componentWillMount) { try { instance.componentWillMount(); } catch (e) {} } rendered = instance.render(); } rendered = fixVnode(rendered); if (instance.componentWillMount) { instance.componentWillMount(); } if (instance.getChildContext) { data.context = getUnmaskedContext(instance, parentContext); } if (Array.isArray(rendered)) { return rendered.map(function(el) { return toVnode(el, data, instance); }); } else { return toVnode(rendered, data, instance); } } else { return vnode; } } function fixVnode(vnode) { var number = typeNumber(vnode); if (number < 3) { return { tag: 6, text: "", type: "#text" }; } else if (number < 5) { return { tag: 6, text: vnode + "", type: "#text" }; } else { return vnode; } } function renderToString(vnode, context) { return renderVNode(fixVnode(vnode), context || {}); } function renderToNodeStream(vnode, context) { var rs = new stream.Readable(); var it = renderVNodeGen(vnode, context || {}); rs._read = function() { var v = it.next(); if (!v.done) { rs.push(v.value.toString()); } else { rs.push(null); } }; return rs; } var index = { renderToString: renderToString, renderToStaticMarkup: renderToString, renderToNodeStream: renderToNodeStream, renderToStaticNodeStream: renderToNodeStream }; return index; }); ================================================ FILE: dist/ReactIE.js ================================================ /** * Powered by YMFE (https://ymfe.org) */ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory()) : typeof define === "function" && define.amd ? define(factory) : (global.React = factory()); })(this, function() { var arrayPush = Array.prototype.push; var innerHTML = "dangerouslySetInnerHTML"; var hasOwnProperty = Object.prototype.hasOwnProperty; var gSBU = "getSnapshotBeforeUpdate"; var gDSFP = "getDerivedStateFromProps"; var hasSymbol = typeof Symbol === "function" && Symbol["for"]; var effects = []; var topFibers = []; var topNodes = []; var emptyObject = {}; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol["for"]("react.element") : 0xeac7; function noop() {} function Fragment(props) { return props.children; } function returnFalse() { return false; } function returnTrue() { return true; } function resetStack(info) { keepLast(info.containerStack); keepLast(info.contextStack); } function keepLast(list) { var n = list.length; list.splice(0, n - 1); } function get(key) { return key._reactInternalFiber; } var __type = Object.prototype.toString; var fakeWindow = {}; function getWindow() { try { return window; } catch (e) { try { return global; } catch (e) { return fakeWindow; } } } function isMounted(instance) { var fiber = get(instance); return !!(fiber && fiber.hasMounted); } function toWarnDev(msg, deprecated) { msg = deprecated ? msg + " is deprecated" : msg; var process = getWindow().process; if (process && process.env.NODE_ENV === "development") { throw msg; } } function extend(obj, props) { for (var i in props) { if (hasOwnProperty.call(props, i)) { obj[i] = props[i]; } } return obj; } function inherit(SubClass, SupClass) { function Bridge() {} var orig = SubClass.prototype; Bridge.prototype = SupClass.prototype; var fn = (SubClass.prototype = new Bridge()); extend(fn, orig); fn.constructor = SubClass; return fn; } try { var supportEval = Function("a", "return a + 1")(2) == 3; } catch (e) {} function miniCreateClass(ctor, superClass, methods, statics) { var className = ctor.name || "IEComponent"; var Ctor = supportEval ? Function( "superClass", "ctor", "return function " + className + " (props, context) {\n superClass.apply(this, arguments); \n ctor.apply(this, arguments);\n }" )(superClass, ctor) : function Ctor() { superClass.apply(this, arguments); ctor.apply(this, arguments); }; Ctor.displayName = className; var fn = inherit(Ctor, superClass); extend(fn, methods); if (statics) { extend(Ctor, statics); } return Ctor; } var lowerCache = {}; function toLowerCase(s) { return lowerCache[s] || (lowerCache[s] = s.toLowerCase()); } function isFn(obj) { return __type.call(obj) === "[object Function]"; } var rword = /[^, ]+/g; function oneObject(array, val) { if (array + "" === array) { array = array.match(rword) || []; } var result = {}, value = val !== void 666 ? val : 1; for (var i = 0, n = array.length; i < n; i++) { result[array[i]] = value; } return result; } var rcamelize = /[-_][^-_]/g; function camelize(target) { if (!target || (target.indexOf("-") < 0 && target.indexOf("_") < 0)) { return target; } var str = target.replace(rcamelize, function(match) { return match.charAt(1).toUpperCase(); }); return firstLetterLower(str); } function firstLetterLower(str) { return str.charAt(0).toLowerCase() + str.slice(1); } var numberMap = { "[object Boolean]": 2, "[object Number]": 3, "[object String]": 4, "[object Function]": 5, "[object Symbol]": 6, "[object Array]": 7 }; function typeNumber(data) { if (data === null) { return 1; } if (data === void 666) { return 0; } var a = numberMap[__type.call(data)]; return a || 8; } function createRenderer(methods) { return extend(Renderer, methods); } var middlewares = []; var Renderer = { controlledCbs: [], mountOrder: 1, macrotasks: [], boundaries: [], middleware: function middleware(obj) { if (obj.begin && obj.end) { middlewares.push(obj); } }, updateControlled: function updateControlled() {}, fireMiddlewares: function fireMiddlewares(begin) { var index = begin ? middlewares.length - 1 : 0, delta = begin ? -1 : 1, method = begin ? "begin" : "end", obj = void 0; while ((obj = middlewares[index])) { obj[method](); index += delta; } }, currentOwner: null }; var fakeObject = { enqueueSetState: returnFalse, isMounted: returnFalse }; function Component(props, context) { Renderer.currentOwner = this; this.context = context; this.props = props; this.refs = {}; this.updater = fakeObject; this.state = null; } Component.prototype = { constructor: Component, replaceState: function replaceState() { toWarnDev("replaceState", true); }, isReactComponent: returnTrue, isMounted: function isMounted$$1() { toWarnDev("isMounted", true); return this.updater.isMounted(this); }, setState: function setState(state, cb) { this.updater.enqueueSetState(this, state, cb); }, forceUpdate: function forceUpdate(cb) { this.updater.enqueueSetState(this, true, cb); }, render: function render() { throw "must implement render"; } }; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var RESERVED_PROPS = { key: true, ref: true, __self: true, __source: true }; function makeProps(type, config, props, children, len) { var defaultProps = void 0, propName = void 0; for (propName in config) { if ( hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName) ) { props[propName] = config[propName]; } } if (type && type.defaultProps) { defaultProps = type.defaultProps; for (propName in defaultProps) { if (props[propName] === undefined) { props[propName] = defaultProps[propName]; } } } if (len === 1) { props.children = children[0]; } else if (len > 1) { props.children = children; } return props; } function hasValidRef(config) { return config.ref !== undefined; } function hasValidKey(config) { return config.key !== undefined; } function createElement(type, config) { for ( var _len = arguments.length, children = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++ ) { children[_key - 2] = arguments[_key]; } var props = {}, tag = 5, key = null, ref = null, argsLen = children.length; if (type && type.call) { tag = type.prototype && type.prototype.render ? 2 : 1; } else if (type + "" !== type) { toWarnDev("React.createElement: type is invalid."); } if (config != null) { if (hasValidRef(config)) { ref = config.ref; } if (hasValidKey(config)) { key = "" + config.key; } } props = makeProps(type, config || {}, props, children, argsLen); return ReactElement(type, tag, props, key, ref, Renderer.currentOwner); } function cloneElement(element, config) { var props = Object.assign({}, element.props); var type = element.type; var key = element.key; var ref = element.ref; var tag = element.tag; var owner = element._owner; for ( var _len2 = arguments.length, children = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++ ) { children[_key2 - 2] = arguments[_key2]; } var argsLen = children.length; if (config != null) { if (hasValidRef(config)) { ref = config.ref; owner = Renderer.currentOwner; } if (hasValidKey(config)) { key = "" + config.key; } } props = makeProps(type, config || {}, props, children, argsLen); return ReactElement(type, tag, props, key, ref, owner); } function createFactory(type) { var factory = createElement.bind(null, type); factory.type = type; return factory; } function ReactElement(type, tag, props, key, ref, owner) { var ret = { type: type, tag: tag, props: props }; if (tag !== 6) { ret.$$typeof = REACT_ELEMENT_TYPE; ret.key = key || null; var refType = typeNumber(ref); if ( refType === 2 || refType === 3 || refType === 4 || refType === 5 || refType === 8 ) { if (refType < 4) { ref += ""; } ret.ref = ref; } else { ret.ref = null; } ret._owner = owner; } return ret; } function isValidElement(vnode) { return !!vnode && vnode.$$typeof === REACT_ELEMENT_TYPE; } function createVText(text) { return ReactElement("#text", 6, text + ""); } function escape(key) { var escapeRegex = /[=:]/g; var escaperLookup = { "=": "=0", ":": "=2" }; var escapedString = ("" + key).replace(escapeRegex, function(match) { return escaperLookup[match]; }); return "$" + escapedString; } var lastText = void 0, flattenIndex = void 0, flattenObject = void 0; function flattenCb(context, child, key, childType) { if (child === null) { lastText = null; return; } if (childType === 3 || childType === 4) { if (lastText) { lastText.props += child; return; } lastText = child = createVText(child); } else { lastText = null; } if (!flattenObject[key]) { flattenObject[key] = child; } else { key = "." + flattenIndex; flattenObject[key] = child; } flattenIndex++; } function fiberizeChildren(children, fiber) { flattenObject = {}; flattenIndex = 0; if (children !== void 666) { lastText = null; traverseAllChildren(children, "", flattenCb); } flattenIndex = 0; return (fiber.children = flattenObject); } function getComponentKey(component, index) { if ( (typeof component === "undefined" ? "undefined" : _typeof(component)) === "object" && component !== null && component.key != null ) { return escape(component.key); } return index.toString(36); } var SEPARATOR = "."; var SUBSEPARATOR = ":"; function traverseAllChildren(children, nameSoFar, callback, bookKeeping) { var childType = typeNumber(children); var invokeCallback = false; switch (childType) { case 0: case 1: case 2: case 5: case 6: children = null; invokeCallback = true; break; case 3: case 4: invokeCallback = true; break; case 8: if (children.$$typeof || children instanceof Component) { invokeCallback = true; } else if (children.hasOwnProperty("toString")) { children = children + ""; invokeCallback = true; childType = 3; } break; } if (invokeCallback) { callback( bookKeeping, children, nameSoFar === "" ? SEPARATOR + getComponentKey(children, 0) : nameSoFar, childType ); return 1; } var subtreeCount = 0; var nextNamePrefix = nameSoFar === "" ? SEPARATOR : nameSoFar + SUBSEPARATOR; if (children.forEach) { children.forEach(function(child, i) { var nextName = nextNamePrefix + getComponentKey(child, i); subtreeCount += traverseAllChildren( child, nextName, callback, bookKeeping ); }); return subtreeCount; } var iteratorFn = getIteractor(children); if (iteratorFn) { iterator = iteratorFn.call(children); var ii = 0, step; while (!(step = iterator.next()).done) { child = step.value; nextName = nextNamePrefix + getComponentKey(child, ii++); subtreeCount += traverseAllChildren( child, nextName, callback, bookKeeping ); } return subtreeCount; } throw "children: type is invalid."; } var REAL_SYMBOL = hasSymbol && Symbol.iterator; var FAKE_SYMBOL = "@@iterator"; function getIteractor(a) { var iteratorFn = (REAL_SYMBOL && a[REAL_SYMBOL]) || a[FAKE_SYMBOL]; if (iteratorFn && iteratorFn.call) { return iteratorFn; } } var Children = { only: function only(children) { if (isValidElement(children)) { return children; } throw new Error("expect only one child"); }, count: function count(children) { if (children == null) { return 0; } return traverseAllChildren(children, "", noop); }, map: function map(children, func, context) { return proxyIt(children, func, [], context); }, forEach: function forEach(children, func, context) { return proxyIt(children, func, null, context); }, toArray: function toArray$$1(children) { return proxyIt(children, K, []); } }; function proxyIt(children, func, result, context) { if (children == null) { return []; } mapChildren(children, null, func, result, context); return result; } function K(el) { return el; } function mapChildren(children, prefix, func, result, context) { var keyPrefix = ""; if (prefix != null) { keyPrefix = escapeUserProvidedKey(prefix) + "/"; } traverseAllChildren(children, "", traverseCallback, { context: context, keyPrefix: keyPrefix, func: func, result: result, count: 0 }); } var userProvidedKeyEscapeRegex = /\/+/g; function escapeUserProvidedKey(text) { return ("" + text).replace(userProvidedKeyEscapeRegex, "$&/"); } function traverseCallback(bookKeeping, child, childKey) { var result = bookKeeping.result, keyPrefix = bookKeeping.keyPrefix, func = bookKeeping.func, context = bookKeeping.context; var mappedChild = func.call(context, child, bookKeeping.count++); if (!result) { return; } if (Array.isArray(mappedChild)) { mapChildren(mappedChild, childKey, K, result); } else if (mappedChild != null) { if (isValidElement(mappedChild)) { mappedChild = extend({}, mappedChild); mappedChild.key = keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + "/" : "") + childKey; } result.push(mappedChild); } } var check = function check() { return check; }; check.isRequired = check; var PropTypes = { array: check, bool: check, func: check, number: check, object: check, string: check, any: check, arrayOf: check, element: check, instanceOf: check, node: check, objectOf: check, oneOf: check, oneOfType: check, shape: check }; function shallowEqual(objA, objB) { if (Object.is(objA, objB)) { return true; } if (typeNumber(objA) < 7 || typeNumber(objB) < 7) { return false; } var keysA = Object.keys(objA); var keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } for (var i = 0; i < keysA.length; i++) { if ( !hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]]) ) { return false; } } return true; } var PureComponent = miniCreateClass( function PureComponent() { this.isPureComponent = true; }, Component, { shouldComponentUpdate: function shouldComponentUpdate( nextProps, nextState ) { var a = shallowEqual(this.props, nextProps); var b = shallowEqual(this.state, nextState); return !a || !b; } } ); function createRef() { return { current: null }; } function forwardRef(fn) { createRef.render = fn; return createRef; } function AnuPortal(props) { return props.children; } function createPortal(children, parent) { var child = createElement(AnuPortal, { children: children, parent: parent }); child.isPortal = true; return child; } var uuid = 1; function gud() { return uuid++; } var MAX_NUMBER = 1073741823; function createEventEmitter(value) { var handlers = []; return { on: function on(handler) { handlers.push(handler); }, off: function off(handler) { handlers = handlers.filter(function(h) { return h !== handler; }); }, get: function get$$1() { return value; }, set: function set(newValue, changedBits) { value = newValue; handlers.forEach(function(handler) { return handler(value, changedBits); }); } }; } function createContext(defaultValue, calculateChangedBits) { var contextProp = "__create-react-context-" + gud() + "__"; function create(obj, value) { obj[contextProp] = value; return obj; } var Provider = miniCreateClass( function Provider(props) { this.emitter = createEventEmitter(props.value); }, Component, { getChildContext: function getChildContext() { return create({}, this.emitter); }, UNSAFE_componentWillReceiveProps: function UNSAFE_componentWillReceiveProps( nextProps ) { if (this.props.value !== nextProps.value) { var oldValue = this.props.value; var newValue = nextProps.value; var changedBits = void 0; if (Object.is(oldValue, newValue)) { changedBits = 0; } else { changedBits = isFn(calculateChangedBits) ? calculateChangedBits(oldValue, newValue) : MAX_NUMBER; changedBits |= 0; if (changedBits !== 0) { this.emitter.set(nextProps.value, changedBits); } } } }, render: function render() { return this.props.children; } }, { childContextTypes: create({}, PropTypes.object.isRequired) } ); var Consumer = miniCreateClass( function Consumer(props, context) { var _this = this; this.observedBits = 0; this.state = { value: this.getValue() }; this.emitter = context[contextProp]; this.onUpdate = function(newValue, changedBits) { var observedBits = _this.observedBits | 0; if ((observedBits & changedBits) !== 0) { _this.setState({ value: _this.getValue() }); } }; }, Component, { UNSAFE_componentWillReceiveProps: function UNSAFE_componentWillReceiveProps( nextProps ) { var observedBits = nextProps.observedBits; this.observedBits = observedBits == null ? MAX_NUMBER : observedBits; }, getValue: function getValue() { if (this.emitter) { return this.emitter.get(); } else { return defaultValue; } }, componentDidMount: function componentDidMount() { if (this.emitter) { this.emitter.on(this.onUpdate); } var observedBits = this.props.observedBits; this.observedBits = observedBits == null ? MAX_NUMBER : observedBits; }, componentWillUnmount: function componentWillUnmount() { if (this.emitter) { this.emitter.off(this.onUpdate); } }, render: function render() { return this.props.children(this.state.value); } }, { contextTypes: create({}, PropTypes.object) } ); return { Provider: Provider, Consumer: Consumer }; } function findHostInstance(fiber) { if (!fiber) { return null; } else if (fiber.nodeType) { return fiber; } else if (fiber.tag > 3) { return fiber.stateNode; } else if (fiber.tag < 3) { return findHostInstance(fiber.stateNode); } else if (fiber.refs && fiber.render) { fiber = get(fiber); var childrenMap = fiber.children; if (childrenMap) { for (var i in childrenMap) { var dom = findHostInstance(childrenMap[i]); if (dom) { return dom; } } } } return null; } function findDOMNode(fiber) { if (fiber == null) { return null; } if (fiber.nodeType === 1) { return fiber; } if (!fiber.render) { throw "findDOMNode:invalid type"; } return findHostInstance(fiber); } function DOMElement(type) { this.nodeName = type; this.style = {}; this.children = []; } var NAMESPACE = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xlink: "http://www.w3.org/1999/xlink", xhtml: "http://www.w3.org/1999/xhtml", math: "http://www.w3.org/1998/Math/MathML" }; var fn = (DOMElement.prototype = { contains: Boolean }); String( "replaceChild,appendChild,removeAttributeNS,setAttributeNS,removeAttribute,setAttribute" + ",getAttribute,insertBefore,removeChild,addEventListener,removeEventListener,attachEvent" + ",detachEvent" ).replace(/\w+/g, function(name) { fn[name] = function() { toWarnDev("need implement " + name); }; }); var fakeDoc = new DOMElement(); fakeDoc.createElement = fakeDoc.createElementNS = fakeDoc.createDocumentFragment = function( type ) { return new DOMElement(type); }; fakeDoc.createTextNode = fakeDoc.createComment = Boolean; fakeDoc.documentElement = new DOMElement("html"); fakeDoc.body = new DOMElement("body"); fakeDoc.nodeName = "#document"; fakeDoc.textContent = ""; var win = getWindow(); var inBrowser = !!win.alert; if (!inBrowser) { win.document = fakeDoc; } var document = win.document; var versions = { 88: 7, 80: 6, "00": NaN, "08": NaN }; var msie = document.documentMode || versions[ typeNumber(document.all) + "" + typeNumber(win.XMLHttpRequest) ]; var modern = /NaN|undefined/.test(msie) || msie > 8; function contains(a, b) { if (b) { while ((b = b.parentNode)) { if (b === a) { return true; } } } return false; } var rnumber = /^-?\d+(\.\d+)?$/; function patchStyle(dom, lastStyle, nextStyle) { if (lastStyle === nextStyle) { return; } for (var name in nextStyle) { var val = nextStyle[name]; if (lastStyle[name] !== val) { name = cssName(name, dom); if (val !== 0 && !val) { val = ""; } else if (rnumber.test(val) && !cssNumber[name]) { val = val + "px"; } try { dom.style[name] = val; } catch (e) { console.log( "dom.style[" + name + "] = " + val + "throw error" ); } } } for (var _name in lastStyle) { if (!(_name in nextStyle)) { _name = cssName(_name, dom); dom.style[_name] = ""; } } } var cssNumber = oneObject( "animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom" ); var prefixes = ["", "-webkit-", "-o-", "-moz-", "-ms-"]; var cssMap = oneObject("float", "cssFloat"); function cssName(name, dom) { if (cssMap[name]) { return cssMap[name]; } var host = (dom && dom.style) || {}; for (var i = 0, n = prefixes.length; i < n; i++) { var camelCase = camelize(prefixes[i] + name); if (camelCase in host) { return (cssMap[name] = camelCase); } } return null; } function getSafeValue(value) { switch (typeNumber(value)) { case 2: case 3: case 8: case 4: case 0: return value; default: return ""; } } var duplexMap = { input: { init: function init(node, props) { var defaultValue = props.defaultValue == null ? "" : props.defaultValue; return (node._wrapperState = { initialValue: getSafeValue( props.value != null ? props.value : defaultValue ) }); }, mount: function mount(node, props, state) { if ( props.hasOwnProperty("value") || props.hasOwnProperty("defaultValue") ) { var stateValue = "" + state.initialValue; if (node.value === "" && node.value !== stateValue) { syncValue(node, "value", stateValue); } node.defaultValue = stateValue; } var name = node.name; if (name !== "") { node.name = ""; } node.defaultChecked = !node.defaultChecked; node.defaultChecked = !node.defaultChecked; if (name !== "") { node.name = name; } }, update: function update(node, props) { if (props.checked != null) { syncValue(node, "checked", !!props.checked); } var isActive = node === node.ownerDocument.activeElement; var value = isActive ? node.value : getSafeValue(props.value); if (value != null) { if (props.type === "number") { if ( (value === 0 && node.value === "") || node.value != value ) { syncValue(node, "value", "" + value); } } else if (node.value !== "" + value) { syncValue(node, "value", "" + value); } } if (props.hasOwnProperty("value")) { setDefaultValue(node, props.type, value, isActive); } else if (props.hasOwnProperty("defaultValue")) { setDefaultValue( node, props.type, getSafeValue(props.defaultValue), isActive ); } if (props.checked == null && props.defaultChecked != null) { node.defaultChecked = !!props.defaultChecked; } } }, select: { init: function init(node, props) { var value = props.value; return (node._wrapperState = { initialValue: value != null ? value : props.defaultValue, wasMultiple: !!props.multiple }); }, mount: function mount(node, props) { var multiple = (node.multiple = !!props.multiple); var value = props.value; if (value != null) { updateOptions(node, multiple, value, false); } else if (props.defaultValue != null) { updateOptions(node, multiple, props.defaultValue, true); } }, update: function update(node, props) { node._wrapperState.initialValue = void 666; var wasMultiple = node._wrapperState.wasMultiple; var multiple = (node._wrapperState.wasMultiple = !!props.multiple); var value = props.value; if (value != null) { updateOptions(node, multiple, value, false); } else if (wasMultiple !== multiple) { if (props.defaultValue != null) { updateOptions(node, multiple, props.defaultValue, true); } else { updateOptions( node, multiple, multiple ? [] : "", false ); } } } }, textarea: { init: function init(node, props) { var initialValue = props.value; if (initialValue == null) { var defaultValue = props.defaultValue; var children = props.children; if (children != null) { defaultValue = textContent(node); node.innerHTML = ""; } if (defaultValue == null) { defaultValue = ""; } initialValue = defaultValue; } return (node._wrapperState = { initialValue: "" + initialValue }); }, mount: function mount(node, props, state) { var text = textContent(node); var stateValue = "" + state.initialValue; if (text !== stateValue) { syncValue(node, "value", stateValue); } }, update: function update(node, props) { var value = props.value; if (value != null) { var newValue = "" + value; if (newValue !== node.value) { syncValue(node, "value", newValue); } if (props.defaultValue == null) { node.defaultValue = newValue; } } if (props.defaultValue != null) { node.defaultValue = props.defaultValue; } } }, option: { init: function init() {}, update: function update(node, props) { duplexMap.option.mount(node, props); }, mount: function mount(node, props) { var elems = node.getElementsByTagName("*"); var n = elems.length, el = void 0; if (n) { for (n = n - 1, el; (el = elems[n--]); ) { node.removeChild(el); } } if ("value" in props) { node.duplexValue = node.value = props.value; } else { node.duplexValue = node.text; } } } }; function textContent(node) { return node.textContent || node.innerText; } function setDefaultValue(node, type, value, isActive) { if (type !== "number" || !isActive) { if (value == null) { node.defaultValue = "" + node._wrapperState.initialValue; } else if (node.defaultValue !== "" + value) { node.defaultValue = "" + value; } } } function updateOptions(node, multiple, propValue, setDefaultSelected) { var options = node.options; if (multiple) { var selectedValues = propValue; var selectedValue = {}; for (var i = 0; i < selectedValues.length; i++) { selectedValue["$" + selectedValues[i]] = true; } for (var _i = 0; _i < options.length; _i++) { var selected = selectedValue.hasOwnProperty( "$" + options[_i].duplexValue ); if (options[_i].selected !== selected) { options[_i].selected = selected; } if (selected && setDefaultSelected) { options[_i].defaultSelected = true; } } } else { var _selectedValue = "" + propValue; var defaultSelected = null; for (var _i2 = 0; _i2 < options.length; _i2++) { if (options[_i2].duplexValue === _selectedValue) { options[_i2].selected = true; if (setDefaultSelected) { options[_i2].defaultSelected = true; } return; } if (defaultSelected === null && !options[_i2].disabled) { defaultSelected = options[_i2]; } } if (defaultSelected !== null) { defaultSelected.selected = true; } } } function syncValue(dom, name, value) { dom.__anuSetValue = true; dom[name] = value; dom.__anuSetValue = false; } function duplexAction(fiber) { var dom = fiber.stateNode, name = fiber.name, props = fiber.props, lastProps = fiber.lastProps; var fns = duplexMap[name]; if (name !== "option") { enqueueDuplex(dom); } if (!lastProps || lastProps == emptyObject) { var state = fns.init(dom, props); fns.mount(dom, props, state); } else { fns.update(dom, props); } } var duplexNodes = []; function enqueueDuplex(dom) { if (duplexNodes.indexOf(dom) == -1) { duplexNodes.push(dom); } } function fireDuplex() { var radioMap = {}; if (duplexNodes.length) { do { var dom = duplexNodes.shift(); var e = dom.__events; var fiber = e && e.vnode; if (fiber && !fiber.disposed) { var props = fiber.props; var tag = fiber.name; if (name === "select") { var value = props.value; if (value != null) { updateOptions(dom, !!props.multiple, value, false); } } else { duplexMap[tag].update(dom, props); var _name = props.name; if ( props.type === "radio" && _name != null && !radioMap[_name] ) { radioMap[_name] = 1; collectNamedCousins(dom, _name); } } } } while (duplexNodes.length); } } function collectNamedCousins(rootNode, name) { var queryRoot = rootNode; while (queryRoot.parentNode) { queryRoot = queryRoot.parentNode; } var group = queryRoot.getElementsByTagName("input"); for (var i = 0; i < group.length; i++) { var otherNode = group[i]; if ( otherNode === rootNode || otherNode.name !== name || otherNode.type !== "radio" || otherNode.form !== rootNode.form ) { continue; } enqueueDuplex(otherNode); } } var rform = /textarea|input|select|option/i; var globalEvents = {}; var eventPropHooks = {}; var eventHooks = {}; var eventLowerCache = { onClick: "click", onChange: "change", onWheel: "wheel" }; function eventAction(dom, name, val, lastProps, fiber) { var events = dom.__events || (dom.__events = {}); events.vnode = fiber; var refName = toLowerCase(name.slice(2)); if (val === false) { delete events[refName]; } else { if (!lastProps[name]) { var eventName = getBrowserName(name); var hook = eventHooks[eventName]; if (hook) { hook(dom, eventName); } addGlobalEvent(eventName); } events[refName] = val; } } var isTouch = "ontouchstart" in document; function dispatchEvent(e, type, endpoint) { e = new SyntheticEvent(e); if (type) { e.type = type; } var bubble = e.type, terminal = endpoint || document, hook = eventPropHooks[e.type]; if (hook && false === hook(e)) { return; } Renderer.batchedUpdates(function() { var paths = collectPaths(e.target, terminal, {}); var captured = bubble + "capture"; triggerEventFlow(paths, captured, e); if (!e._stopPropagation) { triggerEventFlow(paths.reverse(), bubble, e); } }, e); } var nodeID = 1; function collectPaths(begin, end, unique) { var paths = []; var node = begin; while (node && node.nodeType == 1) { var checkChange = node; if (node.__events) { var vnode = node.__events.vnode; inner: while (vnode.return) { if (vnode.tag === 5) { node = vnode.stateNode; if (node === end) { return paths; } if (!node) { break inner; } var uid = node.uniqueID || (node.uniqueID = ++nodeID); if (node.__events && !unique[uid]) { unique[uid] = 1; paths.push({ node: node, events: node.__events }); } } vnode = vnode.return; } } if (node === checkChange) { node = node.parentNode; } } return paths; } function triggerEventFlow(paths, prop, e) { for (var i = paths.length; i--; ) { var path = paths[i]; var fn = path.events[prop]; if (isFn(fn)) { e.currentTarget = path.node; fn.call(void 666, e); if (e._stopPropagation) { break; } } } } function addGlobalEvent(name, capture) { if (!globalEvents[name]) { globalEvents[name] = true; addEvent(document, name, dispatchEvent, capture); } } function addEvent(el, type, fn, bool) { if (el.addEventListener) { el.addEventListener(type, fn, bool || false); } else if (el.attachEvent) { el.attachEvent("on" + type, fn); } } var rcapture = /Capture$/; function getBrowserName(onStr) { var lower = eventLowerCache[onStr]; if (lower) { return lower; } var camel = onStr.slice(2).replace(rcapture, ""); lower = camel.toLowerCase(); eventLowerCache[onStr] = lower; return lower; } function getRelatedTarget(e) { if (!e.timeStamp) { e.relatedTarget = e.type === "mouseover" ? e.fromElement : e.toElement; } return e.relatedTarget; } function getTarget(e) { return e.target || e.srcElement; } String("load,error").replace(/\w+/g, function(name) { eventHooks[name] = function(dom, type) { var mark = "__" + type; if (!dom[mark]) { dom[mark] = true; addEvent(dom, type, dispatchEvent); } }; }); String("mouseenter,mouseleave").replace(/\w+/g, function(name) { eventHooks[name] = function(dom, type) { var mark = "__" + type; if (!dom[mark]) { dom[mark] = true; var mask = type === "mouseenter" ? "mouseover" : "mouseout"; addEvent(dom, mask, function(e) { var t = getRelatedTarget(e); if (!t || (t !== dom && !contains(dom, t))) { var common = getLowestCommonAncestor(dom, t); dispatchEvent(e, type, common); } }); } }; }); var specialHandles = {}; function createHandle(name, fn) { return (specialHandles[name] = function(e) { if (fn && fn(e) === false) { return; } dispatchEvent(e, name); }); } function onCompositionStart(e) { e.target.__onComposition = true; } function onCompositionEnd(e) { e.target.__onComposition = false; } var input2change = /text|password|search|url|email/i; if (!document["__input"]) { globalEvents.input = document["__input"] = true; addEvent(document, "compositionstart", onCompositionStart); addEvent(document, "compositionend", onCompositionEnd); addEvent(document, "input", function(e) { var dom = getTarget(e); if (input2change.test(dom.type)) { if (!dom.__onComposition) { dispatchEvent(e, "change"); } } dispatchEvent(e); }); } function getLowestCommonAncestor(instA, instB) { var depthA = 0; for (var tempA = instA; tempA; tempA = tempA.parentNode) { depthA++; } var depthB = 0; for (var tempB = instB; tempB; tempB = tempB.parentNode) { depthB++; } while (depthA - depthB > 0) { instA = instA.parentNode; depthA--; } while (depthB - depthA > 0) { instB = instB.parentNode; depthB--; } var depth = depthA; while (depth--) { if (instA === instB) { return instA; } instA = instA.parentNode; instB = instB.parentNode; } return null; } eventPropHooks.change = function(e) { enqueueDuplex(e.target); }; createHandle("doubleclick"); createHandle("scroll"); createHandle("wheel"); globalEvents.wheel = true; globalEvents.scroll = true; globalEvents.doubleclick = true; if (isTouch) { eventHooks.click = eventHooks.clickcapture = function(dom) { dom.onclick = dom.onclick || noop; }; } eventPropHooks.click = function(e) { return !e.target.disabled; }; var fixWheelType = document.onwheel !== void 666 ? "wheel" : "onmousewheel" in document ? "mousewheel" : "DOMMouseScroll"; eventHooks.wheel = function(dom) { addEvent(dom, fixWheelType, specialHandles.wheel); }; eventPropHooks.wheel = function(event) { event.deltaX = "deltaX" in event ? event.deltaX : "wheelDeltaX" in event ? -event.wheelDeltaX : 0; event.deltaY = "deltaY" in event ? event.deltaY : "wheelDeltaY" in event ? -event.wheelDeltaY : "wheelDelta" in event ? -event.wheelDelta : 0; }; var focusMap = { focus: "focus", blur: "blur" }; var innerFocus = void 0; function blurFocus(e) { var dom = getTarget(e); var type = focusMap[e.type]; if (Renderer.inserting) { if (type === "blur") { innerFocus = true; Renderer.inserting.focus(); return; } } if (innerFocus) { innerFocus = false; return; } do { if (dom.nodeType === 1) { if (dom.__events && dom.__events[type]) { dispatchEvent(e, type); break; } } else { break; } } while ((dom = dom.parentNode)); } "blur,focus".replace(/\w+/g, function(type) { globalEvents[type] = true; if (modern) { var mark = "__" + type; if (!document[mark]) { document[mark] = true; addEvent(document, type, blurFocus, true); } } else { eventHooks[type] = function(dom, name) { addEvent(dom, focusMap[name], blurFocus); }; } }); eventHooks.scroll = function(dom, name) { addEvent(dom, name, specialHandles[name]); }; eventHooks.doubleclick = function(dom, name) { addEvent(document, "dblclick", specialHandles[name]); }; function SyntheticEvent(event) { if (event.nativeEvent) { return event; } for (var i in event) { if (!eventProto[i]) { this[i] = event[i]; } } if (!this.target) { this.target = event.srcElement; } this.fixEvent(); this.timeStamp = new Date() - 0; this.nativeEvent = event; } var eventProto = (SyntheticEvent.prototype = { fixEvent: noop, fixHooks: noop, persist: noop, preventDefault: function preventDefault() { var e = this.nativeEvent || {}; e.returnValue = this.returnValue = false; if (e.preventDefault) { e.preventDefault(); } }, stopPropagation: function stopPropagation() { var e = this.nativeEvent || {}; e.cancelBubble = this._stopPropagation = true; if (e.stopPropagation) { e.stopPropagation(); } }, stopImmediatePropagation: function stopImmediatePropagation() { this.stopPropagation(); this.stopImmediate = true; }, toString: function toString() { return "[object Event]"; } }); Renderer.eventSystem = { eventPropHooks: eventPropHooks, addEvent: addEvent, dispatchEvent: dispatchEvent, SyntheticEvent: SyntheticEvent }; var NOWORK = 1; var WORKING = 2; var PLACE = 3; var CONTENT = 5; var ATTR = 7; var DUPLEX = 11; var DETACH = 13; var HOOK = 17; var REF = 19; var CALLBACK = 23; var CAPTURE = 29; var effectNames = [DUPLEX, HOOK, REF, DETACH, CALLBACK, CAPTURE].sort( function(a, b) { return a - b; } ); var effectLength = effectNames.length; var isSpecialAttr = { style: 1, autoFocus: 1, innerHTML: 1, dangerouslySetInnerHTML: 1 }; var svgCache = {}; var strategyCache = {}; var svgCamelCase = { w: { r: 1, b: 1, t: 1 }, e: { n: 1, t: 1, f: 1, p: 1, c: 1, m: 1, a: 2, u: 1, s: 1, v: 1 }, o: { r: 1 }, c: { m: 1 }, p: { p: 1 }, t: { s: 2, t: 1, u: 1, c: 1, d: 1, o: 1, x: 1, y: 1, l: 1 }, l: { r: 1, m: 1, u: 1, b: -1, l: -1, s: -1 }, r: { r: 1, u: 2, h: 1, w: 1, c: 1, e: 1 }, h: { r: 1, a: 1, l: 1, t: 1 }, y: { p: 1, s: 1, t: 1, c: 1 }, g: { c: 1 }, k: { a: -1, h: -1, r: -1, s: -1, t: -1, c: 1, u: 1 }, m: { o: 1, l: 1, a: 1 }, n: { c: 1, t: 1, u: 1 }, s: { a: 3 }, f: { x: 1, y: 1 }, d: { e: 1, f: 1, m: 1, d: 1 }, x: { c: 1 } }; var specialSVGPropertyName = { "overline-thickness": 2, "underline-thickness": 2, "overline-position": 2, "underline-position": 2, "stroke-miterlimit": 2, "baseline-shift": 2, "clip-path": 2, "font-size": 2, "font-size-adjust": 2, "font-stretch": 2, "font-style": 2, "text-decoration": 2, "vert-origin-x": 2, "vert-origin-y": 2, "paint-order": 2, "fill-rule": 2, "color-rendering": 2, "marker-end": 2, "pointer-events": 2, "units-per-em": 2, "strikethrough-thickness": 2, "lighting-color": 2 }; var repeatedKey = [ "et", "ep", "em", "es", "pp", "ts", "td", "to", "lr", "rr", "re", "ht", "gc" ]; function createRepaceFn(split) { return function(match) { return match.slice(0, 1) + split + match.slice(1).toLowerCase(); }; } var rhump = /([a-z])([A-Z])/; var toHyphen = createRepaceFn("-"); var toColon = createRepaceFn(":"); function getSVGAttributeName(name) { if (svgCache[name]) { return svgCache[name]; } var match = name.match(rhump); if (!match) { return (svgCache[name] = name); } var prefix = match[1]; var postfix = match[2].toLowerCase(); var orig = name; var count = svgCamelCase[prefix] && svgCamelCase[prefix][postfix]; if (count) { if (count === -1) { return (svgCache[orig] = { name: name.replace(rhump, toColon), ifSpecial: true }); } if (~repeatedKey.indexOf(prefix + postfix)) { var dashName = name.replace(rhump, toHyphen); if (specialSVGPropertyName[dashName]) { name = dashName; } } } else { name = name.replace(rhump, toHyphen); } return (svgCache[orig] = name); } function diffProps(dom, lastProps, nextProps, fiber) { var isSVG = fiber.namespaceURI === NAMESPACE.svg; var tag = fiber.type; var continueProps = skipProps; if (!isSVG && rform.test(fiber.type)) { continueProps = duplexProps; if (!("onChange" in nextProps)) { eventAction(dom, "onChange", noop, lastProps, fiber); } fiber.effectTag *= DUPLEX; fiber.onDuplex = continueProps.onDuplex; } for (var name in nextProps) { if (continueProps[name]) { continue; } var val = nextProps[name]; if (val !== lastProps[name]) { var which = tag + isSVG + name; var action = strategyCache[which]; if (!action) { action = strategyCache[which] = getPropAction( dom, name, isSVG ); } actionStrategy[action](dom, name, val, lastProps, fiber); } } for (var _name in lastProps) { if (continueProps[_name]) { continue; } if (!nextProps.hasOwnProperty(_name)) { var _which = tag + isSVG + _name; var _action = strategyCache[_which]; if (!_action) { continue; } actionStrategy[_action](dom, _name, false, lastProps, fiber); } } } function isBooleanAttr(dom, name) { var val = dom[name]; return val === true || val === false; } function isEventName(name) { return /^on[A-Z]/.test(name); } function getPropAction(dom, name, isSVG) { if (isSVG && name === "className") { return "svgClass"; } if (isSpecialAttr[name]) { return name; } if (isEventName(name)) { return "event"; } if (isSVG) { return "svgAttr"; } if (name === "width" || name === "height") { return "attribute"; } if (isBooleanAttr(dom, name)) { return "booleanAttr"; } return name.indexOf("data-") === 0 || dom[name] === void 666 ? "attribute" : "property"; } var builtinStringProps = { className: 1, title: 1, name: 1, type: 1, alt: 1, lang: 1 }; var skipProps = { innerHTML: 1, children: 1, onDuplex: noop }; var duplexProps = { value: 1, defaultValue: 1, checked: 1, innerHTML: 1, children: 1 }; var actionStrategy = { style: function style(dom, _, val, lastProps) { patchStyle(dom, lastProps.style || emptyObject, val || emptyObject); }, autoFocus: function autoFocus(dom) { if ( /input|text/i.test(dom.nodeName) || dom.contentEditable === "true" ) { dom.focus(); } }, svgClass: function svgClass(dom, name, val) { if (!val) { dom.removeAttribute("class"); } else { dom.setAttribute("class", val); } }, svgAttr: function svgAttr(dom, name, val) { var method = typeNumber(val) < 3 && !val ? "removeAttribute" : "setAttribute"; var nameRes = getSVGAttributeName(name); if (nameRes.ifSpecial) { var prefix = nameRes.name.split(":")[0]; dom[method + "NS"](NAMESPACE[prefix], nameRes.name, val || ""); } else { dom[method](nameRes, val || ""); } }, booleanAttr: function booleanAttr(dom, name, val) { dom[name] = !!val; if (dom[name] === false) { dom.removeAttribute(name); } else if (dom[name] === "false") { dom[name] = ""; } }, attribute: function attribute(dom, name, val) { if (val == null || val === false) { return dom.removeAttribute(name); } try { dom.setAttribute(name, val); } catch (e) { console.warn("setAttribute error", name, val); } }, property: function property(dom, name, val) { try { if (!val && val !== 0) { if (builtinStringProps[name]) { dom[name] = ""; } else { dom.removeAttribute(name); } } else { dom[name] = val; } } catch (e) { try { dom.setAttribute(name, val); } catch (e) {} } }, event: eventAction, dangerouslySetInnerHTML: function dangerouslySetInnerHTML( dom, name, val, lastProps ) { var oldhtml = lastProps[name] && lastProps[name].__html; var html = val && val.__html; html = html == null ? "" : html; if (html !== oldhtml) { dom.innerHTML = html; } } }; function UpdateQueue() { return { pendingStates: [], pendingCbs: [] }; } function createInstance(fiber, context) { var updater = { mountOrder: Renderer.mountOrder++, enqueueSetState: returnFalse, isMounted: isMounted }; var props = fiber.props, type = fiber.type, tag = fiber.tag, ref = fiber.ref, isStateless = tag === 1, lastOwn = Renderer.currentOwner, instance = { refs: {}, props: props, context: context, ref: ref, __proto__: type.prototype }; fiber.errorHook = "constructor"; try { if (isStateless) { extend(instance, { __isStateless: true, __init: true, renderImpl: type, render: function f() { var a = this.__keep; if (a) { delete this.__keep; return a.value; } a = this.renderImpl(this.props, this.context); if (a && a.render) { delete this.__isStateless; for (var i in a) { instance[i == "render" ? "renderImpl" : i] = a[i]; } } else if (this.__init) { this.__keep = { value: a }; } return a; } }); Renderer.currentOwner = instance; if (type.render) { instance.render = function() { return type.render(this.props, this.ref); }; } else { instance.render(); delete instance.__init; } } else { instance = new type(props, context); if (!(instance instanceof Component)) { throw type.name + " doesn't extend React.Component"; } } } finally { Renderer.currentOwner = lastOwn; fiber.stateNode = instance; fiber.updateQueue = UpdateQueue(); instance._reactInternalFiber = fiber; instance.updater = updater; instance.context = context; updater.enqueueSetState = Renderer.updateComponent; if (type[gDSFP] || instance[gSBU]) { instance.__useNewHooks = true; } } return instance; } function Fiber(vnode) { extend(this, vnode); var type = vnode.type || "ProxyComponent(react-hot-loader)"; this.name = type.displayName || type.name || type; this.effectTag = 1; } function pushError(fiber, hook, error) { var names = []; var boundary = findCatchComponent(fiber, names, hook); var stack = describeError(names, hook); if (boundary) { if (fiber.hasMounted) { } else { fiber.stateNode = { updater: fakeObject }; fiber.effectTag = NOWORK; } var values = boundary.capturedValues || (boundary.capturedValues = []); values.push(error, { componentStack: stack }); } else { var p = fiber.return; for (var i in p.children) { if (p.children[i] == fiber) { fiber.type = noop; } } while (p) { p._hydrating = false; p = p.return; } if (!Renderer.catchError) { Renderer.catchStack = stack; Renderer.catchError = error; } } } function guardCallback(host, hook, args) { try { return applyCallback(host, hook, args); } catch (error) { pushError(get(host), hook, error); } } function applyCallback(host, hook, args) { var fiber = host._reactInternalFiber; fiber.errorHook = hook; var fn = host[hook]; if (hook == "componentWillUnmount") { host[hook] = noop; } if (fn) { return fn.apply(host, args); } return true; } function describeError(names, hook) { var segments = ["**" + hook + "** method occur error "]; names.forEach(function(name, i) { if (names[i + 1]) { segments.push( "in " + name + " (created By " + names[i + 1] + ")" ); } }); return segments.join("\n\r").trim(); } function findCatchComponent(fiber, names, hook) { var instance = void 0, name = void 0, topFiber = fiber, retry = void 0, boundary = void 0; while (fiber) { name = fiber.name; if (fiber.tag < 4) { names.push(name); instance = fiber.stateNode || {}; if (instance.componentDidCatch && !boundary) { if (!fiber.caughtError && topFiber !== fiber) { boundary = fiber; } else if (fiber.caughtError) { retry = fiber; } } } else if (fiber.tag === 5) { names.push(name); } fiber = fiber.return; if (boundary) { var boundaries = Renderer.boundaries; if (!retry || retry !== boundary) { var effectTag = boundary.effectTag; var f = boundary.alternate; if (f && !f.catchError) { f.forward = boundary.forward; f.sibling = boundary.sibling; if (boundary.return.child == boundary) { boundary.return.child = f; } boundary = f; } if (!boundary.catchError) { if ( hook == "componentWillUnmount" || hook == "componentDidUpdate" ) { boundary.effectTag = CAPTURE; } else { boundary.effectTag = effectTag * CAPTURE; } boundaries.unshift(boundary); boundary.catchError = true; } if (retry) { var arr = boundary.effects || (boundary.effects = []); arr.push(retry); } } return boundary; } } } function removeFormBoundaries(fiber) { delete fiber.catchError; var arr = Renderer.boundaries; var index = arr.indexOf(fiber); if (index !== -1) { arr.splice(index, 1); } } function detachFiber(fiber, effects$$1) { fiber.effectTag = DETACH; effects$$1.push(fiber); fiber.disposed = true; for (var child = fiber.child; child; child = child.sibling) { detachFiber(child, effects$$1); } } function getInsertPoint(fiber) { var parent = fiber.parent; while (fiber) { if (fiber.stateNode === parent || fiber.isPortal) { return null; } var found = forward(fiber); if (found) { return found; } fiber = fiber.return; } } function setInsertPoints(children) { for (var i in children) { var child = children[i]; if (child.disposed) { continue; } if (child.tag > 4) { var p = child.parent; child.effectTag = PLACE; child.forwardFiber = p.insertPoint; p.insertPoint = child; for ( var pp = child.return; pp && pp.effectTag === NOWORK; pp = pp.return ) { pp.effectTag = WORKING; } } else { if (child.child) { setInsertPoints(child.children); } } } } function forward(fiber) { var found; while (fiber.forward) { fiber = fiber.forward; if (fiber.disposed || fiber.isPortal) { continue; } if (fiber.tag > 3) { return fiber; } if (fiber.child) { found = downward(fiber); if (found) { return found; } } } } function downward(fiber) { var found; while (fiber.lastChild) { fiber = fiber.lastChild; if (fiber.disposed || fiber.isPortal) { return; } if (fiber.tag > 3) { return fiber; } if (fiber.forward) { found = forward(fiber); if (found) { return found; } } } } function reconcileDFS(fiber, info, deadline, ENOUGH_TIME) { var topWork = fiber; outerLoop: while (fiber) { if (fiber.disposed || deadline.timeRemaining() <= ENOUGH_TIME) { break; } var occurError = void 0; if (fiber.tag < 3) { var keepbook = Renderer.currentOwner; try { updateClassComponent(fiber, info); } catch (e) { occurError = true; pushError(fiber, fiber.errorHook, e); } Renderer.currentOwner = keepbook; if (fiber.batching) { delete fiber.updateFail; delete fiber.batching; } } else { updateHostComponent(fiber, info); } if (fiber.child && !fiber.updateFail && !occurError) { fiber = fiber.child; continue outerLoop; } var f = fiber; while (f) { var instance = f.stateNode; if (f.tag > 3 || f.shiftContainer) { if (f.shiftContainer) { delete f.shiftContainer; info.containerStack.shift(); } } else { var updater = instance && instance.updater; if (f.shiftContext) { delete f.shiftContext; info.contextStack.shift(); } if (f.hasMounted && instance[gSBU]) { updater.snapshot = guardCallback(instance, gSBU, [ updater.prevProps, updater.prevState ]); } } if (f === topWork) { break outerLoop; } if (f.sibling) { fiber = f.sibling; continue outerLoop; } f = f.return; } } } function updateHostComponent(fiber, info) { var props = fiber.props, tag = fiber.tag, prev = fiber.alternate; if (!fiber.stateNode) { fiber.parent = info.containerStack[0]; fiber.stateNode = Renderer.createElement(fiber); } var parent = fiber.parent; fiber.forwardFiber = parent.insertPoint; parent.insertPoint = fiber; fiber.effectTag = PLACE; if (tag === 5) { fiber.stateNode.insertPoint = null; info.containerStack.unshift(fiber.stateNode); fiber.shiftContainer = true; fiber.effectTag *= ATTR; if (fiber.ref) { fiber.effectTag *= REF; } diffChildren(fiber, props.children); } else { if (!prev || prev.props !== props) { fiber.effectTag *= CONTENT; } } } function mergeStates(fiber, nextProps) { var instance = fiber.stateNode, pendings = fiber.updateQueue.pendingStates, n = pendings.length, state = fiber.memoizedState || instance.state; if (n === 0) { return state; } var nextState = extend({}, state); var fail = true; for (var i = 0; i < n; i++) { var pending = pendings[i]; if (pending) { if (isFn(pending)) { var a = pending.call(instance, nextState, nextProps); if (!a) { continue; } else { pending = a; } } fail = false; extend(nextState, pending); } } if (fail) { return state; } else { return (fiber.memoizedState = nextState); } } function updateClassComponent(fiber, info) { var type = fiber.type, instance = fiber.stateNode, props = fiber.props; var contextStack = info.contextStack, containerStack = info.containerStack; var newContext = getMaskedContext( instance, type.contextTypes, contextStack ); if (instance == null) { fiber.parent = type === AnuPortal ? props.parent : containerStack[0]; instance = createInstance(fiber, newContext); cacheContext(instance, contextStack[0], newContext); } instance._reactInternalFiber = fiber; var isStateful = !instance.__isStateless; if (isStateful) { var updateQueue = fiber.updateQueue; delete fiber.updateFail; if (fiber.hasMounted) { applybeforeUpdateHooks( fiber, instance, props, newContext, contextStack ); } else { applybeforeMountHooks( fiber, instance, props, newContext, contextStack ); } if (fiber.memoizedState) { instance.state = fiber.memoizedState; } fiber.batching = updateQueue.batching; var cbs = updateQueue.pendingCbs; if (cbs.length) { fiber.pendingCbs = cbs; fiber.effectTag *= CALLBACK; } if (fiber.ref) { fiber.effectTag *= REF; } } else if (type === AnuPortal) { containerStack.unshift(fiber.parent); fiber.shiftContainer = true; } instance.context = newContext; fiber.memoizedProps = instance.props = props; fiber.memoizedState = instance.state; if (instance.getChildContext) { var context = instance.getChildContext(); context = Object.assign({}, contextStack[0], context); fiber.shiftContext = true; contextStack.unshift(context); } if (isStateful) { if (fiber.parent && fiber.hasMounted && fiber.dirty) { fiber.parent.insertPoint = getInsertPoint(fiber); } if (fiber.updateFail) { cloneChildren(fiber); fiber._hydrating = false; return; } delete fiber.dirty; fiber.effectTag *= HOOK; } else { fiber.effectTag = WORKING; } if (fiber.catchError) { return; } fiber._hydrating = true; Renderer.currentOwner = instance; var rendered = applyCallback(instance, "render", []); diffChildren(fiber, rendered); } function applybeforeMountHooks(fiber, instance, newProps) { fiber.setout = true; if (instance.__useNewHooks) { setStateByProps(instance, fiber, newProps, instance.state); } else { callUnsafeHook(instance, "componentWillMount", []); } delete fiber.setout; mergeStates(fiber, newProps); fiber.updateQueue = UpdateQueue(); } function applybeforeUpdateHooks( fiber, instance, newProps, newContext, contextStack ) { var oldProps = fiber.memoizedProps; var oldState = fiber.memoizedState; var updater = instance.updater; updater.prevProps = oldProps; updater.prevState = oldState; var propsChanged = oldProps !== newProps; var contextChanged = instance.context !== newContext; fiber.setout = true; if (!instance.__useNewHooks) { if (propsChanged || contextChanged) { var prevState = instance.state; callUnsafeHook(instance, "componentWillReceiveProps", [ newProps, newContext ]); if (prevState !== instance.state) { fiber.memoizedState = instance.state; } } } var newState = (instance.state = oldState); var updateQueue = fiber.updateQueue; mergeStates(fiber, newProps); newState = fiber.memoizedState; setStateByProps(instance, fiber, newProps, newState); newState = fiber.memoizedState; delete fiber.setout; fiber._hydrating = true; if ( !propsChanged && newState === oldState && contextStack.length == 1 && !updateQueue.isForced ) { fiber.updateFail = true; } else { var args = [newProps, newState, newContext]; fiber.updateQueue = UpdateQueue(); if ( !updateQueue.isForced && !applyCallback(instance, "shouldComponentUpdate", args) ) { fiber.updateFail = true; } else if (!instance.__useNewHooks) { callUnsafeHook(instance, "componentWillUpdate", args); } } } function callUnsafeHook(a, b, c) { applyCallback(a, b, c); applyCallback(a, "UNSAFE_" + b, c); } function isSameNode(a, b) { if (a.type === b.type && a.key === b.key) { return true; } } function setStateByProps(instance, fiber, nextProps, prevState) { fiber.errorHook = gDSFP; var fn = fiber.type[gDSFP]; if (fn) { var partialState = fn.call(null, nextProps, prevState); if (typeNumber(partialState) === 8) { fiber.memoizedState = Object.assign( {}, prevState, partialState ); } } } function cloneChildren(fiber) { var prev = fiber.alternate; if (prev && prev.child) { var pc = prev.children; var cc = (fiber.children = {}); fiber.child = prev.child; fiber.lastChild = prev.lastChild; for (var i in pc) { var a = pc[i]; a.return = fiber; cc[i] = a; } setInsertPoints(cc); } } function cacheContext(instance, unmaskedContext, context) { instance.__unmaskedContext = unmaskedContext; instance.__maskedContext = context; } function getMaskedContext(instance, contextTypes, contextStack) { if (instance && !contextTypes) { return instance.context; } var context = {}; if (!contextTypes) { return context; } var unmaskedContext = contextStack[0]; if (instance) { var cachedUnmasked = instance.__unmaskedContext; if (cachedUnmasked === unmaskedContext) { return instance.__maskedContext; } } for (var key in contextTypes) { if (contextTypes.hasOwnProperty(key)) { context[key] = unmaskedContext[key]; } } if (instance) { cacheContext(instance, unmaskedContext, context); } return context; } function diffChildren(parentFiber, children) { var oldFibers = parentFiber.children; if (oldFibers) { parentFiber.oldChildren = oldFibers; } else { oldFibers = {}; } var newFibers = fiberizeChildren(children, parentFiber); var effects$$1 = parentFiber.effects || (parentFiber.effects = []); var matchFibers = new Object(); delete parentFiber.child; for (var i in oldFibers) { var newFiber = newFibers[i]; var oldFiber = oldFibers[i]; if (newFiber && newFiber.type === oldFiber.type) { matchFibers[i] = oldFiber; if (newFiber.key != null) { oldFiber.key = newFiber.key; } continue; } detachFiber(oldFiber, effects$$1); } var prevFiber = void 0, index = 0; for (var _i in newFibers) { var _newFiber = newFibers[_i]; var _oldFiber = matchFibers[_i]; var alternate = null; if (_oldFiber) { if (isSameNode(_oldFiber, _newFiber)) { alternate = new Fiber(_oldFiber); var oldRef = _oldFiber.ref; _newFiber = extend(_oldFiber, _newFiber); delete _newFiber.disposed; _newFiber.alternate = alternate; if (_newFiber.ref && _newFiber.deleteRef) { delete _newFiber.ref; delete _newFiber.deleteRef; } if (oldRef && oldRef !== _newFiber.ref) { effects$$1.push(alternate); } if (_newFiber.tag === 5) { _newFiber.lastProps = alternate.props; } } else { detachFiber(_oldFiber, effects$$1); } } else { _newFiber = new Fiber(_newFiber); } newFibers[_i] = _newFiber; _newFiber.index = index++; _newFiber.return = parentFiber; if (prevFiber) { prevFiber.sibling = _newFiber; _newFiber.forward = prevFiber; } else { parentFiber.child = _newFiber; _newFiber.forward = null; } prevFiber = _newFiber; } parentFiber.lastChild = prevFiber; if (prevFiber) { prevFiber.sibling = null; } } var Unbatch = miniCreateClass( function Unbatch(props) { this.state = { child: props.child }; }, Component, { render: function render() { return this.state.child; } } ); function getDOMNode() { return this; } var Refs = { fireRef: function fireRef(fiber, dom) { var ref = fiber.ref; var owner = fiber._owner; try { var number = typeNumber(ref); refStrategy[number](owner, ref, dom); if (owner && owner.__isStateless) { delete fiber.ref; fiber.deleteRef = true; } } catch (e) { pushError(fiber, "ref", e); } } }; var refStrategy = { 4: function _(owner, ref, dom) { if (dom === null) { delete owner.refs[ref]; } else { if (dom.nodeType) { dom.getDOMNode = getDOMNode; } owner.refs[ref] = dom; } }, 5: function _(owner, ref, dom) { ref(dom); }, 8: function _(owner, ref, dom) { ref.current = dom; } }; var domFns = ["insertElement", "updateContent", "updateAttribute"]; var domEffects = [PLACE, CONTENT, ATTR]; var domRemoved = []; function commitDFSImpl(fiber) { var topFiber = fiber; outerLoop: while (true) { if (fiber.effects && fiber.effects.length) { fiber.effects.forEach(disposeFiber); delete fiber.effects; } if (fiber.effectTag % PLACE == 0) { domEffects.forEach(function(effect, i) { if (fiber.effectTag % effect == 0) { Renderer[domFns[i]](fiber); fiber.effectTag /= effect; } }); fiber.hasMounted = true; } else { if (fiber.catchError) { removeFormBoundaries(fiber); disposeFibers(fiber); } } if (fiber.updateFail) { delete fiber.updateFail; } if (fiber.child && fiber.child.effectTag > NOWORK) { fiber = fiber.child; continue; } var f = fiber; while (f) { if (f.effectTag === WORKING) { f.effectTag = NOWORK; } else if (f.effectTag > WORKING) { commitEffects(f); if (f.capturedValues) { f.effectTag = CAPTURE; } } if (f === topFiber || f.hostRoot) { break outerLoop; } if (f.sibling) { fiber = f.sibling; continue outerLoop; } f = f.return; } } } function commitDFS(effects$$1) { Renderer.batchedUpdates(function() { var el; while ((el = effects$$1.shift())) { if (el.effectTag === DETACH && el.caughtError) { disposeFiber(el); } else { commitDFSImpl(el); } if (domRemoved.length) { domRemoved.forEach(Renderer.removeElement); domRemoved.length = 0; } } }, {}); var error = Renderer.catchError; if (error) { delete Renderer.catchError; throw error; } } function commitEffects(fiber) { var instance = fiber.stateNode || emptyObject; var amount = fiber.effectTag; var updater = instance.updater || fakeObject; for (var i = 0; i < effectLength; i++) { var effectNo = effectNames[i]; if (effectNo > amount) { break; } if (amount % effectNo === 0) { amount /= effectNo; switch (effectNo) { case WORKING: break; case DUPLEX: Renderer.updateControlled(fiber); break; case HOOK: if (fiber.hasMounted) { guardCallback(instance, "componentDidUpdate", [ updater.prevProps, updater.prevState, updater.snapshot ]); } else { fiber.hasMounted = true; guardCallback(instance, "componentDidMount", []); } delete fiber._hydrating; if (fiber.catchError) { fiber.effectTag = amount; return; } break; case REF: Refs.fireRef(fiber, instance); break; case CALLBACK: var queue = fiber.pendingCbs; fiber._hydrating = true; queue.forEach(function(fn) { fn.call(instance); }); delete fiber._hydrating; delete fiber.pendingCbs; break; case CAPTURE: var values = fiber.capturedValues; fiber.caughtError = true; var a = values.shift(); var b = values.shift(); if (!values.length) { fiber.effectTag = amount; delete fiber.capturedValues; } instance.componentDidCatch(a, b); break; } } } fiber.effectTag = NOWORK; } function disposeFibers(fiber) { var list = [fiber.oldChildren, fiber.children]; for (var i = 0; i < 2; i++) { var c = list[i]; if (c) { for (var _i in c) { var child = c[_i]; if (!child.disposed && child.hasMounted) { disposeFiber(child, true); disposeFibers(child); } } } } delete fiber.child; delete fiber.lastChild; delete fiber.oldChildren; fiber.children = {}; } function disposeFiber(fiber, force) { var stateNode = fiber.stateNode, effectTag = fiber.effectTag; if (!stateNode) { return; } if (!stateNode.__isStateless && fiber.ref) { Refs.fireRef(fiber, null); } if (effectTag % DETACH == 0 || force === true) { if (fiber.tag > 3) { domRemoved.push(fiber); } else { if (fiber.hasMounted) { stateNode.updater.enqueueSetState = returnFalse; guardCallback(stateNode, "componentWillUnmount", []); delete fiber.stateNode; } } delete fiber.alternate; delete fiber.hasMounted; fiber.disposed = true; } fiber.effectTag = NOWORK; } var macrotasks = Renderer.macrotasks; var boundaries = Renderer.boundaries; var batchedtasks = []; function render(vnode, root, callback) { var container = createContainer(root), immediateUpdate = false; if (!container.hostRoot) { var fiber = new Fiber({ type: Unbatch, tag: 2, props: {}, hasMounted: true, memoizedState: {}, return: container }); fiber.index = 0; container.child = fiber; var instance = createInstance(fiber, {}); container.hostRoot = instance; immediateUpdate = true; Renderer.emptyElement(container); } var carrier = {}; updateComponent( container.hostRoot, { child: vnode }, wrapCb(callback, carrier), immediateUpdate ); return carrier.instance; } function wrapCb(fn, carrier) { return function() { var fiber = get(this); var target = fiber.child ? fiber.child.stateNode : null; fn && fn.call(target); carrier.instance = target; }; } function performWork(deadline) { workLoop(deadline); if (boundaries.length) { macrotasks.unshift.apply(macrotasks, boundaries); boundaries.length = 0; } topFibers.forEach(function(el) { var microtasks = el.microtasks; while ((el = microtasks.shift())) { if (!el.disposed) { macrotasks.push(el); } } }); if (macrotasks.length) { requestIdleCallback(performWork); } } var ENOUGH_TIME = 1; var deadline = { didTimeout: false, timeRemaining: function timeRemaining() { return 2; } }; function requestIdleCallback(fn) { fn(deadline); } Renderer.scheduleWork = function() { performWork(deadline); }; var isBatching = false; Renderer.batchedUpdates = function(callback, event) { var keepbook = isBatching; isBatching = true; try { event && Renderer.fireMiddlewares(true); return callback(event); } finally { isBatching = keepbook; if (!isBatching) { var el = void 0; while ((el = batchedtasks.shift())) { if (!el.disabled) { macrotasks.push(el); } } event && Renderer.fireMiddlewares(); Renderer.scheduleWork(); } } }; function workLoop(deadline) { var fiber = macrotasks.shift(), info = void 0; if (fiber) { if (fiber.type === Unbatch) { info = fiber.return; } else { var dom = getContainer(fiber); info = { containerStack: [dom], contextStack: [fiber.stateNode.__unmaskedContext] }; } reconcileDFS(fiber, info, deadline, ENOUGH_TIME); updateCommitQueue(fiber); resetStack(info); if (macrotasks.length && deadline.timeRemaining() > ENOUGH_TIME) { workLoop(deadline); } else { commitDFS(effects); } } } function updateCommitQueue(fiber) { var hasBoundary = boundaries.length; if (fiber.type !== Unbatch) { if (hasBoundary) { arrayPush.apply(effects, boundaries); } else { effects.push(fiber); } } else { effects.push(fiber); } boundaries.length = 0; } function mergeUpdates(fiber, state, isForced, callback) { var updateQueue = fiber.updateQueue; if (isForced) { updateQueue.isForced = true; } if (state) { updateQueue.pendingStates.push(state); } if (isFn(callback)) { updateQueue.pendingCbs.push(callback); } } function fiberContains(p, son) { while (son.return) { if (son.return === p) { return true; } son = son.return; } } function getQueue(fiber) { while (fiber) { if (fiber.microtasks) { return fiber.microtasks; } fiber = fiber.return; } } function pushChildQueue(fiber, queue) { var maps = {}; for (var i = queue.length, el; (el = queue[--i]); ) { if (fiber === el) { queue.splice(i, 1); continue; } else if (fiberContains(fiber, el)) { queue.splice(i, 1); continue; } maps[el.stateNode.updater.mountOrder] = true; } var enqueue = true, p = fiber, hackSCU = []; while (p.return) { p = p.return; var instance = p.stateNode; if ( instance.refs && !instance.__isStateless && p.type !== Unbatch ) { hackSCU.push(p); var u = instance.updater; if (maps[u.mountOrder]) { enqueue = false; break; } } } hackSCU.forEach(function(el) { el.updateQueue.batching = true; }); if (enqueue) { queue.push(fiber); } } function updateComponent(instance, state, callback, immediateUpdate) { var fiber = get(instance); fiber.dirty = true; var sn = typeNumber(state); var isForced = state === true; var microtasks = getQueue(fiber); state = isForced ? null : sn === 5 || sn === 8 ? state : null; if (fiber.setout) { immediateUpdate = false; } else if ((isBatching && !immediateUpdate) || fiber._hydrating) { pushChildQueue(fiber, batchedtasks); } else { immediateUpdate = immediateUpdate || !fiber._hydrating; pushChildQueue(fiber, microtasks); } mergeUpdates(fiber, state, isForced, callback); if (immediateUpdate) { Renderer.scheduleWork(); } } Renderer.updateComponent = updateComponent; function validateTag(el) { return el && el.appendChild; } function createContainer(root, onlyGet, validate) { validate = validate || validateTag; if (!validate(root)) { throw "container is not a element"; } root.anuProp = 2018; var useProp = root.anuProp === 2018; if (useProp) { root.anuProp = void 0; if (get(root)) { return get(root); } } else { var index = topNodes.indexOf(root); if (index !== -1) { return topFibers[index]; } } if (onlyGet) { return null; } var container = new Fiber({ stateNode: root, tag: 5, name: "hostRoot", contextStack: [{}], containerStack: [root], microtasks: [], type: root.nodeName || root.type }); if (useProp) { root._reactInternalFiber = container; } topNodes.push(root); topFibers.push(container); return container; } function getContainer(p) { if (p.parent) { return p.parent; } while ((p = p.return)) { if (p.tag === 5) { return p.stateNode; } } } var reuseTextNodes = []; function createElement$1(vnode) { var p = vnode.return; var type = vnode.type, props = vnode.props, ns = vnode.ns; switch (type) { case "#text": var node = reuseTextNodes.pop(); if (node) { node.nodeValue = props; return node; } return document.createTextNode(props); case "#comment": return document.createComment(props); case "svg": ns = NAMESPACE.svg; break; case "math": ns = NAMESPACE.math; break; default: do { var s = p.name == "AnuPortal" ? p.props.parent : p.tag === 5 ? p.stateNode : null; if (s) { ns = s.namespaceURI; if ( p.type === "foreignObject" || ns === NAMESPACE.xhtml ) { ns = ""; } break; } } while ((p = p.return)); break; } try { if (ns) { vnode.namespaceURI = ns; return document.createElementNS(ns, type); } } catch (e1) {} var elem = document.createElement(type); var inputType = props && props.type; if (inputType && elem.uniqueID) { try { elem = document.createElement( "<" + type + " type='" + inputType + "'/>" ); } catch (e2) {} } return elem; } var hyperspace = document.createElement("div"); function _emptyElement(node) { while (node.firstChild) { node.removeChild(node.firstChild); } } Renderer.middleware({ begin: noop, end: fireDuplex }); function _removeElement(node) { if (!node) { return; } var nodeType = node.nodeType; if (nodeType === 1 && node.__events) { node.__events = null; } else if (nodeType === 3 && reuseTextNodes.length < 100) { reuseTextNodes.push(node); } hyperspace.appendChild(node); hyperspace.removeChild(node); } function insertElement(fiber) { var dom = fiber.stateNode, parent = fiber.parent; try { var insertPoint = fiber.forwardFiber ? fiber.forwardFiber.stateNode : null; var after = insertPoint ? insertPoint.nextSibling : parent.firstChild; if (after == dom) { return; } if (after === null && dom === parent.lastChild) { return; } Renderer.inserting = fiber.tag === 5 && document.activeElement; parent.insertBefore(dom, after); Renderer.inserting = null; } catch (e) { throw e; } } render.Render = Renderer; function mergeContext(container, context) { container.contextStack[0] = Object.assign({}, context); } var DOMRenderer = createRenderer({ render: render, updateAttribute: function updateAttribute(fiber) { var props = fiber.props, lastProps = fiber.lastProps, stateNode = fiber.stateNode; diffProps(stateNode, lastProps || emptyObject, props, fiber); }, updateContent: function updateContent(fiber) { fiber.stateNode.nodeValue = fiber.props; }, updateControlled: duplexAction, createElement: createElement$1, insertElement: insertElement, emptyElement: function emptyElement(fiber) { _emptyElement(fiber.stateNode); }, unstable_renderSubtreeIntoContainer: function unstable_renderSubtreeIntoContainer( instance, vnode, root, callback ) { var container = createContainer(root), context = container.contextStack[0], fiber = get(instance), backup = void 0; do { var inst = fiber.stateNode; if (inst.getChildContext) { backup = mergeContext(container, inst.getChildContext()); break; } else { backup = fiber; } } while ((fiber = fiber.return)); if (backup && backup.contextStack) { mergeContext(container, backup.contextStack[0]); } return Renderer.render(vnode, root, callback); }, unmountComponentAtNode: function unmountComponentAtNode(root) { var container = createContainer(root, true); var instance = container && container.hostRoot; if (instance) { Renderer.updateComponent( instance, { child: null }, function() { removeTop(root); }, true ); return true; } return false; }, removeElement: function removeElement(fiber) { var dom = fiber.stateNode; if (dom) { _removeElement(dom); delete fiber.stateNode; if (dom._reactInternalFiber) { removeTop(dom); } } } }); function removeTop(dom) { var j = topNodes.indexOf(dom); if (j !== -1) { topFibers.splice(j, 1); topNodes.splice(j, 1); } dom._reactInternalFiber = null; } var noCheck = false; function setSelectValue(e) { if (e.propertyName === "value" && !noCheck) { syncValueByOptionValue(e.srcElement); } } function syncValueByOptionValue(dom) { var idx = dom.selectedIndex, option = void 0, attr = void 0; if (idx > -1) { option = dom.options[idx]; attr = option.attributes.value; dom.value = attr && attr.specified ? option.value : option.text; } } var fixIEChangeHandle = createHandle("change", function(e) { var dom = e.srcElement; if (dom.type === "select-one") { if (!dom.__bindFixValueFn) { addEvent(dom, "propertychange", setSelectValue); dom.__bindFixValueFn = true; } noCheck = true; syncValueByOptionValue(dom); noCheck = false; return true; } if (e.type === "propertychange") { return e.propertyName === "value" && !dom.__anuSetValue; } }); var fixIEInputHandle = createHandle("input", function(e) { return e.propertyName === "value"; }); var IEHandleFix = { input: function input(dom) { addEvent(dom, "propertychange", fixIEInputHandle); }, change: function change(dom) { var mask = /radio|check/.test(dom.type) ? "click" : /text|password/.test(dom.type) ? "propertychange" : "change"; addEvent(dom, mask, fixIEChangeHandle); }, submit: function submit(dom) { if (dom.nodeName === "FORM") { addEvent(dom, "submit", dispatchEvent); } } }; if (msie < 9) { actionStrategy[innerHTML] = function(dom, name, val, lastProps) { var oldhtml = lastProps[name] && lastProps[name].__html; var html = val && val.__html; if (html !== oldhtml) { dom.innerHTML = String.fromCharCode(0xfeff) + html; var textNode = dom.firstChild; if (textNode.data.length === 1) { dom.removeChild(textNode); } else { textNode.deleteData(0, 1); } } }; focusMap.focus = "focusin"; focusMap.blur = "focusout"; focusMap.focusin = "focus"; focusMap.focusout = "blur"; extend( eventPropHooks, oneObject( "mousemove, mouseout,mouseenter, mouseleave, mouseout,mousewheel, mousewheel, whe" + "el, click", function(event) { if (!("pageX" in event)) { var doc = event.target.ownerDocument || document; var box = doc.compatMode === "BackCompat" ? doc.body : doc.documentElement; event.pageX = event.clientX + (box.scrollLeft >> 0) - (box.clientLeft >> 0); event.pageY = event.clientY + (box.scrollTop >> 0) - (box.clientTop >> 0); } } ) ); var translateToKey = { "8": "Backspace", "9": "Tab", "12": "Clear", "13": "Enter", "16": "Shift", "17": "Control", "18": "Alt", "19": "Pause", "20": "CapsLock", "27": "Escape", "32": " ", "33": "PageUp", "34": "PageDown", "35": "End", "36": "Home", "37": "ArrowLeft", "38": "ArrowUp", "39": "ArrowRight", "40": "ArrowDown", "45": "Insert", "46": "Delete", "112": "F1", "113": "F2", "114": "F3", "115": "F4", "116": "F5", "117": "F6", "118": "F7", "119": "F8", "120": "F9", "121": "F10", "122": "F11", "123": "F12", "144": "NumLock", "145": "ScrollLock", "224": "Meta" }; extend( eventPropHooks, oneObject("keyup, keydown, keypress", function(event) { if (!event.which && event.type.indexOf("key") === 0) { event.key = translateToKey[event.keyCode]; event.which = event.charCode != null ? event.charCode : event.keyCode; } }) ); for (var i in IEHandleFix) { eventHooks[i] = eventHooks[i + "capture"] = IEHandleFix[i]; } } var win$1 = getWindow(); var prevReact = win$1.React; var React = void 0; if (prevReact && prevReact.eventSystem) { React = prevReact; } else { var render$1 = DOMRenderer.render, eventSystem = DOMRenderer.eventSystem, unstable_renderSubtreeIntoContainer = DOMRenderer.unstable_renderSubtreeIntoContainer, unmountComponentAtNode = DOMRenderer.unmountComponentAtNode; React = win$1.React = win$1.ReactDOM = { eventSystem: eventSystem, findDOMNode: findDOMNode, unmountComponentAtNode: unmountComponentAtNode, unstable_renderSubtreeIntoContainer: unstable_renderSubtreeIntoContainer, version: "2.2.1", render: render$1, hydrate: render$1, unstable_batchedUpdates: DOMRenderer.batchedUpdates, Fragment: Fragment, PropTypes: PropTypes, Children: Children, createPortal: createPortal, createContext: createContext, Component: Component, createRef: createRef, forwardRef: forwardRef, createElement: createElement, cloneElement: cloneElement, PureComponent: PureComponent, isValidElement: isValidElement, createFactory: createFactory }; } var React$1 = React; return React$1; }); ================================================ FILE: dist/ReactNoop.js ================================================ /** * 此个版本专门用于测试 * by 司徒正美 Copyright 2018-05-30 * IE9+ */ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory()) : typeof define === "function" && define.amd ? define(factory) : (global.ReactNoop = factory()); })(this, function() { var arrayPush = Array.prototype.push; var hasOwnProperty = Object.prototype.hasOwnProperty; function Fragment(props) { return props.children; } var gSBU = "getSnapshotBeforeUpdate"; var gDSFP = "getDerivedStateFromProps"; var hasSymbol = typeof Symbol === "function" && Symbol["for"]; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol["for"]("react.element") : 0xeac7; var effects = []; function resetStack(info) { keepLast(info.containerStack); keepLast(info.containerStack); } function keepLast(list) { var n = list.length; list.splice(0, n - 1); } function get(key) { return key._reactInternalFiber; } var topFibers = []; var topNodes = []; var emptyObject = {}; var fakeWindow = {}; function getWindow() { try { return window; } catch (e) { try { return global; } catch (e) { return fakeWindow; } } } function isMounted(instance) { var fiber = get(instance); return !!(fiber && fiber.hasMounted); } function toWarnDev(msg, deprecated) { msg = deprecated ? msg + " is deprecated" : msg; var process = getWindow().process; if (process && process.env.NODE_ENV === "development") { throw msg; } } function extend(obj, props) { for (var i in props) { if (hasOwnProperty.call(props, i)) { obj[i] = props[i]; } } return obj; } function returnFalse() { return false; } function returnTrue() { return true; } var __type = Object.prototype.toString; function noop() {} function inherit(SubClass, SupClass) { function Bridge() {} var orig = SubClass.prototype; Bridge.prototype = SupClass.prototype; var fn = (SubClass.prototype = new Bridge()); extend(fn, orig); fn.constructor = SubClass; return fn; } function isFn(obj) { return __type.call(obj) === "[object Function]"; } var numberMap = { "[object Boolean]": 2, "[object Number]": 3, "[object String]": 4, "[object Function]": 5, "[object Symbol]": 6, "[object Array]": 7 }; function typeNumber(data) { if (data === null) { return 1; } if (data === void 666) { return 0; } var a = numberMap[__type.call(data)]; return a || 8; } function createRenderer(methods) { return extend(Renderer, methods); } var middlewares = []; var Renderer = { controlledCbs: [], mountOrder: 1, macrotasks: [], boundaries: [], middleware: function middleware(obj) { if (obj.begin && obj.end) { middlewares.push(obj); } }, fireMiddlewares: function fireMiddlewares(begin) { var index = begin ? middlewares.length - 1 : 0, delta = begin ? -1 : 1, method = begin ? "begin" : "end", obj = void 0; while ((obj = middlewares[index])) { obj[method](); index += delta; } }, currentOwner: null }; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var RESERVED_PROPS = { key: true, ref: true, __self: true, __source: true }; function makeProps(type, config, props, children, len) { var defaultProps = void 0, propName = void 0; for (propName in config) { if ( hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName) ) { props[propName] = config[propName]; } } if (type && type.defaultProps) { defaultProps = type.defaultProps; for (propName in defaultProps) { if (props[propName] === undefined) { props[propName] = defaultProps[propName]; } } } if (len === 1) { props.children = children[0]; } else if (len > 1) { props.children = children; } return props; } function hasValidRef(config) { return config.ref !== undefined; } function hasValidKey(config) { return config.key !== undefined; } function createElement(type, config) { for ( var _len = arguments.length, children = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++ ) { children[_key - 2] = arguments[_key]; } var props = {}, tag = 5, key = null, ref = null, argsLen = children.length; if (type && type.call) { tag = type.prototype && type.prototype.render ? 2 : 1; } else if (type + "" !== type) { toWarnDev("React.createElement: type is invalid."); } if (config != null) { if (hasValidRef(config)) { ref = config.ref; } if (hasValidKey(config)) { key = "" + config.key; } } props = makeProps(type, config || {}, props, children, argsLen); return ReactElement(type, tag, props, key, ref, Renderer.currentOwner); } function cloneElement(element, config) { var props = Object.assign({}, element.props); var type = element.type; var key = element.key; var ref = element.ref; var tag = element.tag; var owner = element._owner; for ( var _len2 = arguments.length, children = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++ ) { children[_key2 - 2] = arguments[_key2]; } var argsLen = children.length; if (config != null) { if (hasValidRef(config)) { ref = config.ref; owner = Renderer.currentOwner; } if (hasValidKey(config)) { key = "" + config.key; } } props = makeProps(type, config || {}, props, children, argsLen); return ReactElement(type, tag, props, key, ref, owner); } function createFactory(type) { var factory = createElement.bind(null, type); factory.type = type; return factory; } function ReactElement(type, tag, props, key, ref, owner) { var ret = { type: type, tag: tag, props: props }; if (tag !== 6) { ret.$$typeof = REACT_ELEMENT_TYPE; ret.key = key || null; var refType = typeNumber(ref); if ( refType === 2 || refType === 3 || refType === 4 || refType === 5 || refType === 8 ) { if (refType < 4) { ref += ""; } ret.ref = ref; } else { ret.ref = null; } ret._owner = owner; } return ret; } function isValidElement(vnode) { return !!vnode && vnode.$$typeof === REACT_ELEMENT_TYPE; } function createVText(text) { return ReactElement("#text", 6, text + ""); } function escape(key) { var escapeRegex = /[=:]/g; var escaperLookup = { "=": "=0", ":": "=2" }; var escapedString = ("" + key).replace(escapeRegex, function(match) { return escaperLookup[match]; }); return "$" + escapedString; } var lastText = void 0; var flattenIndex = void 0; var flattenObject = void 0; function flattenCb(context, child, key, childType) { if (child === null) { lastText = null; return; } if (childType === 3 || childType === 4) { if (lastText) { lastText.props += child; return; } lastText = child = createVText(child); } else { lastText = null; } if (!flattenObject[key]) { flattenObject[key] = child; } else { key = "." + flattenIndex; flattenObject[key] = child; } flattenIndex++; } function fiberizeChildren(children, fiber) { flattenObject = {}; flattenIndex = 0; if (children !== void 666) { lastText = null; traverseAllChildren(children, "", flattenCb); } flattenIndex = 0; return (fiber.children = flattenObject); } function getComponentKey(component, index) { if ( (typeof component === "undefined" ? "undefined" : _typeof(component)) === "object" && component !== null && component.key != null ) { return escape(component.key); } return index.toString(36); } var SEPARATOR = "."; var SUBSEPARATOR = ":"; function traverseAllChildren(children, nameSoFar, callback, bookKeeping) { var childType = typeNumber(children); var invokeCallback = false; switch (childType) { case 0: case 1: case 2: case 5: case 6: children = null; invokeCallback = true; break; case 3: case 4: invokeCallback = true; break; case 8: if (children.$$typeof) { invokeCallback = true; } else if (children.hasOwnProperty("toString")) { children = children + ""; invokeCallback = true; childType = 3; } break; } if (invokeCallback) { callback( bookKeeping, children, nameSoFar === "" ? SEPARATOR + getComponentKey(children, 0) : nameSoFar, childType ); return 1; } var subtreeCount = 0; var nextNamePrefix = nameSoFar === "" ? SEPARATOR : nameSoFar + SUBSEPARATOR; if (children.forEach) { children.forEach(function(child, i) { var nextName = nextNamePrefix + getComponentKey(child, i); subtreeCount += traverseAllChildren( child, nextName, callback, bookKeeping ); }); return subtreeCount; } var iteratorFn = getIteractor(children); if (iteratorFn) { iterator = iteratorFn.call(children); var ii = 0, step; while (!(step = iterator.next()).done) { child = step.value; nextName = nextNamePrefix + getComponentKey(child, ii++); subtreeCount += traverseAllChildren( child, nextName, callback, bookKeeping ); } return subtreeCount; } throw "React.createElement: type is invalid."; } var REAL_SYMBOL = hasSymbol && Symbol.iterator; var FAKE_SYMBOL = "@@iterator"; function getIteractor(a) { var iteratorFn = (REAL_SYMBOL && a[REAL_SYMBOL]) || a[FAKE_SYMBOL]; if (iteratorFn && iteratorFn.call) { return iteratorFn; } } var Children = { only: function only(children) { if (isValidElement(children)) { return children; } throw new Error("expect only one child"); }, count: function count(children) { if (children == null) { return 0; } return traverseAllChildren(children, "", noop); }, map: function map(children, func, context) { return proxyIt(children, func, [], context); }, forEach: function forEach(children, func, context) { return proxyIt(children, func, null, context); }, toArray: function toArray$$1(children) { return proxyIt(children, K, []); } }; function proxyIt(children, func, result, context) { if (children == null) { return []; } mapChildren(children, null, func, result, context); return result; } function K(el) { return el; } function mapChildren(children, prefix, func, result, context) { var keyPrefix = ""; if (prefix != null) { keyPrefix = escapeUserProvidedKey(prefix) + "/"; } traverseAllChildren(children, "", traverseCallback, { context: context, keyPrefix: keyPrefix, func: func, result: result, count: 0 }); } var userProvidedKeyEscapeRegex = /\/+/g; function escapeUserProvidedKey(text) { return ("" + text).replace(userProvidedKeyEscapeRegex, "$&/"); } function traverseCallback(bookKeeping, child, childKey) { var result = bookKeeping.result, keyPrefix = bookKeeping.keyPrefix, func = bookKeeping.func, context = bookKeeping.context; var mappedChild = func.call(context, child, bookKeeping.count++); if (!result) { return; } if (Array.isArray(mappedChild)) { mapChildren(mappedChild, childKey, K, result); } else if (mappedChild != null) { if (isValidElement(mappedChild)) { mappedChild = extend({}, mappedChild); mappedChild.key = keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + "/" : "") + childKey; } result.push(mappedChild); } } var check = function check() { return check; }; check.isRequired = check; var PropTypes = { array: check, bool: check, func: check, number: check, object: check, string: check, any: check, arrayOf: check, element: check, instanceOf: check, node: check, objectOf: check, oneOf: check, oneOfType: check, shape: check }; var fakeObject = { enqueueSetState: returnFalse, isMounted: returnFalse }; function Component(props, context) { Renderer.currentOwner = this; this.context = context; this.props = props; this.refs = {}; this.updater = fakeObject; this.state = null; } Component.prototype = { constructor: Component, replaceState: function replaceState() { toWarnDev("replaceState", true); }, isReactComponent: returnTrue, isMounted: function isMounted$$1() { toWarnDev("isMounted", true); return this.updater.isMounted(this); }, setState: function setState(state, cb) { this.updater.enqueueSetState(this, state, cb); }, forceUpdate: function forceUpdate(cb) { this.updater.enqueueSetState(this, true, cb); }, render: function render() { throw "must implement render"; } }; function shallowEqual(objA, objB) { if (Object.is(objA, objB)) { return true; } if (typeNumber(objA) < 7 || typeNumber(objB) < 7) { return false; } var keysA = Object.keys(objA); var keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } for (var i = 0; i < keysA.length; i++) { if ( !hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]]) ) { return false; } } return true; } function PureComponent(props, context) { Component.call(this, props, context); } var fn = inherit(PureComponent, Component); fn.shouldComponentUpdate = function(nextProps, nextState) { var a = shallowEqual(this.props, nextProps); var b = shallowEqual(this.state, nextState); return !a || !b; }; fn.isPureComponent = true; function createRef() { return { current: null }; } function forwardRef(fn) { createRef.render = fn; return createRef; } function AnuPortal(props) { return props.children; } function createPortal(children, parent) { var child = createElement(AnuPortal, { children: children, parent: parent }); child.isPortal = true; return child; } var uuid = 1; function gud() { return uuid++; } var MAX_NUMBER = 1073741823; function createEventEmitter(value) { var handlers = []; return { on: function on(handler) { handlers.push(handler); }, off: function off(handler) { handlers = handlers.filter(function(h) { return h !== handler; }); }, get: function get$$1() { return value; }, set: function set(newValue, changedBits) { value = newValue; handlers.forEach(function(handler) { return handler(value, changedBits); }); } }; } function createContext(defaultValue, calculateChangedBits) { var contextProp = "__create-react-context-" + gud() + "__"; function Provider(props, context) { Component.call(this, props, context); this.emitter = createEventEmitter(props.value); } function create(obj, value) { obj[contextProp] = value; return obj; } Provider.childContextTypes = create({}, PropTypes.object.isRequired); var fn = inherit(Provider, Component); fn.getChildContext = function() { return create({}, this.emitter); }; fn.componentWillReceiveProps = function(nextProps) { if (this.props.value !== nextProps.value) { var oldValue = this.props.value; var newValue = nextProps.value; var changedBits = void 0; if (Object.is(oldValue, newValue)) { changedBits = 0; } else { changedBits = typeof calculateChangedBits === "function" ? calculateChangedBits(oldValue, newValue) : MAX_NUMBER; changedBits |= 0; if (changedBits !== 0) { this.emitter.set(nextProps.value, changedBits); } } } }; fn.render = function() { return this.props.children; }; function Consumer(props, context) { var _this = this; Component.call(this, props, context); this.observedBits = 0; this.state = { value: this.getValue() }; this.onUpdate = function(newValue, changedBits) { var observedBits = _this.observedBits | 0; if ((observedBits & changedBits) !== 0) { _this.setState({ value: _this.getValue() }); } }; } Consumer.contextTypes = create({}, PropTypes.object); var fn2 = inherit(Consumer, Component); fn2.componentWillReceiveProps = function(nextProps) { var observedBits = nextProps.observedBits; this.observedBits = observedBits === undefined || observedBits === null ? MAX_NUMBER : observedBits; }; fn2.getValue = function() { if (this.context[contextProp]) { return this.context[contextProp].get(); } else { return defaultValue; } }; fn2.componentDidMount = function() { if (this.context[contextProp]) { this.context[contextProp].on(this.onUpdate); } var observedBits = this.props.observedBits; this.observedBits = observedBits === undefined || observedBits === null ? MAX_NUMBER : observedBits; }; fn2.componentWillUnmount = function() { if (this.context[contextProp]) { this.context[contextProp].off(this.onUpdate); } }; fn2.render = function() { return this.props.children(this.state.value); }; return { Provider: Provider, Consumer: Consumer }; } function UpdateQueue() { return { pendingStates: [], pendingCbs: [] }; } function createInstance(fiber, context) { var updater = { mountOrder: Renderer.mountOrder++, enqueueSetState: returnFalse, isMounted: isMounted }; var props = fiber.props, type = fiber.type, tag = fiber.tag, ref = fiber.ref, isStateless = tag === 1, lastOwn = Renderer.currentOwner, instance = { refs: {}, props: props, context: context, ref: ref, __proto__: type.prototype }; fiber.errorHook = "constructor"; try { if (isStateless) { extend(instance, { __isStateless: true, __init: true, renderImpl: type, render: function f() { var a = this.__keep; if (a) { delete this.__keep; return a.value; } a = this.renderImpl(this.props, this.context); if (a && a.render) { delete this.__isStateless; for (var i in a) { instance[i == "render" ? "renderImpl" : i] = a[i]; } } else if (this.__init) { this.__keep = { value: a }; } return a; } }); Renderer.currentOwner = instance; if (type.render) { instance.render = function() { return type.render(this.props, this.ref); }; } else { instance.render(); delete instance.__init; } } else { instance = new type(props, context); if (!(instance instanceof Component)) { throw type.name + " doesn't extend React.Component"; } } } finally { Renderer.currentOwner = lastOwn; fiber.stateNode = instance; fiber.updateQueue = UpdateQueue(); instance._reactInternalFiber = fiber; instance.updater = updater; instance.context = context; updater.enqueueSetState = Renderer.updateComponent; if (type[gDSFP] || instance[gSBU]) { instance.__useNewHooks = true; } } return instance; } function Fiber(vnode) { extend(this, vnode); var type = vnode.type; this.name = type.displayName || type.name || type; this.effectTag = 1; } var NOWORK = 1; var PLACE = 2; var CONTENT = 3; var ATTR = 5; var NULLREF = 7; var DETACH = 11; var HOOK = 13; var REF = 17; var CALLBACK = 19; var CAPTURE = 23; var effectNames = [ PLACE, CONTENT, ATTR, NULLREF, HOOK, REF, DETACH, CALLBACK, CAPTURE ].sort(function(a, b) { return a - b; }); var effectLength = effectNames.length; function pushError(fiber, hook, error) { var names = []; var boundary = findCatchComponent(fiber, names, hook); var stack = describeError(names, hook); if (boundary) { if (fiber.hasMounted) { } else { fiber.stateNode = { updater: fakeObject }; fiber.effectTag = NOWORK; } var values = boundary.capturedValues || (boundary.capturedValues = []); values.push(error, { componentStack: stack }); } else { var p = fiber.return; for (var i in p.children) { if (p.children[i] == fiber) { fiber.type = noop; } } while (p) { p._hydrating = false; p = p.return; } if (!Renderer.catchError) { Renderer.catchStack = stack; Renderer.catchError = error; } } } function guardCallback(host, hook, args) { try { return applyCallback(host, hook, args); } catch (error) { pushError(get(host), hook, error); } } function applyCallback(host, hook, args) { var fiber = host._reactInternalFiber; fiber.errorHook = hook; var fn = host[hook]; if (hook == "componentWillUnmount") { host[hook] = noop; } if (fn) { return fn.apply(host, args); } return true; } function describeError(names, hook) { var segments = ["**" + hook + "** method occur error "]; names.forEach(function(name, i) { if (names[i + 1]) { segments.push( "in " + name + " (created By " + names[i + 1] + ")" ); } }); return segments.join("\n\r").trim(); } function findCatchComponent(fiber, names, hook) { var instance = void 0, name = void 0, topFiber = fiber, retry = void 0, boundary = void 0; while (fiber) { name = fiber.name; if (fiber.tag < 4) { names.push(name); instance = fiber.stateNode || {}; if (instance.componentDidCatch && !boundary) { if (!fiber.caughtError && topFiber !== fiber) { boundary = fiber; } else if (fiber.caughtError) { retry = fiber; } } } else if (fiber.tag === 5) { names.push(name); } fiber = fiber.return; if (boundary) { var boundaries = Renderer.boundaries; if (!retry || retry !== boundary) { var effectTag = boundary.effectTag; var f = boundary.alternate; if (f && !f.catchError) { f.forward = boundary.forward; f.sibling = boundary.sibling; if (boundary.return.child == boundary) { boundary.return.child = f; } boundary = f; } if (!boundary.catchError) { if ( hook == "componentWillUnmount" || hook == "componentDidUpdate" ) { boundary.effectTag = CAPTURE; } else { boundary.effectTag = effectTag * CAPTURE; } boundaries.unshift(boundary); boundary.catchError = true; } if (retry) { var arr = boundary.effects || (boundary.effects = []); arr.push(retry); } } return boundary; } } } function removeFormBoundaries(fiber) { delete fiber.catchError; var arr = Renderer.boundaries; var index = arr.indexOf(fiber); if (index !== -1) { arr.splice(index, 1); } } function detachFiber(fiber, effects$$1) { fiber.effectTag = DETACH; effects$$1.push(fiber); if (fiber.ref && fiber.hasMounted) { fiber.effectTag *= NULLREF; } fiber.disposed = true; for (var child = fiber.child; child; child = child.sibling) { detachFiber(child, effects$$1); } } function getInsertPoint(fiber) { var parent = fiber.parent; while (fiber) { if (fiber.stateNode === parent || fiber.isPortal) { return null; } var found = forward(fiber); if (found) { return found; } fiber = fiber.return; } } function setInsertPoints(children) { for (var i in children) { var child = children[i]; if (child.disposed) { continue; } if (child.tag > 4) { var p = child.parent; child.effectTag = PLACE; child.forwardFiber = p.insertPoint; p.insertPoint = child; } else { if (child.child) { setInsertPoints(child.children); } } } } function forward(fiber) { var found; while (fiber.forward) { fiber = fiber.forward; if (fiber.disposed || fiber.isPortal) { continue; } if (fiber.tag > 3) { return fiber; } if (fiber.child) { found = downward(fiber); if (found) { return found; } } } } function downward(fiber) { var found; while (fiber.lastChild) { fiber = fiber.lastChild; if (fiber.disposed || fiber.isPortal) { return; } if (fiber.tag > 3) { return fiber; } if (fiber.forward) { found = forward(fiber); if (found) { return found; } } } } function reconcileDFS(fiber, info, deadline, ENOUGH_TIME) { var topWork = fiber; outerLoop: while (fiber) { if (fiber.disposed || deadline.timeRemaining() <= ENOUGH_TIME) { break; } var occurError = void 0; if (fiber.tag < 3) { var keepbook = Renderer.currentOwner; try { updateClassComponent(fiber, info); } catch (e) { occurError = true; pushError(fiber, fiber.errorHook, e); } Renderer.currentOwner = keepbook; if (fiber.batching) { delete fiber.updateFail; delete fiber.batching; } } else { updateHostComponent(fiber, info); } if (fiber.child && !fiber.updateFail && !occurError) { fiber = fiber.child; continue outerLoop; } var f = fiber; while (f) { var instance = f.stateNode; if (f.tag > 3 || f.shiftContainer) { if (f.shiftContainer) { delete f.shiftContainer; info.containerStack.shift(); } if (instance.insertPoint) { instance.insertPoint = null; } } else { var updater = instance && instance.updater; if (f.shiftContext) { delete f.shiftContext; info.contextStack.shift(); } if (f.hasMounted && instance[gSBU]) { updater.snapshot = guardCallback(instance, gSBU, [ updater.prevProps, updater.prevState ]); } } if (f === topWork) { break outerLoop; } if (f.sibling) { fiber = f.sibling; continue outerLoop; } f = f.return; } } } function updateHostComponent(fiber, info) { var props = fiber.props, tag = fiber.tag, prev = fiber.alternate; if (!fiber.stateNode) { fiber.parent = info.containerStack[0]; fiber.stateNode = Renderer.createElement(fiber); } var parent = fiber.parent; if (!parent.insertPoint && fiber.hasMounted) { fiber.forwardFiber = parent.insertPoint = getInsertPoint(fiber); } else { fiber.forwardFiber = parent.insertPoint; } parent.insertPoint = fiber; if (tag === 5) { info.containerStack.unshift(fiber.stateNode); fiber.shiftContainer = true; fiber.effectTag *= ATTR; if (prev) { fiber.children = prev.children; } diffChildren(fiber, props.children); } else { if (!prev || prev.props !== props) { fiber.effectTag *= CONTENT; } } } function mergeStates(fiber, nextProps) { var instance = fiber.stateNode, pendings = fiber.updateQueue.pendingStates, n = pendings.length, state = fiber.memoizedState || instance.state; if (n === 0) { return state; } var nextState = extend({}, state); var fail = true; for (var i = 0; i < n; i++) { var pending = pendings[i]; if (pending) { if (isFn(pending)) { var a = pending.call(instance, nextState, nextProps); if (!a) { continue; } else { pending = a; } } fail = false; extend(nextState, pending); } } if (fail) { return state; } else { return (fiber.memoizedState = nextState); } } function updateClassComponent(fiber, info) { var type = fiber.type, instance = fiber.stateNode, props = fiber.props; var contextStack = info.contextStack, containerStack = info.containerStack; var newContext = getMaskedContext( instance, type.contextTypes, contextStack ); if (instance == null) { fiber.parent = type === AnuPortal ? props.parent : containerStack[0]; instance = createInstance(fiber, newContext); } instance._reactInternalFiber = fiber; var isStateful = !instance.__isStateless; if (isStateful) { var updateQueue = fiber.updateQueue; if (fiber.hasMounted && fiber.dirty && fiber.parent) { fiber.parent.insertPoint = null; } delete fiber.dirty; delete fiber.updateFail; if (fiber.hasMounted) { applybeforeUpdateHooks( fiber, instance, props, newContext, contextStack ); } else { applybeforeMountHooks( fiber, instance, props, newContext, contextStack ); } if (fiber.memoizedState) { instance.state = fiber.memoizedState; } fiber.batching = updateQueue.batching; var cbs = updateQueue.pendingCbs; if (cbs.length) { fiber.pendingCbs = cbs; fiber.effectTag *= CALLBACK; } } else if (type === AnuPortal) { containerStack.unshift(fiber.parent); fiber.shiftContainer = true; } instance.unmaskedContext = contextStack[0]; instance.context = newContext; fiber.memoizedProps = instance.props = props; fiber.memoizedState = instance.state; if (instance.getChildContext) { var context = instance.getChildContext(); context = Object.assign({}, contextStack[0], context); fiber.shiftContext = true; contextStack.unshift(context); } if (isStateful) { if (fiber.updateFail) { cloneChildren(fiber); fiber._hydrating = false; return; } fiber.effectTag *= HOOK; } if (fiber.catchError) { return; } fiber._hydrating = true; Renderer.currentOwner = instance; var rendered = applyCallback(instance, "render", []); diffChildren(fiber, rendered); } function applybeforeMountHooks(fiber, instance, newProps) { fiber.setout = true; if (instance.__useNewHooks) { setStateByProps(instance, fiber, newProps, instance.state); } else { callUnsafeHook(instance, "componentWillMount", []); } delete fiber.setout; mergeStates(fiber, newProps); fiber.updateQueue = UpdateQueue(); } function applybeforeUpdateHooks( fiber, instance, newProps, newContext, contextStack ) { var oldProps = fiber.memoizedProps; var oldState = fiber.memoizedState; var updater = instance.updater; updater.prevProps = oldProps; updater.prevState = oldState; var propsChanged = oldProps !== newProps; var contextChanged = instance.context !== newContext; fiber.setout = true; if (!instance.__useNewHooks) { if (propsChanged || contextChanged) { var prevState = instance.state; callUnsafeHook(instance, "componentWillReceiveProps", [ newProps, newContext ]); if (prevState !== instance.state) { fiber.memoizedState = instance.state; } } } var newState = (instance.state = oldState); var updateQueue = fiber.updateQueue; mergeStates(fiber, newProps); newState = fiber.memoizedState; setStateByProps(instance, fiber, newProps, newState); newState = fiber.memoizedState; delete fiber.setout; fiber._hydrating = true; if ( !propsChanged && newState === oldState && contextStack.length == 1 && !updateQueue.isForced ) { fiber.updateFail = true; } else { var args = [newProps, newState, newContext]; fiber.updateQueue = UpdateQueue(); if ( !updateQueue.isForced && !applyCallback(instance, "shouldComponentUpdate", args) ) { fiber.updateFail = true; } else if (!instance.__useNewHooks) { callUnsafeHook(instance, "componentWillUpdate", args); } } } function callUnsafeHook(a, b, c) { applyCallback(a, b, c); applyCallback(a, "UNSAFE_" + b, c); } function isSameNode(a, b) { if (a.type === b.type && a.key === b.key) { return true; } } function setStateByProps(instance, fiber, nextProps, prevState) { fiber.errorHook = gDSFP; var fn = fiber.type[gDSFP]; if (fn) { var partialState = fn.call(null, nextProps, prevState); if (typeNumber(partialState) === 8) { fiber.memoizedState = Object.assign( {}, prevState, partialState ); } } } function cloneChildren(fiber) { var prev = fiber.alternate; if (prev && prev.child) { var pc = prev.children; var cc = (fiber.children = {}); fiber.child = prev.child; fiber.lastChild = prev.lastChild; for (var i in pc) { var a = pc[i]; a.return = fiber; cc[i] = a; } setInsertPoints(cc); } } function getMaskedContext(instance, contextTypes, contextStack) { if (instance && !contextTypes) { return instance.context; } var context = {}; if (!contextTypes) { return context; } var parentContext = contextStack[0]; for (var key in contextTypes) { if (contextTypes.hasOwnProperty(key)) { context[key] = parentContext[key]; } } return context; } function diffChildren(parentFiber, children) { var oldFibers = parentFiber.children; if (oldFibers) { parentFiber.oldChildren = oldFibers; } else { oldFibers = {}; } var newFibers = fiberizeChildren(children, parentFiber); var effects$$1 = parentFiber.effects || (parentFiber.effects = []); var matchFibers = {}; delete parentFiber.child; for (var i in oldFibers) { var newFiber = newFibers[i]; var oldFiber = oldFibers[i]; if (newFiber && newFiber.type === oldFiber.type) { matchFibers[i] = oldFiber; if (newFiber.key != null) { oldFiber.key = newFiber.key; } continue; } detachFiber(oldFiber, effects$$1); } var prevFiber = void 0, index = 0; for (var _i in newFibers) { var _newFiber = newFibers[_i]; var _oldFiber = matchFibers[_i]; var alternate = null; if (_oldFiber) { if (isSameNode(_oldFiber, _newFiber) && !_oldFiber.disposed) { alternate = new Fiber(_oldFiber); var oldRef = _oldFiber.ref; _newFiber = extend(_oldFiber, _newFiber); _newFiber.alternate = alternate; if (_newFiber.ref && _newFiber.deleteRef) { delete _newFiber.ref; delete _newFiber.deleteRef; } if (oldRef && oldRef !== _newFiber.ref) { alternate.effectTag *= NULLREF; effects$$1.push(alternate); } if (_newFiber.tag === 5) { _newFiber.lastProps = alternate.props; } } else { detachFiber(_oldFiber, effects$$1); } _newFiber.effectTag = NOWORK; } else { _newFiber = new Fiber(_newFiber); } newFibers[_i] = _newFiber; if (_newFiber.tag > 3) { _newFiber.effectTag *= PLACE; } if (_newFiber.ref) { _newFiber.effectTag *= REF; } _newFiber.index = index++; _newFiber.return = parentFiber; if (prevFiber) { prevFiber.sibling = _newFiber; _newFiber.forward = prevFiber; } else { parentFiber.child = _newFiber; _newFiber.forward = null; } prevFiber = _newFiber; } parentFiber.lastChild = prevFiber; if (prevFiber) { prevFiber.sibling = null; } } function getDOMNode() { return this; } var Refs = { fireRef: function fireRef(fiber, dom) { var ref = fiber.ref; var owner = fiber._owner; try { var number = typeNumber(ref); refStrategy[number](owner, ref, dom); if (owner && owner.__isStateless) { delete fiber.ref; fiber.deleteRef = true; } } catch (e) { pushError(fiber, "ref", e); } } }; var refStrategy = { 4: function _(owner, ref, dom) { if (dom === null) { delete owner.refs[ref]; } else { if (dom.nodeType) { dom.getDOMNode = getDOMNode; } owner.refs[ref] = dom; } }, 5: function _(owner, ref, dom) { ref(dom); }, 8: function _(owner, ref, dom) { ref.current = dom; } }; function commitDFSImpl(fiber) { var topFiber = fiber; outerLoop: while (true) { if (fiber.effects && fiber.effects.length) { fiber.effects.forEach(disposeFiber); delete fiber.effects; } if (fiber.effectTag % PLACE == 0) { Renderer.insertElement(fiber); fiber.hasMounted = true; fiber.effectTag /= PLACE; } else { if (fiber.catchError) { removeFormBoundaries(fiber); disposeFibers(fiber); } } if (fiber.updateFail) { delete fiber.updateFail; } if (fiber.child) { fiber = fiber.child; continue; } else { if (fiber.effectTag > 1) { commitEffects(fiber); if (fiber.capturedValues) { fiber.effectTag = CAPTURE; } } } if (fiber.sibling) { fiber = fiber.sibling; continue; } else { while (fiber.return) { fiber = fiber.return; if (fiber.effectTag > 1) { commitEffects(fiber); if (fiber.capturedValues) { fiber.effectTag = CAPTURE; } } if (fiber === topFiber || fiber.hostRoot) { break outerLoop; } if (fiber.sibling) { fiber = fiber.sibling; continue outerLoop; } } } } } function commitDFS(effects$$1) { Renderer.batchedUpdates(function() { var el; while ((el = effects$$1.shift())) { if (el.effectTag === DETACH && el.caughtError) { disposeFiber(el); return; } commitDFSImpl(el); } }, {}); var error = Renderer.catchError; if (error) { delete Renderer.catchError; throw error; } } function commitEffects(fiber) { var instance = fiber.stateNode || emptyObject; var amount = fiber.effectTag; var updater = instance.updater || fakeObject; for (var i = 0; i < effectLength; i++) { var effectNo = effectNames[i]; if (effectNo > amount) { break; } if (amount % effectNo === 0) { amount /= effectNo; switch (effectNo) { case PLACE: Renderer.insertElement(fiber); fiber.hasMounted = true; break; case CONTENT: Renderer.updateContext(fiber); break; case ATTR: Renderer.updateAttribute(fiber); break; case HOOK: if (fiber.hasMounted) { guardCallback(instance, "componentDidUpdate", [ updater.prevProps, updater.prevState, updater.snapshot ]); } else { fiber.hasMounted = true; guardCallback(instance, "componentDidMount", []); } delete fiber._hydrating; if (fiber.catchError) { return; } break; case REF: if (!instance.__isStateless) { Refs.fireRef(fiber, instance); } break; case CALLBACK: var queue = fiber.pendingCbs; fiber._hydrating = true; queue.forEach(function(fn) { fn.call(instance); }); delete fiber._hydrating; delete fiber.pendingCbs; break; case CAPTURE: var values = fiber.capturedValues; fiber.caughtError = true; var a = values.shift(); var b = values.shift(); if (!values.length) { fiber.effectTag = amount; delete fiber.capturedValues; } instance.componentDidCatch(a, b); break; } } } fiber.effectTag = 1; } function disposeFibers(fiber) { var list = [fiber.oldChildren, fiber.children], count = 0; while (count != 2) { var c = list[count++]; if (c) { for (var i in c) { var child = c[i]; if (!child.disposed && child.hasMounted) { disposeFiber(child, true); disposeFibers(child); } } } } delete fiber.child; delete fiber.lastChild; delete fiber.oldChildren; fiber.children = {}; } function disposeFiber(fiber, force) { var stateNode = fiber.stateNode, effectTag = fiber.effectTag; if (!stateNode) { return; } if (!stateNode.__isStateless && fiber.ref) { Refs.fireRef(fiber, null); } if (effectTag % DETACH == 0 || force === true) { if (fiber.tag > 3) { Renderer.removeElement(fiber); } else { if (fiber.hasMounted) { stateNode.updater.enqueueSetState = returnFalse; guardCallback(stateNode, "componentWillUnmount", []); } } delete fiber.alternate; delete fiber.hasMounted; delete fiber.stateNode; fiber.disposed = true; } fiber.effectTag = NOWORK; } function Unbatch(props, context) { Component.call(this, props, context); this.state = { child: props.child }; } var fn$1 = inherit(Unbatch, Component); fn$1.render = function() { return this.state.child; }; var macrotasks = Renderer.macrotasks; var boundaries = Renderer.boundaries; var batchedtasks = []; function render$1(vnode, root, callback) { var container = createContainer(root), immediateUpdate = false; if (!container.hostRoot) { var fiber = new Fiber({ type: Unbatch, tag: 2, props: {}, hasMounted: true, memoizedState: {}, return: container }); fiber.index = 0; container.child = fiber; var instance = createInstance(fiber, {}); instance.updater.isMounted = isMounted; container.hostRoot = instance; immediateUpdate = true; Renderer.emptyElement(container); } var carrier = {}; updateComponent( container.hostRoot, { child: vnode }, wrapCb(callback, carrier), immediateUpdate ); return carrier.instance; } function wrapCb(fn, carrier) { return function() { var fiber = get(this); var target = fiber.child ? fiber.child.stateNode : null; fn && fn.call(target); carrier.instance = target; }; } function performWork(deadline) { workLoop(deadline); if (boundaries.length) { macrotasks.unshift.apply(macrotasks, boundaries); boundaries.length = 0; } topFibers.forEach(function(el) { var microtasks = el.microtasks; while ((el = microtasks.shift())) { if (!el.disposed) { macrotasks.push(el); } } }); if (macrotasks.length) { requestIdleCallback(performWork); } } var ENOUGH_TIME = 1; var deadline = { didTimeout: false, timeRemaining: function timeRemaining() { return 2; } }; function requestIdleCallback(fn) { fn(deadline); } Renderer.scheduleWork = function() { performWork(deadline); }; var isBatching = false; Renderer.batchedUpdates = function(callback, event) { var keepbook = isBatching; isBatching = true; try { event && Renderer.fireMiddlewares(true); return callback(event); } finally { isBatching = keepbook; if (!isBatching) { var el = void 0; while ((el = batchedtasks.shift())) { if (!el.disabled) { macrotasks.push(el); } } event && Renderer.fireMiddlewares(); Renderer.scheduleWork(); } } }; function workLoop(deadline) { var fiber = macrotasks.shift(), info = void 0; if (fiber) { if (fiber.type === Unbatch) { info = fiber.return; } else { var dom = getContainer(fiber); info = { containerStack: [dom], contextStack: [fiber.stateNode.unmaskedContext] }; } reconcileDFS(fiber, info, deadline, ENOUGH_TIME); updateCommitQueue(fiber); resetStack(info); if (macrotasks.length && deadline.timeRemaining() > ENOUGH_TIME) { workLoop(deadline); } else { commitDFS(effects); } } } function updateCommitQueue(fiber) { var hasBoundary = boundaries.length; if (fiber.type !== Unbatch) { if (hasBoundary) { arrayPush.apply(effects, boundaries); } else { effects.push(fiber); } } else { effects.push(fiber); } boundaries.length = 0; } function mergeUpdates(fiber, state, isForced, callback) { var updateQueue = fiber.updateQueue; if (isForced) { updateQueue.isForced = true; } if (state) { updateQueue.pendingStates.push(state); } if (isFn(callback)) { updateQueue.pendingCbs.push(callback); } } function fiberContains(p, son) { while (son.return) { if (son.return === p) { return true; } son = son.return; } } function getQueue(fiber) { while (fiber) { if (fiber.microtasks) { return fiber.microtasks; } fiber = fiber.return; } } function pushChildQueue(fiber, queue) { var maps = {}; for (var i = queue.length, el; (el = queue[--i]); ) { if (fiber === el) { queue.splice(i, 1); continue; } else if (fiberContains(fiber, el)) { queue.splice(i, 1); continue; } maps[el.stateNode.updater.mountOrder] = true; } var enqueue = true, p = fiber, hackSCU = []; while (p.return) { p = p.return; var instance = p.stateNode; if ( instance.refs && !instance.__isStateless && p.type !== Unbatch ) { hackSCU.push(p); var u = instance.updater; if (maps[u.mountOrder]) { enqueue = false; break; } } } hackSCU.forEach(function(el) { el.updateQueue.batching = true; }); if (enqueue) { queue.push(fiber); } } function updateComponent(instance, state, callback, immediateUpdate) { var fiber = get(instance); fiber.dirty = true; var sn = typeNumber(state); var isForced = state === true; var microtasks = getQueue(fiber); state = isForced ? null : sn === 5 || sn === 8 ? state : null; if (fiber.setout) { immediateUpdate = false; } else if ((isBatching && !immediateUpdate) || fiber._hydrating) { pushChildQueue(fiber, batchedtasks); } else { immediateUpdate = immediateUpdate || !fiber._hydrating; pushChildQueue(fiber, microtasks); } mergeUpdates(fiber, state, isForced, callback); if (immediateUpdate) { Renderer.scheduleWork(); } } Renderer.updateComponent = updateComponent; function validateTag(el) { return el && el.appendChild; } function createContainer(root, onlyGet, validate) { validate = validate || validateTag; if (!validate(root)) { throw "container is not a element"; } root.anuProp = 2018; var useProp = root.anuProp === 2018; if (useProp) { root.anuProp = void 0; if (get(root)) { return get(root); } } else { var index = topNodes.indexOf(root); if (index !== -1) { return topFibers[index]; } } if (onlyGet) { return null; } var container = new Fiber({ stateNode: root, tag: 5, name: "hostRoot", contextStack: [{}], containerStack: [root], microtasks: [], type: root.nodeName || root.type }); if (useProp) { root._reactInternalFiber = container; } topNodes.push(root); topFibers.push(container); return container; } function getContainer(p) { if (p.parent) { return p.parent; } while ((p = p.return)) { if (p.tag === 5) { return p.stateNode; } } } function cleanChildren(array) { if (!Array.isArray(array)) { return array; } return array.map(function(el) { if (el.type == "#text") { return el.children; } else { return { type: el.type, props: el.props, children: cleanChildren(el.children) }; } }); } var autoContainer = { type: "root", appendChild: noop, props: null, children: [] }; var yieldData = []; var NoopRenderer = createRenderer({ render: function render$$1(vnode) { return render$1(vnode, autoContainer); }, updateAttribute: function updateAttribute() {}, updateContext: function updateContext(fiber) { fiber.stateNode.children = fiber.props.children; }, reset: function reset() { var index = topNodes.indexOf(autoContainer); if (index !== -1) { topNodes.splice(index, 1); topFibers.splice(index, 1); } autoContainer = { type: "root", appendChild: noop, props: null, children: [] }; }, getRoot: function getRoot() { return autoContainer; }, getChildren: function getChildren() { return cleanChildren(autoContainer.children || []); }, yield: function _yield(a) { yieldData.push(a); }, flush: function flush() { var ret = yieldData.concat(); yieldData.length = 0; return ret; }, createElement: function createElement(fiber) { return { type: fiber.type, props: null, children: fiber.tag === 6 ? fiber.props : [] }; }, insertElement: function insertElement(fiber) { var dom = fiber.stateNode, parentNode = fiber.parent, forwardFiber = fiber.forwardFiber, before = forwardFiber ? forwardFiber.stateNode : null, children = parentNode.children; try { if (before == null) { if (dom !== children[0]) { remove(children, dom); children.unshift(dom); } } else { if (dom !== children[children.length - 1]) { remove(children, dom); var i = children.indexOf(before); children.splice(i + 1, 0, dom); } } } catch (e) { throw e; } }, emptyElement: function emptyElement(fiber) { var dom = fiber.stateNode; var children = dom && dom.children; if (dom && Array.isArray(children)) { children.forEach(NoopRenderer.removeElement); } }, removeElement: function removeElement(fiber) { if (fiber.parent) { var parent = fiber.parent; var node = fiber.stateNode; remove(parent.children, node); } } }); function remove(children, node) { var index = children.indexOf(node); if (index !== -1) { children.splice(index, 1); } } var win = getWindow(); var prevReact = win.ReactNoop; var ReactNoop = void 0; if (prevReact && prevReact.isReactNoop) { ReactNoop = prevReact; } else { var render = NoopRenderer.render, flush = NoopRenderer.flush, reset = NoopRenderer.reset, getRoot = NoopRenderer.getRoot, getChildren = NoopRenderer.getChildren; ReactNoop = win.ReactNoop = { yield: NoopRenderer.yield, flush: flush, reset: reset, getRoot: getRoot, getChildren: getChildren, isReactNoop: true, version: "1.4.0", render: render, Fragment: Fragment, PropTypes: PropTypes, Children: Children, createPortal: createPortal, createContext: createContext, Component: Component, createRef: createRef, forwardRef: forwardRef, createElement: createElement, cloneElement: cloneElement, PureComponent: PureComponent, isValidElement: isValidElement, createFactory: createFactory }; } var ReactNoop$1 = ReactNoop; return ReactNoop$1; }); ================================================ FILE: dist/Router.js ================================================ /** * Powered by YMFE (https://ymfe.org) */ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory()) : typeof define === "function" && define.amd ? define(factory) : (global.ReachRouter = factory()); })(this, function() { var hasOwnProperty = Object.prototype.hasOwnProperty; var fakeWindow = {}; function getWindow() { try { return window; } catch (e) { try { return global; } catch (e) { return fakeWindow; } } } function extend(obj, props) { for (var i in props) { if (hasOwnProperty.call(props, i)) { obj[i] = props[i]; } } return obj; } function inherit(SubClass, SupClass) { function Bridge() {} var orig = SubClass.prototype; Bridge.prototype = SupClass.prototype; var fn = (SubClass.prototype = new Bridge()); extend(fn, orig); fn.constructor = SubClass; return fn; } try { var supportEval = Function("a", "return a + 1")(2) == 3; } catch (e) {} function miniCreateClass(ctor, superClass, methods, statics) { var className = ctor.name || "IEComponent"; var Ctor = supportEval ? Function( "superClass", "ctor", "return function " + className + " (props, context) {\n superClass.apply(this, arguments); \n ctor.apply(this, arguments);\n }" )(superClass, ctor) : function Ctor() { superClass.apply(this, arguments); ctor.apply(this, arguments); }; Ctor.displayName = className; var fn = inherit(Ctor, superClass); extend(fn, methods); if (statics) { extend(Ctor, statics); } return Ctor; } function startsWith(string, search) { return string.slice(0, search.length) === search; } var reservedNames = ["uri", "path"]; function invariant(condition, msg) { if (!condition) { throw msg; } } function pick(routes, uri) { var match = void 0; var default_ = void 0; var uriPathname = uri.split("?").shift(); var uriSegments = segmentize(uriPathname); var isRootUri = uriSegments[0] === ""; var ranked = rankRoutes(routes); for (var i = 0, l = ranked.length; i < l; i++) { var missed = false; var route = ranked[i].route; if (route.default) { default_ = { route: route, params: {}, uri: uri }; continue; } var routeSegments = segmentize(route.path); var params = {}; var max = Math.max(uriSegments.length, routeSegments.length); var index = 0; for (; index < max; index++) { var routeSegment = routeSegments[index]; var uriSegment = uriSegments[index]; var _isSplat = routeSegment === "*"; if (_isSplat) { params["*"] = uriSegments .slice(index) .map(decodeURIComponent) .join("/"); break; } if (uriSegment === undefined) { missed = true; break; } var dynamicMatch = paramRe.exec(routeSegment); if (dynamicMatch && !isRootUri) { invariant( !reservedNames.includes(dynamicMatch[1]), ' dynamic segment "' + dynamicMatch[1] + '" is a reserved name. Please use a different name in path "' + route.path + '".' ); var value = decodeURIComponent(uriSegment); params[dynamicMatch[1]] = value; } else if (routeSegment !== uriSegment) { missed = true; break; } } if (!missed) { match = { route: route, params: params, uri: "/" + uriSegments.slice(0, index).join("/") }; break; } } return match || default_ || null; } function match(path, uri) { return pick([{ path: path }], uri); } function resolve(to, base) { if (startsWith(to, "/")) { return to; } var _arr = to.split("?"); var toPathname = _arr[0]; var toQuery = _arr[1]; var basePathname = base.split("?").shift(); var toSegments = segmentize(toPathname); var baseSegments = segmentize(basePathname); if (toSegments[0] === "") { return addQuery(basePathname, toQuery); } if (!startsWith(toSegments[0], ".")) { var pathname = baseSegments.concat(toSegments).join("/"); return addQuery( (basePathname === "/" ? "" : "/") + pathname, toQuery ); } var allSegments = baseSegments.concat(toSegments); var segments = []; for (var i = 0, n = allSegments.length; i < n; i++) { var segment = allSegments[i]; if (segment === "..") { segments.pop(); } else if (segment !== ".") { segments.push(segment); } } return addQuery("/" + segments.join("/"), toQuery); } function insertParams(path, params) { var segments = segmentize(path); return ( "/" + segments .map(function(segment) { var match = paramRe.exec(segment); return match ? params[match[1]] : segment; }) .join("/") ); } function validateRedirect(from, to) { var filter = function filter(segment) { return isDynamic(segment); }; var fromString = segmentize(from) .filter(filter) .sort() .join("/"); var toString = segmentize(to) .filter(filter) .sort() .join("/"); return fromString === toString; } var paramRe = /^:(.+)/; var SEGMENT_POINTS = 4; var STATIC_POINTS = 3; var DYNAMIC_POINTS = 2; var SPLAT_PENALTY = 1; var ROOT_POINTS = 1; var isRootSegment = function isRootSegment(segment) { return segment == ""; }; var isDynamic = function isDynamic(segment) { return paramRe.test(segment); }; var isSplat = function isSplat(segment) { return segment === "*"; }; function rankRoute(route, index) { var score = route.default ? 0 : segmentize(route.path).reduce(function(score, segment) { score += SEGMENT_POINTS; if (isRootSegment(segment)) { score += ROOT_POINTS; } else if (isDynamic(segment)) { score += DYNAMIC_POINTS; } else if (isSplat(segment)) { score -= SEGMENT_POINTS + SPLAT_PENALTY; } else { score += STATIC_POINTS; } return score; }, 0); return { route: route, score: score, index: index }; } function sorter(a, b) { return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index; } function rankRoutes(routes) { return routes.map(rankRoute).sort(sorter); } function segmentize(uri) { return uri.replace(/(^\/+|\/+$)/g, "").split("/"); } function addQuery(pathname, query) { return pathname + (query ? "?" + query : ""); } var modeObject = {}; function getLocation(source) { return Object.assign({}, source.location, { getPath: function getPath() { return modeObject.value === "hash" ? this.hash.slice(1) : this.pathname; }, state: source.history.state, key: (source.history.state && source.history.state.key) || "initial" }); } function createHistory(source) { var listeners = []; var transitioning = false; var resolveTransition = function resolveTransition() {}; var target = { location: getLocation(source), transitioning: transitioning, _onTransitionComplete: function _onTransitionComplete() { target.transitioning = transitioning = false; resolveTransition(); }, listen: function listen(listener) { listeners.push(listener); var popstateListener = function popstateListener(e) { target.location = getLocation(source); listener(); }; var event = modeObject.value === "hash" ? "hashchange" : "popstate"; addEvent(source, event, popstateListener); return function() { removeEvent(source, event, popstateListener); listeners = listeners.filter(function(fn) { return fn !== listener; }); }; }, navigate: function navigate(to) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, state = _ref.state, _ref$replace = _ref.replace, replace = _ref$replace === undefined ? false : _ref$replace; state = Object.assign({}, state, { key: Date.now() + "" }); var slocation = source.location; if (modeObject.value === "hash") { if (replace && slocation.hash !== newHash) { history.back(); } slocation.hash = to; } else { try { if (transitioning || replace) { source.history.replaceState(state, null, to); } else { source.history.pushState(state, null, to); } } catch (e) { slocation[replace ? "replace" : "assign"](to); } } target.location = getLocation(source); target.transitioning = transitioning = true; var transition = new Promise(function(res) { return (resolveTransition = res); }); listeners.forEach(function(fn) { return fn(); }); return transition; } }; return target; } function addEvent(dom, name, fn) { if (dom.addEventListener) { dom.addEventListener(name, fn); } else if (dom.attachEvent) { dom.attachEvent("on" + name, fn); } } function removeEvent(dom, name, fn) { if (dom.removeEventListener) { dom.removeEventListener(name, fn); } else if (dom.detachEvent) { dom.detachEvent("on" + name, fn); } } function createMemorySource() { var initialPathname = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/"; var index = 0; var states = []; var stack = [ { pathname: initialPathname, search: "" } ]; var target = { addEventListener: function addEventListener(name, fn) {}, removeEventListener: function removeEventListener(name, fn) {}, history: { back: function back() {}, pushState: function pushState(state, _, uri) { index++; stack.push(uri2obj(uri)); states.push(state); sync(target); }, replaceState: function replaceState(state, _, uri) { stack[index] = uri2obj(uri); states[index] = state; sync(target); } } }; function sync(target) { var history = target.history; history.index = index; history.entries = stack; history.state = states[index]; target.location = stack[index]; } sync(target); return target; } function uri2obj(uri) { var arr = uri.split("?"); var pathname = arr[0]; var search = arr[1] || ""; return { pathname: pathname, search: search }; } var win = getWindow(); var getSource = function getSource() { return win.location ? win : createMemorySource(); }; var globalHistory = createHistory(getSource()); var navigate = globalHistory.navigate; var _extends = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var win$1 = getWindow(); var supportPushState = !!win$1.history && win$1.history.pushState; var React = win$1.React; if (!React || !React.eventSystem) { throw "请先安装anujs"; } var unstable_deferredUpdates = React.unstable_deferredUpdates, PropTypes = React.PropTypes, cloneElement = React.cloneElement, PureComponent = React.PureComponent, createContext = React.createContext, Children = React.Children, Component = React.Component; if (unstable_deferredUpdates === undefined) { unstable_deferredUpdates = function unstable_deferredUpdates(fn) { return fn(); }; } var createNamedContext = function createNamedContext(name, defaultValue) { var Ctx = createContext(defaultValue); Ctx.Consumer.displayName = name + ".Consumer"; Ctx.Provider.displayName = name + ".Provider"; return Ctx; }; var LocationContext = createNamedContext("Location"); var Location = function Location(_ref) { var children = _ref.children; return React.createElement(LocationContext.Consumer, null, function( context ) { return context ? children(context) : React.createElement(LocationProvider, null, children); }); }; var LocationProvider = miniCreateClass( function LocationProvider() { this.state = { context: this.getContext(), refs: { unlisten: null } }; }, Component, { getContext: function getContext() { var _props$history = this.props.history, navigate$$1 = _props$history.navigate, location = _props$history.location; return { navigate: navigate$$1, location: location }; }, componentDidCatch: function componentDidCatch(error, info) { if (isRedirect(error)) { var _navigate = this.props.history.navigate; _navigate(error.uri, { replace: true }); } else { throw error; } }, componentDidUpdate: function componentDidUpdate( prevProps, prevState ) { if ( prevState.context.location !== this.state.context.location ) { this.props.history._onTransitionComplete(); } }, componentDidMount: function componentDidMount() { var _this = this; var refs = this.state.refs, history = this.props.history; refs.unlisten = history.listen(function() { Promise.resolve().then(function() { unstable_deferredUpdates(function() { if (!_this.unmounted) { _this.setState(function() { return { context: _this.getContext() }; }); } }); }); }); }, componentWillUnmount: function componentWillUnmount() { var refs = this.state.refs; this.unmounted = true; refs.unlisten(); }, render: function render() { var context = this.state.context, children = this.props.children; return React.createElement( LocationContext.Provider, { value: context }, typeof children === "function" ? children(context) : children || null ); } }, { defaultProps: { history: globalHistory } } ); var ServerLocation = function ServerLocation(_ref2) { var url = _ref2.url, children = _ref2.children; return React.createElement( LocationContext.Provider, { value: { location: { pathname: url }, navigate: function navigate$$1() { throw new Error( "You can't call navigate on the server." ); } } }, children ); }; var BaseContext = createNamedContext("Base", { baseuri: "/", basepath: "/" }); function Router(props) { modeObject.value = supportPushState && (!props.mode || props.mode === "history") ? "history" : "hash"; return React.createElement(BaseContext.Consumer, null, function( baseContext ) { return React.createElement(Location, null, function( locationContext ) { return React.createElement( RouterImpl, _extends({}, baseContext, locationContext, props) ); }); }); } var RouterImpl = miniCreateClass( function RouterImpl() {}, PureComponent, { render: function render() { var _props = this.props, location = _props.location, _navigate2 = _props.navigate, basepath = _props.basepath, primary = _props.primary, children = _props.children, _props$component = _props.component, component = _props$component === undefined ? "div" : _props$component, baseuri = _props.baseuri, mode = _props.mode, domProps = _objectWithoutProperties(_props, [ "location", "navigate", "basepath", "primary", "children", "component", "baseuri", "mode" ]); var routes = Children.map(children, createRoute(basepath)); var pathname = location.getPath(); var match$$1 = pick(routes, pathname); if (match$$1) { var params = match$$1.params, uri = match$$1.uri, route = match$$1.route, element = match$$1.route.value; basepath = route.default ? basepath : route.path.replace(/\*$/, ""); var props = Object.assign({}, params, { uri: uri, location: location, navigate: function navigate$$1(to, options) { return _navigate2(resolve(to, uri), options); } }); var clone = cloneElement( element, props, element.props.children ? React.createElement( Router, { primary: primary, mode: mode }, element.props.children ) : void 666 ); var FocusWrapper = primary ? FocusHandler : component; var wrapperProps = primary ? Object.assign( { uri: uri, location: location }, domProps ) : domProps; return React.createElement( BaseContext.Provider, { value: { baseuri: uri, basepath: basepath } }, React.createElement(FocusWrapper, wrapperProps, clone) ); } else { return null; } } }, { defaultProps: { primary: true } } ); var FocusContext = createNamedContext("Focus"); var FocusHandler = function FocusHandler(_ref3) { var uri = _ref3.uri, location = _ref3.location, domProps = _objectWithoutProperties(_ref3, ["uri", "location"]); return React.createElement(FocusContext.Consumer, null, function( requestFocus ) { return React.createElement( FocusHandlerImpl, _extends({}, domProps, { requestFocus: requestFocus, uri: uri, location: location }) ); }); }; var initialRender = true; var focusHandlerCount = 0; var FocusHandlerImpl = miniCreateClass( function FocusHandlerImpl() { var _this2 = this; this.state = {}; this.requestFocus = function(node) { if (!_this2.state.shouldFocus) { node.focus(); } }; }, Component, { componentDidMount: function componentDidMount() { focusHandlerCount++; this.focus(); }, componentWillUnmount: function componentWillUnmount() { focusHandlerCount--; if (focusHandlerCount === 0) { initialRender = true; } }, componentDidUpdate: function componentDidUpdate( prevProps, prevState ) { if ( prevProps.location !== this.props.location && this.state.shouldFocus ) { this.focus(); } }, focus: function focus() { if (getWindow().process) { return; } var requestFocus = this.props.requestFocus; if (requestFocus) { requestFocus(this.node); } else { if (initialRender) { initialRender = false; } else { this.node.focus(); } } }, render: function render() { var _this3 = this; var _props2 = this.props, children = _props2.children, style = _props2.style, requestFocus = _props2.requestFocus, _props2$role = _props2.role, role = _props2$role === undefined ? "group" : _props2$role, _props2$component = _props2.component, Comp = _props2$component === undefined ? "div" : _props2$component, uri = _props2.uri, location = _props2.location, domProps = _objectWithoutProperties(_props2, [ "children", "style", "requestFocus", "role", "component", "uri", "location" ]); return React.createElement( Comp, _extends( { style: Object.assign({ outline: "none" }, style), tabIndex: "-1", role: role, ref: function ref(n) { return (_this3.node = n); } }, domProps ), React.createElement( FocusContext.Provider, { value: this.requestFocus }, this.props.children ) ); } }, { getDerivedStateFromProps: function getDerivedStateFromProps( nextProps, prevState ) { var initial = prevState.uri == null; if (initial) { return Object.assign( { shouldFocus: true }, nextProps ); } else { var myURIChanged = nextProps.uri !== prevState.uri; var nextPath = nextProps.location.getPath(); var navigatedUpToMe = prevState.location.getPath() !== nextPath && nextPath === nextProps.uri; return Object.assign( { shouldFocus: myURIChanged || navigatedUpToMe }, nextProps ); } } } ); function noop$1() {} var Link = function Link(props) { return React.createElement(BaseContext.Consumer, null, function(_ref4) { var basepath = _ref4.basepath, baseuri = _ref4.baseuri; return React.createElement(Location, null, function(_ref5) { var location = _ref5.location, navigate$$1 = _ref5.navigate; var anchorProps = {}, to = void 0, state = void 0, replace = void 0, getProps = noop$1; for (var key in props) { var val = props[key]; if (key === "to") { to = val; } else if (key === "state") { state = val; } else if (key === "replace") { replace = val; } else if (key == "getProps" && val) { getProps = val; } else { anchorProps[key] = val; } } var href = resolve(to, baseuri); var isCurrent = location.getPath() === href; var isPartiallyCurrent = startsWith(location.getPath(), href); Object.assign( anchorProps, getProps({ isCurrent: isCurrent, isPartiallyCurrent: isPartiallyCurrent, href: href, location: location }) ); anchorProps.href = href; if (isCurrent) { anchorProps["aria-current"] = "page"; } var fn = anchorProps.onClick; anchorProps.onClick = function(event) { if (fn) { fn(event); } event.preventDefault(); if (shouldNavigate(event)) { event.preventDefault(); navigate$$1(href, { state: state, replace: replace }); } }; return React.createElement("a", anchorProps); }); }); }; function RedirectRequest(uri) { this.uri = uri; } var isRedirect = function isRedirect(o) { return o instanceof RedirectRequest; }; var redirectTo = function redirectTo(to) { throw new RedirectRequest(to); }; var RedirectImpl = miniCreateClass(function RedirectImpl() {}, Component, { componentDidMount: function componentDidMount() { var _props3 = this.props, navigate$$1 = _props3.navigate, to = _props3.to, from = _props3.from, _props3$replace = _props3.replace, replace = _props3$replace === undefined ? true : _props3$replace, state = _props3.state, noThrow = _props3.noThrow, props = _objectWithoutProperties(_props3, [ "navigate", "to", "from", "replace", "state", "noThrow" ]); navigate$$1(insertParams(to, props), { replace: replace, state: state }); }, render: function render() { var _props4 = this.props, navigate$$1 = _props4.navigate, to = _props4.to, from = _props4.from, replace = _props4.replace, state = _props4.state, noThrow = _props4.noThrow, props = _objectWithoutProperties(_props4, [ "navigate", "to", "from", "replace", "state", "noThrow" ]); if (!noThrow) { redirectTo(insertParams(to, props)); } return null; } }); var Redirect = function Redirect(props) { return React.createElement(Location, null, function(locationContext) { return React.createElement( RedirectImpl, _extends({}, locationContext, props) ); }); }; Redirect.propTypes = { from: PropTypes.string, to: PropTypes.string.isRequired }; var Match = function Match(_ref6) { var path = _ref6.path, children = _ref6.children; return React.createElement(BaseContext.Consumer, null, function(_ref7) { var baseuri = _ref7.baseuri; return React.createElement(Location, null, function(_ref8) { var navigate$$1 = _ref8.navigate, location = _ref8.location; var resolvedPath = resolve(path, baseuri); var result = match(resolvedPath, location.getPath()); return children({ navigate: navigate$$1, location: location, match: result ? Object.assign({}, result.params, { uri: result.uri, path: path }) : null }); }); }); }; var stripSlashes = function stripSlashes(str) { return str.replace(/(^\/+|\/+$)/g, ""); }; var createRoute = function createRoute(basepath) { return function(element) { invariant( element.props.path || element.props.default || element.type === Redirect, ': Children of must have a "path" or "default" prop, or be a "". \n None found on element type "' + element.type + '"' ); invariant( !( element.type === Redirect && (!element.props.from || !element.props.to) ), ' requires both "from" and "to" props when inside a .' ); invariant( !( element.type === Redirect && !validateRedirect(element.props.from, element.props.to) ), ' has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.' ); if (element.props.default) { return { value: element, default: true }; } var elementPath = element.type === Redirect ? element.props.from : element.props.path; var path = elementPath === "/" ? basepath : stripSlashes(basepath) + "/" + stripSlashes(elementPath); return { value: element, default: element.props.default, path: element.props.children ? stripSlashes(path) + "/*" : path }; }; }; function shouldNavigate(event) { return ( !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) ); } var ReachRouter = { version: "2.2.1", Link: Link, Location: Location, LocationProvider: LocationProvider, Match: Match, Redirect: Redirect, Router: Router, ServerLocation: ServerLocation, createHistory: createHistory, createMemorySource: createMemorySource, isRedirect: isRedirect, navigate: navigate, redirectTo: redirectTo }; return ReachRouter; }); ================================================ FILE: lib/ReactBrowserEventEmitter.js ================================================ (function umd(root, factory) { if (typeof exports === "object" && typeof module === "object") { module.exports = factory(require("react")); } else if (typeof define === "function" && define.amd) { define(["react"], factory); } else if (typeof exports === "object") { exports["EventEmitter"] = factory(require("react")); } else { root["EventEmitter"] = factory(root["React"]); } })(this, function(ReactInAnujs) { var eventSystem = ReactInAnujs.eventSystem; if (!eventSystem) { throw new Error("请确保你加载的是anujs"); } return { ReactEventListener: { dispatchEvent: function(name, event) { eventSystem.dispatchEvent(event); } } }; }); ================================================ FILE: lib/ReactChildren.js ================================================ //by 司徒正美 module.exports = require("../src/Children"); ================================================ FILE: lib/ReactDOMFactories.js ================================================ (function umd(root, factory) { if (typeof exports === "object" && typeof module === "object") { module.exports = factory(require("react")); } else if (typeof define === "function" && define.amd) { define(["react"], factory); } else if (typeof exports === "object") { exports.ReactDOMFactories = factory(require("react")); } else { root.ReactDOMFactories = factory(root["React"]); } })(this, function(ReactInAnujs) { var ReactDOMFactories = { a: 1, abbr: 1, address: 1, area: 1, article: 1, aside: 1, audio: 1, b: 1, base: 1, bdi: 1, bdo: 1, big: 1, blockquote: 1, body: 1, br: 1, button: 1, canvas: 1, caption: 1, cite: 1, code: 1, col: 1, colgroup: 1, data: 1, datalist: 1, dd: 1, del: 1, details: 1, dfn: 1, dialog: 1, div: 1, dl: 1, dt: 1, em: 1, embed: 1, fieldset: 1, figcaption: 1, figure: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, head: 1, header: 1, hgroup: 1, hr: 1, html: 1, i: 1, iframe: 1, img: 1, input: 1, ins: 1, kbd: 1, keygen: 1, label: 1, legend: 1, li: 1, link: 1, main: 1, map: 1, mark: 1, menu: 1, menuitem: 1, meta: 1, meter: 1, nav: 1, noscript: 1, object: 1, ol: 1, optgroup: 1, option: 1, output: 1, p: 1, param: 1, picture: 1, pre: 1, progress: 1, q: 1, rp: 1, rt: 1, ruby: 1, s: 1, samp: 1, script: 1, section: 1, select: 1, small: 1, source: 1, span: 1, strong: 1, style: 1, sub: 1, summary: 1, sup: 1, table: 1, tbody: 1, td: 1, textarea: 1, tfoot: 1, th: 1, thead: 1, time: 1, title: 1, tr: 1, track: 1, u: 1, ul: 1, var: 1, video: 1, wbr: 1, // SVG circle: 1, clipPath: 1, defs: 1, ellipse: 1, g: 1, image: 1, line: 1, linearGradient: 1, mask: 1, path: 1, pattern: 1, polygon: 1, polyline: 1, radialGradient: 1, rect: 1, stop: 1, svg: 1, text: 1, tspan: 1 }; function createFactory(type) { var factory = ReactInAnujs.createElement.bind(null, type); factory.type = type; return factory; } for (var i in ReactDOMFactories) { ReactDOMFactories[i] = createFactory(i); } return ReactDOMFactories; }); ================================================ FILE: lib/ReactInputSelection.js ================================================ (function umd(root, factory) { if (typeof exports === "object" && typeof module === "object") { module.exports = factory(require("react")); } else if (typeof define === "function" && define.amd) { define(["react"], factory); } else if (typeof exports === "object") { exports["ReactInputSelection"] = factory(require("react")); } else { root["ReactInputSelection"] = factory(root["React"]); } })(this, function(ReactInAnujs) { var isBrowser = typeof document === "object"; function isInDocument(node) { if (!isBrowser) { return false; } return containsNode(document.documentElement, node); } function containsNode(a, b) { if (b) { while ((b = b.parentNode)) { if (b === a) { return true; } } } return false; } function focusNode(node) { //如果此元素不可见,IE8会抛错 try { node.focus(); } catch (e) { // no catch } } function getNodeTag(node) { return node.nodeName ? node.nodeName.toLowerCase() : ""; } function getActiveElement(doc) { doc = doc || (isBrowser ? document : undefined); if (typeof doc === "undefined") { return null; } try { return doc.activeElement || doc.body; } catch (e) { return doc.body; } } /** * @ReactInputSelection: React input selection module. Based on Selection.js, * but modified to be suitable for react and has a couple of bug fixes (doesn"t * assume buttons have range selections allowed). * Input selection module for React. */ var ReactInputSelection = { hasSelectionCapabilities: function(elem) { var nodeName = getNodeTag(elem || {}); return ( nodeName && ((nodeName === "input" && elem.type === "text") || nodeName === "textarea" || elem.contentEditable === "true") ); }, getSelectionInformation: function() { let focusedElem = getActiveElement(); var selectionRange = ReactInputSelection.hasSelectionCapabilities( focusedElem ) ? ReactInputSelection.getSelection(focusedElem) : null; return { focusedElem, selectionRange }; }, restoreSelection: function(lastInformation) { var curFocusedElem = getActiveElement(); var priorFocusedElem = lastInformation.focusedElem; var priorSelectionRange = lastInformation.selectionRange; if (curFocusedElem && isInDocument(priorFocusedElem)) { if ( ReactInputSelection.hasSelectionCapabilities( priorFocusedElem ) ) { ReactInputSelection.setSelection( priorFocusedElem, priorSelectionRange ); } focusNode(priorFocusedElem); } }, getSelection: function(input) { var selection; if ("selectionStart" in input) { // Modern browser with input or textarea. selection = { start: input.selectionStart, end: input.selectionEnd }; } else if (document.selection && getNodeTag(input) === "input") { // IE8 input. var range = document.selection.createRange(); // There can only be one selection per document in IE, so it must be in our // element. if (range.parentElement() === input) { selection = { start: -range.moveStart( "character", -input.value.length ), end: -range.moveEnd("character", -input.value.length) }; } } else { // Content editable or old IE textarea. selection = ReactDOMSelection.getOffsets(input); } return ( selection || { start: 0, end: 0 } ); }, setSelection: function(input, offsets) { var start = offsets.start; var end = offsets.end; if (end === undefined) { end = start; } if ("selectionStart" in input) { input.selectionStart = start; input.selectionEnd = Math.min(end, input.value.length); } else if (document.selection && getNodeTag(input) === "input") { var range = input.createTextRange(); range.collapse(true); range.moveStart("character", start); range.moveEnd("character", end - start); range.select(); } else { ReactDOMSelection.setOffsets(input, offsets); } } }; function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) { return anchorNode === focusNode && anchorOffset === focusOffset; } function getIEOffsets(node) { var selection = document.selection; var selectedRange = selection.createRange(); var selectedLength = selectedRange.text.length; // Duplicate selection so we can move range without breaking user selection. var fromStart = selectedRange.duplicate(); fromStart.moveToElementText(node); fromStart.setEndPoint("EndToStart", selectedRange); var startOffset = fromStart.text.length; var endOffset = startOffset + selectedLength; return { start: startOffset, end: endOffset }; } /** * @param {DOMElement} node * @return {?object} */ function getModernOffsets(node) { var selection = window.getSelection && window.getSelection(); if (!selection || selection.rangeCount === 0) { return null; } var anchorNode = selection.anchorNode; var anchorOffset = selection.anchorOffset; var focusNode = selection.focusNode; var focusOffset = selection.focusOffset; var currentRange = selection.getRangeAt(0); // In Firefox, range.startContainer and range.endContainer can be "anonymous // divs", e.g. the up/down buttons on an . Anonymous divs // do not seem to expose properties, triggering a "Permission denied error" if // any of its properties are accessed. The only seemingly possible way to avoid // erroring is to access a property that typically works for non-anonymous divs // and catch any error that may otherwise arise. See // https://bugzilla.mozilla.org/show_bug.cgi?id=208427 try { /* eslint-disable no-unused-expressions */ currentRange.startContainer.nodeType; currentRange.endContainer.nodeType; /* eslint-enable no-unused-expressions */ } catch (e) { return null; } // If the node and offset values are the same, the selection is collapsed. // `Selection.isCollapsed` is available natively, but IE sometimes gets this // value wrong. var isSelectionCollapsed = isCollapsed( selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset ); var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length; var tempRange = currentRange.cloneRange(); tempRange.selectNodeContents(node); tempRange.setEnd(currentRange.startContainer, currentRange.startOffset); var isTempRangeCollapsed = isCollapsed( tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset ); var start = isTempRangeCollapsed ? 0 : tempRange.toString().length; var end = start + rangeLength; // Detect whether the selection is backward. var detectionRange = document.createRange(); detectionRange.setStart(anchorNode, anchorOffset); detectionRange.setEnd(focusNode, focusOffset); var isBackward = detectionRange.collapsed; return { start: isBackward ? end : start, end: isBackward ? start : end }; } /** * @param {DOMElement|DOMTextNode} node * @param {object} offsets */ function setIEOffsets(node, offsets) { var range = document.selection.createRange().duplicate(); var start, end; if (offsets.end === undefined) { start = offsets.start; end = start; } else if (offsets.start > offsets.end) { start = offsets.end; end = offsets.start; } else { start = offsets.start; end = offsets.end; } range.moveToElementText(node); range.moveStart("character", start); range.setEndPoint("EndToStart", range); range.moveEnd("character", end - start); range.select(); } /** * In modern non-IE browsers, we can support both forward and backward * selections. * * Note: IE10+ supports the Selection object, but it does not support * the `extend` method, which means that even in modern IE, it"s not possible * to programmatically create a backward selection. Thus, for all IE * versions, we use the old IE API to create our selections. * * @param {DOMElement|DOMTextNode} node * @param {object} offsets */ function setModernOffsets(node, offsets) { if (!window.getSelection) { return; } var selection = window.getSelection(); var length = node.textContent.length; var start = Math.min(offsets.start, length); var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn"t support the extend method. Flip // backward selections, so we can set with a single range. if (!selection.extend && start > end) { var temp = end; end = start; start = temp; } var startMarker = getNodeForCharacterOffset(node, start); var endMarker = getNodeForCharacterOffset(node, end); if (startMarker && endMarker) { var range = document.createRange(); range.setStart(startMarker.node, startMarker.offset); selection.removeAllRanges(); if (start > end) { selection.addRange(range); selection.extend(endMarker.node, endMarker.offset); } else { range.setEnd(endMarker.node, endMarker.offset); selection.addRange(range); } } } var useIEOffsets = isBrowser && "selection" in document && !("getSelection" in window); var ReactDOMSelection = { getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets, setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets }; function getLeafNode(node) { while (node && node.firstChild) { node = node.firstChild; } return node; } function getSiblingNode(node) { while (node) { if (node.nextSibling) { return node.nextSibling; } node = node.parentNode; } } function getNodeForCharacterOffset(root, offset) { var node = getLeafNode(root); var nodeStart = 0; var nodeEnd = 0; while (node) { if (node.nodeType === 3) { nodeEnd = nodeStart + node.textContent.length; if (nodeStart <= offset && nodeEnd >= offset) { return { node: node, offset: offset - nodeStart }; } nodeStart = nodeEnd; } node = getLeafNode(getSiblingNode(node)); } } //重写options var priorSelectionInformation = {}; var options = ReactInAnujs.options; function restoreSelectionInterface() { ReactInputSelection.restoreSelection(priorSelectionInformation); } function getSelectionInterface() { var a = ReactInputSelection.getSelectionInformation(); if (a.focusedElem && a.selectionRange) { priorSelectionInformation = a; } else { priorSelectionInformation = {}; } } var newOptions = { beforePatch: getSelectionInterface, afterPatch: restoreSelectionInterface }; function fixOptions(obj, name, oldFn, fn) { if (oldFn) { obj[name] = function(a) { fn(a); oldFn(a); }; } else { obj[name] = fn; } } for (let i in newOptions) { fixOptions(options, i, options[i], newOptions[i]); } return ReactInputSelection; }); ================================================ FILE: lib/ReactPropTypes.js ================================================ (function umd(root, factory) { if (typeof exports === "object" && typeof module === "object") { module.exports = factory(); } else if (typeof define === "function" && define.amd) { define([], factory); } else if (typeof exports === "object") { exports["ReactPropTypes"] = factory(); } else { root["ReactPropTypes"] = factory(); } })(this, function() { var check = function() { return check; }; check.isRequired = check; return { array: check, bool: check, func: check, number: check, object: check, string: check, any: check, arrayOf: check, element: check, instanceOf: check, node: check, objectOf: check, oneOf: check, oneOfType: check, shape: check }; }); ================================================ FILE: lib/ReactProxy.js ================================================ /** * by 司徒正美 Copyright 2018-05-15 * IE9+ */ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? (module.exports = factory()) : typeof define === "function" && define.amd ? define(factory) : (global.ReactProxy = factory()); })(this, function() { var x = {}; var y = { supports: true }; try { x.__proto__ = y; } catch (err) {} function supportsProtoAssignment() { return x.supports || false; } function assign(a, b) { for (var i in b) { a[i] = b[i]; } return a; } var difference = function difference(array, rest) { return array.filter(function(value) { return rest.indexOf(value) == -1; }); }; function createPrototypeProxy() { var proxy = {}; var current = null; var mountedInstances = []; function proxyToString(name) { return function toString() { if (typeof current[name] === "function") { return current[name].toString(); } else { return ""; } }; } function proxyMethod(name) { var proxiedMethod = function proxiedMethod() { if (typeof current[name] === "function") { return current[name].apply(this, arguments); } }; assign(proxiedMethod, current[name]); proxiedMethod.toString = proxyToString(name); try { Object.defineProperty(proxiedMethod, "name", { value: name }); } catch (err) {} return proxiedMethod; } function proxiedComponentDidMount() { mountedInstances.push(this); if (typeof current.componentDidMount === "function") { return current.componentDidMount.apply(this, arguments); } } proxiedComponentDidMount.toString = proxyToString("componentDidMount"); function proxiedComponentWillUnmount() { var index = mountedInstances.indexOf(this); if (index !== -1) { mountedInstances.splice(index, 1); } if (typeof current.componentWillUnmount === "function") { return current.componentWillUnmount.apply(this, arguments); } } proxiedComponentWillUnmount.toString = proxyToString( "componentWillUnmount" ); function defineProxyProperty(name, descriptor) { Object.defineProperty(proxy, name, descriptor); } function defineProxyPropertyWithValue(name, value) { var _ref = Object.getOwnPropertyDescriptor(current, name) || {}, _ref$enumerable = _ref.enumerable, enumerable = _ref$enumerable === undefined ? false : _ref$enumerable, _ref$writable = _ref.writable, writable = _ref$writable === undefined ? true : _ref$writable; defineProxyProperty(name, { configurable: true, enumerable: enumerable, writable: writable, value: value }); } function createAutoBindMap() { if (!current.__reactAutoBindMap) { return; } var __reactAutoBindMap = {}; for (var name in current.__reactAutoBindMap) { if ( typeof proxy[name] === "function" && current.__reactAutoBindMap.hasOwnProperty(name) ) { __reactAutoBindMap[name] = proxy[name]; } } return __reactAutoBindMap; } function createAutoBindPairs() { var __reactAutoBindPairs = []; for (var i = 0; i < current.__reactAutoBindPairs.length; i += 2) { var name = current.__reactAutoBindPairs[i]; var method = proxy[name]; if (typeof method === "function") { __reactAutoBindPairs.push(name, method); } } return __reactAutoBindPairs; } function update(next) { current = next; var currentNames = Object.getOwnPropertyNames(current); var previousName = Object.getOwnPropertyNames(proxy); var removedNames = difference(previousName, currentNames); removedNames.forEach(function(name) { delete proxy[name]; }); currentNames.forEach(function(name) { var descriptor = Object.getOwnPropertyDescriptor(current, name); if (typeof descriptor.value === "function") { defineProxyPropertyWithValue(name, proxyMethod(name)); } else { defineProxyProperty(name, descriptor); } }); defineProxyPropertyWithValue( "componentDidMount", proxiedComponentDidMount ); defineProxyPropertyWithValue( "componentWillUnmount", proxiedComponentWillUnmount ); if (current.hasOwnProperty("__reactAutoBindMap")) { defineProxyPropertyWithValue( "__reactAutoBindMap", createAutoBindMap() ); } if (current.hasOwnProperty("__reactAutoBindPairs")) { defineProxyPropertyWithValue( "__reactAutoBindPairs", createAutoBindPairs() ); } proxy.__proto__ = next; return mountedInstances; } function get() { return proxy; } return { update: update, get: get }; } function bindAutoBindMethod(component, method) { var boundMethod = method.bind(component); boundMethod.__reactBoundContext = component; boundMethod.__reactBoundMethod = method; boundMethod.__reactBoundArguments = null; var componentName = component.constructor.displayName, _bind = boundMethod.bind; boundMethod.bind = function(newThis) { var args = Array.prototype.slice.call(arguments, 1); if (newThis !== component && newThis !== null) { console.warn( "bind(): React component methods may only be bound to the " + "component instance. See " + componentName ); } else if (!args.length) { console.warn( "bind(): You are binding a component method to the component. " + "React does this for you automatically in a high-performance " + "way, so you can safely remove this call. See " + componentName ); return boundMethod; } var reboundMethod = _bind.apply(boundMethod, arguments); reboundMethod.__reactBoundContext = component; reboundMethod.__reactBoundMethod = method; reboundMethod.__reactBoundArguments = args; return reboundMethod; }; return boundMethod; } function bindAutoBindMethodsFromMap(component) { for (var autoBindKey in component.__reactAutoBindMap) { if (!component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) { return; } if ( component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component ) { continue; } var method = component.__reactAutoBindMap[autoBindKey]; component[autoBindKey] = bindAutoBindMethod(component, method); } } function bindAutoBindMethods(component) { if (component.__reactAutoBindPairs) { bindAutoBindMethodsFromArray(component); } else if (component.__reactAutoBindMap) { bindAutoBindMethodsFromMap(component); } } function bindAutoBindMethodsFromArray(component) { var pairs = component.__reactAutoBindPairs; if (!pairs) { return; } for (var i = 0; i < pairs.length; i += 2) { var autoBindKey = pairs[i]; if ( component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component ) { continue; } var method = pairs[i + 1]; component[autoBindKey] = bindAutoBindMethod(component, method); } } function shouldDeleteClassicInstanceMethod(component, name) { if ( component.__reactAutoBindMap && component.__reactAutoBindMap.hasOwnProperty(name) ) { return false; } if ( component.__reactAutoBindPairs && component.__reactAutoBindPairs.indexOf(name) >= 0 ) { return false; } if (component[name].__reactBoundArguments !== null) { return false; } return true; } function shouldDeleteModernInstanceMethod(component, name) { var prototype = component.constructor.prototype; var prototypeDescriptor = Object.getOwnPropertyDescriptor( prototype, name ); if (!prototypeDescriptor || !prototypeDescriptor.get) { return false; } if (prototypeDescriptor.get().length !== component[name].length) { return false; } return true; } function shouldDeleteInstanceMethod(component, name) { var descriptor = Object.getOwnPropertyDescriptor(component, name); if (typeof descriptor.value !== "function") { return; } if (component.__reactAutoBindMap || component.__reactAutoBindPairs) { return shouldDeleteClassicInstanceMethod(component, name); } else { return shouldDeleteModernInstanceMethod(component, name); } } function deleteUnknownAutoBindMethods(component) { var names = Object.getOwnPropertyNames(component); names.forEach(function(name) { if (shouldDeleteInstanceMethod(component, name)) { delete component[name]; } }); } var _slicedToArray = (function() { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for ( var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true ) { _arr.push(_s.value); if (i && _arr.length === i) { break; } } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) { _i["return"](); } } finally { if (_d) { throw _e; } } } return _arr; } return function(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError( "Invalid attempt to destructure non-iterable instance" ); } }; })(); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function find(array, fn) { for (var i = 0, n = array.length; i < n; i++) { if (fn(array[i], i)) { return array[i]; } } } var RESERVED_STATICS = [ "length", "displayName", "name", "arguments", "caller", "prototype", "toString" ]; function isEqualDescriptor(a, b) { if (!a && !b) { return true; } if (!a || !b) { return false; } for (var key in a) { if (a[key] !== b[key]) { return false; } } return true; } function getDisplayName(Component) { var displayName = Component.displayName || Component.name; return displayName && displayName !== "ReactComponent" ? displayName : "Unknown"; } var allProxies = []; function findProxy(Component) { var pair = find(allProxies, function(_ref) { var _ref2 = _slicedToArray(_ref, 1), key = _ref2[0]; return key === Component; }); return pair ? pair[1] : null; } function addProxy(Component, proxy) { allProxies.push([Component, proxy]); } function proxyClass(InitialComponent) { var existingProxy = findProxy(InitialComponent); if (existingProxy) { return existingProxy; } var CurrentComponent = void 0; var ProxyComponent = void 0; var savedDescriptors = {}; function instantiate(factory, context, params) { var component = factory(); try { return component.apply(context, params); } catch (err) { var instance = new (Function.prototype.bind.apply( component, [null].concat(_toConsumableArray(params)) ))(); Object.keys(instance).forEach(function(key) { if (RESERVED_STATICS.indexOf(key) > -1) { return; } context[key] = instance[key]; }); } } var displayName = getDisplayName(InitialComponent); try { ProxyComponent = new Function( "factory", "instantiate", "return function " + displayName + "() {\n return instantiate(factory, this, arguments);\n }" )(function() { return CurrentComponent; }, instantiate); } catch (err) { ProxyComponent = function ProxyComponent() { return instantiate( function() { return CurrentComponent; }, this, arguments ); }; } try { Object.defineProperty(ProxyComponent, "name", { value: displayName }); } catch (err) { /*skip*/ } ProxyComponent.toString = function toString() { return CurrentComponent.toString(); }; var prototypeProxy = void 0; if ( InitialComponent.prototype && InitialComponent.prototype.isReactComponent ) { prototypeProxy = createPrototypeProxy(); ProxyComponent.prototype = prototypeProxy.get(); } function update(NextComponent) { if (typeof NextComponent !== "function") { throw new Error("Expected a constructor."); } if (NextComponent === CurrentComponent) { return; } var existingProxy = findProxy(NextComponent); if (existingProxy) { return update(existingProxy.__getCurrent()); } var PreviousComponent = CurrentComponent; CurrentComponent = NextComponent; displayName = getDisplayName(NextComponent); ProxyComponent.displayName = displayName; try { Object.defineProperty(ProxyComponent, "name", { value: displayName }); } catch (err) { /*skip*/ } ProxyComponent.__proto__ = NextComponent.__proto__; if (PreviousComponent) { Object.getOwnPropertyNames(PreviousComponent).forEach(function( key ) { if (RESERVED_STATICS.indexOf(key) > -1) { return; } var prevDescriptor = Object.getOwnPropertyDescriptor( PreviousComponent, key ); var savedDescriptor = savedDescriptors[key]; if (!isEqualDescriptor(prevDescriptor, savedDescriptor)) { try { Object.defineProperty( NextComponent, key, prevDescriptor ); } catch (err) {} } }); } Object.getOwnPropertyNames(NextComponent).forEach(function(key) { if (RESERVED_STATICS.indexOf(key) > -1) { return; } var prevDescriptor = PreviousComponent && Object.getOwnPropertyDescriptor(PreviousComponent, key); var savedDescriptor = savedDescriptors[key]; if ( prevDescriptor && savedDescriptor && !isEqualDescriptor(savedDescriptor, prevDescriptor) ) { try { Object.defineProperty( NextComponent, key, prevDescriptor ); Object.defineProperty( ProxyComponent, key, prevDescriptor ); } catch (err) {} return; } if (prevDescriptor && !savedDescriptor) { Object.defineProperty(ProxyComponent, key, prevDescriptor); return; } var nextDescriptor = Object.assign( {}, Object.getOwnPropertyDescriptor(NextComponent, key), { configurable: true } ); savedDescriptors[key] = nextDescriptor; Object.defineProperty(ProxyComponent, key, nextDescriptor); }); Object.getOwnPropertyNames(ProxyComponent).forEach(function(key) { if (RESERVED_STATICS.indexOf(key) > -1) { return; } if (NextComponent.hasOwnProperty(key)) { return; } var proxyDescriptor = Object.getOwnPropertyDescriptor( ProxyComponent, key ); if (proxyDescriptor && !proxyDescriptor.configurable) { return; } var prevDescriptor = PreviousComponent && Object.getOwnPropertyDescriptor(PreviousComponent, key); var savedDescriptor = savedDescriptors[key]; if ( prevDescriptor && savedDescriptor && !isEqualDescriptor(savedDescriptor, prevDescriptor) ) { return; } delete ProxyComponent[key]; }); if (prototypeProxy) { var mountedInstances = prototypeProxy.update( NextComponent.prototype ); ProxyComponent.prototype.constructor = NextComponent; mountedInstances.forEach(bindAutoBindMethods); mountedInstances.forEach(deleteUnknownAutoBindMethods); } } function get() { return ProxyComponent; } function getCurrent() { return CurrentComponent; } update(InitialComponent); var proxy = { get: get, update: update }; addProxy(ProxyComponent, proxy); Object.defineProperty(proxy, "__getCurrent", { configurable: false, writable: false, enumerable: false, value: getCurrent }); return proxy; } function createFallback(Component) { var CurrentComponent = Component; return { get: function get() { return CurrentComponent; }, update: function update(NextComponent) { CurrentComponent = NextComponent; } }; } function createClassProxy$1(Component) { return Component.__proto__ && supportsProtoAssignment() ? proxyClass(Component) : createFallback(Component); } if (!supportsProtoAssignment()) { console.warn( "This JavaScript environment does not support __proto__. " + "This means that react-proxy is unable to proxy React components. " + "Features that rely on react-proxy, such as react-transform-hmr, " + "will not function as expected." ); } return createClassProxy$1; }); ================================================ FILE: lib/ReactShallowRenderer.js ================================================ (function umd(root, factory) { if (typeof exports === "object" && typeof module === "object") { module.exports = factory(); } else if (typeof define === "function" && define.amd) { define([], factory); } else if (typeof exports === "object") { exports.ReactShallowRenderer = factory(); } else { root.ReactShallowRenderer = factory(); } })(this, function() { function checkNull(vnode) { if (vnode === null || vnode === false) { return { type: "#comment", text: "empty", vtype: 0 }; } return vnode; } return function ReactShallowRenderer() { return { render: function(vnode) { var ret; if (vnode.tag === 2) { ret = checkNull(new vnode.type()); ret = checkNull(ret); } else if (vnode.tag === 1) { ret = checkNull(vnode.type()); } else { ret = vnode; } this.ret = ret; }, getRenderOutput: function() { return this.ret; } }; }; }); ================================================ FILE: lib/ReactTestUtils.js ================================================ (function umd(root, factory) { if (typeof exports === "object" && typeof module === "object") { module.exports = factory(require("react")); } else if (typeof define === "function" && define.amd) { define(["react"], factory); } else if (typeof exports === "object") { exports["ReactTestUtils"] = factory(require("react")); } else { root["ReactTestUtils"] = factory(root["React"]); } })(this, function(React) { function getFiber(inst) { return inst._reactInternalFiber || inst.updater; } //收集符合条件的元素节点 function findChildren(fiber, callback, ret) { for (var i in fiber.children) { var a = fiber.children[i]; findAllInRenderedTreeImpl(a, callback, ret); } } function findAllInRenderedTreeImpl(target, callback, ret) { if (!target) { return; } else if (target.nodeType) { if (callback(target)) { ret.push(target); } } else if (target.render) { //实例 var fiber = getFiber(target); findChildren(fiber, callback, ret); } else if (target.tag + 0 === target.tag) { var instance = target.stateNode; if (callback(instance)) { ret.push(instance); } if (instance.render) { //实例 findChildren(getFiber(instance), callback, ret); } else if (target.tag == 5) { findChildren(target, callback, ret); } } } var ReactTestUtils = { renderIntoDocument: function(element) { var div = document.createElement("div"); return ReactDOM.render(element, div); }, isElement: function(element) { return React.isValidElement(element); }, isElementOfType: function(inst, convenienceConstructor) { return ( React.isValidElement(inst) && inst.type === convenienceConstructor ); }, isDOMComponent: function(inst) { return !!(inst && inst.nodeType === 1 && inst.tagName); }, isDOMComponentElement: function(inst) { //是否为元素节点 return !!(inst && React.isValidElement(inst) && !!inst.tagName); }, isCompositeComponent: function(inst) { //是否为组件实例 if (ReactTestUtils.isDOMComponent(inst)) { return false; } return ( inst != null && typeof inst.render === "function" && typeof inst.setState === "function" ); }, isCompositeComponentWithType: function(inst, type) { if (!ReactTestUtils.isCompositeComponent(inst)) { return false; } return inst.constructor === type; }, isCompositeComponentElement: function(inst) { if (!React.isValidElement(inst)) { return false; } var prototype = inst.constructor.prototype; return ( typeof prototype.render === "function" && typeof prototype.setState === "function" ); }, isCompositeComponentElementWithType: function(inst, type) { if (!ReactTestUtils.isCompositeComponent(inst)) { return false; } const fiber = inst._reactInternalFiber || {}; return (fiber.type = type); }, findAllInRenderedTree: function(inst, fn) { var ret = []; if (!inst) { return ret; } findAllInRenderedTreeImpl(inst, fn, ret); return ret; }, /** * 相当于getElementsByClassName */ scryRenderedDOMComponentsWithClass: function(root, classNames) { return ReactTestUtils.findAllInRenderedTree(root, function(inst) { if (ReactTestUtils.isDOMComponent(inst)) { var className = inst.className; if (typeof className !== "string") { // SVG, probably. className = inst.getAttribute("class") || ""; } var classList = className.split(/\s+/); if (!Array.isArray(classNames)) { classNames = classNames.split(/\s+/); } return classNames.every(function(name) { return classList.indexOf(name) !== -1; }); } return false; }); }, /** *相当于getElementByClassName(注意最多返回一个),不等于1个就抛错 */ findRenderedDOMComponentWithClass: function(root, className) { var all = ReactTestUtils.scryRenderedDOMComponentsWithClass( root, className ); if (all.length !== 1) { throw new Error( "Did not find exactly one match (found: " + all.length + ") " + "for class:" + className ); } return all[0]; }, /** * 相当于getElementsByTag */ scryRenderedDOMComponentsWithTag: function(root, tagName) { return ReactTestUtils.findAllInRenderedTree(root, function(inst) { return ( ReactTestUtils.isDOMComponent(inst) && inst.tagName.toUpperCase() === tagName.toUpperCase() ); }); }, /** * 相当于getElementByTag(注意最多返回一个),不等于1个就抛错 */ findRenderedDOMComponentWithTag: function(root, tagName) { var all = ReactTestUtils.scryRenderedDOMComponentsWithTag( root, tagName ); if (all.length !== 1) { throw new Error( "Did not find exactly one match (found: " + all.length + ") " + "for tag:" + tagName ); } return all[0]; }, /** * 找出所有符合指定子组件的实例 */ scryRenderedComponentsWithType: function(root, componentType) { return ReactTestUtils.findAllInRenderedTree(root, function(inst) { return ReactTestUtils.isCompositeComponentWithType( inst, componentType ); }); }, /** * 与scryRenderedComponentsWithType用法相同,但只返回一个节点,如有零个或多个匹配的节点就报错 */ findRenderedComponentWithType: function(root, componentType) { var all = ReactTestUtils.scryRenderedComponentsWithType( root, componentType ); if (all.length !== 1) { throw new Error( "Did not find exactly one match (found: " + all.length + ") " + "for componentType:" + componentType ); } return all[0]; }, mockComponent: function(module, mockTagName) { mockTagName = mockTagName || module.mockTagName || "div"; module.prototype.render.mockImplementation(function() { return React.createElement( mockTagName, null, this.props.children ); }); return this; }, simulateNativeEventOnNode: function( topLevelType, node, fakeNativeEvent ) { fakeNativeEvent.target = node; fakeNativeEvent.simulated = true; if (topLevelType.indexOf("top") === 0) { topLevelType = topLevelType.slice(3).toLowerCase(); } React.eventSystem.dispatchEvent(fakeNativeEvent, topLevelType); }, simulateNativeEventOnDOMComponent: function( topLevelType, comp, fakeNativeEvent ) { ReactTestUtils.simulateNativeEventOnNode( topLevelType, React.findDOMNode(comp), fakeNativeEvent ); }, nativeTouchData: function(x, y) { return { touches: [{ pageX: x, pageY: y }] }; }, Simulate: {}, SimulateNative: {} }; // ReactTestUtils.Simulate.click(element, options) "click,change,keyDown,keyUp,KeyPress,mouseDown,mouseUp,mouseMove,input,focus,blur".replace( /\w+/g, function(name) { ReactTestUtils.Simulate[name] = function(node, opts) { if (!node || node.nodeType !== 1) { throw "第一个参数必须为元素节点"; } var fakeNativeEvent = opts || {}; var fakeTarget = fakeNativeEvent.target; if (fakeTarget && !fakeTarget.appendChild) { for (var i in fakeTarget) { node[i] = fakeTarget[i]; } } fakeNativeEvent.target = node; fakeNativeEvent.simulated = true; var eventName = name.toLowerCase(); fakeNativeEvent.type = eventName; var fn = node["on" + eventName]; React.eventSystem.dispatchEvent(fakeNativeEvent, eventName); if (fn) { try { fn.call(node, fakeNativeEvent); } catch (e) {} } }; } ); ReactTestUtils.SimulateNative = ReactTestUtils.Simulate; return ReactTestUtils; }); ================================================ FILE: lib/ReduxIE.js ================================================ (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : factory((global.Redux = global.Redux || {})); })(this, function(exports) { "use strict"; /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == "object" && global && global.Object === Object && global; /** Detect free variable `self`. */ var freeSelf = typeof self == "object" && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function("return this")(); /** Built-in value references. */ var Symbol = root.Symbol; /** Used for built-in method references. */ var objectProto$1 = Object.prototype; /** Used to check objects for own properties. */ var hasOwn = objectProto$1.hasOwnProperty; function isPlainObject(obj) { var key; // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if (!obj || typeof obj !== "object" || obj.nodeType) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch (e) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for (key in obj) { } return key === undefined || hasOwn.call(obj, key); } function symbolObservablePonyfill(root) { var result; var Symbol = root.Symbol; if (typeof Symbol === "function") { if (Symbol.observable) { result = Symbol.observable; } else { result = Symbol("observable"); Symbol.observable = result; } } else { result = "@@observable"; } return result; } /* global window */ var root$2; if (typeof self !== "undefined") { root$2 = self; } else if (typeof window !== "undefined") { root$2 = window; } else if (typeof global !== "undefined") { root$2 = global; } else if (typeof module !== "undefined") { root$2 = module; } else { root$2 = Function("return this")(); } var result = symbolObservablePonyfill(root$2); /** * These are private action types reserved by Redux. * For any unknown actions, you must return the current state. * If the current state is undefined, you must return the initial state. * Do not reference these action types directly in your code. */ var ActionTypes = { INIT: "@@redux/INIT" }; function createStore(reducer, preloadedState, enhancer) { var _ref2; if ( typeof preloadedState === "function" && typeof enhancer === "undefined" ) { enhancer = preloadedState; preloadedState = undefined; } if (typeof enhancer !== "undefined") { if (typeof enhancer !== "function") { throw new Error("Expected the enhancer to be a function."); } return enhancer(createStore)(reducer, preloadedState); } if (typeof reducer !== "function") { throw new Error("Expected the reducer to be a function."); } var currentReducer = reducer; var currentState = preloadedState; var currentListeners = []; var nextListeners = currentListeners; var isDispatching = false; function ensureCanMutateNextListeners() { if (nextListeners === currentListeners) { nextListeners = currentListeners.slice(); } } function getState() { return currentState; } function subscribe(listener) { if (typeof listener !== "function") { throw new Error("Expected listener to be a function."); } var isSubscribed = true; ensureCanMutateNextListeners(); nextListeners.push(listener); return function unsubscribe() { if (!isSubscribed) { return; } isSubscribed = false; ensureCanMutateNextListeners(); var index = nextListeners.indexOf(listener); nextListeners.splice(index, 1); }; } function dispatch(action) { if (!isPlainObject(action)) { throw new Error( "Actions must be plain objects. " + "Use custom middleware for async actions." ); } if (typeof action.type === "undefined") { throw new Error( "Actions may not have an undefined \"type\" property. " + "Have you misspelled a constant?" ); } if (isDispatching) { throw new Error("Reducers may not dispatch actions."); } try { isDispatching = true; currentState = currentReducer(currentState, action); } finally { isDispatching = false; } var listeners = (currentListeners = nextListeners); for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; listener(); } return action; } function replaceReducer(nextReducer) { if (typeof nextReducer !== "function") { throw new Error("Expected the nextReducer to be a function."); } currentReducer = nextReducer; dispatch({ type: ActionTypes.INIT }); } function observable() { var _ref; var outerSubscribe = subscribe; return ( (_ref = { subscribe: function subscribe(observer) { if (typeof observer !== "object") { throw new TypeError( "Expected the observer to be an object." ); } function observeState() { if (observer.next) { observer.next(getState()); } } observeState(); var unsubscribe = outerSubscribe(observeState); return { unsubscribe: unsubscribe }; } }), (_ref[result] = function() { return this; }), _ref ); } dispatch({ type: ActionTypes.INIT }); return ( (_ref2 = { dispatch: dispatch, subscribe: subscribe, getState: getState, replaceReducer: replaceReducer }), (_ref2[result] = observable), _ref2 ); } function warning(message) { /* eslint-disable no-console */ if ( typeof console !== "undefined" && typeof console.error === "function" ) { console.error(message); } /* eslint-enable no-console */ try { // This error was thrown as a convenience so that if you enable // "break on all exceptions" in your console, // it would pause the execution at this line. throw new Error(message); /* eslint-disable no-empty */ } catch (e) {} /* eslint-enable no-empty */ } function getUndefinedStateErrorMessage(key, action) { var actionType = action && action.type; var actionName = (actionType && "\"" + actionType.toString() + "\"") || "an action"; return ( "Given action " + actionName + ", reducer \"" + key + "\" returned undefined. " + "To ignore an action, you must explicitly return the previous state. " + "If you want this reducer to hold no value, you can return null instead of undefined." ); } function getUnexpectedStateShapeWarningMessage( inputState, reducers, action, unexpectedKeyCache ) { var reducerKeys = Object.keys(reducers); var argumentName = action && action.type === ActionTypes.INIT ? "preloadedState argument passed to createStore" : "previous state received by the reducer"; if (reducerKeys.length === 0) { return ( "Store does not have a valid reducer. Make sure the argument passed " + "to combineReducers is an object whose values are reducers." ); } if (!isPlainObject(inputState)) { return ( "The " + argumentName + " has unexpected type of \"" + {}.toString.call(inputState).match(/\s([a-z|A-Z]+)/)[1] + "\". Expected argument to be an object with the following " + ("keys: \"" + reducerKeys.join("\", \"") + "\"") ); } var unexpectedKeys = Object.keys(inputState).filter(function(key) { return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]; }); unexpectedKeys.forEach(function(key) { unexpectedKeyCache[key] = true; }); if (unexpectedKeys.length > 0) { return ( "Unexpected " + (unexpectedKeys.length > 1 ? "keys" : "key") + " " + ("\"" + unexpectedKeys.join("\", \"") + "\" found in " + argumentName + ". ") + "Expected to find one of the known reducer keys instead: " + ("\"" + reducerKeys.join("\", \"") + "\". Unexpected keys will be ignored.") ); } } function assertReducerShape(reducers) { Object.keys(reducers).forEach(function(key) { var reducer = reducers[key]; var initialState = reducer(undefined, { type: ActionTypes.INIT }); if (typeof initialState === "undefined") { throw new Error( "Reducer \"" + key + "\" returned undefined during initialization. " + "If the state passed to the reducer is undefined, you must " + "explicitly return the initial state. The initial state may " + "not be undefined. If you don't want to set a value for this reducer, " + "you can use null instead of undefined." ); } var type = "@@redux/PROBE_UNKNOWN_ACTION_" + Math.random() .toString(36) .substring(7) .split("") .join("."); if (typeof reducer(undefined, { type: type }) === "undefined") { throw new Error( "Reducer \"" + key + "\" returned undefined when probed with a random type. " + ("Don't try to handle " + ActionTypes.INIT + " or other actions in \"redux/*\" ") + "namespace. They are considered private. Instead, you must return the " + "current state for any unknown actions, unless it is undefined, " + "in which case you must return the initial state, regardless of the " + "action type. The initial state may not be undefined, but can be null." ); } }); } function combineReducers(reducers) { var reducerKeys = Object.keys(reducers); var finalReducers = {}; for (var i = 0; i < reducerKeys.length; i++) { var key = reducerKeys[i]; { if (typeof reducers[key] === "undefined") { warning("No reducer provided for key \"" + key + "\""); } } if (typeof reducers[key] === "function") { finalReducers[key] = reducers[key]; } } var finalReducerKeys = Object.keys(finalReducers); var unexpectedKeyCache = void 0; { unexpectedKeyCache = {}; } var shapeAssertionError = void 0; try { assertReducerShape(finalReducers); } catch (e) { shapeAssertionError = e; } return function combination() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var action = arguments[1]; if (shapeAssertionError) { throw shapeAssertionError; } { var warningMessage = getUnexpectedStateShapeWarningMessage( state, finalReducers, action, unexpectedKeyCache ); if (warningMessage) { warning(warningMessage); } } var hasChanged = false; var nextState = {}; for (var _i = 0; _i < finalReducerKeys.length; _i++) { var _key = finalReducerKeys[_i]; var reducer = finalReducers[_key]; var previousStateForKey = state[_key]; var nextStateForKey = reducer(previousStateForKey, action); if (typeof nextStateForKey === "undefined") { var errorMessage = getUndefinedStateErrorMessage( _key, action ); throw new Error(errorMessage); } nextState[_key] = nextStateForKey; hasChanged = hasChanged || nextStateForKey !== previousStateForKey; } return hasChanged ? nextState : state; }; } function bindActionCreator(actionCreator, dispatch) { return function() { return dispatch(actionCreator.apply(undefined, arguments)); }; } function bindActionCreators(actionCreators, dispatch) { if (typeof actionCreators === "function") { return bindActionCreator(actionCreators, dispatch); } if (typeof actionCreators !== "object" || actionCreators === null) { throw new Error( "bindActionCreators expected an object or a function, instead received " + (actionCreators === null ? "null" : typeof actionCreators) + ". " + "Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?" ); } var keys = Object.keys(actionCreators); var boundActionCreators = {}; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var actionCreator = actionCreators[key]; if (typeof actionCreator === "function") { boundActionCreators[key] = bindActionCreator( actionCreator, dispatch ); } } return boundActionCreators; } function compose() { for ( var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++ ) { funcs[_key] = arguments[_key]; } if (funcs.length === 0) { return function(arg) { return arg; }; } if (funcs.length === 1) { return funcs[0]; } return funcs.reduce(function(a, b) { return function() { return a(b.apply(undefined, arguments)); }; }); } var _extends = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function applyMiddleware() { for ( var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++ ) { middlewares[_key] = arguments[_key]; } return function(createStore) { return function(reducer, preloadedState, enhancer) { var store = createStore(reducer, preloadedState, enhancer); var _dispatch = store.dispatch; var chain = []; var middlewareAPI = { getState: store.getState, dispatch: function dispatch(action) { return _dispatch(action); } }; chain = middlewares.map(function(middleware) { return middleware(middlewareAPI); }); _dispatch = compose.apply(undefined, chain)(store.dispatch); return _extends({}, store, { dispatch: _dispatch }); }; }; } exports.createStore = createStore; exports.combineReducers = combineReducers; exports.bindActionCreators = bindActionCreators; exports.applyMiddleware = applyMiddleware; exports.compose = compose; // Object.defineProperty(exports, "__esModule", { value: true }); }); ================================================ FILE: lib/babel.js ================================================ (function webpackUniversalModuleDefinition(root, factory) { if (typeof exports === "object" && typeof module === "object") module.exports = factory(); else if (typeof define === "function" && define.amd) define([], factory); else if (typeof exports === "object") exports["Babel"] = factory(); else root["Babel"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; // The require function /******/ /******/ /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if (installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } // Create a new module (and put it into the cache) /******/ /******/ var module = (installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }); // Execute the module function /******/ /******/ /******/ modules[moduleId].call( module.exports, module, module.exports, __webpack_require__ ); // Flag the module as loaded /******/ /******/ /******/ module.l = true; // Return the exports of the module /******/ /******/ /******/ return module.exports; /******/ } // expose the modules object (__webpack_modules__) /******/ /******/ /******/ /******/ __webpack_require__.m = modules; // expose the module cache /******/ /******/ /******/ __webpack_require__.c = installedModules; // define getter function for harmony exports /******/ /******/ /******/ __webpack_require__.d = function( exports, name, getter ) { /******/ if (!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; // getDefaultExport function for compatibility with non-harmony modules /******/ /******/ /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module["default"]; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, "a", getter); /******/ return getter; /******/ }; // Object.prototype.hasOwnProperty.call /******/ /******/ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; // __webpack_public_path__ /******/ /******/ /******/ __webpack_require__.p = ""; // Load entry module and return exports /******/ /******/ /******/ return __webpack_require__( (__webpack_require__.s = 250) ); /******/ })( /************************************************************************/ /******/ [ /* 0 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */ (function(module, global) { var __WEBPACK_AMD_DEFINE_RESULT__; /*! https://mths.be/regenerate v1.3.3 by @mathias | MIT license */ (function(root) { // Detect free variables `exports`. var freeExports = typeof exports == "object" && exports; // Detect free variable `module`. var freeModule = typeof module == "object" && module && module.exports == freeExports && module; // Detect free variable `global`, from Node.js/io.js or Browserified code, // and use it as `root`. var freeGlobal = typeof global == "object" && global; if ( freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal ) { root = freeGlobal; } /*--------------------------------------------------------------------------*/ var ERRORS = { rangeOrder: "A range\u2019s `stop` value must be greater than or equal " + "to the `start` value.", codePointRange: "Invalid code point value. Code points range from " + "U+000000 to U+10FFFF." }; // https://mathiasbynens.be/notes/javascript-encoding#surrogate-pairs var HIGH_SURROGATE_MIN = 0xd800; var HIGH_SURROGATE_MAX = 0xdbff; var LOW_SURROGATE_MIN = 0xdc00; var LOW_SURROGATE_MAX = 0xdfff; // In Regenerate output, `\0` is never preceded by `\` because we sort by // code point value, so let’s keep this regular expression simple. var regexNull = /\\x00([^0123456789]|$)/g; var object = {}; var hasOwnProperty = object.hasOwnProperty; var extend = function extend(destination, source) { var key; for (key in source) { if (hasOwnProperty.call(source, key)) { destination[key] = source[key]; } } return destination; }; var forEach = function forEach(array, callback) { var index = -1; var length = array.length; while (++index < length) { callback(array[index], index); } }; var toString = object.toString; var isArray = function isArray(value) { return toString.call(value) == "[object Array]"; }; var isNumber = function isNumber(value) { return ( typeof value == "number" || toString.call(value) == "[object Number]" ); }; // This assumes that `number` is a positive integer that `toString()`s nicely // (which is the case for all code point values). var zeroes = "0000"; var pad = function pad(number, totalCharacters) { var string = String(number); return string.length < totalCharacters ? (zeroes + string).slice(-totalCharacters) : string; }; var hex = function hex(number) { return Number(number) .toString(16) .toUpperCase(); }; var slice = [].slice; /*--------------------------------------------------------------------------*/ var dataFromCodePoints = function dataFromCodePoints( codePoints ) { var index = -1; var length = codePoints.length; var max = length - 1; var result = []; var isStart = true; var tmp; var previous = 0; while (++index < length) { tmp = codePoints[index]; if (isStart) { result.push(tmp); previous = tmp; isStart = false; } else { if (tmp == previous + 1) { if (index != max) { previous = tmp; continue; } else { isStart = true; result.push(tmp + 1); } } else { // End the previous range and start a new one. result.push(previous + 1, tmp); previous = tmp; } } } if (!isStart) { result.push(tmp + 1); } return result; }; var dataRemove = function dataRemove(data, codePoint) { // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1]; if (codePoint >= start && codePoint < end) { // Modify this pair. if (codePoint == start) { if (end == start + 1) { // Just remove `start` and `end`. data.splice(index, 2); return data; } else { // Just replace `start` with a new value. data[index] = codePoint + 1; return data; } } else if (codePoint == end - 1) { // Just replace `end` with a new value. data[index + 1] = codePoint; return data; } else { // Replace `[start, end]` with `[startA, endA, startB, endB]`. data.splice( index, 2, start, codePoint, codePoint + 1, end ); return data; } } index += 2; } return data; }; var dataRemoveRange = function dataRemoveRange( data, rangeStart, rangeEnd ) { if (rangeEnd < rangeStart) { throw Error(ERRORS.rangeOrder); } // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; while (index < data.length) { start = data[index]; end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. // Exit as soon as no more matching pairs can be found. if (start > rangeEnd) { return data; } // Check if this range pair is equal to, or forms a subset of, the range // to be removed. // E.g. we have `[0, 11, 40, 51]` and want to remove 0-10 → `[40, 51]`. // E.g. we have `[40, 51]` and want to remove 0-100 → `[]`. if (rangeStart <= start && rangeEnd >= end) { // Remove this pair. data.splice(index, 2); continue; } // Check if both `rangeStart` and `rangeEnd` are within the bounds of // this pair. // E.g. we have `[0, 11]` and want to remove 4-6 → `[0, 4, 7, 11]`. if (rangeStart >= start && rangeEnd < end) { if (rangeStart == start) { // Replace `[start, end]` with `[startB, endB]`. data[index] = rangeEnd + 1; data[index + 1] = end + 1; return data; } // Replace `[start, end]` with `[startA, endA, startB, endB]`. data.splice( index, 2, start, rangeStart, rangeEnd + 1, end + 1 ); return data; } // Check if only `rangeStart` is within the bounds of this pair. // E.g. we have `[0, 11]` and want to remove 4-20 → `[0, 4]`. if (rangeStart >= start && rangeStart <= end) { // Replace `end` with `rangeStart`. data[index + 1] = rangeStart; // Note: we cannot `return` just yet, in case any following pairs still // contain matching code points. // E.g. we have `[0, 11, 14, 31]` and want to remove 4-20 // → `[0, 4, 21, 31]`. } else if ( rangeEnd >= start && rangeEnd <= end ) { // Check if only `rangeEnd` is within the bounds of this pair. // E.g. we have `[14, 31]` and want to remove 4-20 → `[21, 31]`. // Just replace `start`. data[index] = rangeEnd + 1; return data; } index += 2; } return data; }; var dataAdd = function dataAdd(data, codePoint) { // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var lastIndex = null; var length = data.length; if (codePoint < 0x0 || codePoint > 0x10ffff) { throw RangeError(ERRORS.codePointRange); } while (index < length) { start = data[index]; end = data[index + 1]; // Check if the code point is already in the set. if (codePoint >= start && codePoint < end) { return data; } if (codePoint == start - 1) { // Just replace `start` with a new value. data[index] = codePoint; return data; } // At this point, if `start` is `greater` than `codePoint`, insert a new // `[start, end]` pair before the current pair, or after the current pair // if there is a known `lastIndex`. if (start > codePoint) { data.splice( lastIndex != null ? lastIndex + 2 : 0, 0, codePoint, codePoint + 1 ); return data; } if (codePoint == end) { // Check if adding this code point causes two separate ranges to become // a single range, e.g. `dataAdd([0, 4, 5, 10], 4)` → `[0, 10]`. if (codePoint + 1 == data[index + 2]) { data.splice( index, 4, start, data[index + 3] ); return data; } // Else, just replace `end` with a new value. data[index + 1] = codePoint + 1; return data; } lastIndex = index; index += 2; } // The loop has finished; add the new pair to the end of the data set. data.push(codePoint, codePoint + 1); return data; }; var dataAddData = function dataAddData(dataA, dataB) { // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var data = dataA.slice(); var length = dataB.length; while (index < length) { start = dataB[index]; end = dataB[index + 1] - 1; if (start == end) { data = dataAdd(data, start); } else { data = dataAddRange(data, start, end); } index += 2; } return data; }; var dataRemoveData = function dataRemoveData( dataA, dataB ) { // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var data = dataA.slice(); var length = dataB.length; while (index < length) { start = dataB[index]; end = dataB[index + 1] - 1; if (start == end) { data = dataRemove(data, start); } else { data = dataRemoveRange(data, start, end); } index += 2; } return data; }; var dataAddRange = function dataAddRange( data, rangeStart, rangeEnd ) { if (rangeEnd < rangeStart) { throw Error(ERRORS.rangeOrder); } if ( rangeStart < 0x0 || rangeStart > 0x10ffff || rangeEnd < 0x0 || rangeEnd > 0x10ffff ) { throw RangeError(ERRORS.codePointRange); } // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var added = false; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1]; if (added) { // The range has already been added to the set; at this point, we just // need to get rid of the following ranges in case they overlap. // Check if this range can be combined with the previous range. if (start == rangeEnd + 1) { data.splice(index - 1, 2); return data; } // Exit as soon as no more possibly overlapping pairs can be found. if (start > rangeEnd) { return data; } // E.g. `[0, 11, 12, 16]` and we’ve added 5-15, so we now have // `[0, 16, 12, 16]`. Remove the `12,16` part, as it lies within the // `0,16` range that was previously added. if ( start >= rangeStart && start <= rangeEnd ) { // `start` lies within the range that was previously added. if ( end > rangeStart && end - 1 <= rangeEnd ) { // `end` lies within the range that was previously added as well, // so remove this pair. data.splice(index, 2); index -= 2; // Note: we cannot `return` just yet, as there may still be other // overlapping pairs. } else { // `start` lies within the range that was previously added, but // `end` doesn’t. E.g. `[0, 11, 12, 31]` and we’ve added 5-15, so // now we have `[0, 16, 12, 31]`. This must be written as `[0, 31]`. // Remove the previously added `end` and the current `start`. data.splice(index - 1, 2); index -= 2; } // Note: we cannot return yet. } } else if (start == rangeEnd + 1) { data[index] = rangeStart; return data; } else if (start > rangeEnd) { // Check if a new pair must be inserted *before* the current one. data.splice( index, 0, rangeStart, rangeEnd + 1 ); return data; } else if ( rangeStart >= start && rangeStart < end && rangeEnd + 1 <= end ) { // The new range lies entirely within an existing range pair. No action // needed. return data; } else if ( // E.g. `[0, 11]` and you add 5-15 → `[0, 16]`. (rangeStart >= start && rangeStart < end) || // E.g. `[0, 3]` and you add 3-6 → `[0, 7]`. end == rangeStart ) { // Replace `end` with the new value. data[index + 1] = rangeEnd + 1; // Make sure the next range pair doesn’t overlap, e.g. `[0, 11, 12, 14]` // and you add 5-15 → `[0, 16]`, i.e. remove the `12,14` part. added = true; // Note: we cannot `return` just yet. } else if ( rangeStart <= start && rangeEnd + 1 >= end ) { // The new range is a superset of the old range. data[index] = rangeStart; data[index + 1] = rangeEnd + 1; added = true; } index += 2; } // The loop has finished without doing anything; add the new pair to the end // of the data set. if (!added) { data.push(rangeStart, rangeEnd + 1); } return data; }; var dataContains = function dataContains( data, codePoint ) { var index = 0; var length = data.length; // Exit early if `codePoint` is not within `data`’s overall range. var start = data[index]; var end = data[length - 1]; if (length >= 2) { if (codePoint < start || codePoint > end) { return false; } } // Iterate over the data per `(start, end)` pair. while (index < length) { start = data[index]; end = data[index + 1]; if (codePoint >= start && codePoint < end) { return true; } index += 2; } return false; }; var dataIntersection = function dataIntersection( data, codePoints ) { var index = 0; var length = codePoints.length; var codePoint; var result = []; while (index < length) { codePoint = codePoints[index]; if (dataContains(data, codePoint)) { result.push(codePoint); } ++index; } return dataFromCodePoints(result); }; var dataIsEmpty = function dataIsEmpty(data) { return !data.length; }; var dataIsSingleton = function dataIsSingleton(data) { // Check if the set only represents a single code point. return data.length == 2 && data[0] + 1 == data[1]; }; var dataToArray = function dataToArray(data) { // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var result = []; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1]; while (start < end) { result.push(start); ++start; } index += 2; } return result; }; /*--------------------------------------------------------------------------*/ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae var floor = Math.floor; var highSurrogate = function highSurrogate(codePoint) { return parseInt( floor((codePoint - 0x10000) / 0x400) + HIGH_SURROGATE_MIN, 10 ); }; var lowSurrogate = function lowSurrogate(codePoint) { return parseInt( (codePoint - 0x10000) % 0x400 + LOW_SURROGATE_MIN, 10 ); }; var stringFromCharCode = String.fromCharCode; var codePointToString = function codePointToString( codePoint ) { var string; // https://mathiasbynens.be/notes/javascript-escapes#single // Note: the `\b` escape sequence for U+0008 BACKSPACE in strings has a // different meaning in regular expressions (word boundary), so it cannot // be used here. if (codePoint == 0x09) { string = "\\t"; } else if (codePoint == 0x0a) { // Note: IE < 9 treats `'\v'` as `'v'`, so avoid using it. // else if (codePoint == 0x0B) { // string = '\\v'; // } string = "\\n"; } else if (codePoint == 0x0c) { string = "\\f"; } else if (codePoint == 0x0d) { string = "\\r"; } else if (codePoint == 0x5c) { string = "\\\\"; } else if ( codePoint == 0x24 || (codePoint >= 0x28 && codePoint <= 0x2b) || (codePoint >= 0x2d && codePoint <= 0x2f) || codePoint == 0x3f || (codePoint >= 0x5b && codePoint <= 0x5e) || (codePoint >= 0x7b && codePoint <= 0x7d) ) { // The code point maps to an unsafe printable ASCII character; // backslash-escape it. Here’s the list of those symbols: // // $()*+-./?[\]^{|} // // See #7 for more info. string = "\\" + stringFromCharCode(codePoint); } else if (codePoint >= 0x20 && codePoint <= 0x7e) { // The code point maps to one of these printable ASCII symbols // (including the space character): // // !"#%&',/0123456789:;<=>@ABCDEFGHIJKLMNO // PQRSTUVWXYZ_`abcdefghijklmnopqrstuvwxyz~ // // These can safely be used directly. string = stringFromCharCode(codePoint); } else if (codePoint <= 0xff) { // https://mathiasbynens.be/notes/javascript-escapes#hexadecimal string = "\\x" + pad(hex(codePoint), 2); } else { // `codePoint <= 0xFFFF` holds true. // https://mathiasbynens.be/notes/javascript-escapes#unicode string = "\\u" + pad(hex(codePoint), 4); } // There’s no need to account for astral symbols / surrogate pairs here, // since `codePointToString` is private and only used for BMP code points. // But if that’s what you need, just add an `else` block with this code: // // string = '\\u' + pad(hex(highSurrogate(codePoint)), 4) // + '\\u' + pad(hex(lowSurrogate(codePoint)), 4); return string; }; var codePointToStringUnicode = function codePointToStringUnicode( codePoint ) { if (codePoint <= 0xffff) { return codePointToString(codePoint); } return ( "\\u{" + codePoint.toString(16).toUpperCase() + "}" ); }; var symbolToCodePoint = function symbolToCodePoint( symbol ) { var length = symbol.length; var first = symbol.charCodeAt(0); var second; if ( first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > 1 // There is a next code unit. ) { // `first` is a high surrogate, and there is a next character. Assume // it’s a low surrogate (else it’s invalid usage of Regenerate anyway). second = symbol.charCodeAt(1); // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae return ( (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000 ); } return first; }; var createBMPCharacterClasses = function createBMPCharacterClasses( data ) { // Iterate over the data per `(start, end)` pair. var result = ""; var index = 0; var start; var end; var length = data.length; if (dataIsSingleton(data)) { return codePointToString(data[0]); } while (index < length) { start = data[index]; end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. if (start == end) { result += codePointToString(start); } else if (start + 1 == end) { result += codePointToString(start) + codePointToString(end); } else { result += codePointToString(start) + "-" + codePointToString(end); } index += 2; } return "[" + result + "]"; }; var createUnicodeCharacterClasses = function createUnicodeCharacterClasses( data ) { // Iterate over the data per `(start, end)` pair. var result = ""; var index = 0; var start; var end; var length = data.length; if (dataIsSingleton(data)) { return codePointToStringUnicode(data[0]); } while (index < length) { start = data[index]; end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. if (start == end) { result += codePointToStringUnicode(start); } else if (start + 1 == end) { result += codePointToStringUnicode(start) + codePointToStringUnicode(end); } else { result += codePointToStringUnicode(start) + "-" + codePointToStringUnicode(end); } index += 2; } return "[" + result + "]"; }; var splitAtBMP = function splitAtBMP(data) { // Iterate over the data per `(start, end)` pair. var loneHighSurrogates = []; var loneLowSurrogates = []; var bmp = []; var astral = []; var index = 0; var start; var end; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1] - 1; // Note: the `- 1` makes `end` inclusive. if (start < HIGH_SURROGATE_MIN) { // The range starts and ends before the high surrogate range. // E.g. (0, 0x10). if (end < HIGH_SURROGATE_MIN) { bmp.push(start, end + 1); } // The range starts before the high surrogate range and ends within it. // E.g. (0, 0xD855). if ( end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX ) { bmp.push(start, HIGH_SURROGATE_MIN); loneHighSurrogates.push( HIGH_SURROGATE_MIN, end + 1 ); } // The range starts before the high surrogate range and ends in the low // surrogate range. E.g. (0, 0xDCFF). if ( end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX ) { bmp.push(start, HIGH_SURROGATE_MIN); loneHighSurrogates.push( HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1 ); loneLowSurrogates.push( LOW_SURROGATE_MIN, end + 1 ); } // The range starts before the high surrogate range and ends after the // low surrogate range. E.g. (0, 0x10FFFF). if (end > LOW_SURROGATE_MAX) { bmp.push(start, HIGH_SURROGATE_MIN); loneHighSurrogates.push( HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1 ); loneLowSurrogates.push( LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1 ); if (end <= 0xffff) { bmp.push( LOW_SURROGATE_MAX + 1, end + 1 ); } else { bmp.push( LOW_SURROGATE_MAX + 1, 0xffff + 1 ); astral.push(0xffff + 1, end + 1); } } } else if ( start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX ) { // The range starts and ends in the high surrogate range. // E.g. (0xD855, 0xD866). if ( end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX ) { loneHighSurrogates.push(start, end + 1); } // The range starts in the high surrogate range and ends in the low // surrogate range. E.g. (0xD855, 0xDCFF). if ( end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX ) { loneHighSurrogates.push( start, HIGH_SURROGATE_MAX + 1 ); loneLowSurrogates.push( LOW_SURROGATE_MIN, end + 1 ); } // The range starts in the high surrogate range and ends after the low // surrogate range. E.g. (0xD855, 0x10FFFF). if (end > LOW_SURROGATE_MAX) { loneHighSurrogates.push( start, HIGH_SURROGATE_MAX + 1 ); loneLowSurrogates.push( LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1 ); if (end <= 0xffff) { bmp.push( LOW_SURROGATE_MAX + 1, end + 1 ); } else { bmp.push( LOW_SURROGATE_MAX + 1, 0xffff + 1 ); astral.push(0xffff + 1, end + 1); } } } else if ( start >= LOW_SURROGATE_MIN && start <= LOW_SURROGATE_MAX ) { // The range starts and ends in the low surrogate range. // E.g. (0xDCFF, 0xDDFF). if ( end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX ) { loneLowSurrogates.push(start, end + 1); } // The range starts in the low surrogate range and ends after the low // surrogate range. E.g. (0xDCFF, 0x10FFFF). if (end > LOW_SURROGATE_MAX) { loneLowSurrogates.push( start, LOW_SURROGATE_MAX + 1 ); if (end <= 0xffff) { bmp.push( LOW_SURROGATE_MAX + 1, end + 1 ); } else { bmp.push( LOW_SURROGATE_MAX + 1, 0xffff + 1 ); astral.push(0xffff + 1, end + 1); } } } else if ( start > LOW_SURROGATE_MAX && start <= 0xffff ) { // The range starts and ends after the low surrogate range. // E.g. (0xFFAA, 0x10FFFF). if (end <= 0xffff) { bmp.push(start, end + 1); } else { bmp.push(start, 0xffff + 1); astral.push(0xffff + 1, end + 1); } } else { // The range starts and ends in the astral range. astral.push(start, end + 1); } index += 2; } return { loneHighSurrogates: loneHighSurrogates, loneLowSurrogates: loneLowSurrogates, bmp: bmp, astral: astral }; }; var optimizeSurrogateMappings = function optimizeSurrogateMappings( surrogateMappings ) { var result = []; var tmpLow = []; var addLow = false; var mapping; var nextMapping; var highSurrogates; var lowSurrogates; var nextHighSurrogates; var nextLowSurrogates; var index = -1; var length = surrogateMappings.length; while (++index < length) { mapping = surrogateMappings[index]; nextMapping = surrogateMappings[index + 1]; if (!nextMapping) { result.push(mapping); continue; } highSurrogates = mapping[0]; lowSurrogates = mapping[1]; nextHighSurrogates = nextMapping[0]; nextLowSurrogates = nextMapping[1]; // Check for identical high surrogate ranges. tmpLow = lowSurrogates; while ( nextHighSurrogates && highSurrogates[0] == nextHighSurrogates[0] && highSurrogates[1] == nextHighSurrogates[1] ) { // Merge with the next item. if (dataIsSingleton(nextLowSurrogates)) { tmpLow = dataAdd( tmpLow, nextLowSurrogates[0] ); } else { tmpLow = dataAddRange( tmpLow, nextLowSurrogates[0], nextLowSurrogates[1] - 1 ); } ++index; mapping = surrogateMappings[index]; highSurrogates = mapping[0]; lowSurrogates = mapping[1]; nextMapping = surrogateMappings[index + 1]; nextHighSurrogates = nextMapping && nextMapping[0]; nextLowSurrogates = nextMapping && nextMapping[1]; addLow = true; } result.push([ highSurrogates, addLow ? tmpLow : lowSurrogates ]); addLow = false; } return optimizeByLowSurrogates(result); }; var optimizeByLowSurrogates = function optimizeByLowSurrogates( surrogateMappings ) { if (surrogateMappings.length == 1) { return surrogateMappings; } var index = -1; var innerIndex = -1; while (++index < surrogateMappings.length) { var mapping = surrogateMappings[index]; var lowSurrogates = mapping[1]; var lowSurrogateStart = lowSurrogates[0]; var lowSurrogateEnd = lowSurrogates[1]; innerIndex = index; // Note: the loop starts at the next index. while ( ++innerIndex < surrogateMappings.length ) { var otherMapping = surrogateMappings[innerIndex]; var otherLowSurrogates = otherMapping[1]; var otherLowSurrogateStart = otherLowSurrogates[0]; var otherLowSurrogateEnd = otherLowSurrogates[1]; if ( lowSurrogateStart == otherLowSurrogateStart && lowSurrogateEnd == otherLowSurrogateEnd ) { // Add the code points in the other item to this one. if (dataIsSingleton(otherMapping[0])) { mapping[0] = dataAdd( mapping[0], otherMapping[0][0] ); } else { mapping[0] = dataAddRange( mapping[0], otherMapping[0][0], otherMapping[0][1] - 1 ); } // Remove the other, now redundant, item. surrogateMappings.splice(innerIndex, 1); --innerIndex; } } } return surrogateMappings; }; var surrogateSet = function surrogateSet(data) { // Exit early if `data` is an empty set. if (!data.length) { return []; } // Iterate over the data per `(start, end)` pair. var index = 0; var start; var end; var startHigh; var startLow; var endHigh; var endLow; var surrogateMappings = []; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1] - 1; startHigh = highSurrogate(start); startLow = lowSurrogate(start); endHigh = highSurrogate(end); endLow = lowSurrogate(end); var startsWithLowestLowSurrogate = startLow == LOW_SURROGATE_MIN; var endsWithHighestLowSurrogate = endLow == LOW_SURROGATE_MAX; var complete = false; // Append the previous high-surrogate-to-low-surrogate mappings. // Step 1: `(startHigh, startLow)` to `(startHigh, LOW_SURROGATE_MAX)`. if ( startHigh == endHigh || (startsWithLowestLowSurrogate && endsWithHighestLowSurrogate) ) { surrogateMappings.push([ [startHigh, endHigh + 1], [startLow, endLow + 1] ]); complete = true; } else { surrogateMappings.push([ [startHigh, startHigh + 1], [startLow, LOW_SURROGATE_MAX + 1] ]); } // Step 2: `(startHigh + 1, LOW_SURROGATE_MIN)` to // `(endHigh - 1, LOW_SURROGATE_MAX)`. if (!complete && startHigh + 1 < endHigh) { if (endsWithHighestLowSurrogate) { // Combine step 2 and step 3. surrogateMappings.push([ [startHigh + 1, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1] ]); complete = true; } else { surrogateMappings.push([ [startHigh + 1, endHigh], [ LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1 ] ]); } } // Step 3. `(endHigh, LOW_SURROGATE_MIN)` to `(endHigh, endLow)`. if (!complete) { surrogateMappings.push([ [endHigh, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1] ]); } index += 2; } // The format of `surrogateMappings` is as follows: // // [ surrogateMapping1, surrogateMapping2 ] // // i.e.: // // [ // [ highSurrogates1, lowSurrogates1 ], // [ highSurrogates2, lowSurrogates2 ] // ] return optimizeSurrogateMappings(surrogateMappings); }; var createSurrogateCharacterClasses = function createSurrogateCharacterClasses( surrogateMappings ) { var result = []; forEach(surrogateMappings, function( surrogateMapping ) { var highSurrogates = surrogateMapping[0]; var lowSurrogates = surrogateMapping[1]; result.push( createBMPCharacterClasses(highSurrogates) + createBMPCharacterClasses(lowSurrogates) ); }); return result.join("|"); }; var createCharacterClassesFromData = function createCharacterClassesFromData( data, bmpOnly, hasUnicodeFlag ) { if (hasUnicodeFlag) { return createUnicodeCharacterClasses(data); } var result = []; var parts = splitAtBMP(data); var loneHighSurrogates = parts.loneHighSurrogates; var loneLowSurrogates = parts.loneLowSurrogates; var bmp = parts.bmp; var astral = parts.astral; var hasLoneHighSurrogates = !dataIsEmpty( loneHighSurrogates ); var hasLoneLowSurrogates = !dataIsEmpty( loneLowSurrogates ); var surrogateMappings = surrogateSet(astral); if (bmpOnly) { bmp = dataAddData(bmp, loneHighSurrogates); hasLoneHighSurrogates = false; bmp = dataAddData(bmp, loneLowSurrogates); hasLoneLowSurrogates = false; } if (!dataIsEmpty(bmp)) { // The data set contains BMP code points that are not high surrogates // needed for astral code points in the set. result.push(createBMPCharacterClasses(bmp)); } if (surrogateMappings.length) { // The data set contains astral code points; append character classes // based on their surrogate pairs. result.push( createSurrogateCharacterClasses( surrogateMappings ) ); } // https://gist.github.com/mathiasbynens/bbe7f870208abcfec860 if (hasLoneHighSurrogates) { result.push( createBMPCharacterClasses( loneHighSurrogates ) + "(?![\\uDC00-\\uDFFF])" // Make sure the high surrogates aren’t part of a surrogate pair. ); } if (hasLoneLowSurrogates) { result.push( // It is not possible to accurately assert the low surrogates aren’t // part of a surrogate pair, since JavaScript regular expressions do // not support lookbehind. "(?:[^\\uD800-\\uDBFF]|^)" + createBMPCharacterClasses( loneLowSurrogates ) ); } return result.join("|"); }; /*--------------------------------------------------------------------------*/ // `regenerate` can be used as a constructor (and new methods can be added to // its prototype) but also as a regular function, the latter of which is the // documented and most common usage. For that reason, it’s not capitalized. var regenerate = function regenerate(value) { if (arguments.length > 1) { value = slice.call(arguments); } if (this instanceof regenerate) { this.data = []; return value ? this.add(value) : this; } return new regenerate().add(value); }; regenerate.version = "1.3.3"; var proto = regenerate.prototype; extend(proto, { add: function add(value) { var $this = this; if (value == null) { return $this; } if (value instanceof regenerate) { // Allow passing other Regenerate instances. $this.data = dataAddData( $this.data, value.data ); return $this; } if (arguments.length > 1) { value = slice.call(arguments); } if (isArray(value)) { forEach(value, function(item) { $this.add(item); }); return $this; } $this.data = dataAdd( $this.data, isNumber(value) ? value : symbolToCodePoint(value) ); return $this; }, remove: function remove(value) { var $this = this; if (value == null) { return $this; } if (value instanceof regenerate) { // Allow passing other Regenerate instances. $this.data = dataRemoveData( $this.data, value.data ); return $this; } if (arguments.length > 1) { value = slice.call(arguments); } if (isArray(value)) { forEach(value, function(item) { $this.remove(item); }); return $this; } $this.data = dataRemove( $this.data, isNumber(value) ? value : symbolToCodePoint(value) ); return $this; }, addRange: function addRange(start, end) { var $this = this; $this.data = dataAddRange( $this.data, isNumber(start) ? start : symbolToCodePoint(start), isNumber(end) ? end : symbolToCodePoint(end) ); return $this; }, removeRange: function removeRange(start, end) { var $this = this; var startCodePoint = isNumber(start) ? start : symbolToCodePoint(start); var endCodePoint = isNumber(end) ? end : symbolToCodePoint(end); $this.data = dataRemoveRange( $this.data, startCodePoint, endCodePoint ); return $this; }, intersection: function intersection(argument) { var $this = this; // Allow passing other Regenerate instances. // TODO: Optimize this by writing and using `dataIntersectionData()`. var array = argument instanceof regenerate ? dataToArray(argument.data) : argument; $this.data = dataIntersection( $this.data, array ); return $this; }, contains: function contains(codePoint) { return dataContains( this.data, isNumber(codePoint) ? codePoint : symbolToCodePoint(codePoint) ); }, clone: function clone() { var set = new regenerate(); set.data = this.data.slice(0); return set; }, toString: function toString(options) { var result = createCharacterClassesFromData( this.data, options ? options.bmpOnly : false, options ? options.hasUnicodeFlag : false ); if (!result) { // For an empty set, return something that can be inserted `/here/` to // form a valid regular expression. Avoid `(?:)` since that matches the // empty string. return "[]"; } // Use `\0` instead of `\x00` where possible. return result.replace(regexNull, "\\0$1"); }, toRegExp: function toRegExp(flags) { var pattern = this.toString( flags && flags.indexOf("u") != -1 ? { hasUnicodeFlag: true } : null ); return RegExp(pattern, flags || ""); }, valueOf: function valueOf() { // Note: `valueOf` is aliased as `toArray`. return dataToArray(this.data); } }); proto.toArray = proto.valueOf; // Some AMD build optimizers, like r.js, check for specific condition patterns // like the following: if (true) { !((__WEBPACK_AMD_DEFINE_RESULT__ = function() { return regenerate; }.call( exports, __webpack_require__, exports, module )), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (freeExports && !freeExports.nodeType) { if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ freeModule.exports = regenerate; } else { // in Narwhal or RingoJS v0.7.0- freeExports.regenerate = regenerate; } } else { // in Rhino or a web browser root.regenerate = regenerate; } })(this); /* WEBPACK VAR INJECTION */ }.call( exports, __webpack_require__(27)(module), __webpack_require__(19) )); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.loadOptions = loadOptions; exports.Plugin = Plugin; exports.types = exports.DEFAULT_EXTENSIONS = exports.OptionManager = exports.getEnv = exports.version = exports.resolvePreset = exports.resolvePlugin = exports.transformFromAstSync = exports.transformFromAst = exports.transformFileSync = exports.transformFile = exports.transformSync = exports.transform = exports.template = exports.traverse = exports.buildExternalHelpers = exports.File = void 0; var _file = _interopRequireDefault(__webpack_require__(95)); exports.File = _file.default; var _buildExternalHelpers = _interopRequireDefault( __webpack_require__(418) ); exports.buildExternalHelpers = _buildExternalHelpers.default; var _files = __webpack_require__(83); exports.resolvePlugin = _files.resolvePlugin; exports.resolvePreset = _files.resolvePreset; var _package = __webpack_require__(467); exports.version = _package.version; var _environment = __webpack_require__(169); exports.getEnv = _environment.getEnv; var _types = _interopRequireWildcard(__webpack_require__(2)); exports.types = _types; var _traverse = _interopRequireDefault(__webpack_require__(9)); exports.traverse = _traverse.default; var _template = _interopRequireDefault(__webpack_require__(15)); exports.template = _template.default; var _config = _interopRequireDefault(__webpack_require__(29)); var _transform = _interopRequireDefault( __webpack_require__(512) ); exports.transform = _transform.default; var _transformSync = _interopRequireDefault( __webpack_require__(176) ); exports.transformSync = _transformSync.default; var _transformFile = _interopRequireDefault( __webpack_require__(527) ); exports.transformFile = _transformFile.default; var _transformFileSync = _interopRequireDefault( __webpack_require__(528) ); exports.transformFileSync = _transformFileSync.default; var _transformAst = _interopRequireDefault( __webpack_require__(529) ); exports.transformFromAst = _transformAst.default; var _transformAstSync = _interopRequireDefault( __webpack_require__(177) ); exports.transformFromAstSync = _transformAstSync.default; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function loadOptions(opts) { var config = (0, _config.default)(opts); return config ? config.options : null; } var OptionManager = (function() { function OptionManager() {} var _proto = OptionManager.prototype; _proto.init = function init(opts) { return loadOptions(opts); }; return OptionManager; })(); exports.OptionManager = OptionManager; function Plugin(alias) { throw new Error( "The (" + alias + ") Babel 5 plugin is being run with an unsupported Babel version." ); } var DEFAULT_EXTENSIONS = Object.freeze([ ".js", ".jsx", ".es6", ".es", ".mjs" ]); exports.DEFAULT_EXTENSIONS = DEFAULT_EXTENSIONS; /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; var _exportNames = { assertNode: true, createTypeAnnotationBasedOnTypeof: true, createUnionTypeAnnotation: true, clone: true, cloneDeep: true, cloneWithoutLoc: true, addComment: true, addComments: true, inheritInnerComments: true, inheritLeadingComments: true, inheritsComments: true, inheritTrailingComments: true, removeComments: true, ensureBlock: true, toBindingIdentifierName: true, toBlock: true, toComputedKey: true, toExpression: true, toIdentifier: true, toKeyAlias: true, toSequenceExpression: true, toStatement: true, valueToNode: true, appendToMemberExpression: true, inherits: true, prependToMemberExpression: true, removeProperties: true, removePropertiesDeep: true, removeTypeDuplicates: true, getBindingIdentifiers: true, getOuterBindingIdentifiers: true, traverse: true, traverseFast: true, shallowEqual: true, is: true, isBinding: true, isBlockScoped: true, isImmutable: true, isLet: true, isNode: true, isNodesEquivalent: true, isReferenced: true, isScope: true, isSpecifierDefault: true, isType: true, isValidES3Identifier: true, isValidIdentifier: true, isVar: true, matchesPattern: true, validate: true, buildMatchMemberExpression: true, react: true }; exports.react = exports.buildMatchMemberExpression = exports.validate = exports.matchesPattern = exports.isVar = exports.isValidIdentifier = exports.isValidES3Identifier = exports.isType = exports.isSpecifierDefault = exports.isScope = exports.isReferenced = exports.isNodesEquivalent = exports.isNode = exports.isLet = exports.isImmutable = exports.isBlockScoped = exports.isBinding = exports.is = exports.shallowEqual = exports.traverseFast = exports.traverse = exports.getOuterBindingIdentifiers = exports.getBindingIdentifiers = exports.removeTypeDuplicates = exports.removePropertiesDeep = exports.removeProperties = exports.prependToMemberExpression = exports.inherits = exports.appendToMemberExpression = exports.valueToNode = exports.toStatement = exports.toSequenceExpression = exports.toKeyAlias = exports.toIdentifier = exports.toExpression = exports.toComputedKey = exports.toBlock = exports.toBindingIdentifierName = exports.ensureBlock = exports.removeComments = exports.inheritTrailingComments = exports.inheritsComments = exports.inheritLeadingComments = exports.inheritInnerComments = exports.addComments = exports.addComment = exports.cloneWithoutLoc = exports.cloneDeep = exports.clone = exports.createUnionTypeAnnotation = exports.createTypeAnnotationBasedOnTypeof = exports.assertNode = void 0; var _isReactComponent = _interopRequireDefault( __webpack_require__(252) ); var _isCompatTag = _interopRequireDefault( __webpack_require__(261) ); var _buildChildren = _interopRequireDefault( __webpack_require__(262) ); var _assertNode = _interopRequireDefault( __webpack_require__(322) ); exports.assertNode = _assertNode.default; var _generated = __webpack_require__(323); Object.keys(_generated).forEach(function(key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; exports[key] = _generated[key]; }); var _createTypeAnnotationBasedOnTypeof = _interopRequireDefault( __webpack_require__(324) ); exports.createTypeAnnotationBasedOnTypeof = _createTypeAnnotationBasedOnTypeof.default; var _createUnionTypeAnnotation = _interopRequireDefault( __webpack_require__(325) ); exports.createUnionTypeAnnotation = _createUnionTypeAnnotation.default; var _generated2 = __webpack_require__(5); Object.keys(_generated2).forEach(function(key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; exports[key] = _generated2[key]; }); var _clone = _interopRequireDefault(__webpack_require__(124)); exports.clone = _clone.default; var _cloneDeep = _interopRequireDefault( __webpack_require__(125) ); exports.cloneDeep = _cloneDeep.default; var _cloneWithoutLoc = _interopRequireDefault( __webpack_require__(326) ); exports.cloneWithoutLoc = _cloneWithoutLoc.default; var _addComment = _interopRequireDefault( __webpack_require__(327) ); exports.addComment = _addComment.default; var _addComments = _interopRequireDefault( __webpack_require__(126) ); exports.addComments = _addComments.default; var _inheritInnerComments = _interopRequireDefault( __webpack_require__(127) ); exports.inheritInnerComments = _inheritInnerComments.default; var _inheritLeadingComments = _interopRequireDefault( __webpack_require__(130) ); exports.inheritLeadingComments = _inheritLeadingComments.default; var _inheritsComments = _interopRequireDefault( __webpack_require__(131) ); exports.inheritsComments = _inheritsComments.default; var _inheritTrailingComments = _interopRequireDefault( __webpack_require__(132) ); exports.inheritTrailingComments = _inheritTrailingComments.default; var _removeComments = _interopRequireDefault( __webpack_require__(339) ); exports.removeComments = _removeComments.default; var _generated3 = __webpack_require__(340); Object.keys(_generated3).forEach(function(key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; exports[key] = _generated3[key]; }); var _constants = __webpack_require__(17); Object.keys(_constants).forEach(function(key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; exports[key] = _constants[key]; }); var _ensureBlock = _interopRequireDefault( __webpack_require__(341) ); exports.ensureBlock = _ensureBlock.default; var _toBindingIdentifierName = _interopRequireDefault( __webpack_require__(342) ); exports.toBindingIdentifierName = _toBindingIdentifierName.default; var _toBlock = _interopRequireDefault(__webpack_require__(133)); exports.toBlock = _toBlock.default; var _toComputedKey = _interopRequireDefault( __webpack_require__(343) ); exports.toComputedKey = _toComputedKey.default; var _toExpression = _interopRequireDefault( __webpack_require__(344) ); exports.toExpression = _toExpression.default; var _toIdentifier = _interopRequireDefault( __webpack_require__(134) ); exports.toIdentifier = _toIdentifier.default; var _toKeyAlias = _interopRequireDefault( __webpack_require__(345) ); exports.toKeyAlias = _toKeyAlias.default; var _toSequenceExpression = _interopRequireDefault( __webpack_require__(346) ); exports.toSequenceExpression = _toSequenceExpression.default; var _toStatement = _interopRequireDefault( __webpack_require__(348) ); exports.toStatement = _toStatement.default; var _valueToNode = _interopRequireDefault( __webpack_require__(349) ); exports.valueToNode = _valueToNode.default; var _definitions = __webpack_require__(10); Object.keys(_definitions).forEach(function(key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; exports[key] = _definitions[key]; }); var _appendToMemberExpression = _interopRequireDefault( __webpack_require__(352) ); exports.appendToMemberExpression = _appendToMemberExpression.default; var _inherits = _interopRequireDefault( __webpack_require__(353) ); exports.inherits = _inherits.default; var _prependToMemberExpression = _interopRequireDefault( __webpack_require__(354) ); exports.prependToMemberExpression = _prependToMemberExpression.default; var _removeProperties = _interopRequireDefault( __webpack_require__(137) ); exports.removeProperties = _removeProperties.default; var _removePropertiesDeep = _interopRequireDefault( __webpack_require__(135) ); exports.removePropertiesDeep = _removePropertiesDeep.default; var _removeTypeDuplicates = _interopRequireDefault( __webpack_require__(123) ); exports.removeTypeDuplicates = _removeTypeDuplicates.default; var _getBindingIdentifiers = _interopRequireDefault( __webpack_require__(45) ); exports.getBindingIdentifiers = _getBindingIdentifiers.default; var _getOuterBindingIdentifiers = _interopRequireDefault( __webpack_require__(355) ); exports.getOuterBindingIdentifiers = _getOuterBindingIdentifiers.default; var _traverse = _interopRequireDefault( __webpack_require__(356) ); exports.traverse = _traverse.default; var _traverseFast = _interopRequireDefault( __webpack_require__(136) ); exports.traverseFast = _traverseFast.default; var _shallowEqual = _interopRequireDefault( __webpack_require__(100) ); exports.shallowEqual = _shallowEqual.default; var _is = _interopRequireDefault(__webpack_require__(35)); exports.is = _is.default; var _isBinding = _interopRequireDefault( __webpack_require__(357) ); exports.isBinding = _isBinding.default; var _isBlockScoped = _interopRequireDefault( __webpack_require__(358) ); exports.isBlockScoped = _isBlockScoped.default; var _isImmutable = _interopRequireDefault( __webpack_require__(359) ); exports.isImmutable = _isImmutable.default; var _isLet = _interopRequireDefault(__webpack_require__(139)); exports.isLet = _isLet.default; var _isNode = _interopRequireDefault(__webpack_require__(122)); exports.isNode = _isNode.default; var _isNodesEquivalent = _interopRequireDefault( __webpack_require__(360) ); exports.isNodesEquivalent = _isNodesEquivalent.default; var _isReferenced = _interopRequireDefault( __webpack_require__(361) ); exports.isReferenced = _isReferenced.default; var _isScope = _interopRequireDefault(__webpack_require__(362)); exports.isScope = _isScope.default; var _isSpecifierDefault = _interopRequireDefault( __webpack_require__(363) ); exports.isSpecifierDefault = _isSpecifierDefault.default; var _isType = _interopRequireDefault(__webpack_require__(57)); exports.isType = _isType.default; var _isValidES3Identifier = _interopRequireDefault( __webpack_require__(364) ); exports.isValidES3Identifier = _isValidES3Identifier.default; var _isValidIdentifier = _interopRequireDefault( __webpack_require__(31) ); exports.isValidIdentifier = _isValidIdentifier.default; var _isVar = _interopRequireDefault(__webpack_require__(365)); exports.isVar = _isVar.default; var _matchesPattern = _interopRequireDefault( __webpack_require__(99) ); exports.matchesPattern = _matchesPattern.default; var _validate = _interopRequireDefault( __webpack_require__(121) ); exports.validate = _validate.default; var _buildMatchMemberExpression = _interopRequireDefault( __webpack_require__(98) ); exports.buildMatchMemberExpression = _buildMatchMemberExpression.default; var _generated4 = __webpack_require__(3); Object.keys(_generated4).forEach(function(key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; exports[key] = _generated4[key]; }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var react = { isReactComponent: _isReactComponent.default, isCompatTag: _isCompatTag.default, buildChildren: _buildChildren.default }; exports.react = react; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.isArrayExpression = isArrayExpression; exports.isAssignmentExpression = isAssignmentExpression; exports.isBinaryExpression = isBinaryExpression; exports.isDirective = isDirective; exports.isDirectiveLiteral = isDirectiveLiteral; exports.isBlockStatement = isBlockStatement; exports.isBreakStatement = isBreakStatement; exports.isCallExpression = isCallExpression; exports.isCatchClause = isCatchClause; exports.isConditionalExpression = isConditionalExpression; exports.isContinueStatement = isContinueStatement; exports.isDebuggerStatement = isDebuggerStatement; exports.isDoWhileStatement = isDoWhileStatement; exports.isEmptyStatement = isEmptyStatement; exports.isExpressionStatement = isExpressionStatement; exports.isFile = isFile; exports.isForInStatement = isForInStatement; exports.isForStatement = isForStatement; exports.isFunctionDeclaration = isFunctionDeclaration; exports.isFunctionExpression = isFunctionExpression; exports.isIdentifier = isIdentifier; exports.isIfStatement = isIfStatement; exports.isLabeledStatement = isLabeledStatement; exports.isStringLiteral = isStringLiteral; exports.isNumericLiteral = isNumericLiteral; exports.isNullLiteral = isNullLiteral; exports.isBooleanLiteral = isBooleanLiteral; exports.isRegExpLiteral = isRegExpLiteral; exports.isLogicalExpression = isLogicalExpression; exports.isMemberExpression = isMemberExpression; exports.isNewExpression = isNewExpression; exports.isProgram = isProgram; exports.isObjectExpression = isObjectExpression; exports.isObjectMethod = isObjectMethod; exports.isObjectProperty = isObjectProperty; exports.isRestElement = isRestElement; exports.isReturnStatement = isReturnStatement; exports.isSequenceExpression = isSequenceExpression; exports.isSwitchCase = isSwitchCase; exports.isSwitchStatement = isSwitchStatement; exports.isThisExpression = isThisExpression; exports.isThrowStatement = isThrowStatement; exports.isTryStatement = isTryStatement; exports.isUnaryExpression = isUnaryExpression; exports.isUpdateExpression = isUpdateExpression; exports.isVariableDeclaration = isVariableDeclaration; exports.isVariableDeclarator = isVariableDeclarator; exports.isWhileStatement = isWhileStatement; exports.isWithStatement = isWithStatement; exports.isAssignmentPattern = isAssignmentPattern; exports.isArrayPattern = isArrayPattern; exports.isArrowFunctionExpression = isArrowFunctionExpression; exports.isClassBody = isClassBody; exports.isClassDeclaration = isClassDeclaration; exports.isClassExpression = isClassExpression; exports.isExportAllDeclaration = isExportAllDeclaration; exports.isExportDefaultDeclaration = isExportDefaultDeclaration; exports.isExportNamedDeclaration = isExportNamedDeclaration; exports.isExportSpecifier = isExportSpecifier; exports.isForOfStatement = isForOfStatement; exports.isImportDeclaration = isImportDeclaration; exports.isImportDefaultSpecifier = isImportDefaultSpecifier; exports.isImportNamespaceSpecifier = isImportNamespaceSpecifier; exports.isImportSpecifier = isImportSpecifier; exports.isMetaProperty = isMetaProperty; exports.isClassMethod = isClassMethod; exports.isObjectPattern = isObjectPattern; exports.isSpreadElement = isSpreadElement; exports.isSuper = isSuper; exports.isTaggedTemplateExpression = isTaggedTemplateExpression; exports.isTemplateElement = isTemplateElement; exports.isTemplateLiteral = isTemplateLiteral; exports.isYieldExpression = isYieldExpression; exports.isAnyTypeAnnotation = isAnyTypeAnnotation; exports.isArrayTypeAnnotation = isArrayTypeAnnotation; exports.isBooleanTypeAnnotation = isBooleanTypeAnnotation; exports.isBooleanLiteralTypeAnnotation = isBooleanLiteralTypeAnnotation; exports.isNullLiteralTypeAnnotation = isNullLiteralTypeAnnotation; exports.isClassImplements = isClassImplements; exports.isDeclareClass = isDeclareClass; exports.isDeclareFunction = isDeclareFunction; exports.isDeclareInterface = isDeclareInterface; exports.isDeclareModule = isDeclareModule; exports.isDeclareModuleExports = isDeclareModuleExports; exports.isDeclareTypeAlias = isDeclareTypeAlias; exports.isDeclareOpaqueType = isDeclareOpaqueType; exports.isDeclareVariable = isDeclareVariable; exports.isDeclareExportDeclaration = isDeclareExportDeclaration; exports.isDeclareExportAllDeclaration = isDeclareExportAllDeclaration; exports.isDeclaredPredicate = isDeclaredPredicate; exports.isExistsTypeAnnotation = isExistsTypeAnnotation; exports.isFunctionTypeAnnotation = isFunctionTypeAnnotation; exports.isFunctionTypeParam = isFunctionTypeParam; exports.isGenericTypeAnnotation = isGenericTypeAnnotation; exports.isInferredPredicate = isInferredPredicate; exports.isInterfaceExtends = isInterfaceExtends; exports.isInterfaceDeclaration = isInterfaceDeclaration; exports.isIntersectionTypeAnnotation = isIntersectionTypeAnnotation; exports.isMixedTypeAnnotation = isMixedTypeAnnotation; exports.isEmptyTypeAnnotation = isEmptyTypeAnnotation; exports.isNullableTypeAnnotation = isNullableTypeAnnotation; exports.isNumberLiteralTypeAnnotation = isNumberLiteralTypeAnnotation; exports.isNumberTypeAnnotation = isNumberTypeAnnotation; exports.isObjectTypeAnnotation = isObjectTypeAnnotation; exports.isObjectTypeCallProperty = isObjectTypeCallProperty; exports.isObjectTypeIndexer = isObjectTypeIndexer; exports.isObjectTypeProperty = isObjectTypeProperty; exports.isObjectTypeSpreadProperty = isObjectTypeSpreadProperty; exports.isOpaqueType = isOpaqueType; exports.isQualifiedTypeIdentifier = isQualifiedTypeIdentifier; exports.isStringLiteralTypeAnnotation = isStringLiteralTypeAnnotation; exports.isStringTypeAnnotation = isStringTypeAnnotation; exports.isThisTypeAnnotation = isThisTypeAnnotation; exports.isTupleTypeAnnotation = isTupleTypeAnnotation; exports.isTypeofTypeAnnotation = isTypeofTypeAnnotation; exports.isTypeAlias = isTypeAlias; exports.isTypeAnnotation = isTypeAnnotation; exports.isTypeCastExpression = isTypeCastExpression; exports.isTypeParameter = isTypeParameter; exports.isTypeParameterDeclaration = isTypeParameterDeclaration; exports.isTypeParameterInstantiation = isTypeParameterInstantiation; exports.isUnionTypeAnnotation = isUnionTypeAnnotation; exports.isVoidTypeAnnotation = isVoidTypeAnnotation; exports.isJSXAttribute = isJSXAttribute; exports.isJSXClosingElement = isJSXClosingElement; exports.isJSXElement = isJSXElement; exports.isJSXEmptyExpression = isJSXEmptyExpression; exports.isJSXExpressionContainer = isJSXExpressionContainer; exports.isJSXSpreadChild = isJSXSpreadChild; exports.isJSXIdentifier = isJSXIdentifier; exports.isJSXMemberExpression = isJSXMemberExpression; exports.isJSXNamespacedName = isJSXNamespacedName; exports.isJSXOpeningElement = isJSXOpeningElement; exports.isJSXSpreadAttribute = isJSXSpreadAttribute; exports.isJSXText = isJSXText; exports.isJSXFragment = isJSXFragment; exports.isJSXOpeningFragment = isJSXOpeningFragment; exports.isJSXClosingFragment = isJSXClosingFragment; exports.isNoop = isNoop; exports.isParenthesizedExpression = isParenthesizedExpression; exports.isAwaitExpression = isAwaitExpression; exports.isBindExpression = isBindExpression; exports.isClassProperty = isClassProperty; exports.isImport = isImport; exports.isDecorator = isDecorator; exports.isDoExpression = isDoExpression; exports.isExportDefaultSpecifier = isExportDefaultSpecifier; exports.isExportNamespaceSpecifier = isExportNamespaceSpecifier; exports.isTSParameterProperty = isTSParameterProperty; exports.isTSDeclareFunction = isTSDeclareFunction; exports.isTSDeclareMethod = isTSDeclareMethod; exports.isTSQualifiedName = isTSQualifiedName; exports.isTSCallSignatureDeclaration = isTSCallSignatureDeclaration; exports.isTSConstructSignatureDeclaration = isTSConstructSignatureDeclaration; exports.isTSPropertySignature = isTSPropertySignature; exports.isTSMethodSignature = isTSMethodSignature; exports.isTSIndexSignature = isTSIndexSignature; exports.isTSAnyKeyword = isTSAnyKeyword; exports.isTSNumberKeyword = isTSNumberKeyword; exports.isTSObjectKeyword = isTSObjectKeyword; exports.isTSBooleanKeyword = isTSBooleanKeyword; exports.isTSStringKeyword = isTSStringKeyword; exports.isTSSymbolKeyword = isTSSymbolKeyword; exports.isTSVoidKeyword = isTSVoidKeyword; exports.isTSUndefinedKeyword = isTSUndefinedKeyword; exports.isTSNullKeyword = isTSNullKeyword; exports.isTSNeverKeyword = isTSNeverKeyword; exports.isTSThisType = isTSThisType; exports.isTSFunctionType = isTSFunctionType; exports.isTSConstructorType = isTSConstructorType; exports.isTSTypeReference = isTSTypeReference; exports.isTSTypePredicate = isTSTypePredicate; exports.isTSTypeQuery = isTSTypeQuery; exports.isTSTypeLiteral = isTSTypeLiteral; exports.isTSArrayType = isTSArrayType; exports.isTSTupleType = isTSTupleType; exports.isTSUnionType = isTSUnionType; exports.isTSIntersectionType = isTSIntersectionType; exports.isTSParenthesizedType = isTSParenthesizedType; exports.isTSTypeOperator = isTSTypeOperator; exports.isTSIndexedAccessType = isTSIndexedAccessType; exports.isTSMappedType = isTSMappedType; exports.isTSLiteralType = isTSLiteralType; exports.isTSExpressionWithTypeArguments = isTSExpressionWithTypeArguments; exports.isTSInterfaceDeclaration = isTSInterfaceDeclaration; exports.isTSInterfaceBody = isTSInterfaceBody; exports.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration; exports.isTSAsExpression = isTSAsExpression; exports.isTSTypeAssertion = isTSTypeAssertion; exports.isTSEnumDeclaration = isTSEnumDeclaration; exports.isTSEnumMember = isTSEnumMember; exports.isTSModuleDeclaration = isTSModuleDeclaration; exports.isTSModuleBlock = isTSModuleBlock; exports.isTSImportEqualsDeclaration = isTSImportEqualsDeclaration; exports.isTSExternalModuleReference = isTSExternalModuleReference; exports.isTSNonNullExpression = isTSNonNullExpression; exports.isTSExportAssignment = isTSExportAssignment; exports.isTSNamespaceExportDeclaration = isTSNamespaceExportDeclaration; exports.isTSTypeAnnotation = isTSTypeAnnotation; exports.isTSTypeParameterInstantiation = isTSTypeParameterInstantiation; exports.isTSTypeParameterDeclaration = isTSTypeParameterDeclaration; exports.isTSTypeParameter = isTSTypeParameter; exports.isExpression = isExpression; exports.isBinary = isBinary; exports.isScopable = isScopable; exports.isBlockParent = isBlockParent; exports.isBlock = isBlock; exports.isStatement = isStatement; exports.isTerminatorless = isTerminatorless; exports.isCompletionStatement = isCompletionStatement; exports.isConditional = isConditional; exports.isLoop = isLoop; exports.isWhile = isWhile; exports.isExpressionWrapper = isExpressionWrapper; exports.isFor = isFor; exports.isForXStatement = isForXStatement; exports.isFunction = isFunction; exports.isFunctionParent = isFunctionParent; exports.isPureish = isPureish; exports.isDeclaration = isDeclaration; exports.isPatternLike = isPatternLike; exports.isLVal = isLVal; exports.isTSEntityName = isTSEntityName; exports.isLiteral = isLiteral; exports.isImmutable = isImmutable; exports.isUserWhitespacable = isUserWhitespacable; exports.isMethod = isMethod; exports.isObjectMember = isObjectMember; exports.isProperty = isProperty; exports.isUnaryLike = isUnaryLike; exports.isPattern = isPattern; exports.isClass = isClass; exports.isModuleDeclaration = isModuleDeclaration; exports.isExportDeclaration = isExportDeclaration; exports.isModuleSpecifier = isModuleSpecifier; exports.isFlow = isFlow; exports.isFlowBaseAnnotation = isFlowBaseAnnotation; exports.isFlowDeclaration = isFlowDeclaration; exports.isFlowPredicate = isFlowPredicate; exports.isJSX = isJSX; exports.isTSTypeElement = isTSTypeElement; exports.isTSType = isTSType; exports.isNumberLiteral = isNumberLiteral; exports.isRegexLiteral = isRegexLiteral; exports.isRestProperty = isRestProperty; exports.isSpreadProperty = isSpreadProperty; var _is = _interopRequireDefault(__webpack_require__(35)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isArrayExpression(node, opts) { return (0, _is.default)("ArrayExpression", node, opts); } function isAssignmentExpression(node, opts) { return (0, _is.default)("AssignmentExpression", node, opts); } function isBinaryExpression(node, opts) { return (0, _is.default)("BinaryExpression", node, opts); } function isDirective(node, opts) { return (0, _is.default)("Directive", node, opts); } function isDirectiveLiteral(node, opts) { return (0, _is.default)("DirectiveLiteral", node, opts); } function isBlockStatement(node, opts) { return (0, _is.default)("BlockStatement", node, opts); } function isBreakStatement(node, opts) { return (0, _is.default)("BreakStatement", node, opts); } function isCallExpression(node, opts) { return (0, _is.default)("CallExpression", node, opts); } function isCatchClause(node, opts) { return (0, _is.default)("CatchClause", node, opts); } function isConditionalExpression(node, opts) { return (0, _is.default)( "ConditionalExpression", node, opts ); } function isContinueStatement(node, opts) { return (0, _is.default)("ContinueStatement", node, opts); } function isDebuggerStatement(node, opts) { return (0, _is.default)("DebuggerStatement", node, opts); } function isDoWhileStatement(node, opts) { return (0, _is.default)("DoWhileStatement", node, opts); } function isEmptyStatement(node, opts) { return (0, _is.default)("EmptyStatement", node, opts); } function isExpressionStatement(node, opts) { return (0, _is.default)("ExpressionStatement", node, opts); } function isFile(node, opts) { return (0, _is.default)("File", node, opts); } function isForInStatement(node, opts) { return (0, _is.default)("ForInStatement", node, opts); } function isForStatement(node, opts) { return (0, _is.default)("ForStatement", node, opts); } function isFunctionDeclaration(node, opts) { return (0, _is.default)("FunctionDeclaration", node, opts); } function isFunctionExpression(node, opts) { return (0, _is.default)("FunctionExpression", node, opts); } function isIdentifier(node, opts) { return (0, _is.default)("Identifier", node, opts); } function isIfStatement(node, opts) { return (0, _is.default)("IfStatement", node, opts); } function isLabeledStatement(node, opts) { return (0, _is.default)("LabeledStatement", node, opts); } function isStringLiteral(node, opts) { return (0, _is.default)("StringLiteral", node, opts); } function isNumericLiteral(node, opts) { return (0, _is.default)("NumericLiteral", node, opts); } function isNullLiteral(node, opts) { return (0, _is.default)("NullLiteral", node, opts); } function isBooleanLiteral(node, opts) { return (0, _is.default)("BooleanLiteral", node, opts); } function isRegExpLiteral(node, opts) { return (0, _is.default)("RegExpLiteral", node, opts); } function isLogicalExpression(node, opts) { return (0, _is.default)("LogicalExpression", node, opts); } function isMemberExpression(node, opts) { return (0, _is.default)("MemberExpression", node, opts); } function isNewExpression(node, opts) { return (0, _is.default)("NewExpression", node, opts); } function isProgram(node, opts) { return (0, _is.default)("Program", node, opts); } function isObjectExpression(node, opts) { return (0, _is.default)("ObjectExpression", node, opts); } function isObjectMethod(node, opts) { return (0, _is.default)("ObjectMethod", node, opts); } function isObjectProperty(node, opts) { return (0, _is.default)("ObjectProperty", node, opts); } function isRestElement(node, opts) { return (0, _is.default)("RestElement", node, opts); } function isReturnStatement(node, opts) { return (0, _is.default)("ReturnStatement", node, opts); } function isSequenceExpression(node, opts) { return (0, _is.default)("SequenceExpression", node, opts); } function isSwitchCase(node, opts) { return (0, _is.default)("SwitchCase", node, opts); } function isSwitchStatement(node, opts) { return (0, _is.default)("SwitchStatement", node, opts); } function isThisExpression(node, opts) { return (0, _is.default)("ThisExpression", node, opts); } function isThrowStatement(node, opts) { return (0, _is.default)("ThrowStatement", node, opts); } function isTryStatement(node, opts) { return (0, _is.default)("TryStatement", node, opts); } function isUnaryExpression(node, opts) { return (0, _is.default)("UnaryExpression", node, opts); } function isUpdateExpression(node, opts) { return (0, _is.default)("UpdateExpression", node, opts); } function isVariableDeclaration(node, opts) { return (0, _is.default)("VariableDeclaration", node, opts); } function isVariableDeclarator(node, opts) { return (0, _is.default)("VariableDeclarator", node, opts); } function isWhileStatement(node, opts) { return (0, _is.default)("WhileStatement", node, opts); } function isWithStatement(node, opts) { return (0, _is.default)("WithStatement", node, opts); } function isAssignmentPattern(node, opts) { return (0, _is.default)("AssignmentPattern", node, opts); } function isArrayPattern(node, opts) { return (0, _is.default)("ArrayPattern", node, opts); } function isArrowFunctionExpression(node, opts) { return (0, _is.default)( "ArrowFunctionExpression", node, opts ); } function isClassBody(node, opts) { return (0, _is.default)("ClassBody", node, opts); } function isClassDeclaration(node, opts) { return (0, _is.default)("ClassDeclaration", node, opts); } function isClassExpression(node, opts) { return (0, _is.default)("ClassExpression", node, opts); } function isExportAllDeclaration(node, opts) { return (0, _is.default)("ExportAllDeclaration", node, opts); } function isExportDefaultDeclaration(node, opts) { return (0, _is.default)( "ExportDefaultDeclaration", node, opts ); } function isExportNamedDeclaration(node, opts) { return (0, _is.default)( "ExportNamedDeclaration", node, opts ); } function isExportSpecifier(node, opts) { return (0, _is.default)("ExportSpecifier", node, opts); } function isForOfStatement(node, opts) { return (0, _is.default)("ForOfStatement", node, opts); } function isImportDeclaration(node, opts) { return (0, _is.default)("ImportDeclaration", node, opts); } function isImportDefaultSpecifier(node, opts) { return (0, _is.default)( "ImportDefaultSpecifier", node, opts ); } function isImportNamespaceSpecifier(node, opts) { return (0, _is.default)( "ImportNamespaceSpecifier", node, opts ); } function isImportSpecifier(node, opts) { return (0, _is.default)("ImportSpecifier", node, opts); } function isMetaProperty(node, opts) { return (0, _is.default)("MetaProperty", node, opts); } function isClassMethod(node, opts) { return (0, _is.default)("ClassMethod", node, opts); } function isObjectPattern(node, opts) { return (0, _is.default)("ObjectPattern", node, opts); } function isSpreadElement(node, opts) { return (0, _is.default)("SpreadElement", node, opts); } function isSuper(node, opts) { return (0, _is.default)("Super", node, opts); } function isTaggedTemplateExpression(node, opts) { return (0, _is.default)( "TaggedTemplateExpression", node, opts ); } function isTemplateElement(node, opts) { return (0, _is.default)("TemplateElement", node, opts); } function isTemplateLiteral(node, opts) { return (0, _is.default)("TemplateLiteral", node, opts); } function isYieldExpression(node, opts) { return (0, _is.default)("YieldExpression", node, opts); } function isAnyTypeAnnotation(node, opts) { return (0, _is.default)("AnyTypeAnnotation", node, opts); } function isArrayTypeAnnotation(node, opts) { return (0, _is.default)("ArrayTypeAnnotation", node, opts); } function isBooleanTypeAnnotation(node, opts) { return (0, _is.default)( "BooleanTypeAnnotation", node, opts ); } function isBooleanLiteralTypeAnnotation(node, opts) { return (0, _is.default)( "BooleanLiteralTypeAnnotation", node, opts ); } function isNullLiteralTypeAnnotation(node, opts) { return (0, _is.default)( "NullLiteralTypeAnnotation", node, opts ); } function isClassImplements(node, opts) { return (0, _is.default)("ClassImplements", node, opts); } function isDeclareClass(node, opts) { return (0, _is.default)("DeclareClass", node, opts); } function isDeclareFunction(node, opts) { return (0, _is.default)("DeclareFunction", node, opts); } function isDeclareInterface(node, opts) { return (0, _is.default)("DeclareInterface", node, opts); } function isDeclareModule(node, opts) { return (0, _is.default)("DeclareModule", node, opts); } function isDeclareModuleExports(node, opts) { return (0, _is.default)("DeclareModuleExports", node, opts); } function isDeclareTypeAlias(node, opts) { return (0, _is.default)("DeclareTypeAlias", node, opts); } function isDeclareOpaqueType(node, opts) { return (0, _is.default)("DeclareOpaqueType", node, opts); } function isDeclareVariable(node, opts) { return (0, _is.default)("DeclareVariable", node, opts); } function isDeclareExportDeclaration(node, opts) { return (0, _is.default)( "DeclareExportDeclaration", node, opts ); } function isDeclareExportAllDeclaration(node, opts) { return (0, _is.default)( "DeclareExportAllDeclaration", node, opts ); } function isDeclaredPredicate(node, opts) { return (0, _is.default)("DeclaredPredicate", node, opts); } function isExistsTypeAnnotation(node, opts) { return (0, _is.default)("ExistsTypeAnnotation", node, opts); } function isFunctionTypeAnnotation(node, opts) { return (0, _is.default)( "FunctionTypeAnnotation", node, opts ); } function isFunctionTypeParam(node, opts) { return (0, _is.default)("FunctionTypeParam", node, opts); } function isGenericTypeAnnotation(node, opts) { return (0, _is.default)( "GenericTypeAnnotation", node, opts ); } function isInferredPredicate(node, opts) { return (0, _is.default)("InferredPredicate", node, opts); } function isInterfaceExtends(node, opts) { return (0, _is.default)("InterfaceExtends", node, opts); } function isInterfaceDeclaration(node, opts) { return (0, _is.default)("InterfaceDeclaration", node, opts); } function isIntersectionTypeAnnotation(node, opts) { return (0, _is.default)( "IntersectionTypeAnnotation", node, opts ); } function isMixedTypeAnnotation(node, opts) { return (0, _is.default)("MixedTypeAnnotation", node, opts); } function isEmptyTypeAnnotation(node, opts) { return (0, _is.default)("EmptyTypeAnnotation", node, opts); } function isNullableTypeAnnotation(node, opts) { return (0, _is.default)( "NullableTypeAnnotation", node, opts ); } function isNumberLiteralTypeAnnotation(node, opts) { return (0, _is.default)( "NumberLiteralTypeAnnotation", node, opts ); } function isNumberTypeAnnotation(node, opts) { return (0, _is.default)("NumberTypeAnnotation", node, opts); } function isObjectTypeAnnotation(node, opts) { return (0, _is.default)("ObjectTypeAnnotation", node, opts); } function isObjectTypeCallProperty(node, opts) { return (0, _is.default)( "ObjectTypeCallProperty", node, opts ); } function isObjectTypeIndexer(node, opts) { return (0, _is.default)("ObjectTypeIndexer", node, opts); } function isObjectTypeProperty(node, opts) { return (0, _is.default)("ObjectTypeProperty", node, opts); } function isObjectTypeSpreadProperty(node, opts) { return (0, _is.default)( "ObjectTypeSpreadProperty", node, opts ); } function isOpaqueType(node, opts) { return (0, _is.default)("OpaqueType", node, opts); } function isQualifiedTypeIdentifier(node, opts) { return (0, _is.default)( "QualifiedTypeIdentifier", node, opts ); } function isStringLiteralTypeAnnotation(node, opts) { return (0, _is.default)( "StringLiteralTypeAnnotation", node, opts ); } function isStringTypeAnnotation(node, opts) { return (0, _is.default)("StringTypeAnnotation", node, opts); } function isThisTypeAnnotation(node, opts) { return (0, _is.default)("ThisTypeAnnotation", node, opts); } function isTupleTypeAnnotation(node, opts) { return (0, _is.default)("TupleTypeAnnotation", node, opts); } function isTypeofTypeAnnotation(node, opts) { return (0, _is.default)("TypeofTypeAnnotation", node, opts); } function isTypeAlias(node, opts) { return (0, _is.default)("TypeAlias", node, opts); } function isTypeAnnotation(node, opts) { return (0, _is.default)("TypeAnnotation", node, opts); } function isTypeCastExpression(node, opts) { return (0, _is.default)("TypeCastExpression", node, opts); } function isTypeParameter(node, opts) { return (0, _is.default)("TypeParameter", node, opts); } function isTypeParameterDeclaration(node, opts) { return (0, _is.default)( "TypeParameterDeclaration", node, opts ); } function isTypeParameterInstantiation(node, opts) { return (0, _is.default)( "TypeParameterInstantiation", node, opts ); } function isUnionTypeAnnotation(node, opts) { return (0, _is.default)("UnionTypeAnnotation", node, opts); } function isVoidTypeAnnotation(node, opts) { return (0, _is.default)("VoidTypeAnnotation", node, opts); } function isJSXAttribute(node, opts) { return (0, _is.default)("JSXAttribute", node, opts); } function isJSXClosingElement(node, opts) { return (0, _is.default)("JSXClosingElement", node, opts); } function isJSXElement(node, opts) { return (0, _is.default)("JSXElement", node, opts); } function isJSXEmptyExpression(node, opts) { return (0, _is.default)("JSXEmptyExpression", node, opts); } function isJSXExpressionContainer(node, opts) { return (0, _is.default)( "JSXExpressionContainer", node, opts ); } function isJSXSpreadChild(node, opts) { return (0, _is.default)("JSXSpreadChild", node, opts); } function isJSXIdentifier(node, opts) { return (0, _is.default)("JSXIdentifier", node, opts); } function isJSXMemberExpression(node, opts) { return (0, _is.default)("JSXMemberExpression", node, opts); } function isJSXNamespacedName(node, opts) { return (0, _is.default)("JSXNamespacedName", node, opts); } function isJSXOpeningElement(node, opts) { return (0, _is.default)("JSXOpeningElement", node, opts); } function isJSXSpreadAttribute(node, opts) { return (0, _is.default)("JSXSpreadAttribute", node, opts); } function isJSXText(node, opts) { return (0, _is.default)("JSXText", node, opts); } function isJSXFragment(node, opts) { return (0, _is.default)("JSXFragment", node, opts); } function isJSXOpeningFragment(node, opts) { return (0, _is.default)("JSXOpeningFragment", node, opts); } function isJSXClosingFragment(node, opts) { return (0, _is.default)("JSXClosingFragment", node, opts); } function isNoop(node, opts) { return (0, _is.default)("Noop", node, opts); } function isParenthesizedExpression(node, opts) { return (0, _is.default)( "ParenthesizedExpression", node, opts ); } function isAwaitExpression(node, opts) { return (0, _is.default)("AwaitExpression", node, opts); } function isBindExpression(node, opts) { return (0, _is.default)("BindExpression", node, opts); } function isClassProperty(node, opts) { return (0, _is.default)("ClassProperty", node, opts); } function isImport(node, opts) { return (0, _is.default)("Import", node, opts); } function isDecorator(node, opts) { return (0, _is.default)("Decorator", node, opts); } function isDoExpression(node, opts) { return (0, _is.default)("DoExpression", node, opts); } function isExportDefaultSpecifier(node, opts) { return (0, _is.default)( "ExportDefaultSpecifier", node, opts ); } function isExportNamespaceSpecifier(node, opts) { return (0, _is.default)( "ExportNamespaceSpecifier", node, opts ); } function isTSParameterProperty(node, opts) { return (0, _is.default)("TSParameterProperty", node, opts); } function isTSDeclareFunction(node, opts) { return (0, _is.default)("TSDeclareFunction", node, opts); } function isTSDeclareMethod(node, opts) { return (0, _is.default)("TSDeclareMethod", node, opts); } function isTSQualifiedName(node, opts) { return (0, _is.default)("TSQualifiedName", node, opts); } function isTSCallSignatureDeclaration(node, opts) { return (0, _is.default)( "TSCallSignatureDeclaration", node, opts ); } function isTSConstructSignatureDeclaration(node, opts) { return (0, _is.default)( "TSConstructSignatureDeclaration", node, opts ); } function isTSPropertySignature(node, opts) { return (0, _is.default)("TSPropertySignature", node, opts); } function isTSMethodSignature(node, opts) { return (0, _is.default)("TSMethodSignature", node, opts); } function isTSIndexSignature(node, opts) { return (0, _is.default)("TSIndexSignature", node, opts); } function isTSAnyKeyword(node, opts) { return (0, _is.default)("TSAnyKeyword", node, opts); } function isTSNumberKeyword(node, opts) { return (0, _is.default)("TSNumberKeyword", node, opts); } function isTSObjectKeyword(node, opts) { return (0, _is.default)("TSObjectKeyword", node, opts); } function isTSBooleanKeyword(node, opts) { return (0, _is.default)("TSBooleanKeyword", node, opts); } function isTSStringKeyword(node, opts) { return (0, _is.default)("TSStringKeyword", node, opts); } function isTSSymbolKeyword(node, opts) { return (0, _is.default)("TSSymbolKeyword", node, opts); } function isTSVoidKeyword(node, opts) { return (0, _is.default)("TSVoidKeyword", node, opts); } function isTSUndefinedKeyword(node, opts) { return (0, _is.default)("TSUndefinedKeyword", node, opts); } function isTSNullKeyword(node, opts) { return (0, _is.default)("TSNullKeyword", node, opts); } function isTSNeverKeyword(node, opts) { return (0, _is.default)("TSNeverKeyword", node, opts); } function isTSThisType(node, opts) { return (0, _is.default)("TSThisType", node, opts); } function isTSFunctionType(node, opts) { return (0, _is.default)("TSFunctionType", node, opts); } function isTSConstructorType(node, opts) { return (0, _is.default)("TSConstructorType", node, opts); } function isTSTypeReference(node, opts) { return (0, _is.default)("TSTypeReference", node, opts); } function isTSTypePredicate(node, opts) { return (0, _is.default)("TSTypePredicate", node, opts); } function isTSTypeQuery(node, opts) { return (0, _is.default)("TSTypeQuery", node, opts); } function isTSTypeLiteral(node, opts) { return (0, _is.default)("TSTypeLiteral", node, opts); } function isTSArrayType(node, opts) { return (0, _is.default)("TSArrayType", node, opts); } function isTSTupleType(node, opts) { return (0, _is.default)("TSTupleType", node, opts); } function isTSUnionType(node, opts) { return (0, _is.default)("TSUnionType", node, opts); } function isTSIntersectionType(node, opts) { return (0, _is.default)("TSIntersectionType", node, opts); } function isTSParenthesizedType(node, opts) { return (0, _is.default)("TSParenthesizedType", node, opts); } function isTSTypeOperator(node, opts) { return (0, _is.default)("TSTypeOperator", node, opts); } function isTSIndexedAccessType(node, opts) { return (0, _is.default)("TSIndexedAccessType", node, opts); } function isTSMappedType(node, opts) { return (0, _is.default)("TSMappedType", node, opts); } function isTSLiteralType(node, opts) { return (0, _is.default)("TSLiteralType", node, opts); } function isTSExpressionWithTypeArguments(node, opts) { return (0, _is.default)( "TSExpressionWithTypeArguments", node, opts ); } function isTSInterfaceDeclaration(node, opts) { return (0, _is.default)( "TSInterfaceDeclaration", node, opts ); } function isTSInterfaceBody(node, opts) { return (0, _is.default)("TSInterfaceBody", node, opts); } function isTSTypeAliasDeclaration(node, opts) { return (0, _is.default)( "TSTypeAliasDeclaration", node, opts ); } function isTSAsExpression(node, opts) { return (0, _is.default)("TSAsExpression", node, opts); } function isTSTypeAssertion(node, opts) { return (0, _is.default)("TSTypeAssertion", node, opts); } function isTSEnumDeclaration(node, opts) { return (0, _is.default)("TSEnumDeclaration", node, opts); } function isTSEnumMember(node, opts) { return (0, _is.default)("TSEnumMember", node, opts); } function isTSModuleDeclaration(node, opts) { return (0, _is.default)("TSModuleDeclaration", node, opts); } function isTSModuleBlock(node, opts) { return (0, _is.default)("TSModuleBlock", node, opts); } function isTSImportEqualsDeclaration(node, opts) { return (0, _is.default)( "TSImportEqualsDeclaration", node, opts ); } function isTSExternalModuleReference(node, opts) { return (0, _is.default)( "TSExternalModuleReference", node, opts ); } function isTSNonNullExpression(node, opts) { return (0, _is.default)("TSNonNullExpression", node, opts); } function isTSExportAssignment(node, opts) { return (0, _is.default)("TSExportAssignment", node, opts); } function isTSNamespaceExportDeclaration(node, opts) { return (0, _is.default)( "TSNamespaceExportDeclaration", node, opts ); } function isTSTypeAnnotation(node, opts) { return (0, _is.default)("TSTypeAnnotation", node, opts); } function isTSTypeParameterInstantiation(node, opts) { return (0, _is.default)( "TSTypeParameterInstantiation", node, opts ); } function isTSTypeParameterDeclaration(node, opts) { return (0, _is.default)( "TSTypeParameterDeclaration", node, opts ); } function isTSTypeParameter(node, opts) { return (0, _is.default)("TSTypeParameter", node, opts); } function isExpression(node, opts) { return (0, _is.default)("Expression", node, opts); } function isBinary(node, opts) { return (0, _is.default)("Binary", node, opts); } function isScopable(node, opts) { return (0, _is.default)("Scopable", node, opts); } function isBlockParent(node, opts) { return (0, _is.default)("BlockParent", node, opts); } function isBlock(node, opts) { return (0, _is.default)("Block", node, opts); } function isStatement(node, opts) { return (0, _is.default)("Statement", node, opts); } function isTerminatorless(node, opts) { return (0, _is.default)("Terminatorless", node, opts); } function isCompletionStatement(node, opts) { return (0, _is.default)("CompletionStatement", node, opts); } function isConditional(node, opts) { return (0, _is.default)("Conditional", node, opts); } function isLoop(node, opts) { return (0, _is.default)("Loop", node, opts); } function isWhile(node, opts) { return (0, _is.default)("While", node, opts); } function isExpressionWrapper(node, opts) { return (0, _is.default)("ExpressionWrapper", node, opts); } function isFor(node, opts) { return (0, _is.default)("For", node, opts); } function isForXStatement(node, opts) { return (0, _is.default)("ForXStatement", node, opts); } function isFunction(node, opts) { return (0, _is.default)("Function", node, opts); } function isFunctionParent(node, opts) { return (0, _is.default)("FunctionParent", node, opts); } function isPureish(node, opts) { return (0, _is.default)("Pureish", node, opts); } function isDeclaration(node, opts) { return (0, _is.default)("Declaration", node, opts); } function isPatternLike(node, opts) { return (0, _is.default)("PatternLike", node, opts); } function isLVal(node, opts) { return (0, _is.default)("LVal", node, opts); } function isTSEntityName(node, opts) { return (0, _is.default)("TSEntityName", node, opts); } function isLiteral(node, opts) { return (0, _is.default)("Literal", node, opts); } function isImmutable(node, opts) { return (0, _is.default)("Immutable", node, opts); } function isUserWhitespacable(node, opts) { return (0, _is.default)("UserWhitespacable", node, opts); } function isMethod(node, opts) { return (0, _is.default)("Method", node, opts); } function isObjectMember(node, opts) { return (0, _is.default)("ObjectMember", node, opts); } function isProperty(node, opts) { return (0, _is.default)("Property", node, opts); } function isUnaryLike(node, opts) { return (0, _is.default)("UnaryLike", node, opts); } function isPattern(node, opts) { return (0, _is.default)("Pattern", node, opts); } function isClass(node, opts) { return (0, _is.default)("Class", node, opts); } function isModuleDeclaration(node, opts) { return (0, _is.default)("ModuleDeclaration", node, opts); } function isExportDeclaration(node, opts) { return (0, _is.default)("ExportDeclaration", node, opts); } function isModuleSpecifier(node, opts) { return (0, _is.default)("ModuleSpecifier", node, opts); } function isFlow(node, opts) { return (0, _is.default)("Flow", node, opts); } function isFlowBaseAnnotation(node, opts) { return (0, _is.default)("FlowBaseAnnotation", node, opts); } function isFlowDeclaration(node, opts) { return (0, _is.default)("FlowDeclaration", node, opts); } function isFlowPredicate(node, opts) { return (0, _is.default)("FlowPredicate", node, opts); } function isJSX(node, opts) { return (0, _is.default)("JSX", node, opts); } function isTSTypeElement(node, opts) { return (0, _is.default)("TSTypeElement", node, opts); } function isTSType(node, opts) { return (0, _is.default)("TSType", node, opts); } function isNumberLiteral(node, opts) { console.trace( "The node type NumberLiteral has been renamed to NumericLiteral" ); return (0, _is.default)("NumberLiteral", node, opts); } function isRegexLiteral(node, opts) { console.trace( "The node type RegexLiteral has been renamed to RegExpLiteral" ); return (0, _is.default)("RegexLiteral", node, opts); } function isRestProperty(node, opts) { console.trace( "The node type RestProperty has been renamed to RestElement" ); return (0, _is.default)("RestProperty", node, opts); } function isSpreadProperty(node, opts) { console.trace( "The node type SpreadProperty has been renamed to SpreadElement" ); return (0, _is.default)("SpreadProperty", node, opts); } /***/ }, /* 4 */ /***/ function(module, exports) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.arrayExpression = exports.ArrayExpression = ArrayExpression; exports.assignmentExpression = exports.AssignmentExpression = AssignmentExpression; exports.binaryExpression = exports.BinaryExpression = BinaryExpression; exports.directive = exports.Directive = Directive; exports.directiveLiteral = exports.DirectiveLiteral = DirectiveLiteral; exports.blockStatement = exports.BlockStatement = BlockStatement; exports.breakStatement = exports.BreakStatement = BreakStatement; exports.callExpression = exports.CallExpression = CallExpression; exports.catchClause = exports.CatchClause = CatchClause; exports.conditionalExpression = exports.ConditionalExpression = ConditionalExpression; exports.continueStatement = exports.ContinueStatement = ContinueStatement; exports.debuggerStatement = exports.DebuggerStatement = DebuggerStatement; exports.doWhileStatement = exports.DoWhileStatement = DoWhileStatement; exports.emptyStatement = exports.EmptyStatement = EmptyStatement; exports.expressionStatement = exports.ExpressionStatement = ExpressionStatement; exports.file = exports.File = File; exports.forInStatement = exports.ForInStatement = ForInStatement; exports.forStatement = exports.ForStatement = ForStatement; exports.functionDeclaration = exports.FunctionDeclaration = FunctionDeclaration; exports.functionExpression = exports.FunctionExpression = FunctionExpression; exports.identifier = exports.Identifier = Identifier; exports.ifStatement = exports.IfStatement = IfStatement; exports.labeledStatement = exports.LabeledStatement = LabeledStatement; exports.stringLiteral = exports.StringLiteral = StringLiteral; exports.numericLiteral = exports.NumericLiteral = NumericLiteral; exports.nullLiteral = exports.NullLiteral = NullLiteral; exports.booleanLiteral = exports.BooleanLiteral = BooleanLiteral; exports.regExpLiteral = exports.RegExpLiteral = RegExpLiteral; exports.logicalExpression = exports.LogicalExpression = LogicalExpression; exports.memberExpression = exports.MemberExpression = MemberExpression; exports.newExpression = exports.NewExpression = NewExpression; exports.program = exports.Program = Program; exports.objectExpression = exports.ObjectExpression = ObjectExpression; exports.objectMethod = exports.ObjectMethod = ObjectMethod; exports.objectProperty = exports.ObjectProperty = ObjectProperty; exports.restElement = exports.RestElement = RestElement; exports.returnStatement = exports.ReturnStatement = ReturnStatement; exports.sequenceExpression = exports.SequenceExpression = SequenceExpression; exports.switchCase = exports.SwitchCase = SwitchCase; exports.switchStatement = exports.SwitchStatement = SwitchStatement; exports.thisExpression = exports.ThisExpression = ThisExpression; exports.throwStatement = exports.ThrowStatement = ThrowStatement; exports.tryStatement = exports.TryStatement = TryStatement; exports.unaryExpression = exports.UnaryExpression = UnaryExpression; exports.updateExpression = exports.UpdateExpression = UpdateExpression; exports.variableDeclaration = exports.VariableDeclaration = VariableDeclaration; exports.variableDeclarator = exports.VariableDeclarator = VariableDeclarator; exports.whileStatement = exports.WhileStatement = WhileStatement; exports.withStatement = exports.WithStatement = WithStatement; exports.assignmentPattern = exports.AssignmentPattern = AssignmentPattern; exports.arrayPattern = exports.ArrayPattern = ArrayPattern; exports.arrowFunctionExpression = exports.ArrowFunctionExpression = ArrowFunctionExpression; exports.classBody = exports.ClassBody = ClassBody; exports.classDeclaration = exports.ClassDeclaration = ClassDeclaration; exports.classExpression = exports.ClassExpression = ClassExpression; exports.exportAllDeclaration = exports.ExportAllDeclaration = ExportAllDeclaration; exports.exportDefaultDeclaration = exports.ExportDefaultDeclaration = ExportDefaultDeclaration; exports.exportNamedDeclaration = exports.ExportNamedDeclaration = ExportNamedDeclaration; exports.exportSpecifier = exports.ExportSpecifier = ExportSpecifier; exports.forOfStatement = exports.ForOfStatement = ForOfStatement; exports.importDeclaration = exports.ImportDeclaration = ImportDeclaration; exports.importDefaultSpecifier = exports.ImportDefaultSpecifier = ImportDefaultSpecifier; exports.importNamespaceSpecifier = exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; exports.importSpecifier = exports.ImportSpecifier = ImportSpecifier; exports.metaProperty = exports.MetaProperty = MetaProperty; exports.classMethod = exports.ClassMethod = ClassMethod; exports.objectPattern = exports.ObjectPattern = ObjectPattern; exports.spreadElement = exports.SpreadElement = SpreadElement; exports.super = exports.Super = Super; exports.taggedTemplateExpression = exports.TaggedTemplateExpression = TaggedTemplateExpression; exports.templateElement = exports.TemplateElement = TemplateElement; exports.templateLiteral = exports.TemplateLiteral = TemplateLiteral; exports.yieldExpression = exports.YieldExpression = YieldExpression; exports.anyTypeAnnotation = exports.AnyTypeAnnotation = AnyTypeAnnotation; exports.arrayTypeAnnotation = exports.ArrayTypeAnnotation = ArrayTypeAnnotation; exports.booleanTypeAnnotation = exports.BooleanTypeAnnotation = BooleanTypeAnnotation; exports.booleanLiteralTypeAnnotation = exports.BooleanLiteralTypeAnnotation = BooleanLiteralTypeAnnotation; exports.nullLiteralTypeAnnotation = exports.NullLiteralTypeAnnotation = NullLiteralTypeAnnotation; exports.classImplements = exports.ClassImplements = ClassImplements; exports.declareClass = exports.DeclareClass = DeclareClass; exports.declareFunction = exports.DeclareFunction = DeclareFunction; exports.declareInterface = exports.DeclareInterface = DeclareInterface; exports.declareModule = exports.DeclareModule = DeclareModule; exports.declareModuleExports = exports.DeclareModuleExports = DeclareModuleExports; exports.declareTypeAlias = exports.DeclareTypeAlias = DeclareTypeAlias; exports.declareOpaqueType = exports.DeclareOpaqueType = DeclareOpaqueType; exports.declareVariable = exports.DeclareVariable = DeclareVariable; exports.declareExportDeclaration = exports.DeclareExportDeclaration = DeclareExportDeclaration; exports.declareExportAllDeclaration = exports.DeclareExportAllDeclaration = DeclareExportAllDeclaration; exports.declaredPredicate = exports.DeclaredPredicate = DeclaredPredicate; exports.existsTypeAnnotation = exports.ExistsTypeAnnotation = ExistsTypeAnnotation; exports.functionTypeAnnotation = exports.FunctionTypeAnnotation = FunctionTypeAnnotation; exports.functionTypeParam = exports.FunctionTypeParam = FunctionTypeParam; exports.genericTypeAnnotation = exports.GenericTypeAnnotation = GenericTypeAnnotation; exports.inferredPredicate = exports.InferredPredicate = InferredPredicate; exports.interfaceExtends = exports.InterfaceExtends = InterfaceExtends; exports.interfaceDeclaration = exports.InterfaceDeclaration = InterfaceDeclaration; exports.intersectionTypeAnnotation = exports.IntersectionTypeAnnotation = IntersectionTypeAnnotation; exports.mixedTypeAnnotation = exports.MixedTypeAnnotation = MixedTypeAnnotation; exports.emptyTypeAnnotation = exports.EmptyTypeAnnotation = EmptyTypeAnnotation; exports.nullableTypeAnnotation = exports.NullableTypeAnnotation = NullableTypeAnnotation; exports.numberLiteralTypeAnnotation = exports.NumberLiteralTypeAnnotation = NumberLiteralTypeAnnotation; exports.numberTypeAnnotation = exports.NumberTypeAnnotation = NumberTypeAnnotation; exports.objectTypeAnnotation = exports.ObjectTypeAnnotation = ObjectTypeAnnotation; exports.objectTypeCallProperty = exports.ObjectTypeCallProperty = ObjectTypeCallProperty; exports.objectTypeIndexer = exports.ObjectTypeIndexer = ObjectTypeIndexer; exports.objectTypeProperty = exports.ObjectTypeProperty = ObjectTypeProperty; exports.objectTypeSpreadProperty = exports.ObjectTypeSpreadProperty = ObjectTypeSpreadProperty; exports.opaqueType = exports.OpaqueType = OpaqueType; exports.qualifiedTypeIdentifier = exports.QualifiedTypeIdentifier = QualifiedTypeIdentifier; exports.stringLiteralTypeAnnotation = exports.StringLiteralTypeAnnotation = StringLiteralTypeAnnotation; exports.stringTypeAnnotation = exports.StringTypeAnnotation = StringTypeAnnotation; exports.thisTypeAnnotation = exports.ThisTypeAnnotation = ThisTypeAnnotation; exports.tupleTypeAnnotation = exports.TupleTypeAnnotation = TupleTypeAnnotation; exports.typeofTypeAnnotation = exports.TypeofTypeAnnotation = TypeofTypeAnnotation; exports.typeAlias = exports.TypeAlias = TypeAlias; exports.typeAnnotation = exports.TypeAnnotation = TypeAnnotation; exports.typeCastExpression = exports.TypeCastExpression = TypeCastExpression; exports.typeParameter = exports.TypeParameter = TypeParameter; exports.typeParameterDeclaration = exports.TypeParameterDeclaration = TypeParameterDeclaration; exports.typeParameterInstantiation = exports.TypeParameterInstantiation = TypeParameterInstantiation; exports.unionTypeAnnotation = exports.UnionTypeAnnotation = UnionTypeAnnotation; exports.voidTypeAnnotation = exports.VoidTypeAnnotation = VoidTypeAnnotation; exports.jSXAttribute = exports.jsxAttribute = exports.JSXAttribute = JSXAttribute; exports.jSXClosingElement = exports.jsxClosingElement = exports.JSXClosingElement = JSXClosingElement; exports.jSXElement = exports.jsxElement = exports.JSXElement = JSXElement; exports.jSXEmptyExpression = exports.jsxEmptyExpression = exports.JSXEmptyExpression = JSXEmptyExpression; exports.jSXExpressionContainer = exports.jsxExpressionContainer = exports.JSXExpressionContainer = JSXExpressionContainer; exports.jSXSpreadChild = exports.jsxSpreadChild = exports.JSXSpreadChild = JSXSpreadChild; exports.jSXIdentifier = exports.jsxIdentifier = exports.JSXIdentifier = JSXIdentifier; exports.jSXMemberExpression = exports.jsxMemberExpression = exports.JSXMemberExpression = JSXMemberExpression; exports.jSXNamespacedName = exports.jsxNamespacedName = exports.JSXNamespacedName = JSXNamespacedName; exports.jSXOpeningElement = exports.jsxOpeningElement = exports.JSXOpeningElement = JSXOpeningElement; exports.jSXSpreadAttribute = exports.jsxSpreadAttribute = exports.JSXSpreadAttribute = JSXSpreadAttribute; exports.jSXText = exports.jsxText = exports.JSXText = JSXText; exports.jSXFragment = exports.jsxFragment = exports.JSXFragment = JSXFragment; exports.jSXOpeningFragment = exports.jsxOpeningFragment = exports.JSXOpeningFragment = JSXOpeningFragment; exports.jSXClosingFragment = exports.jsxClosingFragment = exports.JSXClosingFragment = JSXClosingFragment; exports.noop = exports.Noop = Noop; exports.parenthesizedExpression = exports.ParenthesizedExpression = ParenthesizedExpression; exports.awaitExpression = exports.AwaitExpression = AwaitExpression; exports.bindExpression = exports.BindExpression = BindExpression; exports.classProperty = exports.ClassProperty = ClassProperty; exports.import = exports.Import = Import; exports.decorator = exports.Decorator = Decorator; exports.doExpression = exports.DoExpression = DoExpression; exports.exportDefaultSpecifier = exports.ExportDefaultSpecifier = ExportDefaultSpecifier; exports.exportNamespaceSpecifier = exports.ExportNamespaceSpecifier = ExportNamespaceSpecifier; exports.tSParameterProperty = exports.tsParameterProperty = exports.TSParameterProperty = TSParameterProperty; exports.tSDeclareFunction = exports.tsDeclareFunction = exports.TSDeclareFunction = TSDeclareFunction; exports.tSDeclareMethod = exports.tsDeclareMethod = exports.TSDeclareMethod = TSDeclareMethod; exports.tSQualifiedName = exports.tsQualifiedName = exports.TSQualifiedName = TSQualifiedName; exports.tSCallSignatureDeclaration = exports.tsCallSignatureDeclaration = exports.TSCallSignatureDeclaration = TSCallSignatureDeclaration; exports.tSConstructSignatureDeclaration = exports.tsConstructSignatureDeclaration = exports.TSConstructSignatureDeclaration = TSConstructSignatureDeclaration; exports.tSPropertySignature = exports.tsPropertySignature = exports.TSPropertySignature = TSPropertySignature; exports.tSMethodSignature = exports.tsMethodSignature = exports.TSMethodSignature = TSMethodSignature; exports.tSIndexSignature = exports.tsIndexSignature = exports.TSIndexSignature = TSIndexSignature; exports.tSAnyKeyword = exports.tsAnyKeyword = exports.TSAnyKeyword = TSAnyKeyword; exports.tSNumberKeyword = exports.tsNumberKeyword = exports.TSNumberKeyword = TSNumberKeyword; exports.tSObjectKeyword = exports.tsObjectKeyword = exports.TSObjectKeyword = TSObjectKeyword; exports.tSBooleanKeyword = exports.tsBooleanKeyword = exports.TSBooleanKeyword = TSBooleanKeyword; exports.tSStringKeyword = exports.tsStringKeyword = exports.TSStringKeyword = TSStringKeyword; exports.tSSymbolKeyword = exports.tsSymbolKeyword = exports.TSSymbolKeyword = TSSymbolKeyword; exports.tSVoidKeyword = exports.tsVoidKeyword = exports.TSVoidKeyword = TSVoidKeyword; exports.tSUndefinedKeyword = exports.tsUndefinedKeyword = exports.TSUndefinedKeyword = TSUndefinedKeyword; exports.tSNullKeyword = exports.tsNullKeyword = exports.TSNullKeyword = TSNullKeyword; exports.tSNeverKeyword = exports.tsNeverKeyword = exports.TSNeverKeyword = TSNeverKeyword; exports.tSThisType = exports.tsThisType = exports.TSThisType = TSThisType; exports.tSFunctionType = exports.tsFunctionType = exports.TSFunctionType = TSFunctionType; exports.tSConstructorType = exports.tsConstructorType = exports.TSConstructorType = TSConstructorType; exports.tSTypeReference = exports.tsTypeReference = exports.TSTypeReference = TSTypeReference; exports.tSTypePredicate = exports.tsTypePredicate = exports.TSTypePredicate = TSTypePredicate; exports.tSTypeQuery = exports.tsTypeQuery = exports.TSTypeQuery = TSTypeQuery; exports.tSTypeLiteral = exports.tsTypeLiteral = exports.TSTypeLiteral = TSTypeLiteral; exports.tSArrayType = exports.tsArrayType = exports.TSArrayType = TSArrayType; exports.tSTupleType = exports.tsTupleType = exports.TSTupleType = TSTupleType; exports.tSUnionType = exports.tsUnionType = exports.TSUnionType = TSUnionType; exports.tSIntersectionType = exports.tsIntersectionType = exports.TSIntersectionType = TSIntersectionType; exports.tSParenthesizedType = exports.tsParenthesizedType = exports.TSParenthesizedType = TSParenthesizedType; exports.tSTypeOperator = exports.tsTypeOperator = exports.TSTypeOperator = TSTypeOperator; exports.tSIndexedAccessType = exports.tsIndexedAccessType = exports.TSIndexedAccessType = TSIndexedAccessType; exports.tSMappedType = exports.tsMappedType = exports.TSMappedType = TSMappedType; exports.tSLiteralType = exports.tsLiteralType = exports.TSLiteralType = TSLiteralType; exports.tSExpressionWithTypeArguments = exports.tsExpressionWithTypeArguments = exports.TSExpressionWithTypeArguments = TSExpressionWithTypeArguments; exports.tSInterfaceDeclaration = exports.tsInterfaceDeclaration = exports.TSInterfaceDeclaration = TSInterfaceDeclaration; exports.tSInterfaceBody = exports.tsInterfaceBody = exports.TSInterfaceBody = TSInterfaceBody; exports.tSTypeAliasDeclaration = exports.tsTypeAliasDeclaration = exports.TSTypeAliasDeclaration = TSTypeAliasDeclaration; exports.tSAsExpression = exports.tsAsExpression = exports.TSAsExpression = TSAsExpression; exports.tSTypeAssertion = exports.tsTypeAssertion = exports.TSTypeAssertion = TSTypeAssertion; exports.tSEnumDeclaration = exports.tsEnumDeclaration = exports.TSEnumDeclaration = TSEnumDeclaration; exports.tSEnumMember = exports.tsEnumMember = exports.TSEnumMember = TSEnumMember; exports.tSModuleDeclaration = exports.tsModuleDeclaration = exports.TSModuleDeclaration = TSModuleDeclaration; exports.tSModuleBlock = exports.tsModuleBlock = exports.TSModuleBlock = TSModuleBlock; exports.tSImportEqualsDeclaration = exports.tsImportEqualsDeclaration = exports.TSImportEqualsDeclaration = TSImportEqualsDeclaration; exports.tSExternalModuleReference = exports.tsExternalModuleReference = exports.TSExternalModuleReference = TSExternalModuleReference; exports.tSNonNullExpression = exports.tsNonNullExpression = exports.TSNonNullExpression = TSNonNullExpression; exports.tSExportAssignment = exports.tsExportAssignment = exports.TSExportAssignment = TSExportAssignment; exports.tSNamespaceExportDeclaration = exports.tsNamespaceExportDeclaration = exports.TSNamespaceExportDeclaration = TSNamespaceExportDeclaration; exports.tSTypeAnnotation = exports.tsTypeAnnotation = exports.TSTypeAnnotation = TSTypeAnnotation; exports.tSTypeParameterInstantiation = exports.tsTypeParameterInstantiation = exports.TSTypeParameterInstantiation = TSTypeParameterInstantiation; exports.tSTypeParameterDeclaration = exports.tsTypeParameterDeclaration = exports.TSTypeParameterDeclaration = TSTypeParameterDeclaration; exports.tSTypeParameter = exports.tsTypeParameter = exports.TSTypeParameter = TSTypeParameter; exports.numberLiteral = exports.NumberLiteral = NumberLiteral; exports.regexLiteral = exports.RegexLiteral = RegexLiteral; exports.restProperty = exports.RestProperty = RestProperty; exports.spreadProperty = exports.SpreadProperty = SpreadProperty; var _builder = _interopRequireDefault(__webpack_require__(264)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ArrayExpression() { for ( var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++ ) { args[_key] = arguments[_key]; } return _builder.default.apply( void 0, ["ArrayExpression"].concat(args) ); } function AssignmentExpression() { for ( var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++ ) { args[_key2] = arguments[_key2]; } return _builder.default.apply( void 0, ["AssignmentExpression"].concat(args) ); } function BinaryExpression() { for ( var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++ ) { args[_key3] = arguments[_key3]; } return _builder.default.apply( void 0, ["BinaryExpression"].concat(args) ); } function Directive() { for ( var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++ ) { args[_key4] = arguments[_key4]; } return _builder.default.apply( void 0, ["Directive"].concat(args) ); } function DirectiveLiteral() { for ( var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++ ) { args[_key5] = arguments[_key5]; } return _builder.default.apply( void 0, ["DirectiveLiteral"].concat(args) ); } function BlockStatement() { for ( var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++ ) { args[_key6] = arguments[_key6]; } return _builder.default.apply( void 0, ["BlockStatement"].concat(args) ); } function BreakStatement() { for ( var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++ ) { args[_key7] = arguments[_key7]; } return _builder.default.apply( void 0, ["BreakStatement"].concat(args) ); } function CallExpression() { for ( var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++ ) { args[_key8] = arguments[_key8]; } return _builder.default.apply( void 0, ["CallExpression"].concat(args) ); } function CatchClause() { for ( var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++ ) { args[_key9] = arguments[_key9]; } return _builder.default.apply( void 0, ["CatchClause"].concat(args) ); } function ConditionalExpression() { for ( var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++ ) { args[_key10] = arguments[_key10]; } return _builder.default.apply( void 0, ["ConditionalExpression"].concat(args) ); } function ContinueStatement() { for ( var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++ ) { args[_key11] = arguments[_key11]; } return _builder.default.apply( void 0, ["ContinueStatement"].concat(args) ); } function DebuggerStatement() { for ( var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++ ) { args[_key12] = arguments[_key12]; } return _builder.default.apply( void 0, ["DebuggerStatement"].concat(args) ); } function DoWhileStatement() { for ( var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++ ) { args[_key13] = arguments[_key13]; } return _builder.default.apply( void 0, ["DoWhileStatement"].concat(args) ); } function EmptyStatement() { for ( var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++ ) { args[_key14] = arguments[_key14]; } return _builder.default.apply( void 0, ["EmptyStatement"].concat(args) ); } function ExpressionStatement() { for ( var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++ ) { args[_key15] = arguments[_key15]; } return _builder.default.apply( void 0, ["ExpressionStatement"].concat(args) ); } function File() { for ( var _len16 = arguments.length, args = new Array(_len16), _key16 = 0; _key16 < _len16; _key16++ ) { args[_key16] = arguments[_key16]; } return _builder.default.apply( void 0, ["File"].concat(args) ); } function ForInStatement() { for ( var _len17 = arguments.length, args = new Array(_len17), _key17 = 0; _key17 < _len17; _key17++ ) { args[_key17] = arguments[_key17]; } return _builder.default.apply( void 0, ["ForInStatement"].concat(args) ); } function ForStatement() { for ( var _len18 = arguments.length, args = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++ ) { args[_key18] = arguments[_key18]; } return _builder.default.apply( void 0, ["ForStatement"].concat(args) ); } function FunctionDeclaration() { for ( var _len19 = arguments.length, args = new Array(_len19), _key19 = 0; _key19 < _len19; _key19++ ) { args[_key19] = arguments[_key19]; } return _builder.default.apply( void 0, ["FunctionDeclaration"].concat(args) ); } function FunctionExpression() { for ( var _len20 = arguments.length, args = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++ ) { args[_key20] = arguments[_key20]; } return _builder.default.apply( void 0, ["FunctionExpression"].concat(args) ); } function Identifier() { for ( var _len21 = arguments.length, args = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++ ) { args[_key21] = arguments[_key21]; } return _builder.default.apply( void 0, ["Identifier"].concat(args) ); } function IfStatement() { for ( var _len22 = arguments.length, args = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++ ) { args[_key22] = arguments[_key22]; } return _builder.default.apply( void 0, ["IfStatement"].concat(args) ); } function LabeledStatement() { for ( var _len23 = arguments.length, args = new Array(_len23), _key23 = 0; _key23 < _len23; _key23++ ) { args[_key23] = arguments[_key23]; } return _builder.default.apply( void 0, ["LabeledStatement"].concat(args) ); } function StringLiteral() { for ( var _len24 = arguments.length, args = new Array(_len24), _key24 = 0; _key24 < _len24; _key24++ ) { args[_key24] = arguments[_key24]; } return _builder.default.apply( void 0, ["StringLiteral"].concat(args) ); } function NumericLiteral() { for ( var _len25 = arguments.length, args = new Array(_len25), _key25 = 0; _key25 < _len25; _key25++ ) { args[_key25] = arguments[_key25]; } return _builder.default.apply( void 0, ["NumericLiteral"].concat(args) ); } function NullLiteral() { for ( var _len26 = arguments.length, args = new Array(_len26), _key26 = 0; _key26 < _len26; _key26++ ) { args[_key26] = arguments[_key26]; } return _builder.default.apply( void 0, ["NullLiteral"].concat(args) ); } function BooleanLiteral() { for ( var _len27 = arguments.length, args = new Array(_len27), _key27 = 0; _key27 < _len27; _key27++ ) { args[_key27] = arguments[_key27]; } return _builder.default.apply( void 0, ["BooleanLiteral"].concat(args) ); } function RegExpLiteral() { for ( var _len28 = arguments.length, args = new Array(_len28), _key28 = 0; _key28 < _len28; _key28++ ) { args[_key28] = arguments[_key28]; } return _builder.default.apply( void 0, ["RegExpLiteral"].concat(args) ); } function LogicalExpression() { for ( var _len29 = arguments.length, args = new Array(_len29), _key29 = 0; _key29 < _len29; _key29++ ) { args[_key29] = arguments[_key29]; } return _builder.default.apply( void 0, ["LogicalExpression"].concat(args) ); } function MemberExpression() { for ( var _len30 = arguments.length, args = new Array(_len30), _key30 = 0; _key30 < _len30; _key30++ ) { args[_key30] = arguments[_key30]; } return _builder.default.apply( void 0, ["MemberExpression"].concat(args) ); } function NewExpression() { for ( var _len31 = arguments.length, args = new Array(_len31), _key31 = 0; _key31 < _len31; _key31++ ) { args[_key31] = arguments[_key31]; } return _builder.default.apply( void 0, ["NewExpression"].concat(args) ); } function Program() { for ( var _len32 = arguments.length, args = new Array(_len32), _key32 = 0; _key32 < _len32; _key32++ ) { args[_key32] = arguments[_key32]; } return _builder.default.apply( void 0, ["Program"].concat(args) ); } function ObjectExpression() { for ( var _len33 = arguments.length, args = new Array(_len33), _key33 = 0; _key33 < _len33; _key33++ ) { args[_key33] = arguments[_key33]; } return _builder.default.apply( void 0, ["ObjectExpression"].concat(args) ); } function ObjectMethod() { for ( var _len34 = arguments.length, args = new Array(_len34), _key34 = 0; _key34 < _len34; _key34++ ) { args[_key34] = arguments[_key34]; } return _builder.default.apply( void 0, ["ObjectMethod"].concat(args) ); } function ObjectProperty() { for ( var _len35 = arguments.length, args = new Array(_len35), _key35 = 0; _key35 < _len35; _key35++ ) { args[_key35] = arguments[_key35]; } return _builder.default.apply( void 0, ["ObjectProperty"].concat(args) ); } function RestElement() { for ( var _len36 = arguments.length, args = new Array(_len36), _key36 = 0; _key36 < _len36; _key36++ ) { args[_key36] = arguments[_key36]; } return _builder.default.apply( void 0, ["RestElement"].concat(args) ); } function ReturnStatement() { for ( var _len37 = arguments.length, args = new Array(_len37), _key37 = 0; _key37 < _len37; _key37++ ) { args[_key37] = arguments[_key37]; } return _builder.default.apply( void 0, ["ReturnStatement"].concat(args) ); } function SequenceExpression() { for ( var _len38 = arguments.length, args = new Array(_len38), _key38 = 0; _key38 < _len38; _key38++ ) { args[_key38] = arguments[_key38]; } return _builder.default.apply( void 0, ["SequenceExpression"].concat(args) ); } function SwitchCase() { for ( var _len39 = arguments.length, args = new Array(_len39), _key39 = 0; _key39 < _len39; _key39++ ) { args[_key39] = arguments[_key39]; } return _builder.default.apply( void 0, ["SwitchCase"].concat(args) ); } function SwitchStatement() { for ( var _len40 = arguments.length, args = new Array(_len40), _key40 = 0; _key40 < _len40; _key40++ ) { args[_key40] = arguments[_key40]; } return _builder.default.apply( void 0, ["SwitchStatement"].concat(args) ); } function ThisExpression() { for ( var _len41 = arguments.length, args = new Array(_len41), _key41 = 0; _key41 < _len41; _key41++ ) { args[_key41] = arguments[_key41]; } return _builder.default.apply( void 0, ["ThisExpression"].concat(args) ); } function ThrowStatement() { for ( var _len42 = arguments.length, args = new Array(_len42), _key42 = 0; _key42 < _len42; _key42++ ) { args[_key42] = arguments[_key42]; } return _builder.default.apply( void 0, ["ThrowStatement"].concat(args) ); } function TryStatement() { for ( var _len43 = arguments.length, args = new Array(_len43), _key43 = 0; _key43 < _len43; _key43++ ) { args[_key43] = arguments[_key43]; } return _builder.default.apply( void 0, ["TryStatement"].concat(args) ); } function UnaryExpression() { for ( var _len44 = arguments.length, args = new Array(_len44), _key44 = 0; _key44 < _len44; _key44++ ) { args[_key44] = arguments[_key44]; } return _builder.default.apply( void 0, ["UnaryExpression"].concat(args) ); } function UpdateExpression() { for ( var _len45 = arguments.length, args = new Array(_len45), _key45 = 0; _key45 < _len45; _key45++ ) { args[_key45] = arguments[_key45]; } return _builder.default.apply( void 0, ["UpdateExpression"].concat(args) ); } function VariableDeclaration() { for ( var _len46 = arguments.length, args = new Array(_len46), _key46 = 0; _key46 < _len46; _key46++ ) { args[_key46] = arguments[_key46]; } return _builder.default.apply( void 0, ["VariableDeclaration"].concat(args) ); } function VariableDeclarator() { for ( var _len47 = arguments.length, args = new Array(_len47), _key47 = 0; _key47 < _len47; _key47++ ) { args[_key47] = arguments[_key47]; } return _builder.default.apply( void 0, ["VariableDeclarator"].concat(args) ); } function WhileStatement() { for ( var _len48 = arguments.length, args = new Array(_len48), _key48 = 0; _key48 < _len48; _key48++ ) { args[_key48] = arguments[_key48]; } return _builder.default.apply( void 0, ["WhileStatement"].concat(args) ); } function WithStatement() { for ( var _len49 = arguments.length, args = new Array(_len49), _key49 = 0; _key49 < _len49; _key49++ ) { args[_key49] = arguments[_key49]; } return _builder.default.apply( void 0, ["WithStatement"].concat(args) ); } function AssignmentPattern() { for ( var _len50 = arguments.length, args = new Array(_len50), _key50 = 0; _key50 < _len50; _key50++ ) { args[_key50] = arguments[_key50]; } return _builder.default.apply( void 0, ["AssignmentPattern"].concat(args) ); } function ArrayPattern() { for ( var _len51 = arguments.length, args = new Array(_len51), _key51 = 0; _key51 < _len51; _key51++ ) { args[_key51] = arguments[_key51]; } return _builder.default.apply( void 0, ["ArrayPattern"].concat(args) ); } function ArrowFunctionExpression() { for ( var _len52 = arguments.length, args = new Array(_len52), _key52 = 0; _key52 < _len52; _key52++ ) { args[_key52] = arguments[_key52]; } return _builder.default.apply( void 0, ["ArrowFunctionExpression"].concat(args) ); } function ClassBody() { for ( var _len53 = arguments.length, args = new Array(_len53), _key53 = 0; _key53 < _len53; _key53++ ) { args[_key53] = arguments[_key53]; } return _builder.default.apply( void 0, ["ClassBody"].concat(args) ); } function ClassDeclaration() { for ( var _len54 = arguments.length, args = new Array(_len54), _key54 = 0; _key54 < _len54; _key54++ ) { args[_key54] = arguments[_key54]; } return _builder.default.apply( void 0, ["ClassDeclaration"].concat(args) ); } function ClassExpression() { for ( var _len55 = arguments.length, args = new Array(_len55), _key55 = 0; _key55 < _len55; _key55++ ) { args[_key55] = arguments[_key55]; } return _builder.default.apply( void 0, ["ClassExpression"].concat(args) ); } function ExportAllDeclaration() { for ( var _len56 = arguments.length, args = new Array(_len56), _key56 = 0; _key56 < _len56; _key56++ ) { args[_key56] = arguments[_key56]; } return _builder.default.apply( void 0, ["ExportAllDeclaration"].concat(args) ); } function ExportDefaultDeclaration() { for ( var _len57 = arguments.length, args = new Array(_len57), _key57 = 0; _key57 < _len57; _key57++ ) { args[_key57] = arguments[_key57]; } return _builder.default.apply( void 0, ["ExportDefaultDeclaration"].concat(args) ); } function ExportNamedDeclaration() { for ( var _len58 = arguments.length, args = new Array(_len58), _key58 = 0; _key58 < _len58; _key58++ ) { args[_key58] = arguments[_key58]; } return _builder.default.apply( void 0, ["ExportNamedDeclaration"].concat(args) ); } function ExportSpecifier() { for ( var _len59 = arguments.length, args = new Array(_len59), _key59 = 0; _key59 < _len59; _key59++ ) { args[_key59] = arguments[_key59]; } return _builder.default.apply( void 0, ["ExportSpecifier"].concat(args) ); } function ForOfStatement() { for ( var _len60 = arguments.length, args = new Array(_len60), _key60 = 0; _key60 < _len60; _key60++ ) { args[_key60] = arguments[_key60]; } return _builder.default.apply( void 0, ["ForOfStatement"].concat(args) ); } function ImportDeclaration() { for ( var _len61 = arguments.length, args = new Array(_len61), _key61 = 0; _key61 < _len61; _key61++ ) { args[_key61] = arguments[_key61]; } return _builder.default.apply( void 0, ["ImportDeclaration"].concat(args) ); } function ImportDefaultSpecifier() { for ( var _len62 = arguments.length, args = new Array(_len62), _key62 = 0; _key62 < _len62; _key62++ ) { args[_key62] = arguments[_key62]; } return _builder.default.apply( void 0, ["ImportDefaultSpecifier"].concat(args) ); } function ImportNamespaceSpecifier() { for ( var _len63 = arguments.length, args = new Array(_len63), _key63 = 0; _key63 < _len63; _key63++ ) { args[_key63] = arguments[_key63]; } return _builder.default.apply( void 0, ["ImportNamespaceSpecifier"].concat(args) ); } function ImportSpecifier() { for ( var _len64 = arguments.length, args = new Array(_len64), _key64 = 0; _key64 < _len64; _key64++ ) { args[_key64] = arguments[_key64]; } return _builder.default.apply( void 0, ["ImportSpecifier"].concat(args) ); } function MetaProperty() { for ( var _len65 = arguments.length, args = new Array(_len65), _key65 = 0; _key65 < _len65; _key65++ ) { args[_key65] = arguments[_key65]; } return _builder.default.apply( void 0, ["MetaProperty"].concat(args) ); } function ClassMethod() { for ( var _len66 = arguments.length, args = new Array(_len66), _key66 = 0; _key66 < _len66; _key66++ ) { args[_key66] = arguments[_key66]; } return _builder.default.apply( void 0, ["ClassMethod"].concat(args) ); } function ObjectPattern() { for ( var _len67 = arguments.length, args = new Array(_len67), _key67 = 0; _key67 < _len67; _key67++ ) { args[_key67] = arguments[_key67]; } return _builder.default.apply( void 0, ["ObjectPattern"].concat(args) ); } function SpreadElement() { for ( var _len68 = arguments.length, args = new Array(_len68), _key68 = 0; _key68 < _len68; _key68++ ) { args[_key68] = arguments[_key68]; } return _builder.default.apply( void 0, ["SpreadElement"].concat(args) ); } function Super() { for ( var _len69 = arguments.length, args = new Array(_len69), _key69 = 0; _key69 < _len69; _key69++ ) { args[_key69] = arguments[_key69]; } return _builder.default.apply( void 0, ["Super"].concat(args) ); } function TaggedTemplateExpression() { for ( var _len70 = arguments.length, args = new Array(_len70), _key70 = 0; _key70 < _len70; _key70++ ) { args[_key70] = arguments[_key70]; } return _builder.default.apply( void 0, ["TaggedTemplateExpression"].concat(args) ); } function TemplateElement() { for ( var _len71 = arguments.length, args = new Array(_len71), _key71 = 0; _key71 < _len71; _key71++ ) { args[_key71] = arguments[_key71]; } return _builder.default.apply( void 0, ["TemplateElement"].concat(args) ); } function TemplateLiteral() { for ( var _len72 = arguments.length, args = new Array(_len72), _key72 = 0; _key72 < _len72; _key72++ ) { args[_key72] = arguments[_key72]; } return _builder.default.apply( void 0, ["TemplateLiteral"].concat(args) ); } function YieldExpression() { for ( var _len73 = arguments.length, args = new Array(_len73), _key73 = 0; _key73 < _len73; _key73++ ) { args[_key73] = arguments[_key73]; } return _builder.default.apply( void 0, ["YieldExpression"].concat(args) ); } function AnyTypeAnnotation() { for ( var _len74 = arguments.length, args = new Array(_len74), _key74 = 0; _key74 < _len74; _key74++ ) { args[_key74] = arguments[_key74]; } return _builder.default.apply( void 0, ["AnyTypeAnnotation"].concat(args) ); } function ArrayTypeAnnotation() { for ( var _len75 = arguments.length, args = new Array(_len75), _key75 = 0; _key75 < _len75; _key75++ ) { args[_key75] = arguments[_key75]; } return _builder.default.apply( void 0, ["ArrayTypeAnnotation"].concat(args) ); } function BooleanTypeAnnotation() { for ( var _len76 = arguments.length, args = new Array(_len76), _key76 = 0; _key76 < _len76; _key76++ ) { args[_key76] = arguments[_key76]; } return _builder.default.apply( void 0, ["BooleanTypeAnnotation"].concat(args) ); } function BooleanLiteralTypeAnnotation() { for ( var _len77 = arguments.length, args = new Array(_len77), _key77 = 0; _key77 < _len77; _key77++ ) { args[_key77] = arguments[_key77]; } return _builder.default.apply( void 0, ["BooleanLiteralTypeAnnotation"].concat(args) ); } function NullLiteralTypeAnnotation() { for ( var _len78 = arguments.length, args = new Array(_len78), _key78 = 0; _key78 < _len78; _key78++ ) { args[_key78] = arguments[_key78]; } return _builder.default.apply( void 0, ["NullLiteralTypeAnnotation"].concat(args) ); } function ClassImplements() { for ( var _len79 = arguments.length, args = new Array(_len79), _key79 = 0; _key79 < _len79; _key79++ ) { args[_key79] = arguments[_key79]; } return _builder.default.apply( void 0, ["ClassImplements"].concat(args) ); } function DeclareClass() { for ( var _len80 = arguments.length, args = new Array(_len80), _key80 = 0; _key80 < _len80; _key80++ ) { args[_key80] = arguments[_key80]; } return _builder.default.apply( void 0, ["DeclareClass"].concat(args) ); } function DeclareFunction() { for ( var _len81 = arguments.length, args = new Array(_len81), _key81 = 0; _key81 < _len81; _key81++ ) { args[_key81] = arguments[_key81]; } return _builder.default.apply( void 0, ["DeclareFunction"].concat(args) ); } function DeclareInterface() { for ( var _len82 = arguments.length, args = new Array(_len82), _key82 = 0; _key82 < _len82; _key82++ ) { args[_key82] = arguments[_key82]; } return _builder.default.apply( void 0, ["DeclareInterface"].concat(args) ); } function DeclareModule() { for ( var _len83 = arguments.length, args = new Array(_len83), _key83 = 0; _key83 < _len83; _key83++ ) { args[_key83] = arguments[_key83]; } return _builder.default.apply( void 0, ["DeclareModule"].concat(args) ); } function DeclareModuleExports() { for ( var _len84 = arguments.length, args = new Array(_len84), _key84 = 0; _key84 < _len84; _key84++ ) { args[_key84] = arguments[_key84]; } return _builder.default.apply( void 0, ["DeclareModuleExports"].concat(args) ); } function DeclareTypeAlias() { for ( var _len85 = arguments.length, args = new Array(_len85), _key85 = 0; _key85 < _len85; _key85++ ) { args[_key85] = arguments[_key85]; } return _builder.default.apply( void 0, ["DeclareTypeAlias"].concat(args) ); } function DeclareOpaqueType() { for ( var _len86 = arguments.length, args = new Array(_len86), _key86 = 0; _key86 < _len86; _key86++ ) { args[_key86] = arguments[_key86]; } return _builder.default.apply( void 0, ["DeclareOpaqueType"].concat(args) ); } function DeclareVariable() { for ( var _len87 = arguments.length, args = new Array(_len87), _key87 = 0; _key87 < _len87; _key87++ ) { args[_key87] = arguments[_key87]; } return _builder.default.apply( void 0, ["DeclareVariable"].concat(args) ); } function DeclareExportDeclaration() { for ( var _len88 = arguments.length, args = new Array(_len88), _key88 = 0; _key88 < _len88; _key88++ ) { args[_key88] = arguments[_key88]; } return _builder.default.apply( void 0, ["DeclareExportDeclaration"].concat(args) ); } function DeclareExportAllDeclaration() { for ( var _len89 = arguments.length, args = new Array(_len89), _key89 = 0; _key89 < _len89; _key89++ ) { args[_key89] = arguments[_key89]; } return _builder.default.apply( void 0, ["DeclareExportAllDeclaration"].concat(args) ); } function DeclaredPredicate() { for ( var _len90 = arguments.length, args = new Array(_len90), _key90 = 0; _key90 < _len90; _key90++ ) { args[_key90] = arguments[_key90]; } return _builder.default.apply( void 0, ["DeclaredPredicate"].concat(args) ); } function ExistsTypeAnnotation() { for ( var _len91 = arguments.length, args = new Array(_len91), _key91 = 0; _key91 < _len91; _key91++ ) { args[_key91] = arguments[_key91]; } return _builder.default.apply( void 0, ["ExistsTypeAnnotation"].concat(args) ); } function FunctionTypeAnnotation() { for ( var _len92 = arguments.length, args = new Array(_len92), _key92 = 0; _key92 < _len92; _key92++ ) { args[_key92] = arguments[_key92]; } return _builder.default.apply( void 0, ["FunctionTypeAnnotation"].concat(args) ); } function FunctionTypeParam() { for ( var _len93 = arguments.length, args = new Array(_len93), _key93 = 0; _key93 < _len93; _key93++ ) { args[_key93] = arguments[_key93]; } return _builder.default.apply( void 0, ["FunctionTypeParam"].concat(args) ); } function GenericTypeAnnotation() { for ( var _len94 = arguments.length, args = new Array(_len94), _key94 = 0; _key94 < _len94; _key94++ ) { args[_key94] = arguments[_key94]; } return _builder.default.apply( void 0, ["GenericTypeAnnotation"].concat(args) ); } function InferredPredicate() { for ( var _len95 = arguments.length, args = new Array(_len95), _key95 = 0; _key95 < _len95; _key95++ ) { args[_key95] = arguments[_key95]; } return _builder.default.apply( void 0, ["InferredPredicate"].concat(args) ); } function InterfaceExtends() { for ( var _len96 = arguments.length, args = new Array(_len96), _key96 = 0; _key96 < _len96; _key96++ ) { args[_key96] = arguments[_key96]; } return _builder.default.apply( void 0, ["InterfaceExtends"].concat(args) ); } function InterfaceDeclaration() { for ( var _len97 = arguments.length, args = new Array(_len97), _key97 = 0; _key97 < _len97; _key97++ ) { args[_key97] = arguments[_key97]; } return _builder.default.apply( void 0, ["InterfaceDeclaration"].concat(args) ); } function IntersectionTypeAnnotation() { for ( var _len98 = arguments.length, args = new Array(_len98), _key98 = 0; _key98 < _len98; _key98++ ) { args[_key98] = arguments[_key98]; } return _builder.default.apply( void 0, ["IntersectionTypeAnnotation"].concat(args) ); } function MixedTypeAnnotation() { for ( var _len99 = arguments.length, args = new Array(_len99), _key99 = 0; _key99 < _len99; _key99++ ) { args[_key99] = arguments[_key99]; } return _builder.default.apply( void 0, ["MixedTypeAnnotation"].concat(args) ); } function EmptyTypeAnnotation() { for ( var _len100 = arguments.length, args = new Array(_len100), _key100 = 0; _key100 < _len100; _key100++ ) { args[_key100] = arguments[_key100]; } return _builder.default.apply( void 0, ["EmptyTypeAnnotation"].concat(args) ); } function NullableTypeAnnotation() { for ( var _len101 = arguments.length, args = new Array(_len101), _key101 = 0; _key101 < _len101; _key101++ ) { args[_key101] = arguments[_key101]; } return _builder.default.apply( void 0, ["NullableTypeAnnotation"].concat(args) ); } function NumberLiteralTypeAnnotation() { for ( var _len102 = arguments.length, args = new Array(_len102), _key102 = 0; _key102 < _len102; _key102++ ) { args[_key102] = arguments[_key102]; } return _builder.default.apply( void 0, ["NumberLiteralTypeAnnotation"].concat(args) ); } function NumberTypeAnnotation() { for ( var _len103 = arguments.length, args = new Array(_len103), _key103 = 0; _key103 < _len103; _key103++ ) { args[_key103] = arguments[_key103]; } return _builder.default.apply( void 0, ["NumberTypeAnnotation"].concat(args) ); } function ObjectTypeAnnotation() { for ( var _len104 = arguments.length, args = new Array(_len104), _key104 = 0; _key104 < _len104; _key104++ ) { args[_key104] = arguments[_key104]; } return _builder.default.apply( void 0, ["ObjectTypeAnnotation"].concat(args) ); } function ObjectTypeCallProperty() { for ( var _len105 = arguments.length, args = new Array(_len105), _key105 = 0; _key105 < _len105; _key105++ ) { args[_key105] = arguments[_key105]; } return _builder.default.apply( void 0, ["ObjectTypeCallProperty"].concat(args) ); } function ObjectTypeIndexer() { for ( var _len106 = arguments.length, args = new Array(_len106), _key106 = 0; _key106 < _len106; _key106++ ) { args[_key106] = arguments[_key106]; } return _builder.default.apply( void 0, ["ObjectTypeIndexer"].concat(args) ); } function ObjectTypeProperty() { for ( var _len107 = arguments.length, args = new Array(_len107), _key107 = 0; _key107 < _len107; _key107++ ) { args[_key107] = arguments[_key107]; } return _builder.default.apply( void 0, ["ObjectTypeProperty"].concat(args) ); } function ObjectTypeSpreadProperty() { for ( var _len108 = arguments.length, args = new Array(_len108), _key108 = 0; _key108 < _len108; _key108++ ) { args[_key108] = arguments[_key108]; } return _builder.default.apply( void 0, ["ObjectTypeSpreadProperty"].concat(args) ); } function OpaqueType() { for ( var _len109 = arguments.length, args = new Array(_len109), _key109 = 0; _key109 < _len109; _key109++ ) { args[_key109] = arguments[_key109]; } return _builder.default.apply( void 0, ["OpaqueType"].concat(args) ); } function QualifiedTypeIdentifier() { for ( var _len110 = arguments.length, args = new Array(_len110), _key110 = 0; _key110 < _len110; _key110++ ) { args[_key110] = arguments[_key110]; } return _builder.default.apply( void 0, ["QualifiedTypeIdentifier"].concat(args) ); } function StringLiteralTypeAnnotation() { for ( var _len111 = arguments.length, args = new Array(_len111), _key111 = 0; _key111 < _len111; _key111++ ) { args[_key111] = arguments[_key111]; } return _builder.default.apply( void 0, ["StringLiteralTypeAnnotation"].concat(args) ); } function StringTypeAnnotation() { for ( var _len112 = arguments.length, args = new Array(_len112), _key112 = 0; _key112 < _len112; _key112++ ) { args[_key112] = arguments[_key112]; } return _builder.default.apply( void 0, ["StringTypeAnnotation"].concat(args) ); } function ThisTypeAnnotation() { for ( var _len113 = arguments.length, args = new Array(_len113), _key113 = 0; _key113 < _len113; _key113++ ) { args[_key113] = arguments[_key113]; } return _builder.default.apply( void 0, ["ThisTypeAnnotation"].concat(args) ); } function TupleTypeAnnotation() { for ( var _len114 = arguments.length, args = new Array(_len114), _key114 = 0; _key114 < _len114; _key114++ ) { args[_key114] = arguments[_key114]; } return _builder.default.apply( void 0, ["TupleTypeAnnotation"].concat(args) ); } function TypeofTypeAnnotation() { for ( var _len115 = arguments.length, args = new Array(_len115), _key115 = 0; _key115 < _len115; _key115++ ) { args[_key115] = arguments[_key115]; } return _builder.default.apply( void 0, ["TypeofTypeAnnotation"].concat(args) ); } function TypeAlias() { for ( var _len116 = arguments.length, args = new Array(_len116), _key116 = 0; _key116 < _len116; _key116++ ) { args[_key116] = arguments[_key116]; } return _builder.default.apply( void 0, ["TypeAlias"].concat(args) ); } function TypeAnnotation() { for ( var _len117 = arguments.length, args = new Array(_len117), _key117 = 0; _key117 < _len117; _key117++ ) { args[_key117] = arguments[_key117]; } return _builder.default.apply( void 0, ["TypeAnnotation"].concat(args) ); } function TypeCastExpression() { for ( var _len118 = arguments.length, args = new Array(_len118), _key118 = 0; _key118 < _len118; _key118++ ) { args[_key118] = arguments[_key118]; } return _builder.default.apply( void 0, ["TypeCastExpression"].concat(args) ); } function TypeParameter() { for ( var _len119 = arguments.length, args = new Array(_len119), _key119 = 0; _key119 < _len119; _key119++ ) { args[_key119] = arguments[_key119]; } return _builder.default.apply( void 0, ["TypeParameter"].concat(args) ); } function TypeParameterDeclaration() { for ( var _len120 = arguments.length, args = new Array(_len120), _key120 = 0; _key120 < _len120; _key120++ ) { args[_key120] = arguments[_key120]; } return _builder.default.apply( void 0, ["TypeParameterDeclaration"].concat(args) ); } function TypeParameterInstantiation() { for ( var _len121 = arguments.length, args = new Array(_len121), _key121 = 0; _key121 < _len121; _key121++ ) { args[_key121] = arguments[_key121]; } return _builder.default.apply( void 0, ["TypeParameterInstantiation"].concat(args) ); } function UnionTypeAnnotation() { for ( var _len122 = arguments.length, args = new Array(_len122), _key122 = 0; _key122 < _len122; _key122++ ) { args[_key122] = arguments[_key122]; } return _builder.default.apply( void 0, ["UnionTypeAnnotation"].concat(args) ); } function VoidTypeAnnotation() { for ( var _len123 = arguments.length, args = new Array(_len123), _key123 = 0; _key123 < _len123; _key123++ ) { args[_key123] = arguments[_key123]; } return _builder.default.apply( void 0, ["VoidTypeAnnotation"].concat(args) ); } function JSXAttribute() { for ( var _len124 = arguments.length, args = new Array(_len124), _key124 = 0; _key124 < _len124; _key124++ ) { args[_key124] = arguments[_key124]; } return _builder.default.apply( void 0, ["JSXAttribute"].concat(args) ); } function JSXClosingElement() { for ( var _len125 = arguments.length, args = new Array(_len125), _key125 = 0; _key125 < _len125; _key125++ ) { args[_key125] = arguments[_key125]; } return _builder.default.apply( void 0, ["JSXClosingElement"].concat(args) ); } function JSXElement() { for ( var _len126 = arguments.length, args = new Array(_len126), _key126 = 0; _key126 < _len126; _key126++ ) { args[_key126] = arguments[_key126]; } return _builder.default.apply( void 0, ["JSXElement"].concat(args) ); } function JSXEmptyExpression() { for ( var _len127 = arguments.length, args = new Array(_len127), _key127 = 0; _key127 < _len127; _key127++ ) { args[_key127] = arguments[_key127]; } return _builder.default.apply( void 0, ["JSXEmptyExpression"].concat(args) ); } function JSXExpressionContainer() { for ( var _len128 = arguments.length, args = new Array(_len128), _key128 = 0; _key128 < _len128; _key128++ ) { args[_key128] = arguments[_key128]; } return _builder.default.apply( void 0, ["JSXExpressionContainer"].concat(args) ); } function JSXSpreadChild() { for ( var _len129 = arguments.length, args = new Array(_len129), _key129 = 0; _key129 < _len129; _key129++ ) { args[_key129] = arguments[_key129]; } return _builder.default.apply( void 0, ["JSXSpreadChild"].concat(args) ); } function JSXIdentifier() { for ( var _len130 = arguments.length, args = new Array(_len130), _key130 = 0; _key130 < _len130; _key130++ ) { args[_key130] = arguments[_key130]; } return _builder.default.apply( void 0, ["JSXIdentifier"].concat(args) ); } function JSXMemberExpression() { for ( var _len131 = arguments.length, args = new Array(_len131), _key131 = 0; _key131 < _len131; _key131++ ) { args[_key131] = arguments[_key131]; } return _builder.default.apply( void 0, ["JSXMemberExpression"].concat(args) ); } function JSXNamespacedName() { for ( var _len132 = arguments.length, args = new Array(_len132), _key132 = 0; _key132 < _len132; _key132++ ) { args[_key132] = arguments[_key132]; } return _builder.default.apply( void 0, ["JSXNamespacedName"].concat(args) ); } function JSXOpeningElement() { for ( var _len133 = arguments.length, args = new Array(_len133), _key133 = 0; _key133 < _len133; _key133++ ) { args[_key133] = arguments[_key133]; } return _builder.default.apply( void 0, ["JSXOpeningElement"].concat(args) ); } function JSXSpreadAttribute() { for ( var _len134 = arguments.length, args = new Array(_len134), _key134 = 0; _key134 < _len134; _key134++ ) { args[_key134] = arguments[_key134]; } return _builder.default.apply( void 0, ["JSXSpreadAttribute"].concat(args) ); } function JSXText() { for ( var _len135 = arguments.length, args = new Array(_len135), _key135 = 0; _key135 < _len135; _key135++ ) { args[_key135] = arguments[_key135]; } return _builder.default.apply( void 0, ["JSXText"].concat(args) ); } function JSXFragment() { for ( var _len136 = arguments.length, args = new Array(_len136), _key136 = 0; _key136 < _len136; _key136++ ) { args[_key136] = arguments[_key136]; } return _builder.default.apply( void 0, ["JSXFragment"].concat(args) ); } function JSXOpeningFragment() { for ( var _len137 = arguments.length, args = new Array(_len137), _key137 = 0; _key137 < _len137; _key137++ ) { args[_key137] = arguments[_key137]; } return _builder.default.apply( void 0, ["JSXOpeningFragment"].concat(args) ); } function JSXClosingFragment() { for ( var _len138 = arguments.length, args = new Array(_len138), _key138 = 0; _key138 < _len138; _key138++ ) { args[_key138] = arguments[_key138]; } return _builder.default.apply( void 0, ["JSXClosingFragment"].concat(args) ); } function Noop() { for ( var _len139 = arguments.length, args = new Array(_len139), _key139 = 0; _key139 < _len139; _key139++ ) { args[_key139] = arguments[_key139]; } return _builder.default.apply( void 0, ["Noop"].concat(args) ); } function ParenthesizedExpression() { for ( var _len140 = arguments.length, args = new Array(_len140), _key140 = 0; _key140 < _len140; _key140++ ) { args[_key140] = arguments[_key140]; } return _builder.default.apply( void 0, ["ParenthesizedExpression"].concat(args) ); } function AwaitExpression() { for ( var _len141 = arguments.length, args = new Array(_len141), _key141 = 0; _key141 < _len141; _key141++ ) { args[_key141] = arguments[_key141]; } return _builder.default.apply( void 0, ["AwaitExpression"].concat(args) ); } function BindExpression() { for ( var _len142 = arguments.length, args = new Array(_len142), _key142 = 0; _key142 < _len142; _key142++ ) { args[_key142] = arguments[_key142]; } return _builder.default.apply( void 0, ["BindExpression"].concat(args) ); } function ClassProperty() { for ( var _len143 = arguments.length, args = new Array(_len143), _key143 = 0; _key143 < _len143; _key143++ ) { args[_key143] = arguments[_key143]; } return _builder.default.apply( void 0, ["ClassProperty"].concat(args) ); } function Import() { for ( var _len144 = arguments.length, args = new Array(_len144), _key144 = 0; _key144 < _len144; _key144++ ) { args[_key144] = arguments[_key144]; } return _builder.default.apply( void 0, ["Import"].concat(args) ); } function Decorator() { for ( var _len145 = arguments.length, args = new Array(_len145), _key145 = 0; _key145 < _len145; _key145++ ) { args[_key145] = arguments[_key145]; } return _builder.default.apply( void 0, ["Decorator"].concat(args) ); } function DoExpression() { for ( var _len146 = arguments.length, args = new Array(_len146), _key146 = 0; _key146 < _len146; _key146++ ) { args[_key146] = arguments[_key146]; } return _builder.default.apply( void 0, ["DoExpression"].concat(args) ); } function ExportDefaultSpecifier() { for ( var _len147 = arguments.length, args = new Array(_len147), _key147 = 0; _key147 < _len147; _key147++ ) { args[_key147] = arguments[_key147]; } return _builder.default.apply( void 0, ["ExportDefaultSpecifier"].concat(args) ); } function ExportNamespaceSpecifier() { for ( var _len148 = arguments.length, args = new Array(_len148), _key148 = 0; _key148 < _len148; _key148++ ) { args[_key148] = arguments[_key148]; } return _builder.default.apply( void 0, ["ExportNamespaceSpecifier"].concat(args) ); } function TSParameterProperty() { for ( var _len149 = arguments.length, args = new Array(_len149), _key149 = 0; _key149 < _len149; _key149++ ) { args[_key149] = arguments[_key149]; } return _builder.default.apply( void 0, ["TSParameterProperty"].concat(args) ); } function TSDeclareFunction() { for ( var _len150 = arguments.length, args = new Array(_len150), _key150 = 0; _key150 < _len150; _key150++ ) { args[_key150] = arguments[_key150]; } return _builder.default.apply( void 0, ["TSDeclareFunction"].concat(args) ); } function TSDeclareMethod() { for ( var _len151 = arguments.length, args = new Array(_len151), _key151 = 0; _key151 < _len151; _key151++ ) { args[_key151] = arguments[_key151]; } return _builder.default.apply( void 0, ["TSDeclareMethod"].concat(args) ); } function TSQualifiedName() { for ( var _len152 = arguments.length, args = new Array(_len152), _key152 = 0; _key152 < _len152; _key152++ ) { args[_key152] = arguments[_key152]; } return _builder.default.apply( void 0, ["TSQualifiedName"].concat(args) ); } function TSCallSignatureDeclaration() { for ( var _len153 = arguments.length, args = new Array(_len153), _key153 = 0; _key153 < _len153; _key153++ ) { args[_key153] = arguments[_key153]; } return _builder.default.apply( void 0, ["TSCallSignatureDeclaration"].concat(args) ); } function TSConstructSignatureDeclaration() { for ( var _len154 = arguments.length, args = new Array(_len154), _key154 = 0; _key154 < _len154; _key154++ ) { args[_key154] = arguments[_key154]; } return _builder.default.apply( void 0, ["TSConstructSignatureDeclaration"].concat(args) ); } function TSPropertySignature() { for ( var _len155 = arguments.length, args = new Array(_len155), _key155 = 0; _key155 < _len155; _key155++ ) { args[_key155] = arguments[_key155]; } return _builder.default.apply( void 0, ["TSPropertySignature"].concat(args) ); } function TSMethodSignature() { for ( var _len156 = arguments.length, args = new Array(_len156), _key156 = 0; _key156 < _len156; _key156++ ) { args[_key156] = arguments[_key156]; } return _builder.default.apply( void 0, ["TSMethodSignature"].concat(args) ); } function TSIndexSignature() { for ( var _len157 = arguments.length, args = new Array(_len157), _key157 = 0; _key157 < _len157; _key157++ ) { args[_key157] = arguments[_key157]; } return _builder.default.apply( void 0, ["TSIndexSignature"].concat(args) ); } function TSAnyKeyword() { for ( var _len158 = arguments.length, args = new Array(_len158), _key158 = 0; _key158 < _len158; _key158++ ) { args[_key158] = arguments[_key158]; } return _builder.default.apply( void 0, ["TSAnyKeyword"].concat(args) ); } function TSNumberKeyword() { for ( var _len159 = arguments.length, args = new Array(_len159), _key159 = 0; _key159 < _len159; _key159++ ) { args[_key159] = arguments[_key159]; } return _builder.default.apply( void 0, ["TSNumberKeyword"].concat(args) ); } function TSObjectKeyword() { for ( var _len160 = arguments.length, args = new Array(_len160), _key160 = 0; _key160 < _len160; _key160++ ) { args[_key160] = arguments[_key160]; } return _builder.default.apply( void 0, ["TSObjectKeyword"].concat(args) ); } function TSBooleanKeyword() { for ( var _len161 = arguments.length, args = new Array(_len161), _key161 = 0; _key161 < _len161; _key161++ ) { args[_key161] = arguments[_key161]; } return _builder.default.apply( void 0, ["TSBooleanKeyword"].concat(args) ); } function TSStringKeyword() { for ( var _len162 = arguments.length, args = new Array(_len162), _key162 = 0; _key162 < _len162; _key162++ ) { args[_key162] = arguments[_key162]; } return _builder.default.apply( void 0, ["TSStringKeyword"].concat(args) ); } function TSSymbolKeyword() { for ( var _len163 = arguments.length, args = new Array(_len163), _key163 = 0; _key163 < _len163; _key163++ ) { args[_key163] = arguments[_key163]; } return _builder.default.apply( void 0, ["TSSymbolKeyword"].concat(args) ); } function TSVoidKeyword() { for ( var _len164 = arguments.length, args = new Array(_len164), _key164 = 0; _key164 < _len164; _key164++ ) { args[_key164] = arguments[_key164]; } return _builder.default.apply( void 0, ["TSVoidKeyword"].concat(args) ); } function TSUndefinedKeyword() { for ( var _len165 = arguments.length, args = new Array(_len165), _key165 = 0; _key165 < _len165; _key165++ ) { args[_key165] = arguments[_key165]; } return _builder.default.apply( void 0, ["TSUndefinedKeyword"].concat(args) ); } function TSNullKeyword() { for ( var _len166 = arguments.length, args = new Array(_len166), _key166 = 0; _key166 < _len166; _key166++ ) { args[_key166] = arguments[_key166]; } return _builder.default.apply( void 0, ["TSNullKeyword"].concat(args) ); } function TSNeverKeyword() { for ( var _len167 = arguments.length, args = new Array(_len167), _key167 = 0; _key167 < _len167; _key167++ ) { args[_key167] = arguments[_key167]; } return _builder.default.apply( void 0, ["TSNeverKeyword"].concat(args) ); } function TSThisType() { for ( var _len168 = arguments.length, args = new Array(_len168), _key168 = 0; _key168 < _len168; _key168++ ) { args[_key168] = arguments[_key168]; } return _builder.default.apply( void 0, ["TSThisType"].concat(args) ); } function TSFunctionType() { for ( var _len169 = arguments.length, args = new Array(_len169), _key169 = 0; _key169 < _len169; _key169++ ) { args[_key169] = arguments[_key169]; } return _builder.default.apply( void 0, ["TSFunctionType"].concat(args) ); } function TSConstructorType() { for ( var _len170 = arguments.length, args = new Array(_len170), _key170 = 0; _key170 < _len170; _key170++ ) { args[_key170] = arguments[_key170]; } return _builder.default.apply( void 0, ["TSConstructorType"].concat(args) ); } function TSTypeReference() { for ( var _len171 = arguments.length, args = new Array(_len171), _key171 = 0; _key171 < _len171; _key171++ ) { args[_key171] = arguments[_key171]; } return _builder.default.apply( void 0, ["TSTypeReference"].concat(args) ); } function TSTypePredicate() { for ( var _len172 = arguments.length, args = new Array(_len172), _key172 = 0; _key172 < _len172; _key172++ ) { args[_key172] = arguments[_key172]; } return _builder.default.apply( void 0, ["TSTypePredicate"].concat(args) ); } function TSTypeQuery() { for ( var _len173 = arguments.length, args = new Array(_len173), _key173 = 0; _key173 < _len173; _key173++ ) { args[_key173] = arguments[_key173]; } return _builder.default.apply( void 0, ["TSTypeQuery"].concat(args) ); } function TSTypeLiteral() { for ( var _len174 = arguments.length, args = new Array(_len174), _key174 = 0; _key174 < _len174; _key174++ ) { args[_key174] = arguments[_key174]; } return _builder.default.apply( void 0, ["TSTypeLiteral"].concat(args) ); } function TSArrayType() { for ( var _len175 = arguments.length, args = new Array(_len175), _key175 = 0; _key175 < _len175; _key175++ ) { args[_key175] = arguments[_key175]; } return _builder.default.apply( void 0, ["TSArrayType"].concat(args) ); } function TSTupleType() { for ( var _len176 = arguments.length, args = new Array(_len176), _key176 = 0; _key176 < _len176; _key176++ ) { args[_key176] = arguments[_key176]; } return _builder.default.apply( void 0, ["TSTupleType"].concat(args) ); } function TSUnionType() { for ( var _len177 = arguments.length, args = new Array(_len177), _key177 = 0; _key177 < _len177; _key177++ ) { args[_key177] = arguments[_key177]; } return _builder.default.apply( void 0, ["TSUnionType"].concat(args) ); } function TSIntersectionType() { for ( var _len178 = arguments.length, args = new Array(_len178), _key178 = 0; _key178 < _len178; _key178++ ) { args[_key178] = arguments[_key178]; } return _builder.default.apply( void 0, ["TSIntersectionType"].concat(args) ); } function TSParenthesizedType() { for ( var _len179 = arguments.length, args = new Array(_len179), _key179 = 0; _key179 < _len179; _key179++ ) { args[_key179] = arguments[_key179]; } return _builder.default.apply( void 0, ["TSParenthesizedType"].concat(args) ); } function TSTypeOperator() { for ( var _len180 = arguments.length, args = new Array(_len180), _key180 = 0; _key180 < _len180; _key180++ ) { args[_key180] = arguments[_key180]; } return _builder.default.apply( void 0, ["TSTypeOperator"].concat(args) ); } function TSIndexedAccessType() { for ( var _len181 = arguments.length, args = new Array(_len181), _key181 = 0; _key181 < _len181; _key181++ ) { args[_key181] = arguments[_key181]; } return _builder.default.apply( void 0, ["TSIndexedAccessType"].concat(args) ); } function TSMappedType() { for ( var _len182 = arguments.length, args = new Array(_len182), _key182 = 0; _key182 < _len182; _key182++ ) { args[_key182] = arguments[_key182]; } return _builder.default.apply( void 0, ["TSMappedType"].concat(args) ); } function TSLiteralType() { for ( var _len183 = arguments.length, args = new Array(_len183), _key183 = 0; _key183 < _len183; _key183++ ) { args[_key183] = arguments[_key183]; } return _builder.default.apply( void 0, ["TSLiteralType"].concat(args) ); } function TSExpressionWithTypeArguments() { for ( var _len184 = arguments.length, args = new Array(_len184), _key184 = 0; _key184 < _len184; _key184++ ) { args[_key184] = arguments[_key184]; } return _builder.default.apply( void 0, ["TSExpressionWithTypeArguments"].concat(args) ); } function TSInterfaceDeclaration() { for ( var _len185 = arguments.length, args = new Array(_len185), _key185 = 0; _key185 < _len185; _key185++ ) { args[_key185] = arguments[_key185]; } return _builder.default.apply( void 0, ["TSInterfaceDeclaration"].concat(args) ); } function TSInterfaceBody() { for ( var _len186 = arguments.length, args = new Array(_len186), _key186 = 0; _key186 < _len186; _key186++ ) { args[_key186] = arguments[_key186]; } return _builder.default.apply( void 0, ["TSInterfaceBody"].concat(args) ); } function TSTypeAliasDeclaration() { for ( var _len187 = arguments.length, args = new Array(_len187), _key187 = 0; _key187 < _len187; _key187++ ) { args[_key187] = arguments[_key187]; } return _builder.default.apply( void 0, ["TSTypeAliasDeclaration"].concat(args) ); } function TSAsExpression() { for ( var _len188 = arguments.length, args = new Array(_len188), _key188 = 0; _key188 < _len188; _key188++ ) { args[_key188] = arguments[_key188]; } return _builder.default.apply( void 0, ["TSAsExpression"].concat(args) ); } function TSTypeAssertion() { for ( var _len189 = arguments.length, args = new Array(_len189), _key189 = 0; _key189 < _len189; _key189++ ) { args[_key189] = arguments[_key189]; } return _builder.default.apply( void 0, ["TSTypeAssertion"].concat(args) ); } function TSEnumDeclaration() { for ( var _len190 = arguments.length, args = new Array(_len190), _key190 = 0; _key190 < _len190; _key190++ ) { args[_key190] = arguments[_key190]; } return _builder.default.apply( void 0, ["TSEnumDeclaration"].concat(args) ); } function TSEnumMember() { for ( var _len191 = arguments.length, args = new Array(_len191), _key191 = 0; _key191 < _len191; _key191++ ) { args[_key191] = arguments[_key191]; } return _builder.default.apply( void 0, ["TSEnumMember"].concat(args) ); } function TSModuleDeclaration() { for ( var _len192 = arguments.length, args = new Array(_len192), _key192 = 0; _key192 < _len192; _key192++ ) { args[_key192] = arguments[_key192]; } return _builder.default.apply( void 0, ["TSModuleDeclaration"].concat(args) ); } function TSModuleBlock() { for ( var _len193 = arguments.length, args = new Array(_len193), _key193 = 0; _key193 < _len193; _key193++ ) { args[_key193] = arguments[_key193]; } return _builder.default.apply( void 0, ["TSModuleBlock"].concat(args) ); } function TSImportEqualsDeclaration() { for ( var _len194 = arguments.length, args = new Array(_len194), _key194 = 0; _key194 < _len194; _key194++ ) { args[_key194] = arguments[_key194]; } return _builder.default.apply( void 0, ["TSImportEqualsDeclaration"].concat(args) ); } function TSExternalModuleReference() { for ( var _len195 = arguments.length, args = new Array(_len195), _key195 = 0; _key195 < _len195; _key195++ ) { args[_key195] = arguments[_key195]; } return _builder.default.apply( void 0, ["TSExternalModuleReference"].concat(args) ); } function TSNonNullExpression() { for ( var _len196 = arguments.length, args = new Array(_len196), _key196 = 0; _key196 < _len196; _key196++ ) { args[_key196] = arguments[_key196]; } return _builder.default.apply( void 0, ["TSNonNullExpression"].concat(args) ); } function TSExportAssignment() { for ( var _len197 = arguments.length, args = new Array(_len197), _key197 = 0; _key197 < _len197; _key197++ ) { args[_key197] = arguments[_key197]; } return _builder.default.apply( void 0, ["TSExportAssignment"].concat(args) ); } function TSNamespaceExportDeclaration() { for ( var _len198 = arguments.length, args = new Array(_len198), _key198 = 0; _key198 < _len198; _key198++ ) { args[_key198] = arguments[_key198]; } return _builder.default.apply( void 0, ["TSNamespaceExportDeclaration"].concat(args) ); } function TSTypeAnnotation() { for ( var _len199 = arguments.length, args = new Array(_len199), _key199 = 0; _key199 < _len199; _key199++ ) { args[_key199] = arguments[_key199]; } return _builder.default.apply( void 0, ["TSTypeAnnotation"].concat(args) ); } function TSTypeParameterInstantiation() { for ( var _len200 = arguments.length, args = new Array(_len200), _key200 = 0; _key200 < _len200; _key200++ ) { args[_key200] = arguments[_key200]; } return _builder.default.apply( void 0, ["TSTypeParameterInstantiation"].concat(args) ); } function TSTypeParameterDeclaration() { for ( var _len201 = arguments.length, args = new Array(_len201), _key201 = 0; _key201 < _len201; _key201++ ) { args[_key201] = arguments[_key201]; } return _builder.default.apply( void 0, ["TSTypeParameterDeclaration"].concat(args) ); } function TSTypeParameter() { for ( var _len202 = arguments.length, args = new Array(_len202), _key202 = 0; _key202 < _len202; _key202++ ) { args[_key202] = arguments[_key202]; } return _builder.default.apply( void 0, ["TSTypeParameter"].concat(args) ); } function NumberLiteral() { console.trace( "The node type NumberLiteral has been renamed to NumericLiteral" ); for ( var _len203 = arguments.length, args = new Array(_len203), _key203 = 0; _key203 < _len203; _key203++ ) { args[_key203] = arguments[_key203]; } return NumberLiteral.apply( void 0, ["NumberLiteral"].concat(args) ); } function RegexLiteral() { console.trace( "The node type RegexLiteral has been renamed to RegExpLiteral" ); for ( var _len204 = arguments.length, args = new Array(_len204), _key204 = 0; _key204 < _len204; _key204++ ) { args[_key204] = arguments[_key204]; } return RegexLiteral.apply( void 0, ["RegexLiteral"].concat(args) ); } function RestProperty() { console.trace( "The node type RestProperty has been renamed to RestElement" ); for ( var _len205 = arguments.length, args = new Array(_len205), _key205 = 0; _key205 < _len205; _key205++ ) { args[_key205] = arguments[_key205]; } return RestProperty.apply( void 0, ["RestProperty"].concat(args) ); } function SpreadProperty() { console.trace( "The node type SpreadProperty has been renamed to SpreadElement" ); for ( var _len206 = arguments.length, args = new Array(_len206), _key206 = 0; _key206 < _len206; _key206++ ) { args[_key206] = arguments[_key206]; } return SpreadProperty.apply( void 0, ["SpreadProperty"].concat(args) ); } /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { var freeGlobal = __webpack_require__(102); /** Detect free variable `self`. */ var freeSelf = typeof self == "object" && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function("return this")(); module.exports = root; /***/ }, /* 7 */ /***/ function(module, exports) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return ( value != null && (type == "object" || type == "function") ); } module.exports = isObject; /***/ }, /* 8 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */ (function(process) { // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. // resolves . and .. elements in a path array with directory names there // must be no slashes, empty elements, or device names (c:\) in the array // (so also no leading and trailing slashes - it does not distinguish // relative and absolute paths) function normalizeArray(parts, allowAboveRoot) { // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = parts.length - 1; i >= 0; i--) { var last = parts[i]; if (last === ".") { parts.splice(i, 1); } else if (last === "..") { parts.splice(i, 1); up++; } else if (up) { parts.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (allowAboveRoot) { for (; up--; up) { parts.unshift(".."); } } return parts; } // Split a filename into [root, dir, basename, ext], unix version // 'root' is just a slash, or nothing. var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; var splitPath = function splitPath(filename) { return splitPathRe.exec(filename).slice(1); }; // path.resolve([from ...], to) // posix version exports.resolve = function() { var resolvedPath = "", resolvedAbsolute = false; for ( var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i-- ) { var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries if (typeof path !== "string") { throw new TypeError( "Arguments to path.resolve must be strings" ); } else if (!path) { continue; } resolvedPath = path + "/" + resolvedPath; resolvedAbsolute = path.charAt(0) === "/"; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path resolvedPath = normalizeArray( filter(resolvedPath.split("/"), function(p) { return !!p; }), !resolvedAbsolute ).join("/"); return ( (resolvedAbsolute ? "/" : "") + resolvedPath || "." ); }; // path.normalize(path) // posix version exports.normalize = function(path) { var isAbsolute = exports.isAbsolute(path), trailingSlash = substr(path, -1) === "/"; // Normalize the path path = normalizeArray( filter(path.split("/"), function(p) { return !!p; }), !isAbsolute ).join("/"); if (!path && !isAbsolute) { path = "."; } if (path && trailingSlash) { path += "/"; } return (isAbsolute ? "/" : "") + path; }; // posix version exports.isAbsolute = function(path) { return path.charAt(0) === "/"; }; // posix version exports.join = function() { var paths = Array.prototype.slice.call(arguments, 0); return exports.normalize( filter(paths, function(p, index) { if (typeof p !== "string") { throw new TypeError( "Arguments to path.join must be strings" ); } return p; }).join("/") ); }; // path.relative(from, to) // posix version exports.relative = function(from, to) { from = exports.resolve(from).substr(1); to = exports.resolve(to).substr(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) { if (arr[start] !== "") break; } var end = arr.length - 1; for (; end >= 0; end--) { if (arr[end] !== "") break; } if (start > end) return []; return arr.slice(start, end - start + 1); } var fromParts = trim(from.split("/")); var toParts = trim(to.split("/")); var length = Math.min(fromParts.length, toParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) { if (fromParts[i] !== toParts[i]) { samePartsLength = i; break; } } var outputParts = []; for ( var i = samePartsLength; i < fromParts.length; i++ ) { outputParts.push(".."); } outputParts = outputParts.concat( toParts.slice(samePartsLength) ); return outputParts.join("/"); }; exports.sep = "/"; exports.delimiter = ":"; exports.dirname = function(path) { var result = splitPath(path), root = result[0], dir = result[1]; if (!root && !dir) { // No dirname whatsoever return "."; } if (dir) { // It has a dirname, strip trailing slash dir = dir.substr(0, dir.length - 1); } return root + dir; }; exports.basename = function(path, ext) { var f = splitPath(path)[2]; // TODO: make this comparison case-insensitive on windows? if (ext && f.substr(-1 * ext.length) === ext) { f = f.substr(0, f.length - ext.length); } return f; }; exports.extname = function(path) { return splitPath(path)[3]; }; function filter(xs, f) { if (xs.filter) return xs.filter(f); var res = []; for (var i = 0; i < xs.length; i++) { if (f(xs[i], i, xs)) res.push(xs[i]); } return res; } // String.prototype.substr - negative index don't work in IE8 var substr = "ab".substr(-1) === "b" ? function(str, start, len) { return str.substr(start, len); } : function(str, start, len) { if (start < 0) start = str.length + start; return str.substr(start, len); }; /* WEBPACK VAR INJECTION */ }.call(exports, __webpack_require__(12))); /***/ }, /* 9 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = traverse; exports.visitors = exports.Hub = exports.Scope = exports.NodePath = void 0; var _context = _interopRequireDefault(__webpack_require__(251)); var visitors = _interopRequireWildcard( __webpack_require__(415) ); exports.visitors = visitors; var _includes = _interopRequireDefault(__webpack_require__(77)); var t = _interopRequireWildcard(__webpack_require__(2)); var cache = _interopRequireWildcard(__webpack_require__(50)); var _path = _interopRequireDefault(__webpack_require__(23)); exports.NodePath = _path.default; var _scope = _interopRequireDefault(__webpack_require__(141)); exports.Scope = _scope.default; var _hub = _interopRequireDefault(__webpack_require__(416)); exports.Hub = _hub.default; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function traverse(parent, opts, scope, state, parentPath) { if (!parent) return; if (!opts) opts = {}; if (!opts.noScope && !scope) { if ( parent.type !== "Program" && parent.type !== "File" ) { throw new Error( "You must pass a scope and parentPath unless traversing a Program/File. " + ("Instead of that you tried to traverse a " + parent.type + " node without ") + "passing scope and parentPath." ); } } visitors.explode(opts); traverse.node(parent, opts, scope, state, parentPath); } traverse.visitors = visitors; traverse.verify = visitors.verify; traverse.explode = visitors.explode; traverse.cheap = function(node, enter) { return t.traverseFast(node, enter); }; traverse.node = function( node, opts, scope, state, parentPath, skipKeys ) { var keys = t.VISITOR_KEYS[node.type]; if (!keys) return; var context = new _context.default( scope, opts, state, parentPath ); for ( var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ; ) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var _key = _ref; if (skipKeys && skipKeys[_key]) continue; if (context.visit(node, _key)) return; } }; traverse.clearNode = function(node, opts) { t.removeProperties(node, opts); cache.path.delete(node); }; traverse.removeProperties = function(tree, opts) { t.traverseFast(tree, traverse.clearNode, opts); return tree; }; function hasBlacklistedType(path, state) { if (path.node.type === state.type) { state.has = true; path.stop(); } } traverse.hasType = function(tree, type, blacklistTypes) { if ((0, _includes.default)(blacklistTypes, tree.type)) return false; if (tree.type === type) return true; var state = { has: false, type: type }; traverse( tree, { noScope: true, blacklist: blacklistTypes, enter: hasBlacklistedType }, null, state ); return state.has; }; traverse.cache = cache; /***/ }, /* 10 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.TYPES = void 0; var _toFastProperties = _interopRequireDefault( __webpack_require__(253) ); __webpack_require__(58); __webpack_require__(60); __webpack_require__(256); __webpack_require__(257); __webpack_require__(258); __webpack_require__(259); __webpack_require__(260); var _utils = __webpack_require__(13); exports.VISITOR_KEYS = _utils.VISITOR_KEYS; exports.ALIAS_KEYS = _utils.ALIAS_KEYS; exports.FLIPPED_ALIAS_KEYS = _utils.FLIPPED_ALIAS_KEYS; exports.NODE_FIELDS = _utils.NODE_FIELDS; exports.BUILDER_KEYS = _utils.BUILDER_KEYS; exports.DEPRECATED_KEYS = _utils.DEPRECATED_KEYS; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _toFastProperties.default)(_utils.VISITOR_KEYS); (0, _toFastProperties.default)(_utils.ALIAS_KEYS); (0, _toFastProperties.default)(_utils.FLIPPED_ALIAS_KEYS); (0, _toFastProperties.default)(_utils.NODE_FIELDS); (0, _toFastProperties.default)(_utils.BUILDER_KEYS); (0, _toFastProperties.default)(_utils.DEPRECATED_KEYS); var TYPES = Object.keys(_utils.VISITOR_KEYS) .concat(Object.keys(_utils.FLIPPED_ALIAS_KEYS)) .concat(Object.keys(_utils.DEPRECATED_KEYS)); exports.TYPES = TYPES; /***/ }, /* 11 */ /***/ function(module, exports) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == "object"; } module.exports = isObjectLike; /***/ }, /* 12 */ /***/ function(module, exports) { // shim for using process in browser var process = (module.exports = {}); // cached from whatever global is present so that test runners that stub it // don't break things. But we need to wrap it in a try catch in case it is // wrapped in strict mode code which doesn't define any globals. It's inside a // function because try/catches deoptimize in certain engines. var cachedSetTimeout; var cachedClearTimeout; function defaultSetTimout() { throw new Error("setTimeout has not been defined"); } function defaultClearTimeout() { throw new Error("clearTimeout has not been defined"); } (function() { try { if (typeof setTimeout === "function") { cachedSetTimeout = setTimeout; } else { cachedSetTimeout = defaultSetTimout; } } catch (e) { cachedSetTimeout = defaultSetTimout; } try { if (typeof clearTimeout === "function") { cachedClearTimeout = clearTimeout; } else { cachedClearTimeout = defaultClearTimeout; } } catch (e) { cachedClearTimeout = defaultClearTimeout; } })(); function runTimeout(fun) { if (cachedSetTimeout === setTimeout) { //normal enviroments in sane situations return setTimeout(fun, 0); } // if setTimeout wasn't available but was latter defined if ( (cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout ) { cachedSetTimeout = setTimeout; return setTimeout(fun, 0); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedSetTimeout(fun, 0); } catch (e) { try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedSetTimeout.call(null, fun, 0); } catch (e) { // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error return cachedSetTimeout.call(this, fun, 0); } } } function runClearTimeout(marker) { if (cachedClearTimeout === clearTimeout) { //normal enviroments in sane situations return clearTimeout(marker); } // if clearTimeout wasn't available but was latter defined if ( (cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout ) { cachedClearTimeout = clearTimeout; return clearTimeout(marker); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedClearTimeout(marker); } catch (e) { try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedClearTimeout.call(null, marker); } catch (e) { // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. // Some versions of I.E. have different rules for clearTimeout vs setTimeout return cachedClearTimeout.call(this, marker); } } } var queue = []; var draining = false; var currentQueue; var queueIndex = -1; function cleanUpNextTick() { if (!draining || !currentQueue) { return; } draining = false; if (currentQueue.length) { queue = currentQueue.concat(queue); } else { queueIndex = -1; } if (queue.length) { drainQueue(); } } function drainQueue() { if (draining) { return; } var timeout = runTimeout(cleanUpNextTick); draining = true; var len = queue.length; while (len) { currentQueue = queue; queue = []; while (++queueIndex < len) { if (currentQueue) { currentQueue[queueIndex].run(); } } queueIndex = -1; len = queue.length; } currentQueue = null; draining = false; runClearTimeout(timeout); } process.nextTick = function(fun) { var args = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } } queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { runTimeout(drainQueue); } }; // v8 likes predictible objects function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function() { this.fun.apply(null, this.array); }; process.title = "browser"; process.browser = true; process.env = {}; process.argv = []; process.version = ""; // empty string to avoid regexp issues process.versions = {}; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.prependListener = noop; process.prependOnceListener = noop; process.listeners = function(name) { return []; }; process.binding = function(name) { throw new Error("process.binding is not supported"); }; process.cwd = function() { return "/"; }; process.chdir = function(dir) { throw new Error("process.chdir is not supported"); }; process.umask = function() { return 0; }; /***/ }, /* 13 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.assertEach = assertEach; exports.assertOneOf = assertOneOf; exports.assertNodeType = assertNodeType; exports.assertNodeOrValueType = assertNodeOrValueType; exports.assertValueType = assertValueType; exports.chain = chain; exports.default = defineType; exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.FLIPPED_ALIAS_KEYS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = void 0; var _is = _interopRequireDefault(__webpack_require__(35)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var VISITOR_KEYS = {}; exports.VISITOR_KEYS = VISITOR_KEYS; var ALIAS_KEYS = {}; exports.ALIAS_KEYS = ALIAS_KEYS; var FLIPPED_ALIAS_KEYS = {}; exports.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS; var NODE_FIELDS = {}; exports.NODE_FIELDS = NODE_FIELDS; var BUILDER_KEYS = {}; exports.BUILDER_KEYS = BUILDER_KEYS; var DEPRECATED_KEYS = {}; exports.DEPRECATED_KEYS = DEPRECATED_KEYS; function getType(val) { if (Array.isArray(val)) { return "array"; } else if (val === null) { return "null"; } else if (val === undefined) { return "undefined"; } else { return typeof val; } } function assertEach(callback) { function validator(node, key, val) { if (!Array.isArray(val)) return; for (var i = 0; i < val.length; i++) { callback(node, key + "[" + i + "]", val[i]); } } validator.each = callback; return validator; } function assertOneOf() { for ( var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++ ) { values[_key] = arguments[_key]; } function validate(node, key, val) { if (values.indexOf(val) < 0) { throw new TypeError( "Property " + key + " expected value to be one of " + JSON.stringify(values) + " but got " + JSON.stringify(val) ); } } validate.oneOf = values; return validate; } function assertNodeType() { for ( var _len2 = arguments.length, types = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++ ) { types[_key2] = arguments[_key2]; } function validate(node, key, val) { var valid = false; for (var _i = 0; _i < types.length; _i++) { var type = types[_i]; if ((0, _is.default)(type, val)) { valid = true; break; } } if (!valid) { throw new TypeError( "Property " + key + " of " + node.type + " expected node to be of a type " + JSON.stringify(types) + " " + ("but instead got " + JSON.stringify(val && val.type)) ); } } validate.oneOfNodeTypes = types; return validate; } function assertNodeOrValueType() { for ( var _len3 = arguments.length, types = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++ ) { types[_key3] = arguments[_key3]; } function validate(node, key, val) { var valid = false; for (var _i2 = 0; _i2 < types.length; _i2++) { var type = types[_i2]; if ( getType(val) === type || (0, _is.default)(type, val) ) { valid = true; break; } } if (!valid) { throw new TypeError( "Property " + key + " of " + node.type + " expected node to be of a type " + JSON.stringify(types) + " " + ("but instead got " + JSON.stringify(val && val.type)) ); } } validate.oneOfNodeOrValueTypes = types; return validate; } function assertValueType(type) { function validate(node, key, val) { var valid = getType(val) === type; if (!valid) { throw new TypeError( "Property " + key + " expected type of " + type + " but got " + getType(val) ); } } validate.type = type; return validate; } function chain() { for ( var _len4 = arguments.length, fns = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++ ) { fns[_key4] = arguments[_key4]; } function validate() { for (var _i3 = 0; _i3 < fns.length; _i3++) { var fn = fns[_i3]; fn.apply(void 0, arguments); } } validate.chainOf = fns; return validate; } function defineType(type, opts) { if (opts === void 0) { opts = {}; } var inherits = (opts.inherits && store[opts.inherits]) || {}; var fields = opts.fields || inherits.fields || {}; var visitor = opts.visitor || inherits.visitor || []; var aliases = opts.aliases || inherits.aliases || []; var builder = opts.builder || inherits.builder || opts.visitor || []; if (opts.deprecatedAlias) { DEPRECATED_KEYS[opts.deprecatedAlias] = type; } var _arr = visitor.concat(builder); for (var _i4 = 0; _i4 < _arr.length; _i4++) { var key = _arr[_i4]; fields[key] = fields[key] || {}; } for (var _key5 in fields) { var field = fields[_key5]; if (builder.indexOf(_key5) === -1) { field.optional = true; } if (field.default === undefined) { field.default = null; } else if (!field.validate) { field.validate = assertValueType( getType(field.default) ); } } VISITOR_KEYS[type] = opts.visitor = visitor; BUILDER_KEYS[type] = opts.builder = builder; NODE_FIELDS[type] = opts.fields = fields; ALIAS_KEYS[type] = opts.aliases = aliases; aliases.forEach(function(alias) { FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || []; FLIPPED_ALIAS_KEYS[alias].push(type); }); store[type] = opts; } var store = {}; /***/ }, /* 14 */ /***/ function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(25), getRawTag = __webpack_require__(277), objectToString = __webpack_require__(278); /** `Object#toString` result references. */ var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }, /* 15 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = exports.program = exports.expression = exports.statements = exports.statement = exports.smart = void 0; var formatters = _interopRequireWildcard( __webpack_require__(403) ); var _builder = _interopRequireDefault(__webpack_require__(404)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } var smart = (0, _builder.default)(formatters.smart); exports.smart = smart; var statement = (0, _builder.default)(formatters.statement); exports.statement = statement; var statements = (0, _builder.default)(formatters.statements); exports.statements = statements; var expression = (0, _builder.default)(formatters.expression); exports.expression = expression; var program = (0, _builder.default)(formatters.program); exports.program = program; var _default = Object.assign(smart.bind(undefined), { smart: smart, statement: statement, statements: statements, expression: expression, program: program, ast: smart.ast }); exports.default = _default; /***/ }, /* 16 */ /***/ function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */ (function(global) { // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js // original notice: /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ function compare(a, b) { if (a === b) { return 0; } var x = a.length; var y = b.length; for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i]; y = b[i]; break; } } if (x < y) { return -1; } if (y < x) { return 1; } return 0; } function isBuffer(b) { if ( global.Buffer && typeof global.Buffer.isBuffer === "function" ) { return global.Buffer.isBuffer(b); } return !!(b != null && b._isBuffer); } // based on node assert, original notice: // http://wiki.commonjs.org/wiki/Unit_Testing/1.0 // // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! // // Originally from narwhal.js (http://narwhaljs.org) // Copyright (c) 2009 Thomas Robinson <280north.com> // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the 'Software'), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var util = __webpack_require__(195); var hasOwn = Object.prototype.hasOwnProperty; var pSlice = Array.prototype.slice; var functionsHaveNames = (function() { return function foo() {}.name === "foo"; })(); function pToString(obj) { return Object.prototype.toString.call(obj); } function isView(arrbuf) { if (isBuffer(arrbuf)) { return false; } if (typeof global.ArrayBuffer !== "function") { return false; } if (typeof ArrayBuffer.isView === "function") { return ArrayBuffer.isView(arrbuf); } if (!arrbuf) { return false; } if (arrbuf instanceof DataView) { return true; } if ( arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer ) { return true; } return false; } // 1. The assert module provides functions that throw // AssertionError's when particular conditions are not met. The // assert module must conform to the following interface. var assert = (module.exports = ok); // 2. The AssertionError is defined in assert. // new assert.AssertionError({ message: message, // actual: actual, // expected: expected }) var regex = /\s*function\s+([^\(\s]*)\s*/; // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js function getName(func) { if (!util.isFunction(func)) { return; } if (functionsHaveNames) { return func.name; } var str = func.toString(); var match = str.match(regex); return match && match[1]; } assert.AssertionError = function AssertionError(options) { this.name = "AssertionError"; this.actual = options.actual; this.expected = options.expected; this.operator = options.operator; if (options.message) { this.message = options.message; this.generatedMessage = false; } else { this.message = getMessage(this); this.generatedMessage = true; } var stackStartFunction = options.stackStartFunction || fail; if (Error.captureStackTrace) { Error.captureStackTrace(this, stackStartFunction); } else { // non v8 browsers so we can have a stacktrace var err = new Error(); if (err.stack) { var out = err.stack; // try to strip useless frames var fn_name = getName(stackStartFunction); var idx = out.indexOf("\n" + fn_name); if (idx >= 0) { // once we have located the function frame // we need to strip out everything before it (and its line) var next_line = out.indexOf("\n", idx + 1); out = out.substring(next_line + 1); } this.stack = out; } } }; // assert.AssertionError instanceof Error util.inherits(assert.AssertionError, Error); function truncate(s, n) { if (typeof s === "string") { return s.length < n ? s : s.slice(0, n); } else { return s; } } function inspect(something) { if (functionsHaveNames || !util.isFunction(something)) { return util.inspect(something); } var rawname = getName(something); var name = rawname ? ": " + rawname : ""; return "[Function" + name + "]"; } function getMessage(self) { return ( truncate(inspect(self.actual), 128) + " " + self.operator + " " + truncate(inspect(self.expected), 128) ); } // At present only the three keys mentioned above are used and // understood by the spec. Implementations or sub modules can pass // other keys to the AssertionError's constructor - they will be // ignored. // 3. All of the following functions must throw an AssertionError // when a corresponding condition is not met, with a message that // may be undefined if not provided. All assertion methods provide // both the actual and expected values to the assertion error for // display purposes. function fail( actual, expected, message, operator, stackStartFunction ) { throw new assert.AssertionError({ message: message, actual: actual, expected: expected, operator: operator, stackStartFunction: stackStartFunction }); } // EXTENSION! allows for well behaved errors defined elsewhere. assert.fail = fail; // 4. Pure assertion tests whether a value is truthy, as determined // by !!guard. // assert.ok(guard, message_opt); // This statement is equivalent to assert.equal(true, !!guard, // message_opt);. To test strictly for the value true, use // assert.strictEqual(true, guard, message_opt);. function ok(value, message) { if (!value) fail(value, true, message, "==", assert.ok); } assert.ok = ok; // 5. The equality assertion tests shallow, coercive equality with // ==. // assert.equal(actual, expected, message_opt); assert.equal = function equal(actual, expected, message) { if (actual != expected) fail(actual, expected, message, "==", assert.equal); }; // 6. The non-equality assertion tests for whether two objects are not equal // with != assert.notEqual(actual, expected, message_opt); assert.notEqual = function notEqual( actual, expected, message ) { if (actual == expected) { fail( actual, expected, message, "!=", assert.notEqual ); } }; // 7. The equivalence assertion tests a deep equality relation. // assert.deepEqual(actual, expected, message_opt); assert.deepEqual = function deepEqual( actual, expected, message ) { if (!_deepEqual(actual, expected, false)) { fail( actual, expected, message, "deepEqual", assert.deepEqual ); } }; assert.deepStrictEqual = function deepStrictEqual( actual, expected, message ) { if (!_deepEqual(actual, expected, true)) { fail( actual, expected, message, "deepStrictEqual", assert.deepStrictEqual ); } }; function _deepEqual(actual, expected, strict, memos) { // 7.1. All identical values are equivalent, as determined by ===. if (actual === expected) { return true; } else if (isBuffer(actual) && isBuffer(expected)) { return compare(actual, expected) === 0; // 7.2. If the expected value is a Date object, the actual value is // equivalent if it is also a Date object that refers to the same time. } else if ( util.isDate(actual) && util.isDate(expected) ) { return actual.getTime() === expected.getTime(); // 7.3 If the expected value is a RegExp object, the actual value is // equivalent if it is also a RegExp object with the same source and // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). } else if ( util.isRegExp(actual) && util.isRegExp(expected) ) { return ( actual.source === expected.source && actual.global === expected.global && actual.multiline === expected.multiline && actual.lastIndex === expected.lastIndex && actual.ignoreCase === expected.ignoreCase ); // 7.4. Other pairs that do not both pass typeof value == 'object', // equivalence is determined by ==. } else if ( (actual === null || typeof actual !== "object") && (expected === null || typeof expected !== "object") ) { return strict ? actual === expected : actual == expected; // If both values are instances of typed arrays, wrap their underlying // ArrayBuffers in a Buffer each to increase performance // This optimization requires the arrays to have the same type as checked by // Object.prototype.toString (aka pToString). Never perform binary // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their // bit patterns are not identical. } else if ( isView(actual) && isView(expected) && pToString(actual) === pToString(expected) && !( actual instanceof Float32Array || actual instanceof Float64Array ) ) { return ( compare( new Uint8Array(actual.buffer), new Uint8Array(expected.buffer) ) === 0 ); // 7.5 For all other Object pairs, including Array objects, equivalence is // determined by having the same number of owned properties (as verified // with Object.prototype.hasOwnProperty.call), the same set of keys // (although not necessarily the same order), equivalent values for every // corresponding key, and an identical 'prototype' property. Note: this // accounts for both named and indexed properties on Arrays. } else if (isBuffer(actual) !== isBuffer(expected)) { return false; } else { memos = memos || { actual: [], expected: [] }; var actualIndex = memos.actual.indexOf(actual); if (actualIndex !== -1) { if ( actualIndex === memos.expected.indexOf(expected) ) { return true; } } memos.actual.push(actual); memos.expected.push(expected); return objEquiv(actual, expected, strict, memos); } } function isArguments(object) { return ( Object.prototype.toString.call(object) == "[object Arguments]" ); } function objEquiv(a, b, strict, actualVisitedObjects) { if ( a === null || a === undefined || b === null || b === undefined ) return false; // if one is a primitive, the other must be same if (util.isPrimitive(a) || util.isPrimitive(b)) return a === b; if ( strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b) ) return false; var aIsArgs = isArguments(a); var bIsArgs = isArguments(b); if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) return false; if (aIsArgs) { a = pSlice.call(a); b = pSlice.call(b); return _deepEqual(a, b, strict); } var ka = objectKeys(a); var kb = objectKeys(b); var key, i; // having the same number of owned properties (keys incorporates // hasOwnProperty) if (ka.length !== kb.length) return false; //the same set of keys (although not necessarily the same order), ka.sort(); kb.sort(); //~~~cheap key test for (i = ka.length - 1; i >= 0; i--) { if (ka[i] !== kb[i]) return false; } //equivalent values for every corresponding key, and //~~~possibly expensive deep test for (i = ka.length - 1; i >= 0; i--) { key = ka[i]; if ( !_deepEqual( a[key], b[key], strict, actualVisitedObjects ) ) return false; } return true; } // 8. The non-equivalence assertion tests for any deep inequality. // assert.notDeepEqual(actual, expected, message_opt); assert.notDeepEqual = function notDeepEqual( actual, expected, message ) { if (_deepEqual(actual, expected, false)) { fail( actual, expected, message, "notDeepEqual", assert.notDeepEqual ); } }; assert.notDeepStrictEqual = notDeepStrictEqual; function notDeepStrictEqual(actual, expected, message) { if (_deepEqual(actual, expected, true)) { fail( actual, expected, message, "notDeepStrictEqual", notDeepStrictEqual ); } } // 9. The strict equality assertion tests strict equality, as determined by ===. // assert.strictEqual(actual, expected, message_opt); assert.strictEqual = function strictEqual( actual, expected, message ) { if (actual !== expected) { fail( actual, expected, message, "===", assert.strictEqual ); } }; // 10. The strict non-equality assertion tests for strict inequality, as // determined by !==. assert.notStrictEqual(actual, expected, message_opt); assert.notStrictEqual = function notStrictEqual( actual, expected, message ) { if (actual === expected) { fail( actual, expected, message, "!==", assert.notStrictEqual ); } }; function expectedException(actual, expected) { if (!actual || !expected) { return false; } if ( Object.prototype.toString.call(expected) == "[object RegExp]" ) { return expected.test(actual); } try { if (actual instanceof expected) { return true; } } catch (e) { // Ignore. The instanceof check doesn't work for arrow functions. } if (Error.isPrototypeOf(expected)) { return false; } return expected.call({}, actual) === true; } function _tryBlock(block) { var error; try { block(); } catch (e) { error = e; } return error; } function _throws(shouldThrow, block, expected, message) { var actual; if (typeof block !== "function") { throw new TypeError( "\"block\" argument must be a function" ); } if (typeof expected === "string") { message = expected; expected = null; } actual = _tryBlock(block); message = (expected && expected.name ? " (" + expected.name + ")." : ".") + (message ? " " + message : "."); if (shouldThrow && !actual) { fail( actual, expected, "Missing expected exception" + message ); } var userProvidedMessage = typeof message === "string"; var isUnwantedException = !shouldThrow && util.isError(actual); var isUnexpectedException = !shouldThrow && actual && !expected; if ( (isUnwantedException && userProvidedMessage && expectedException(actual, expected)) || isUnexpectedException ) { fail( actual, expected, "Got unwanted exception" + message ); } if ( (shouldThrow && actual && expected && !expectedException(actual, expected)) || (!shouldThrow && actual) ) { throw actual; } } // 11. Expected to throw an error: // assert.throws(block, Error_opt, message_opt); assert.throws = function( block, /*optional*/ error, /*optional*/ message ) { _throws(true, block, error, message); }; // EXTENSION! This is annoying to write outside this module. assert.doesNotThrow = function( block, /*optional*/ error, /*optional*/ message ) { _throws(false, block, error, message); }; assert.ifError = function(err) { if (err) throw err; }; var objectKeys = Object.keys || function(obj) { var keys = []; for (var key in obj) { if (hasOwn.call(obj, key)) keys.push(key); } return keys; }; /* WEBPACK VAR INJECTION */ }.call(exports, __webpack_require__(19))); /***/ }, /* 17 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = void 0; var STATEMENT_OR_BLOCK_KEYS = [ "consequent", "body", "alternate" ]; exports.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS; var FLATTENABLE_KEYS = ["body", "expressions"]; exports.FLATTENABLE_KEYS = FLATTENABLE_KEYS; var FOR_INIT_KEYS = ["left", "init"]; exports.FOR_INIT_KEYS = FOR_INIT_KEYS; var COMMENT_KEYS = [ "leadingComments", "trailingComments", "innerComments" ]; exports.COMMENT_KEYS = COMMENT_KEYS; var LOGICAL_OPERATORS = ["||", "&&", "??"]; exports.LOGICAL_OPERATORS = LOGICAL_OPERATORS; var UPDATE_OPERATORS = ["++", "--"]; exports.UPDATE_OPERATORS = UPDATE_OPERATORS; var BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="]; exports.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS; var EQUALITY_BINARY_OPERATORS = ["==", "===", "!=", "!=="]; exports.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS; var COMPARISON_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS.concat( ["in", "instanceof"] ); exports.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS; var BOOLEAN_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS.concat( BOOLEAN_NUMBER_BINARY_OPERATORS ); exports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS; var NUMBER_BINARY_OPERATORS = [ "-", "/", "%", "*", "**", "&", "|", ">>", ">>>", "<<", "^" ]; exports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS; var BINARY_OPERATORS = ["+"].concat( NUMBER_BINARY_OPERATORS, BOOLEAN_BINARY_OPERATORS ); exports.BINARY_OPERATORS = BINARY_OPERATORS; var BOOLEAN_UNARY_OPERATORS = ["delete", "!"]; exports.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS; var NUMBER_UNARY_OPERATORS = ["+", "-", "~"]; exports.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS; var STRING_UNARY_OPERATORS = ["typeof"]; exports.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS; var UNARY_OPERATORS = ["void", "throw"].concat( BOOLEAN_UNARY_OPERATORS, NUMBER_UNARY_OPERATORS, STRING_UNARY_OPERATORS ); exports.UNARY_OPERATORS = UNARY_OPERATORS; var INHERIT_KEYS = { optional: [ "typeAnnotation", "typeParameters", "returnType" ], force: ["start", "loc", "end"] }; exports.INHERIT_KEYS = INHERIT_KEYS; var BLOCK_SCOPED_SYMBOL = Symbol.for( "var used to be block scoped" ); exports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL; var NOT_LOCAL_BINDING = Symbol.for( "should not be considered a local binding" ); exports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING; /***/ }, /* 18 */ /***/ function(module, exports, __webpack_require__) { var baseIsNative = __webpack_require__(276), getValue = __webpack_require__(281); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; /***/ }, /* 19 */ /***/ function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || Function("return this")() || (1, eval)("this"); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }, /* 20 */ /***/ function(module, exports, __webpack_require__) { var assignValue = __webpack_require__(104), baseAssignValue = __webpack_require__(65); /** * Copies properties of `source` to `object`. * * @private * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer( object[key], source[key], key, object, source ) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } module.exports = copyObject; /***/ }, /* 21 */ /***/ function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(63), isLength = __webpack_require__(68); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return ( value != null && isLength(value.length) && !isFunction(value) ); } module.exports = isArrayLike; /***/ }, /* 22 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = _default; var _helperGetFunctionArity = _interopRequireDefault( __webpack_require__(402) ); var _template2 = _interopRequireDefault( __webpack_require__(15) ); var t = _interopRequireWildcard(__webpack_require__(2)); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var buildPropertyMethodAssignmentWrapper = (0, _template2.default)( "\n (function (FUNCTION_KEY) {\n function FUNCTION_ID() {\n return FUNCTION_KEY.apply(this, arguments);\n }\n\n FUNCTION_ID.toString = function () {\n return FUNCTION_KEY.toString();\n }\n\n return FUNCTION_ID;\n })(FUNCTION)\n" ); var buildGeneratorPropertyMethodAssignmentWrapper = (0, _template2.default)( "\n (function (FUNCTION_KEY) {\n function* FUNCTION_ID() {\n return yield* FUNCTION_KEY.apply(this, arguments);\n }\n\n FUNCTION_ID.toString = function () {\n return FUNCTION_KEY.toString();\n };\n\n return FUNCTION_ID;\n })(FUNCTION)\n" ); var visitor = { "ReferencedIdentifier|BindingIdentifier": function ReferencedIdentifierBindingIdentifier( path, state ) { if (path.node.name !== state.name) return; var localDeclar = path.scope.getBindingIdentifier( state.name ); if (localDeclar !== state.outerDeclar) return; state.selfReference = true; path.stop(); } }; function wrap(state, method, id, scope) { if (state.selfReference) { if ( scope.hasBinding(id.name) && !scope.hasGlobal(id.name) ) { scope.rename(id.name); } else { if (!t.isFunction(method)) return; var build = buildPropertyMethodAssignmentWrapper; if (method.generator) { build = buildGeneratorPropertyMethodAssignmentWrapper; } var _template = build({ FUNCTION: method, FUNCTION_ID: id, FUNCTION_KEY: scope.generateUidIdentifier( id.name ) }).expression; var params = _template.callee.body.body[0].params; for ( var i = 0, len = (0, _helperGetFunctionArity.default)( method ); i < len; i++ ) { params.push(scope.generateUidIdentifier("x")); } return _template; } } method.id = id; scope.getProgramParent().references[id.name] = true; } function visit(node, name, scope) { var state = { selfAssignment: false, selfReference: false, outerDeclar: scope.getBindingIdentifier(name), references: [], name: name }; var binding = scope.getOwnBinding(name); if (binding) { if (binding.kind === "param") { state.selfReference = true; } else { } } else if (state.outerDeclar || scope.hasGlobal(name)) { scope.traverse(node, visitor, state); } return state; } function _default(_ref, localBinding) { var node = _ref.node, parent = _ref.parent, scope = _ref.scope, id = _ref.id; if (localBinding === void 0) { localBinding = false; } if (node.id) return; if ( (t.isObjectProperty(parent) || t.isObjectMethod(parent, { kind: "method" })) && (!parent.computed || t.isLiteral(parent.key)) ) { id = parent.key; } else if (t.isVariableDeclarator(parent)) { id = parent.id; if (t.isIdentifier(id) && !localBinding) { var binding = scope.parent.getBinding(id.name); if ( binding && binding.constant && scope.getBinding(id.name) === binding ) { node.id = id; node.id[t.NOT_LOCAL_BINDING] = true; return; } } } else if (t.isAssignmentExpression(parent)) { id = parent.left; } else if (!id) { return; } var name; if (id && t.isLiteral(id)) { name = id.value; } else if (id && t.isIdentifier(id)) { name = id.name; } else { return; } name = t.toBindingIdentifierName(name); id = t.identifier(name); id[t.NOT_LOCAL_BINDING] = true; var state = visit(node, name, scope); return wrap(state, node, id, scope) || node; } /***/ }, /* 23 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = void 0; var virtualTypes = _interopRequireWildcard( __webpack_require__(97) ); var _debug2 = _interopRequireDefault(__webpack_require__(140)); var _invariant = _interopRequireDefault( __webpack_require__(368) ); var _index = _interopRequireDefault(__webpack_require__(9)); var _scope = _interopRequireDefault(__webpack_require__(141)); var t = _interopRequireWildcard(__webpack_require__(2)); var _cache = __webpack_require__(50); var NodePath_ancestry = _interopRequireWildcard( __webpack_require__(386) ); var NodePath_inference = _interopRequireWildcard( __webpack_require__(387) ); var NodePath_replacement = _interopRequireWildcard( __webpack_require__(390) ); var NodePath_evaluation = _interopRequireWildcard( __webpack_require__(400) ); var NodePath_conversion = _interopRequireWildcard( __webpack_require__(401) ); var NodePath_introspection = _interopRequireWildcard( __webpack_require__(407) ); var NodePath_context = _interopRequireWildcard( __webpack_require__(408) ); var NodePath_removal = _interopRequireWildcard( __webpack_require__(409) ); var NodePath_modification = _interopRequireWildcard( __webpack_require__(411) ); var NodePath_family = _interopRequireWildcard( __webpack_require__(413) ); var NodePath_comments = _interopRequireWildcard( __webpack_require__(414) ); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } var _debug = (0, _debug2.default)("babel"); var NodePath = (function() { function NodePath(hub, parent) { this.parent = void 0; this.hub = void 0; this.contexts = void 0; this.data = void 0; this.shouldSkip = void 0; this.shouldStop = void 0; this.removed = void 0; this.state = void 0; this.opts = void 0; this.skipKeys = void 0; this.parentPath = void 0; this.context = void 0; this.container = void 0; this.listKey = void 0; this.inList = void 0; this.parentKey = void 0; this.key = void 0; this.node = void 0; this.scope = void 0; this.type = void 0; this.typeAnnotation = void 0; this.parent = parent; this.hub = hub; this.contexts = []; this.data = {}; this.shouldSkip = false; this.shouldStop = false; this.removed = false; this.state = null; this.opts = null; this.skipKeys = null; this.parentPath = null; this.context = null; this.container = null; this.listKey = null; this.inList = false; this.parentKey = null; this.key = null; this.node = null; this.scope = null; this.type = null; this.typeAnnotation = null; } NodePath.get = function get(_ref) { var hub = _ref.hub, parentPath = _ref.parentPath, parent = _ref.parent, container = _ref.container, listKey = _ref.listKey, key = _ref.key; if (!hub && parentPath) { hub = parentPath.hub; } (0, _invariant.default)( parent, "To get a node path the parent needs to exist" ); var targetNode = container[key]; var paths = _cache.path.get(parent) || []; if (!_cache.path.has(parent)) { _cache.path.set(parent, paths); } var path; for (var i = 0; i < paths.length; i++) { var pathCheck = paths[i]; if (pathCheck.node === targetNode) { path = pathCheck; break; } } if (!path) { path = new NodePath(hub, parent); paths.push(path); } path.setup(parentPath, container, listKey, key); return path; }; var _proto = NodePath.prototype; _proto.getScope = function getScope(scope) { return this.isScope() ? new _scope.default(this) : scope; }; _proto.setData = function setData(key, val) { return (this.data[key] = val); }; _proto.getData = function getData(key, def) { var val = this.data[key]; if (!val && def) val = this.data[key] = def; return val; }; _proto.buildCodeFrameError = function buildCodeFrameError( msg, Error ) { if (Error === void 0) { Error = SyntaxError; } return this.hub.file.buildCodeFrameError( this.node, msg, Error ); }; _proto.traverse = function traverse(visitor, state) { (0, _index.default)( this.node, visitor, this.scope, state, this ); }; _proto.set = function set(key, node) { t.validate(this.node, key, node); this.node[key] = node; }; _proto.getPathLocation = function getPathLocation() { var parts = []; var path = this; do { var key = path.key; if (path.inList) key = path.listKey + "[" + key + "]"; parts.unshift(key); } while ((path = path.parentPath)); return parts.join("."); }; _proto.debug = function debug(message) { if (!_debug.enabled) return; _debug( this.getPathLocation() + " " + this.type + ": " + message ); }; return NodePath; })(); exports.default = NodePath; Object.assign( NodePath.prototype, NodePath_ancestry, NodePath_inference, NodePath_replacement, NodePath_evaluation, NodePath_conversion, NodePath_introspection, NodePath_context, NodePath_removal, NodePath_modification, NodePath_family, NodePath_comments ); var _loop = function _loop(type) { var typeKey = "is" + type; NodePath.prototype[typeKey] = function(opts) { return t[typeKey](this.node, opts); }; NodePath.prototype["assert" + type] = function(opts) { if (!this[typeKey](opts)) { throw new TypeError( "Expected node path of type " + type ); } }; }; var _arr = t.TYPES; for (var _i = 0; _i < _arr.length; _i++) { var type = _arr[_i]; _loop(type); } var _loop2 = function _loop2(type) { if (type[0] === "_") return "continue"; if (t.TYPES.indexOf(type) < 0) t.TYPES.push(type); var virtualType = virtualTypes[type]; NodePath.prototype["is" + type] = function(opts) { return virtualType.checkPath(this, opts); }; }; for (var type in virtualTypes) { var _ret = _loop2(type); if (_ret === "continue") continue; } /***/ }, /* 24 */ /***/ function(module, exports) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return ( value === other || (value !== value && other !== other) ); } module.exports = eq; /***/ }, /* 25 */ /***/ function(module, exports, __webpack_require__) { var root = __webpack_require__(6); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; /***/ }, /* 26 */ /***/ function(module, exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(106), baseKeys = __webpack_require__(300), isArrayLike = __webpack_require__(21); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; /***/ }, /* 27 */ /***/ function(module, exports) { module.exports = function(module) { if (!module.webpackPolyfill) { module.deprecate = function() {}; module.paths = []; // module.parent = undefined by default if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function get() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function get() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }, /* 28 */ /***/ function(module, exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(106), baseKeysIn = __webpack_require__(303), isArrayLike = __webpack_require__(21); /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } module.exports = keysIn; /***/ }, /* 29 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = loadConfig; var _path = _interopRequireDefault(__webpack_require__(8)); var context = _interopRequireWildcard(__webpack_require__(1)); var _plugin = _interopRequireDefault(__webpack_require__(468)); var _merge = _interopRequireDefault(__webpack_require__(469)); var _configChain = __webpack_require__(474); var _traverse = _interopRequireDefault(__webpack_require__(9)); var _clone = _interopRequireDefault(__webpack_require__(61)); var _caching = __webpack_require__(86); var _environment = __webpack_require__(169); var _options = __webpack_require__(173); var _plugins = __webpack_require__(511); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function loadConfig(inputOpts) { if ( inputOpts != null && (typeof inputOpts !== "object" || Array.isArray(inputOpts)) ) { throw new Error( "Babel options must be an object, null, or undefined" ); } var args = inputOpts ? (0, _options.validate)("arguments", inputOpts) : {}; var _args$envName = args.envName, envName = _args$envName === void 0 ? (0, _environment.getEnv)() : _args$envName, _args$cwd = args.cwd, cwd = _args$cwd === void 0 ? "." : _args$cwd; var absoluteCwd = _path.default.resolve(cwd); var configChain = (0, _configChain.buildRootChain)( absoluteCwd, args, envName ); if (!configChain) return null; var optionDefaults = {}; var options = {}; var passes = [[]]; try { (function recurseDescriptors(config, pass, envName) { var plugins = config.plugins.map(function( descriptor ) { return loadPluginDescriptor( descriptor, envName ); }); var presets = config.presets.map(function( descriptor ) { return { preset: loadPresetDescriptor( descriptor, envName ), pass: descriptor.ownPass ? [] : pass }; }); if (presets.length > 0) { passes.splice.apply( passes, [1, 0].concat( presets .map(function(o) { return o.pass; }) .filter(function(p) { return p !== pass; }) ) ); for ( var _iterator = presets, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ; ) { var _ref2; if (_isArray) { if (_i >= _iterator.length) break; _ref2 = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref2 = _i.value; } var _ref3 = _ref2; var _preset = _ref3.preset, _pass2 = _ref3.pass; recurseDescriptors( { plugins: _preset.plugins, presets: _preset.presets }, _pass2, envName ); _preset.options.forEach(function(opts) { (0, _merge.default)(optionDefaults, opts); }); } } if (plugins.length > 0) { pass.unshift.apply(pass, plugins); } })( { plugins: configChain.plugins, presets: configChain.presets }, passes[0], envName ); configChain.options.forEach(function(opts) { (0, _merge.default)(options, opts); }); } catch (e) { if (!/^\[BABEL\]/.test(e.message)) { e.message = "[BABEL] " + (args.filename || "unknown") + ": " + e.message; } throw e; } var opts = (0, _merge.default)(optionDefaults, options); opts.babelrc = false; opts.plugins = passes[0]; opts.presets = passes .slice(1) .filter(function(plugins) { return plugins.length > 0; }) .map(function(plugins) { return { plugins: plugins }; }); opts.passPerPreset = opts.presets.length > 0; opts.envName = envName; opts.cwd = absoluteCwd; return { options: opts, passes: passes }; } var loadDescriptor = (0, _caching.makeWeakCache)(function( _ref4, cache ) { var value = _ref4.value, options = _ref4.options, dirname = _ref4.dirname, alias = _ref4.alias; if (options === false) throw new Error("Assertion failure"); options = options || {}; var item = value; if (typeof value === "function") { var api = Object.assign(Object.create(context), { cache: cache.simple(), env: function env() { return cache.using(function(data) { return data.envName; }); }, async: function async() { return false; } }); try { item = value(api, options, dirname); } catch (e) { if (alias) { e.message += " (While processing: " + JSON.stringify(alias) + ")"; } throw e; } } if (!item || typeof item !== "object") { throw new Error( "Plugin/Preset did not return an object." ); } if (typeof item.then === "function") { throw new Error( "You appear to be using an async plugin, " + "which your current version of Babel does not support." + "If you're using a published plugin, " + "you may need to upgrade your @babel/core version." ); } return { value: item, options: options, dirname: dirname, alias: alias }; }); function loadPluginDescriptor(descriptor, envName) { if (descriptor.value instanceof _plugin.default) { if (descriptor.options) { throw new Error( "Passed options to an existing Plugin instance will not work." ); } return descriptor.value; } return instantiatePlugin( loadDescriptor(descriptor, { envName: envName }), { envName: envName } ); } var instantiatePlugin = (0, _caching.makeWeakCache)(function( _ref5, cache ) { var value = _ref5.value, options = _ref5.options, dirname = _ref5.dirname, alias = _ref5.alias; var pluginObj = (0, _plugins.validatePluginObject)(value); var plugin = Object.assign({}, pluginObj); if (plugin.visitor) { plugin.visitor = _traverse.default.explode( (0, _clone.default)(plugin.visitor) ); } if (plugin.inherits) { var inheritsDescriptor = { name: undefined, alias: alias + "$inherits", value: plugin.inherits, options: options, dirname: dirname }; var inherits = cache.invalidate(function(data) { return loadPluginDescriptor( inheritsDescriptor, data.envName ); }); plugin.pre = chain(inherits.pre, plugin.pre); plugin.post = chain(inherits.post, plugin.post); plugin.manipulateOptions = chain( inherits.manipulateOptions, plugin.manipulateOptions ); plugin.visitor = _traverse.default.visitors.merge([ inherits.visitor || {}, plugin.visitor || {} ]); } return new _plugin.default(plugin, options, alias); }); var loadPresetDescriptor = function loadPresetDescriptor( descriptor, envName ) { return (0, _configChain.buildPresetChain)( instantiatePreset( loadDescriptor(descriptor, { envName: envName }) ) ); }; var instantiatePreset = (0, _caching.makeWeakCache)(function( _ref6 ) { var value = _ref6.value, dirname = _ref6.dirname, alias = _ref6.alias; return { options: (0, _options.validate)("preset", value), alias: alias, dirname: dirname }; }); function chain(a, b) { var fns = [a, b].filter(Boolean); if (fns.length <= 1) return fns[0]; return function() { for ( var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++ ) { args[_key] = arguments[_key]; } for ( var _iterator2 = fns, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); ; ) { var _ref7; if (_isArray2) { if (_i2 >= _iterator2.length) break; _ref7 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) break; _ref7 = _i2.value; } var _fn = _ref7; _fn.apply(this, args); } }; } /***/ }, /* 30 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.wrapWithTypes = wrapWithTypes; exports.getTypes = getTypes; exports.runtimeProperty = runtimeProperty; exports.isReference = isReference; exports.replaceWithOrRemove = replaceWithOrRemove; /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var currentTypes = null; function wrapWithTypes(types, fn) { return function() { var oldTypes = currentTypes; currentTypes = types; try { for ( var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++ ) { args[_key] = arguments[_key]; } return fn.apply(this, args); } finally { currentTypes = oldTypes; } }; } function getTypes() { return currentTypes; } function runtimeProperty(name) { var t = getTypes(); return t.memberExpression( t.identifier("regeneratorRuntime"), t.identifier(name), false ); } function isReference(path) { return ( path.isReferenced() || path.parentPath.isAssignmentExpression({ left: path.node }) ); } function replaceWithOrRemove(path, replacement) { if (replacement) { path.replaceWith(replacement); } else { path.remove(); } } /***/ }, /* 31 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = isValidIdentifier; var _esutils = _interopRequireDefault(__webpack_require__(59)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isValidIdentifier(name) { if ( typeof name !== "string" || _esutils.default.keyword.isReservedWordES6(name, true) ) { return false; } else if (name === "await") { return false; } else { return _esutils.default.keyword.isIdentifierNameES6( name ); } } /***/ }, /* 32 */ /***/ function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(14), isObjectLike = __webpack_require__(11); /** `Object#toString` result references. */ var symbolTag = "[object Symbol]"; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return ( typeof value == "symbol" || (isObjectLike(value) && baseGetTag(value) == symbolTag) ); } module.exports = isSymbol; /***/ }, /* 33 */ /***/ function(module, exports) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }, /* 34 */ /***/ function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors * Licensed under the New BSD license. See LICENSE or: * http://opensource.org/licenses/BSD-3-Clause */ /** * This is a helper function for getting values from parameter/options * objects. * * @param args The object we are extracting values from * @param name The name of the property we are getting. * @param defaultValue An optional value to return if the property is missing * from the object. If this is not specified and the property is missing, an * error will be thrown. */ function getArg(aArgs, aName, aDefaultValue) { if (aName in aArgs) { return aArgs[aName]; } else if (arguments.length === 3) { return aDefaultValue; } else { throw new Error( "\"" + aName + "\" is a required argument." ); } } exports.getArg = getArg; var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; var dataUrlRegexp = /^data:.+\,.+$/; function urlParse(aUrl) { var match = aUrl.match(urlRegexp); if (!match) { return null; } return { scheme: match[1], auth: match[2], host: match[3], port: match[4], path: match[5] }; } exports.urlParse = urlParse; function urlGenerate(aParsedUrl) { var url = ""; if (aParsedUrl.scheme) { url += aParsedUrl.scheme + ":"; } url += "//"; if (aParsedUrl.auth) { url += aParsedUrl.auth + "@"; } if (aParsedUrl.host) { url += aParsedUrl.host; } if (aParsedUrl.port) { url += ":" + aParsedUrl.port; } if (aParsedUrl.path) { url += aParsedUrl.path; } return url; } exports.urlGenerate = urlGenerate; /** * Normalizes a path, or the path portion of a URL: * * - Replaces consecutive slashes with one slash. * - Removes unnecessary '.' parts. * - Removes unnecessary '/..' parts. * * Based on code in the Node.js 'path' core module. * * @param aPath The path or url to normalize. */ function normalize(aPath) { var path = aPath; var url = urlParse(aPath); if (url) { if (!url.path) { return aPath; } path = url.path; } var isAbsolute = exports.isAbsolute(path); var parts = path.split(/\/+/); for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { part = parts[i]; if (part === ".") { parts.splice(i, 1); } else if (part === "..") { up++; } else if (up > 0) { if (part === "") { // The first part is blank if the path is absolute. Trying to go // above the root is a no-op. Therefore we can remove all '..' parts // directly after the root. parts.splice(i + 1, up); up = 0; } else { parts.splice(i, 2); up--; } } } path = parts.join("/"); if (path === "") { path = isAbsolute ? "/" : "."; } if (url) { url.path = path; return urlGenerate(url); } return path; } exports.normalize = normalize; /** * Joins two paths/URLs. * * @param aRoot The root path or URL. * @param aPath The path or URL to be joined with the root. * * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a * scheme-relative URL: Then the scheme of aRoot, if any, is prepended * first. * - Otherwise aPath is a path. If aRoot is a URL, then its path portion * is updated with the result and aRoot is returned. Otherwise the result * is returned. * - If aPath is absolute, the result is aPath. * - Otherwise the two paths are joined with a slash. * - Joining for example 'http://' and 'www.example.com' is also supported. */ function join(aRoot, aPath) { if (aRoot === "") { aRoot = "."; } if (aPath === "") { aPath = "."; } var aPathUrl = urlParse(aPath); var aRootUrl = urlParse(aRoot); if (aRootUrl) { aRoot = aRootUrl.path || "/"; } // `join(foo, '//www.example.org')` if (aPathUrl && !aPathUrl.scheme) { if (aRootUrl) { aPathUrl.scheme = aRootUrl.scheme; } return urlGenerate(aPathUrl); } if (aPathUrl || aPath.match(dataUrlRegexp)) { return aPath; } // `join('http://', 'www.example.com')` if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { aRootUrl.host = aPath; return urlGenerate(aRootUrl); } var joined = aPath.charAt(0) === "/" ? aPath : normalize( aRoot.replace(/\/+$/, "") + "/" + aPath ); if (aRootUrl) { aRootUrl.path = joined; return urlGenerate(aRootUrl); } return joined; } exports.join = join; exports.isAbsolute = function(aPath) { return aPath.charAt(0) === "/" || !!aPath.match(urlRegexp); }; /** * Make a path relative to a URL or another path. * * @param aRoot The root path or URL. * @param aPath The path or URL to be made relative to aRoot. */ function relative(aRoot, aPath) { if (aRoot === "") { aRoot = "."; } aRoot = aRoot.replace(/\/$/, ""); // It is possible for the path to be above the root. In this case, simply // checking whether the root is a prefix of the path won't work. Instead, we // need to remove components from the root one by one, until either we find // a prefix that fits, or we run out of components to remove. var level = 0; while (aPath.indexOf(aRoot + "/") !== 0) { var index = aRoot.lastIndexOf("/"); if (index < 0) { return aPath; } // If the only part of the root that is left is the scheme (i.e. http://, // file:///, etc.), one or more slashes (/), or simply nothing at all, we // have exhausted all components, so the path is not relative to the root. aRoot = aRoot.slice(0, index); if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { return aPath; } ++level; } // Make sure we add a "../" for each component we removed from the root. return ( Array(level + 1).join("../") + aPath.substr(aRoot.length + 1) ); } exports.relative = relative; var supportsNullProto = (function() { var obj = Object.create(null); return !("__proto__" in obj); })(); function identity(s) { return s; } /** * Because behavior goes wacky when you set `__proto__` on objects, we * have to prefix all the strings in our set with an arbitrary character. * * See https://github.com/mozilla/source-map/pull/31 and * https://github.com/mozilla/source-map/issues/30 * * @param String aStr */ function toSetString(aStr) { if (isProtoString(aStr)) { return "$" + aStr; } return aStr; } exports.toSetString = supportsNullProto ? identity : toSetString; function fromSetString(aStr) { if (isProtoString(aStr)) { return aStr.slice(1); } return aStr; } exports.fromSetString = supportsNullProto ? identity : fromSetString; function isProtoString(s) { if (!s) { return false; } var length = s.length; if ( length < 9 /* "__proto__".length */ ) { return false; } if ( s.charCodeAt(length - 1) !== 95 || /* '_' */ s.charCodeAt(length - 2) !== 95 || /* '_' */ s.charCodeAt(length - 3) !== 111 || /* 'o' */ s.charCodeAt(length - 4) !== 116 || /* 't' */ s.charCodeAt(length - 5) !== 111 || /* 'o' */ s.charCodeAt(length - 6) !== 114 || /* 'r' */ s.charCodeAt(length - 7) !== 112 || /* 'p' */ s.charCodeAt(length - 8) !== 95 || /* '_' */ s.charCodeAt(length - 9) !== 95 /* '_' */ ) { return false; } for (var i = length - 10; i >= 0; i--) { if ( s.charCodeAt(i) !== 36 /* '$' */ ) { return false; } } return true; } /** * Comparator between two mappings where the original positions are compared. * * Optionally pass in `true` as `onlyCompareGenerated` to consider two * mappings with the same original source/line/column, but different generated * line and column the same. Useful when searching for a mapping with a * stubbed out mapping. */ function compareByOriginalPositions( mappingA, mappingB, onlyCompareOriginal ) { var cmp = mappingA.source - mappingB.source; if (cmp !== 0) { return cmp; } cmp = mappingA.originalLine - mappingB.originalLine; if (cmp !== 0) { return cmp; } cmp = mappingA.originalColumn - mappingB.originalColumn; if (cmp !== 0 || onlyCompareOriginal) { return cmp; } cmp = mappingA.generatedColumn - mappingB.generatedColumn; if (cmp !== 0) { return cmp; } cmp = mappingA.generatedLine - mappingB.generatedLine; if (cmp !== 0) { return cmp; } return mappingA.name - mappingB.name; } exports.compareByOriginalPositions = compareByOriginalPositions; /** * Comparator between two mappings with deflated source and name indices where * the generated positions are compared. * * Optionally pass in `true` as `onlyCompareGenerated` to consider two * mappings with the same generated line and column, but different * source/name/original line and column the same. Useful when searching for a * mapping with a stubbed out mapping. */ function compareByGeneratedPositionsDeflated( mappingA, mappingB, onlyCompareGenerated ) { var cmp = mappingA.generatedLine - mappingB.generatedLine; if (cmp !== 0) { return cmp; } cmp = mappingA.generatedColumn - mappingB.generatedColumn; if (cmp !== 0 || onlyCompareGenerated) { return cmp; } cmp = mappingA.source - mappingB.source; if (cmp !== 0) { return cmp; } cmp = mappingA.originalLine - mappingB.originalLine; if (cmp !== 0) { return cmp; } cmp = mappingA.originalColumn - mappingB.originalColumn; if (cmp !== 0) { return cmp; } return mappingA.name - mappingB.name; } exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; function strcmp(aStr1, aStr2) { if (aStr1 === aStr2) { return 0; } if (aStr1 > aStr2) { return 1; } return -1; } /** * Comparator between two mappings with inflated source and name strings where * the generated positions are compared. */ function compareByGeneratedPositionsInflated( mappingA, mappingB ) { var cmp = mappingA.generatedLine - mappingB.generatedLine; if (cmp !== 0) { return cmp; } cmp = mappingA.generatedColumn - mappingB.generatedColumn; if (cmp !== 0) { return cmp; } cmp = strcmp(mappingA.source, mappingB.source); if (cmp !== 0) { return cmp; } cmp = mappingA.originalLine - mappingB.originalLine; if (cmp !== 0) { return cmp; } cmp = mappingA.originalColumn - mappingB.originalColumn; if (cmp !== 0) { return cmp; } return strcmp(mappingA.name, mappingB.name); } exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; /***/ }, /* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = is; var _shallowEqual = _interopRequireDefault( __webpack_require__(100) ); var _isType = _interopRequireDefault(__webpack_require__(57)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function is(type, node, opts) { if (!node) return false; var matches = (0, _isType.default)(node.type, type); if (!matches) return false; if (typeof opts === "undefined") { return true; } else { return (0, _shallowEqual.default)(node, opts); } } /***/ }, /* 36 */ /***/ function(module, exports, __webpack_require__) { var ListCache = __webpack_require__(37), stackClear = __webpack_require__(271), stackDelete = __webpack_require__(272), stackGet = __webpack_require__(273), stackHas = __webpack_require__(274), stackSet = __webpack_require__(275); /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = (this.__data__ = new ListCache(entries)); this.size = data.size; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; module.exports = Stack; /***/ }, /* 37 */ /***/ function(module, exports, __webpack_require__) { var listCacheClear = __webpack_require__(266), listCacheDelete = __webpack_require__(267), listCacheGet = __webpack_require__(268), listCacheHas = __webpack_require__(269), listCacheSet = __webpack_require__(270); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; /***/ }, /* 38 */ /***/ function(module, exports, __webpack_require__) { var eq = __webpack_require__(24); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; /***/ }, /* 39 */ /***/ function(module, exports, __webpack_require__) { var getNative = __webpack_require__(18); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, "create"); module.exports = nativeCreate; /***/ }, /* 40 */ /***/ function(module, exports, __webpack_require__) { var isKeyable = __webpack_require__(290); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; } module.exports = getMapData; /***/ }, /* 41 */ /***/ function(module, exports, __webpack_require__) { var baseIsArguments = __webpack_require__(297), isObjectLike = __webpack_require__(11); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments( (function() { return arguments; })() ) ? baseIsArguments : function(value) { return ( isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee") ); }; module.exports = isArguments; /***/ }, /* 42 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */ (function(module) { var root = __webpack_require__(6), stubFalse = __webpack_require__(298); /** Detect free variable `exports`. */ var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; /* WEBPACK VAR INJECTION */ }.call(exports, __webpack_require__(27)(module))); /***/ }, /* 43 */ /***/ function(module, exports) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; /***/ }, /* 44 */ /***/ function(module, exports) { /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } module.exports = setToArray; /***/ }, /* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = getBindingIdentifiers; var _generated = __webpack_require__(3); function getBindingIdentifiers(node, duplicates, outerOnly) { var search = [].concat(node); var ids = Object.create(null); while (search.length) { var id = search.shift(); if (!id) continue; var keys = getBindingIdentifiers.keys[id.type]; if ((0, _generated.isIdentifier)(id)) { if (duplicates) { var _ids = (ids[id.name] = ids[id.name] || []); _ids.push(id); } else { ids[id.name] = id; } continue; } if ((0, _generated.isExportDeclaration)(id)) { if ((0, _generated.isDeclaration)(id.declaration)) { search.push(id.declaration); } continue; } if (outerOnly) { if ((0, _generated.isFunctionDeclaration)(id)) { search.push(id.id); continue; } if ((0, _generated.isFunctionExpression)(id)) { continue; } } if (keys) { for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (id[key]) { search = search.concat(id[key]); } } } } return ids; } getBindingIdentifiers.keys = { DeclareClass: ["id"], DeclareFunction: ["id"], DeclareModule: ["id"], DeclareVariable: ["id"], InterfaceDeclaration: ["id"], TypeAlias: ["id"], OpaqueType: ["id"], CatchClause: ["param"], LabeledStatement: ["label"], UnaryExpression: ["argument"], AssignmentExpression: ["left"], ImportSpecifier: ["local"], ImportNamespaceSpecifier: ["local"], ImportDefaultSpecifier: ["local"], ImportDeclaration: ["specifiers"], ExportSpecifier: ["exported"], ExportNamespaceSpecifier: ["exported"], ExportDefaultSpecifier: ["exported"], FunctionDeclaration: ["id", "params"], FunctionExpression: ["id", "params"], ForInStatement: ["left"], ForOfStatement: ["left"], ClassDeclaration: ["id"], ClassExpression: ["id"], RestElement: ["argument"], UpdateExpression: ["argument"], ObjectProperty: ["value"], AssignmentPattern: ["left"], ArrayPattern: ["elements"], ObjectPattern: ["properties"], VariableDeclaration: ["declarations"], VariableDeclarator: ["id"] }; /***/ }, /* 46 */ /***/ function(module, exports, __webpack_require__) { var toFinite = __webpack_require__(370); /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } module.exports = toInteger; /***/ }, /* 47 */ /***/ function(module, exports, __webpack_require__) { var eq = __webpack_require__(24), isArrayLike = __webpack_require__(21), isIndex = __webpack_require__(66), isObject = __webpack_require__(7); /** * Checks if the given arguments are from an iteratee call. * * @private * @param {*} value The potential iteratee value argument. * @param {*} index The potential iteratee index or key argument. * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if ( type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object ) { return eq(object[index], value); } return false; } module.exports = isIterateeCall; /***/ }, /* 48 */ /***/ function(module, exports, __webpack_require__) { var identity = __webpack_require__(49), overRest = __webpack_require__(378), setToString = __webpack_require__(379); /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */ function baseRest(func, start) { return setToString( overRest(func, start, identity), func + "" ); } module.exports = baseRest; /***/ }, /* 49 */ /***/ function(module, exports) { /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity(value) { return value; } module.exports = identity; /***/ }, /* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.clear = clear; exports.clearPath = clearPath; exports.clearScope = clearScope; exports.scope = exports.path = void 0; var path = new WeakMap(); exports.path = path; var scope = new WeakMap(); exports.scope = scope; function clear() { clearPath(); clearScope(); } function clearPath() { exports.path = path = new WeakMap(); } function clearScope() { exports.scope = scope = new WeakMap(); } /***/ }, /* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */ (function(process) { exports.__esModule = true; exports.codeFrameColumns = codeFrameColumns; exports.default = _default; var _jsTokens = _interopRequireWildcard( __webpack_require__(391) ); var _esutils = _interopRequireDefault( __webpack_require__(59) ); var _chalk = _interopRequireDefault( __webpack_require__(392) ); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } var deprecationWarningShown = false; function getDefs(chalk) { return { keyword: chalk.cyan, capitalized: chalk.yellow, jsx_tag: chalk.yellow, punctuator: chalk.yellow, number: chalk.magenta, string: chalk.green, regex: chalk.magenta, comment: chalk.grey, invalid: chalk.white.bgRed.bold, gutter: chalk.grey, marker: chalk.red.bold }; } var NEWLINE = /\r\n|[\n\r\u2028\u2029]/; var JSX_TAG = /^[a-z][\w-]*$/i; var BRACKET = /^[()[\]{}]$/; function getTokenType(match) { var _match$slice = match.slice(-2), offset = _match$slice[0], text = _match$slice[1]; var token = (0, _jsTokens.matchToToken)(match); if (token.type === "name") { if ( _esutils.default.keyword.isReservedWordES6( token.value ) ) { return "keyword"; } if ( JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == ""), maybeHighlight(defs.gutter, gutter), line, markerLine ].join(""); } else { return ( " " + maybeHighlight(defs.gutter, gutter) + line ); } }) .join("\n"); if (highlighted) { return chalk.reset(frame); } else { return frame; } } function _default(rawLines, lineNumber, colNumber, opts) { if (opts === void 0) { opts = {}; } if (!deprecationWarningShown) { deprecationWarningShown = true; var deprecationError = new Error( "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`." ); deprecationError.name = "DeprecationWarning"; if (process.emitWarning) { process.emitWarning(deprecationError); } else { console.warn(deprecationError); } } colNumber = Math.max(colNumber, 0); var location = { start: { column: colNumber, line: lineNumber } }; return codeFrameColumns(rawLines, location, opts); } /* WEBPACK VAR INJECTION */ }.call(exports, __webpack_require__(12))); /***/ }, /* 52 */ /***/ function(module, exports, __webpack_require__) { var isSymbol = __webpack_require__(32); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == "string" || isSymbol(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -INFINITY ? "-0" : result; } module.exports = toKey; /***/ }, /* 53 */ /***/ function(module, exports) { /*! * is-extglob * * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ module.exports = function isExtglob(str) { return typeof str === "string" && /[@?!+*]\(/.test(str); }; /***/ }, /* 54 */ /***/ function(module, exports, __webpack_require__) { /*! * is-glob * * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ var isExtglob = __webpack_require__(53); module.exports = function isGlob(str) { return ( typeof str === "string" && (/[*!?{}(|)[\]]/.test(str) || isExtglob(str)) ); }; /***/ }, /* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.runAsync = runAsync; exports.runSync = runSync; var _traverse = _interopRequireDefault(__webpack_require__(9)); var _pluginPass = _interopRequireDefault( __webpack_require__(513) ); var _blockHoistPlugin = _interopRequireDefault( __webpack_require__(514) ); var _normalizeOpts = _interopRequireDefault( __webpack_require__(522) ); var _normalizeFile = _interopRequireDefault( __webpack_require__(523) ); var _generate = _interopRequireDefault( __webpack_require__(526) ); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function runAsync(config, code, ast, callback) { var result; try { result = runSync(config, code, ast); } catch (err) { return callback(err); } return callback(null, result); } function runSync(config, code, ast) { var file = (0, _normalizeFile.default)( config.passes, (0, _normalizeOpts.default)(config), code, ast ); transformFile(file, config.passes); var opts = file.opts; var _ref = opts.code !== false ? (0, _generate.default)(config.passes, file) : {}, outputCode = _ref.outputCode, outputMap = _ref.outputMap; return { metadata: file.metadata, options: opts, ast: opts.ast !== false ? file.ast : null, code: outputCode === undefined ? null : outputCode, map: outputMap === undefined ? null : outputMap }; } function transformFile(file, pluginPasses) { for ( var _iterator = pluginPasses, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ; ) { var _ref2; if (_isArray) { if (_i >= _iterator.length) break; _ref2 = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref2 = _i.value; } var _pluginPairs = _ref2; var passPairs = []; var passes = []; var visitors = []; for ( var _iterator2 = _pluginPairs.concat([ (0, _blockHoistPlugin.default)() ]), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator](); ; ) { var _ref3; if (_isArray2) { if (_i2 >= _iterator2.length) break; _ref3 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) break; _ref3 = _i2.value; } var _plugin3 = _ref3; var _pass2 = new _pluginPass.default( file, _plugin3.key, _plugin3.options ); passPairs.push([_plugin3, _pass2]); passes.push(_pass2); visitors.push(_plugin3.visitor); } for (var _i3 = 0; _i3 < passPairs.length; _i3++) { var _ref4 = passPairs[_i3]; var _plugin = _ref4[0]; var pass = _ref4[1]; var fn = _plugin.pre; if (fn) { var result = fn.call(pass, file); if (isThenable(result)) { throw new Error( "You appear to be using an plugin with an async .pre, " + "which your current version of Babel does not support." + "If you're using a published plugin, you may need to upgrade " + "your @babel/core version." ); } } } var visitor = _traverse.default.visitors.merge( visitors, passes, file.opts.wrapPluginVisitorMethod ); (0, _traverse.default)(file.ast, visitor, file.scope); for (var _i4 = 0; _i4 < passPairs.length; _i4++) { var _ref5 = passPairs[_i4]; var _plugin2 = _ref5[0]; var _pass = _ref5[1]; var fn = _plugin2.post; if (fn) { var _result = fn.call(_pass, file); if (isThenable(_result)) { throw new Error( "You appear to be using an plugin with an async .post, " + "which your current version of Babel does not support." + "If you're using a published plugin, you may need to upgrade " + "your @babel/core version." ); } } } } } function isThenable(val) { return ( !!val && (typeof val === "object" || typeof val === "function") && typeof val.then === "function" ); } /***/ }, /* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.is = is; exports.pullFlag = pullFlag; var _pull = _interopRequireDefault(__webpack_require__(214)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function is(node, flag) { return ( node.type === "RegExpLiteral" && node.flags.indexOf(flag) >= 0 ); } function pullFlag(node, flag) { var flags = node.flags.split(""); if (node.flags.indexOf(flag) < 0) return; (0, _pull.default)(flags, flag); node.flags = flags.join(""); } /***/ }, /* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = isType; var _definitions = __webpack_require__(10); function isType(nodeType, targetType) { if (nodeType === targetType) return true; if (_definitions.ALIAS_KEYS[targetType]) return false; var aliases = _definitions.FLIPPED_ALIAS_KEYS[targetType]; if (aliases) { if (aliases[0] === nodeType) return true; for ( var _iterator = aliases, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ; ) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var _alias = _ref; if (nodeType === _alias) return true; } } return false; } /***/ }, /* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.patternLikeCommon = exports.functionDeclarationCommon = exports.functionTypeAnnotationCommon = exports.functionCommon = void 0; var _isValidIdentifier = _interopRequireDefault( __webpack_require__(31) ); var _constants = __webpack_require__(17); var _utils = _interopRequireWildcard(__webpack_require__(13)); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _utils.default)("ArrayExpression", { fields: { elements: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeOrValueType)( "null", "Expression", "SpreadElement" ) ) ), default: [] } }, visitor: ["elements"], aliases: ["Expression"] }); (0, _utils.default)("AssignmentExpression", { fields: { operator: { validate: (0, _utils.assertValueType)("string") }, left: { validate: (0, _utils.assertNodeType)("LVal") }, right: { validate: (0, _utils.assertNodeType)("Expression") } }, builder: ["operator", "left", "right"], visitor: ["left", "right"], aliases: ["Expression"] }); (0, _utils.default)("BinaryExpression", { builder: ["operator", "left", "right"], fields: { operator: { validate: _utils.assertOneOf.apply( void 0, _constants.BINARY_OPERATORS ) }, left: { validate: (0, _utils.assertNodeType)("Expression") }, right: { validate: (0, _utils.assertNodeType)("Expression") } }, visitor: ["left", "right"], aliases: ["Binary", "Expression"] }); (0, _utils.default)("Directive", { visitor: ["value"], fields: { value: { validate: (0, _utils.assertNodeType)( "DirectiveLiteral" ) } } }); (0, _utils.default)("DirectiveLiteral", { builder: ["value"], fields: { value: { validate: (0, _utils.assertValueType)("string") } } }); (0, _utils.default)("BlockStatement", { builder: ["body", "directives"], visitor: ["directives", "body"], fields: { directives: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Directive") ) ), default: [] }, body: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Statement") ) ) } }, aliases: ["Scopable", "BlockParent", "Block", "Statement"] }); (0, _utils.default)("BreakStatement", { visitor: ["label"], fields: { label: { validate: (0, _utils.assertNodeType)("Identifier"), optional: true } }, aliases: [ "Statement", "Terminatorless", "CompletionStatement" ] }); (0, _utils.default)("CallExpression", { visitor: ["callee", "arguments", "typeParameters"], builder: ["callee", "arguments"], aliases: ["Expression"], fields: { callee: { validate: (0, _utils.assertNodeType)("Expression") }, arguments: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "Expression", "SpreadElement", "JSXNamespacedName" ) ) ) }, optional: { validate: (0, _utils.assertOneOf)(true, false), optional: true }, typeParameters: { validate: (0, _utils.assertNodeType)( "TypeParameterInstantiation", "TSTypeParameterInstantiation" ), optional: true } } }); (0, _utils.default)("CatchClause", { visitor: ["param", "body"], fields: { param: { validate: (0, _utils.assertNodeType)("Identifier"), optional: true }, body: { validate: (0, _utils.assertNodeType)( "BlockStatement" ) } }, aliases: ["Scopable", "BlockParent"] }); (0, _utils.default)("ConditionalExpression", { visitor: ["test", "consequent", "alternate"], fields: { test: { validate: (0, _utils.assertNodeType)("Expression") }, consequent: { validate: (0, _utils.assertNodeType)("Expression") }, alternate: { validate: (0, _utils.assertNodeType)("Expression") } }, aliases: ["Expression", "Conditional"] }); (0, _utils.default)("ContinueStatement", { visitor: ["label"], fields: { label: { validate: (0, _utils.assertNodeType)("Identifier"), optional: true } }, aliases: [ "Statement", "Terminatorless", "CompletionStatement" ] }); (0, _utils.default)("DebuggerStatement", { aliases: ["Statement"] }); (0, _utils.default)("DoWhileStatement", { visitor: ["test", "body"], fields: { test: { validate: (0, _utils.assertNodeType)("Expression") }, body: { validate: (0, _utils.assertNodeType)("Statement") } }, aliases: [ "Statement", "BlockParent", "Loop", "While", "Scopable" ] }); (0, _utils.default)("EmptyStatement", { aliases: ["Statement"] }); (0, _utils.default)("ExpressionStatement", { visitor: ["expression"], fields: { expression: { validate: (0, _utils.assertNodeType)("Expression") } }, aliases: ["Statement", "ExpressionWrapper"] }); (0, _utils.default)("File", { builder: ["program", "comments", "tokens"], visitor: ["program"], fields: { program: { validate: (0, _utils.assertNodeType)("Program") } } }); (0, _utils.default)("ForInStatement", { visitor: ["left", "right", "body"], aliases: [ "Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement" ], fields: { left: { validate: (0, _utils.assertNodeType)( "VariableDeclaration", "LVal" ) }, right: { validate: (0, _utils.assertNodeType)("Expression") }, body: { validate: (0, _utils.assertNodeType)("Statement") } } }); (0, _utils.default)("ForStatement", { visitor: ["init", "test", "update", "body"], aliases: [ "Scopable", "Statement", "For", "BlockParent", "Loop" ], fields: { init: { validate: (0, _utils.assertNodeType)( "VariableDeclaration", "Expression" ), optional: true }, test: { validate: (0, _utils.assertNodeType)("Expression"), optional: true }, update: { validate: (0, _utils.assertNodeType)("Expression"), optional: true }, body: { validate: (0, _utils.assertNodeType)("Statement") } } }); var functionCommon = { params: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("LVal") ) ) }, generator: { default: false, validate: (0, _utils.assertValueType)("boolean") }, async: { validate: (0, _utils.assertValueType)("boolean"), default: false } }; exports.functionCommon = functionCommon; var functionTypeAnnotationCommon = { returnType: { validate: (0, _utils.assertNodeType)( "TypeAnnotation", "TSTypeAnnotation", "Noop" ), optional: true }, typeParameters: { validate: (0, _utils.assertNodeType)( "TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop" ), optional: true } }; exports.functionTypeAnnotationCommon = functionTypeAnnotationCommon; var functionDeclarationCommon = Object.assign( {}, functionCommon, { declare: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, id: { validate: (0, _utils.assertNodeType)("Identifier"), optional: true } } ); exports.functionDeclarationCommon = functionDeclarationCommon; (0, _utils.default)("FunctionDeclaration", { builder: ["id", "params", "body", "generator", "async"], visitor: [ "id", "params", "body", "returnType", "typeParameters" ], fields: Object.assign( {}, functionDeclarationCommon, functionTypeAnnotationCommon, { body: { validate: (0, _utils.assertNodeType)( "BlockStatement" ) } } ), aliases: [ "Scopable", "Function", "BlockParent", "FunctionParent", "Statement", "Pureish", "Declaration" ] }); (0, _utils.default)("FunctionExpression", { inherits: "FunctionDeclaration", aliases: [ "Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish" ], fields: Object.assign( {}, functionCommon, functionTypeAnnotationCommon, { id: { validate: (0, _utils.assertNodeType)( "Identifier" ), optional: true }, body: { validate: (0, _utils.assertNodeType)( "BlockStatement" ) } } ) }); var patternLikeCommon = { typeAnnotation: { validate: (0, _utils.assertNodeType)( "TypeAnnotation", "TSTypeAnnotation", "Noop" ), optional: true }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ) } }; exports.patternLikeCommon = patternLikeCommon; (0, _utils.default)("Identifier", { builder: ["name"], visitor: ["typeAnnotation"], aliases: [ "Expression", "PatternLike", "LVal", "TSEntityName" ], fields: Object.assign({}, patternLikeCommon, { name: { validate: function validate(node, key, val) { if (!(0, _isValidIdentifier.default)(val)) { } } }, optional: { validate: (0, _utils.assertValueType)("boolean"), optional: true } }) }); (0, _utils.default)("IfStatement", { visitor: ["test", "consequent", "alternate"], aliases: ["Statement", "Conditional"], fields: { test: { validate: (0, _utils.assertNodeType)("Expression") }, consequent: { validate: (0, _utils.assertNodeType)("Statement") }, alternate: { optional: true, validate: (0, _utils.assertNodeType)("Statement") } } }); (0, _utils.default)("LabeledStatement", { visitor: ["label", "body"], aliases: ["Statement"], fields: { label: { validate: (0, _utils.assertNodeType)("Identifier") }, body: { validate: (0, _utils.assertNodeType)("Statement") } } }); (0, _utils.default)("StringLiteral", { builder: ["value"], fields: { value: { validate: (0, _utils.assertValueType)("string") } }, aliases: ["Expression", "Pureish", "Literal", "Immutable"] }); (0, _utils.default)("NumericLiteral", { builder: ["value"], deprecatedAlias: "NumberLiteral", fields: { value: { validate: (0, _utils.assertValueType)("number") } }, aliases: ["Expression", "Pureish", "Literal", "Immutable"] }); (0, _utils.default)("NullLiteral", { aliases: ["Expression", "Pureish", "Literal", "Immutable"] }); (0, _utils.default)("BooleanLiteral", { builder: ["value"], fields: { value: { validate: (0, _utils.assertValueType)("boolean") } }, aliases: ["Expression", "Pureish", "Literal", "Immutable"] }); (0, _utils.default)("RegExpLiteral", { builder: ["pattern", "flags"], deprecatedAlias: "RegexLiteral", aliases: ["Expression", "Literal"], fields: { pattern: { validate: (0, _utils.assertValueType)("string") }, flags: { validate: (0, _utils.assertValueType)("string"), default: "" } } }); (0, _utils.default)("LogicalExpression", { builder: ["operator", "left", "right"], visitor: ["left", "right"], aliases: ["Binary", "Expression"], fields: { operator: { validate: _utils.assertOneOf.apply( void 0, _constants.LOGICAL_OPERATORS ) }, left: { validate: (0, _utils.assertNodeType)("Expression") }, right: { validate: (0, _utils.assertNodeType)("Expression") } } }); (0, _utils.default)("MemberExpression", { builder: ["object", "property", "computed", "optional"], visitor: ["object", "property"], aliases: ["Expression", "LVal"], fields: { object: { validate: (0, _utils.assertNodeType)("Expression") }, property: { validate: (function() { var normal = (0, _utils.assertNodeType)( "Identifier" ); var computed = (0, _utils.assertNodeType)( "Expression" ); return function(node, key, val) { var validator = node.computed ? computed : normal; validator(node, key, val); }; })() }, computed: { default: false }, optional: { validate: (0, _utils.assertOneOf)(true, false), optional: true } } }); (0, _utils.default)("NewExpression", { inherits: "CallExpression" }); (0, _utils.default)("Program", { visitor: ["directives", "body"], builder: ["body", "directives", "sourceType"], fields: { sourceFile: { validate: (0, _utils.assertValueType)("string") }, sourceType: { validate: (0, _utils.assertOneOf)( "script", "module" ), default: "script" }, directives: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Directive") ) ), default: [] }, body: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Statement") ) ) } }, aliases: ["Scopable", "BlockParent", "Block"] }); (0, _utils.default)("ObjectExpression", { visitor: ["properties"], aliases: ["Expression"], fields: { properties: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "ObjectMethod", "ObjectProperty", "SpreadElement" ) ) ) } } }); (0, _utils.default)("ObjectMethod", { builder: ["kind", "key", "params", "body", "computed"], fields: Object.assign( {}, functionCommon, functionTypeAnnotationCommon, { kind: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)( "method", "get", "set" ) ), default: "method" }, computed: { validate: (0, _utils.assertValueType)( "boolean" ), default: false }, key: { validate: (function() { var normal = (0, _utils.assertNodeType)( "Identifier", "StringLiteral", "NumericLiteral" ); var computed = (0, _utils.assertNodeType)( "Expression" ); return function(node, key, val) { var validator = node.computed ? computed : normal; validator(node, key, val); }; })() }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ) }, body: { validate: (0, _utils.assertNodeType)( "BlockStatement" ) } } ), visitor: [ "key", "params", "body", "decorators", "returnType", "typeParameters" ], aliases: [ "UserWhitespacable", "Function", "Scopable", "BlockParent", "FunctionParent", "Method", "ObjectMember" ] }); (0, _utils.default)("ObjectProperty", { builder: [ "key", "value", "computed", "shorthand", "decorators" ], fields: { computed: { validate: (0, _utils.assertValueType)("boolean"), default: false }, key: { validate: (function() { var normal = (0, _utils.assertNodeType)( "Identifier", "StringLiteral", "NumericLiteral" ); var computed = (0, _utils.assertNodeType)( "Expression" ); return function(node, key, val) { var validator = node.computed ? computed : normal; validator(node, key, val); }; })() }, value: { validate: (0, _utils.assertNodeType)( "Expression", "PatternLike" ) }, shorthand: { validate: (0, _utils.assertValueType)("boolean"), default: false }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ), optional: true } }, visitor: ["key", "value", "decorators"], aliases: ["UserWhitespacable", "Property", "ObjectMember"] }); (0, _utils.default)("RestElement", { visitor: ["argument", "typeAnnotation"], builder: ["argument"], aliases: ["LVal", "PatternLike"], deprecatedAlias: "RestProperty", fields: Object.assign({}, patternLikeCommon, { argument: { validate: (0, _utils.assertNodeType)("LVal") } }) }); (0, _utils.default)("ReturnStatement", { visitor: ["argument"], aliases: [ "Statement", "Terminatorless", "CompletionStatement" ], fields: { argument: { validate: (0, _utils.assertNodeType)("Expression"), optional: true } } }); (0, _utils.default)("SequenceExpression", { visitor: ["expressions"], fields: { expressions: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Expression") ) ) } }, aliases: ["Expression"] }); (0, _utils.default)("SwitchCase", { visitor: ["test", "consequent"], fields: { test: { validate: (0, _utils.assertNodeType)("Expression"), optional: true }, consequent: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Statement") ) ) } } }); (0, _utils.default)("SwitchStatement", { visitor: ["discriminant", "cases"], aliases: ["Statement", "BlockParent", "Scopable"], fields: { discriminant: { validate: (0, _utils.assertNodeType)("Expression") }, cases: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("SwitchCase") ) ) } } }); (0, _utils.default)("ThisExpression", { aliases: ["Expression"] }); (0, _utils.default)("ThrowStatement", { visitor: ["argument"], aliases: [ "Statement", "Terminatorless", "CompletionStatement" ], fields: { argument: { validate: (0, _utils.assertNodeType)("Expression") } } }); (0, _utils.default)("TryStatement", { visitor: ["block", "handler", "finalizer"], aliases: ["Statement"], fields: { block: { validate: (0, _utils.assertNodeType)( "BlockStatement" ) }, handler: { optional: true, validate: (0, _utils.assertNodeType)("CatchClause") }, finalizer: { optional: true, validate: (0, _utils.assertNodeType)( "BlockStatement" ) } } }); (0, _utils.default)("UnaryExpression", { builder: ["operator", "argument", "prefix"], fields: { prefix: { default: true }, argument: { validate: (0, _utils.assertNodeType)("Expression") }, operator: { validate: _utils.assertOneOf.apply( void 0, _constants.UNARY_OPERATORS ) } }, visitor: ["argument"], aliases: ["UnaryLike", "Expression"] }); (0, _utils.default)("UpdateExpression", { builder: ["operator", "argument", "prefix"], fields: { prefix: { default: false }, argument: { validate: (0, _utils.assertNodeType)("Expression") }, operator: { validate: _utils.assertOneOf.apply( void 0, _constants.UPDATE_OPERATORS ) } }, visitor: ["argument"], aliases: ["Expression"] }); (0, _utils.default)("VariableDeclaration", { builder: ["kind", "declarations"], visitor: ["declarations"], aliases: ["Statement", "Declaration"], fields: { declare: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, kind: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)("var", "let", "const") ) }, declarations: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "VariableDeclarator" ) ) ) } } }); (0, _utils.default)("VariableDeclarator", { visitor: ["id", "init"], fields: { id: { validate: (0, _utils.assertNodeType)("LVal") }, init: { optional: true, validate: (0, _utils.assertNodeType)("Expression") } } }); (0, _utils.default)("WhileStatement", { visitor: ["test", "body"], aliases: [ "Statement", "BlockParent", "Loop", "While", "Scopable" ], fields: { test: { validate: (0, _utils.assertNodeType)("Expression") }, body: { validate: (0, _utils.assertNodeType)( "BlockStatement", "Statement" ) } } }); (0, _utils.default)("WithStatement", { visitor: ["object", "body"], aliases: ["Statement"], fields: { object: { validate: (0, _utils.assertNodeType)("Expression") }, body: { validate: (0, _utils.assertNodeType)( "BlockStatement", "Statement" ) } } }); /***/ }, /* 59 */ /***/ function(module, exports, __webpack_require__) { /* Copyright (C) 2013 Yusuke Suzuki Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ (function() { "use strict"; exports.ast = __webpack_require__(254); exports.code = __webpack_require__(101); exports.keyword = __webpack_require__(255); })(); /* vim: set sw=4 ts=4 et tw=80 : */ /***/ }, /* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.classMethodOrDeclareMethodCommon = exports.classMethodOrPropertyCommon = void 0; var _utils = _interopRequireWildcard(__webpack_require__(13)); var _core = __webpack_require__(58); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if ( Object.prototype.hasOwnProperty.call( obj, key ) ) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor( obj, key ) : {}; if (desc.get || desc.set) { Object.defineProperty( newObj, key, desc ); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } (0, _utils.default)("AssignmentPattern", { visitor: ["left", "right"], builder: ["left", "right"], aliases: ["Pattern", "PatternLike", "LVal"], fields: Object.assign({}, _core.patternLikeCommon, { left: { validate: (0, _utils.assertNodeType)( "Identifier", "ObjectPattern", "ArrayPattern" ) }, right: { validate: (0, _utils.assertNodeType)("Expression") }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ) } }) }); (0, _utils.default)("ArrayPattern", { visitor: ["elements", "typeAnnotation"], builder: ["elements"], aliases: ["Pattern", "PatternLike", "LVal"], fields: Object.assign({}, _core.patternLikeCommon, { elements: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("PatternLike") ) ) }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ) } }) }); (0, _utils.default)("ArrowFunctionExpression", { builder: ["params", "body", "async"], visitor: ["params", "body", "returnType", "typeParameters"], aliases: [ "Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish" ], fields: Object.assign( {}, _core.functionCommon, _core.functionTypeAnnotationCommon, { expression: { validate: (0, _utils.assertValueType)("boolean") }, body: { validate: (0, _utils.assertNodeType)( "BlockStatement", "Expression" ) } } ) }); (0, _utils.default)("ClassBody", { visitor: ["body"], fields: { body: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "ClassMethod", "ClassProperty", "TSDeclareMethod", "TSIndexSignature" ) ) ) } } }); var classCommon = { typeParameters: { validate: (0, _utils.assertNodeType)( "TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop" ), optional: true }, body: { validate: (0, _utils.assertNodeType)("ClassBody") }, superClass: { optional: true, validate: (0, _utils.assertNodeType)("Expression") }, superTypeParameters: { validate: (0, _utils.assertNodeType)( "TypeParameterInstantiation", "TSTypeParameterInstantiation" ), optional: true }, implements: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "TSExpressionWithTypeArguments", "FlowClassImplements" ) ) ), optional: true } }; (0, _utils.default)("ClassDeclaration", { builder: ["id", "superClass", "body", "decorators"], visitor: [ "id", "body", "superClass", "mixins", "typeParameters", "superTypeParameters", "implements", "decorators" ], aliases: [ "Scopable", "Class", "Statement", "Declaration", "Pureish" ], fields: Object.assign({}, classCommon, { declare: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, abstract: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, id: { validate: (0, _utils.assertNodeType)("Identifier"), optional: true }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ), optional: true } }) }); (0, _utils.default)("ClassExpression", { inherits: "ClassDeclaration", aliases: ["Scopable", "Class", "Expression", "Pureish"], fields: Object.assign({}, classCommon, { id: { optional: true, validate: (0, _utils.assertNodeType)("Identifier") }, body: { validate: (0, _utils.assertNodeType)("ClassBody") }, superClass: { optional: true, validate: (0, _utils.assertNodeType)("Expression") }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ), optional: true } }) }); (0, _utils.default)("ExportAllDeclaration", { visitor: ["source"], aliases: [ "Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration" ], fields: { source: { validate: (0, _utils.assertNodeType)( "StringLiteral" ) } } }); (0, _utils.default)("ExportDefaultDeclaration", { visitor: ["declaration"], aliases: [ "Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration" ], fields: { declaration: { validate: (0, _utils.assertNodeType)( "FunctionDeclaration", "TSDeclareFunction", "ClassDeclaration", "Expression" ) } } }); (0, _utils.default)("ExportNamedDeclaration", { visitor: ["declaration", "specifiers", "source"], aliases: [ "Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration" ], fields: { declaration: { validate: (0, _utils.assertNodeType)("Declaration"), optional: true }, specifiers: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "ExportSpecifier", "ExportDefaultSpecifier", "ExportNamespaceSpecifier" ) ) ) }, source: { validate: (0, _utils.assertNodeType)( "StringLiteral" ), optional: true } } }); (0, _utils.default)("ExportSpecifier", { visitor: ["local", "exported"], aliases: ["ModuleSpecifier"], fields: { local: { validate: (0, _utils.assertNodeType)("Identifier") }, exported: { validate: (0, _utils.assertNodeType)("Identifier") } } }); (0, _utils.default)("ForOfStatement", { visitor: ["left", "right", "body"], aliases: [ "Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement" ], fields: { left: { validate: (0, _utils.assertNodeType)( "VariableDeclaration", "LVal" ) }, right: { validate: (0, _utils.assertNodeType)("Expression") }, body: { validate: (0, _utils.assertNodeType)("Statement") }, await: { default: false, validate: (0, _utils.assertValueType)("boolean") } } }); (0, _utils.default)("ImportDeclaration", { visitor: ["specifiers", "source"], aliases: ["Statement", "Declaration", "ModuleDeclaration"], fields: { specifiers: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier" ) ) ) }, source: { validate: (0, _utils.assertNodeType)( "StringLiteral" ) } } }); (0, _utils.default)("ImportDefaultSpecifier", { visitor: ["local"], aliases: ["ModuleSpecifier"], fields: { local: { validate: (0, _utils.assertNodeType)("Identifier") } } }); (0, _utils.default)("ImportNamespaceSpecifier", { visitor: ["local"], aliases: ["ModuleSpecifier"], fields: { local: { validate: (0, _utils.assertNodeType)("Identifier") } } }); (0, _utils.default)("ImportSpecifier", { visitor: ["local", "imported"], aliases: ["ModuleSpecifier"], fields: { local: { validate: (0, _utils.assertNodeType)("Identifier") }, imported: { validate: (0, _utils.assertNodeType)("Identifier") }, importKind: { validate: (0, _utils.assertOneOf)( null, "type", "typeof" ) } } }); (0, _utils.default)("MetaProperty", { visitor: ["meta", "property"], aliases: ["Expression"], fields: { meta: { validate: (0, _utils.assertNodeType)("Identifier") }, property: { validate: (0, _utils.assertNodeType)("Identifier") } } }); var classMethodOrPropertyCommon = { abstract: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, accessibility: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)( "public", "private", "protected" ) ), optional: true }, static: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, computed: { default: false, validate: (0, _utils.assertValueType)("boolean") }, optional: { validate: (0, _utils.assertValueType)("boolean"), optional: true }, key: { validate: (function() { var normal = (0, _utils.assertNodeType)( "Identifier", "StringLiteral", "NumericLiteral" ); var computed = (0, _utils.assertNodeType)( "Expression" ); return function(node, key, val) { var validator = node.computed ? computed : normal; validator(node, key, val); }; })() } }; exports.classMethodOrPropertyCommon = classMethodOrPropertyCommon; var classMethodOrDeclareMethodCommon = Object.assign( {}, _core.functionCommon, classMethodOrPropertyCommon, { kind: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)( "get", "set", "method", "constructor" ) ), default: "method" }, access: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)( "public", "private", "protected" ) ), optional: true }, decorators: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Decorator") ) ), optional: true } } ); exports.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon; (0, _utils.default)("ClassMethod", { aliases: [ "Function", "Scopable", "BlockParent", "FunctionParent", "Method" ], builder: [ "kind", "key", "params", "body", "computed", "static" ], visitor: [ "key", "params", "body", "decorators", "returnType", "typeParameters" ], fields: Object.assign( {}, classMethodOrDeclareMethodCommon, _core.functionTypeAnnotationCommon, { body: { validate: (0, _utils.assertNodeType)( "BlockStatement" ) } } ) }); (0, _utils.default)("ObjectPattern", { visitor: ["properties", "typeAnnotation"], builder: ["properties"], aliases: ["Pattern", "PatternLike", "LVal"], fields: Object.assign({}, _core.patternLikeCommon, { properties: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "RestElement", "ObjectProperty" ) ) ) } }) }); (0, _utils.default)("SpreadElement", { visitor: ["argument"], aliases: ["UnaryLike"], deprecatedAlias: "SpreadProperty", fields: { argument: { validate: (0, _utils.assertNodeType)("Expression") } } }); (0, _utils.default)("Super", { aliases: ["Expression"] }); (0, _utils.default)("TaggedTemplateExpression", { visitor: ["tag", "quasi"], aliases: ["Expression"], fields: { tag: { validate: (0, _utils.assertNodeType)("Expression") }, quasi: { validate: (0, _utils.assertNodeType)( "TemplateLiteral" ) } } }); (0, _utils.default)("TemplateElement", { builder: ["value", "tail"], fields: { value: {}, tail: { validate: (0, _utils.assertValueType)("boolean"), default: false } } }); (0, _utils.default)("TemplateLiteral", { visitor: ["quasis", "expressions"], aliases: ["Expression", "Literal"], fields: { quasis: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)( "TemplateElement" ) ) ) }, expressions: { validate: (0, _utils.chain)( (0, _utils.assertValueType)("array"), (0, _utils.assertEach)( (0, _utils.assertNodeType)("Expression") ) ) } } }); (0, _utils.default)("YieldExpression", { builder: ["argument", "delegate"], visitor: ["argument"], aliases: ["Expression", "Terminatorless"], fields: { delegate: { validate: (0, _utils.assertValueType)("boolean"), default: false }, argument: { optional: true, validate: (0, _utils.assertNodeType)("Expression") } } }); /***/ }, /* 61 */ /***/ function(module, exports, __webpack_require__) { var baseClone = __webpack_require__(265); /** Used to compose bitmasks for cloning. */ var CLONE_SYMBOLS_FLAG = 4; /** * Creates a shallow clone of `value`. * * **Note:** This method is loosely based on the * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) * and supports cloning arrays, array buffers, booleans, date objects, maps, * numbers, `Object` objects, regexes, sets, strings, symbols, and typed * arrays. The own enumerable properties of `arguments` objects are cloned * as plain objects. An empty object is returned for uncloneable values such * as error objects, functions, DOM nodes, and WeakMaps. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to clone. * @returns {*} Returns the cloned value. * @see _.cloneDeep * @example * * var objects = [{ 'a': 1 }, { 'b': 2 }]; * * var shallow = _.clone(objects); * console.log(shallow[0] === objects[0]); * // => true */ function clone(value) { return baseClone(value, CLONE_SYMBOLS_FLAG); } module.exports = clone; /***/ }, /* 62 */ /***/ function(module, exports, __webpack_require__) { var getNative = __webpack_require__(18), root = __webpack_require__(6); /* Built-in method references that are verified to be native. */ var Map = getNative(root, "Map"); module.exports = Map; /***/ }, /* 63 */ /***/ function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(14), isObject = __webpack_require__(7); /** `Object#toString` result references. */ var asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return ( tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag ); } module.exports = isFunction; /***/ }, /* 64 */ /***/ function(module, exports, __webpack_require__) { var mapCacheClear = __webpack_require__(282), mapCacheDelete = __webpack_require__(289), mapCacheGet = __webpack_require__(291), mapCacheHas = __webpack_require__(292), mapCacheSet = __webpack_require__(293); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype["delete"] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; /***/ }, /* 65 */ /***/ function(module, exports, __webpack_require__) { var defineProperty = __webpack_require__(105); /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue(object, key, value) { if (key == "__proto__" && defineProperty) { defineProperty(object, key, { configurable: true, enumerable: true, value: value, writable: true }); } else { object[key] = value; } } module.exports = baseAssignValue; /***/ }, /* 66 */ /***/ function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { length = length == null ? MAX_SAFE_INTEGER : length; return ( !!length && (typeof value == "number" || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length ); } module.exports = isIndex; /***/ }, /* 67 */ /***/ function(module, exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__(299), baseUnary = __webpack_require__(43), nodeUtil = __webpack_require__(107); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; /***/ }, /* 68 */ /***/ function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return ( typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER ); } module.exports = isLength; /***/ }, /* 69 */ /***/ function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == "function" && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; /***/ }, /* 70 */ /***/ function(module, exports) { /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } module.exports = copyArray; /***/ }, /* 71 */ /***/ function(module, exports, __webpack_require__) { var arrayFilter = __webpack_require__(306), stubArray = __webpack_require__(110); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function( symbol ) { return propertyIsEnumerable.call(object, symbol); }); }; module.exports = getSymbols; /***/ }, /* 72 */ /***/ function(module, exports) { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; /***/ }, /* 73 */ /***/ function(module, exports, __webpack_require__) { var overArg = __webpack_require__(108); /** Built-in value references. */ var getPrototype = overArg(Object.getPrototypeOf, Object); module.exports = getPrototype; /***/ }, /* 74 */ /***/ function(module, exports, __webpack_require__) { var Uint8Array = __webpack_require__(116); /** * Creates a clone of `arrayBuffer`. * * @private * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor( arrayBuffer.byteLength ); new Uint8Array(result).set(new Uint8Array(arrayBuffer)); return result; } module.exports = cloneArrayBuffer; /***/ }, /* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = inherit; var _uniq = _interopRequireDefault(__webpack_require__(328)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function inherit(key, child, parent) { if (child && parent) { child[key] = (0, _uniq.default)( [].concat(child[key], parent[key]).filter(Boolean) ); } } /***/ }, /* 76 */ /***/ function(module, exports, __webpack_require__) { var baseFindIndex = __webpack_require__(333), baseIsNaN = __webpack_require__(334), strictIndexOf = __webpack_require__(335); /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } module.exports = baseIndexOf; /***/ }, /* 77 */ /***/ function(module, exports, __webpack_require__) { var baseIndexOf = __webpack_require__(76), isArrayLike = __webpack_require__(21), isString = __webpack_require__(369), toInteger = __webpack_require__(46), values = __webpack_require__(142); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * is used for equality comparisons. If `fromIndex` is negative, it's used as * the offset from the end of `collection`. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {boolean} Returns `true` if `value` is found, else `false`. * @example * * _.includes([1, 2, 3], 1); * // => true * * _.includes([1, 2, 3], 1, 2); * // => false * * _.includes({ 'a': 1, 'b': 2 }, 1); * // => true * * _.includes('abcd', 'bc'); * // => true */ function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); } return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; } module.exports = includes; /***/ }, /* 78 */ /***/ function(module, exports, __webpack_require__) { var baseRest = __webpack_require__(48), isIterateeCall = __webpack_require__(47); /** * Creates a function like `_.assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined; if ( guard && isIterateeCall(sources[0], sources[1], guard) ) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } module.exports = createAssigner; /***/ }, /* 79 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } // A second optional argument can be given to further configure // the parser process. These options are recognized: var defaultOptions = { // Source type ("script" or "module") for different semantics sourceType: "script", // Source filename. sourceFilename: undefined, // Line from which to start counting source. Useful for // integration with other tools. startLine: 1, // When enabled, a return at the top level is not considered an // error. allowReturnOutsideFunction: false, // When enabled, import/export statements are not constrained to // appearing at the top of the program. allowImportExportEverywhere: false, // TODO allowSuperOutsideMethod: false, // An array of plugins to enable plugins: [], // TODO strictMode: null, // Nodes have their start and end characters offsets recorded in // `start` and `end` properties (directly on the node, rather than // the `loc` object, which holds line/column data. To also add a // [semi-standardized][range] `range` property holding a `[start, // end]` array with the same numbers, set the `ranges` option to // `true`. // // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 ranges: false, // Adds all parsed tokens to a `tokens` property on the `File` node tokens: false }; // Interpret and default an options object function getOptions(opts) { var options = {}; for (var key in defaultOptions) { options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key]; } return options; } // ## Token types // The assignment of fine-grained, information-carrying type objects // allows the tokenizer to store the information it has about a // token in a way that is very cheap for the parser to look up. // All token type variables start with an underscore, to make them // easy to recognize. // The `beforeExpr` property is used to disambiguate between regular // expressions and divisions. It is set on all token types that can // be followed by an expression (thus, a slash after them would be a // regular expression). // // `isLoop` marks a keyword as starting a loop, which is important // to know when parsing a label, in order to allow or disallow // continue jumps to that label. var beforeExpr = true; var startsExpr = true; var isLoop = true; var isAssign = true; var prefix = true; var postfix = true; var TokenType = function TokenType(label, conf) { if (conf === void 0) { conf = {}; } this.label = label; this.keyword = conf.keyword; this.beforeExpr = !!conf.beforeExpr; this.startsExpr = !!conf.startsExpr; this.rightAssociative = !!conf.rightAssociative; this.isLoop = !!conf.isLoop; this.isAssign = !!conf.isAssign; this.prefix = !!conf.prefix; this.postfix = !!conf.postfix; this.binop = conf.binop === 0 ? 0 : conf.binop || null; this.updateContext = null; }; var KeywordTokenType = /*#__PURE__*/ (function(_TokenType) { _inheritsLoose(KeywordTokenType, _TokenType); function KeywordTokenType(name, options) { if (options === void 0) { options = {}; } options.keyword = name; return _TokenType.call(this, name, options) || this; } return KeywordTokenType; })(TokenType); var BinopTokenType = /*#__PURE__*/ (function(_TokenType2) { _inheritsLoose(BinopTokenType, _TokenType2); function BinopTokenType(name, prec) { return ( _TokenType2.call(this, name, { beforeExpr: beforeExpr, binop: prec }) || this ); } return BinopTokenType; })(TokenType); var types = { num: new TokenType("num", { startsExpr: startsExpr }), bigint: new TokenType("bigint", { startsExpr: startsExpr }), regexp: new TokenType("regexp", { startsExpr: startsExpr }), string: new TokenType("string", { startsExpr: startsExpr }), name: new TokenType("name", { startsExpr: startsExpr }), eof: new TokenType("eof"), // Punctuation token types. bracketL: new TokenType("[", { beforeExpr: beforeExpr, startsExpr: startsExpr }), bracketR: new TokenType("]"), braceL: new TokenType("{", { beforeExpr: beforeExpr, startsExpr: startsExpr }), braceBarL: new TokenType("{|", { beforeExpr: beforeExpr, startsExpr: startsExpr }), braceR: new TokenType("}"), braceBarR: new TokenType("|}"), parenL: new TokenType("(", { beforeExpr: beforeExpr, startsExpr: startsExpr }), parenR: new TokenType(")"), comma: new TokenType(",", { beforeExpr: beforeExpr }), semi: new TokenType(";", { beforeExpr: beforeExpr }), colon: new TokenType(":", { beforeExpr: beforeExpr }), doubleColon: new TokenType("::", { beforeExpr: beforeExpr }), dot: new TokenType("."), question: new TokenType("?", { beforeExpr: beforeExpr }), questionDot: new TokenType("?."), arrow: new TokenType("=>", { beforeExpr: beforeExpr }), template: new TokenType("template"), ellipsis: new TokenType("...", { beforeExpr: beforeExpr }), backQuote: new TokenType("`", { startsExpr: startsExpr }), dollarBraceL: new TokenType("${", { beforeExpr: beforeExpr, startsExpr: startsExpr }), at: new TokenType("@"), hash: new TokenType("#"), // Operators. These carry several kinds of properties to help the // parser use them properly (the presence of these properties is // what categorizes them as operators). // // `binop`, when present, specifies that this operator is a binary // operator, and will refer to its precedence. // // `prefix` and `postfix` mark the operator as a prefix or postfix // unary operator. // // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as // binary operators with a very low precedence, that should result // in AssignmentExpression nodes. eq: new TokenType("=", { beforeExpr: beforeExpr, isAssign: isAssign }), assign: new TokenType("_=", { beforeExpr: beforeExpr, isAssign: isAssign }), incDec: new TokenType("++/--", { prefix: prefix, postfix: postfix, startsExpr: startsExpr }), bang: new TokenType("!", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), tilde: new TokenType("~", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), pipeline: new BinopTokenType("|>", 0), nullishCoalescing: new BinopTokenType("??", 1), logicalOR: new BinopTokenType("||", 1), logicalAND: new BinopTokenType("&&", 2), bitwiseOR: new BinopTokenType("|", 3), bitwiseXOR: new BinopTokenType("^", 4), bitwiseAND: new BinopTokenType("&", 5), equality: new BinopTokenType("==/!=", 6), relational: new BinopTokenType("", 7), bitShift: new BinopTokenType("<>", 8), plusMin: new TokenType("+/-", { beforeExpr: beforeExpr, binop: 9, prefix: prefix, startsExpr: startsExpr }), modulo: new BinopTokenType("%", 10), star: new BinopTokenType("*", 10), slash: new BinopTokenType("/", 10), exponent: new TokenType("**", { beforeExpr: beforeExpr, binop: 11, rightAssociative: true }) }; var keywords = { break: new KeywordTokenType("break"), case: new KeywordTokenType("case", { beforeExpr: beforeExpr }), catch: new KeywordTokenType("catch"), continue: new KeywordTokenType("continue"), debugger: new KeywordTokenType("debugger"), default: new KeywordTokenType("default", { beforeExpr: beforeExpr }), do: new KeywordTokenType("do", { isLoop: isLoop, beforeExpr: beforeExpr }), else: new KeywordTokenType("else", { beforeExpr: beforeExpr }), finally: new KeywordTokenType("finally"), for: new KeywordTokenType("for", { isLoop: isLoop }), function: new KeywordTokenType("function", { startsExpr: startsExpr }), if: new KeywordTokenType("if"), return: new KeywordTokenType("return", { beforeExpr: beforeExpr }), switch: new KeywordTokenType("switch"), throw: new KeywordTokenType("throw", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), try: new KeywordTokenType("try"), var: new KeywordTokenType("var"), let: new KeywordTokenType("let"), const: new KeywordTokenType("const"), while: new KeywordTokenType("while", { isLoop: isLoop }), with: new KeywordTokenType("with"), new: new KeywordTokenType("new", { beforeExpr: beforeExpr, startsExpr: startsExpr }), this: new KeywordTokenType("this", { startsExpr: startsExpr }), super: new KeywordTokenType("super", { startsExpr: startsExpr }), class: new KeywordTokenType("class"), extends: new KeywordTokenType("extends", { beforeExpr: beforeExpr }), export: new KeywordTokenType("export"), import: new KeywordTokenType("import", { startsExpr: startsExpr }), yield: new KeywordTokenType("yield", { beforeExpr: beforeExpr, startsExpr: startsExpr }), null: new KeywordTokenType("null", { startsExpr: startsExpr }), true: new KeywordTokenType("true", { startsExpr: startsExpr }), false: new KeywordTokenType("false", { startsExpr: startsExpr }), in: new KeywordTokenType("in", { beforeExpr: beforeExpr, binop: 7 }), instanceof: new KeywordTokenType("instanceof", { beforeExpr: beforeExpr, binop: 7 }), typeof: new KeywordTokenType("typeof", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), void: new KeywordTokenType("void", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }), delete: new KeywordTokenType("delete", { beforeExpr: beforeExpr, prefix: prefix, startsExpr: startsExpr }) }; // Map keyword names to token types. Object.keys(keywords).forEach(function(name) { types["_" + name] = keywords[name]; }); /* eslint max-len: 0 */ function makePredicate(words) { var wordsArr = words.split(" "); return function(str) { return wordsArr.indexOf(str) >= 0; }; } // Reserved word lists for various dialects of the language var reservedWords = { "6": makePredicate("enum await"), strict: makePredicate( "implements interface let package private protected public static yield" ), strictBind: makePredicate("eval arguments") }; // And the keywords var isKeyword = makePredicate( "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this let const class extends export import yield super" ); // ## Character categories // Big ugly regular expressions that match characters in the // whitespace, identifier, and identifier-start categories. These // are only applied when a character is found to actually have a // code point above 128. // Generated by `bin/generate-identifier-regex.js`. /* prettier-ignore */ var nonASCIIidentifierStartChars = "\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC"; /* prettier-ignore */ var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA900-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F"; var nonASCIIidentifierStart = new RegExp( "[" + nonASCIIidentifierStartChars + "]" ); var nonASCIIidentifier = new RegExp( "[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]" ); nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; // These are a run-length and offset encoded representation of the // >0xffff code points that are a valid part of identifiers. The // offset starts at 0x10000, and each pair of numbers represents an // offset to the next range, and then a size of the range. They were // generated by `bin/generate-identifier-regex.js`. /* prettier-ignore */ var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 26, 45, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 785, 52, 76, 44, 33, 24, 27, 35, 42, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 54, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 86, 25, 391, 63, 32, 0, 257, 0, 11, 39, 8, 0, 22, 0, 12, 39, 3, 3, 55, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 698, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 881, 68, 12, 0, 67, 12, 65, 1, 31, 6124, 20, 754, 9486, 286, 82, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 4149, 196, 60, 67, 1213, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42710, 42, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541]; /* prettier-ignore */ var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 1306, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 52, 0, 13, 2, 49, 13, 10, 2, 4, 9, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 57, 0, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 87, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 423, 9, 280, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 19719, 9, 135, 4, 60, 6, 26, 9, 1016, 45, 17, 3, 19723, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 2214, 6, 110, 6, 6, 9, 792487, 239]; // This has a complexity linear to the value of the code. The // assumption is that looking up astral identifier characters is // rare. function isInAstralSet(code, set) { var pos = 0x10000; for (var i = 0; i < set.length; i += 2) { pos += set[i]; if (pos > code) return false; pos += set[i + 1]; if (pos >= code) return true; } return false; } // Test whether a given character code starts an identifier. function isIdentifierStart(code) { if (code < 65) return code === 36; if (code < 91) return true; if (code < 97) return code === 95; if (code < 123) return true; if (code <= 0xffff) { return ( code >= 0xaa && nonASCIIidentifierStart.test( String.fromCharCode(code) ) ); } return isInAstralSet(code, astralIdentifierStartCodes); } // Test whether a given character is part of an identifier. function isIdentifierChar(code) { if (code < 48) return code === 36; if (code < 58) return true; if (code < 65) return false; if (code < 91) return true; if (code < 97) return code === 95; if (code < 123) return true; if (code <= 0xffff) { return ( code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) ); } return ( isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes) ); } // Matches a whole line break (where CRLF is considered a single // line break). Used to count lines. var lineBreak = /\r\n?|\n|\u2028|\u2029/; var lineBreakG = new RegExp(lineBreak.source, "g"); function isNewLine(code) { return ( code === 10 || code === 13 || code === 0x2028 || code === 0x2029 ); } var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/; // The algorithm used to determine whether a regexp can appear at a // given point in the program is loosely based on sweet.js' approach. // See https://github.com/mozilla/sweet.js/wiki/design var TokContext = function TokContext( token, isExpr, preserveSpace, override // Takes a Tokenizer as a this-parameter, and returns void. ) { this.token = token; this.isExpr = !!isExpr; this.preserveSpace = !!preserveSpace; this.override = override; }; var types$1 = { braceStatement: new TokContext("{", false), braceExpression: new TokContext("{", true), templateQuasi: new TokContext("${", true), parenStatement: new TokContext("(", false), parenExpression: new TokContext("(", true), template: new TokContext("`", true, true, function(p) { return p.readTmplToken(); }), functionExpression: new TokContext("function", true) }; // Token-specific context update code types.parenR.updateContext = types.braceR.updateContext = function() { if (this.state.context.length === 1) { this.state.exprAllowed = true; return; } var out = this.state.context.pop(); if ( out === types$1.braceStatement && this.curContext() === types$1.functionExpression ) { this.state.context.pop(); this.state.exprAllowed = false; } else if (out === types$1.templateQuasi) { this.state.exprAllowed = true; } else { this.state.exprAllowed = !out.isExpr; } }; types.name.updateContext = function(prevType) { if ( this.state.value === "of" && this.curContext() === types$1.parenStatement ) { this.state.exprAllowed = !prevType.beforeExpr; return; } this.state.exprAllowed = false; if ( prevType === types._let || prevType === types._const || prevType === types._var ) { if (lineBreak.test(this.input.slice(this.state.end))) { this.state.exprAllowed = true; } } }; types.braceL.updateContext = function(prevType) { this.state.context.push( this.braceIsBlock(prevType) ? types$1.braceStatement : types$1.braceExpression ); this.state.exprAllowed = true; }; types.dollarBraceL.updateContext = function() { this.state.context.push(types$1.templateQuasi); this.state.exprAllowed = true; }; types.parenL.updateContext = function(prevType) { var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while; this.state.context.push( statementParens ? types$1.parenStatement : types$1.parenExpression ); this.state.exprAllowed = true; }; types.incDec.updateContext = function() { // tokExprAllowed stays unchanged }; types._function.updateContext = function() { if (this.curContext() !== types$1.braceStatement) { this.state.context.push(types$1.functionExpression); } this.state.exprAllowed = false; }; types.backQuote.updateContext = function() { if (this.curContext() === types$1.template) { this.state.context.pop(); } else { this.state.context.push(types$1.template); } this.state.exprAllowed = false; }; // These are used when `options.locations` is on, for the // `startLoc` and `endLoc` properties. var Position = function Position(line, col) { this.line = line; this.column = col; }; var SourceLocation = function SourceLocation(start, end) { this.start = start; // $FlowIgnore (may start as null, but initialized later) this.end = end; }; // The `getLineInfo` function is mostly useful when the // `locations` option is off (for performance reasons) and you // want to find the line/column position for a given character // offset. `input` should be the code string that the offset refers // into. function getLineInfo(input, offset) { for (var line = 1, cur = 0; ; ) { lineBreakG.lastIndex = cur; var match = lineBreakG.exec(input); if (match && match.index < offset) { ++line; cur = match.index + match[0].length; } else { return new Position(line, offset - cur); } } // istanbul ignore next throw new Error("Unreachable"); } var BaseParser = /*#__PURE__*/ (function() { function BaseParser() {} var _proto = BaseParser.prototype; // Properties set by constructor in index.js // Initialized by Tokenizer _proto.isReservedWord = function isReservedWord(word) { if (word === "await") { return this.inModule; } else { return reservedWords[6](word); } }; _proto.hasPlugin = function hasPlugin(name) { return !!this.plugins[name]; }; return BaseParser; })(); /* eslint max-len: 0 */ /** * Based on the comment attachment algorithm used in espree and estraverse. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ function last(stack) { return stack[stack.length - 1]; } var CommentsParser = /*#__PURE__*/ (function(_BaseParser) { _inheritsLoose(CommentsParser, _BaseParser); function CommentsParser() { return _BaseParser.apply(this, arguments) || this; } var _proto = CommentsParser.prototype; _proto.addComment = function addComment(comment) { if (this.filename) comment.loc.filename = this.filename; this.state.trailingComments.push(comment); this.state.leadingComments.push(comment); }; _proto.processComment = function processComment(node) { if (node.type === "Program" && node.body.length > 0) return; var stack = this.state.commentStack; var firstChild, lastChild, trailingComments, i, j; if (this.state.trailingComments.length > 0) { // If the first comment in trailingComments comes after the // current node, then we're good - all comments in the array will // come after the node and so it's safe to add them as official // trailingComments. if ( this.state.trailingComments[0].start >= node.end ) { trailingComments = this.state .trailingComments; this.state.trailingComments = []; } else { // Otherwise, if the first comment doesn't come after the // current node, that means we have a mix of leading and trailing // comments in the array and that leadingComments contains the // same items as trailingComments. Reset trailingComments to // zero items and we'll handle this by evaluating leadingComments // later. this.state.trailingComments.length = 0; } } else { if (stack.length > 0) { var lastInStack = last(stack); if ( lastInStack.trailingComments && lastInStack.trailingComments[0].start >= node.end ) { trailingComments = lastInStack.trailingComments; lastInStack.trailingComments = null; } } } // Eating the stack. if ( stack.length > 0 && last(stack).start >= node.start ) { firstChild = stack.pop(); } while ( stack.length > 0 && last(stack).start >= node.start ) { lastChild = stack.pop(); } if (!lastChild && firstChild) lastChild = firstChild; // Attach comments that follow a trailing comma on the last // property in an object literal or a trailing comma in function arguments // as trailing comments if ( firstChild && this.state.leadingComments.length > 0 ) { var lastComment = last( this.state.leadingComments ); if (firstChild.type === "ObjectProperty") { if (lastComment.start >= node.start) { if (this.state.commentPreviousNode) { for ( j = 0; j < this.state.leadingComments .length; j++ ) { if ( this.state.leadingComments[ j ].end < this.state .commentPreviousNode.end ) { this.state.leadingComments.splice( j, 1 ); j--; } } if ( this.state.leadingComments .length > 0 ) { firstChild.trailingComments = this.state.leadingComments; this.state.leadingComments = []; } } } } else if ( node.type === "CallExpression" && node.arguments && node.arguments.length ) { var lastArg = last(node.arguments); if ( lastArg && lastComment.start >= lastArg.start && lastComment.end <= node.end ) { if (this.state.commentPreviousNode) { if ( this.state.leadingComments .length > 0 ) { lastArg.trailingComments = this.state.leadingComments; this.state.leadingComments = []; } } } } } if (lastChild) { if (lastChild.leadingComments) { if ( lastChild !== node && lastChild.leadingComments.length > 0 && last(lastChild.leadingComments).end <= node.start ) { node.leadingComments = lastChild.leadingComments; lastChild.leadingComments = null; } else { // A leading comment for an anonymous class had been stolen by its first ClassMethod, // so this takes back the leading comment. // See also: https://github.com/eslint/espree/issues/158 for ( i = lastChild.leadingComments .length - 2; i >= 0; --i ) { if ( lastChild.leadingComments[i] .end <= node.start ) { node.leadingComments = lastChild.leadingComments.splice( 0, i + 1 ); break; } } } } } else if (this.state.leadingComments.length > 0) { if ( last(this.state.leadingComments).end <= node.start ) { if (this.state.commentPreviousNode) { for ( j = 0; j < this.state.leadingComments.length; j++ ) { if ( this.state.leadingComments[j] .end < this.state.commentPreviousNode .end ) { this.state.leadingComments.splice( j, 1 ); j--; } } } if (this.state.leadingComments.length > 0) { node.leadingComments = this.state.leadingComments; this.state.leadingComments = []; } } else { // https://github.com/eslint/espree/issues/2 // // In special cases, such as return (without a value) and // debugger, all comments will end up as leadingComments and // will otherwise be eliminated. This step runs when the // commentStack is empty and there are comments left // in leadingComments. // // This loop figures out the stopping point between the actual // leading and trailing comments by finding the location of the // first comment that comes after the given node. for ( i = 0; i < this.state.leadingComments.length; i++ ) { if ( this.state.leadingComments[i].end > node.start ) { break; } } // Split the array based on the location of the first comment // that comes after the node. Keep in mind that this could // result in an empty array, and if so, the array must be // deleted. var leadingComments = this.state.leadingComments.slice( 0, i ); node.leadingComments = leadingComments.length === 0 ? null : leadingComments; // Similarly, trailing comments are attached later. The variable // must be reset to null if there are no trailing comments. trailingComments = this.state.leadingComments.slice( i ); if (trailingComments.length === 0) { trailingComments = null; } } } this.state.commentPreviousNode = node; if (trailingComments) { if ( trailingComments.length && trailingComments[0].start >= node.start && last(trailingComments).end <= node.end ) { node.innerComments = trailingComments; } else { node.trailingComments = trailingComments; } } stack.push(node); }; return CommentsParser; })(BaseParser); // takes an offset integer (into the current `input`) to indicate // the location of the error, attaches the position to the end // of the error message, and then raises a `SyntaxError` with that // message. var LocationParser = /*#__PURE__*/ (function(_CommentsParser) { _inheritsLoose(LocationParser, _CommentsParser); function LocationParser() { return ( _CommentsParser.apply(this, arguments) || this ); } var _proto = LocationParser.prototype; _proto.raise = function raise( pos, message, missingPluginNames ) { var loc = getLineInfo(this.input, pos); message += " (" + loc.line + ":" + loc.column + ")"; // $FlowIgnore var err = new SyntaxError(message); err.pos = pos; err.loc = loc; if (missingPluginNames) { err.missingPlugin = missingPluginNames; } throw err; }; return LocationParser; })(CommentsParser); var State = /*#__PURE__*/ (function() { function State() {} var _proto = State.prototype; _proto.init = function init(options, input) { this.strict = options.strictMode === false ? false : options.sourceType === "module"; this.input = input; this.potentialArrowAt = -1; this.noArrowAt = []; this.noArrowParamsConversionAt = []; // eslint-disable-next-line max-len this.inMethod = this.inFunction = this.inParameters = this.maybeInArrowParameters = this.inGenerator = this.inAsync = this.inPropertyName = this.inType = this.inClassProperty = this.noAnonFunctionType = false; this.classLevel = 0; this.labels = []; this.decoratorStack = [[]]; this.yieldInPossibleArrowParameters = null; this.tokens = []; this.comments = []; this.trailingComments = []; this.leadingComments = []; this.commentStack = []; // $FlowIgnore this.commentPreviousNode = null; this.pos = this.lineStart = 0; this.curLine = options.startLine; this.type = types.eof; this.value = null; this.start = this.end = this.pos; this.startLoc = this.endLoc = this.curPosition(); // $FlowIgnore this.lastTokEndLoc = this.lastTokStartLoc = null; this.lastTokStart = this.lastTokEnd = this.pos; this.context = [types$1.braceStatement]; this.exprAllowed = true; this.containsEsc = this.containsOctal = false; this.octalPosition = null; this.invalidTemplateEscapePosition = null; this.exportedIdentifiers = []; }; // TODO _proto.curPosition = function curPosition() { return new Position( this.curLine, this.pos - this.lineStart ); }; _proto.clone = function clone(skipArrays) { var _this = this; var state = new State(); Object.keys(this).forEach(function(key) { // $FlowIgnore var val = _this[key]; if ( (!skipArrays || key === "context") && Array.isArray(val) ) { val = val.slice(); } // $FlowIgnore state[key] = val; }); return state; }; return State; })(); var _isDigit = function isDigit(code) { return code >= 48 && code <= 57; }; /* eslint max-len: 0 */ // an immediate sibling of NumericLiteralSeparator _ var forbiddenNumericSeparatorSiblings = { decBinOct: [ 46, 66, 69, 79, 95, // multiple separators are not allowed 98, 101, 111 ], hex: [ 46, 88, 95, // multiple separators are not allowed 120 ] }; var allowedNumericSeparatorSiblings = {}; allowedNumericSeparatorSiblings.bin = [ // 0 - 1 48, 49 ]; allowedNumericSeparatorSiblings.oct = allowedNumericSeparatorSiblings.bin.concat( [50, 51, 52, 53, 54, 55] ); allowedNumericSeparatorSiblings.dec = allowedNumericSeparatorSiblings.oct.concat( [56, 57] ); allowedNumericSeparatorSiblings.hex = allowedNumericSeparatorSiblings.dec.concat( [65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102] ); // Object type used to represent tokens. Note that normally, tokens // simply exist as properties on the parser object. This is only // used for the onToken callback and the external tokenizer. var Token = function Token(state) { this.type = state.type; this.value = state.value; this.start = state.start; this.end = state.end; this.loc = new SourceLocation(state.startLoc, state.endLoc); }; // ## Tokenizer function codePointToString(code) { // UTF-16 Decoding if (code <= 0xffff) { return String.fromCharCode(code); } else { return String.fromCharCode( ((code - 0x10000) >> 10) + 0xd800, ((code - 0x10000) & 1023) + 0xdc00 ); } } var Tokenizer = /*#__PURE__*/ (function(_LocationParser) { _inheritsLoose(Tokenizer, _LocationParser); // Forward-declarations // parser/util.js function Tokenizer(options, input) { var _this; _this = _LocationParser.call(this) || this; _this.state = new State(); _this.state.init(options, input); _this.isLookahead = false; return _this; } // Move to the next token var _proto = Tokenizer.prototype; _proto.next = function next() { if (this.options.tokens && !this.isLookahead) { this.state.tokens.push(new Token(this.state)); } this.state.lastTokEnd = this.state.end; this.state.lastTokStart = this.state.start; this.state.lastTokEndLoc = this.state.endLoc; this.state.lastTokStartLoc = this.state.startLoc; this.nextToken(); }; // TODO _proto.eat = function eat(type) { if (this.match(type)) { this.next(); return true; } else { return false; } }; // TODO _proto.match = function match(type) { return this.state.type === type; }; // TODO _proto.isKeyword = function isKeyword$$1(word) { return isKeyword(word); }; // TODO _proto.lookahead = function lookahead() { var old = this.state; this.state = old.clone(true); this.isLookahead = true; this.next(); this.isLookahead = false; var curr = this.state; this.state = old; return curr; }; // Toggle strict mode. Re-reads the next number or string to please // pedantic tests (`"use strict"; 010;` should fail). _proto.setStrict = function setStrict(strict) { this.state.strict = strict; if ( !this.match(types.num) && !this.match(types.string) ) return; this.state.pos = this.state.start; while (this.state.pos < this.state.lineStart) { this.state.lineStart = this.input.lastIndexOf( "\n", this.state.lineStart - 2 ) + 1; --this.state.curLine; } this.nextToken(); }; _proto.curContext = function curContext() { return this.state.context[ this.state.context.length - 1 ]; }; // Read a single token, updating the parser object's token-related // properties. _proto.nextToken = function nextToken() { var curContext = this.curContext(); if (!curContext || !curContext.preserveSpace) this.skipSpace(); this.state.containsOctal = false; this.state.octalPosition = null; this.state.start = this.state.pos; this.state.startLoc = this.state.curPosition(); if (this.state.pos >= this.input.length) { this.finishToken(types.eof); return; } if (curContext.override) { curContext.override(this); } else { this.readToken(this.fullCharCodeAtPos()); } }; _proto.readToken = function readToken(code) { // Identifier or keyword. '\uXXXX' sequences are allowed in // identifiers, so '\' also dispatches to that. if (isIdentifierStart(code) || code === 92) { this.readWord(); } else { this.getTokenFromCode(code); } }; _proto.fullCharCodeAtPos = function fullCharCodeAtPos() { var code = this.input.charCodeAt(this.state.pos); if (code <= 0xd7ff || code >= 0xe000) return code; var next = this.input.charCodeAt( this.state.pos + 1 ); return (code << 10) + next - 0x35fdc00; }; _proto.pushComment = function pushComment( block, text, start, end, startLoc, endLoc ) { var comment = { type: block ? "CommentBlock" : "CommentLine", value: text, start: start, end: end, loc: new SourceLocation(startLoc, endLoc) }; if (!this.isLookahead) { if (this.options.tokens) this.state.tokens.push(comment); this.state.comments.push(comment); this.addComment(comment); } }; _proto.skipBlockComment = function skipBlockComment() { var startLoc = this.state.curPosition(); var start = this.state.pos; var end = this.input.indexOf( "*/", (this.state.pos += 2) ); if (end === -1) this.raise( this.state.pos - 2, "Unterminated comment" ); this.state.pos = end + 2; lineBreakG.lastIndex = start; var match; while ( (match = lineBreakG.exec(this.input)) && match.index < this.state.pos ) { ++this.state.curLine; this.state.lineStart = match.index + match[0].length; } this.pushComment( true, this.input.slice(start + 2, end), start, this.state.pos, startLoc, this.state.curPosition() ); }; _proto.skipLineComment = function skipLineComment( startSkip ) { var start = this.state.pos; var startLoc = this.state.curPosition(); var ch = this.input.charCodeAt( (this.state.pos += startSkip) ); if (this.state.pos < this.input.length) { while ( ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233 && ++this.state.pos < this.input.length ) { ch = this.input.charCodeAt(this.state.pos); } } this.pushComment( false, this.input.slice( start + startSkip, this.state.pos ), start, this.state.pos, startLoc, this.state.curPosition() ); }; // Called at the start of the parse and after every token. Skips // whitespace and comments, and. _proto.skipSpace = function skipSpace() { loop: while (this.state.pos < this.input.length) { var ch = this.input.charCodeAt(this.state.pos); switch (ch) { case 32: case 160: ++this.state.pos; break; case 13: if ( this.input.charCodeAt( this.state.pos + 1 ) === 10 ) { ++this.state.pos; } case 10: case 8232: case 8233: ++this.state.pos; ++this.state.curLine; this.state.lineStart = this.state.pos; break; case 47: switch (this.input.charCodeAt( this.state.pos + 1 )) { case 42: this.skipBlockComment(); break; case 47: this.skipLineComment(2); break; default: break loop; } break; default: if ( (ch > 8 && ch < 14) || (ch >= 5760 && nonASCIIwhitespace.test( String.fromCharCode(ch) )) ) { ++this.state.pos; } else { break loop; } } } }; // Called at the end of every token. Sets `end`, `val`, and // maintains `context` and `exprAllowed`, and skips the space after // the token, so that the next one's `start` will point at the // right position. _proto.finishToken = function finishToken(type, val) { this.state.end = this.state.pos; this.state.endLoc = this.state.curPosition(); var prevType = this.state.type; this.state.type = type; this.state.value = val; this.updateContext(prevType); }; // ### Token reading // This is the function that is called to fetch the next token. It // is somewhat obscure, because it works in character codes rather // than characters, and because operator parsing has been inlined // into it. // // All in the name of speed. // _proto.readToken_dot = function readToken_dot() { var next = this.input.charCodeAt( this.state.pos + 1 ); if (next >= 48 && next <= 57) { this.readNumber(true); return; } var next2 = this.input.charCodeAt( this.state.pos + 2 ); if (next === 46 && next2 === 46) { this.state.pos += 3; this.finishToken(types.ellipsis); } else { ++this.state.pos; this.finishToken(types.dot); } }; _proto.readToken_slash = function readToken_slash() { // '/' if (this.state.exprAllowed) { ++this.state.pos; this.readRegexp(); return; } var next = this.input.charCodeAt( this.state.pos + 1 ); if (next === 61) { this.finishOp(types.assign, 2); } else { this.finishOp(types.slash, 1); } }; _proto.readToken_mult_modulo = function readToken_mult_modulo( code ) { // '%*' var type = code === 42 ? types.star : types.modulo; var width = 1; var next = this.input.charCodeAt( this.state.pos + 1 ); var exprAllowed = this.state.exprAllowed; // Exponentiation operator ** if (code === 42 && next === 42) { width++; next = this.input.charCodeAt( this.state.pos + 2 ); type = types.exponent; } if (next === 61 && !exprAllowed) { width++; type = types.assign; } this.finishOp(type, width); }; _proto.readToken_pipe_amp = function readToken_pipe_amp( code ) { // '|&' var next = this.input.charCodeAt( this.state.pos + 1 ); if (next === code) { this.finishOp( code === 124 ? types.logicalOR : types.logicalAND, 2 ); return; } if (code === 124) { // '|>' if (next === 62) { this.finishOp(types.pipeline, 2); return; } else if ( next === 125 && this.hasPlugin("flow") ) { // '|}' this.finishOp(types.braceBarR, 2); return; } } if (next === 61) { this.finishOp(types.assign, 2); return; } this.finishOp( code === 124 ? types.bitwiseOR : types.bitwiseAND, 1 ); }; _proto.readToken_caret = function readToken_caret() { // '^' var next = this.input.charCodeAt( this.state.pos + 1 ); if (next === 61) { this.finishOp(types.assign, 2); } else { this.finishOp(types.bitwiseXOR, 1); } }; _proto.readToken_plus_min = function readToken_plus_min( code ) { // '+-' var next = this.input.charCodeAt( this.state.pos + 1 ); if (next === code) { if ( next === 45 && !this.inModule && this.input.charCodeAt( this.state.pos + 2 ) === 62 && lineBreak.test( this.input.slice( this.state.lastTokEnd, this.state.pos ) ) ) { // A `-->` line comment this.skipLineComment(3); this.skipSpace(); this.nextToken(); return; } this.finishOp(types.incDec, 2); return; } if (next === 61) { this.finishOp(types.assign, 2); } else { this.finishOp(types.plusMin, 1); } }; _proto.readToken_lt_gt = function readToken_lt_gt( code ) { // '<>' var next = this.input.charCodeAt( this.state.pos + 1 ); var size = 1; if (next === code) { size = code === 62 && this.input.charCodeAt( this.state.pos + 2 ) === 62 ? 3 : 2; if ( this.input.charCodeAt( this.state.pos + size ) === 61 ) { this.finishOp(types.assign, size + 1); return; } this.finishOp(types.bitShift, size); return; } if ( next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.state.pos + 2) === 45 && this.input.charCodeAt(this.state.pos + 3) === 45 ) { // `B'; mountPoint = containerDiv.childNodes[1]; expect(mountPoint.nodeType).toBe(COMMENT_NODE); }); it('renders at a comment node', () => { function Char(props) { return props.children; } function list(chars) { return chars.split('').map(c => {c}); } ReactDOM.render(list('aeiou'), mountPoint); expect(containerDiv.innerHTML).toBe( 'AaeiouB', ); ReactDOM.render(list('yea'), mountPoint); expect(containerDiv.innerHTML).toBe( 'AyeaB', ); ReactDOM.render(list(''), mountPoint); expect(containerDiv.innerHTML).toBe( 'AB', ); }); }); it("存在空组件", () => { const container = document.createElement('container'); class B extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return bbb; } } class C extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return ccc; } } function Empty() { return false; } ReactDOM.render(
111 222
, container ); expect(container.textContent).toBe("111222bbbccc"); ReactDOM.unmountComponentAtNode(container) }); it("存在返回数组的组件", () => { const container = document.createElement('container'); class App extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return
{this.props.children}
; } } class A extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return [aaa, bbb, ccc, ddd]; } } function Last() { return last; } function Empty() { return false; } ReactDOM.render(
111
, container ); expect(container.textContent).toBe("111aaabbbcccdddlast"); ReactDOM.unmountComponentAtNode(container) }); it("返回false的组件不生成节点", () => { const container = document.createElement('container'); class Empty1 extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return false; } } ReactDOM.render(, container); expect(container.textContent).toBe(""); ReactDOM.unmountComponentAtNode(container) }); it("返回null的组件不生成节点", () => { const container = document.createElement('container'); class Empty2 extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return null; } } ReactDOM.render(, container); expect(container.textContent).toBe(""); ReactDOM.unmountComponentAtNode(container) }); it("返回true的组件不生成节点", () => { const container = document.createElement('container'); class Empty2 extends React.Component { constructor(props) { super(props); this.state = {}; } render() { return true; } } ReactDOM.render(, container); expect(container.textContent).toBe(""); ReactDOM.unmountComponentAtNode(container) }); it("对有key的元素进行重排", () => { const container = document.createElement('container'); class App extends React.Component { constructor(props) { super(props); this.state = { a: 1 }; } render() { return (); } } let s = ReactDOM.render(, container); expect(container.textContent).toBe("111222333"); s.setState({ a: 0 }); expect(container.textContent).toBe("333444111"); ReactDOM.unmountComponentAtNode(container) }); it("对有key的组件进行重排", () => { const container = document.createElement('container'); function A(props) { return {props.value}; } class App extends React.Component { constructor(props) { super(props); this.state = { a: 1 }; } render() { return (
{this.state.a ? [, , ] : [, , ]}
); } } var s = ReactDOM.render(, container); expect(container.textContent).toBe("123"); s.setState({ a: 0 }); expect(container.textContent).toBe("321"); ReactDOM.unmountComponentAtNode(container); }); it("同一个元素节点中两个组件更新", () => { const container = document.createElement('container'); class Wrap extends React.Component { render(){ return this.props.children } } var values = [111, 222, 333, 444] class App extends React.Component { state = { text: 111 } render() { return
} } var instance = ReactDOM.render(, container); expect(Array.from(instance.refs.div.children).map(function (el) { return el.id })).toEqual(["text1", "div", "text2"]) }) }); ================================================ FILE: packages/render/dom/__tests__/ReactMountDestruction-test.js ================================================ const React = require('react'); const ReactDOM = require('react-dom'); describe('ReactMount', () => { it('should destroy a react root upon request', () => { const mainContainerDiv = document.createElement('div'); document.body.appendChild(mainContainerDiv); const instanceOne =
; const firstRootDiv = document.createElement('div'); mainContainerDiv.appendChild(firstRootDiv); ReactDOM.render(instanceOne, firstRootDiv); const instanceTwo =
; const secondRootDiv = document.createElement('div'); mainContainerDiv.appendChild(secondRootDiv); ReactDOM.render(instanceTwo, secondRootDiv); // Test that two react roots are rendered in isolation expect(firstRootDiv.firstChild.className).toBe('firstReactDiv'); expect(secondRootDiv.firstChild.className).toBe('secondReactDiv'); // Test that after unmounting each, they are no longer in the document. ReactDOM.unmountComponentAtNode(firstRootDiv); expect(firstRootDiv.firstChild).toBeNull(); ReactDOM.unmountComponentAtNode(secondRootDiv); expect(secondRootDiv.firstChild).toBeNull(); }); it('should warn when unmounting a non-container root node', () => { const mainContainerDiv = document.createElement('div'); const component = (
); ReactDOM.render(component, mainContainerDiv); // Test that unmounting at a root node gives a helpful warning const rootDiv = mainContainerDiv.firstChild; expect(() => ReactDOM.unmountComponentAtNode(rootDiv)).toWarnDev( "Warning: unmountComponentAtNode(): The node you're attempting to " + 'unmount was rendered by React and is not a top-level container. You ' + 'may have accidentally passed in a React root node instead of its ' + 'container.', ); }); it('should warn when unmounting a non-container, non-root node', () => { const mainContainerDiv = document.createElement('div'); const component = (
); ReactDOM.render(component, mainContainerDiv); // Test that unmounting at a non-root node gives a different warning const nonRootDiv = mainContainerDiv.firstChild.firstChild; expect(() => ReactDOM.unmountComponentAtNode(nonRootDiv)).toWarnDev( "Warning: unmountComponentAtNode(): The node you're attempting to " + 'unmount was rendered by React and is not a top-level container. ' + 'Instead, have the parent component update its state and rerender in ' + 'order to remove this component.', ); }); }); ================================================ FILE: packages/render/dom/__tests__/ReactMultiChild-test.js ================================================ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; describe('ReactMultiChild', () => { let React; let ReactDOM; beforeEach(() => { jest.resetModules(); React = require('react'); ReactDOM = require('react-dom'); }); describe('reconciliation', () => { it('should update children when possible', () => { const container = document.createElement('div'); const mockMount = jest.fn(); const mockUpdate = jest.fn(); const mockUnmount = jest.fn(); class MockComponent extends React.Component { componentDidMount = mockMount; componentDidUpdate = mockUpdate; componentWillUnmount = mockUnmount; render() { return ; } } expect(mockMount.mock.calls.length).toBe(0); expect(mockUpdate.mock.calls.length).toBe(0); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(
, container, ); expect(mockMount.mock.calls.length).toBe(1); expect(mockUpdate.mock.calls.length).toBe(0); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(
, container, ); expect(mockMount.mock.calls.length).toBe(1); expect(mockUpdate.mock.calls.length).toBe(1); expect(mockUnmount.mock.calls.length).toBe(0); }); it('should replace children with different constructors', () => { const container = document.createElement('div'); const mockMount = jest.fn(); const mockUnmount = jest.fn(); class MockComponent extends React.Component { componentDidMount = mockMount; componentWillUnmount = mockUnmount; render() { return ; } } expect(mockMount.mock.calls.length).toBe(0); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(
, container, ); expect(mockMount.mock.calls.length).toBe(1); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(
, container, ); expect(mockMount.mock.calls.length).toBe(1); expect(mockUnmount.mock.calls.length).toBe(1); }); it('should NOT replace children with different owners', () => { const container = document.createElement('div'); const mockMount = jest.fn(); const mockUnmount = jest.fn(); class MockComponent extends React.Component { componentDidMount = mockMount; componentWillUnmount = mockUnmount; render() { return ; } } class WrapperComponent extends React.Component { render() { return this.props.children || ; } } expect(mockMount.mock.calls.length).toBe(0); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(, container); expect(mockMount.mock.calls.length).toBe(1); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render( , container, ); expect(mockMount.mock.calls.length).toBe(1); expect(mockUnmount.mock.calls.length).toBe(0); }); it('should replace children with different keys', () => { const container = document.createElement('div'); const mockMount = jest.fn(); const mockUnmount = jest.fn(); class MockComponent extends React.Component { componentDidMount = mockMount; componentWillUnmount = mockUnmount; render() { return ; } } expect(mockMount.mock.calls.length).toBe(0); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(
, container, ); expect(mockMount.mock.calls.length).toBe(1); expect(mockUnmount.mock.calls.length).toBe(0); ReactDOM.render(
, container, ); expect(mockMount.mock.calls.length).toBe(2); expect(mockUnmount.mock.calls.length).toBe(1); }); it('should warn for duplicated array keys with component stack info', () => { const container = document.createElement('div'); class WrapperComponent extends React.Component { render() { return
{this.props.children}
; } } class Parent extends React.Component { render() { return (
{this.props.children}
); } } ReactDOM.render({[
]}, container); expect(() => ReactDOM.render( {[
,
]}, container, ), ).toWarnDev( 'Encountered two children with the same key, `1`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', ' in div (at **)\n' + ' in WrapperComponent (at **)\n' + ' in div (at **)\n' + ' in Parent (at **)', ); }); it('should warn for duplicated iterable keys with component stack info', () => { const container = document.createElement('div'); class WrapperComponent extends React.Component { render() { return
{this.props.children}
; } } class Parent extends React.Component { render() { return (
{this.props.children}
); } } function createIterable(array) { return { '@@iterator': function() { let i = 0; return { next() { const next = { value: i < array.length ? array[i] : undefined, done: i === array.length, }; i++; return next; }, }; }, }; } ReactDOM.render( {createIterable([
])}, container, ); expect(() => ReactDOM.render( {createIterable([
,
])}, container, ), ).toWarnDev( 'Encountered two children with the same key, `1`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', ' in div (at **)\n' + ' in WrapperComponent (at **)\n' + ' in div (at **)\n' + ' in Parent (at **)', ); }); }); it('should warn for using maps as children with owner info', () => { class Parent extends React.Component { render() { return
{new Map([['foo', 0], ['bar', 1]])}
; } } const container = document.createElement('div'); expect(() => ReactDOM.render(, container)).toWarnDev( 'Warning: Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.\n' + ' in div (at **)\n' + ' in Parent (at **)', ); }); it('should reorder bailed-out children', () => { class LetterInner extends React.Component { render() { return
{this.props.char}
; } } class Letter extends React.Component { render() { return ; } shouldComponentUpdate() { return false; } } class Letters extends React.Component { render() { const letters = this.props.letters.split(''); return
{letters.map(c => )}
; } } const container = document.createElement('div'); // Two random strings -- some additions, some removals, some moves ReactDOM.render(, container); expect(container.textContent).toBe('XKwHomsNjIkBcQWFbiZU'); ReactDOM.render(, container); expect(container.textContent).toBe('EHCjpdTUuiybDvhRJwZt'); }); it('prepares new children before unmounting old', () => { const log = []; class Spy extends React.Component { UNSAFE_componentWillMount() { log.push(this.props.name + ' componentWillMount'); } render() { log.push(this.props.name + ' render'); return
; } componentDidMount() { log.push(this.props.name + ' componentDidMount'); } componentWillUnmount() { log.push(this.props.name + ' componentWillUnmount'); } } // These are reference-unequal so they will be swapped even if they have // matching keys const SpyA = props => ; const SpyB = props => ; const container = document.createElement('div'); ReactDOM.render(
, container, ); ReactDOM.render(
, container, ); expect(log).toEqual([ 'oneA componentWillMount', 'oneA render', 'twoA componentWillMount', 'twoA render', 'oneA componentDidMount', 'twoA componentDidMount', 'oneB componentWillMount', 'oneB render', 'twoB componentWillMount', 'twoB render', 'oneA componentWillUnmount', 'twoA componentWillUnmount', 'oneB componentDidMount', 'twoB componentDidMount', ]); }); }); ================================================ FILE: packages/render/dom/__tests__/ReactMultiChildReconcile-test.js ================================================ const React = require('react'); const ReactDOM = require('react-dom'); const stripEmptyValues = function(obj) { const ret = {}; for (const name in obj) { if (!obj.hasOwnProperty(name)) { continue; } if (obj[name] !== null && obj[name] !== undefined) { ret[name] = obj[name]; } } return ret; }; let idCounter = 123; /** * Contains internal static internal state in order to test that updates to * existing children won't reinitialize components, when moving children - * reusing existing DOM/memory resources. */ class StatusDisplay extends React.Component { state = {internalState: idCounter++}; getStatus() { return this.props.status; } getInternalState() { return this.state.internalState; } componentDidMount() { this.props.onFlush(); } componentDidUpdate() { this.props.onFlush(); } render() { return
{this.props.contentKey}
; } } /** * Displays friends statuses. */ class FriendsStatusDisplay extends React.Component { /** * Gets the order directly from each rendered child's `index` field. * Refs are not maintained in the rendered order, and neither is * `this._renderedChildren` (surprisingly). */ getOriginalKeys() { const originalKeys = []; for (const key in this.props.usernameToStatus) { if (this.props.usernameToStatus[key]) { originalKeys.push(key); } } return originalKeys; } /** * Retrieves the rendered children in a nice format for comparing to the input * `this.props.usernameToStatus`. */ getStatusDisplays() { const res = {}; const originalKeys = this.getOriginalKeys(); for (let i = 0; i < originalKeys.length; i++) { const key = originalKeys[i]; res[key] = this.refs[key]; } return res; } /** * Verifies that by the time a child is flushed, the refs that appeared * earlier have already been resolved. * TODO: This assumption will likely break with incremental reconciler * but our internal layer API depends on this assumption. We need to change * it to be more declarative before making ref resolution indeterministic. */ verifyPreviousRefsResolved(flushedKey) { const originalKeys = this.getOriginalKeys(); for (let i = 0; i < originalKeys.length; i++) { const key = originalKeys[i]; if (key === flushedKey) { // We are only interested in children up to the current key. return; } expect(this.refs[key]).toBeTruthy(); } } render() { const children = []; for (const key in this.props.usernameToStatus) { const status = this.props.usernameToStatus[key]; children.push( !status ? null : ( ), ); } const childrenToRender = this.props.prepareChildren(children); return
{childrenToRender}
; } } function getInternalStateByUserName(statusDisplays) { return Object.keys(statusDisplays).reduce((acc, key) => { acc[key] = statusDisplays[key].getInternalState(); return acc; }, {}); } /** * Verifies that the rendered `StatusDisplay` instances match the `props` that * were responsible for allocating them. Checks the content of the user's status * message as well as the order of them. */ function verifyStatuses(statusDisplays, props) { const nonEmptyStatusDisplays = stripEmptyValues(statusDisplays); const nonEmptyStatusProps = stripEmptyValues(props.usernameToStatus); let username; expect(Object.keys(nonEmptyStatusDisplays).length).toEqual( Object.keys(nonEmptyStatusProps).length, ); for (username in nonEmptyStatusDisplays) { if (!nonEmptyStatusDisplays.hasOwnProperty(username)) { continue; } expect(nonEmptyStatusDisplays[username].getStatus()).toEqual( nonEmptyStatusProps[username], ); } // now go the other way to make sure we got them all. for (username in nonEmptyStatusProps) { if (!nonEmptyStatusProps.hasOwnProperty(username)) { continue; } expect(nonEmptyStatusDisplays[username].getStatus()).toEqual( nonEmptyStatusProps[username], ); } expect(Object.keys(nonEmptyStatusDisplays)).toEqual( Object.keys(nonEmptyStatusProps), ); } /** * For all statusDisplays that existed in the previous iteration of the * sequence, verify that the state has been preserved. `StatusDisplay` contains * a unique number that allows us to track internal state across ordering * movements. */ function verifyStatesPreserved(lastInternalStates, statusDisplays) { let key; for (key in statusDisplays) { if (!statusDisplays.hasOwnProperty(key)) { continue; } if (lastInternalStates[key]) { expect(lastInternalStates[key]).toEqual( statusDisplays[key].getInternalState(), ); } } } /** * Verifies that the internal representation of a set of `renderedChildren` * accurately reflects what is in the DOM. */ function verifyDomOrderingAccurate(outerContainer, statusDisplays) { const containerNode = outerContainer.firstChild; const statusDisplayNodes = containerNode.childNodes; const orderedDomKeys = []; for (let i = 0; i < statusDisplayNodes.length; i++) { const contentKey = statusDisplayNodes[i].textContent; orderedDomKeys.push(contentKey); } const orderedLogicalKeys = []; let username; for (username in statusDisplays) { if (!statusDisplays.hasOwnProperty(username)) { continue; } const statusDisplay = statusDisplays[username]; orderedLogicalKeys.push(statusDisplay.props.contentKey); } expect(orderedDomKeys).toEqual(orderedLogicalKeys); } function testPropsSequenceWithPreparedChildren(sequence, prepareChildren) { const container = document.createElement('div'); const parentInstance = ReactDOM.render( , container, ); let statusDisplays = parentInstance.getStatusDisplays(); let lastInternalStates = getInternalStateByUserName(statusDisplays); verifyStatuses(statusDisplays, sequence[0]); for (let i = 1; i < sequence.length; i++) { ReactDOM.render( , container, ); statusDisplays = parentInstance.getStatusDisplays(); verifyStatuses(statusDisplays, sequence[i]); verifyStatesPreserved(lastInternalStates, statusDisplays); verifyDomOrderingAccurate(container, statusDisplays); lastInternalStates = getInternalStateByUserName(statusDisplays); } } function prepareChildrenArray(childrenArray) { return childrenArray; } function prepareChildrenIterable(childrenArray) { return { '@@iterator': function*() { // eslint-disable-next-line no-for-of-loops/no-for-of-loops for (const child of childrenArray) { yield child; } }, }; } function testPropsSequence(sequence) { testPropsSequenceWithPreparedChildren(sequence, prepareChildrenArray); testPropsSequenceWithPreparedChildren(sequence, prepareChildrenIterable); } describe('ReactMultiChildReconcile', () => { beforeEach(() => { jest.resetModules(); }); it('should reset internal state if removed then readded in an array', () => { // Test basics. const props = { usernameToStatus: { jcw: 'jcwStatus', }, }; const container = document.createElement('div'); const parentInstance = ReactDOM.render( , container, ); let statusDisplays = parentInstance.getStatusDisplays(); const startingInternalState = statusDisplays.jcw.getInternalState(); // Now remove the child. ReactDOM.render( , container, ); statusDisplays = parentInstance.getStatusDisplays(); expect(statusDisplays.jcw).toBeFalsy(); // Now reset the props that cause there to be a child ReactDOM.render( , container, ); statusDisplays = parentInstance.getStatusDisplays(); expect(statusDisplays.jcw).toBeTruthy(); expect(statusDisplays.jcw.getInternalState()).not.toBe( startingInternalState, ); }); it('should reset internal state if removed then readded in an iterable', () => { // Test basics. const props = { usernameToStatus: { jcw: 'jcwStatus', }, }; const container = document.createElement('div'); const parentInstance = ReactDOM.render( , container, ); let statusDisplays = parentInstance.getStatusDisplays(); const startingInternalState = statusDisplays.jcw.getInternalState(); // Now remove the child. ReactDOM.render( , container, ); statusDisplays = parentInstance.getStatusDisplays(); expect(statusDisplays.jcw).toBeFalsy(); // Now reset the props that cause there to be a child ReactDOM.render( , container, ); statusDisplays = parentInstance.getStatusDisplays(); expect(statusDisplays.jcw).toBeTruthy(); expect(statusDisplays.jcw.getInternalState()).not.toBe( startingInternalState, ); }); it('should create unique identity', () => { // Test basics. const usernameToStatus = { jcw: 'jcwStatus', awalke: 'awalkeStatus', bob: 'bobStatus', }; testPropsSequence([{usernameToStatus: usernameToStatus}]); }); it('should preserve order if children order has not changed', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwstatus2', jordanjcw: 'jordanjcwstatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should transition from zero to one children correctly', () => { const PROPS_SEQUENCE = [ {usernameToStatus: {}}, { usernameToStatus: { first: 'firstStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should transition from one to zero children correctly', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { first: 'firstStatus', }, }, {usernameToStatus: {}}, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should transition from one child to null children', () => { testPropsSequence([ { usernameToStatus: { first: 'firstStatus', }, }, {}, ]); }); it('should transition from null children to one child', () => { testPropsSequence([ {}, { usernameToStatus: { first: 'firstStatus', }, }, ]); }); it('should transition from zero children to null children', () => { testPropsSequence([ { usernameToStatus: {}, }, {}, ]); }); it('should transition from null children to zero children', () => { testPropsSequence([ {}, { usernameToStatus: {}, }, ]); }); /** * `FriendsStatusDisplay` renders nulls as empty children (it's a convention * of `FriendsStatusDisplay`, nothing related to React or these test cases. */ it('should remove nulled out children at the beginning', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: null, jordanjcw: 'jordanjcwstatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should remove nulled out children at the end', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwstatus2', jordanjcw: null, }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should reverse the order of two children', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { userOne: 'userOneStatus', userTwo: 'userTwoStatus', }, }, { usernameToStatus: { userTwo: 'userTwoStatus', userOne: 'userOneStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should reverse the order of more than two children', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', }, }, { usernameToStatus: { userThree: 'userThreeStatus', userTwo: 'userTwoStatus', userOne: 'userOneStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should cycle order correctly', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', userFour: 'userFourStatus', }, }, { usernameToStatus: { userTwo: 'userTwoStatus', userThree: 'userThreeStatus', userFour: 'userFourStatus', userOne: 'userOneStatus', }, }, { usernameToStatus: { userThree: 'userThreeStatus', userFour: 'userFourStatus', userOne: 'userOneStatus', userTwo: 'userTwoStatus', }, }, { usernameToStatus: { userFour: 'userFourStatus', userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', }, }, { usernameToStatus: { // Full circle! userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', userFour: 'userFourStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should cycle order correctly in the other direction', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', userFour: 'userFourStatus', }, }, { usernameToStatus: { userFour: 'userFourStatus', userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', }, }, { usernameToStatus: { userThree: 'userThreeStatus', userFour: 'userFourStatus', userOne: 'userOneStatus', userTwo: 'userTwoStatus', }, }, { usernameToStatus: { userTwo: 'userTwoStatus', userThree: 'userThreeStatus', userFour: 'userFourStatus', userOne: 'userOneStatus', }, }, { usernameToStatus: { // Full circle! userOne: 'userOneStatus', userTwo: 'userTwoStatus', userThree: 'userThreeStatus', userFour: 'userFourStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should remove nulled out children and ignore new null children', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jordanjcw: 'jordanjcwstatus2', jcw: null, another: null, }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should remove nulled out children and reorder remaining', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', john: 'johnStatus', // john will go away joe: 'joeStatus', }, }, { usernameToStatus: { jordanjcw: 'jordanjcwStatus', joe: 'joeStatus', jcw: 'jcwStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should append children to the end', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', jordanjcwnew: 'jordanjcwnewStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should append multiple children to the end', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', jordanjcwnew: 'jordanjcwnewStatus', jordanjcwnew2: 'jordanjcwnewStatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should prepend children to the beginning', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { newUsername: 'newUsernameStatus', jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should prepend multiple children to the beginning', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { newNewUsername: 'newNewUsernameStatus', newUsername: 'newUsernameStatus', jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should not prepend an empty child to the beginning', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { emptyUsername: null, jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should not append an empty child to the end', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', emptyUsername: null, }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should not insert empty children in the middle', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwstatus2', skipOverMe: null, skipOverMeToo: null, definitelySkipOverMe: null, jordanjcw: 'jordanjcwstatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should insert one new child in the middle', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwstatus2', insertThis: 'insertThisStatus', jordanjcw: 'jordanjcwstatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should insert multiple new truthy children in the middle', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwstatus2', insertThis: 'insertThisStatus', insertThisToo: 'insertThisTooStatus', definitelyInsertThisToo: 'definitelyInsertThisTooStatus', jordanjcw: 'jordanjcwstatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); it('should insert non-empty children in middle where nulls were', () => { const PROPS_SEQUENCE = [ { usernameToStatus: { jcw: 'jcwStatus', insertThis: null, insertThisToo: null, definitelyInsertThisToo: null, jordanjcw: 'jordanjcwStatus', }, }, { usernameToStatus: { jcw: 'jcwstatus2', insertThis: 'insertThisStatus', insertThisToo: 'insertThisTooStatus', definitelyInsertThisToo: 'definitelyInsertThisTooStatus', jordanjcw: 'jordanjcwstatus2', }, }, ]; testPropsSequence(PROPS_SEQUENCE); }); }); ================================================ FILE: packages/render/dom/__tests__/ReactStatelessComponent-test.js ================================================ 'use strict'; let PropTypes; let React; let ReactDOM; let ReactTestUtils; function StatelessComponent(props) { return
{props.name}
; } describe('ReactStatelessComponent', () => { beforeEach(() => { jest.resetModuleRegistry(); PropTypes = require('prop-types'); React = require('react'); ReactDOM = require('react-dom'); ReactTestUtils = require('test-utils'); }); it('should render stateless component', () => { const el = document.createElement('div'); ReactDOM.render(, el); expect(el.textContent).toBe('A'); }); it('should update stateless component', () => { class Parent extends React.Component { render() { return ; } } const el = document.createElement('div'); ReactDOM.render(, el); expect(el.textContent).toBe('A'); ReactDOM.render(, el); expect(el.textContent).toBe('B'); }); it('should unmount stateless component', () => { const container = document.createElement('div'); ReactDOM.render(, container); expect(container.textContent).toBe('A'); ReactDOM.unmountComponentAtNode(container); expect(container.textContent).toBe(''); }); it('should pass context thru stateless component', () => { class Child extends React.Component { static contextTypes = { test: PropTypes.string.isRequired, }; render() { return
{this.context.test}
; } } function Parent() { return ; } class GrandParent extends React.Component { static childContextTypes = { test: PropTypes.string.isRequired, }; getChildContext() { return {test: this.props.test}; } render() { return ; } } const el = document.createElement('div'); ReactDOM.render(, el); expect(el.textContent).toBe('test'); ReactDOM.render(, el); expect(el.textContent).toBe('mest'); }); it('should warn for getDerivedStateFromProps on a functional component', () => { function StatelessComponentWithChildContext() { return null; } StatelessComponentWithChildContext.getDerivedStateFromProps = function() {}; const container = document.createElement('div'); expect(() => ReactDOM.render(, container), ).toWarnDev( 'StatelessComponentWithChildContext: Stateless ' + 'functional components do not support getDerivedStateFromProps.', ); }); it('should warn for childContextTypes on a functional component', () => { function StatelessComponentWithChildContext(props) { return
{props.name}
; } StatelessComponentWithChildContext.childContextTypes = { foo: PropTypes.string, }; const container = document.createElement('div'); expect(() => ReactDOM.render( , container, ), ).toWarnDev( 'StatelessComponentWithChildContext(...): childContextTypes cannot ' + 'be defined on a functional component.', ); }); it('should throw when stateless component returns undefined', () => { function NotAComponent() {} ReactTestUtils.renderIntoDocument(
, ); }); it('should throw on string refs in pure functions', () => { function Child() { return
; } ReactTestUtils.renderIntoDocument(); }); it('should warn when given a string ref', () => { function Indirection(props) { return
{props.children}
; } class ParentUsingStringRef extends React.Component { render() { return ( ); } } expect(() => ReactTestUtils.renderIntoDocument(), ).toWarnDev( 'Warning: Stateless function components cannot be given refs. ' + 'Attempts to access this ref will fail.\n\nCheck the render method ' + 'of `ParentUsingStringRef`.\n' + ' in StatelessComponent (at **)\n' + ' in div (at **)\n' + ' in Indirection (at **)\n' + ' in ParentUsingStringRef (at **)', ); // No additional warnings should be logged ReactTestUtils.renderIntoDocument(); }); it('should warn when given a function ref', () => { function Indirection(props) { return
{props.children}
; } class ParentUsingFunctionRef extends React.Component { render() { return ( { expect(arg).toBe(null); }} /> ); } } expect(() => ReactTestUtils.renderIntoDocument(), ).toWarnDev( 'Warning: Stateless function components cannot be given refs. ' + 'Attempts to access this ref will fail.\n\nCheck the render method ' + 'of `ParentUsingFunctionRef`.\n' + ' in StatelessComponent (at **)\n' + ' in div (at **)\n' + ' in Indirection (at **)\n' + ' in ParentUsingFunctionRef (at **)', ); // No additional warnings should be logged ReactTestUtils.renderIntoDocument(); }); it('deduplicates ref warnings based on element or owner', () => { // When owner uses JSX, we can use exact line location to dedupe warnings class AnonymousParentUsingJSX extends React.Component { render() { return {}} />; } } Object.defineProperty(AnonymousParentUsingJSX, 'name', {value: undefined}); let instance1; expect(() => { instance1 = ReactTestUtils.renderIntoDocument( , ); }).toWarnDev( 'Warning: Stateless function components cannot be given refs.', ); // Should be deduped (offending element is on the same line): instance1.forceUpdate(); // Should also be deduped (offending element is on the same line): ReactTestUtils.renderIntoDocument(); // When owner doesn't use JSX, and is anonymous, we warn once per internal instance. class AnonymousParentNotUsingJSX extends React.Component { render() { return React.createElement(StatelessComponent, { name: 'A', ref: () => {}, }); } } Object.defineProperty(AnonymousParentNotUsingJSX, 'name', { value: undefined, }); let instance2; expect(() => { instance2 = ReactTestUtils.renderIntoDocument( , ); }).toWarnDev( 'Warning: Stateless function components cannot be given refs.', ); // Should be deduped (same internal instance, no additional warnings) instance2.forceUpdate(); // Could not be deduped (different internal instance): expect(() => ReactTestUtils.renderIntoDocument(), ).toWarnDev('Warning: Stateless function components cannot be given refs.'); // When owner doesn't use JSX, but is named, we warn once per owner name class NamedParentNotUsingJSX extends React.Component { render() { return React.createElement(StatelessComponent, { name: 'A', ref: () => {}, }); } } let instance3; expect(() => { instance3 = ReactTestUtils.renderIntoDocument(); }).toWarnDev( 'Warning: Stateless function components cannot be given refs.', ); // Should be deduped (same owner name, no additional warnings): instance3.forceUpdate(); // Should also be deduped (same owner name, no additional warnings): ReactTestUtils.renderIntoDocument(); }); // This guards against a regression caused by clearing the current debug fiber. // https://github.com/facebook/react/issues/10831 it('should warn when giving a function ref with context', () => { function Child() { return null; } Child.contextTypes = { foo: PropTypes.string, }; class Parent extends React.Component { static childContextTypes = { foo: PropTypes.string, }; getChildContext() { return { foo: 'bar', }; } render() { return ; } } expect(() => ReactTestUtils.renderIntoDocument()).toWarnDev( 'Warning: Stateless function components cannot be given refs. ' + 'Attempts to access this ref will fail.\n\nCheck the render method ' + 'of `Parent`.\n' + ' in Child (at **)\n' + ' in Parent (at **)', ); }); it('should provide a null ref', () => { function Child() { return
; } const comp = ReactTestUtils.renderIntoDocument(); expect(!!comp).toBe(true); }); it('should use correct name in key warning', () => { function Child() { return
{[]}
; } expect(() => ReactTestUtils.renderIntoDocument()).toWarnDev( 'Each child in an array or iterator should have a unique "key" prop.\n\n' + 'Check the render method of `Child`.', ); }); it('should support default props and prop types', () => { function Child(props) { return
{props.test}
; } Child.defaultProps = {test: 2}; Child.propTypes = {test: PropTypes.string}; expect(() => ReactTestUtils.renderIntoDocument()).toWarnDev( 'Warning: Failed prop type: Invalid prop `test` of type `number` ' + 'supplied to `Child`, expected `string`.\n' + ' in Child (at **)', ); }); it('should receive context', () => { class Parent extends React.Component { static childContextTypes = { lang: PropTypes.string, }; getChildContext() { return {lang: 'en'}; } render() { return ; } } function Child(props, context) { return
{context.lang}
; } Child.contextTypes = {lang: PropTypes.string}; const el = document.createElement('div'); ReactDOM.render(, el); expect(el.textContent).toBe('en'); }); it('should work with arrow functions', () => { let Child = function() { return
; }; // Will create a new bound function without a prototype, much like a native // arrow function. Child = Child.bind(this); expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow(); }); it('should allow simple functions to return null', () => { const Child = function() { return null; }; expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow(); }); it('should allow simple functions to return false', () => { function Child() { return false; } expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow(); }); }); ================================================ FILE: packages/render/dom/__tests__/ReactTestUtils-test.js ================================================ 'use strict'; let createRenderer; let React; let ReactDOM; let ReactDOMServer; let ReactTestUtils; function getTestDocument(markup) { const doc = document.implementation.createHTMLDocument(''); doc.open(); doc.write( markup || 'test doc', ); doc.close(); return doc; } describe('ReactTestUtils', () => { beforeEach(() => { // createRenderer = require('react-test-renderer/shallow').createRenderer; React = require('react'); ReactDOM = require('react-dom'); ReactDOMServer = require('react-server-renderer'); ReactTestUtils = require('test-utils'); }); it('Simulate should have locally attached media events', () => { expect(Object.keys(ReactTestUtils.Simulate).sort()).toMatchSnapshot(); }); it('SimulateNative should have locally attached media events', () => { expect(Object.keys(ReactTestUtils.SimulateNative).sort()).toMatchSnapshot(); }); it('gives Jest mocks a passthrough implementation with mockComponent()', () => { class MockedComponent extends React.Component { render() { throw new Error('Should not get here.'); } } // This is close enough to what a Jest mock would give us. MockedComponent.prototype.render = jest.fn(); // Patch it up so it returns its children. ReactTestUtils.mockComponent(MockedComponent); const container = document.createElement('div'); ReactDOM.render(Hello, container); expect(container.textContent).toBe('Hello'); }); it('can scryRenderedComponentsWithType', () => { class Child extends React.Component { render() { return null; } } class Wrapper extends React.Component { render() { return (
); } } const renderedComponent = ReactTestUtils.renderIntoDocument(); const scryResults = ReactTestUtils.scryRenderedComponentsWithType( renderedComponent, Child, ); expect(scryResults.length).toBe(1); }); it('can scryRenderedDOMComponentsWithClass with TextComponent', () => { class Wrapper extends React.Component { render() { return (
Hello Jim
); } } const renderedComponent = ReactTestUtils.renderIntoDocument(); const scryResults = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, 'NonExistentClass', ); expect(scryResults.length).toBe(0); }); it('can scryRenderedDOMComponentsWithClass with className contains \\n', () => { class Wrapper extends React.Component { render() { return (
Hello Jim
); } } const renderedComponent = ReactTestUtils.renderIntoDocument(); const scryResults = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, 'x', ); expect(scryResults.length).toBe(1); }); it('can scryRenderedDOMComponentsWithClass with multiple classes', () => { class Wrapper extends React.Component { render() { return (
Hello Jim
); } } const renderedComponent = ReactTestUtils.renderIntoDocument(); const scryResults1 = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, 'x y', ); expect(scryResults1.length).toBe(1); const scryResults2 = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, 'x z', ); expect(scryResults2.length).toBe(1); const scryResults3 = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, ['x', 'y'], ); expect(scryResults3.length).toBe(1); expect(scryResults1[0]).toBe(scryResults2[0]); expect(scryResults1[0]).toBe(scryResults3[0]); const scryResults4 = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, ['x', 'a'], ); expect(scryResults4.length).toBe(0); const scryResults5 = ReactTestUtils.scryRenderedDOMComponentsWithClass( renderedComponent, ['x a'], ); expect(scryResults5.length).toBe(0); }); it('traverses children in the correct order', () => { class Wrapper extends React.Component { render() { return
{this.props.children}
; } } const container = document.createElement('div'); ReactDOM.render( {null}
purple
, container, ); const tree = ReactDOM.render(
orange
purple
, container, ); const log = []; ReactTestUtils.findAllInRenderedTree(tree, function(child) { if (ReactTestUtils.isDOMComponent(child)) { log.push(ReactDOM.findDOMNode(child).textContent); } }); // Should be document order, not mount order (which would be purple, orange) expect(log).toEqual(['orangepurple', 'orange', 'purple']); }); it('should support injected wrapper components as DOM components', () => { const injectedDOMComponents = [ 'button', 'form', 'iframe', 'img', 'input', 'option', 'select', 'textarea', ]; injectedDOMComponents.forEach(function(type) { const testComponent = ReactTestUtils.renderIntoDocument( React.createElement(type), ); expect(testComponent.tagName).toBe(type.toUpperCase()); expect(ReactTestUtils.isDOMComponent(testComponent)).toBe(true); }); // Full-page components (html, head, body) can't be rendered into a div // directly... class Root extends React.Component { render() { return ( hello hello, world ); } } const markup = ReactDOMServer.renderToString(); const testDocument = getTestDocument(markup); const component = ReactDOM.hydrate(, testDocument); expect(component.refs.html.tagName).toBe('HTML'); expect(component.refs.head.tagName).toBe('HEAD'); expect(component.refs.body.tagName).toBe('BODY'); expect(ReactTestUtils.isDOMComponent(component.refs.html)).toBe(true); expect(ReactTestUtils.isDOMComponent(component.refs.head)).toBe(true); expect(ReactTestUtils.isDOMComponent(component.refs.body)).toBe(true); }); it('can scry with stateless components involved', () => { const Stateless = () => (

); class SomeComponent extends React.Component { render() { return (

); } } const inst = ReactTestUtils.renderIntoDocument(); const hrs = ReactTestUtils.scryRenderedDOMComponentsWithTag(inst, 'hr'); expect(hrs.length).toBe(2); }); describe('Simulate', () => { it('should change the value of an input field', () => { const obj = { handler: function(e) { e.persist(); }, }; spyOnDevAndProd(obj, 'handler').and.callThrough(); const container = document.createElement('div'); const instance = ReactDOM.render( , container, ); const node = ReactDOM.findDOMNode(instance); node.value = 'giraffe'; ReactTestUtils.Simulate.change(node); expect(obj.handler).toHaveBeenCalledWith( jasmine.objectContaining({target: node}), ); }); it('should change the value of an input field in a component', () => { class SomeComponent extends React.Component { render() { return (
); } } const obj = { handler: function(e) { e.persist(); }, }; spyOnDevAndProd(obj, 'handler').and.callThrough(); const container = document.createElement('div'); const instance = ReactDOM.render( , container, ); const node = ReactDOM.findDOMNode(instance.refs.input); node.value = 'zebra'; ReactTestUtils.Simulate.change(node); expect(obj.handler).toHaveBeenCalledWith( jasmine.objectContaining({target: node}), ); }); it('should throw when attempting to use a React element', () => { /* class SomeComponent extends React.Component { render() { return
hello, world.
; } } const handler = jasmine.createSpy('spy'); const shallowRenderer = createRenderer(); const result = shallowRenderer.render( , ); expect(() => ReactTestUtils.Simulate.click(result)).toThrowError( 'TestUtils.Simulate expected a DOM node as the first argument but received ' + 'a React element. Pass the DOM node you wish to simulate the event on instead. ' + 'Note that TestUtils.Simulate will not work if you are using shallow rendering.', ); expect(handler).not.toHaveBeenCalled();*/ }); it('should throw when attempting to use a component instance', () => { class SomeComponent extends React.Component { render() { return
hello, world.
; } } const handler = jasmine.createSpy('spy'); const container = document.createElement('div'); const instance = ReactDOM.render( , container, ); expect(() => ReactTestUtils.Simulate.click(instance)).toThrowError( '第一个参数必须为元素节点', ); expect(handler).not.toHaveBeenCalled(); }); it('should not warn when used with extra properties', () => { const CLIENT_X = 100; class Component extends React.Component { handleClick = e => { expect(e.clientX).toBe(CLIENT_X); }; render() { return
; } } const element = document.createElement('div'); const instance = ReactDOM.render(, element); ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance), { clientX: CLIENT_X, }); }); it('should set the type of the event', () => { let event; const stub = jest.genMockFn().mockImplementation(e => { e.persist(); event = e; }); const container = document.createElement('div'); const instance = ReactDOM.render(
, container); const node = ReactDOM.findDOMNode(instance); ReactTestUtils.Simulate.keyDown(node); expect(event.type).toBe('keydown'); expect(event.nativeEvent.type).toBe('keydown'); }); it('should work with renderIntoDocument', () => { const onChange = jest.fn(); class MyComponent extends React.Component { render() { return (
); } } const instance = ReactTestUtils.renderIntoDocument(); const input = ReactTestUtils.findRenderedDOMComponentWithTag( instance, 'input', ); input.value = 'giraffe'; ReactTestUtils.Simulate.change(input); expect(onChange).toHaveBeenCalledWith( jasmine.objectContaining({target: input}), ); }); }); it('should call setState callback with no arguments', () => { let mockArgs; class Component extends React.Component { componentDidMount() { this.setState({}, (...args) => (mockArgs = args)); } render() { return false; } } ReactTestUtils.renderIntoDocument(); expect(mockArgs.length).toEqual(0); }); }); ================================================ FILE: packages/render/dom/__tests__/ReactUpdates-test.js ================================================ 'use strict'; let React; let ReactDOM; let ReactTestUtils; describe('ReactUpdates', () => { beforeEach(() => { React = require('react'); ReactDOM = require('react-dom'); ReactTestUtils = require('test-utils'); }); it('should batch state when updating state twice', () => { let updateCount = 0; class Component extends React.Component { state = {x: 0}; componentDidUpdate() { updateCount++; } render() { return
{this.state.x}
; } } const instance = ReactTestUtils.renderIntoDocument(); expect(instance.state.x).toBe(0); ReactDOM.unstable_batchedUpdates(function() { instance.setState({x: 1}); instance.setState({x: 2}); expect(instance.state.x).toBe(0); expect(updateCount).toBe(0); }); expect(instance.state.x).toBe(2); expect(updateCount).toBe(1); }); it('should batch state when updating two different state keys', () => { let updateCount = 0; class Component extends React.Component { state = {x: 0, y: 0}; componentDidUpdate() { updateCount++; } render() { return (
({this.state.x}, {this.state.y})
); } } const instance = ReactTestUtils.renderIntoDocument(); expect(instance.state.x).toBe(0); expect(instance.state.y).toBe(0); ReactDOM.unstable_batchedUpdates(function() { instance.setState({x: 1}); instance.setState({y: 2}); expect(instance.state.x).toBe(0); expect(instance.state.y).toBe(0); expect(updateCount).toBe(0); }); expect(instance.state.x).toBe(1); expect(instance.state.y).toBe(2); expect(updateCount).toBe(1); }); it('should batch state and props together', () => { let updateCount = 0; class Component extends React.Component { state = {y: 0}; componentDidUpdate() { updateCount++; } render() { return (
({this.props.x}, {this.state.y})
); } } const container = document.createElement('div'); const instance = ReactDOM.render(, container); expect(instance.props.x).toBe(0); expect(instance.state.y).toBe(0); ReactDOM.unstable_batchedUpdates(function() { ReactDOM.render(, container); instance.setState({y: 2}); expect(instance.props.x).toBe(0); expect(instance.state.y).toBe(0); expect(updateCount).toBe(0); }); expect(instance.props.x).toBe(1); expect(instance.state.y).toBe(2); expect(updateCount).toBe(1); }); it('should batch parent/child state updates together', () => { let parentUpdateCount = 0; class Parent extends React.Component { state = {x: 0}; componentDidUpdate() { parentUpdateCount++; } render() { return (
); } } let childUpdateCount = 0; class Child extends React.Component { state = {y: 0}; componentDidUpdate() { childUpdateCount++; } render() { return
{this.props.x + this.state.y}
; } } const instance = ReactTestUtils.renderIntoDocument(); const child = instance.refs.child; expect(instance.state.x).toBe(0); expect(child.state.y).toBe(0); ReactDOM.unstable_batchedUpdates(function() { instance.setState({x: 1}); child.setState({y: 2}); expect(instance.state.x).toBe(0); expect(child.state.y).toBe(0); expect(parentUpdateCount).toBe(0); expect(childUpdateCount).toBe(0); }); expect(instance.state.x).toBe(1); expect(child.state.y).toBe(2); expect(parentUpdateCount).toBe(1); expect(childUpdateCount).toBe(1); }); it('should batch child/parent state updates together', () => { let parentUpdateCount = 0; class Parent extends React.Component { state = {x: 0}; componentDidUpdate() { parentUpdateCount++; } render() { return (
); } } let childUpdateCount = 0; class Child extends React.Component { state = {y: 0}; componentDidUpdate() { childUpdateCount++; } render() { return
{this.props.x + this.state.y}
; } } const instance = ReactTestUtils.renderIntoDocument(); const child = instance.refs.child; expect(instance.state.x).toBe(0); expect(child.state.y).toBe(0); ReactDOM.unstable_batchedUpdates(function() { child.setState({y: 2}); instance.setState({x: 1}); expect(instance.state.x).toBe(0); expect(child.state.y).toBe(0); expect(parentUpdateCount).toBe(0); expect(childUpdateCount).toBe(0); }); expect(instance.state.x).toBe(1); expect(child.state.y).toBe(2); expect(parentUpdateCount).toBe(1); // Batching reduces the number of updates here to 1. expect(childUpdateCount).toBe(1); }); it('should support chained state updates', () => { let updateCount = 0; class Component extends React.Component { state = {x: 0}; componentDidUpdate() { updateCount++; } render() { return
{this.state.x}
; } } const instance = ReactTestUtils.renderIntoDocument(); expect(instance.state.x).toBe(0); let innerCallbackRun = false; ReactDOM.unstable_batchedUpdates(function() { instance.setState({x: 1}, function() { instance.setState({x: 2}, function() { expect(this).toBe(instance); innerCallbackRun = true; expect(instance.state.x).toBe(2); expect(updateCount).toBe(2); }); expect(instance.state.x).toBe(1); expect(updateCount).toBe(1); }); expect(instance.state.x).toBe(0); expect(updateCount).toBe(0); }); expect(innerCallbackRun).toBeTruthy(); expect(instance.state.x).toBe(2); expect(updateCount).toBe(2); }); it('should batch forceUpdate together', () => { let shouldUpdateCount = 0; let updateCount = 0; class Component extends React.Component { state = {x: 0}; shouldComponentUpdate() { shouldUpdateCount++; } componentDidUpdate() { updateCount++; } render() { return
{this.state.x}
; } } const instance = ReactTestUtils.renderIntoDocument(); expect(instance.state.x).toBe(0); let callbacksRun = 0; ReactDOM.unstable_batchedUpdates(function() { instance.setState({x: 1}, function() { callbacksRun++; }); instance.forceUpdate(function() { callbacksRun++; }); expect(instance.state.x).toBe(0); expect(updateCount).toBe(0); }); expect(callbacksRun).toBe(2); // shouldComponentUpdate shouldn't be called since we're forcing expect(shouldUpdateCount).toBe(0); expect(instance.state.x).toBe(1); expect(updateCount).toBe(1); }); it('should update children even if parent blocks updates', () => { let parentRenderCount = 0; let childRenderCount = 0; class Parent extends React.Component { shouldComponentUpdate() { return false; } render() { parentRenderCount++; return ; } } class Child extends React.Component { render() { childRenderCount++; return
; } } expect(parentRenderCount).toBe(0); expect(childRenderCount).toBe(0); let instance = ; instance = ReactTestUtils.renderIntoDocument(instance); expect(parentRenderCount).toBe(1); expect(childRenderCount).toBe(1); ReactDOM.unstable_batchedUpdates(function() { instance.setState({x: 1}); }); expect(parentRenderCount).toBe(1); expect(childRenderCount).toBe(1); ReactDOM.unstable_batchedUpdates(function() { instance.refs.child.setState({x: 1}); }); expect(parentRenderCount).toBe(1); expect(childRenderCount).toBe(2); }); it('should not reconcile children passed via props', () => { let numMiddleRenders = 0; let numBottomRenders = 0; class Top extends React.Component { render() { return ( ); } } class Middle extends React.Component { componentDidMount() { this.forceUpdate(); } render() { numMiddleRenders++; return React.Children.only(this.props.children); } } class Bottom extends React.Component { render() { numBottomRenders++; return null; } } ReactTestUtils.renderIntoDocument(); expect(numMiddleRenders).toBe(2); expect(numBottomRenders).toBe(1); }); it('should flow updates correctly', () => { let willUpdates = []; let didUpdates = []; const UpdateLoggingMixin = { UNSAFE_componentWillUpdate: function() { willUpdates.push(this.constructor.displayName); }, componentDidUpdate: function() { didUpdates.push(this.constructor.displayName); }, }; class Box extends React.Component { render() { return
{this.props.children}
; } } Object.assign(Box.prototype, UpdateLoggingMixin); class Child extends React.Component { render() { return child; } } Object.assign(Child.prototype, UpdateLoggingMixin); class Switcher extends React.Component { state = {tabKey: 'hello'}; render() { const child = this.props.children; return (
{child}
); } } Object.assign(Switcher.prototype, UpdateLoggingMixin); class App extends React.Component { render() { return ( ); } } Object.assign(App.prototype, UpdateLoggingMixin); let root = ; root = ReactTestUtils.renderIntoDocument(root); function expectUpdates(desiredWillUpdates, desiredDidUpdates) { let i; for (i = 0; i < desiredWillUpdates; i++) { expect(willUpdates).toContain(desiredWillUpdates[i]); } for (i = 0; i < desiredDidUpdates; i++) { expect(didUpdates).toContain(desiredDidUpdates[i]); } willUpdates = []; didUpdates = []; } function triggerUpdate(c) { c.setState({x: 1}); } function testUpdates(components, desiredWillUpdates, desiredDidUpdates) { let i; ReactDOM.unstable_batchedUpdates(function() { for (i = 0; i < components.length; i++) { triggerUpdate(components[i]); } }); expectUpdates(desiredWillUpdates, desiredDidUpdates); // Try them in reverse order ReactDOM.unstable_batchedUpdates(function() { for (i = components.length - 1; i >= 0; i--) { triggerUpdate(components[i]); } }); expectUpdates(desiredWillUpdates, desiredDidUpdates); } testUpdates( [root.refs.switcher.refs.box, root.refs.switcher], // Owner-child relationships have inverse will and did ['Switcher', 'Box'], ['Box', 'Switcher'], ); testUpdates( [root.refs.child, root.refs.switcher.refs.box], // Not owner-child so reconcile independently ['Box', 'Child'], ['Box', 'Child'], ); testUpdates( [root.refs.child, root.refs.switcher], // Switcher owns Box and Child, Box does not own Child ['Switcher', 'Box', 'Child'], ['Box', 'Switcher', 'Child'], ); }); it('should queue mount-ready handlers across different roots', () => { // We'll define two components A and B, then update both of them. When A's // componentDidUpdate handlers is called, B's DOM should already have been // updated. const bContainer = document.createElement('div'); let a; let b; let aUpdated = false; class A extends React.Component { state = {x: 0}; componentDidUpdate() { expect(ReactDOM.findDOMNode(b).textContent).toBe('B1'); aUpdated = true; } render() { let portal = null; // If we're using Fiber, we use Portals instead to achieve this. portal = ReactDOM.createPortal( (b = n)} />, bContainer); return (
A{this.state.x} {portal}
); } } class B extends React.Component { state = {x: 0}; render() { return
B{this.state.x}
; } } a = ReactTestUtils.renderIntoDocument(); ReactDOM.unstable_batchedUpdates(function() { a.setState({x: 1}); b.setState({x: 1}); }); expect(aUpdated).toBe(true); }); it('should flush updates in the correct order', () => { const updates = []; class Outer extends React.Component { state = {x: 0}; render() { updates.push('Outer-render-' + this.state.x); return (
); } componentDidUpdate() { const x = this.state.x; updates.push('Outer-didUpdate-' + x); updates.push('Inner-setState-' + x); this.refs.inner.setState({x: x}, function() { updates.push('Inner-callback-' + x); }); } } class Inner extends React.Component { state = {x: 0}; render() { updates.push('Inner-render-' + this.props.x + '-' + this.state.x); return
; } componentDidUpdate() { updates.push('Inner-didUpdate-' + this.props.x + '-' + this.state.x); } } const instance = ReactTestUtils.renderIntoDocument(); updates.push('Outer-setState-1'); instance.setState({x: 1}, function() { updates.push('Outer-callback-1'); updates.push('Outer-setState-2'); instance.setState({x: 2}, function() { updates.push('Outer-callback-2'); }); }); /* eslint-disable indent */ expect(updates).toEqual([ 'Outer-render-0', 'Inner-render-0-0', 'Outer-setState-1', 'Outer-render-1', 'Inner-render-1-0', 'Inner-didUpdate-1-0', 'Outer-didUpdate-1', // Happens in a batch, so don't re-render yet 'Inner-setState-1', 'Outer-callback-1', // Happens in a batch 'Outer-setState-2', // Flush batched updates all at once 'Outer-render-2', 'Inner-render-2-1', 'Inner-didUpdate-2-1', 'Inner-callback-1', 'Outer-didUpdate-2', 'Inner-setState-2', 'Outer-callback-2', 'Inner-render-2-2', 'Inner-didUpdate-2-2', 'Inner-callback-2', ]); /* eslint-enable indent */ }); it('should flush updates in the correct order across roots', () => { const instances = []; const updates = []; class MockComponent extends React.Component { render() { updates.push(this.props.depth); return
; } componentDidMount() { instances.push(this); if (this.props.depth < this.props.count) { ReactDOM.render( , ReactDOM.findDOMNode(this), ); } } } ReactTestUtils.renderIntoDocument(); expect(updates).toEqual([0, 1, 2]); ReactDOM.unstable_batchedUpdates(function() { // Simulate update on each component from top to bottom. instances.forEach(function(instance) { instance.forceUpdate(); }); }); expect(updates).toEqual([0, 1, 2, 0, 1, 2]); }); it('should queue nested updates', () => { // See https://github.com/facebook/react/issues/1147 class X extends React.Component { state = {s: 0}; render() { if (this.state.s === 0) { return (
0
); } else { return
1
; } } go = () => { this.setState({s: 1}); this.setState({s: 0}); this.setState({s: 1}); }; } class Y extends React.Component { render() { return (
); } } class Z extends React.Component { render() { return
; } UNSAFE_componentWillUpdate() { x.go(); } } let x; let y; x = ReactTestUtils.renderIntoDocument(); y = ReactTestUtils.renderIntoDocument(); expect(ReactDOM.findDOMNode(x).textContent).toBe('0'); y.forceUpdate(); expect(ReactDOM.findDOMNode(x).textContent).toBe('1'); }); it('should queue updates from during mount', () => { // See https://github.com/facebook/react/issues/1353 let a; class A extends React.Component { state = {x: 0}; UNSAFE_componentWillMount() { a = this; } render() { return
A{this.state.x}
; } } class B extends React.Component { UNSAFE_componentWillMount() { a.setState({x: 1}); } render() { return
; } } ReactDOM.unstable_batchedUpdates(function() { ReactTestUtils.renderIntoDocument( , ); }); expect(a.state.x).toBe(1); expect(ReactDOM.findDOMNode(a).textContent).toBe('A1'); }); it('calls componentWillReceiveProps setState callback properly', () => { let callbackCount = 0; class A extends React.Component { state = {x: this.props.x}; UNSAFE_componentWillReceiveProps(nextProps) { const newX = nextProps.x; this.setState({x: newX}, function() { // State should have updated by the time this callback gets called expect(this.state.x).toBe(newX); callbackCount++; }); } render() { return
{this.state.x}
; } } const container = document.createElement('div'); ReactDOM.render(
, container); ReactDOM.render(, container); expect(callbackCount).toBe(1); }); it('does not call render after a component as been deleted', () => { let renderCount = 0; let componentB = null; class B extends React.Component { state = {updates: 0}; componentDidMount() { componentB = this; } render() { renderCount++; return
; } } class A extends React.Component { state = {showB: true}; render() { return this.state.showB ? :
; } } const component = ReactTestUtils.renderIntoDocument(); ReactDOM.unstable_batchedUpdates(function() { // B will have scheduled an update but the batching should ensure that its // update never fires. componentB.setState({updates: 1}); component.setState({showB: false}); }); expect(renderCount).toBe(1); }); it('throws in setState if the update callback is not a function', () => { //没有意义的测试 return function Foo() { this.a = 1; this.b = 2; } class A extends React.Component { state = {}; render() { return
; } } let component = ReactTestUtils.renderIntoDocument(); expect(() => { expect(() => component.setState({}, 'no')).toWarnDev( 'setState(...): Expected the last optional `callback` argument to be ' + 'a function. Instead received: no.', ); }).toThrowError( 'Invalid argument passed as callback. Expected a function. Instead ' + 'received: no', ); component = ReactTestUtils.renderIntoDocument(); expect(() => { expect(() => component.setState({}, {foo: 'bar'})).toWarnDev( 'setState(...): Expected the last optional `callback` argument to be ' + 'a function. Instead received: [object Object].', ); }).toThrowError( 'Invalid argument passed as callback. Expected a function. Instead ' + 'received: [object Object]', ); // Make sure the warning is deduplicated and doesn't fire again component = ReactTestUtils.renderIntoDocument(); expect(() => component.setState({}, new Foo())).toThrowError( 'Invalid argument passed as callback. Expected a function. Instead ' + 'received: [object Object]', ); }); it('throws in forceUpdate if the update callback is not a function', () => { //没有意义的测试 return function Foo() { this.a = 1; this.b = 2; } class A extends React.Component { state = {}; render() { return
; } } let component = ReactTestUtils.renderIntoDocument(); expect(() => { expect(() => component.forceUpdate('no')).toWarnDev( 'forceUpdate(...): Expected the last optional `callback` argument to be ' + 'a function. Instead received: no.', ); }).toThrowError( 'Invalid argument passed as callback. Expected a function. Instead ' + 'received: no', ); component = ReactTestUtils.renderIntoDocument(); expect(() => { expect(() => component.forceUpdate({foo: 'bar'})).toWarnDev( 'forceUpdate(...): Expected the last optional `callback` argument to be ' + 'a function. Instead received: [object Object].', ); }).toThrowError( 'Invalid argument passed as callback. Expected a function. Instead ' + 'received: [object Object]', ); // Make sure the warning is deduplicated and doesn't fire again component = ReactTestUtils.renderIntoDocument(); expect(() => component.forceUpdate(new Foo())).toThrowError( 'Invalid argument passed as callback. Expected a function. Instead ' + 'received: [object Object]', ); }); it('does not update one component twice in a batch (#2410)', () => { class Parent extends React.Component { getChild = () => { return this.refs.child; }; render() { return ; } } let renderCount = 0; let postRenderCount = 0; let once = false; class Child extends React.Component { state = {updated: false}; UNSAFE_componentWillUpdate() { if (!once) { once = true; this.setState({updated: true}); } } componentDidMount() { expect(renderCount).toBe(postRenderCount + 1); postRenderCount++; } componentDidUpdate() { expect(renderCount).toBe(postRenderCount + 1); postRenderCount++; } render() { expect(renderCount).toBe(postRenderCount); renderCount++; return
; } } const parent = ReactTestUtils.renderIntoDocument(); const child = parent.getChild(); ReactDOM.unstable_batchedUpdates(function() { parent.forceUpdate(); child.forceUpdate(); }); }); it('does not update one component twice in a batch (#6371)', () => { let callbacks = []; function emitChange() { callbacks.forEach(c => c()); } class App extends React.Component { constructor(props) { super(props); this.state = {showChild: true}; } componentDidMount() { this.setState({showChild: false}); } render() { return (
{this.state.showChild && }
); } } class EmitsChangeOnUnmount extends React.Component { componentWillUnmount() { emitChange(); } render() { return null; } } class ForceUpdatesOnChange extends React.Component { componentDidMount() { this.onChange = () => this.forceUpdate(); this.onChange(); callbacks.push(this.onChange); } componentWillUnmount() { callbacks = callbacks.filter(c => c !== this.onChange); } render() { return
; } } ReactDOM.render(, document.createElement('div')); }); it('unstable_batchedUpdates should return value from a callback', () => { const result = ReactDOM.unstable_batchedUpdates(function() { return 42; }); expect(result).toEqual(42); }); it('unmounts and remounts a root in the same batch', () => { const container = document.createElement('div'); ReactDOM.render(a, container); ReactDOM.unstable_batchedUpdates(function() { ReactDOM.unmountComponentAtNode(container); ReactDOM.render(b, container); }); expect(container.textContent).toBe('b'); }); it('handles reentrant mounting in synchronous mode', () => { let mounts = 0; class Editor extends React.Component { render() { return
{this.props.text}
; } componentDidMount() { mounts++; // This should be called only once but we guard just in case. if (!this.props.rendered) { this.props.onChange({rendered: true}); } } } const container = document.createElement('div'); function render() { ReactDOM.render( { props = {...props, ...newProps}; render(); }} {...props} />, container, ); } let props = {text: 'hello', rendered: false}; render(); props = {...props, text: 'goodbye'}; render(); expect(container.textContent).toBe('goodbye'); expect(mounts).toBe(1); }); it('mounts and unmounts are sync even in a batch', () => { const ops = []; const container = document.createElement('div'); ReactDOM.unstable_batchedUpdates(() => { ReactDOM.render(
Hello
, container); ops.push(container.textContent); ReactDOM.unmountComponentAtNode(container); ops.push(container.textContent); }); expect(ops).toEqual(['Hello', '']); }); it( 'in sync mode, updates in componentWillUpdate and componentDidUpdate ' + 'should both flush in the immediately subsequent commit', () => { let ops = []; class Foo extends React.Component { state = {a: false, b: false}; UNSAFE_componentWillUpdate(_, nextState) { if (!nextState.a) { this.setState({a: true}); } } componentDidUpdate() { ops.push('Foo updated'); if (!this.state.b) { this.setState({b: true}); } } render() { ops.push(`a: ${this.state.a}, b: ${this.state.b}`); return null; } } const container = document.createElement('div'); // Mount ReactDOM.render(, container); // Root update ReactDOM.render(, container); expect(ops).toEqual([ // Mount 'a: false, b: false', // Root update 'a: false, b: false', 'Foo updated', // Subsequent update (both a and b should have flushed) 'a: true, b: true', 'Foo updated', // There should not be any additional updates ]); }, ); it( 'in sync mode, updates in componentWillUpdate and componentDidUpdate ' + '(on a sibling) should both flush in the immediately subsequent commit', () => { let ops = []; class Foo extends React.Component { state = {a: false}; UNSAFE_componentWillUpdate(_, nextState) { if (!nextState.a) { this.setState({a: true}); } } componentDidUpdate() { ops.push('Foo updated'); } render() { ops.push(`a: ${this.state.a}`); return null; } } class Bar extends React.Component { state = {b: false}; componentDidUpdate() { ops.push('Bar updated'); if (!this.state.b) { this.setState({b: true}); } } render() { ops.push(`b: ${this.state.b}`); return null; } } const container = document.createElement('div'); // Mount ReactDOM.render(
, container, ); // Root update ReactDOM.render(
, container, ); expect(ops).toEqual([ // Mount 'a: false', 'b: false', // Root update 'a: false', 'b: false', 'Foo updated', 'Bar updated', // Subsequent update (both a and b should have flushed) 'a: true', 'b: true', 'Foo updated', 'Bar updated', // There should not be any additional updates ]); }, ); it('uses correct base state for setState inside render phase', () => { let ops = []; class Foo extends React.Component { state = {step: 0}; render() { const memoizedStep = this.state.step; this.setState(baseState => { const baseStep = baseState.step; ops.push(`base: ${baseStep}, memoized: ${memoizedStep}`); return baseStep === 0 ? {step: 1} : null; }); return null; } } const container = document.createElement('div'); expect(() => ReactDOM.render(, container)).toWarnDev( 'Cannot update during an existing state transition', ); expect(ops).toEqual(['base: 0, memoized: 0', 'base: 1, memoized: 1']); }); it('does not re-render if state update is null', () => { let container = document.createElement('div'); let instance; let ops = []; class Foo extends React.Component { render() { instance = this; ops.push('render'); return
; } } ReactDOM.render(, container); ops = []; instance.setState(() => null); expect(ops).toEqual([]); }); // Will change once we switch to async by default it('synchronously renders hidden subtrees', () => { const container = document.createElement('div'); let ops = []; function Baz() { ops.push('Baz'); return null; } function Bar() { ops.push('Bar'); return null; } function Foo() { ops.push('Foo'); return (
); } // Mount ReactDOM.render(, container); expect(ops).toEqual(['Foo', 'Bar', 'Baz']); ops = []; // Update ReactDOM.render(, container); expect(ops).toEqual(['Foo', 'Bar', 'Baz']); }); it('can render ridiculously large number of roots without triggering infinite update loop error', () => { class Foo extends React.Component { componentDidMount() { const limit = 1200; for (let i = 0; i < limit; i++) { if (i < limit - 1) { ReactDOM.render(
, document.createElement('div')); } else { ReactDOM.render(
, document.createElement('div'), () => { // The "nested update limit" error isn't thrown until setState this.setState({}); }); } } } render() { return null; } } const container = document.createElement('div'); ReactDOM.render(, container); }); it('does not fall into an infinite update loop', () => { class NonTerminating extends React.Component { state = {step: 0}; componentDidMount() { this.setState({step: 1}); } UNSAFE_componentWillUpdate() { this.setState({step: 2}); } render() { return (
Hello {this.props.name} {this.state.step}
); } } const container = document.createElement('div'); expect(() => { ReactDOM.render(, container); }).toThrow('Maximum'); }); it('does not fall into an infinite error loop', () => { function BadRender() { throw new Error('error'); } class ErrorBoundary extends React.Component { componentDidCatch() { this.props.parent.remount(); } render() { return ; } } class NonTerminating extends React.Component { state = {step: 0}; remount() { this.setState(state => ({step: state.step + 1})); } render() { return ; } } const container = document.createElement('div'); expect(() => { ReactDOM.render(, container); }).toThrow('Maximum'); }); }); ================================================ FILE: packages/render/dom/__tests__/__snapshots__/ReactTestUtils-test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ReactTestUtils Simulate should have locally attached media events 1`] = ` Array [ "KeyPress", "blur", "change", "click", "focus", "input", "keyDown", "keyUp", "mouseDown", "mouseMove", "mouseUp", ] `; exports[`ReactTestUtils SimulateNative should have locally attached media events 1`] = ` Array [ "KeyPress", "blur", "change", "click", "focus", "input", "keyDown", "keyUp", "mouseDown", "mouseMove", "mouseUp", ] `; ================================================ FILE: packages/render/dom/__tests__/findDOMNode-test.js ================================================ "use strict"; const React = require("react"); const ReactDOM = require("react-dom"); const ReactTestUtils = require("test-utils"); describe("findDOMNode", () => { it("findDOMNode should return null if passed null", () => { expect(ReactDOM.findDOMNode(null)).toBe(null); }); it("findDOMNode should return null if passed undefined", () => { expect(ReactDOM.findDOMNode(void 666)).toBe(null); }); it("findDOMNode should find dom element", () => { class MyNode extends React.Component { render() { return (
Noise
); } } const myNode = ReactTestUtils.renderIntoDocument(); const myDiv = ReactDOM.findDOMNode(myNode); const mySameDiv = ReactDOM.findDOMNode(myDiv); expect(myDiv.tagName).toBe("DIV"); expect(mySameDiv).toBe(myDiv); }); it("findDOMNode should find dom element after an update from null", () => { function Bar({flag}) { if (flag) { return A; } return null; } class MyNode extends React.Component { render() { return ; } } const container = document.createElement("div"); const myNodeA = ReactDOM.render(, container); const a = ReactDOM.findDOMNode(myNodeA); expect(a).toBe(null); const myNodeB = ReactDOM.render(, container); expect(myNodeA === myNodeB).toBe(true); const b = ReactDOM.findDOMNode(myNodeB); expect(b.tagName).toBe("SPAN"); }); it("findDOMNode should reject random objects", () => { expect(function() { ReactDOM.findDOMNode({foo: "bar"}); }).toThrowError( // 'Element appears to be neither ReactComponent nor DOMNode. Keys: foo', ); }); it("findDOMNode should reject unmounted objects with render func", () => { class Foo extends React.Component { render() { return
; } } const container = document.createElement("div"); const inst = ReactDOM.render(, container); ReactDOM.unmountComponentAtNode(container); //这里与官方不一致 expect(() => ReactDOM.findDOMNode(inst)).not.toThrowError( ); }); it("findDOMNode should not throw an error when called within a component that is not mounted", () => { class Bar extends React.Component { UNSAFE_componentWillMount() { expect(ReactDOM.findDOMNode(this)).toBeNull(); } render() { return
; } } expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow(); }); }); ================================================ FILE: packages/render/dom/__tests__/refs-destruction-test.js ================================================ 'use strict'; let React; let ReactDOM; let ReactTestUtils; let TestComponent; describe('refs-destruction', () => { beforeEach(() => { jest.resetModules(); React = require('react'); ReactDOM = require('react-dom'); ReactTestUtils = require('test-utils'); class ClassComponent extends React.Component { render() { return null; } } TestComponent = class extends React.Component { render() { if (this.props.destroy) { return
; } else if (this.props.removeRef) { return (
); } else { return (
); } } }; }); it('should remove refs when destroying the parent', () => { const container = document.createElement('div'); const testInstance = ReactDOM.render(, container); expect(ReactTestUtils.isDOMComponent(testInstance.refs.theInnerDiv)).toBe( true, ); expect( Object.keys(testInstance.refs || {}).filter(key => testInstance.refs[key]) .length, ).toEqual(2); ReactDOM.unmountComponentAtNode(container); expect( Object.keys(testInstance.refs || {}).filter(key => testInstance.refs[key]) .length, ).toEqual(0); }); it('should remove refs when destroying the child', () => { const container = document.createElement('div'); const testInstance = ReactDOM.render(, container); expect(ReactTestUtils.isDOMComponent(testInstance.refs.theInnerDiv)).toBe( true, ); expect( Object.keys(testInstance.refs || {}).filter(key => testInstance.refs[key]) .length, ).toEqual(2); ReactDOM.render(, container); expect( Object.keys(testInstance.refs || {}).filter(key => testInstance.refs[key]) .length, ).toEqual(0); }); it('should remove refs when removing the child ref attribute', () => { const container = document.createElement('div'); const testInstance = ReactDOM.render(, container); expect(ReactTestUtils.isDOMComponent(testInstance.refs.theInnerDiv)).toBe( true, ); expect( Object.keys(testInstance.refs || {}).filter(key => testInstance.refs[key]) .length, ).toEqual(2); ReactDOM.render(, container); expect( Object.keys(testInstance.refs || {}).filter(key => testInstance.refs[key]) .length, ).toEqual(0); }); it("在componentWillUnmount中refs中的元素节点还能访问到父节点", ()=>{ const container = document.createElement('div'); var a class Inner extends React.Component{ render(){ return

xxx

} componentWillUnmount(){ a = this.refs.zzz.parentNode; } } ReactDOM.render(

, container) ReactDOM.unmountComponentAtNode(container) expect(!!a).toBe(true) }) it('should not error when destroying child with ref asynchronously', () => { class Modal extends React.Component { componentDidMount() { this.div = document.createElement('div'); document.body.appendChild(this.div); this.componentDidUpdate(); } componentDidUpdate() { ReactDOM.render(
{this.props.children}
, this.div); } componentWillUnmount() { const self = this; // some async animation setTimeout(function() { expect(function() { ReactDOM.unmountComponentAtNode(self.div); }).not.toThrow(); document.body.removeChild(self.div); }, 0); } render() { return null; } } class AppModal extends React.Component { render() { return ( ); } } class App extends React.Component { render() { return this.props.hidden ? null : ; } } const container = document.createElement('div'); ReactDOM.render(, container); ReactDOM.render(
); } return ( {children} ); } } /** * Only purpose is to test that refs are tracked even when applied to a * component that is injected down several layers. Ref systems are difficult to * build in such a way that ownership is maintained in an airtight manner. */ class GeneralContainerComponent extends React.Component { render() { return
{this.props.children}
; } } /** * Notice how refs ownership is maintained even when injecting a component * into a different parent. */ class TestRefsComponent extends React.Component { doReset = () => { this.refs.myCounter.triggerReset(); }; render() { return (
Reset Me By Clicking This.
); } } /** * Render a TestRefsComponent and ensure that the main refs are wired up. */ const renderTestRefsComponent = function() { const testRefsComponent = ReactTestUtils.renderIntoDocument(); expect(testRefsComponent instanceof TestRefsComponent).toBe(true); const generalContainer = testRefsComponent.refs.myContainer; expect(generalContainer instanceof GeneralContainerComponent).toBe(true); const counter = testRefsComponent.refs.myCounter; expect(counter instanceof ClickCounter).toBe(true); return testRefsComponent; }; const expectClickLogsLengthToBe = function(instance, length) { const clickLogs = ReactTestUtils.scryRenderedDOMComponentsWithClass(instance, 'clickLogDiv'); expect(clickLogs.length).toBe(length); expect(Object.keys(instance.refs.myCounter.refs).length).toBe(length); }; describe('reactiverefs', () => { beforeEach(() => { jest.resetModules(); React = require('react'); ReactTestUtils = require('test-utils'); }); /** * Ensure that for every click log there is a corresponding ref (from the * perspective of the injected ClickCounter component. */ it('Should increase refs with an increase in divs', () => { const testRefsComponent = renderTestRefsComponent(); const clickIncrementer = ReactTestUtils.findRenderedDOMComponentWithClass( testRefsComponent, 'clickIncrementer' ); expectClickLogsLengthToBe(testRefsComponent, 1); // After clicking the reset, there should still only be one click log ref. ReactTestUtils.Simulate.click(testRefsComponent.refs.resetDiv); expectClickLogsLengthToBe(testRefsComponent, 1); // Begin incrementing clicks (and therefore refs). ReactTestUtils.Simulate.click(clickIncrementer); expectClickLogsLengthToBe(testRefsComponent, 2); ReactTestUtils.Simulate.click(clickIncrementer); expectClickLogsLengthToBe(testRefsComponent, 3); // Now reset again ReactTestUtils.Simulate.click(testRefsComponent.refs.resetDiv); expectClickLogsLengthToBe(testRefsComponent, 1); }); }); describe('factory components', () => { it('Should correctly get the ref', () => { function Comp() { return { render() { return
; }, }; } const inst = ReactTestUtils.renderIntoDocument(); expect(inst.refs.elemRef.tagName).toBe('DIV'); }); }); /** * Tests that when a ref hops around children, we can track that correctly. */ describe('ref swapping', () => { let RefHopsAround; beforeEach(() => { jest.resetModules(); React = require('react'); ReactTestUtils = require('test-utils'); RefHopsAround = class extends React.Component { state = { count: 0 }; moveRef = () => { this.setState({ count: this.state.count + 1 }); }; render() { const count = this.state.count; /** * What we have here, is three divs with refs (div1/2/3), but a single * moving cursor ref `hopRef` that "hops" around the three. We'll call the * `moveRef()` function several times and make sure that the hop ref * points to the correct divs. */ return (
); } }; }); it('Allow refs to hop around children correctly', () => { const refHopsAround = ReactTestUtils.renderIntoDocument(); const firstDiv = ReactTestUtils.findRenderedDOMComponentWithClass(refHopsAround, 'first'); const secondDiv = ReactTestUtils.findRenderedDOMComponentWithClass(refHopsAround, 'second'); const thirdDiv = ReactTestUtils.findRenderedDOMComponentWithClass(refHopsAround, 'third'); expect(refHopsAround.refs.hopRef).toEqual(firstDiv); expect(refHopsAround.refs.divTwoRef).toEqual(secondDiv); expect(refHopsAround.refs.divThreeRef).toEqual(thirdDiv); refHopsAround.moveRef(); expect(refHopsAround.refs.divOneRef).toEqual(firstDiv); expect(refHopsAround.refs.hopRef).toEqual(secondDiv); expect(refHopsAround.refs.divThreeRef).toEqual(thirdDiv); refHopsAround.moveRef(); expect(refHopsAround.refs.divOneRef).toEqual(firstDiv); expect(refHopsAround.refs.divTwoRef).toEqual(secondDiv); expect(refHopsAround.refs.hopRef).toEqual(thirdDiv); /** * Make sure that after the third, we're back to where we started and the * refs are completely restored. */ refHopsAround.moveRef(); expect(refHopsAround.refs.hopRef).toEqual(firstDiv); expect(refHopsAround.refs.divTwoRef).toEqual(secondDiv); expect(refHopsAround.refs.divThreeRef).toEqual(thirdDiv); }); it('always has a value for this.refs', () => { class Component extends React.Component { render() { return
; } } const instance = ReactTestUtils.renderIntoDocument(); expect(!!instance.refs).toBe(true); }); it('ref called correctly for stateless component', () => { let refCalled = 0; function Inner(props) { return ; } class Outer extends React.Component { saveA = () => { refCalled++; }; componentDidMount() { this.setState({}); } render() { return ; } } ReactTestUtils.renderIntoDocument(); expect(refCalled).toBe(1); }); it('coerces numbers to strings', () => { class A extends React.Component { render() { return
; } } const a = ReactTestUtils.renderIntoDocument(); expect(a.refs[1].nodeName).toBe('DIV'); }); }); describe('root level refs', () => { it('attaches and detaches root refs', () => { const ReactDOM = require('react-dom'); let inst = null; // host node let ref = jest.fn(value => (inst = value)); const container = document.createElement('div'); let result = ReactDOM.render(
, container); expect(ref).toHaveBeenCalledTimes(1); expect(ref.mock.calls[0][0]).toBeInstanceOf(HTMLDivElement); expect(result).toBe(ref.mock.calls[0][0]); ReactDOM.unmountComponentAtNode(container); expect(ref).toHaveBeenCalledTimes(2); expect(ref.mock.calls[1][0]).toBe(null); // composite class Comp extends React.Component { method() { return true; } render() { return
Comp
; } } inst = null; ref = jest.fn(value => (inst = value)); result = ReactDOM.render(, container); expect(ref).toHaveBeenCalledTimes(1); expect(inst).toBeInstanceOf(Comp); expect(result).toBe(inst); // ensure we have the correct instance expect(result.method()).toBe(true); expect(inst.method()).toBe(true); ReactDOM.unmountComponentAtNode(container); expect(ref).toHaveBeenCalledTimes(2); expect(ref.mock.calls[1][0]).toBe(null); // fragment inst = null; ref = jest.fn(value => (inst = value)); let divInst = null; const ref2 = jest.fn(value => (divInst = value)); result = ReactDOM.render( [ , 5,
Hello
, ], container ); // first call should be `Comp` expect(ref).toHaveBeenCalledTimes(1); expect(ref.mock.calls[0][0]).toBeInstanceOf(Comp); expect(result).toBe(ref.mock.calls[0][0]); expect(ref2).toHaveBeenCalledTimes(1); expect(divInst).toBeInstanceOf(HTMLDivElement); expect(result).not.toBe(divInst); ReactDOM.unmountComponentAtNode(container); expect(ref).toHaveBeenCalledTimes(2); expect(ref.mock.calls[1][0]).toBe(null); expect(ref2).toHaveBeenCalledTimes(2); expect(ref2.mock.calls[1][0]).toBe(null); // null result = ReactDOM.render(null, container); expect(result).toBe(null); // primitives result = ReactDOM.render(5, container); expect(result).toBeInstanceOf(Text); }); }); describe('creating element with ref in constructor', () => { class RefTest extends React.Component { constructor(props) { super(props); this.p =

Hello!

; } render() { return
{this.p}
; } } it('throws an error', () => { ReactTestUtils = require('test-utils'); // expect(function() { ReactTestUtils.renderIntoDocument(); // }).toThrowError( // 'Element ref was specified as a string (p) but no owner was set. This could happen for one of' + // ' the following reasons:\n' + // '1. You may be adding a ref to a functional component\n' + // "2. You may be adding a ref to a component that was not created inside a component's render method\n" + // '3. You have multiple copies of React loaded\n' + // 'See https://fb.me/react-refs-must-have-owner for more information.', // ); }); }); ================================================ FILE: packages/render/dom/__tests__/renderSubtreeIntoContainer-test.js ================================================ 'use strict'; const React = require('react'); const PropTypes = require('prop-types'); const ReactDOM = require('react-dom'); const ReactTestUtils = require('test-utils'); const renderSubtreeIntoContainer = require('react-dom') .unstable_renderSubtreeIntoContainer; describe('renderSubtreeIntoContainer', () => { it('should pass context when rendering subtree elsewhere', () => { const portal = document.createElement('div'); class Component extends React.Component { static contextTypes = { foo: PropTypes.string.isRequired, }; render() { return
{this.context.foo}
; } } class Parent extends React.Component { static childContextTypes = { foo: PropTypes.string.isRequired, }; getChildContext() { return { foo: 'bar', }; } render() { return null; } componentDidMount() { expect( function() { renderSubtreeIntoContainer(this, , portal); }.bind(this), ).not.toThrow(); } } ReactTestUtils.renderIntoDocument(); expect(portal.firstChild.innerHTML).toBe('bar'); }); it('should throw if parentComponent is invalid', () => { const portal = document.createElement('div'); class Component extends React.Component { static contextTypes = { foo: PropTypes.string.isRequired, }; render() { return
{this.context.foo}
; } } // ESLint is confused here and thinks Parent is unused, presumably because // it is only used inside of the class body? // eslint-disable-next-line no-unused-vars class Parent extends React.Component { static childContextTypes = { foo: PropTypes.string.isRequired, }; getChildContext() { return { foo: 'bar', }; } render() { return null; } componentDidMount() { expect(function() { renderSubtreeIntoContainer(, , portal); }).toThrowError('parentComponentmust be a valid React Component'); } } }); it('should update context if it changes due to setState', () => { const container = document.createElement('div'); document.body.appendChild(container); const portal = document.createElement('div'); class Component extends React.Component { static contextTypes = { foo: PropTypes.string.isRequired, getFoo: PropTypes.func.isRequired, }; render() { return
{this.context.foo + '-' + this.context.getFoo()}
; } } class Parent extends React.Component { static childContextTypes = { foo: PropTypes.string.isRequired, getFoo: PropTypes.func.isRequired, }; state = { bar: 'initial', }; getChildContext() { return { foo: this.state.bar, getFoo: () => this.state.bar, }; } render() { return null; } componentDidMount() { renderSubtreeIntoContainer(this, , portal); } componentDidUpdate() { renderSubtreeIntoContainer(this, , portal); } } const instance = ReactDOM.render(, container); expect(portal.firstChild.innerHTML).toBe('initial-initial'); instance.setState({bar: 'changed'}); expect(portal.firstChild.innerHTML).toBe('changed-changed'); }); it('should update context if it changes due to re-render', () => { const container = document.createElement('div'); document.body.appendChild(container); const portal = document.createElement('div'); class Component extends React.Component { static contextTypes = { foo: PropTypes.string.isRequired, getFoo: PropTypes.func.isRequired, }; render() { return
{this.context.foo + '-' + this.context.getFoo()}
; } } class Parent extends React.Component { static childContextTypes = { foo: PropTypes.string.isRequired, getFoo: PropTypes.func.isRequired, }; getChildContext() { return { foo: this.props.bar, getFoo: () => this.props.bar, }; } render() { return null; } componentDidMount() { renderSubtreeIntoContainer(this, , portal); } componentDidUpdate() { renderSubtreeIntoContainer(this, , portal); } } ReactDOM.render(, container); expect(portal.firstChild.innerHTML).toBe('initial-initial'); ReactDOM.render(, container); expect(portal.firstChild.innerHTML).toBe('changed-changed'); }); it('should render portal with non-context-provider parent', () => { const container = document.createElement('div'); document.body.appendChild(container); const portal = document.createElement('div'); class Parent extends React.Component { render() { return null; } componentDidMount() { renderSubtreeIntoContainer(this,
hello
, portal); } } ReactDOM.render(, container); expect(portal.firstChild.innerHTML).toBe('hello'); }); it('should get context through non-context-provider parent', () => { const container = document.createElement('div'); document.body.appendChild(container); const portal = document.createElement('div'); class Parent extends React.Component { render() { return ; } getChildContext() { return {value: this.props.value}; } static childContextTypes = { value: PropTypes.string.isRequired, }; } class Middle extends React.Component { render() { return null; } componentDidMount() { renderSubtreeIntoContainer(this, , portal); } } class Child extends React.Component { static contextTypes = { value: PropTypes.string.isRequired, }; render() { return
{this.context.value}
; } } ReactDOM.render(, container); expect(portal.textContent).toBe('foo'); }); it('should get context through middle non-context-provider layer', () => { const container = document.createElement('div'); document.body.appendChild(container); const portal1 = document.createElement('div'); const portal2 = document.createElement('div'); class Parent extends React.Component { render() { return null; } getChildContext() { return {value: this.props.value}; } componentDidMount() { renderSubtreeIntoContainer(this, , portal1); } static childContextTypes = { value: PropTypes.string.isRequired, }; } class Middle extends React.Component { render() { return null; } componentDidMount() { renderSubtreeIntoContainer(this, , portal2); } } class Child extends React.Component { static contextTypes = { value: PropTypes.string.isRequired, }; render() { return
{this.context.value}
; } } ReactDOM.render(, container); expect(portal2.textContent).toBe('foo'); }); it('fails gracefully when mixing React 15 and 16', () => { class C extends React.Component { render() { return
; } } const c = ReactDOM.render(, document.createElement('div')); // React 15 calls this: // https://github.com/facebook/react/blob/77b71fc3c4/src/renderers/dom/client/ReactMount.js#L478-L479 expect(() => { c._reactInternalInstance._processChildContext({}); }).toThrow( __DEV__ ? '_processChildContext is not available in React 16+. This likely ' + 'means you have multiple copies of React and are attempting to nest ' + 'a React 15 tree inside a React 16 tree using ' + "unstable_renderSubtreeIntoContainer, which isn't supported. Try to " + 'make sure you have only one copy of React (and ideally, switch to ' + 'ReactDOM.createPortal).' : "Cannot read property '_processChildContext' of undefined", ); }); }); ================================================ FILE: packages/render/dom/browser.js ================================================ import { typeNumber, getWindow, toWarnDev } from "react-core/util"; //用于后端的元素节点 export function DOMElement(type) { this.nodeName = type; this.style = {}; this.children = []; } export const NAMESPACE = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xlink: "http://www.w3.org/1999/xlink", xhtml: "http://www.w3.org/1999/xhtml", math: "http://www.w3.org/1998/Math/MathML" }; let fn = (DOMElement.prototype = { contains: Boolean }); String( "replaceChild,appendChild,removeAttributeNS,setAttributeNS,removeAttribute,setAttribute" + ",getAttribute,insertBefore,removeChild,addEventListener,removeEventListener,attachEvent" + ",detachEvent" ).replace(/\w+/g, function(name) { fn[name] = function() { toWarnDev("need implement " + name); // eslint-disable-line }; }); //用于后端的document export let fakeDoc = new DOMElement(); fakeDoc.createElement = fakeDoc.createElementNS = fakeDoc.createDocumentFragment = function( type ) { return new DOMElement(type); }; fakeDoc.createTextNode = fakeDoc.createComment = Boolean; fakeDoc.documentElement = new DOMElement("html"); fakeDoc.body = new DOMElement("body"); fakeDoc.nodeName = "#document"; fakeDoc.textContent = ""; let win = getWindow(); export let inBrowser = !!win.alert; if (!inBrowser) { win.document = fakeDoc; } export let document = win.document; const versions = { 88: 7, //IE7-8 objectobject 80: 6, //IE6 objectundefined "00": NaN, // other modern browsers "08": NaN }; /* istanbul ignore next */ export let msie = document.documentMode || versions[typeNumber(document.all) + "" + typeNumber(win.XMLHttpRequest)]; export let modern = /NaN|undefined/.test(msie) || msie > 8; export function contains(a, b) { if (b) { while ((b = b.parentNode)) { if (b === a) { return true; } } } return false; } ================================================ FILE: packages/render/dom/compat.js ================================================ import { document, msie } from "./browser"; import { actionStrategy } from "./props"; import { oneObject, innerHTML, extend, inherit } from "react-core/util"; import { eventHooks, addEvent, eventPropHooks, createHandle, dispatchEvent, focusMap } from "./event"; //IE8中select.value不会在onchange事件中随用户的选中而改变其value值,也不让用户直接修改value 只能通过这个hack改变 let noCheck = false; function setSelectValue(e) { if (e.propertyName === "value" && !noCheck) { syncValueByOptionValue(e.srcElement); } } function syncValueByOptionValue(dom) { let idx = dom.selectedIndex, option, attr; if (idx > -1) { //IE 下select.value不会改变 option = dom.options[idx]; attr = option.attributes.value; dom.value = attr && attr.specified ? option.value : option.text; } } let fixIEChangeHandle = createHandle("change", function(e) { let dom = e.srcElement; if (dom.type === "select-one") { if (!dom.__bindFixValueFn) { addEvent(dom, "propertychange", setSelectValue); dom.__bindFixValueFn = true; } noCheck = true; syncValueByOptionValue(dom); noCheck = false; return true; } if (e.type === "propertychange") { return e.propertyName === "value" && !dom.__anuSetValue; } }); let fixIEInputHandle = createHandle("input", function(e) { return e.propertyName === "value"; }); let IEHandleFix = { input: function(dom) { addEvent(dom, "propertychange", fixIEInputHandle); }, change: function(dom) { //IE6-8, radio, checkbox的点击事件必须在失去焦点时才触发 select则需要做更多补丁工件 let mask = /radio|check/.test(dom.type) ? "click" : /text|password/.test(dom.type) ? "propertychange" : "change"; addEvent(dom, mask, fixIEChangeHandle); }, submit: function(dom) { if (dom.nodeName === "FORM") { addEvent(dom, "submit", dispatchEvent); } } }; if (msie < 9) { actionStrategy[innerHTML] = function(dom, name, val, lastProps) { let oldhtml = lastProps[name] && lastProps[name].__html; let html = val && val.__html; if (html !== oldhtml) { //IE8-会吃掉最前面的空白 dom.innerHTML = String.fromCharCode(0xfeff) + html; let textNode = dom.firstChild; if (textNode.data.length === 1) { dom.removeChild(textNode); } else { textNode.deleteData(0, 1); } } }; focusMap.focus = "focusin"; focusMap.blur = "focusout"; focusMap.focusin = "focus"; focusMap.focusout = "blur"; extend( eventPropHooks, oneObject( "mousemove, mouseout,mouseenter, mouseleave, mouseout,mousewheel, mousewheel, whe" + "el, click", function(event) { if (!("pageX" in event)) { let doc = event.target.ownerDocument || document; let box = doc.compatMode === "BackCompat" ? doc.body : doc.documentElement; event.pageX = event.clientX + (box.scrollLeft >> 0) - (box.clientLeft >> 0); event.pageY = event.clientY + (box.scrollTop >> 0) - (box.clientTop >> 0); } } ) ); const translateToKey = { "8": "Backspace", "9": "Tab", "12": "Clear", "13": "Enter", "16": "Shift", "17": "Control", "18": "Alt", "19": "Pause", "20": "CapsLock", "27": "Escape", "32": " ", "33": "PageUp", "34": "PageDown", "35": "End", "36": "Home", "37": "ArrowLeft", "38": "ArrowUp", "39": "ArrowRight", "40": "ArrowDown", "45": "Insert", "46": "Delete", "112": "F1", "113": "F2", "114": "F3", "115": "F4", "116": "F5", "117": "F6", "118": "F7", "119": "F8", "120": "F9", "121": "F10", "122": "F11", "123": "F12", "144": "NumLock", "145": "ScrollLock", "224": "Meta" }; extend( eventPropHooks, oneObject("keyup, keydown, keypress", function(event) { if (!event.which && event.type.indexOf("key") === 0) { event.key = translateToKey[event.keyCode]; /* istanbul ignore next */ event.which = event.charCode != null ? event.charCode : event.keyCode; } }) ); for (let i in IEHandleFix) { eventHooks[i] = eventHooks[i + "capture"] = IEHandleFix[i]; } } ================================================ FILE: packages/render/dom/duplex.js ================================================ import { typeNumber, emptyObject } from "react-core/util"; function getSafeValue(value) { switch (typeNumber(value)) { case 2: case 3: case 8: case 4: case 0: return value; default: // function, symbol are assigned as empty strings return ""; } } export var duplexMap = { input: { init(node, props) { let defaultValue = props.defaultValue == null ? "" : props.defaultValue; return (node._wrapperState = { // initialChecked: props.checked != null ? props.checked : props.defaultChecked, initialValue: getSafeValue( props.value != null ? props.value : defaultValue ) }); }, mount(node, props, state) { if ( props.hasOwnProperty("value") || props.hasOwnProperty("defaultValue") ) { let stateValue = "" + state.initialValue; if (node.value === "" && node.value !== stateValue) { syncValue(node, "value", stateValue); } node.defaultValue = stateValue; } var name = node.name; if (name !== "") { node.name = ""; } node.defaultChecked = !node.defaultChecked; node.defaultChecked = !node.defaultChecked; if (name !== "") { node.name = name; } }, update(node, props) { if (props.checked != null) { syncValue(node, "checked", !!props.checked); } const isActive = node === node.ownerDocument.activeElement; const value = isActive ? node.value : getSafeValue(props.value); if (value != null) { if (props.type === "number") { if ( (value === 0 && node.value === "") || // eslint-disable-next-line node.value != value ) { syncValue(node, "value", "" + value); } } else if (node.value !== "" + value) { syncValue(node, "value", "" + value); } } if (props.hasOwnProperty("value")) { setDefaultValue(node, props.type, value, isActive); } else if (props.hasOwnProperty("defaultValue")) { setDefaultValue( node, props.type, getSafeValue(props.defaultValue), isActive ); } if (props.checked == null && props.defaultChecked != null) { node.defaultChecked = !!props.defaultChecked; } } }, select: { init(node, props) { //select let value = props.value; return (node._wrapperState = { initialValue: value != null ? value : props.defaultValue, wasMultiple: !!props.multiple }); }, mount(node, props) { let multiple = (node.multiple = !!props.multiple); let value = props.value; if (value != null) { updateOptions(node, multiple, value, false); } else if (props.defaultValue != null) { updateOptions(node, multiple, props.defaultValue, true); } }, update(node, props) { // mount后这个属性没用 node._wrapperState.initialValue = void 666; let wasMultiple = node._wrapperState.wasMultiple; let multiple = (node._wrapperState.wasMultiple = !!props.multiple); let value = props.value; if (value != null) { updateOptions(node, multiple, value, false); } else if (wasMultiple !== multiple) { // 切换multiple后,需要重新计算 if (props.defaultValue != null) { updateOptions(node, multiple, props.defaultValue, true); } else { // Revert the select back to its default unselected state. updateOptions(node, multiple, multiple ? [] : "", false); } } } }, textarea: { init(node, props) { var initialValue = props.value; if (initialValue == null) { let defaultValue = props.defaultValue; let children = props.children; if (children != null) { //移除元素节点 defaultValue = textContent(node); node.innerHTML = ""; } if (defaultValue == null) { defaultValue = ""; } initialValue = defaultValue; } // 优先级:value > children(textContent) > defaultValue > "" return (node._wrapperState = { initialValue: "" + initialValue }); }, mount(node, props, state) { let text = textContent(node); let stateValue = "" + state.initialValue; if (text !== stateValue) { syncValue(node, "value", stateValue); } }, update(node, props) { let value = props.value; if (value != null) { let newValue = "" + value; if (newValue !== node.value) { syncValue(node, "value", newValue); } if (props.defaultValue == null) { node.defaultValue = newValue; } } if (props.defaultValue != null) { node.defaultValue = props.defaultValue; } } }, option: { init() {}, update(node, props) { duplexMap.option.mount(node, props); }, mount(node, props) { let elems = node.getElementsByTagName("*"); let n = elems.length, el; if (n) { for (n = n - 1, el; (el = elems[n--]); ) { node.removeChild(el); } } if ("value" in props) { node.duplexValue = node.value = props.value; } else { node.duplexValue = node.text; } } } }; function textContent(node) { return node.textContent || node.innerText; } function setDefaultValue(node, type, value, isActive) { if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js type !== "number" || !isActive ) { if (value == null) { node.defaultValue = "" + node._wrapperState.initialValue; } else if (node.defaultValue !== "" + value) { node.defaultValue = "" + value; } } } export function updateOptions(node, multiple, propValue, setDefaultSelected) { var options = node.options; if (multiple) { var selectedValues = propValue; var selectedValue = {}; for (let i = 0; i < selectedValues.length; i++) { // Prefix to avoid chaos with special keys. selectedValue["$" + selectedValues[i]] = true; } for (let i = 0; i < options.length; i++) { let selected = selectedValue.hasOwnProperty( "$" + options[i].duplexValue ); if (options[i].selected !== selected) { options[i].selected = selected; } if (selected && setDefaultSelected) { options[i].defaultSelected = true; } } } else { // Do not set `select.value` as exact behavior isn't consistent across all // browsers for all cases. var _selectedValue = "" + propValue; var defaultSelected = null; for (let i = 0; i < options.length; i++) { if (options[i].duplexValue === _selectedValue) { options[i].selected = true; if (setDefaultSelected) { options[i].defaultSelected = true; } return; } if (defaultSelected === null && !options[i].disabled) { defaultSelected = options[i]; //存放第一个不为disabled的option } } if (defaultSelected !== null) { defaultSelected.selected = true; } } } function syncValue(dom, name, value) { dom.__anuSetValue = true; //抑制onpropertychange dom[name] = value; dom.__anuSetValue = false; } export function duplexAction(fiber) { let { stateNode: dom, name, props, lastProps } = fiber; let fns = duplexMap[name]; if (name !== "option") { enqueueDuplex(dom); } if (!lastProps || lastProps == emptyObject) { let state = fns.init(dom, props); fns.mount(dom, props, state); } else { fns.update(dom, props); } } var duplexNodes = []; export function enqueueDuplex(dom) { if (duplexNodes.indexOf(dom) == -1) { duplexNodes.push(dom); } } export function fireDuplex() { var radioMap = {}; if (duplexNodes.length) { do { let dom = duplexNodes.shift(); let e = dom.__events; let fiber = e && e.vnode; if (fiber && !fiber.disposed) { let props = fiber.props; let tag = fiber.name; if (name === "select") { let value = props.value; if (value != null) { updateOptions(dom, !!props.multiple, value, false); } } else { duplexMap[tag].update(dom, props); let name = props.name; if ( props.type === "radio" && name != null && !radioMap[name] ) { radioMap[name] = 1; collectNamedCousins(dom, name); } } } } while (duplexNodes.length); } } function collectNamedCousins(rootNode, name) { let queryRoot = rootNode; while (queryRoot.parentNode) { queryRoot = queryRoot.parentNode; } let group = queryRoot.getElementsByTagName("input"); for (let i = 0; i < group.length; i++) { let otherNode = group[i]; if ( otherNode === rootNode || otherNode.name !== name || otherNode.type !== "radio" || otherNode.form !== rootNode.form ) { continue; } enqueueDuplex(otherNode); } } ================================================ FILE: packages/render/dom/event.js ================================================ import { document, modern, contains } from "./browser"; import { isFn, noop, toLowerCase } from "react-core/util"; import { Renderer } from "react-core/createRenderer"; import { enqueueDuplex } from "./duplex"; export let rform = /textarea|input|select|option/i; let globalEvents = {}; export let eventPropHooks = {}; //用于在事件回调里对事件对象进行 export let eventHooks = {}; //用于在元素上绑定特定的事件 //根据onXXX得到其全小写的事件名, onClick --> click, onClickCapture --> click, // onMouseMove --> mousemove let eventLowerCache = { onClick: "click", onChange: "change", onWheel: "wheel" }; export function eventAction(dom, name, val, lastProps, fiber) { let events = dom.__events || (dom.__events = {}); events.vnode = fiber; let refName = toLowerCase(name.slice(2)); if (val === false) { delete events[refName]; } else { if (!lastProps[name]) { //添加全局监听事件 let eventName = getBrowserName(name); let hook = eventHooks[eventName]; if (hook) { hook(dom, eventName); } addGlobalEvent(eventName); } //onClick --> click, onClickCapture --> clickcapture events[refName] = val; } } let isTouch = "ontouchstart" in document; export function dispatchEvent(e, type, endpoint) { //__type__ 在injectTapEventPlugin里用到 e = new SyntheticEvent(e); if (type) { e.type = type; } let bubble = e.type, terminal = endpoint || document, hook = eventPropHooks[e.type]; if (hook && false === hook(e)) { return; } Renderer.batchedUpdates(function() { let paths = collectPaths(e.target, terminal, {}); let captured = bubble + "capture"; triggerEventFlow(paths, captured, e); if (!e._stopPropagation) { triggerEventFlow(paths.reverse(), bubble, e); } }, e); } let nodeID = 1; function collectPaths(begin, end, unique) { let paths = []; let node = begin; //先判定路径上有绑定事件没有 while (node && node.nodeType == 1) { let checkChange = node; if (node.__events) { let vnode = node.__events.vnode; inner: while (vnode.return) { //ReactDOM.render有Unbatch, container, //ReactDOM.createPortal有AnuPortal if (vnode.tag === 5) { node = vnode.stateNode; if (node === end) { return paths; } if (!node) { break inner; } var uid = node.uniqueID || (node.uniqueID = ++nodeID); if (node.__events && !unique[uid]) { unique[uid] = 1; paths.push({ node, events: node.__events }); } } vnode = vnode.return; } } if (node === checkChange) { node = node.parentNode; } } return paths; } function triggerEventFlow(paths, prop, e) { for (let i = paths.length; i--; ) { let path = paths[i]; let fn = path.events[prop]; if (isFn(fn)) { e.currentTarget = path.node; fn.call(void 666, e); if (e._stopPropagation) { break; } } } } export function addGlobalEvent(name, capture) { if (!globalEvents[name]) { globalEvents[name] = true; addEvent(document, name, dispatchEvent, capture); } } export function addEvent(el, type, fn, bool) { if (el.addEventListener) { el.addEventListener(type, fn, bool || false); } else if (el.attachEvent) { el.attachEvent("on" + type, fn); } } let rcapture = /Capture$/; export function getBrowserName(onStr) { let lower = eventLowerCache[onStr]; if (lower) { return lower; } let camel = onStr.slice(2).replace(rcapture, ""); lower = camel.toLowerCase(); eventLowerCache[onStr] = lower; return lower; } /** DOM通过event对象的relatedTarget属性提供了相关元素的信息。这个属性只对于mouseover和mouseout事件才包含值; 对于其他事件,这个属性的值是null。IE不支持realtedTarget属性,但提供了保存着同样信息的不同属性。 在mouseover事件触发时,IE的fromElement属性中保存了相关元素; 在mouseout事件出发时,IE的toElement属性中保存着相关元素。 但fromElement与toElement可能同时都有值 */ function getRelatedTarget(e) { if (!e.timeStamp) { e.relatedTarget = e.type === "mouseover" ? e.fromElement : e.toElement; } return e.relatedTarget; } function getTarget(e) { return e.target || e.srcElement; } String("load,error").replace(/\w+/g, function(name) { eventHooks[name] = function(dom, type) { let mark = "__" + type; if (!dom[mark]) { dom[mark] = true; addEvent(dom, type, dispatchEvent); } }; }); String("mouseenter,mouseleave").replace(/\w+/g, function(name) { eventHooks[name] = function(dom, type) { let mark = "__" + type; if (!dom[mark]) { dom[mark] = true; let mask = type === "mouseenter" ? "mouseover" : "mouseout"; addEvent(dom, mask, function(e) { let t = getRelatedTarget(e); if (!t || (t !== dom && !contains(dom, t))) { let common = getLowestCommonAncestor(dom, t); //由于不冒泡,因此paths长度为1 dispatchEvent(e, type, common); } }); } }; }); let specialHandles = {}; export function createHandle(name, fn) { return (specialHandles[name] = function(e) { if (fn && fn(e) === false) { return; } dispatchEvent(e, name); }); } function onCompositionStart(e) { e.target.__onComposition = true; } function onCompositionEnd(e) { e.target.__onComposition = false; //dispatchEvent(e, "change"); } const input2change = /text|password|search|url|email/i; //react中,text,textarea,password元素的change事件实质上是input事件 //https://segmentfault.com/a/1190000008023476 if (!document["__input"]) { globalEvents.input = document["__input"] = true; addEvent(document, "compositionstart", onCompositionStart); addEvent(document, "compositionend", onCompositionEnd); addEvent(document, "input", function(e) { var dom = getTarget(e); if (input2change.test(dom.type)) { if (!dom.__onComposition) { dispatchEvent(e, "change"); } } dispatchEvent(e); }); } function getLowestCommonAncestor(instA, instB) { let depthA = 0; for (let tempA = instA; tempA; tempA = tempA.parentNode) { depthA++; } let depthB = 0; for (let tempB = instB; tempB; tempB = tempB.parentNode) { depthB++; } // If A is deeper, crawl up. while (depthA - depthB > 0) { instA = instA.parentNode; depthA--; } // If B is deeper, crawl up. while (depthB - depthA > 0) { instB = instB.parentNode; depthB--; } // Walk in lockstep until we find a match. let depth = depthA; while (depth--) { if (instA === instB) { return instA; } instA = instA.parentNode; instB = instB.parentNode; } return null; } eventPropHooks.change = function(e) { enqueueDuplex(e.target); }; createHandle("doubleclick"); createHandle("scroll"); createHandle("wheel"); globalEvents.wheel = true; globalEvents.scroll = true; globalEvents.doubleclick = true; if (isTouch) { eventHooks.click = eventHooks.clickcapture = function(dom) { dom.onclick = dom.onclick || noop; }; } eventPropHooks.click = function(e) { return !e.target.disabled; }; const fixWheelType = document.onwheel !== void 666 ? "wheel" : "onmousewheel" in document ? "mousewheel" : "DOMMouseScroll"; eventHooks.wheel = function(dom) { addEvent(dom, fixWheelType, specialHandles.wheel); }; eventPropHooks.wheel = function(event) { event.deltaX = "deltaX" in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive). "wheelDeltaX" in event ? -event.wheelDeltaX : 0; event.deltaY = "deltaY" in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive). "wheelDeltaY" in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive). "wheelDelta" in event ? -event.wheelDelta : 0; }; export let focusMap = { focus: "focus", blur: "blur" }; let innerFocus; function blurFocus(e) { let dom = getTarget(e); let type = focusMap[e.type]; if (Renderer.inserting) { if (type === "blur") { innerFocus = true; Renderer.inserting.focus(); return; } //return放这里会导致浮层无法关闭 } if (innerFocus) { innerFocus = false; return; } do { if (dom.nodeType === 1) { if (dom.__events && dom.__events[type]) { dispatchEvent(e, type); break; } } else { break; } } while ((dom = dom.parentNode)); } "blur,focus".replace(/\w+/g, function(type) { globalEvents[type] = true; if (modern) { let mark = "__" + type; if (!document[mark]) { document[mark] = true; addEvent(document, type, blurFocus, true); } } else { eventHooks[type] = function(dom, name) { addEvent(dom, focusMap[name], blurFocus); }; } }); eventHooks.scroll = function(dom, name) { addEvent(dom, name, specialHandles[name]); }; eventHooks.doubleclick = function(dom, name) { addEvent(document, "dblclick", specialHandles[name]); }; export function SyntheticEvent(event) { if (event.nativeEvent) { return event; } for (let i in event) { if (!eventProto[i]) { this[i] = event[i]; } } if (!this.target) { this.target = event.srcElement; } this.fixEvent(); this.timeStamp = new Date() - 0; this.nativeEvent = event; } let eventProto = (SyntheticEvent.prototype = { fixEvent: noop, //留给以后扩展用 fixHooks: noop, persist: noop, preventDefault: function() { let e = this.nativeEvent || {}; e.returnValue = this.returnValue = false; if (e.preventDefault) { e.preventDefault(); } }, stopPropagation: function() { let e = this.nativeEvent || {}; e.cancelBubble = this._stopPropagation = true; if (e.stopPropagation) { e.stopPropagation(); } }, stopImmediatePropagation: function() { this.stopPropagation(); this.stopImmediate = true; }, toString: function() { return "[object Event]"; } }); Renderer.eventSystem = { eventPropHooks, addEvent, dispatchEvent, SyntheticEvent }; ================================================ FILE: packages/render/dom/findDOMNode.js ================================================ import { findHostInstance } from "react-fiber/findHostInstance"; // [Top API] ReactDOM.findDOMNode export function findDOMNode(fiber) { if (fiber == null) { return null; } if (fiber.nodeType === 1) { return fiber; } if (!fiber.render) { throw "findDOMNode:invalid type"; } return findHostInstance(fiber); } ================================================ FILE: packages/render/dom/index.ie8.js ================================================ import { Children } from "react-core/Children"; import { PropTypes } from "react-core/PropTypes"; import { Component } from "react-core/Component"; import { PureComponent } from "react-core/PureComponent"; import { createRef, forwardRef } from "react-core/createRef"; import { createPortal } from "react-core/createPortal"; import { createContext } from "react-core/createContext"; import { createElement, cloneElement, isValidElement, createFactory } from "react-core/createElement"; import { Fragment, getWindow } from "react-core/util"; import { findDOMNode } from "./findDOMNode"; import { DOMRenderer } from "./DOMRenderer"; import "./compat"; let win = getWindow(); let prevReact = win.React; let React; if (prevReact && prevReact.eventSystem) { React = prevReact; //解决引入多个 } else { let { render, eventSystem, unstable_renderSubtreeIntoContainer, unmountComponentAtNode } = DOMRenderer; React = win.React = win.ReactDOM = { //平台相关API eventSystem, findDOMNode, unmountComponentAtNode, unstable_renderSubtreeIntoContainer, //fiber底层API version: "VERSION", render: render, hydrate: render, unstable_batchedUpdates: DOMRenderer.batchedUpdates, Fragment, PropTypes, Children, createPortal, createContext, Component, createRef, forwardRef, // createClass, createElement, cloneElement, PureComponent, isValidElement, createFactory }; } export default React; ================================================ FILE: packages/render/dom/index.js ================================================ import { Children } from "react-core/Children"; import { PropTypes } from "react-core/PropTypes"; import { Component } from "react-core/Component"; import { PureComponent } from "react-core/PureComponent"; import { createRef, forwardRef } from "react-core/createRef"; import { createPortal } from "react-core/createPortal"; import { createContext } from "react-core/createContext"; import { createElement, cloneElement, isValidElement, createFactory } from "react-core/createElement"; import { Fragment, getWindow } from "react-core/util"; import { findDOMNode } from "./findDOMNode"; import { DOMRenderer } from "./DOMRenderer"; let win = getWindow(); let prevReact = win.React; let React; if (prevReact && prevReact.eventSystem) { React = prevReact; //解决引入多个 } else { let { render, eventSystem, unstable_renderSubtreeIntoContainer, unmountComponentAtNode } = DOMRenderer; React = win.React = win.ReactDOM = { //平台相关API eventSystem, findDOMNode, unmountComponentAtNode, unstable_renderSubtreeIntoContainer, //fiber底层API version: "VERSION", render: render, hydrate: render, unstable_batchedUpdates: DOMRenderer.batchedUpdates, Fragment, PropTypes, Children, createPortal, createContext, Component, createRef, forwardRef, // createClass, createElement, cloneElement, PureComponent, isValidElement, createFactory }; } export default React; ================================================ FILE: packages/render/dom/props.js ================================================ import { NAMESPACE } from './browser'; import { patchStyle } from './style'; import { eventAction, rform } from './event'; import { typeNumber, emptyObject, noop } from 'react-core/util'; //import { duplexAction } from './duplex'; import { DUPLEX } from 'react-fiber/effectTag'; //布尔属性的值末必为true,false //https://github.com/facebook/react/issues/10589 let isSpecialAttr = { style: 1, autoFocus: 1, innerHTML: 1, dangerouslySetInnerHTML: 1 }; let svgCache = {}; let strategyCache = {}; /** * 仅匹配 svg 属性名中的第一个驼峰处,如 viewBox 中的 wB, * 数字表示该特征在属性列表中重复的次数 * -1 表示用 ":" 隔开的属性 (xlink:href, xlink:title 等) * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute */ let svgCamelCase = { w: { r: 1, b: 1, t: 1 }, e: { n: 1, t: 1, f: 1, p: 1, c: 1, m: 1, a: 2, u: 1, s: 1, v: 1 }, o: { r: 1 }, c: { m: 1 }, p: { p: 1 }, t: { s: 2, t: 1, u: 1, c: 1, d: 1, o: 1, x: 1, y: 1, l: 1 }, l: { r: 1, m: 1, u: 1, b: -1, l: -1, s: -1 }, r: { r: 1, u: 2, h: 1, w: 1, c: 1, e: 1 }, h: { r: 1, a: 1, l: 1, t: 1 }, y: { p: 1, s: 1, t: 1, c: 1 }, g: { c: 1 }, k: { a: -1, h: -1, r: -1, s: -1, t: -1, c: 1, u: 1 }, m: { o: 1, l: 1, a: 1 }, n: { c: 1, t: 1, u: 1 }, s: { a: 3 }, f: { x: 1, y: 1 }, d: { e: 1, f: 1, m: 1, d: 1 }, x: { c: 1 } }; // SVG 属性列表中驼峰命名和短横线分隔命名特征值有重复 // 列出了重复特征中的短横线命名的属性名 let specialSVGPropertyName = { 'overline-thickness': 2, 'underline-thickness': 2, 'overline-position': 2, 'underline-position': 2, 'stroke-miterlimit': 2, 'baseline-shift': 2, 'clip-path': 2, 'font-size': 2, 'font-size-adjust': 2, 'font-stretch': 2, 'font-style': 2, 'text-decoration': 2, 'vert-origin-x': 2, 'vert-origin-y': 2, 'paint-order': 2, 'fill-rule': 2, 'color-rendering': 2, 'marker-end': 2, 'pointer-events': 2, 'units-per-em': 2, 'strikethrough-thickness': 2, 'lighting-color': 2 }; // 重复属性名的特征值列表 let repeatedKey = ['et', 'ep', 'em', 'es', 'pp', 'ts', 'td', 'to', 'lr', 'rr', 're', 'ht', 'gc']; function createRepaceFn(split) { return function (match) { return match.slice(0, 1) + split + match.slice(1).toLowerCase(); }; } let rhump = /([a-z])([A-Z])/; let toHyphen = createRepaceFn('-'); let toColon = createRepaceFn(':'); function getSVGAttributeName(name) { if (svgCache[name]) { return svgCache[name]; } const match = name.match(rhump); if (!match) { return (svgCache[name] = name); } const prefix = match[1]; const postfix = match[2].toLowerCase(); const orig = name; const count = svgCamelCase[prefix] && svgCamelCase[prefix][postfix]; if (count) { if (count === -1) { return (svgCache[orig] = { name: name.replace(rhump, toColon), ifSpecial: true }); } if (~repeatedKey.indexOf(prefix + postfix)) { const dashName = name.replace(rhump, toHyphen); if (specialSVGPropertyName[dashName]) { name = dashName; } } } else { name = name.replace(rhump, toHyphen); } return (svgCache[orig] = name); } export function diffProps(dom, lastProps, nextProps, fiber) { let isSVG = fiber.namespaceURI === NAMESPACE.svg; let tag = fiber.type; let continueProps = skipProps; if (!isSVG && rform.test(fiber.type)) { continueProps = duplexProps; if (!('onChange' in nextProps)) { eventAction(dom, 'onChange', noop, lastProps, fiber); } fiber.effectTag *= DUPLEX; fiber.onDuplex = continueProps.onDuplex; } //eslint-disable-next-line for (let name in nextProps) { if (continueProps[name]) { continue; } let val = nextProps[name]; if (val !== lastProps[name]) { let which = tag + isSVG + name; let action = strategyCache[which]; if (!action) { action = strategyCache[which] = getPropAction(dom, name, isSVG); } actionStrategy[action](dom, name, val, lastProps, fiber); } } //如果旧属性在新属性对象不存在,那么移除DOM eslint-disable-next-line for (let name in lastProps) { if (continueProps[name]) { continue; } if (!nextProps.hasOwnProperty(name)) { let which = tag + isSVG + name; let action = strategyCache[which]; if (!action) { continue; } actionStrategy[action](dom, name, false, lastProps, fiber); } } // fiber.onDuplex = continueProps.onDuplex // continueProps.onDuplex(dom, fiber, nextProps, lastProps); } function isBooleanAttr(dom, name) { let val = dom[name]; return val === true || val === false; } function isEventName(name) { return /^on[A-Z]/.test(name); } /** * 根据一个属性所在的元素或元素的文档类型,就可以永久决定该使用什么策略操作它 * * @param {any} dom 元素节点 * @param {any} name 属性名 * @param {any} isSVG * @returns */ function getPropAction(dom, name, isSVG) { if (isSVG && name === 'className') { return 'svgClass'; } if (isSpecialAttr[name]) { return name; } if (isEventName(name)) { return 'event'; } if (isSVG) { return 'svgAttr'; } //img.width = '100px'时,取img.width为0,必须用setAttribute if ((name === 'width' || name === 'height')) { return 'attribute'; } if (isBooleanAttr(dom, name)) { return 'booleanAttr'; } return name.indexOf('data-') === 0 || dom[name] === void 666 ? 'attribute' : 'property'; } let builtinStringProps = { className: 1, title: 1, name: 1, type: 1, alt: 1, lang: 1 }; var skipProps = { innerHTML: 1, children: 1, onDuplex: noop }; var duplexProps = { // onDuplex: duplexAction, value: 1, defaultValue: 1, checked: 1, // defaultChecked: 1, innerHTML: 1, children: 1, }; export let actionStrategy = { style: function (dom, _, val, lastProps) { patchStyle(dom, lastProps.style || emptyObject, val || emptyObject); }, autoFocus: function (dom) { if (/input|text/i.test(dom.nodeName) || dom.contentEditable === 'true') { dom.focus(); } }, svgClass: function (dom, name, val) { if (!val) { dom.removeAttribute('class'); } else { dom.setAttribute('class', val); } }, svgAttr: function (dom, name, val) { // http://www.w3school.com.cn/xlink/xlink_reference.asp // https://facebook.github.io/react/blog/2015/10/07/react-v0.14.html#notable-enh // a ncements xlinkActuate, xlinkArcrole, xlinkHref, xlinkRole, xlinkShow, // xlinkTitle, xlinkType eslint-disable-next-line let method = typeNumber(val) < 3 && !val ? 'removeAttribute' : 'setAttribute'; let nameRes = getSVGAttributeName(name); if (nameRes.ifSpecial) { let prefix = nameRes.name.split(':')[0]; // 将xlinkHref 转换为 xlink:href dom[method + 'NS'](NAMESPACE[prefix], nameRes.name, val || ''); } else { dom[method](nameRes, val || ''); } }, booleanAttr: function (dom, name, val) { // 布尔属性必须使用el.xxx = true|false方式设值 如果为false, IE全系列下相当于setAttribute(xxx,""), // 会影响到样式,需要进一步处理 eslint-disable-next-line dom[name] = !!val; if (dom[name] === false) { dom.removeAttribute(name); } else if (dom[name] === 'false') { //字符串属性会将它转换为false dom[name] = ''; } }, attribute: function (dom, name, val) { if (val == null || val === false) { return dom.removeAttribute(name); } try { dom.setAttribute(name, val); } catch (e) { console.warn("setAttribute error", name, val); // eslint-disable-line } }, property: function (dom, name, val) { // 尝试直接赋值,部分情况下会失败,如给 input 元素的 size 属性赋值 0 或字符串 // 这时如果用 setAttribute 则会静默失败 try { if (!val && val !== 0) { //如果是假值但不是0,就改成“”,alt不能removeAttribute if (builtinStringProps[name]) { dom[name] = ''; } else { dom.removeAttribute(name); } } else { dom[name] = val; } } catch (e) { try {//修改type会引发多次报错 dom.setAttribute(name, val); } catch (e) {/*ignore*/ } } }, event: eventAction, dangerouslySetInnerHTML: function (dom, name, val, lastProps) { let oldhtml = lastProps[name] && lastProps[name].__html; let html = val && val.__html; html = html == null ? '' : html; if (html !== oldhtml) { dom.innerHTML = html; } } }; ================================================ FILE: packages/render/dom/readme.md ================================================ ## dom-renderer ReactDOM的迷你实现 browser.js 提供了nodejs识别,高紴浏览器识别,IE版本识别,一套假的DOM(让它在nodejs中也不会报错),contains与命名空间集合 compat.js 是用来兼容IE6-8,主要是事件系统的修复,input, change,submit, 鼠标事件的pageX/Y修复,key属性修复,select元素的value同步, innerHTML属性的修复 duplex.js 是实现React受控组件 event.js 实现基于事件冒泡的事件系统,重点处理mouseenter,mouseleave(用mouseover/mouseout实现),wheel(对应原生三种事件),focus, blur(全局捕捉), change事件(它在一些控件中相当于oninput事件,并要处理拼音输入法问题),doubleclick别名 props.js 属性系统,涉及到SVG 一些属性名不规则问题 style.js 样式系统 findDOMNode.js findHostInstance的封装 DOMRenderer.js 注入各种DOM操作方法,如removeElement, createElement, insertElement, emptyElement, updateContent index.js 入口文件 index.ie8.js 兼容版 ================================================ FILE: packages/render/dom/style.js ================================================ import { oneObject, camelize } from "react-core/util"; export let rnumber = /^-?\d+(\.\d+)?$/; /** * 为元素样子设置样式 * * @export * @param {any} dom * @param {any} lastStyle * @param {any} nextStyle */ export function patchStyle(dom, lastStyle, nextStyle) { if (lastStyle === nextStyle) { return; } for (let name in nextStyle) { let val = nextStyle[name]; if (lastStyle[name] !== val) { name = cssName(name, dom); if (val !== 0 && !val) { val = ""; //清除样式 } else if (rnumber.test(val) && !cssNumber[name]) { val = val + "px"; //添加单位 } try { //node.style.width = NaN;node.style.width = 'xxxxxxx'; //node.style.width = undefine 在旧式IE下会抛异常 dom.style[name] = val; //应用样式 } catch (e) { console.log("dom.style[" + name + "] = " + val + "throw error"); // eslint-disable-line } } } // 如果旧样式存在,但新样式已经去掉 for (let name in lastStyle) { if (!(name in nextStyle)) { name = cssName(name, dom); dom.style[name] = ""; //清除样式 } } } export let cssNumber = oneObject( "animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom" ); //let testStyle = document.documentElement.style let prefixes = ["", "-webkit-", "-o-", "-moz-", "-ms-"]; export let cssMap = oneObject("float", "cssFloat"); /** * 转换成当前浏览器可用的样式名 * * @param {any} name * @returns */ export function cssName(name, dom) { if (cssMap[name]) { return cssMap[name]; } let host = (dom && dom.style) || {}; for (let i = 0, n = prefixes.length; i < n; i++) { let camelCase = camelize(prefixes[i] + name); if (camelCase in host) { return (cssMap[name] = camelCase); } } return null; } ================================================ FILE: packages/render/noop/NoopRenderer.js ================================================ import { noop, topNodes, topFibers } from "react-core/util"; import { createRenderer } from "react-core/createRenderer"; import { render } from "react-fiber/scheduleWork"; //其他Renderer也要实现这些方法 function cleanChildren(array) { if (!Array.isArray(array)) { return array; } return array.map(function(el) { if (el.type == "#text") { return el.children; } else { return { type: el.type, props: el.props, children: cleanChildren(el.children), }; } }); } var autoContainer = { type: "root", appendChild: noop, props: null, children: [] }; var yieldData = []; export let NoopRenderer = createRenderer({ render(vnode) { return render(vnode, autoContainer); }, updateAttribute() {}, updateContent(fiber) { fiber.stateNode.children = fiber.props.children; }, reset() { var index = topNodes.indexOf(autoContainer); if (index !== -1) { topNodes.splice(index, 1); topFibers.splice(index, 1); } autoContainer = { type: "root", appendChild: noop, props: null, children: [] }; }, getRoot() { return autoContainer; }, getChildren() { return cleanChildren(autoContainer.children || []); }, yield(a) { yieldData.push(a); }, flush() { var ret = yieldData.concat(); yieldData.length = 0; return ret; }, createElement(fiber) { return { type: fiber.type, props: null, children: fiber.tag === 6 ? fiber.props : [], }; }, insertElement(fiber) { let dom = fiber.stateNode, parentNode = fiber.parent, forwardFiber = fiber.forwardFiber, before = forwardFiber ? forwardFiber.stateNode : null, children = parentNode.children; try { if (before == null) { //要插入最前面 if (dom !== children[0]) { remove(children, dom); children.unshift(dom); } } else { if (dom !== children[children.length - 1]) { remove(children, dom); var i = children.indexOf(before); children.splice(i + 1, 0, dom); } } } catch (e) { throw e; } }, emptyElement(fiber) { let dom = fiber.stateNode; let children = dom && dom.children; if (dom && Array.isArray(children)) { children.forEach(NoopRenderer.removeElement); } }, removeElement(fiber) { if (fiber.parent) { var parent = fiber.parent; var node = fiber.stateNode; remove(parent.children, node); } }, }); function remove(children, node) { var index = children.indexOf(node); if (index !== -1) { children.splice(index, 1); } } ================================================ FILE: packages/render/noop/index.js ================================================ import { Children } from "react-core/Children"; import { PropTypes } from "react-core/PropTypes"; import { Component } from "react-core/Component"; import { PureComponent } from "react-core/PureComponent"; import { createRef, forwardRef } from "react-core/createRef"; import { createPortal } from "react-core/createPortal"; import { createContext } from "react-core/createContext"; import { createElement,cloneElement, isValidElement, createFactory } from "react-core/createElement"; import { Fragment, getWindow } from "react-core/util"; import { NoopRenderer} from "./NoopRenderer"; var win = getWindow(); var prevReact = win.ReactNoop; let ReactNoop; if (prevReact && prevReact.isReactNoop) { ReactNoop = prevReact; //解决引入多个 } else { let {render, flush, reset, getRoot, getChildren} = NoopRenderer; ReactNoop = win.ReactNoop = { //放出全局的ReactNoop //平台相关API yield: NoopRenderer.yield, flush, reset, getRoot, getChildren, isReactNoop: true, //ReactFiber API version: "VERSION", render, Fragment, PropTypes, Children, createPortal, createContext, Component, createRef, forwardRef, createElement, cloneElement, PureComponent, isValidElement, createFactory }; } export default ReactNoop; ================================================ FILE: packages/render/noop/readme.md ================================================ ## noop-renderer 用于单元测试 ================================================ FILE: packages/render/readme.md ================================================ ## render 各种渲染器 ================================================ FILE: packages/render/server/Renderer.js ================================================ /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import { Children } from 'react-core/Children'; import { isFn, emptyObject, typeNumber, miniCreateClass, oneObject } from 'react-core/util'; import { createOpenTagMarkup } from './html'; import { duplexMap } from './duplex'; import { isValidElement } from 'react-core/createElement'; /* import { REACT_FORWARD_REF_TYPE, REACT_FRAGMENT_TYPE, REACT_STRICT_MODE_TYPE, REACT_ASYNC_MODE_TYPE, REACT_PORTAL_TYPE, REACT_PROFILER_TYPE, REACT_PROVIDER_TYPE, REACT_CONTEXT_TYPE } from 'shared/ReactSymbols'; */ function AsyncMode(children) { return children; } function StrictMode(children) { return children; } function Fragment(children) { return children; } import { encodeEntities } from './encode'; import { Namespaces, getIntrinsicNamespace, getChildNamespace } from './namespaces'; function invariant(a, condition) { if (a === false) { console.warn(condition); } } const omittedCloseTags = oneObject( 'area,base,br,col,embed,hr,img,input,keygen,link,meta,param,source,track,wbr' ); // Based on reading the React.Children implementation. TODO: type this somewhere? const toArray = Children.toArray; //https://html.com/tags/listing/ const newlineEatingTags = oneObject('listing,pre,textarea'); function shouldConstruct(Component) { return Component.prototype && Component.prototype.isReactComponent; } function getNonChildrenInnerMarkup(props) { const innerHTML = props.dangerouslySetInnerHTML; if (innerHTML != null) { if (innerHTML.__html != null) { return innerHTML.__html; } } else { const content = props.children; var n = typeNumber(content) if (n === 3 || n === 4) { return encodeEntities(content); } } return null; } //数组扁平化 function flattenTopLevelChildren(children) { if (!isValidElement(children)) { return toArray(children); } const element = children; if (element.type !== REACT_FRAGMENT_TYPE) { return [element]; } const fragmentChildren = element.props.children; if (!isValidElement(fragmentChildren)) { return toArray(fragmentChildren); } return [fragmentChildren]; } function processContext(type, context) { const contextTypes = type.contextTypes; if (!contextTypes) { return emptyObject; } const maskedContext = {}; for (const contextName in contextTypes) { maskedContext[contextName] = context[contextName]; } return maskedContext; } function ReactDOMServerRenderer(children, makeStaticMarkup) { const flatChildren = flattenTopLevelChildren(children); const topFrame = { type: null, // Assume all trees start in the HTML namespace (not totally true, but // this is what we did historically) domNamespace: Namespaces.html, children: flatChildren, childIndex: 0, context: emptyObject, footer: '' }; this.stack = [topFrame]; this.exhausted = false; this.currentSelectValue = null; this.previousWasTextNode = false; this.makeStaticMarkup = makeStaticMarkup; // Context (new API) this.contextIndex = -1; this.contextStack = []; this.contextValueStack = []; } ReactDOMServerRenderer.prototype = { constructor: ReactDOMServerRenderer, /** * Note: We use just two stacks regardless of how many context providers you have. * Providers are always popped in the reverse order to how they were pushed * so we always know on the way down which provider you'll encounter next on the way up. * On the way down, we push the current provider, and its context value *before* * we mutated it, onto the stacks. Therefore, on the way up, we always know which * provider needs to be "restored" to which value. * https://github.com/facebook/react/pull/12985#issuecomment-396301248 */ pushProvider(provider) { const index = ++this.contextIndex; const context = provider.type._context; const previousValue = context._currentValue; // Remember which value to restore this context to on our way up. this.contextStack[index] = context; this.contextValueStack[index] = previousValue; // Mutate the current value. context._currentValue = provider.props.value; }, popProvider() { const index = this.contextIndex; const context = this.contextStack[index]; const previousValue = this.contextValueStack[index]; // "Hide" these null assignments from Flow by using `any` // because conceptually they are deletions--as long as we // promise to never access values beyond `this.contextIndex`. this.contextStack[index] = null; this.contextValueStack[index] = null; this.contextIndex--; // Restore to the previous value we stored as we were walking down. context._currentValue = previousValue; }, read(bytes) { if (this.exhausted) { return null; } let out = ''; while (out.length < bytes) { if (this.stack.length === 0) { this.exhausted = true; break; } const frame = this.stack[this.stack.length - 1]; if (frame.childIndex >= frame.children.length) { const footer = frame.footer; out += footer; if (footer !== '') { this.previousWasTextNode = false; } this.stack.pop(); if (frame.type === 'select') { this.currentSelectValue = null; } else if ( frame.type != null && frame.type.type != null && frame.type.type.$$typeof === REACT_PROVIDER_TYPE ) { const provider = frame.type; this.popProvider(provider); } continue; } const child = frame.children[frame.childIndex++]; out += this.render(child, frame.context, frame.domNamespace); } return out; }, render(child, context, parentNamespace) { var t = typeNumber(child) if (t === 3 || t === 4) { const text = '' + child; if (text === '') { return ''; } if (this.makeStaticMarkup) { return encodeEntities(text); } if (this.previousWasTextNode) { return '' + encodeEntities(text); } this.previousWasTextNode = true; return encodeEntities(text); } else { let nextChild; ({ child: nextChild, context } = resolve(child, context)); if (nextChild === null || nextChild === false) { return ''; } else if (!isValidElement(nextChild)) { if (nextChild != null && nextChild.$$typeof != null) { // Catch unexpected special types early. const $$typeof = nextChild.$$typeof; invariant( $$typeof !== REACT_PORTAL_TYPE, 'Portals are not currently supported by the server renderer. ' + 'Render them conditionally so that they only appear on the client render.' ); // Catch-all to prevent an infinite loop if React.Children.toArray() supports some new type. invariant( false, 'Unknown element-like object type: ' + $$typeof + '. This is likely a bug in React. ' + 'Please file an issue.' ); } const nextChildren = toArray(nextChild); const frame = { type: null, domNamespace: parentNamespace, children: nextChildren, childIndex: 0, context: context, footer: '' }; this.stack.push(frame); return ''; } // Safe because we just checked it's an element. const nextElement = nextChild; const elementType = nextElement.type; if (typeNumber(elementType) === 4) { return this.renderDOM(nextElement, context, parentNamespace); } switch (elementType) { case REACT_STRICT_MODE_TYPE: case REACT_ASYNC_MODE_TYPE: case REACT_PROFILER_TYPE: case REACT_FRAGMENT_TYPE: { const nextChildren = toArray(nextChild.props.children); const frame = { type: null, domNamespace: parentNamespace, children: nextChildren, childIndex: 0, context: context, footer: '' }; this.stack.push(frame); return ''; } // eslint-disable-next-line-no-fallthrough default: break; } if (typeof elementType === 'object' && elementType !== null) { switch (elementType.$$typeof) { case REACT_FORWARD_REF_TYPE: { const element = nextChild; const nextChildren = toArray( elementType.render(element.props, element.ref) ); const frame = { type: null, domNamespace: parentNamespace, children: nextChildren, childIndex: 0, context: context, footer: '' }; this.stack.push(frame); return ''; } case REACT_PROVIDER_TYPE: { const provider = nextChild; const nextProps = provider.props; const nextChildren = toArray(nextProps.children); const frame = { type: provider, domNamespace: parentNamespace, children: nextChildren, childIndex: 0, context: context, footer: '' }; this.pushProvider(provider); this.stack.push(frame); return ''; } case REACT_CONTEXT_TYPE: { const consumer = nextChild; const nextProps = consumer.props; const nextValue = consumer.type._currentValue; const nextChildren = toArray(nextProps.children(nextValue)); const frame = { type: nextChild, domNamespace: parentNamespace, children: nextChildren, childIndex: 0, context: context, footer: '' }; this.stack.push(frame); return ''; } default: break; } } let info = ''; invariant( false, 'Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + 'but got: %s.%s', elementType == null ? elementType : typeof elementType, info ); } }, renderDOM(element, context, parentNamespace) { const tag = element.type.toLowerCase(); let namespace = parentNamespace; if (parentNamespace === Namespaces.html) { namespace = getIntrinsicNamespace(tag); } let props = element.props; //input,select,textarea,option元素需要特殊处理 if (isFn(duplexMap[tag])) { props = duplexMap[tag](props, this); } let out = createOpenTagMarkup( element.type, tag, props, namespace, this.makeStaticMarkup, this.stack.length === 1 ); let footer = ''; if (omittedCloseTags.hasOwnProperty(tag)) { out += '/>'; } else { out += '>'; footer = ''; } let children; const innerMarkup = getNonChildrenInnerMarkup(props); if (innerMarkup != null) { children = []; if (newlineEatingTags[tag] && innerMarkup.charAt(0) === '\n') { // text/html ignores the first character in these tags if it's a newline // Prefer to break application/xml over text/html (for now) by adding // a newline specifically to get eaten by the parser. (Alternately for // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first // \r is normalized out by HTMLTextAreaElement#value.) // See: // See: // See: // See: Parsing of "textarea" "listing" and "pre" elements // from out += '\n'; } out += innerMarkup; } else { children = toArray(props.children); } const frame = { domNamespace: getChildNamespace(parentNamespace, element.type), type: tag, children, childIndex: 0, context: context, footer: footer }; this.stack.push(frame); this.previousWasTextNode = false; return out; } }; function resolve(child, context) { while (isValidElement(child)) { // Safe because we just checked it's an element. let element = child; let Component = element.type; if (!isFn(Component)) { break; } processChild(element, Component); } // Extra closure so queue and replace can be captured properly function processChild(element, Component) { let publicContext = processContext(Component, context); let queue = []; let replace = false; let updater = { isMounted: function() { return false; }, enqueueForceUpdate: function() { if (queue === null) { return null; } }, enqueueReplaceState: function(publicInstance, completeState) { replace = true; queue = [completeState]; }, enqueueSetState: function(publicInstance, currentPartialState) { if (queue === null) { return null; } queue.push(currentPartialState); } }; let inst; var hasGSFP = isFn(Component.getDerivedStateFromProps); //创建实例 if (shouldConstruct(Component)) { inst = new Component(element.props, publicContext, updater); if (hasGSFP) { let partialState = Component.getDerivedStateFromProps.call( null, element.props, inst.state ); if (partialState != null) { inst.state = Object.assign({}, inst.state, partialState); } } } else { inst = Component(element.props, publicContext, updater); if (inst == null || inst.render == null) { child = inst; return; } } inst.props = element.props; inst.context = publicContext; inst.updater = updater; let initialState = inst.state; if (initialState === undefined) { inst.state = initialState = null; } //执行componentWillMount钩子 var willMountHook = hasGSFP ? 'UNSAFE_componentWillMount' : 'componentWillMount'; if (isFn(inst[willMountHook])) { inst[willMountHook](); if (queue.length) { let oldQueue = queue; let oldReplace = replace; queue = null; replace = false; if (oldReplace && oldQueue.length === 1) { inst.state = oldQueue[0]; } else { let nextState = oldReplace ? oldQueue[0] : inst.state; let dontMutate = true; for (let i = oldReplace ? 1 : 0; i < oldQueue.length; i++) { let partial = oldQueue[i]; let partialState = isFn(partial) ? partial.call(inst, nextState, element.props, publicContext) : partial; if (partialState != null) { if (dontMutate) { dontMutate = false; nextState = Object.assign({}, nextState, partialState); } else { Object.assign(nextState, partialState); } } } inst.state = nextState; } } else { queue = null; } } //执行render child = inst.render(); //执行getChildContext if (isFn(inst.getChildContext)) { let childContext = inst.getChildContext(); if (childContext) { context = Object.assign({}, context, childContext); } } } return { child, context }; } export default ReactDOMServerRenderer; ================================================ FILE: packages/render/server/__tests2__/index.js ================================================ const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegrationTestUtils'); let React; let ReactDOM; let ReactDOMServer; function initModules() { // Reset warning cache. jest.resetModuleRegistry(); React = require('react'); ReactDOM = require('react-dom'); ReactDOMServer = require('react-server-renderer'); // Make them available to the helpers. return { ReactDOM, ReactDOMServer, }; } const { resetModules, itRenders, clientCleanRender, } = ReactDOMServerIntegrationUtils(initModules); describe('ReactDOMServerIntegration', () => { beforeEach(() => { resetModules(); }); describe('property to attribute mapping', function() { describe('string properties', function() { itRenders('simple numbers', async render => { const e = await render(
); expect(e.getAttribute('width')).toBe('30'); }); itRenders('simple strings', async render => { const e = await render(
); expect(e.getAttribute('width')).toBe('30'); }); itRenders('no string prop with true value', async render => { const e = await render(, 1); expect(e.hasAttribute('href')).toBe(false); }); itRenders('no string prop with false value', async render => { const e = await render(, 1); expect(e.hasAttribute('href')).toBe(false); }); itRenders('no string prop with null value', async render => { const e = await render(
); expect(e.hasAttribute('width')).toBe(false); }); itRenders('no string prop with function value', async render => { const e = await render(
, 1); expect(e.hasAttribute('width')).toBe(false); }); itRenders('no string prop with symbol value', async render => { const e = await render(
, 1); expect(e.hasAttribute('width')).toBe(false); }); }); describe('boolean properties', function() { itRenders('boolean prop with true value', async render => { const e = await render(