Full Code of Meituan-Dianping/mpvue for AI

master 6c5d78ee04f5 cached
500 files
1.9 MB
535.7k tokens
1796 symbols
1 requests
Download .txt
Showing preview only (2,130K chars total). Download the full file or copy to clipboard to get everything.
Repository: Meituan-Dianping/mpvue
Branch: master
Commit: 6c5d78ee04f5
Files: 500
Total size: 1.9 MB

Directory structure:
gitextract_me0evg8s/

├── .babelrc
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .flowconfig
├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── COMMIT_CONVENTION.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug_report.md
│   │   └── Feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── issue_template.yml
│   └── stale.yml
├── .gitignore
├── BACKERS.md
├── LICENSE
├── README.md
├── benchmarks/
│   ├── big-table/
│   │   ├── demo.css
│   │   ├── index.html
│   │   └── style.css
│   ├── dbmon/
│   │   ├── ENV.js
│   │   ├── app.js
│   │   ├── index.html
│   │   └── lib/
│   │       ├── memory-stats.js
│   │       ├── monitor.js
│   │       └── styles.css
│   ├── reorder-list/
│   │   └── index.html
│   ├── ssr/
│   │   ├── README.md
│   │   ├── common.js
│   │   ├── renderToStream.js
│   │   └── renderToString.js
│   ├── svg/
│   │   └── index.html
│   └── uptime/
│       └── index.html
├── build/
│   ├── alias.js
│   ├── build.js
│   ├── ci.sh
│   ├── config.js
│   ├── gen-release-note.js
│   ├── get-weex-version.js
│   ├── git-hooks/
│   │   ├── commit-msg
│   │   └── pre-commit
│   ├── install-hooks.js
│   ├── release-weex.sh
│   └── release.sh
├── circle.yml
├── dist/
│   └── README.md
├── examples/
│   ├── commits/
│   │   ├── app.js
│   │   └── index.html
│   ├── elastic-header/
│   │   ├── index.html
│   │   └── style.css
│   ├── firebase/
│   │   ├── app.js
│   │   ├── index.html
│   │   └── style.css
│   ├── grid/
│   │   ├── grid.js
│   │   ├── index.html
│   │   └── style.css
│   ├── markdown/
│   │   ├── index.html
│   │   └── style.css
│   ├── modal/
│   │   ├── index.html
│   │   └── style.css
│   ├── move-animations/
│   │   └── index.html
│   ├── select2/
│   │   └── index.html
│   ├── svg/
│   │   ├── index.html
│   │   ├── style.css
│   │   └── svg.js
│   ├── todomvc/
│   │   ├── app.js
│   │   ├── index.html
│   │   └── readme.md
│   └── tree/
│       ├── index.html
│       └── tree.js
├── flow/
│   ├── compiler.js
│   ├── component.js
│   ├── global-api.js
│   ├── modules.js
│   ├── options.js
│   ├── ssr.js
│   └── vnode.js
├── package.json
├── packages/
│   ├── mpvue/
│   │   ├── README.md
│   │   ├── index.js
│   │   └── package.json
│   ├── mpvue-template-compiler/
│   │   ├── README.md
│   │   ├── build.js
│   │   ├── index.js
│   │   └── package.json
│   ├── vue-server-renderer/
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── package.json
│   │   └── types/
│   │       ├── index.d.ts
│   │       ├── test.ts
│   │       └── tsconfig.json
│   ├── vue-template-compiler/
│   │   ├── README.md
│   │   ├── index.js
│   │   └── package.json
│   ├── weex-template-compiler/
│   │   ├── README.md
│   │   ├── build.js
│   │   ├── index.js
│   │   └── package.json
│   └── weex-vue-framework/
│       ├── README.md
│       ├── factory.js
│       ├── index.js
│       └── package.json
├── src/
│   ├── compiler/
│   │   ├── codegen/
│   │   │   ├── events.js
│   │   │   └── index.js
│   │   ├── create-compiler.js
│   │   ├── directives/
│   │   │   ├── bind.js
│   │   │   ├── index.js
│   │   │   ├── model.js
│   │   │   └── on.js
│   │   ├── error-detector.js
│   │   ├── helpers.js
│   │   ├── index.js
│   │   ├── optimizer.js
│   │   ├── parser/
│   │   │   ├── entity-decoder.js
│   │   │   ├── filter-parser.js
│   │   │   ├── html-parser.js
│   │   │   ├── index.js
│   │   │   └── text-parser.js
│   │   └── to-function.js
│   ├── core/
│   │   ├── components/
│   │   │   ├── index.js
│   │   │   └── keep-alive.js
│   │   ├── config.js
│   │   ├── global-api/
│   │   │   ├── assets.js
│   │   │   ├── extend.js
│   │   │   ├── index.js
│   │   │   ├── mixin.js
│   │   │   └── use.js
│   │   ├── index.js
│   │   ├── instance/
│   │   │   ├── events.js
│   │   │   ├── index.js
│   │   │   ├── init.js
│   │   │   ├── inject.js
│   │   │   ├── lifecycle.js
│   │   │   ├── proxy.js
│   │   │   ├── render-helpers/
│   │   │   │   ├── bind-object-listeners.js
│   │   │   │   ├── bind-object-props.js
│   │   │   │   ├── check-keycodes.js
│   │   │   │   ├── render-list.js
│   │   │   │   ├── render-slot.js
│   │   │   │   ├── render-static.js
│   │   │   │   ├── resolve-filter.js
│   │   │   │   └── resolve-slots.js
│   │   │   ├── render.js
│   │   │   └── state.js
│   │   ├── observer/
│   │   │   ├── array.js
│   │   │   ├── dep.js
│   │   │   ├── index.js
│   │   │   ├── scheduler.js
│   │   │   └── watcher.js
│   │   ├── util/
│   │   │   ├── debug.js
│   │   │   ├── env.js
│   │   │   ├── error.js
│   │   │   ├── index.js
│   │   │   ├── lang.js
│   │   │   ├── options.js
│   │   │   ├── perf.js
│   │   │   └── props.js
│   │   └── vdom/
│   │       ├── create-component.js
│   │       ├── create-element.js
│   │       ├── create-functional-component.js
│   │       ├── helpers/
│   │       │   ├── extract-props.js
│   │       │   ├── get-first-component-child.js
│   │       │   ├── index.js
│   │       │   ├── merge-hook.js
│   │       │   ├── normalize-children.js
│   │       │   ├── resolve-async-component.js
│   │       │   └── update-listeners.js
│   │       ├── modules/
│   │       │   ├── directives.js
│   │       │   ├── index.js
│   │       │   └── ref.js
│   │       ├── patch.js
│   │       └── vnode.js
│   ├── platforms/
│   │   ├── mp/
│   │   │   ├── compiler/
│   │   │   │   ├── common/
│   │   │   │   │   ├── babel-plugins.js
│   │   │   │   │   ├── config.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── tag.js
│   │   │   │   │   ├── generate.js
│   │   │   │   │   ├── tagMap.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── create-compiler.js
│   │   │   │   ├── directives/
│   │   │   │   │   ├── html.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── model.js
│   │   │   │   │   └── text.js
│   │   │   │   ├── index.js
│   │   │   │   ├── mark-component.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── style.js
│   │   │   │   ├── my/
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── astMap.js
│   │   │   │   │   │   └── directiveMap.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── attrs.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── for.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── options.js
│   │   │   │   ├── swan/
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── astMap.js
│   │   │   │   │   │   └── directiveMap.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── attrs.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── for.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── tt/
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── astMap.js
│   │   │   │   │   │   └── directiveMap.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── attrs.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── for.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── util.js
│   │   │   │   └── wx/
│   │   │   │       ├── config/
│   │   │   │       │   ├── astMap.js
│   │   │   │       │   └── directiveMap.js
│   │   │   │       ├── convert/
│   │   │   │       │   ├── attrs.js
│   │   │   │       │   ├── component.js
│   │   │   │       │   ├── for.js
│   │   │   │       │   └── index.js
│   │   │   │       └── index.js
│   │   │   ├── entry-compiler.js
│   │   │   ├── entry-runtime.js
│   │   │   ├── join-code-in-build.js
│   │   │   ├── runtime/
│   │   │   │   ├── diff-data.js
│   │   │   │   ├── events.js
│   │   │   │   ├── index.js
│   │   │   │   ├── lifecycle.js
│   │   │   │   ├── node-ops.js
│   │   │   │   ├── patch.js
│   │   │   │   ├── render.js
│   │   │   │   └── runtime-trace.js
│   │   │   └── util/
│   │   │       └── index.js
│   │   ├── web/
│   │   │   ├── compiler/
│   │   │   │   ├── directives/
│   │   │   │   │   ├── html.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── model.js
│   │   │   │   │   └── text.js
│   │   │   │   ├── index.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── style.js
│   │   │   │   ├── options.js
│   │   │   │   └── util.js
│   │   │   ├── entry-compiler.js
│   │   │   ├── entry-runtime-with-compiler.js
│   │   │   ├── entry-runtime.js
│   │   │   ├── entry-server-basic-renderer.js
│   │   │   ├── entry-server-renderer.js
│   │   │   ├── runtime/
│   │   │   │   ├── class-util.js
│   │   │   │   ├── components/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── transition-group.js
│   │   │   │   │   └── transition.js
│   │   │   │   ├── directives/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── model.js
│   │   │   │   │   └── show.js
│   │   │   │   ├── index.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── attrs.js
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── dom-props.js
│   │   │   │   │   ├── events.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── style.js
│   │   │   │   │   └── transition.js
│   │   │   │   ├── node-ops.js
│   │   │   │   ├── patch.js
│   │   │   │   └── transition-util.js
│   │   │   ├── server/
│   │   │   │   ├── compiler.js
│   │   │   │   ├── directives/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── show.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── attrs.js
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── dom-props.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── style.js
│   │   │   │   └── util.js
│   │   │   └── util/
│   │   │       ├── attrs.js
│   │   │       ├── class.js
│   │   │       ├── compat.js
│   │   │       ├── element.js
│   │   │       ├── index.js
│   │   │       └── style.js
│   │   └── weex/
│   │       ├── compiler/
│   │       │   ├── directives/
│   │       │   │   ├── index.js
│   │       │   │   └── model.js
│   │       │   ├── index.js
│   │       │   └── modules/
│   │       │       ├── append.js
│   │       │       ├── class.js
│   │       │       ├── index.js
│   │       │       ├── props.js
│   │       │       └── style.js
│   │       ├── entry-compiler.js
│   │       ├── entry-framework.js
│   │       ├── entry-runtime-factory.js
│   │       ├── runtime/
│   │       │   ├── components/
│   │       │   │   ├── index.js
│   │       │   │   ├── transition-group.js
│   │       │   │   └── transition.js
│   │       │   ├── directives/
│   │       │   │   └── index.js
│   │       │   ├── index.js
│   │       │   ├── modules/
│   │       │   │   ├── attrs.js
│   │       │   │   ├── class.js
│   │       │   │   ├── events.js
│   │       │   │   ├── index.js
│   │       │   │   ├── style.js
│   │       │   │   └── transition.js
│   │       │   ├── node-ops.js
│   │       │   ├── patch.js
│   │       │   └── text-node.js
│   │       └── util/
│   │           └── index.js
│   ├── server/
│   │   ├── bundle-renderer/
│   │   │   ├── create-bundle-renderer.js
│   │   │   ├── create-bundle-runner.js
│   │   │   └── source-map-support.js
│   │   ├── create-basic-renderer.js
│   │   ├── create-renderer.js
│   │   ├── optimizing-compiler/
│   │   │   ├── codegen.js
│   │   │   ├── index.js
│   │   │   ├── modules.js
│   │   │   ├── optimizer.js
│   │   │   └── runtime-helpers.js
│   │   ├── render-context.js
│   │   ├── render-stream.js
│   │   ├── render.js
│   │   ├── template-renderer/
│   │   │   ├── create-async-file-mapper.js
│   │   │   ├── index.js
│   │   │   ├── parse-template.js
│   │   │   └── template-stream.js
│   │   ├── util.js
│   │   ├── webpack-plugin/
│   │   │   ├── client.js
│   │   │   ├── server.js
│   │   │   └── util.js
│   │   └── write.js
│   ├── sfc/
│   │   └── parser.js
│   └── shared/
│       ├── constants.js
│       └── util.js
├── test/
│   ├── e2e/
│   │   ├── .eslintrc
│   │   ├── nightwatch.config.js
│   │   ├── runner.js
│   │   └── specs/
│   │       ├── commits.js
│   │       ├── grid.js
│   │       ├── markdown.js
│   │       ├── modal.js
│   │       ├── select2.js
│   │       ├── svg.js
│   │       ├── todomvc.js
│   │       └── tree.js
│   ├── helpers/
│   │   ├── .eslintrc
│   │   ├── classlist.js
│   │   ├── test-object-option.js
│   │   ├── to-equal.js
│   │   ├── to-have-been-warned.js
│   │   ├── trigger-event.js
│   │   ├── vdom.js
│   │   └── wait-for-update.js
│   ├── mp/
│   │   ├── .eslintrc
│   │   ├── compiler/
│   │   │   └── index.spec.js
│   │   ├── helpers/
│   │   │   ├── index.js
│   │   │   └── mp.runtime.js
│   │   ├── jasmine.json
│   │   └── runtime/
│   │       ├── events.spec.js
│   │       ├── instance.spec.js
│   │       └── lifecycle.spec.js
│   ├── ssr/
│   │   ├── .eslintrc
│   │   ├── async-loader.js
│   │   ├── compile-with-webpack.js
│   │   ├── fixtures/
│   │   │   ├── app.js
│   │   │   ├── async-bar.js
│   │   │   ├── async-foo.js
│   │   │   ├── cache.js
│   │   │   ├── error.js
│   │   │   ├── nested-cache.js
│   │   │   ├── split.js
│   │   │   └── test.css
│   │   ├── jasmine.json
│   │   ├── ssr-basic-renderer.spec.js
│   │   ├── ssr-bundle-render.spec.js
│   │   ├── ssr-stream.spec.js
│   │   ├── ssr-string.spec.js
│   │   └── ssr-template.spec.js
│   ├── unit/
│   │   ├── .eslintrc
│   │   ├── features/
│   │   │   ├── component/
│   │   │   │   ├── component-async.spec.js
│   │   │   │   ├── component-keep-alive.spec.js
│   │   │   │   ├── component-scoped-slot.spec.js
│   │   │   │   ├── component-slot.spec.js
│   │   │   │   └── component.spec.js
│   │   │   ├── debug.spec.js
│   │   │   ├── directives/
│   │   │   │   ├── bind.spec.js
│   │   │   │   ├── class.spec.js
│   │   │   │   ├── cloak.spec.js
│   │   │   │   ├── for.spec.js
│   │   │   │   ├── html.spec.js
│   │   │   │   ├── if.spec.js
│   │   │   │   ├── model-checkbox.spec.js
│   │   │   │   ├── model-component.spec.js
│   │   │   │   ├── model-dynamic.spec.js
│   │   │   │   ├── model-file.spec.js
│   │   │   │   ├── model-parse.spec.js
│   │   │   │   ├── model-radio.spec.js
│   │   │   │   ├── model-select.spec.js
│   │   │   │   ├── model-text.spec.js
│   │   │   │   ├── on.spec.js
│   │   │   │   ├── once.spec.js
│   │   │   │   ├── pre.spec.js
│   │   │   │   ├── show.spec.js
│   │   │   │   ├── static-style-parser.spec.js
│   │   │   │   ├── style.spec.js
│   │   │   │   └── text.spec.js
│   │   │   ├── error-handling.spec.js
│   │   │   ├── filter/
│   │   │   │   └── filter.spec.js
│   │   │   ├── global-api/
│   │   │   │   ├── assets.spec.js
│   │   │   │   ├── compile.spec.js
│   │   │   │   ├── config.spec.js
│   │   │   │   ├── extend.spec.js
│   │   │   │   ├── mixin.spec.js
│   │   │   │   ├── set-delete.spec.js
│   │   │   │   └── use.spec.js
│   │   │   ├── instance/
│   │   │   │   ├── init.spec.js
│   │   │   │   ├── methods-data.spec.js
│   │   │   │   ├── methods-events.spec.js
│   │   │   │   ├── methods-lifecycle.spec.js
│   │   │   │   ├── properties.spec.js
│   │   │   │   └── render-proxy.spec.js
│   │   │   ├── options/
│   │   │   │   ├── _scopeId.spec.js
│   │   │   │   ├── comments.spec.js
│   │   │   │   ├── components.spec.js
│   │   │   │   ├── computed.spec.js
│   │   │   │   ├── data.spec.js
│   │   │   │   ├── delimiters.spec.js
│   │   │   │   ├── directives.spec.js
│   │   │   │   ├── el.spec.js
│   │   │   │   ├── extends.spec.js
│   │   │   │   ├── functional.spec.js
│   │   │   │   ├── inheritAttrs.spec.js
│   │   │   │   ├── inject.spec.js
│   │   │   │   ├── lifecycle.spec.js
│   │   │   │   ├── methods.spec.js
│   │   │   │   ├── mixins.spec.js
│   │   │   │   ├── name.spec.js
│   │   │   │   ├── parent.spec.js
│   │   │   │   ├── props.spec.js
│   │   │   │   ├── propsData.spec.js
│   │   │   │   ├── render.spec.js
│   │   │   │   ├── renderError.spec.js
│   │   │   │   ├── template.spec.js
│   │   │   │   └── watch.spec.js
│   │   │   ├── ref.spec.js
│   │   │   └── transition/
│   │   │       ├── inject-styles.js
│   │   │       ├── transition-group.spec.js
│   │   │       ├── transition-mode.spec.js
│   │   │       └── transition.spec.js
│   │   ├── index.js
│   │   ├── karma.base.config.js
│   │   ├── karma.cover.config.js
│   │   ├── karma.dev.config.js
│   │   ├── karma.sauce.config.js
│   │   ├── karma.unit.config.js
│   │   └── modules/
│   │       ├── compiler/
│   │       │   ├── codegen.spec.js
│   │       │   ├── compiler-options.spec.js
│   │       │   ├── optimizer.spec.js
│   │       │   └── parser.spec.js
│   │       ├── observer/
│   │       │   ├── observer.spec.js
│   │       │   ├── scheduler.spec.js
│   │       │   └── watcher.spec.js
│   │       ├── server-compiler/
│   │       │   └── optimizer.spec.js
│   │       ├── sfc/
│   │       │   └── sfc-parser.spec.js
│   │       ├── util/
│   │       │   └── next-tick.spec.js
│   │       └── vdom/
│   │           ├── create-component.spec.js
│   │           ├── create-element.spec.js
│   │           ├── modules/
│   │           │   ├── attrs.spec.js
│   │           │   ├── class.spec.js
│   │           │   ├── directive.spec.js
│   │           │   ├── dom-props.spec.js
│   │           │   ├── events.spec.js
│   │           │   └── style.spec.js
│   │           └── patch/
│   │               ├── children.spec.js
│   │               ├── edge-cases.spec.js
│   │               ├── element.spec.js
│   │               ├── hooks.spec.js
│   │               └── hydration.spec.js
│   └── weex/
│       ├── .eslintrc
│       ├── compiler/
│       │   ├── append.spec.js
│       │   ├── class.spec.js
│       │   ├── compile.spec.js
│       │   ├── props.spec.js
│       │   ├── style.spec.js
│       │   └── v-model.spec.js
│       ├── helpers/
│       │   └── index.js
│       ├── jasmine.json
│       └── runtime/
│           ├── attrs.spec.js
│           ├── class.spec.js
│           ├── events.spec.js
│           ├── framework.spec.js
│           ├── node.spec.js
│           └── style.spec.js
└── types/
    ├── index.d.ts
    ├── options.d.ts
    ├── plugin.d.ts
    ├── test/
    │   ├── augmentation-test.ts
    │   ├── options-test.ts
    │   ├── plugin-test.ts
    │   ├── tsconfig.json
    │   └── vue-test.ts
    ├── typings.json
    ├── vnode.d.ts
    └── vue.d.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": ["es2015", "flow-vue"],
  "plugins": ["transform-vue-jsx", "syntax-dynamic-import"],
  "ignore": [
    "dist/*.js",
    "packages/**/*.js"
  ]
}


================================================
FILE: .editorconfig
================================================
# http://editorconfig.org

root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
insert_final_newline = false
trim_trailing_whitespace = false


================================================
FILE: .eslintignore
================================================
flow
dist
packages


================================================
FILE: .eslintrc
================================================
{
  "root": true,
  "plugins": [
    "flowtype"
  ],
  "extends": [
    "plugin:vue-libs/recommended",
    "plugin:flowtype/recommended"
  ],
  "globals": {
    "__WEEX__": true
  }
}


================================================
FILE: .flowconfig
================================================
[ignore]
.*/node_modules/.*
.*/test/.*
.*/build/.*
.*/examples/.*
.*/benchmarks/.*

[include]

[libs]
flow

[options]
unsafe.enable_getters_and_setters=true
module.name_mapper='^compiler/\(.*\)$' -> '<PROJECT_ROOT>/src/compiler/\1'
module.name_mapper='^core/\(.*\)$' -> '<PROJECT_ROOT>/src/core/\1'
module.name_mapper='^shared/\(.*\)$' -> '<PROJECT_ROOT>/src/shared/\1'
module.name_mapper='^web/\(.*\)$' -> '<PROJECT_ROOT>/src/platforms/web/\1'
module.name_mapper='^weex/\(.*\)$' -> '<PROJECT_ROOT>/src/platforms/weex/\1'
module.name_mapper='^server/\(.*\)$' -> '<PROJECT_ROOT>/src/server/\1'
module.name_mapper='^entries/\(.*\)$' -> '<PROJECT_ROOT>/src/entries/\1'
module.name_mapper='^sfc/\(.*\)$' -> '<PROJECT_ROOT>/src/sfc/\1'
suppress_comment= \\(.\\|\n\\)*\\$flow-disable-line


================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Code of Conduct

As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.

Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.

This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)


================================================
FILE: .github/COMMIT_CONVENTION.md
================================================
## Git Commit Message Convention

> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/convention.md).

#### Examples

Appears under "Features" header, `compiler` subheader:

```
feat(compiler): add 'comments' option
```

Appears under "Bug Fixes" header, `v-model` subheader, with a link to issue #28:

```
fix(v-model): handle events on blur

close #28
```

Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:

```
perf(core): improve vdom diffing by removing 'foo' option

BREAKING CHANGE: The 'foo' option has been removed.
```

The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header.

```
revert: feat(compiler): add 'comments' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
```

### Full Message Format

A commit message consists of a **header**, **body** and **footer**.  The header has a **type**, **scope** and **subject**:

```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```

The **header** is mandatory and the **scope** of the header is optional.

### Revert

If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.

### Type

If the prefix is `feat`, `fix` or `perf`, it will appear in the changelog. However if there is any [BREAKING CHANGE](#footer), the commit will always appear in the changelog.

Other prefixes are up to your discretion. Suggested prefixes are `docs`, `chore`, `style`, `refactor`, and `test` for non-changelog related tasks.

### Scope

The scope could be anything specifying place of the commit change. For example `core`, `compiler`, `ssr`, `v-model`, `transition` etc...

### Subject

The subject contains succinct description of the change:

* use the imperative, present tense: "change" not "changed" nor "changes"
* don't capitalize first letter
* no dot (.) at the end

### Body

Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
The body should include the motivation for the change and contrast this with previous behavior.

### Footer

The footer should contain any information about **Breaking Changes** and is also the place to
reference GitHub issues that this commit **Closes**.

**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.


================================================
FILE: .github/CONTRIBUTING.md
================================================
# 贡献

> 欢迎任何形式的贡献,我们的开发计划见 [mpvue 开发计划](https://trello.com/b/ZBP1leCF/mpvue)

## Issues

### 提交 issues

- 确定在最新版本中该 bug 存在。我们将不会持续维护所有的发布版本,所有的修改仅根据当前版本。
- 确认该 bug 是可以复现的,请尽量提供完整的重现步骤。
- 确定这是不是一个 bug,请仔细阅读文档。
- 确定这不是一个重复的 bug。 查看 [Issue Page](https://github.com/Meituan-Dianping/mpvue/issues) 列表,搜索您要提交的 bug 是否已经被报告过。

### 如何提交一个有质量的 bug

请在 [Issue Page](https://github.com/Meituan-Dianping/mpvue/issues) 页面中提交 bug。

- 使用一个清晰并有描述性的标题来定义bug。
- 详细的描述复现bug的步骤。包括您使用的 mpvue、mpvue-loader、mpvue-template-compiler 版本,配置情况,预计产生的结果,实际产生的结果。
- 如果程序抛出异常,请附加完整的堆栈日志。
- 如有可能,请附上屏幕截图或动态的 GIF 图,这些图片能帮助演示整个问题的产生过程。

### 提交功能增强建议

请在 [Issue Page](https://github.com/Meituan-Dianping/mpvue/issues) 页面中提交增强建议。

- 请确定这不是一个重复的功能增强建议。 查看 [Issue Page](https://github.com/Meituan-Dianping/mpvue/issues) 列表,搜索您要提交的功能增强建议是否已经被提交过。
- 使用一个清晰并有描述性的标题来定义增强建议。
- 详细描述增强功能的行为模式。
- 解释说明为什么该功能是对大多数用户是有用的。新功能应该具有广泛的适用性。
- 如有可能,可以列出其他数据库中间已经具备的类似功能。商用与开源软件均可。
- 使用 enhancement 标签(Label)来标记这个 issue。

### 贡献补丁

- fork 本仓库到自己账户。
- 您应该新建一个分支来开始您的工作,分支的名字为功能名称/issueId。
- 完成功能后请添加完整测试。
- 完成后,发送一个 pull request 到 Meituan-Dianping/mpvue。
- 等待核心开发者做 CodeReview。
- 最后,恭喜您已经成为了 mpvue 的官方贡献者!


================================================
FILE: .github/ISSUE_TEMPLATE/Bug_report.md
================================================
---
name: 报告问题(Bug report)
about: 描述你遇到的问题并寻求社区帮助
---
<!--
    注意:为更好的解决你的问题,请参考模板提供完整信息,准确描述问题,信息不全的 issue 将被关闭。
-->
## [扼要问题描述]

**mpvue 版本号:**

[mpvue@x.x.x]

**最小化复现代码:**

[建议提供最小化可运行的代码:附件或文本代码]

```
// 示例代码:
```

**问题复现步骤:**

1. [第一步]
2. [第二步]
3. [其它...]

**观察到的表现:**

[在这里描述观察到的表现]

**截图或动态图:**

![复现步骤截图或gif图片](图片的 url)


================================================
FILE: .github/ISSUE_TEMPLATE/Feature_request.md
================================================
---
name: 建议新功能(Feature Request)
about: 展示已经实现的新功能,或者对项目提出新的需求和建议
---

## [在此简单描述您的建议]

**新功能相关的问题issue或讨论:**

[在这里引用新功能相关的讨论]

**新功能的实现:**

[在这里填写或简单描述功能的实现方式或需求的解决方式]

**相关项目或文档:**

[在这里引用相关项目或文档地址]


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- PULL REQUEST TEMPLATE -->
<!-- (Update "[ ]" to "[x]" to check a box) -->

**What kind of change does this PR introduce?** (check at least one)

- [ ] Bugfix
- [ ] Feature
- [ ] Code style update
- [ ] Refactor
- [ ] Build-related changes
- [ ] Other, please describe:

**Does this PR introduce a breaking change?** (check one)

- [ ] Yes
- [ ] No

If yes, please describe the impact and migration path for existing applications:

**The PR fulfills these requirements:**

- [ ] It's submitted to the `dev` branch for v2.x (or to a previous version branch), _not_ the `master` branch
- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
- [ ] All tests are passing
- [ ] New/updated tests are included

If adding a **new feature**, the PR's description includes:
- [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

**Other information:**


================================================
FILE: .github/issue_template.yml
================================================
issueConfigs:
  -
    bannedTitle: "问题简单描述"
    subtitles:
      - "问题复现步骤:"
      - "期望的表现:"
      - "观察到的表现:"
      - "屏幕截图或动态图:"
    bannedContents:
      - "第一步"
      - "第二步"
      - "其他步骤..."
      - "在这里描述期望的表现"
      - "在这里描述观察到的表现"
      - "复现步骤的屏幕截图和动态 GIF 图"
      - "图片的 url",
      - "建议提供可运行的demo"
  -
    bannedTitle: "在此简单描述您的建议"
    subtitles:
      - "新功能相关的问题issue或讨论:"
      - "新功能的实现:"
      - "相关项目或文档:"
    bannedContents:
      - "在这里引用新功能相关的讨论"
      - "在这里填写或简单描述功能的实现方式或需求的解决方式"
      - "在这里引用相关项目或文档地址"

comments:
  closeIssue: "issue不符合格式要求,请确保格式正确且填写所有有效信息。\n请保留issue模板中的各级小标题(如“期望的表现:”),并使用有效信息替换模板默认内容(如“[在这里描述期望的表现]”)"


================================================
FILE: .github/stale.yml
================================================
daysUntilStale: 30

markComment: "issue超过30天无更新或响应,7天后将自动关闭,如果问题状态有更新请及时更新issue"

limitPerRun: 24

only: issues

================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
*.log
package-lock.json
explorations
TODOs.md
dist/*.gz
dist/*.map
dist/vue.common.min.js
test/e2e/reports
test/e2e/screenshots
coverage
RELEASE_NOTE*.md
dist/*.js
packages/vue-server-renderer/basic.js
packages/vue-server-renderer/build.js
packages/vue-server-renderer/server-plugin.js
packages/vue-server-renderer/client-plugin.js
packages/vue-template-compiler/build.js
.vscode/


================================================
FILE: BACKERS.md
================================================
# Backers

You can join them in supporting  Vue.js development by [pledging on Patreon](https://www.patreon.com/evanyou)! Backers in the same pledge level appear in the order of pledge date.

### $2000

<a href="https://stdlib.com/">
  <img width="600px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/stdlib.png">
</a>

---

### $1000

<a href="https://www.upyun.com/?utm_source=vue&utm_medium=ad&utm_content=github">
  <img width="400px" src="https://raw.githubusercontent.com/vuejs/cn.vuejs.org/master/themes/vue/source/images/upyun-large.png">
</a>

---

### $500

<a href="https://deepstreamhub.com">
  <img width="260px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/deepstream.png">
</a>
<br><br>
<a href="https://jsfiddle.net/">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/jsfiddle.png">
</a>
<br><br>
<a href="https://laravel.com">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/laravel.png">
</a>
<br><br>
<a href="https://chaitin.cn">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/chaitin.png">
</a>
<br><br>
<a href="https://htmlburger.com/">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/htmlburger.png">
</a>
<br><br>
<a href="https://starter.someline.com/">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/someline.png">
</a>
<br><br>
<a href="http://monterail.com/" target="_blank">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/monterail.png">
</a>
<br><br>
<a href="https://www.trisoft.ro/" target="_blank">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/trisoft.png">
</a>
<br><br>
<a href="https://www.2mhost.com/" target="_blank">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/2mhost.png">
</a>
<br><br>
<a href="https://vuejsjob.com/?ref=vuejs" target="_blank">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/vuejobs.png">
</a>
<br><br>
<a href="https://leanpub.com/vuejs2" target="_blank">
  <img width="240px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/tmvuejs2.png">
</a>
<br><br>
<a href="https://famebroker.com" target="_blank">
  <img width="260px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/famebroker.png">
</a>
<br><br>
<a href="https://component.io/" target="_blank">
  <img width="260px" src="https://raw.githubusercontent.com/vuejs/vuejs.org/master/themes/vue/source/images/component_io.png">
</a>

---

### $100

<a href="http://tighten.co/">
  <img width="240px" src="http://i.imgur.com/T7fQYLT.png">
</a>
<br><br>
<a href="http://invoicemachine.com/">
  <img width="220px" src="http://assets.invoicemachine.com/images/flat_logo.png">
</a>
<br><br>
<a href="https://alligator.io">
  <img width="240px" src="https://alligator.io/images/alligator-logo.svg">
</a>
<br><br>
<a href="https://monei.net/">
  <img width="200px" src="http://i.imgur.com/JUSjHAi.png">
</a>
<br><br>
<a href="https://www.accelebrate.com/">
  <img width="220px" src="https://www.accelebrate.com/assets/images/accelebrate_logo@2x.png">
</a>
<br><br>
<a href="https://www.waterfall.com">
  <img width="200px" src="https://waterfall.com/waterfall_logo_large.png">
</a>

---

### $50+

- No Divide Studio
- James Kyle
- Blake Newman
- Lee Smith
- Adam Dorsey
- Greg McCarvell
- Yoshiya Hinosawa
- Wasim Khamlichi
- errorrik
- Alex Balashov

---

### $10+

- Sylvain Pollet-Villard
- Luca Borghini
- Kazuya Kawaguchi
- Keisuke Kita
- Anirudh Sanjeev
- Guido Bertolino
- Fábio Vedovelli
- Jack Barham
- Stephane Demoote
- Paul R. Dillinger
- Sean Washington
- Alun Davey
- Eduardo Kyvenko
- Thijs de Maa
- Joris Noordermeer
- Niklas Lifors
- An Phan
- Richard Wyke
- Roman Kuba
- Tom Conlon
- Matt Pickle
- Simon East
- Bill Columbia
- Hayden Bickerton
- Henry Zhu
- John Smith
- Benjamin Listwon
- Rainer Morgan
- Brian Jorden
- Christopher Dosin
- Lars Andreas Ness
- Drew Lustro
- Victor Tolbert
- Jon Pokrzyk
- Frank Dungan III
- Lanes.io
- Anders
- Dexter Miguel
- Stephen Michael Hartley
- Wen-Tien Chang
- Ole Støvern
- Valerian Cure
- Dani Ilops
- louisbl
- Yegor Sytnyk
- Guido H.
- Joan Cejudo
- Ian Walter
- Nikola Trifunovic
- Nicolas Mutis Mesa
- Fahed Toumi
- James Brooks
- Kirk Lewis
- Spenser
- Takuya Nishio
- Daniel Diekmeier
- Peter Thaleikis
- Karol Fabjanczuk
- Eduardo
- Lê Chương
- Webber Wang
- Daniel Schmitz
- Bruce Li
- Mohammed
- Sam Wainwright
- TJ Hillard
- Kyle Arrington
- Jason Land
- Miljan Aleksic
- James Ye
- Laurids Duellmann
- Christo Crampton
- Adon Metcalfe
- Paul Straw
- Jake Ingman
- Eduardo Camillo
- Barbara Liau
- Jens Lind
- Yegor Sytnyk
- Benson Wong
- Anthony Tsui
- Karol Fabjanczuk
- Isaac Sant
- Milos Stojanovic
- Matsumoto Takamasa
- Douglas Lowder
- Bess Brooks
- Christian Griffith
- Matt Rockwell
- Jarek Tkaczyk
- Michael Laccetti
- Jonothan Allen
- Andrew Davis
- Jason Rys
- Sean
- Xiaojie Li
- Joakim Bugge
- Lacey Pevey
- David Hess
- Niannian Modisette
- Kim Cuartero
- Luke Sampson
- Dariusz Jastrzębski
- Ivan Sieder
- Jivan Roquet
- Shane
- Stew Heckenberg
- Matt Jones
- Dave Chenell
- Frank Baele
- Jack McDade
- Patrick O'Dacre
- Wietse Wind
- Donny Donny
- Duncan Kenzie
- Mike Margerum
- Michael Richards
- Eduardo Reveles
- Jan Kremlacek
- Guy Gavergun
- Keith Bailey
- Joel Birch
- Bernhard E. Reiter
- Radu Cretu
- Luiz Tanure
- Poamrong Rith
- Chengzhi Yin
- Dan Barrett
- Zoran Knezevic
- Charles Beaumont
- Jonathan Kent
- James Simpson
- Pascal Germain
- Pierre Vanhulst
- Vincent Gabriel
- Kyovo Digaw
- devneko
- Cheng-Wei Chien
- Michael Mazurczak
- Daniel
- Chris Anderson
- Jon Hobbs-Smith
- Chez Tschetter
- Akiho Nagao


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2018-present, 美团点评

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.

================================================
FILE: README.md
================================================
<p align="center"><a href="http://mpvue.com" target="_blank" rel="noopener noreferrer"><img width="100" src="http://mpvue.com/assets/logo.png" alt="mpvue logo"></a></p>
<p align="center">
   <a href="https://www.npmjs.com/package/mpvue"><img src="https://img.shields.io/npm/v/mpvue.svg?style=flat" alt="npm"></a>
   <a href="https://www.npmjs.com/package/mpvue"><img src="https://img.shields.io/npm/dm/mpvue.svg?style=flat" alt="npm"></a>
 </p>

# mpvue
> Vue.js 小程序版, fork 自 [vuejs/vue@2.4.1](https://github.com/vuejs/vue),保留了 vue runtime 能力,添加了小程序平台的支持。


`mpvue` 是一个使用 [Vue.js](https://vuejs.org) 开发小程序的前端框架,目前支持 `微信小程序`、`百度智能小程序`,`头条小程序` 和 `支付宝小程序`。 框架基于 `Vue.js`,修改了的运行时框架 runtime 和代码编译器 compiler 实现,使其可运行在小程序环境中,从而为小程序开发引入了 `Vue.js` 开发体验。

## mpvue 2.0

mpvue 2.0 开始正式支持 **百度智能小程序**、**头条小程序** 和 **支付宝小程序**,使用 `mpvue-quickstart` 项目模板新创建的项目,将默认升级到 2.0。老项目可继续使用原有版本。详情请参见 [**mpvue 2.0 升级指南**](https://github.com/Meituan-Dianping/mpvue/releases/tag/2.0.0)

**新版本的问题或建议,有请各位关注者及时反馈,mpvue 2.0 祝大家节日快乐~** -2019.02.14

### mpvue 1.x 稳定版本
**对于不升级 2.0 的项目,可以继续使用1.x 的大版本,目前1.x 会持续在 1.4.x 上继续维护** 升级方式参见:[1.x 稳定版说明](https://github.com/Meituan-Dianping/mpvue/releases/tag/2.0.0)

[mpvue 文档](http://mpvue.com)

## 快速开始

我们精心准备了一个简单的 [五分钟上手教程](http://mpvue.com/mpvue/quickstart) 方便你快速体验到 `mpvue` 带来的开发乐趣。

## 名称由来
- `mp`:mini program 的缩写
- `mpvue`:Vue.js in mini program

## 主要特性
使用 `mpvue` 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:

- 彻底的组件化开发能力:提高代码复用性
- 完整的 `Vue.js` 开发体验
- 方便的 `Vuex` 数据管理方案:方便构建复杂应用
- 快捷的 `webpack` 构建机制:自定义构建策略、开发阶段 hotReload
- 支持使用 npm 外部依赖
- 使用 `Vue.js` 命令行工具 vue-cli 快速初始化项目
- H5 代码转换编译成小程序目标代码的能力

其它特性正在等着你去探索。


## 配套设施
`mpvue` 作为小程序版本的 `Vue.js`,在框架 SDK 之外,完整的技术体系还包括如下设施。

- [mpvue-loader](http://mpvue.com/build/mpvue-loader) 提供 webpack 版本的加载器
- [mpvue-webpack-target](http://mpvue.com/build/mpvue-webpack-target) webpack 构建目标
- [postcss-mpvue-wxss](http://mpvue.com/build/postcss-mpvue-wxss) 样式代码转换预处理工具
- [px2rpx-loader](http://mpvue.com/build/px2rpx-loader) 样式转化插件
- [mpvue-quickstart](http://mpvue.com/mpvue/quickstart) mpvue-quickstart
- [mpvue-simple](http://mpvue.com/mpvue/simple) 辅助 mpvue 快速开发 Page / Component 级小程序页面的工具
- 其它

## 使用 mpvue 的项目

<div>
    <img src="https://user-images.githubusercontent.com/1715463/42300198-c79e41ac-8041-11e8-9bf4-569901bc8c5d.jpeg" width="100" title="享物说"/>
    <img src="https://user-images.githubusercontent.com/13334618/38455900-d608df44-3ab0-11e8-94db-a5b7ac782612.jpg" width="100" />
    <img src="https://camo.githubusercontent.com/d0fe641cc98e6dcdff3b3e28f3f46ed47a3b5777/68747470733a2f2f7773312e73696e61696d672e636e2f6c617267652f36313134353733386c7931667139723334316a33356a323037363037363735392e6a7067" width="100" />
    <img src="https://user-images.githubusercontent.com/26051070/39106618-75ed54b4-46ef-11e8-834d-faf2629c218b.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/12172868/39176660-e973d0de-47df-11e8-88c2-fbd36b14caed.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/8087694/39505682-93727596-4e06-11e8-8978-6075d6b03742.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/16408246/40176958-ac78023a-5a0f-11e8-85bf-0ff56426f202.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/7871813/39956784-b3b978c0-5619-11e8-9bc4-658c8f2907e6.png" width="100" />
    <img src="https://user-images.githubusercontent.com/8219610/40181466-b8e1f204-5a1b-11e8-9c39-545226b354b6.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/8426097/40212791-72744312-5a84-11e8-819d-654057def4a2.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/22385741/40222981-fd28501e-5ab3-11e8-8558-79447270e118.png" width="100" />
    <img src="https://user-images.githubusercontent.com/28003460/40229157-017bcc24-5ac6-11e8-921a-f424a70724dd.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/20151096/40263981-a4072682-5b4d-11e8-95aa-292da6ee9228.png" width="100" />
    <img src="https://user-images.githubusercontent.com/652171/40602836-a064ab44-628c-11e8-962c-c5c75455c1c8.jpg" width="100" />
    <img src="https://camo.githubusercontent.com/735d3be145d2632dd010b5fe6e047bc1f5d1b56d/68747470733a2f2f692e6c6f6c692e6e65742f323031382f30362f30342f356231346536616634633537322e6a7067" width="100" />
    <img src="https://user-images.githubusercontent.com/5120505/41412484-ba85a04e-7012-11e8-9833-3ed4762073ea.png" width="100" />
    <img src="https://user-images.githubusercontent.com/2733269/41572435-5a1700d6-73aa-11e8-84fa-6ab95f8276fa.jpg" width="100" title="大智慧行情"/>
    <img src="https://user-images.githubusercontent.com/16707486/41587965-0b984daa-73e3-11e8-8fee-c3a516733262.jpg" width="100" title="小亿买房"/>
    <img src="https://github.com/Hzy0913/hanlibrary/raw/master/xcx.jpg" width="100" title="小程序日历组件"/>
    <img src="https://user-images.githubusercontent.com/18204304/41755130-3edd141c-7608-11e8-9e20-596fd0c30262.jpg" width="100" title="速算练习小程序"/>
    <img src="https://user-images.githubusercontent.com/26002161/41972348-3798cbca-7a44-11e8-82ec-0dfd1c16c946.jpg" width="100" title="逗图Lite (表情包小程序)"/>
    <img src="https://user-images.githubusercontent.com/14872348/42489167-29c4cae2-843c-11e8-8b28-b704907497a3.jpg" width="100" title="童学云校微海报"/>
    <img src="https://user-images.githubusercontent.com/1220971/42721673-3bbd3080-8771-11e8-91dd-73622d9115cd.jpg" width="100" title="内涵段子Lite"/>
    <img src="https://user-images.githubusercontent.com/2350193/42740747-00714598-88de-11e8-817d-3b91ca33003c.jpg" width="100" title="SINA诊股"/>
    <img src="https://user-images.githubusercontent.com/2350193/42740748-00a6e2fc-88de-11e8-8642-2d73709fdb26.jpg" width="100" title="SINA资讯"/>
    <img src="https://user-images.githubusercontent.com/2350193/42740749-00e0808e-88de-11e8-90a0-09f412f54e86.jpg" width="100" title="SINA行情"/>
    <img src="https://user-images.githubusercontent.com/2350193/42801721-1fb5cabe-89d3-11e8-986b-a7e2a8b6f330.jpg" width="100" title="SINA课堂"/>
    <img src="https://user-images.githubusercontent.com/2350193/42871520-21c125e4-8aad-11e8-8b8c-5ff98698069f.jpg" width="100" title="SINA视觉"/>
    <img src="https://user-images.githubusercontent.com/2350193/42740746-00379c4e-88de-11e8-8958-c4c75d90ac36.jpg" width="100" title="我看涨"/>
    <img src="https://user-images.githubusercontent.com/6629280/42795085-e5fae9f8-89b4-11e8-9514-7764428be788.jpg" width="100" title="义乌购优选"/>
    <img src="https://camo.githubusercontent.com/9103a160806c94ed0e5787ee3b197159b3ba9f80/687474703a2f2f792e70686f746f2e71712e636f6d2f696d673f733d6a4456653262784862266c3d792e6a7067" width="100" title="熊猫斗图助手"/>
    <img src="https://user-images.githubusercontent.com/5915245/42990083-437e3072-8c34-11e8-8f6a-69ea58522be8.jpg" width="100" title="SPC运动宝"/>
    <img src="https://user-images.githubusercontent.com/5443058/42999490-9022a4dc-8c50-11e8-9e90-96bbc1bbbc8e.jpg" width="100" title="牛津阅读树点读版"/>
    <img src="https://camo.githubusercontent.com/c47426c0e0ad542f6399de4129682fed1f2b475c/68747470733a2f2f73312e617831782e636f6d2f323031382f30372f32312f50386f7368442e6a7067" width="100" title="花笙美妆"/>
    <img src="https://camo.githubusercontent.com/64ce4dd31ab2edc9f3a2f6f7dc943bd1dfaefa21/687474703a2f2f7063397034717362322e626b742e636c6f7564646e2e636f6d2f77782d6769746875622e6a7067" width="100" title="gitHub01"/>
    <img src="https://user-images.githubusercontent.com/15187909/43053228-29e08738-8e5e-11e8-8f91-377a28dcf771.jpg" width="100" title="极客教程"/>
    <img src="https://user-images.githubusercontent.com/7599915/43298816-425635f4-918a-11e8-9f0f-380dca9401dd.jpg" width="100" title="gitee工具"/>
    <img src="https://camo.githubusercontent.com/25a919d9549feb0b713ad86472c09e9c3f46aa83/687474703a2f2f696d616765732e70616e64616f6d656e672e636f6d2f32346665333339666662333936636662656238633136306435336261313539342e6a7067" width="100" title="销售神器"/>
    <img src="https://user-images.githubusercontent.com/17445000/43376242-3715ce48-93ec-11e8-90be-a59fe9788a98.jpg" width="100" title="360旗下-南瓜屋"/>
    <img src="https://user-images.githubusercontent.com/25244009/43445236-76c224be-94d8-11e8-9901-1ff399db7b70.jpg" width="100" title="地图小程序"/>
    <img src="https://user-images.githubusercontent.com/1448308/43559485-cbd41390-9640-11e8-848e-69b662be8da7.jpg" width="100" title="微工具书"/>
    <img src="https://user-images.githubusercontent.com/19870533/43562575-eed086f8-964f-11e8-8c39-20e604fd84fa.jpg" width="100" title="选课精灵"/>
    <img src="https://user-images.githubusercontent.com/13146991/43621850-f1df6730-970b-11e8-9d07-4db4f2c4c52f.png" width="100" title="京东云技术新知"/>
    <img src="https://user-images.githubusercontent.com/1627874/43621865-0df3a314-970c-11e8-8f1b-30cfdf6a9a47.jpg" width="100" title="运个货-互联网内贸集装箱海运物流平台"/>
    <img src="https://user-images.githubusercontent.com/4090027/44255554-0e352680-a239-11e8-96fe-8316a1fb22f8.jpg" width="100" title="小桔有车违章查询"/>
    <img src="https://user-images.githubusercontent.com/26808622/44326326-e1c61800-a48d-11e8-958f-d50ef7f45d62.png" width="100" title="餐饮,商超小程序"/>
    <img src="https://camo.githubusercontent.com/6f1b397785cd88ec260509e2768f10604b5711b9/687474703a2f2f7777772e77636c696d622e736974652f63646e2f7863782e6a7065673f763d31" width="100" title="妹子趣图"/>
    <img src="https://user-images.githubusercontent.com/12904977/44563258-02dd8000-a790-11e8-961d-fb50c4f27ba1.png" width="100" title="记工无忧"/>
    <img src="https://user-images.githubusercontent.com/22048131/44619692-5994a800-a8bd-11e8-98f0-b2337ef49b35.png" width="100" title="北美省钱快报App"/>
    <img src="https://user-images.githubusercontent.com/3882370/45558053-8bbc7880-b871-11e8-9b03-901f27f4e7d3.png" width="100" title="抽奖工具" />
    <img src="https://user-images.githubusercontent.com/16730031/45584645-e99c9f00-b909-11e8-853b-1f19b9cd76fd.jpg" width="100" title="盯事清单" />
    <img src="https://user-images.githubusercontent.com/18476675/45791542-adc45980-bcbc-11e8-803f-9c45c55c784b.png" width="100" title="微目标小程序" />
    <img src="https://user-images.githubusercontent.com/23513387/46054832-93d2bd00-c17b-11e8-9197-d5aa0c764ddb.jpg" width="100" title="微厅小程序" />
    <img src="https://i.loli.net/2018/10/11/5bbef01a68773.jpg" width="100" title="逗猫神器" />
    <img src="https://user-images.githubusercontent.com/16631463/46907861-eb2ea680-cf4b-11e8-92a2-0a8917417325.jpg" width="100" title="前端最火框架排行榜" />
    <img src="https://user-images.githubusercontent.com/16631463/46907868-187b5480-cf4c-11e8-8302-dcc722430b6d.jpg" width="100" title="猜谜语" />
    <img src="https://user-images.githubusercontent.com/38179236/47001679-9ebab500-d15d-11e8-99df-27b61e53c652.jpg" width="100" title="旅游大巴" />
    <img src="https://user-images.githubusercontent.com/20639676/47198055-a9af5880-d39c-11e8-8b1c-fcd4ba0ea57b.png" width="100" title="云鲜社区生鲜购" />
    <img src="https://user-images.githubusercontent.com/8544120/47279097-4114e580-d601-11e8-8a95-2d7dcc165d6b.jpg" width="100" title="闲停扯乎" />
    <img src="https://user-images.githubusercontent.com/22420/47401062-5bba9c00-d772-11e8-9717-d7c468d9b939.jpg" width="100" title="狗脸识别" />
    <img src="https://user-images.githubusercontent.com/31442077/47412617-c97cbd00-d79e-11e8-9002-7a0614d6ad1b.jpg" width="100" title="思政云" />
    <img src="https://user-images.githubusercontent.com/17083284/47612128-0b23a580-dac8-11e8-9582-70db2889e698.jpg" width="100" title="澳洲U站" />
    <img src="https://user-images.githubusercontent.com/16513510/47947846-8faa7400-df5f-11e8-8ee8-63c1a9fb6eac.jpg" width="100" title="莴聚" />
    <img src="https://user-images.githubusercontent.com/22372095/48299143-b6d6e780-e503-11e8-963a-4789e54f57d7.jpg" width="100" title="百世集团供应链TNET" />
    <img src="https://user-images.githubusercontent.com/15187909/48299710-c5290180-e50b-11e8-8cb5-339be1531608.jpg" width="100" />
    <img src="https://user-images.githubusercontent.com/1715463/49988179-d0f76000-ffb0-11e8-8a69-cd57d6e54890.jpeg" width="100" title="漂流小情书"/>
    <img src="https://user-images.githubusercontent.com/1715568/48662132-6b4eab80-eab8-11e8-95de-c1e21786b2d9.jpg" width="100" title="绿芽找房"/>
    <img src="http://jiankang.juwu168.com/blog/wp-content/uploads/2018/10/gh_36a0a852bf6f_258-1.jpg" width="100" title="慕课网" />
    <img src="https://user-images.githubusercontent.com/14272879/49424002-38085e00-f7d4-11e8-8242-13ddda18cec3.jpg" width="100" title="一人宴" />
    <img src="https://upload-images.jianshu.io/upload_images/3356839-59bfd93deb76afca.jpg" width="100" title="惠动平台">
    <!-- 非标准小程序码 -->
    <img src="https://user-images.githubusercontent.com/1176855/41755510-62b9fc90-760a-11e8-89be-b6ddbee08e63.jpg" width="100" title="暖茶阿妈的占卜小屋"/>
    <img src="https://user-images.githubusercontent.com/22720942/40184432-da33291c-5a22-11e8-966c-c836d1dc8078.png" width="100" />
    <img src="https://camo.githubusercontent.com/25b2636179cd939461975ada9f996c77d15c4d2a/68747470733a2f2f7778342e73696e61696d672e636e2f6d773639302f373032643563616167793166746e323975797a38666a323037363038367439612e6a7067" width="100" title="扫域名的小程序,米农帮"/>
</div>

[贡献方法](./.github/CONTRIBUTING.md)

[更多项目征集](https://github.com/Meituan-Dianping/mpvue/issues/21)

[分享交流群](https://github.com/Meituan-Dianping/mpvue/issues/14)


================================================
FILE: benchmarks/big-table/demo.css
================================================
form {
  margin-bottom: 15px;
}

td.hidden {
  color: #ccc;
}

table.filtered td.item {
  background-color: #FFFFBF;
}

table.filtered td.item.hidden {
  background-color: transparent;
}


================================================
FILE: benchmarks/big-table/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="../../dist/vue.min.js"></script>
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="demo.css">
  </head>
  <body>
    <div id="el">
      <h1>Rendering Dynamic Big Table</h1>
      <p>Reference: <a href="http://insin.github.io/ui-lib-samples/large-datasets/index.html">insin/ui-lib-samples/large-datasets</a></p>

      <p>
        <span>{{ rows }} x {{ cols }}, {{ optimized ? 'with' : 'without' }} optimization. {{ msg }}</span>
      </p>

      <p>
        <button v-if="optimized" @click="loadBase">Disable optimization</button>
        <button v-else @click="loadOptimized">Enable optimization (Object.freeze)</button>
        <button @click="unmount">Unmount</button>
        <button @click="rerender">Rerender with fresh data</button>
      </p>

      <form>
        <strong>Filter Data</strong>:
        <input type="text" v-model="filter">

        <!--
          If the user is filtering the data, we want to offer some insight into
          the breadth of the filtering.
        -->
        <span v-if="filter">
          &mdash;
          Filtering <strong>{{ filter }}</strong>
          over {{ dataPoints }} data points,
          {{ visibleCount() }} found.
        </span>

      </form>

      <table width="100%" cellspacing="2" :class="{ filtered: filter }">
        <tr v-for="row in grid">
          <th>{{ row.id }}</th>
          <td v-for="item in row.items"
            class="item"
            :class="{ hidden: !matches(item) }">
            {{ item.value }}
          </td>
        </tr>
      </table>
    </div>

    <script>
    var ROWS = 1000
    var COLS = 10
    var OPTIMIZED = window.location.hash === '#optimized'

    window.onhashchange = function () {
      window.location.reload()
    }

    function generateGrid( rowCount, columnCount ) {
      var valuePoints = [
        "Daenerys", "Jon", "Sansa", "Arya", "Stannis", "Gregor", "Tyrion",
        "Theon", "Joffrey", "Ramsay", "Cersei", "Bran", "Margaery",
        "Melisandre", "Daario", "Jamie", "Eddard", "Myrcella", "Robb",
        "Jorah", "Petyr", "Tommen", "Sandor", "Oberyn", "Drogo", "Ygritte"
      ]
      var valueIndex = 0
      var grid = []

      for ( var r = 0; r < rowCount; r++ ) {
        var row = {
          id: r,
          items: []
        }
        for ( var c = 0; c < columnCount; c++ ) {
          row.items.push({
            id: ( r + "-" + c ),
            value: valuePoints[ valueIndex ]
          })
          if ( ++valueIndex >= valuePoints.length ) {
            valueIndex = 0
          }
        }
        grid.push(row)
      }

      return OPTIMIZED ? Object.freeze(grid) : grid
    }

    var grid = generateGrid(ROWS, COLS)
    var s = window.performance.now()
    console.profile('a')
    var vm = new Vue({

      el: '#el',

      data: {
        cols: COLS,
        rows: ROWS,
        optimized: OPTIMIZED,
        msg: 'loading...',
        grid: grid,
        dataPoints: grid.length * grid[0].items.length,
        filter: ''
      },

      methods: {
        matches: function (item) {
          return item.value.toLowerCase().indexOf(this.filter.toLowerCase()) > -1
        },
        visibleCount: function () {
          var count = 0
          var grid = this.grid
          for (var i = 0, l = grid.length; i < l; i++) {
            var row = grid[i].items
            for (var j = 0, k = row.length; j < k; j++) {
              var item = row[j]
              var matched = !this.filter || this.matches(item)
              if (matched) {
                count++
              }
            }
          }
          return count
        },
        loadBase: function () {
          window.location.hash = ''
        },
        loadOptimized: function () {
          window.location.hash = '#optimized'
        },
        unmount: function () {
          console.profile('unmount')
          var s = window.performance.now()
          this.grid = []
          setTimeout(function () {
            vm.msg = 'umount took: ' + (window.performance.now() - s).toFixed(2) + 'ms'
            console.profileEnd('unmount')
          }, 0)
        },
        rerender: function () {
          var grid = generateGrid(1000, 10)
          var s = window.performance.now()
          console.profile('rerender')
          this.grid = grid
          setTimeout(function () {
            vm.msg = 'rerender took: ' + (window.performance.now() - s).toFixed(2) + 'ms'
            console.profileEnd('rerender')
          }, 0)
        }
      }
    })
    console.profileEnd('a')
    setTimeout(function () {
      vm.msg = 'initial render took: ' + (window.performance.now() - s).toFixed(2) + 'ms'
    }, 0)
    </script>
  </body>
</html>


================================================
FILE: benchmarks/big-table/style.css
================================================
@font-face {
  font-family: octicons-anchor;
  src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format('woff');
}

body  {
  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
  text-size-adjust: 100%;
  color: #333;
  font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
  font-size: 16px;
  line-height: 1.6;
  word-wrap: break-word;
  padding: 1em;
}

a {
  background-color: transparent;
}

a:active,
a:hover {
  outline: 0;
}

strong {
  font-weight: bold;
}

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

img {
  border: 0;
}

hr {
  box-sizing: content-box;
  height: 0;
}

pre {
  overflow: auto;
}

code,
kbd,
pre {
  font-family: monospace, monospace;
  font-size: 1em;
}

input {
  color: inherit;
  font: inherit;
  margin: 0;
}

html input[disabled] {
  cursor: default;
}

input {
  line-height: normal;
}

input[type="checkbox"] {
  box-sizing: border-box;
  padding: 0;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

* {
  box-sizing: border-box;
}

input {
  font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}

a {
  color: #4078c0;
  text-decoration: none;
}

a:hover,
a:active {
  text-decoration: underline;
}

hr {
  height: 0;
  margin: 15px 0;
  overflow: hidden;
  background: transparent;
  border: 0;
  border-bottom: 1px solid #ddd;
}

hr:before {
  display: table;
  content: "";
}

hr:after {
  display: table;
  clear: both;
  content: "";
}

h1,
h2,
h3,
h4,
h5,
h6 {
  margin-top: 15px;
  margin-bottom: 15px;
  line-height: 1.1;
}

h1 {
  font-size: 30px;
}
h1:first-child {
  margin-top: 0;
}

h2 {
  font-size: 21px;
}

h3 {
  font-size: 16px;
}

h4 {
  font-size: 14px;
}

h5 {
  font-size: 12px;
}

h6 {
  font-size: 11px;
}

blockquote {
  margin: 0;
}

ul,
ol {
  padding: 0;
  margin-top: 0;
  margin-bottom: 0;
}

ol ol,
ul ol {
  list-style-type: lower-roman;
}

ul ul ol,
ul ol ol,
ol ul ol,
ol ol ol {
  list-style-type: lower-alpha;
}

dd {
  margin-left: 0;
}

code {
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  font-size: 12px;
}

pre {
  margin-top: 0;
  margin-bottom: 0;
  font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}

.octicon {
  font: normal normal normal 16px/1 octicons-anchor;
  display: inline-block;
  text-decoration: none;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

.octicon-link:before {
  content: '\f05c';
}

.markdown-body>*:first-child {
  margin-top: 0 !important;
}

.markdown-body>*:last-child {
  margin-bottom: 0 !important;
}

a:not([href]) {
  cursor: pointer;
  text-decoration: none;
}

.anchor {
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  padding-right: 6px;
  padding-left: 30px;
  margin-left: -30px;
}

.anchor:focus {
  outline: none;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  position: relative;
  margin-top: 1em;
  margin-bottom: 16px;
  font-weight: bold;
  line-height: 1.4;
}

h1 .octicon-link,
h2 .octicon-link,
h3 .octicon-link,
h4 .octicon-link,
h5 .octicon-link,
h6 .octicon-link {
  display: none;
  color: #000;
  vertical-align: middle;
}

h1:hover .anchor,
h2:hover .anchor,
h3:hover .anchor,
h4:hover .anchor,
h5:hover .anchor,
h6:hover .anchor {
  padding-left: 8px;
  margin-left: -30px;
  text-decoration: none;
}

h1:hover .anchor .octicon-link,
h2:hover .anchor .octicon-link,
h3:hover .anchor .octicon-link,
h4:hover .anchor .octicon-link,
h5:hover .anchor .octicon-link,
h6:hover .anchor .octicon-link {
  display: inline-block;
}

h1 {
  padding-bottom: 0.3em;
  font-size: 2.25em;
  line-height: 1.2;
  border-bottom: 1px solid #eee;
}

h1 .anchor {
  line-height: 1;
}

h2 {
  padding-bottom: 0.3em;
  font-size: 1.75em;
  line-height: 1.225;
  border-bottom: 1px solid #eee;
}

h2 .anchor {
  line-height: 1;
}

h3 {
  font-size: 1.5em;
  line-height: 1.43;
}

h3 .anchor {
  line-height: 1.2;
}

h4 {
  font-size: 1.25em;
}

h4 .anchor {
  line-height: 1.2;
}

h5 {
  font-size: 1em;
}

h5 .anchor {
  line-height: 1.1;
}

h6 {
  font-size: 1em;
  color: #777;
}

h6 .anchor {
  line-height: 1.1;
}

p,
blockquote,
ul,
ol,
dl,
table,
pre {
  margin-top: 0;
  margin-bottom: 16px;
}

hr {
  height: 4px;
  padding: 0;
  margin: 16px 0;
  background-color: #e7e7e7;
  border: 0 none;
}

ul,
ol {
  padding-left: 2em;
}

ul ul,
ul ol,
ol ol,
ol ul {
  margin-top: 0;
  margin-bottom: 0;
}

li>p {
  margin-top: 16px;
}

dl {
  padding: 0;
}

dl dt {
  padding: 0;
  margin-top: 16px;
  font-size: 1em;
  font-style: italic;
  font-weight: bold;
}

dl dd {
  padding: 0 16px;
  margin-bottom: 16px;
}

blockquote {
  padding: 0 15px;
  color: #777;
  border-left: 4px solid #ddd;
}

blockquote>:first-child {
  margin-top: 0;
}

blockquote>:last-child {
  margin-bottom: 0;
}

table {
  display: block;
  width: 100%;
  overflow: auto;
  word-break: normal;
  word-break: keep-all;
}

table th {
  font-weight: bold;
}

table th,
table td {
  padding: 6px 13px;
  border: 1px solid #ddd;
}

table tr {
  background-color: #fff;
  border-top: 1px solid #ccc;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

img {
  max-width: 100%;
  box-sizing: border-box;
}

code {
  padding: 0;
  padding-top: 0.2em;
  padding-bottom: 0.2em;
  margin: 0;
  font-size: 85%;
  background-color: rgba(0,0,0,0.04);
  border-radius: 3px;
}

code:before,
code:after {
  letter-spacing: -0.2em;
  content: "\00a0";
}

pre>code {
  padding: 0;
  margin: 0;
  font-size: 100%;
  word-break: normal;
  white-space: pre;
  background: transparent;
  border: 0;
}

.highlight {
  margin-bottom: 16px;
}

.highlight pre,
pre {
  padding: 16px;
  overflow: auto;
  font-size: 85%;
  line-height: 1.45;
  background-color: #f7f7f7;
  border-radius: 3px;
}

.highlight pre {
  margin-bottom: 0;
  word-break: normal;
}

pre {
  word-wrap: normal;
}

pre code {
  display: inline;
  max-width: initial;
  padding: 0;
  margin: 0;
  overflow: initial;
  line-height: inherit;
  word-wrap: normal;
  background-color: transparent;
  border: 0;
}

pre code:before,
pre code:after {
  content: normal;
}

kbd {
  display: inline-block;
  padding: 3px 5px;
  font-size: 11px;
  line-height: 10px;
  color: #555;
  vertical-align: middle;
  background-color: #fcfcfc;
  border: solid 1px #ccc;
  border-bottom-color: #bbb;
  border-radius: 3px;
  box-shadow: inset 0 -1px 0 #bbb;
}

kbd {
  display: inline-block;
  padding: 3px 5px;
  font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
  line-height: 10px;
  color: #555;
  vertical-align: middle;
  background-color: #fcfcfc;
  border: solid 1px #ccc;
  border-bottom-color: #bbb;
  border-radius: 3px;
  box-shadow: inset 0 -1px 0 #bbb;
}

.task-list-item {
  list-style-type: none;
}

.task-list-item+.task-list-item {
  margin-top: 3px;
}

.task-list-item input {
  margin: 0 0.35em 0.25em -1.6em;
  vertical-align: middle;
}

:checked+.radio-label {
  z-index: 1;
  position: relative;
  border-color: #4078c0;
}


================================================
FILE: benchmarks/dbmon/ENV.js
================================================
var ENV = ENV || (function() {

  var first = true;
  var counter = 0;
  var data;
  var _base;
  (_base = String.prototype).lpad || (_base.lpad = function(padding, toLength) {
    return padding.repeat((toLength - this.length) / padding.length).concat(this);
  });

  function formatElapsed(value) {
    var str = parseFloat(value).toFixed(2);
    if (value > 60) {
      minutes = Math.floor(value / 60);
      comps = (value % 60).toFixed(2).split('.');
      seconds = comps[0].lpad('0', 2);
      ms = comps[1];
      str = minutes + ":" + seconds + "." + ms;
    }
    return str;
  }

  function getElapsedClassName(elapsed) {
    var className = 'Query elapsed';
    if (elapsed >= 10.0) {
      className += ' warn_long';
    }
    else if (elapsed >= 1.0) {
      className += ' warn';
    }
    else {
      className += ' short';
    }
    return className;
  }

  function countClassName(queries) {
    var countClassName = "label";
    if (queries >= 20) {
      countClassName += " label-important";
    }
    else if (queries >= 10) {
      countClassName += " label-warning";
    }
    else {
      countClassName += " label-success";
    }
    return countClassName;
  }

  function updateQuery(object) {
    if (!object) {
      object = {};
    }
    var elapsed = Math.random() * 15;
    object.elapsed = elapsed;
    object.formatElapsed = formatElapsed(elapsed);
    object.elapsedClassName = getElapsedClassName(elapsed);
    object.query = "SELECT blah FROM something";
    object.waiting = Math.random() < 0.5;
    if (Math.random() < 0.2) {
      object.query = "<IDLE> in transaction";
    }
    if (Math.random() < 0.1) {
      object.query = "vacuum";
    }
    return object;
  }

  function cleanQuery(value) {
    if (value) {
      value.formatElapsed = "";
      value.elapsedClassName = "";
      value.query = "";
      value.elapsed = null;
      value.waiting = null;
    } else {
      return {
        query: "***",
        formatElapsed: "",
        elapsedClassName: ""
      };
    }
  }

  function generateRow(object, keepIdentity, counter) {
    var nbQueries = Math.floor((Math.random() * 10) + 1);
    if (!object) {
      object = {};
    }
    object.lastMutationId = counter;
    object.nbQueries = nbQueries;
    if (!object.lastSample) {
      object.lastSample = {};
    }
    if (!object.lastSample.topFiveQueries) {
      object.lastSample.topFiveQueries = [];
    }
    if (keepIdentity) {
      // for Angular optimization
      if (!object.lastSample.queries) {
        object.lastSample.queries = [];
        for (var l = 0; l < 12; l++) {
          object.lastSample.queries[l] = cleanQuery();
        }
      }
      for (var j in object.lastSample.queries) {
        var value = object.lastSample.queries[j];
        if (j <= nbQueries) {
          updateQuery(value);
        } else {
          cleanQuery(value);
        }
      }
    } else {
      object.lastSample.queries = [];
      for (var j = 0; j < 12; j++) {
        if (j < nbQueries) {
          var value = updateQuery(cleanQuery());
          object.lastSample.queries.push(value);
        } else {
          object.lastSample.queries.push(cleanQuery());
        }
      }
    }
    for (var i = 0; i < 5; i++) {
      var source = object.lastSample.queries[i];
      object.lastSample.topFiveQueries[i] = source;
    }
    object.lastSample.nbQueries = nbQueries;
    object.lastSample.countClassName = countClassName(nbQueries);
    return object;
  }

  function getData(keepIdentity) {
    var oldData = data;
    if (!keepIdentity) { // reset for each tick when !keepIdentity
      data = [];
      for (var i = 1; i <= ENV.rows; i++) {
        data.push({ dbname: 'cluster' + i, query: "", formatElapsed: "", elapsedClassName: "" });
        data.push({ dbname: 'cluster' + i + ' slave', query: "", formatElapsed: "", elapsedClassName: "" });
      }
    }
    if (!data) { // first init when keepIdentity
      data = [];
      for (var i = 1; i <= ENV.rows; i++) {
        data.push({ dbname: 'cluster' + i });
        data.push({ dbname: 'cluster' + i + ' slave' });
      }
      oldData = data;
    }
    for (var i in data) {
      var row = data[i];
      if (!keepIdentity && oldData && oldData[i]) {
        row.lastSample = oldData[i].lastSample;
      }
      if (!row.lastSample || Math.random() < ENV.mutations()) {
        counter = counter + 1;
        if (!keepIdentity) {
          row.lastSample = null;
        }
        generateRow(row, keepIdentity, counter);
      } else {
        data[i] = oldData[i];
      }
    }
    first = false;
    return {
      toArray: function() {
        return data;
      }
    };
  }

  var mutationsValue = 0.5;

  function mutations(value) {
    if (value) {
      mutationsValue = value;
      return mutationsValue;
    } else {
      return mutationsValue;
    }
  }

  var body = document.querySelector('body');
  var theFirstChild = body.firstChild;

  var sliderContainer = document.createElement( 'div' );
  sliderContainer.style.cssText = "display: flex";
  var slider = document.createElement('input');
  var text = document.createElement('label');
  text.innerHTML = 'mutations : ' + (mutationsValue * 100).toFixed(0) + '%';
  text.id = "ratioval";
  slider.setAttribute("type", "range");
  slider.style.cssText = 'margin-bottom: 10px; margin-top: 5px';
  slider.addEventListener('change', function(e) {
    ENV.mutations(e.target.value / 100);
    document.querySelector('#ratioval').innerHTML = 'mutations : ' + (ENV.mutations() * 100).toFixed(0) + '%';
  });
  sliderContainer.appendChild( text );
  sliderContainer.appendChild( slider );
  body.insertBefore( sliderContainer, theFirstChild );

  return  {
    generateData: getData,
    rows: 50,
    timeout: 0,
    mutations: mutations
  };
})();


================================================
FILE: benchmarks/dbmon/app.js
================================================
var app = new Vue({
  el: '#app',
  data: {
    databases: []
  }
})

function loadSamples() {
  app.databases = Object.freeze(ENV.generateData().toArray());
  Monitoring.renderRate.ping();
  setTimeout(loadSamples, ENV.timeout);
}

loadSamples()


================================================
FILE: benchmarks/dbmon/index.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="dbmon vue" />
<link href="./lib/styles.css" rel="stylesheet" type="text/css" />
<title>dbmon (Vue)</title>
</head>
<body>
  <h2>
    Reference: <a href="http://mathieuancelin.github.io/js-repaint-perfs/">js-repaint-perfs</a>
  </h2>
  <div id="app">
    <table class="table table-striped lastest-data">
      <tbody>
        <tr v-for="db in databases">
          <td class="dbname">{{db.dbname}}</td>
          <td class="query-count">
            <span :class="db.lastSample.countClassName">{{db.lastSample.nbQueries}}</span>
          </td>
          <td v-for="q in db.lastSample.topFiveQueries" :class="'Query ' + q.elapsedClassName">
            {{q.formatElapsed}}
            <div class="popover left">
              <div class="popover-content">{{q.query}}</div>
              <div class="arrow"></div>
            </div>
          </td>
        </tr>
      </tbody>
    </table>
  </div>

  <script src="./ENV.js"></script>
  <script src="./lib/memory-stats.js"></script>
  <script src="./lib/monitor.js"></script>
  <script src="../../dist/vue.min.js"></script>
  <script src="./app.js"></script>
</body>
</html>


================================================
FILE: benchmarks/dbmon/lib/memory-stats.js
================================================
/**
 * @author mrdoob / http://mrdoob.com/
 * @author jetienne / http://jetienne.com/
 * @author paulirish / http://paulirish.com/
 */
var MemoryStats = function (){

	var msMin	= 100;
	var msMax	= 0;

	var container	= document.createElement( 'div' );
	container.id	= 'stats';
	container.style.cssText = 'width:80px;opacity:0.9;cursor:pointer';

	var msDiv	= document.createElement( 'div' );
	msDiv.id	= 'ms';
	msDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#020;';
	container.appendChild( msDiv );

	var msText	= document.createElement( 'div' );
	msText.id	= 'msText';
	msText.style.cssText = 'color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
	msText.innerHTML= 'Memory';
	msDiv.appendChild( msText );

	var msGraph	= document.createElement( 'div' );
	msGraph.id	= 'msGraph';
	msGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0f0';
	msDiv.appendChild( msGraph );

	while ( msGraph.children.length < 74 ) {

		var bar = document.createElement( 'span' );
		bar.style.cssText = 'width:1px;height:30px;float:left;background-color:#131';
		msGraph.appendChild( bar );

	}

	var updateGraph = function ( dom, height, color ) {

		var child = dom.appendChild( dom.firstChild );
		child.style.height = height + 'px';
		if( color ) child.style.backgroundColor = color;

	}

	var perf = window.performance || {};
	// polyfill usedJSHeapSize
	if (!perf && !perf.memory){
		perf.memory = { usedJSHeapSize : 0 };
	}
	if (perf && !perf.memory){
		perf.memory = { usedJSHeapSize : 0 };
	}

	// support of the API?
	if( perf.memory.totalJSHeapSize === 0 ){
		console.warn('totalJSHeapSize === 0... performance.memory is only available in Chrome .')
	}
	
	// TODO, add a sanity check to see if values are bucketed.
	// If so, reminde user to adopt the --enable-precise-memory-info flag.
	// open -a "/Applications/Google Chrome.app" --args --enable-precise-memory-info

	var lastTime	= Date.now();
	var lastUsedHeap= perf.memory.usedJSHeapSize;
	return {
		domElement: container,

		update: function () {

			// refresh only 30time per second
			if( Date.now() - lastTime < 1000/30 )	return;
			lastTime	= Date.now()

			var delta	= perf.memory.usedJSHeapSize - lastUsedHeap;
			lastUsedHeap	= perf.memory.usedJSHeapSize;
			var color	= delta < 0 ? '#830' : '#131';
			
			var ms	= perf.memory.usedJSHeapSize;
			msMin	= Math.min( msMin, ms );
			msMax	= Math.max( msMax, ms );
			msText.textContent = "Mem: " + bytesToSize(ms, 2);
			
			var normValue	= ms / (30*1024*1024);
			var height	= Math.min( 30, 30 - normValue * 30 );
			updateGraph( msGraph, height, color);
			
			function bytesToSize( bytes, nFractDigit ){
				var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
				if (bytes == 0) return 'n/a';
				nFractDigit	= nFractDigit !== undefined ? nFractDigit : 0;
				var precision	= Math.pow(10, nFractDigit);
				var i 		= Math.floor(Math.log(bytes) / Math.log(1024));
				return Math.round(bytes*precision / Math.pow(1024, i))/precision + ' ' + sizes[i];
			};
		}

	}
	
};

================================================
FILE: benchmarks/dbmon/lib/monitor.js
================================================
var Monitoring = Monitoring || (function() {

  var stats = new MemoryStats();
  stats.domElement.style.position = 'fixed';
  stats.domElement.style.right        = '0px';
  stats.domElement.style.bottom       = '0px';
  document.body.appendChild( stats.domElement );
  requestAnimationFrame(function rAFloop(){
      stats.update();
      requestAnimationFrame(rAFloop);
  });

  var RenderRate = function () {
    var container = document.createElement( 'div' );
    container.id  = 'stats';
    container.style.cssText = 'width:150px;opacity:0.9;cursor:pointer;position:fixed;right:80px;bottom:0px;';

    var msDiv = document.createElement( 'div' );
    msDiv.id  = 'ms';
    msDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#020;';
    container.appendChild( msDiv );

    var msText  = document.createElement( 'div' );
    msText.id = 'msText';
    msText.style.cssText = 'color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
    msText.innerHTML= 'Repaint rate: 0/sec';
    msDiv.appendChild( msText );

    var bucketSize = 20;
    var bucket = [];
    var lastTime  = Date.now();
    return {
      domElement: container,
      ping: function () {
        var start = lastTime;
        var stop = Date.now();
        var rate = 1000 / (stop - start);
        bucket.push(rate);
        if (bucket.length > bucketSize) {
          bucket.shift();
        }
        var sum = 0;
        for (var i = 0; i < bucket.length; i++) {
          sum = sum + bucket[i];
        }
        msText.textContent = "Repaint rate: " + (sum / bucket.length).toFixed(2) + "/sec";
        lastTime = stop;
      }
    }
  };

  var renderRate = new RenderRate();
  document.body.appendChild( renderRate.domElement );

  return {
    memoryStats: stats,
    renderRate: renderRate
  };
  
})();


================================================
FILE: benchmarks/dbmon/lib/styles.css
================================================
body {color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0;}
label {display:inline-block;font-weight:700;margin-bottom:5px;}
input[type=range] {display:block;width:100%;}
table {border-collapse:collapse;border-spacing:0;}
:before,:after {box-sizing: border-box;}

.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td {border-top:1px solid #ddd;line-height:1.42857143;padding:8px;vertical-align:top;}
.table {width:100%;}
.table-striped > tbody > tr:nth-child(odd) > td,.table-striped > tbody > tr:nth-child(odd) > th {background:#f9f9f9;}

.label {border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:baseline;white-space:nowrap;}
.label-success {background-color:#5cb85c;}
.label-warning {background-color:#f0ad4e;}

.popover {background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2);display:none;left:0;max-width:276px;padding:1px;position:absolute;text-align:left;top:0;white-space:normal;z-index:1010;}
.popover>.arrow:after {border-width:10px;content:"";}
.popover.left {margin-left:-10px;}
.popover.left > .arrow {border-right-width:0;border-left-color:rgba(0,0,0,.25);margin-top:-11px;right:-11px;top:50%;}
.popover.left > .arrow:after {border-left-color:#fff;border-right-width:0;bottom:-10px;content:" ";right:1px;}
.popover > .arrow {border-width:11px;}
.popover > .arrow,.popover>.arrow:after {border-color:transparent;border-style:solid;display:block;height:0;position:absolute;width:0;}

.popover-content {padding:9px 14px;}

.Query {position:relative;}
.Query:hover .popover {display:block;left:-100%;width:100%;}


================================================
FILE: benchmarks/reorder-list/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue benchmark</title>
  </head>
  <body>
    <script src="https://cdn.jsdelivr.net/lodash/4.10.0/lodash.min.js"></script>
    <script src="../../dist/vue.min.js"></script>
    <style>
    .danger {
      background-color: red;
    }
    </style>

    <script type="text/x-template" id="t">
      <div>
        <h1>{{ total }} Components</h1>
        <p>{{ action }} took {{time}}ms.</p>
        <button @click="shuffle">shuffle</button>
        <button @click="add">add</button>
        <table class="table table-hover table-striped test-data">
          <row v-for="item in items" :key="item.id"
            :class="{ danger: item.id === selected }"
            :item="item"
            @select="select(item)"
            @remove="remove(item)">
          </row>
        </table>
      </div>
    </script>

    <script type="text/x-template" id="row">
      <tr>
        <td class="col-md-1">{{item.id}}</td>
        <td class="col-md-4">
            <a @click="$emit('select')">{{item.label}}</a>
        </td>
        <td class="col-md-1">
          <button @click="$emit('remove')">remove</button>
        </td>
      </tr>
    </script>

    <div id="el">
    </div>

    <script>
    var total = 1000
    var items = []
    for (var i = 0; i < total; i++) {
      items.push({
        id: i,
        label: String(Math.random()).slice(0, 5)
      })
    }

    var s = window.performance.now()
    console.profile('render')
    var vm = new Vue({
      el: '#el',
      template: '#t',
      data: {
        total: total,
        time: 0,
        action: 'Render',
        items: items,
        selected: null
      },
      methods: {
        shuffle: monitor('shuffle', function () {
          this.items = _.shuffle(this.items)
        }),
        add: monitor('add', function () {
          this.items.push({
            id: total++,
            label: String(Math.random()).slice(0, 5)
          })
        }),
        select: monitor('select', function (item) {
          this.selected = item.id
        }),
        remove: monitor('remove', function (item) {
          this.items.splice(this.items.indexOf(item), 1)
        })
      },
      components: {
        row: {
          props: ['item'],
          template: '#row'
        }
      }
    })
    setTimeout(function () {
      vm.time = window.performance.now() - s
      console.profileEnd('render')
    }, 0)

    function monitor (action, fn) {
      return function () {
        var s = window.performance.now()
        fn.apply(this, arguments)
        Vue.nextTick(function () {
          vm.action = action
          vm.time = window.performance.now() - s
        })
      }
    }
    </script>
  </body>
</html>


================================================
FILE: benchmarks/ssr/README.md
================================================
# Vue.js SSR benchmark

This benchmark renders a table of 1000 rows with 10 columns (10k components), with around 30k normal elements on the page. Note this is not something likely to be seen in a typical app. This benchmark is mostly for stress/regression testing and comparing between `renderToString` and `renderToStream`.

To view the results follow the run section. Note that the overall completion time for the results are variable, this is due to other system related variants at run time (available memory, processing ect). In ideal circumstances both should finish within similar results.

`renderToStream` pipes the content through a stream which provides considerable performance benefits (faster time-to-first-byte and non-event-loop-blocking) over renderToString. This can be observed through the benchmark.

### run

``` bash
npm run bench:ssr
```


================================================
FILE: benchmarks/ssr/common.js
================================================
'use strict'

const self = (global || root)

self.performance = {
  now: function () {
    var hrtime = process.hrtime()
    return ((hrtime[0] * 1000000 + hrtime[1] / 1000) / 1000)
  }
}

function generateGrid (rowCount, columnCount) {
  var grid = []

  for (var r = 0; r < rowCount; r++) {
    var row = { id: r, items: [] }
    for (var c = 0; c < columnCount; c++) {
      row.items.push({ id: (r + '-' + c) })
    }
    grid.push(row)
  }

  return grid
}

const gridData = generateGrid(1000, 10)

module.exports = {
  template: '<div><h1>{{ Math.random() }}</h1><my-table></my-table></div>',
  components: {
    myTable: {
      data: function () {
        return {
          grid: gridData
        }
      },
      // template: '<table><tr v-for="row in grid"><th>123</th><td v-for="item in row.items">{{ item.id }}</td></tr></table>',
      template: '<table width="100%" cellspacing="2"><row v-for="row in grid" :row="row"></row></table>',
      components: {
        row: {
          props: ['row'],
          template: '<tr><th>{{ Math.random() }}</th><column v-for="item in row.items"></column></tr>',
          components: {
            column: {
              template: '<td class="item">' +
                // 25 plain elements for each cell
                '<ul class="yoyo">' +
                  '<li class="hihi" v-for="i in 5">' +
                    '<span v-for="i in 5">fsefs</span>' +
                    '</li>' +
                '</ul>' +
              '</td>'
            }
          }
        }
      }
    }
  }
}


================================================
FILE: benchmarks/ssr/renderToStream.js
================================================
/* eslint-disable no-unused-vars */

'use strict'

process.env.NODE_ENV = 'production'

const Vue = require('../../dist/vue.runtime.common.js')
const createRenderer = require('../../packages/vue-server-renderer').createRenderer
const renderToStream = createRenderer().renderToStream
const gridComponent = require('./common.js')

console.log('--- renderToStream --- ')
const self = (global || root)
const s = self.performance.now()

const stream = renderToStream(new Vue(gridComponent))
let str = ''
let first
let complete
stream.once('data', () => {
  first = self.performance.now() - s
})
stream.on('data', chunk => {
  str += chunk
})
stream.on('end', () => {
  complete = self.performance.now() - s
  console.log(`first chunk: ${first.toFixed(2)}ms`)
  console.log(`complete: ${complete.toFixed(2)}ms`)
  console.log()
})


================================================
FILE: benchmarks/ssr/renderToString.js
================================================
'use strict'

process.env.NODE_ENV = 'production'

const Vue = require('../../dist/vue.runtime.common.js')
const createRenderer = require('../../packages/vue-server-renderer').createRenderer
const renderToString = createRenderer().renderToString
const gridComponent = require('./common.js')

console.log('--- renderToString --- ')
const self = (global || root)
self.s = self.performance.now()

renderToString(new Vue(gridComponent), (err, res) => {
  if (err) throw err
  // console.log(res)
  console.log('Complete time: ' + (self.performance.now() - self.s).toFixed(2) + 'ms')
  console.log()
})


================================================
FILE: benchmarks/svg/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
  <title>vue.js version</title>
  <script src="https://cdn.jsdelivr.net/stats.js/r11/stats.min.js"></script>
  <script src="../../dist/vue.min.js"></script>
  <style>
  html, body {
    height: 100%;
    width: 100%;
    padding: 0;
    margin: 0;
  }
  svg {
    width: 800px;
    height: 600px;
  }
  </style>
</head>
<body>
  <h1>Animating 1000 SVG dots</h1>
  <div id="app">
    <p>
      <button @click="toggleOptimization">
        {{ optimized ? 'disable' : 'enable' }} optimization (Object.freeze)
      </button>
    </p>
    <svg>
      <circle  v-for='point in model.points' :cx='point.x' :cy='point.y' r='2px' fill='#FC309D'></circle>
    </svg>
  </div>
<script type="text/javascript" charset="utf-8">
var stats = new Stats()
stats.setMode(0)
stats.domElement.style.position = 'absolute'
stats.domElement.style.right = '0px'
stats.domElement.style.top = '0px'
document.body.appendChild(stats.domElement)

var WIDTH = 800
var HEIGHT = 600

new Vue({
  el: '#app',
  data: {
    model: createModel(1000),
    optimized: false
  },
  created: function () {
    var self = this
    requestAnimationFrame(render)
    stats.begin()
    function render () {
      stats.end()
      stats.begin()
      requestAnimationFrame(render)
      self.model.step()
      if (self.optimized) {
        self.$forceUpdate()
      }
    }
  },
  methods: {
    toggleOptimization: function () {
      this.model = this.optimized
        ? createModel(1000)
        : Object.freeze(createModel(1000))
      this.optimized = !this.optimized
    }
  }
});

function createModel (count) {
  var points = []
  for (var i = 0; i < count; ++i) {
    points.push({
      x: Math.random() * WIDTH,
      y: Math.random() * HEIGHT,
      vx: Math.random() * 4 - 2,
      vy: Math.random() * 4 - 2
    })
  }

  return {
    points: points,
    step: step
  }

  function step () {
    points.forEach(move)
  }

  function move (p) {
    if (p.x > WIDTH || p.x < 0) p.vx *= -1
    if (p.y > HEIGHT || p.y < 0) p.vy *= -1
    p.y += p.vy
    p.x += p.vx
  }
}
</script>
</body>
</html>


================================================
FILE: benchmarks/uptime/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue benchmark</title>
    <style type="text/css">
      html, body {
        margin: 0;
        padding: 0 10px;
        font-family: sans-serif;
      }

      #fps {
        position: fixed;
        top: 0px;
        right: 0px;
        padding: 32px;
        font-size: 32px;
        text-align: right;
      }

      * {
        box-sizing: border-box;
      }

      .server-uptime {
        display: block;
        overflow: hidden;
        margin: 0 auto;
        width: 50%;
      }

      .server-uptime + .server-uptime {
        margin: 20px auto 0 auto;
        border-top: 1px solid #999;
      }

      .days {
        display: flex;
        flex-direction: row;
        flex-flow: wrap;
      }

      .uptime-day {
        display: flex;
      }

      span.uptime-day-status {
        width: 10px;
        height: 10px;
        margin: 1px;
      }

      .hover {
        display: none;
      }

      .uptime-day-status:hover + .hover {
        display: flex;
        position: absolute;
        margin-top: -35px;
        margin-left: -30px;
        border-radius: 4px;
        color: #eee;
        background-color: #333;
        padding: 10px;
        font-size: 11px;
      }
    </style>
  </head>
  <body>
    <p>Reference: <a href="https://github.com/tildeio/glimmer/blob/master/packages/glimmer-demos/lib/uptime.ts">Ember Glimmer 2 demo</a></p>
    <div id="app">
      <p>FPS: {{ fps }}</p>
      <button @click="toggle">{{ playing ? 'pause' : 'play' }}</button>
      <server-uptime
        v-for="server in servers"
        :key="server.name"
        :name="server.name"
        :days="server.days">
      </server-uptime>
    </div>
    <script src="../../dist/vue.min.js"></script>
    <script>
      // functional components are prefect for small, presentational components
      // and they are much more efficient than stateful ones.
      Vue.component('uptime-day', {
        props: ['day'],
        functional: true,
        render (h, ctx) {
          var day = ctx.props.day
          return h('div', { staticClass: 'uptime-day'}, [
            h('span', { staticClass: 'uptime-day-status', style: { backgroundColor: day.up ? '#8cc665' : '#ccc' } }),
            h('span', { staticClass: 'hover' }, [day.number + ': ' + day.up ? 'Servers operational!' : 'Red alert!'])
          ])
        }
      })

      Vue.component('server-uptime', {
        props: ['name', 'days'],
        computed: {
          upDays () {
            return this.days.reduce(function (upDays, day) {
              return upDays += (day.up ? 1 : 0)
            }, 0)
          },
          maxStreak () {
            var streak = this.days.reduce(([max, streak], day) => {
              if (day.up && streak + 1 > max) {
                return [streak + 1, streak + 1]
              } else if (day.up) {
                return [max, streak + 1]
              } else {
                return [max, 0]
              }
            }, [0, 0])

            return streak.max
          }
        },
        template: `
          <div class="server-uptime">
            <h1>{{name}}</h1>
            <h2>{{upDays}} Days Up</h2>
            <h2>Biggest Streak: {{maxStreak}}</h2>
            <div class="days">
              <uptime-day
                v-for="day in days"
                :key="day.number"
                :day="day">
              </uptime-day>
            </div>
          </div>
        `
      })

      function generateServer (name) {
        var days = []
        for (var i=0; i<=364; i++) {
          var up = Math.random() > 0.2
          days.push({ number: i, up })
        }
        return { name, days }
      }

      function generateServers () {
        return [
          generateServer("Stefan's Server"),
          generateServer("Godfrey's Server"),
          generateServer("Yehuda's Server")
        ]
      }

      var s = window.performance.now()
      var app = new Vue({
        el: '#app',
        data: {
          fps: 0,
          playing: false,
          servers: Object.freeze(generateServers())
        },
        methods: {
          toggle () {
            this.playing = !this.playing
            if (this.playing) {
              update()
            } else {
              clearTimeout(timeoutId)
            }
          }
        }
      })
      console.log('initial render: ' + (window.performance.now() - s) + 'ms')

      var fpsMeter = {
        alpha: 2/121,
        lastValue: null,
        push (dataPoint) {
          if (this.lastValue) {
            return this.lastValue = this.lastValue + this.alpha * (dataPoint - this.lastValue)
          } else {
            return this.lastValue = dataPoint
          }
        }
      }

      var timeoutId
      var lastFrame = null
      function update () {
        var thisFrame = window.performance.now()
        if (lastFrame) {
          app.fps = Math.round(fpsMeter.push(1000 / (thisFrame - lastFrame)))
        }
        app.servers = Object.freeze(generateServers())
        timeoutId = setTimeout(update, 0) // not using rAF because that limits us to 60fps!
        lastFrame = thisFrame
      }
    </script>
  </body>
</html>


================================================
FILE: build/alias.js
================================================
const path = require('path')

module.exports = {
  vue: path.resolve(__dirname, '../src/platforms/web/entry-runtime-with-compiler'),
  compiler: path.resolve(__dirname, '../src/compiler'),
  core: path.resolve(__dirname, '../src/core'),
  shared: path.resolve(__dirname, '../src/shared'),
  web: path.resolve(__dirname, '../src/platforms/web'),
  weex: path.resolve(__dirname, '../src/platforms/weex'),
  mp: path.resolve(__dirname, '../src/platforms/mp'),
  server: path.resolve(__dirname, '../src/server'),
  entries: path.resolve(__dirname, '../src/entries'),
  sfc: path.resolve(__dirname, '../src/sfc')
}


================================================
FILE: build/build.js
================================================
const fs = require('fs')
const path = require('path')
const zlib = require('zlib')
const rollup = require('rollup')
const uglify = require('uglify-js')

if (!fs.existsSync('dist')) {
  fs.mkdirSync('dist')
}

let builds = require('./config').getAllBuilds()

// filter builds via command line arg
if (process.argv[2]) {
  const filters = process.argv[2].split(',')
  builds = builds.filter(b => {
    // fix the project name === floder name
    // return filters.some(f => b.dest.indexOf(f) > -1)
    return filters.some(f => b.dest.slice(path.resolve(__dirname, '../').length).indexOf(f) > -1)
  })
} else {
  // filter out weex builds by default
  builds = builds.filter(b => {
    return b.dest.indexOf('weex') === -1
  })
}

build(builds)

function build (builds) {
  let built = 0
  const total = builds.length
  const next = () => {
    buildEntry(builds[built]).then(() => {
      built++
      if (built < total) {
        next()
      }
    }).catch(logError)
  }

  next()
}

function buildEntry (config) {
  const isProd = /min\.js$/.test(config.dest)
  return rollup.rollup(config)
    .then(bundle => bundle.generate(config))
    .then(({ code }) => {
      if (isProd) {
        var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
          output: {
            ascii_only: true
          },
          compress: {
            pure_funcs: ['makeMap']
          }
        }).code
        return write(config.dest, minified, true)
      } else {
        return write(config.dest, code)
      }
    })
}

function write (dest, code, zip) {
  return new Promise((resolve, reject) => {
    function report (extra) {
      console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
      resolve()
    }

    fs.writeFile(dest, code, err => {
      if (err) return reject(err)
      if (zip) {
        zlib.gzip(code, (err, zipped) => {
          if (err) return reject(err)
          report(' (gzipped: ' + getSize(zipped) + ')')
        })
      } else {
        report()
      }
    })
  })
}

function getSize (code) {
  return (code.length / 1024).toFixed(2) + 'kb'
}

function logError (e) {
  console.log(e)
}

function blue (str) {
  return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
}


================================================
FILE: build/ci.sh
================================================
set -e
npm test

# report coverage stats for non-PRs
if [[ -z $CI_PULL_REQUEST ]]; then
  cat ./coverage/lcov.info | ./node_modules/.bin/codecov
fi


================================================
FILE: build/config.js
================================================
const path = require('path')
const buble = require('rollup-plugin-buble')
const alias = require('rollup-plugin-alias')
const cjs = require('rollup-plugin-commonjs')
const replace = require('rollup-plugin-replace')
const node = require('rollup-plugin-node-resolve')
const flow = require('rollup-plugin-flow-no-whitespace')
const version = process.env.VERSION || require('../package.json').version
const weexVersion = process.env.WEEX_VERSION || require('../packages/weex-vue-framework/package.json').version
const mpVueVersion = process.env.MP_VUE_VERSION || require('../packages/mpvue/package.json').version

const banner =
  '/*!\n' +
  ' * Vue.js v' + version + '\n' +
  ' * (c) 2014-' + new Date().getFullYear() + ' Evan You\n' +
  ' * Released under the MIT License.\n' +
  ' */'

const { mpBanner, mpLifecycleHooks } = require('../src/platforms/mp/join-code-in-build')

const weexFactoryPlugin = {
  intro () {
    return 'module.exports = function weexFactory (exports, renderer) {'
  },
  outro () {
    return '}'
  }
}

const aliases = require('./alias')
const resolve = p => {
  const base = p.split('/')[0]
  if (aliases[base]) {
    return path.resolve(aliases[base], p.slice(base.length + 1))
  } else {
    return path.resolve(__dirname, '../', p)
  }
}

const builds = {
  // Runtime only (CommonJS). Used by bundlers e.g. Webpack & Browserify
  'web-runtime-cjs': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.common.js'),
    format: 'cjs',
    banner
  },
  // Runtime+compiler CommonJS build (CommonJS)
  'web-full-cjs': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.common.js'),
    format: 'cjs',
    alias: { he: './entity-decoder' },
    banner
  },
  // Runtime only (ES Modules). Used by bundlers that support ES Modules,
  // e.g. Rollup & Webpack 2
  'web-runtime-esm': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.esm.js'),
    format: 'es',
    banner
  },
  // Runtime+compiler CommonJS build (ES Modules)
  'web-full-esm': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.esm.js'),
    format: 'es',
    alias: { he: './entity-decoder' },
    banner
  },
  // runtime-only build (Browser)
  'web-runtime-dev': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.js'),
    format: 'umd',
    env: 'development',
    banner
  },
  // runtime-only production build (Browser)
  'web-runtime-prod': {
    entry: resolve('web/entry-runtime.js'),
    dest: resolve('dist/vue.runtime.min.js'),
    format: 'umd',
    env: 'production',
    banner
  },
  // Runtime+compiler development build (Browser)
  'web-full-dev': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.js'),
    format: 'umd',
    env: 'development',
    alias: { he: './entity-decoder' },
    banner
  },
  // Runtime+compiler production build  (Browser)
  'web-full-prod': {
    entry: resolve('web/entry-runtime-with-compiler.js'),
    dest: resolve('dist/vue.min.js'),
    format: 'umd',
    env: 'production',
    alias: { he: './entity-decoder' },
    banner
  },
  // Web compiler (CommonJS).
  'web-compiler': {
    entry: resolve('web/entry-compiler.js'),
    dest: resolve('packages/vue-template-compiler/build.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-template-compiler/package.json').dependencies)
  },
  // Web server renderer (CommonJS).
  'web-server-renderer': {
    entry: resolve('web/entry-server-renderer.js'),
    dest: resolve('packages/vue-server-renderer/build.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  'web-server-basic-renderer': {
    entry: resolve('web/entry-server-basic-renderer.js'),
    dest: resolve('packages/vue-server-renderer/basic.js'),
    format: 'umd',
    env: 'development',
    moduleName: 'renderVueComponentToString',
    plugins: [node(), cjs()]
  },
  'web-server-renderer-webpack-server-plugin': {
    entry: resolve('server/webpack-plugin/server.js'),
    dest: resolve('packages/vue-server-renderer/server-plugin.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  'web-server-renderer-webpack-client-plugin': {
    entry: resolve('server/webpack-plugin/client.js'),
    dest: resolve('packages/vue-server-renderer/client-plugin.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  },
  // Weex runtime factory
  'weex-factory': {
    weex: true,
    entry: resolve('weex/entry-runtime-factory.js'),
    dest: resolve('packages/weex-vue-framework/factory.js'),
    format: 'cjs',
    plugins: [weexFactoryPlugin]
  },
  // Weex runtime framework (CommonJS).
  'weex-framework': {
    weex: true,
    entry: resolve('weex/entry-framework.js'),
    dest: resolve('packages/weex-vue-framework/index.js'),
    format: 'cjs'
  },
  // Weex compiler (CommonJS). Used by Weex's Webpack loader.
  'weex-compiler': {
    weex: true,
    entry: resolve('weex/entry-compiler.js'),
    dest: resolve('packages/weex-template-compiler/build.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/weex-template-compiler/package.json').dependencies)
  },
  // Runtime only (ES Modules). Used by bundlers that support ES Modules,
  // e.g. Rollup & Webpack 2
  'mpvue': {
    mp: true,
    entry: resolve('mp/entry-runtime.js'),
    dest: resolve('packages/mpvue/index.js'),
    format: 'umd',
    env: 'production',
    banner: mpBanner
  },
  // MP compiler (CommonJS). Used by mpvue's Webpack loader.
  'mpvue-template-compiler': {
    mp: true,
    entry: resolve('mp/entry-compiler.js'),
    dest: resolve('packages/mpvue-template-compiler/build.js'),
    format: 'cjs',
    external: Object.keys(require('../packages/mpvue-template-compiler/package.json').dependencies)
  }
}

function genConfig (opts) {
  const config = {
    entry: opts.entry,
    dest: opts.dest,
    external: opts.external,
    format: opts.format,
    banner: opts.banner,
    moduleName: opts.moduleName || 'Vue',
    plugins: [
      replace({
        __WEEX__: !!opts.weex,
        __MPVUE__: !!opts.mp,
        __WEEX_VERSION__: weexVersion,
        __MPVUE_VERSION__: mpVueVersion,
        __VERSION__: version
      }),
      flow(),
      buble(),
      alias(Object.assign({}, aliases, opts.alias))
    ].concat(opts.plugins || [])
  }

  if (opts.env) {
    config.plugins.push(replace({
      'process.env.NODE_ENV': JSON.stringify(opts.env)
    }))
  }

  // hack fix MP LIFECYCLE_HOOKS
  if (opts.mp) {
    config.plugins.push(replace({
      "'deactivated'\n]": `'deactivated', ${mpLifecycleHooks}\n]`
    }))
    config.plugins.push(replace({
      'inBrowser && window.navigator.userAgent.toLowerCase': `['mpvue-runtime'].join`
    }))
  }

  return config
}

if (process.env.TARGET) {
  module.exports = genConfig(builds[process.env.TARGET])
} else {
  exports.getBuild = name => genConfig(builds[name])
  exports.getAllBuilds = () => Object.keys(builds).map(name => genConfig(builds[name]))
}


================================================
FILE: build/gen-release-note.js
================================================
const version = process.argv[2] || process.env.VERSION
const cc = require('conventional-changelog')
const file = `./RELEASE_NOTE_${version}.md`
const fileStream = require('fs').createWriteStream(file)

cc({
  preset: 'angular',
  pkg: {
    transform (pkg) {
      pkg.version = `v${version}`
      return pkg
    }
  }
}).pipe(fileStream).on('close', () => {
  console.log(`Generated release note at ${file}`)
})


================================================
FILE: build/get-weex-version.js
================================================
var coreVersion = require('../package.json').version
var weexVersion = require('../packages/weex-vue-framework/package.json').version
var weexBaseVersion = weexVersion.match(/^[\d.]+/)[0]
var weexSubVersion = Number(weexVersion.match(/-weex\.(\d+)$/)[1])

if (weexBaseVersion === coreVersion) {
  // same core version, increment sub version
  weexSubVersion++
} else {
  // new core version, reset sub version
  weexBaseVersion = coreVersion
  weexSubVersion = 1
}

if (process.argv[2] === '-c') {
  console.log(weexVersion)
} else {
  console.log(weexBaseVersion + '-weex.' + weexSubVersion)
}

module.exports = {
  base: weexBaseVersion,
  sub: weexSubVersion
}


================================================
FILE: build/git-hooks/commit-msg
================================================
#!/usr/bin/env bash

# Validate commit log
commit_regex='^Merge.+|(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?: .{1,50}'

if ! grep -iqE "$commit_regex" "$1"; then
    echo
    echo "  Error: proper commit message format is required for automated changelog generation."
    echo
    echo "  - Use \`npm run commit\` to interactively generate a commit message."
    echo "  - See .github/COMMIT_CONVENTION.md for more details."
    echo
    exit 1
fi


================================================
FILE: build/git-hooks/pre-commit
================================================
#!/usr/bin/env bash

files_to_lint=$(git diff --cached --name-only --diff-filter=ACM | grep '\.js$')

if [ -n "$files_to_lint" ]; then
  NODE_ENV=production eslint --quiet $files_to_lint
fi


================================================
FILE: build/install-hooks.js
================================================
const { test, ln, chmod } = require('shelljs')

if (test('-e', '.git/hooks')) {
  ln('-sf', '../../build/git-hooks/pre-commit', '.git/hooks/pre-commit')
  chmod('+x', '.git/hooks/pre-commit')
  ln('-sf', '../../build/git-hooks/commit-msg', '.git/hooks/commit-msg')
  chmod('+x', '.git/hooks/commit-msg')
}


================================================
FILE: build/release-weex.sh
================================================
set -e
CUR_VERSION=`node build/get-weex-version.js -c`
NEXT_VERSION=`node build/get-weex-version.js`

echo "Current: $CUR_VERSION"
read -p "Enter new version ($NEXT_VERSION): " -n 1 -r
if ! [[ -z $REPLY ]]; then
  NEXT_VERSION=$REPLY
fi

read -p "Releasing weex-vue-framework@$NEXT_VERSION - are you sure? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
  echo "Releasing weex-vue-framework@$NEXT_VERSION ..."
  npm run lint
  npm run flow
  npm run test:weex

  # build
  WEEX_VERSION=$NEXT_VERSION npm run build:weex

  # update package
  cd packages/weex-vue-framework
  npm version $NEXT_VERSION
  npm publish
  cd -

  cd packages/weex-template-compiler
  npm version $NEXT_VERSION
  npm publish
  cd -

  # commit
  git add src/entries/weex*
  git add packages/weex*
  git commit -m "[release] weex-vue-framework@$NEXT_VERSION"
fi


================================================
FILE: build/release.sh
================================================
set -e

if [[ -z $1 ]]; then
  echo "Enter new version: "
  read VERSION
else
  VERSION=$1
fi

read -p "Releasing $VERSION - are you sure? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
  echo "Releasing $VERSION ..."

  if [[ -z $SKIP_TESTS ]]; then
    npm run lint
    npm run flow
    npm run test:cover
    npm run test:e2e
    npm run test:ssr
  fi

  if [[ -z $SKIP_SAUCE ]]; then
    export SAUCE_BUILD_ID=$VERSION:`date +"%s"`
    npm run test:sauce
  fi

  # build
  VERSION=$VERSION npm run build

  # update packages
  cd packages/vue-template-compiler
  npm version $VERSION
  if [[ -z $RELEASE_TAG ]]; then
    npm publish
  else
    npm publish --tag $RELEASE_TAG
  fi
  cd -

  cd packages/vue-server-renderer
  npm version $VERSION
  if [[ -z $RELEASE_TAG ]]; then
    npm publish
  else
    npm publish --tag $RELEASE_TAG
  fi
  cd -

  # commit
  git add -A
  git add -f \
    dist/*.js \
    packages/vue-server-renderer/basic.js \
    packages/vue-server-renderer/build.js \
    packages/vue-server-renderer/server-plugin.js \
    packages/vue-server-renderer/client-plugin.js \
    packages/vue-template-compiler/build.js
  git commit -m "build: build $VERSION"
  npm version $VERSION --message "build: release $VERSION"

  # publish
  git push origin refs/tags/v$VERSION
  git push
  if [[ -z $RELEASE_TAG ]]; then
    npm publish
  else
    npm publish --tag $RELEASE_TAG
  fi
fi


================================================
FILE: circle.yml
================================================
machine:
  node:
    version: 6

test:
  override:
    - bash build/ci.sh


================================================
FILE: dist/README.md
================================================
## Explanation of Build Files

| | UMD | CommonJS | ES Module |
| --- | --- | --- | --- |
| **Full** | vue.js | vue.common.js | vue.esm.js |
| **Runtime-only** | vue.runtime.js | vue.runtime.common.js | vue.runtime.esm.js |
| **Full (production)** | vue.min.js | | |
| **Runtime-only (production)** | vue.runtime.min.js | | |

### Terms

- **Full**: builds that contains both the compiler and the runtime.

- **Compiler**: code that is responsible for compiling template strings into JavaScript render functions.

- **Runtime**: code that is responsible for creating Vue instances, rendering and patching virtual DOM, etc. Basically everything minus the compiler.

- **[UMD](https://github.com/umdjs/umd)**: UMD builds can be used directly in the browser via a `<script>` tag. The default file from Unpkg CDN at [https://unpkg.com/vue](https://unpkg.com/vue) is the Runtime + Compiler UMD build (`vue.js`).

- **[CommonJS](http://wiki.commonjs.org/wiki/Modules/1.1)**: CommonJS builds are intended for use with older bundlers like [browserify](http://browserify.org/) or [webpack 1](https://webpack.github.io). The default file for these bundlers (`pkg.main`) is the Runtime only CommonJS build (`vue.runtime.common.js`).

- **[ES Module](http://exploringjs.com/es6/ch_modules.html)**: ES module builds are intended for use with modern bundlers like [webpack 2](https://webpack.js.org) or [rollup](http://rollupjs.org/). The default file for these bundlers (`pkg.module`) is the Runtime only ES Module build (`vue.runtime.esm.js`).

### Runtime + Compiler vs. Runtime-only

If you need to compile templates on the fly (e.g. passing a string to the `template` option, or mounting to an element using its in-DOM HTML as the template), you will need the compiler and thus the full build.

When using `vue-loader` or `vueify`, templates inside `*.vue` files are compiled into JavaScript at build time. You don't really need the compiler in the final bundle, and can therefore use the runtime-only build.

Since the runtime-only builds are roughly 30% lighter-weight than their full-build counterparts, you should use it whenever you can. If you wish to use the full build instead, you need to configure an alias in your bundler.

#### Webpack

``` js
module.exports = {
  // ...
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js' // 'vue/dist/vue.common.js' for webpack 1
    }
  }
}
````

#### Rollup

``` js
const alias = require('rollup-plugin-alias')

rollup({
  // ...
  plugins: [
    alias({
      'vue': 'vue/dist/vue.esm.js'
    })
  ]
})
```

#### Browserify

Add to your project's `package.json`:

``` js
{
  // ...
  "browser": {
    "vue": "vue/dist/vue.common.js"
  }
}
```

### Development vs. Production Mode

Development/production modes are hard-coded for the UMD builds: the un-minified files are for development, and the minified files are for production.

CommonJS and ES Module builds are intended for bundlers, therefore we don't provide minified versions for them. You will be responsible for minifying the final bundle yourself.

CommonJS and ES Module builds also preserve raw checks for `process.env.NODE_ENV` to determine the mode they should run in. You should use appropriate bundler configurations to replace these environment variables in order to control which mode Vue will run in. Replacing `process.env.NODE_ENV` with string literals also allows minifiers like UglifyJS to completely drop the development-only code blocks, reducing final file size.

#### Webpack

Use Webpack's [DefinePlugin](https://webpack.js.org/plugins/define-plugin/):

``` js
var webpack = require('webpack')

module.exports = {
  // ...
  plugins: [
    // ...
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: JSON.stringify('production')
      }
    })
  ]
}
```

#### Rollup

Use [rollup-plugin-replace](https://github.com/rollup/rollup-plugin-replace):

``` js
const replace = require('rollup-plugin-replace')

rollup({
  // ...
  plugins: [
    replace({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ]
}).then(...)
```

#### Browserify

Apply a global [envify](https://github.com/hughsk/envify) transform to your bundle.

``` bash
NODE_ENV=production browserify -g envify -e main.js | uglifyjs -c -m > build.js
```


================================================
FILE: examples/commits/app.js
================================================
var apiURL = 'https://api.github.com/repos/vuejs/vue/commits?per_page=3&sha='

/**
 * Actual demo
 */

var demo = new Vue({

  el: '#demo',

  data: {
    branches: ['master', 'dev'],
    currentBranch: 'master',
    commits: null
  },

  created: function () {
    this.fetchData()
  },

  watch: {
    currentBranch: 'fetchData'
  },

  filters: {
    truncate: function (v) {
      var newline = v.indexOf('\n')
      return newline > 0 ? v.slice(0, newline) : v
    },
    formatDate: function (v) {
      return v.replace(/T|Z/g, ' ')
    }
  },

  methods: {
    fetchData: function () {
      var xhr = new XMLHttpRequest()
      var self = this
      xhr.open('GET', apiURL + self.currentBranch)
      xhr.onload = function () {
        self.commits = JSON.parse(xhr.responseText)
        console.log(self.commits[0].html_url)
      }
      xhr.send()
    }
  }
})


================================================
FILE: examples/commits/index.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <title>Vue.js github commits example</title>
    <style>
      #demo {
        font-family: 'Helvetica', Arial, sans-serif;
      }
      a {
        text-decoration: none;
        color: #f66;
      }
      li {
        line-height: 1.5em;
        margin-bottom: 20px;
      }
      .author, .date {
        font-weight: bold;
      }
    </style>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
  </head>
  <body>
    <div id="demo">
      <h1>Latest Vue.js Commits</h1>
      <template v-for="branch in branches">
        <input type="radio"
          :id="branch"
          :value="branch"
          name="branch"
          v-model="currentBranch">
        <label :for="branch">{{ branch }}</label>
      </template>
      <p>vuejs/vue@{{ currentBranch }}</p>
      <ul>
        <li v-for="record in commits">
          <a :href="record.html_url" target="_blank" class="commit">{{ record.sha.slice(0, 7) }}</a>
          - <span class="message">{{ record.commit.message | truncate }}</span><br>
          by <span class="author"><a :href="record.author.html_url" target="_blank">{{ record.commit.author.name }}</a></span>
          at <span class="date">{{ record.commit.author.date | formatDate }}</span>
        </li>
      </ul>
    </div>
    <script src="app.js"></script>
  </body>
</html>


================================================
FILE: examples/elastic-header/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Vue.js elastic header example</title>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    <script src="http://dynamicsjs.com/lib/dynamics.js"></script>
    <link rel="stylesheet" href="style.css">
    <!-- template for the component -->
    <script type="text/x-template" id="header-view-template">
      <div class="draggable-header-view"
        @mousedown="startDrag" @touchstart="startDrag"
        @mousemove="onDrag" @touchmove="onDrag"
        @mouseup="stopDrag" @touchend="stopDrag" @mouseleave="stopDrag">
        <svg class="bg" width="320" height="560">
          <path :d="headerPath" fill="#3F51B5"></path>
        </svg>
        <div class="header">
          <slot name="header"></slot>
        </div>
        <div class="content" :style="contentPosition">
          <slot name="content"></slot>
        </div>
      </div>
    </script>
  </head>
  <body>

    <div id="app" @touchmove.prevent>
      <draggable-header-view>
        <template slot="header">
          <h1>Elastic Draggable SVG Header</h1>
          <p>with <a href="https://vuejs.org">Vue.js</a> + <a href="http://dynamicsjs.com">dynamics.js</a></p>
        </template>
        <template slot="content">
          <p>Note this is just an effect demo - there are of course many additional details if you want to use this in production, e.g. handling responsive sizes, reload threshold and content scrolling. Those are out of scope for this quick little hack. However, the idea is that you can hide them as internal details of a Vue.js component and expose a simple Web-Component-like interface.</p>
        </template>
      </draggable-header-view>
    </div>

    <script>
    Vue.component('draggable-header-view', {
      template: '#header-view-template',
      data: function () {
        return {
          dragging: false,
          // quadratic bezier control point
          c: { x: 160, y: 160 },
          // record drag start point
          start: { x: 0, y: 0 }
        }
      },
      computed: {
        headerPath: function () {
          return 'M0,0 L320,0 320,160' +
            'Q' + this.c.x + ',' + this.c.y +
            ' 0,160'
        },
        contentPosition: function () {
          var dy = this.c.y - 160
          var dampen = dy > 0 ? 2 : 4
          return {
            transform: 'translate3d(0,' + dy / dampen + 'px,0)'
          }
        }
      },
      methods: {
        startDrag: function (e) {
          e = e.changedTouches ? e.changedTouches[0] : e
          this.dragging = true
          this.start.x = e.pageX
          this.start.y = e.pageY
        },
        onDrag: function (e) {
          e = e.changedTouches ? e.changedTouches[0] : e
          if (this.dragging) {
            this.c.x = 160 + (e.pageX - this.start.x)
            // dampen vertical drag by a factor
            var dy = e.pageY - this.start.y
            var dampen = dy > 0 ? 1.5 : 4
            this.c.y = 160 + dy / dampen
          }
        },
        stopDrag: function () {
          if (this.dragging) {
            this.dragging = false
            dynamics.animate(this.c, {
              x: 160,
              y: 160
            }, {
              type: dynamics.spring,
              duration: 700,
              friction: 280
            })
          }
        }
      }
    })

    new Vue({ el: '#app' })
    </script>
  </body>
</html>


================================================
FILE: examples/elastic-header/style.css
================================================
h1 {
  font-weight: 300;
  font-size: 1.8em;
  margin-top: 0;
}
a {
  color: #fff;
}
.draggable-header-view {
  background-color: #fff;
  box-shadow: 0 4px 16px rgba(0,0,0,.15);
  width: 320px;
  height: 560px;
  overflow: hidden;
  margin: 30px auto;
  position: relative;
  font-family: 'Roboto', Helvetica, Arial, sans-serif;
  color: #fff;
  font-size: 14px;
  font-weight: 300;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.draggable-header-view .bg {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
}
.draggable-header-view .header, .draggable-header-view .content {
  position: relative;
  z-index: 1;
  padding: 30px;
  box-sizing: border-box;
}
.draggable-header-view .header {
  height: 160px;
}
.draggable-header-view .content {
  color: #333;
  line-height: 1.5em;
}


================================================
FILE: examples/firebase/app.js
================================================
var emailRE = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

// Setup Firebase
var config = {
  apiKey: "AIzaSyAi_yuJciPXLFr_PYPeU3eTvtXf8jbJ8zw",
  authDomain: "vue-demo-537e6.firebaseapp.com",
  databaseURL: "https://vue-demo-537e6.firebaseio.com"
}
firebase.initializeApp(config)

var usersRef = firebase.database().ref('users')

// create Vue app
var app = new Vue({
  // element to mount to
  el: '#app',
  // initial data
  data: {
    newUser: {
      name: '',
      email: ''
    }
  },
  // firebase binding
  // https://github.com/vuejs/vuefire
  firebase: {
    users: usersRef
  },
  // computed property for form validation state
  computed: {
    validation: function () {
      return {
        name: !!this.newUser.name.trim(),
        email: emailRE.test(this.newUser.email)
      }
    },
    isValid: function () {
      var validation = this.validation
      return Object.keys(validation).every(function (key) {
        return validation[key]
      })
    }
  },
  // methods
  methods: {
    addUser: function () {
      if (this.isValid) {
        usersRef.push(this.newUser)
        this.newUser.name = ''
        this.newUser.email = ''
      }
    },
    removeUser: function (user) {
      usersRef.child(user['.key']).remove()
    }
  }
})


================================================
FILE: examples/firebase/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Vue.js firebase + validation example</title>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style.css">
    <!-- Vue -->
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    <!-- Firebase -->
    <script src="https://www.gstatic.com/firebasejs/3.4.0/firebase.js"></script>
    <!-- VueFire -->
    <script src="https://unpkg.com/vuefire@1.3.0"></script>
  </head>
  <body>
    <div id="app">
      <ul is="transition-group">
        <li v-for="user in users" class="user" :key="user['.key']">
          <span>{{user.name}} - {{user.email}}</span>
          <button v-on:click="removeUser(user)">X</button>
        </li>
      </ul>
      <form id="form" v-on:submit.prevent="addUser">
        <input v-model="newUser.name">
        <input v-model="newUser.email">
        <input type="submit" value="Add User">
      </form>
      <ul class="errors">
        <li v-show="!validation.name">Name cannot be empty.</li>
        <li v-show="!validation.email">Please provide a valid email address.</li>
      </ul>
    </div>
    <script src="app.js"></script>
  </body>
</html>


================================================
FILE: examples/firebase/style.css
================================================
body {
  font-family: Helvetica, Arial, sans-serif;
}

ul {
  padding: 0;
}

.user {
  height: 30px;
  line-height: 30px;
  padding: 10px;
  border-top: 1px solid #eee;
  overflow: hidden;
  transition: all .25s ease;
}

.user:last-child {
  border-bottom: 1px solid #eee;
}

.v-enter, .v-leave-to {
  height: 0;
  padding-top: 0;
  padding-bottom: 0;
  border-top-width: 0;
  border-bottom-width: 0;
}

.errors {
  color: #f00;
}


================================================
FILE: examples/grid/grid.js
================================================
// register the grid component
Vue.component('demo-grid', {
  template: '#grid-template',
  replace: true,
  props: {
    data: Array,
    columns: Array,
    filterKey: String
  },
  data: function () {
    var sortOrders = {}
    this.columns.forEach(function (key) {
      sortOrders[key] = 1
    })
    return {
      sortKey: '',
      sortOrders: sortOrders
    }
  },
  computed: {
    filteredData: function () {
      var sortKey = this.sortKey
      var filterKey = this.filterKey && this.filterKey.toLowerCase()
      var order = this.sortOrders[sortKey] || 1
      var data = this.data
      if (filterKey) {
        data = data.filter(function (row) {
          return Object.keys(row).some(function (key) {
            return String(row[key]).toLowerCase().indexOf(filterKey) > -1
          })
        })
      }
      if (sortKey) {
        data = data.slice().sort(function (a, b) {
          a = a[sortKey]
          b = b[sortKey]
          return (a === b ? 0 : a > b ? 1 : -1) * order
        })
      }
      return data
    }
  },
  filters: {
    capitalize: function (str) {
      return str.charAt(0).toUpperCase() + str.slice(1)
    }
  },
  methods: {
    sortBy: function (key) {
      this.sortKey = key
      this.sortOrders[key] = this.sortOrders[key] * -1
    }
  }
})

// bootstrap the demo
var demo = new Vue({
  el: '#demo',
  data: {
    searchQuery: '',
    gridColumns: ['name', 'power'],
    gridData: [
      { name: 'Chuck Norris', power: Infinity },
      { name: 'Bruce Lee', power: 9000 },
      { name: 'Jackie Chan', power: 7000 },
      { name: 'Jet Li', power: 8000 }
    ]
  }
})


================================================
FILE: examples/grid/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js grid component example</title>
    <link rel="stylesheet" href="style.css">
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    </head>
  <body>

    <!-- component template -->
    <script type="text/x-template" id="grid-template">
      <table v-if="filteredData.length">
        <thead>
          <tr>
            <th v-for="key in columns"
              @click="sortBy(key)"
              :class="{ active: sortKey == key }">
              {{ key | capitalize }}
              <span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
              </span>
            </th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="entry in filteredData">
            <td v-for="key in columns">
              {{entry[key]}}
            </td>
          </tr>
        </tbody>
      </table>
      <p v-else>No matches found.</p>
    </script>

    <!-- demo root element -->
    <div id="demo">
      <form id="search">
        Search <input name="query" v-model="searchQuery">
      </form>
      <demo-grid
        :data="gridData"
        :columns="gridColumns"
        :filter-key="searchQuery">
      </demo-grid>
    </div>

    <script src="grid.js"></script>

  </body>
</html>


================================================
FILE: examples/grid/style.css
================================================
body {
  font-family: Helvetica Neue, Arial, sans-serif;
  font-size: 14px;
  color: #444;
}

table {
  border: 2px solid #42b983;
  border-radius: 3px;
  background-color: #fff;
}

th {
  background-color: #42b983;
  color: rgba(255,255,255,0.66);
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

td {
  background-color: #f9f9f9;
}

th, td {
  min-width: 120px;
  padding: 10px 20px;
}

th.active {
  color: #fff;
}

th.active .arrow {
  opacity: 1;
}

.arrow {
  display: inline-block;
  vertical-align: middle;
  width: 0;
  height: 0;
  margin-left: 5px;
  opacity: 0.66;
}

.arrow.asc {
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-bottom: 4px solid #fff;
}

.arrow.dsc {
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid #fff;
}


================================================
FILE: examples/markdown/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js markdown editor example</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://unpkg.com/marked@0.3.6"></script>
    <script src="https://unpkg.com/lodash@4.16.0"></script>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
  </head>
  <body>

    <div id="editor">
      <textarea :value="input" @input="update"></textarea>
      <div v-html="compiledMarkdown"></div>
    </div>

    <script>
      new Vue({
        el: '#editor',
        data: {
          input: '# hello'
        },
        computed: {
          compiledMarkdown: function () {
            return marked(this.input, { sanitize: true })
          }
        },
        methods: {
          update: _.debounce(function (e) {
            this.input = e.target.value
          }, 300)
        }
      })
    </script>

  </body>
</html>


================================================
FILE: examples/markdown/style.css
================================================
html, body, #editor {
  margin: 0;
  height: 100%;
  font-family: 'Helvetica Neue', Arial, sans-serif;
  color: #333;
}

textarea, #editor div {
  display: inline-block;
  width: 49%;
  height: 100%;
  vertical-align: top;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  padding: 0 20px;
}

textarea {
  border: none;
  border-right: 1px solid #ccc;
  resize: none;
  outline: none;
  background-color: #f6f6f6;
  font-size: 14px;
  font-family: 'Monaco', courier, monospace;
  padding: 20px;
}

code {
  color: #f66;
}

================================================
FILE: examples/modal/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js modal component example</title>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <!-- template for the modal component -->
    <script type="text/x-template" id="modal-template">
      <transition name="modal">
        <div class="modal-mask">
          <div class="modal-wrapper">
            <div class="modal-container">

              <div class="modal-header">
                <slot name="header">
                  default header
                </slot>
              </div>

              <div class="modal-body">
                <slot name="body">
                  default body
                </slot>
              </div>

              <div class="modal-footer">
                <slot name="footer">
                  default footer
                  <button class="modal-default-button" @click="$emit('close')">
                    OK
                  </button>
                </slot>
              </div>
            </div>
          </div>
        </div>
      </transition>
    </script>

    <!-- app -->
    <div id="app">
      <button id="show-modal" @click="showModal = true">Show Modal</button>
      <!-- use the modal component, pass in the prop -->
      <modal v-if="showModal" @close="showModal = false">
        <!--
          you can use custom content here to overwrite
          default content
        -->
        <h3 slot="header">custom header</h3>
      </modal>
    </div>

    <script>
      // register modal component
      Vue.component('modal', {
        template: '#modal-template'
      })

      // start app
      new Vue({
        el: '#app',
        data: {
          showModal: false
        }
      })
    </script>
  </body>
</html>


================================================
FILE: examples/modal/style.css
================================================
.modal-mask {
  position: fixed;
  z-index: 9998;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, .5);
  display: table;
  transition: opacity .3s ease;
}

.modal-wrapper {
  display: table-cell;
  vertical-align: middle;
}

.modal-container {
  width: 300px;
  margin: 0px auto;
  padding: 20px 30px;
  background-color: #fff;
  border-radius: 2px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, .33);
  transition: all .3s ease;
  font-family: Helvetica, Arial, sans-serif;
}

.modal-header h3 {
  margin-top: 0;
  color: #42b983;
}

.modal-body {
  margin: 20px 0;
}

.modal-default-button {
  float: right;
}

/*
 * The following styles are auto-applied to elements with
 * transition="modal" when their visibility is toggled
 * by Vue.js.
 *
 * You can easily play with the modal transition by editing
 * these styles.
 */

.modal-enter {
  opacity: 0;
}

.modal-leave-to {
  opacity: 0;
}

.modal-enter .modal-container,
.modal-leave-to .modal-container {
  -webkit-transform: scale(1.1);
  transform: scale(1.1);
}


================================================
FILE: examples/move-animations/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Move Animations</title>
    <style>
      .container {
        position: relative;
        padding: 0;
      }
      .item {
        width: 100%;
        height: 30px;
        background-color: #f3f3f3;
        border: 1px solid #666;
        box-sizing: border-box;
      }
      /* 1. declare transition */
      .fade-move, .fade-enter-active, .fade-leave-active {
        transition: all .5s cubic-bezier(.55,0,.1,1);
      }
      /* 2. declare enter from and leave to state */
      .fade-enter, .fade-leave-to {
        opacity: 0;
        transform: scaleY(0.01) translate(30px, 0);
      }
      /* 3. ensure leaving items are taken out of layout flow so that moving
            animations can be calculated correctly. */
      .fade-leave-active {
        position: absolute;
      }
    </style>
    <script src="https://cdn.jsdelivr.net/lodash/4.3.0/lodash.min.js"></script>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
  </head>
  <body>
    <div id="el">
      <button @click="insert">insert at random index</button>
      <button @click="reset">reset</button>
      <button @click="shuffle">shuffle</button>
      <transition-group tag="ul" name="fade" class="container">
        <item v-for="item in items"
          class="item"
          :msg="item"
          :key="item"
          @rm="remove(item)">
        </item>
      </transition-group>
    </div>

    <script>
      var items = [1, 2, 3, 4, 5]
      var id = items.length + 1

      var vm = new Vue({
        el: '#el',
        data: {
          items: items
        },
        components: {
          item: {
            props: ['msg'],
            template: `<div>{{ msg }} <button @click="$emit('rm')">x</button></div>`
          }
        },
        methods: {
          insert () {
            var i = Math.round(Math.random() * this.items.length)
            this.items.splice(i, 0, id++)
          },
          reset () {
            this.items = [1, 2, 3, 4, 5]
          },
          shuffle () {
            this.items = _.shuffle(this.items)
          },
          remove (item) {
            var i = this.items.indexOf(item)
            if (i > -1) {
              this.items.splice(i, 1)
            }
          }
        }
      })
    </script>
  </body>
</html>


================================================
FILE: examples/select2/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js wrapper component example (jquery plugin: select2)</title>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    <script src="https://unpkg.com/jquery"></script>
    <script src="https://unpkg.com/select2@4.0.3"></script>
    <link href="https://unpkg.com/select2@4.0.3/dist/css/select2.min.css" rel="stylesheet">
    <style>
      html, body {
        font: 13px/18px sans-serif;
      }
      select {
        min-width: 300px;
      }
    </style>
  </head>
  <body>

    <div id="el">
    </div>

    <!-- using string template here to work around HTML <option> placement restriction -->
    <script type="text/x-template" id="demo-template">
      <div>
        <p>Selected: {{ selected }}</p>
        <select2 :options="options" v-model="selected">
          <option disabled value="0">Select one</option>
        </select2>
      </div>
    </script>

    <script type="text/x-template" id="select2-template">
      <select>
        <slot></slot>
      </select>
    </script>

    <script>
    Vue.component('select2', {
      props: ['options', 'value'],
      template: '#select2-template',
      mounted: function () {
        var vm = this
        $(this.$el)
          .val(this.value)
          // init select2
          .select2({ data: this.options })
          // emit event on change.
          .on('change', function () {
            vm.$emit('input', this.value)
          })
      },
      watch: {
        value: function (value) {
          // update value
          $(this.$el).val(value).trigger('change')
        },
        options: function (options) {
          // update options
          $(this.$el).select2({ data: options })
        }
      },
      destroyed: function () {
        $(this.$el).off().select2('destroy')
      }
    })

    var vm = new Vue({
      el: '#el',
      template: '#demo-template',
      data: {
        selected: 0,
        options: [
          { id: 1, text: 'Hello' },
          { id: 2, text: 'World' }
        ]
      }
    })
    </script>
  </body>
</html>


================================================
FILE: examples/svg/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js SVG graph example</title>
    <link rel="stylesheet" href="style.css">
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    <script src="https://unpkg.com/marky/dist/marky.min.js"></script>
  </head>
  <body>

    <!-- template for the polygraph component. -->
    <script type="text/x-template" id="polygraph-template">
      <g>
        <polygon :points="points"></polygon>
        <circle cx="100" cy="100" r="80"></circle>
        <axis-label
          v-for="(stat, index) in stats"
          :stat="stat"
          :index="index"
          :total="stats.length">
        </axis-label>
      </g>
    </script>

    <!-- template for the axis label component. -->
    <script type="text/x-template" id="axis-label-template">
      <text :x="point.x" :y="point.y">{{stat.label}}</text>
    </script>

    <!-- demo root element -->
    <div id="demo">
      <!-- Use the component -->
      <svg width="200" height="200">
        <polygraph :stats="stats"></polygraph>
      </svg>
      <!-- controls -->
      <div v-for="stat in stats">
        <label>{{stat.label}}</label>
        <input type="range" v-model="stat.value" min="0" max="100">
        <span>{{stat.value}}</span>
        <button @click="remove(stat)" class="remove">X</button>
      </div>
      <form id="add">
        <input name="newlabel" v-model="newLabel">
        <button @click="add">Add a Stat</button>
      </form>
      <pre id="raw">{{ stats }}</pre>
    </div>

    <p style="font-size:12px">* input[type="range"] requires IE10 or above.</p>

    <script src="svg.js"></script>

  </body>
</html>


================================================
FILE: examples/svg/style.css
================================================
body {
    font-family: Helvetica Neue, Arial, sans-serif;
}

polygon {
    fill: #42b983;
    opacity: .75;
}

circle {
    fill: transparent;
    stroke: #999;
}

text {
    font-family: Helvetica Neue, Arial, sans-serif;
    font-size: 10px;
    fill: #666;
}

label {
    display: inline-block;
    margin-left: 10px;
    width: 20px;
}

#raw {
    position: absolute;
    top: 0;
    left: 300px;
}

================================================
FILE: examples/svg/svg.js
================================================
// The raw data to observe
var stats = [
  { label: 'A', value: 100 },
  { label: 'B', value: 100 },
  { label: 'C', value: 100 },
  { label: 'D', value: 100 },
  { label: 'E', value: 100 },
  { label: 'F', value: 100 }
]

// A resusable polygon graph component
Vue.component('polygraph', {
  props: ['stats'],
  template: '#polygraph-template',
  computed: {
    // a computed property for the polygon's points
    points: function () {
      var total = this.stats.length
      return this.stats.map(function (stat, i) {
        var point = valueToPoint(stat.value, i, total)
        return point.x + ',' + point.y
      }).join(' ')
    }
  },
  components: {
    // a sub component for the labels
    'axis-label': {
      props: {
        stat: Object,
        index: Number,
        total: Number
      },
      template: '#axis-label-template',
      computed: {
        point: function () {
          return valueToPoint(
            +this.stat.value + 10,
            this.index,
            this.total
          )
        }
      }
    }
  }
})

// math helper...
function valueToPoint (value, index, total) {
  var x     = 0
  var y     = -value * 0.8
  var angle = Math.PI * 2 / total * index
  var cos   = Math.cos(angle)
  var sin   = Math.sin(angle)
  var tx    = x * cos - y * sin + 100
  var ty    = x * sin + y * cos + 100
  return {
    x: tx,
    y: ty
  }
}

// bootstrap the demo
new Vue({
  el: '#demo',
  data: {
    newLabel: '',
    stats: stats
  },
  methods: {
    add: function (e) {
      e.preventDefault()
      if (!this.newLabel) return
      this.stats.push({
        label: this.newLabel,
        value: 100
      })
      this.newLabel = ''
    },
    remove: function (stat) {
      if (this.stats.length > 3) {
        this.stats.splice(this.stats.indexOf(stat), 1)
      } else {
        alert('Can\'t delete more!')
      }
    }
  }
})


================================================
FILE: examples/todomvc/app.js
================================================
// Full spec-compliant TodoMVC with localStorage persistence
// and hash-based routing in ~150 lines.

// localStorage persistence
var STORAGE_KEY = 'todos-vuejs-2.0'
var todoStorage = {
  fetch: function () {
    var todos = JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]')
    todos.forEach(function (todo, index) {
      todo.id = index
    })
    todoStorage.uid = todos.length
    return todos
  },
  save: function (todos) {
    localStorage.setItem(STORAGE_KEY, JSON.stringify(todos))
  }
}

// visibility filters
var filters = {
  all: function (todos) {
    return todos
  },
  active: function (todos) {
    return todos.filter(function (todo) {
      return !todo.completed
    })
  },
  completed: function (todos) {
    return todos.filter(function (todo) {
      return todo.completed
    })
  }
}

// app Vue instance
var app = new Vue({
  // app initial state
  data: {
    todos: todoStorage.fetch(),
    newTodo: '',
    editedTodo: null,
    visibility: 'all'
  },

  // watch todos change for localStorage persistence
  watch: {
    todos: {
      handler: function (todos) {
        todoStorage.save(todos)
      },
      deep: true
    }
  },

  // computed properties
  // https://vuejs.org/guide/computed.html
  computed: {
    filteredTodos: function () {
      return filters[this.visibility](this.todos)
    },
    remaining: function () {
      return filters.active(this.todos).length
    },
    allDone: {
      get: function () {
        return this.remaining === 0
      },
      set: function (value) {
        this.todos.forEach(function (todo) {
          todo.completed = value
        })
      }
    }
  },

  filters: {
    pluralize: function (n) {
      return n === 1 ? 'item' : 'items'
    }
  },

  // methods that implement data logic.
  // note there's no DOM manipulation here at all.
  methods: {
    addTodo: function () {
      var value = this.newTodo && this.newTodo.trim()
      if (!value) {
        return
      }
      this.todos.push({
        id: todoStorage.uid++,
        title: value,
        completed: false
      })
      this.newTodo = ''
    },

    removeTodo: function (todo) {
      this.todos.splice(this.todos.indexOf(todo), 1)
    },

    editTodo: function (todo) {
      this.beforeEditCache = todo.title
      this.editedTodo = todo
    },

    doneEdit: function (todo) {
      if (!this.editedTodo) {
        return
      }
      this.editedTodo = null
      todo.title = todo.title.trim()
      if (!todo.title) {
        this.removeTodo(todo)
      }
    },

    cancelEdit: function (todo) {
      this.editedTodo = null
      todo.title = this.beforeEditCache
    },

    removeCompleted: function () {
      this.todos = filters.active(this.todos)
    }
  },

  // a custom directive to wait for the DOM to be updated
  // before focusing on the input field.
  // https://vuejs.org/guide/custom-directive.html
  directives: {
    'todo-focus': function (el, binding) {
      if (binding.value) {
        el.focus()
      }
    }
  }
})

// handle routing
function onHashChange () {
  var visibility = window.location.hash.replace(/#\/?/, '')
  if (filters[visibility]) {
    app.visibility = visibility
  } else {
    window.location.hash = ''
    app.visibility = 'all'
  }
}

window.addEventListener('hashchange', onHashChange)
onHashChange()

// mount
app.$mount('.todoapp')


================================================
FILE: examples/todomvc/index.html
================================================
<!doctype html>
<html data-framework="vue">
  <head>
    <meta charset="utf-8">
    <title>Vue.js • TodoMVC</title>
    <link rel="stylesheet" href="https://unpkg.com/todomvc-app-css@2.0.4/index.css">
    <script src="https://unpkg.com/director@1.2.8/build/director.js"></script>
    <style>[v-cloak] { display: none; }</style>
  </head>
  <body>
    <section class="todoapp">
      <header class="header">
        <h1>todos</h1>
        <input class="new-todo"
          autofocus autocomplete="off"
          placeholder="What needs to be done?"
          v-model="newTodo"
          @keyup.enter="addTodo">
      </header>
      <section class="main" v-show="todos.length" v-cloak>
        <input class="toggle-all" type="checkbox" v-model="allDone">
        <ul class="todo-list">
          <li v-for="todo in filteredTodos"
            class="todo"
            :key="todo.id"
            :class="{ completed: todo.completed, editing: todo == editedTodo }">
            <div class="view">
              <input class="toggle" type="checkbox" v-model="todo.completed">
              <label @dblclick="editTodo(todo)">{{ todo.title }}</label>
              <button class="destroy" @click="removeTodo(todo)"></button>
            </div>
            <input class="edit" type="text"
              v-model="todo.title"
              v-todo-focus="todo == editedTodo"
              @blur="doneEdit(todo)"
              @keyup.enter="doneEdit(todo)"
              @keyup.esc="cancelEdit(todo)">
          </li>
        </ul>
      </section>
      <footer class="footer" v-show="todos.length" v-cloak>
        <span class="todo-count">
          <strong>{{ remaining }}</strong> {{ remaining | pluralize }} left
        </span>
        <ul class="filters">
          <li><a href="#/all" :class="{ selected: visibility == 'all' }">All</a></li>
          <li><a href="#/active" :class="{ selected: visibility == 'active' }">Active</a></li>
          <li><a href="#/completed" :class="{ selected: visibility == 'completed' }">Completed</a></li>
        </ul>
        <button class="clear-completed" @click="removeCompleted" v-show="todos.length > remaining">
          Clear completed
        </button>
      </footer>
    </section>
    <footer class="info">
      <p>Double-click to edit a todo</p>
      <p>Written by <a href="http://evanyou.me">Evan You</a></p>
      <p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
    </footer>

    <script>
    // for testing
    if (navigator.userAgent.indexOf('PhantomJS') > -1) localStorage.clear()
    </script>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
    <script src="app.js"></script>
  </body>
</html>


================================================
FILE: examples/todomvc/readme.md
================================================
# Vue.js TodoMVC Example

> Vue.js is a library for building interactive web interfaces. 
It provides data-driven, nestable view components with a simple and flexible API.

> _[Vue.js - vuejs.org](https://vuejs.org)_

## Learning Vue.js
The [Vue.js website](https://vuejs.org/) is a great resource to get started.

Here are some links you may find helpful:

* [Official Guide](https://vuejs.org/guide/)
* [API Reference](https://vuejs.org/api/)
* [Examples](https://vuejs.org/examples/)

Get help from other Vue.js users:

* [Vue.js official forum](http://forum.vuejs.org)
* [Vue.js on Twitter](https://twitter.com/vuejs)
* [Vue.js on Gitter](https://gitter.im/vuejs/vue)

_If you have other helpful links to share, or find any of the links above no longer work, please [let us know](https://github.com/tastejs/todomvc/issues)._

## Credit

This TodoMVC application was created by [Evan You](http://evanyou.me).


================================================
FILE: examples/tree/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Vue.js tree view example</title>
    <style>
      body {
        font-family: Menlo, Consolas, monospace;
        color: #444;
      }
      .item {
        cursor: pointer;
      }
      .bold {
        font-weight: bold;
      }
      ul {
        padding-left: 1em;
        line-height: 1.5em;
        list-style-type: dot;
      }
    </style>
    <!-- Delete ".min" for console warnings in development -->
    <script src="../../dist/vue.min.js"></script>
  </head>
  <body>

    <!-- item template -->
    <script type="text/x-template" id="item-template">
      <li>
        <div
          :class="{bold: isFolder}"
          @click="toggle"
          @dblclick="changeType">
          {{model.name}}
          <span v-if="isFolder">[{{open ? '-' : '+'}}]</span>
        </div>
        <ul v-show="open" v-if="isFolder">
          <item
            class="item"
            v-for="model in model.children"
            :model="model">
          </item>
          <li class="add" @click="addChild">+</li>
        </ul>
      </li>
    </script>

    <p>(You can double click on an item to turn it into a folder.)</p>

    <!-- the demo root element -->
    <ul id="demo">
      <item
        class="item"
        :model="treeData">
      </item>
    </ul>

    <!-- demo code -->
    <script src="tree.js"></script>
  </body>
</html>


================================================
FILE: examples/tree/tree.js
================================================
// demo data
var data = {
  name: 'My Tree',
  children: [
    { name: 'hello' },
    { name: 'wat' },
    {
      name: 'child folder',
      children: [
        {
          name: 'child folder',
          children: [
            { name: 'hello' },
            { name: 'wat' }
          ]
        },
        { name: 'hello' },
        { name: 'wat' },
        {
          name: 'child folder',
          children: [
            { name: 'hello' },
            { name: 'wat' }
          ]
        }
      ]
    }
  ]
}

// define the item component
Vue.component('item', {
  template: '#item-template',
  props: {
    model: Object
  },
  data: function () {
    return {
      open: false
    }
  },
  computed: {
    isFolder: function () {
      return this.model.children &&
        this.model.children.length
    }
  },
  methods: {
    toggle: function () {
      if (this.isFolder) {
        this.open = !this.open
      }
    },
    changeType: function () {
      if (!this.isFolder) {
        Vue.set(this.model, 'children', [])
        this.addChild()
        this.open = true
      }
    },
    addChild: function () {
      this.model.children.push({
        name: 'new stuff'
      })
    }
  }
})

// boot up the demo
var demo = new Vue({
  el: '#demo',
  data: {
    treeData: data
  }
})


================================================
FILE: flow/compiler.js
================================================
declare type CompilerOptions = {
  warn?: Function; // allow customizing warning in different environments; e.g. node
  expectHTML?: boolean; // only false for non-web builds
  modules?: Array<ModuleOptions>; // platform specific modules; e.g. style; class
  staticKeys?: string; // a list of AST properties to be considered static; for optimization
  directives?: { [key: string]: Function }; // platform specific directives
  isUnaryTag?: (tag: string) => ?boolean; // check if a tag is unary for the platform
  canBeLeftOpenTag?: (tag: string) => ?boolean; // check if a tag can be left opened
  isReservedTag?: (tag: string) => ?boolean; // check if a tag is a native for the platform
  mustUseProp?: (tag: string, type: ?string, name: string) => boolean; // check if an attribute should be bound as a property
  isPreTag?: (attr: string) => ?boolean; // check if a tag needs to preserve whitespace
  getTagNamespace?: (tag: string) => ?string; // check the namespace for a tag
  transforms?: Array<Function>; // a list of transforms on parsed AST before codegen
  preserveWhitespace?: boolean;
  isFromDOM?: boolean;
  shouldDecodeTags?: boolean;
  shouldDecodeNewlines?: boolean;

  // for ssr optimization compiler
  scopeId?: string;

  // runtime user-configurable
  delimiters?: [string, string]; // template delimiters

  // allow user kept comments
  comments?: boolean
};

declare type CompiledResult = {
  ast: ?ASTElement;
  render: string;
  staticRenderFns: Array<string>;
  stringRenderFns?: Array<string>;
  errors?: Array<string>;
  tips?: Array<string>;
};

declare type ModuleOptions = {
  preTransformNode: (el: ASTElement) => void;
  transformNode: (el: ASTElement) => void; // transform an element's AST node
  postTransformNode: (el: ASTElement) => void;
  genData: (el: ASTElement) => string; // generate extra data string for an element
  transformCode?: (el: ASTElement, code: string) => string; // further transform generated code for an element
  staticKeys?: Array<string>; // AST properties to be considered static
};

declare type ASTModifiers = { [key: string]: boolean };
declare type ASTIfConditions = Array<{ exp: ?string; block: ASTElement }>;

declare type ASTElementHandler = {
  value: string;
  modifiers: ?ASTModifiers;
};

declare type ASTElementHandlers = {
  [key: string]: ASTElementHandler | Array<ASTElementHandler>;
};

declare type ASTDirective = {
  name: string;
  rawName: string;
  value: string;
  arg: ?string;
  modifiers: ?ASTModifiers;
};

declare type ASTNode = ASTElement | ASTText | ASTExpression;

declare type ASTElement = {
  type: 1;
  tag: string;
  attrsList: Array<{ name: string; value: string }>;
  attrsMap: { [key: string]: string | null };
  parent: ASTElement | void;
  children: Array<ASTNode>;

  static?: boolean;
  staticRoot?: boolean;
  staticInFor?: boolean;
  staticProcessed?: boolean;
  hasBindings?: boolean;

  text?: string;
  attrs?: Array<{ name: string; value: string }>;
  props?: Array<{ name: string; value: string }>;
  plain?: boolean;
  pre?: true;
  ns?: string;

  component?: string;
  inlineTemplate?: true;
  transitionMode?: string | null;
  slotName?: ?string;
  slotTarget?: ?string;
  slotScope?: ?string;
  scopedSlots?: { [name: string]: ASTElement };

  ref?: string;
  refInFor?: boolean;

  if?: string;
  ifProcessed?: boolean;
  elseif?: string;
  else?: true;
  ifConditions?: ASTIfConditions;

  for?: string;
  forProcessed?: boolean;
  key?: string;
  alias?: string;
  iterator1?: string;
  iterator2?: string;

  staticClass?: string;
  classBinding?: string;
  staticStyle?: string;
  styleBinding?: string;
  events?: ASTElementHandlers;
  nativeEvents?: ASTElementHandlers;

  transition?: string | true;
  transitionOnAppear?: boolean;

  model?: {
    value: string;
    callback: string;
    expression: string;
  };

  directives?: Array<ASTDirective>;

  forbidden?: true;
  once?: true;
  onceProcessed?: boolean;
  wrapData?: (code: string) => string;
  wrapListeners?: (code: string) => string;

  // 2.4 ssr optimization
  ssrOptimizability?: number;

  // weex specific
  appendAsTree?: boolean;
};

declare type ASTExpression = {
  type: 2;
  expression: string;
  text: string;
  static?: boolean;
  // 2.4 ssr optimization
  ssrOptimizability?: number;
};

declare type ASTText = {
  type: 3;
  text: string;
  static?: boolean;
  isComment?: boolean;
  // 2.4 ssr optimization
  ssrOptimizability?: number;
};

// SFC-parser related declarations

// an object format describing a single-file component.
declare type SFCDescriptor = {
  template: ?SFCBlock;
  script: ?SFCBlock;
  styles: Array<SFCBlock>;
  customBlocks: Array<SFCCustomBlock>;
}

declare type SFCCustomBlock = {
  type: string;
  content: string;
  start?: number;
  end?: number;
  src?: string;
  attrs: {[attribute:string]: string};
};

declare type SFCBlock = {
  type: string;
  content: string;
  start?: number;
  end?: number;
  lang?: string;
  src?: string;
  scoped?: boolean;
  module?: string | boolean;
};


================================================
FILE: flow/component.js
================================================
import type { Config } from '../src/core/config'
import type VNode from '../src/core/vdom/vnode'
import type Watcher from '../src/core/observer/watcher'

declare interface Component {
  // constructor information
  static cid: number;
  static options: Object;
  // extend
  static extend: (options: Object) => Function;
  static superOptions: Object;
  static extendOptions: Object;
  static sealedOptions: Object;
  static super: Class<Component>;
  // assets
  static directive: (id: string, def?: Function | Object) => Function | Object | void;
  static component: (id: string, def?: Class<Component> | Object) => Class<Component>;
  static filter: (id: string, def?: Function) => Function | void;

  // public properties
  $el: any; // so that we can attach __vue__ to it
  $data: Object;
  $props: Object;
  $options: ComponentOptions;
  $parent: Component | void;
  $root: Component;
  $children: Array<Component>;
  $refs: { [key: string]: Component | Element | Array<Component | Element> | void };
  $slots: { [key: string]: Array<VNode> };
  $scopedSlots: { [key: string]: () => VNodeChildren };
  $vnode: VNode; // the placeholder node for the component in parent's render tree
  $attrs: ?{ [key: string] : string };
  $listeners: ?{ [key: string]: Function | Array<Function> };
  $isServer: boolean;

  // public methods
  $mount: (el?: Element | string, hydrating?: boolean) => Component;
  $forceUpdate: () => void;
  $destroy: () => void;
  $set: <T>(target: Object | Array<T>, key: string | number, val: T) => T;
  $delete: <T>(target: Object | Array<T>, key: string | number) => void;
  $watch: (expOrFn: string | Function, cb: Function, options?: Object) => Function;
  $on: (event: string | Array<string>, fn: Function) => Component;
  $once: (event: string, fn: Function) => Component;
  $off: (event?: string | Array<string>, fn?: Function) => Component;
  $emit: (event: string, ...args: Array<mixed>) => Component;
  $nextTick: (fn: Function) => void | Promise<*>;
  $createElement: (tag?: string | Component, data?: Object, children?: VNodeChildren) => VNode;

  // private properties
  _uid: number;
  _name: string; // this only exists in dev mode
  _isVue: true;
  _self: Component;
  _renderProxy: Component;
  _renderContext: ?Component;
  _watcher: Watcher;
  _watchers: Array<Watcher>;
  _computedWatchers: { [key: string]: Watcher };
  _data: Object;
  _props: Object;
  _events: Object;
  _inactive: boolean | null;
  _directInactive: boolean;
  _isMounted: boolean;
  _isDestroyed: boolean;
  _isBeingDestroyed: boolean;
  _vnode: ?VNode; // self root node
  _staticTrees: ?Array<VNode>;
  _hasHookEvent: boolean;
  _provided: ?Object;

  // private methods

  // lifecycle
  _init: Function;
  _mount: (el?: Element | void, hydrating?: boolean) => Component;
  _update: (vnode: VNode, hydrating?: boolean) => void;

  // rendering
  _render: () => VNode;

  __patch__: (
    a: Element | VNode | void,
    b: VNode,
    hydrating?: boolean,
    removeOnly?: boolean,
    parentElm?: any,
    refElm?: any
  ) => any;

  // createElement

  // _c is internal that accepts `normalizationType` optimization hint
  _c: (
    vnode?: VNode,
    data?: VNodeData,
    children?: VNodeChildren,
    normalizationType?: number
  ) => VNode | void;

  // renderStatic
  _m: (index: number, isInFor?: boolean) => VNode | VNodeChildren;
  // markOnce
  _o: (vnode: VNode | Array<VNode>, index: number, key: string) => VNode | VNodeChildren;
  // toString
  _s: (value: mixed) => string;
  // text to VNode
  _v: (value: string | number) => VNode;
  // toNumber
  _n: (value: string) => number | string;
  // empty vnode
  _e: () => VNode;
  // loose equal
  _q: (a: mixed, b: mixed) => boolean;
  // loose indexOf
  _i: (arr: Array<mixed>, val: mixed) => number;
  // resolveFilter
  _f: (id: string) => Function;
  // renderList
  _l: (val: mixed, render: Function) => ?Array<VNode>;
  // renderSlot
  _t: (name: string, fallback: ?Array<VNode>, props: ?Object) => ?Array<VNode>;
  // apply v-bind object
  _b: (data: any, tag: string, value: any, asProp: boolean, isSync?: boolean) => VNodeData;
  // apply v-on object
  _g: (data: any, value: any) => VNodeData;
  // check custom keyCode
  _k: (eventKeyCode: number, key: string, builtInAlias: number | Array<number> | void) => boolean;
  // resolve scoped slots
  _u: (scopedSlots: ScopedSlotsData, res?: Object) => { [key: string]: Function };

  // SSR specific
  _ssrNode: Function;
  _ssrList: Function;
  _ssrEscape: Function;
  _ssrAttr: Function;
  _ssrAttrs: Function;
  _ssrDOMProps: Function;
  _ssrClass: Function;
  _ssrStyle: Function;

  // allow dynamic method registration
  [key: string]: any
};


================================================
FILE: flow/global-api.js
================================================
declare interface GlobalAPI {
  cid: number;
  options: Object;
  config: Config;
  util: Object;

  extend: (options: Object) => Function;
  set: <T>(target: Object | Array<T>, key: string | number, value: T) => T;
  delete: <T>(target: Object| Array<T>, key: string | number) => void;
  nextTick: (fn: Function, context?: Object) => void | Promise<*>;
  use: (plugin: Function | Object) => void;
  mixin: (mixin: Object) => void;
  compile: (template: string) => { render: Function, staticRenderFns: Array<Function> };

  directive: (id: string, def?: Function | Object) => Function | Object | void;
  component: (id: string, def?: Class<Component> | Object) => Class<Component>;
  filter: (id: string, def?: Function) => Function | void;

  // allow dynamic method registration
  [key: string]: any
};


================================================
FILE: flow/modules.js
================================================
declare module 'he' {
  declare function escape(html: string): string;
  declare function decode(html: string): string;
}

declare module 'source-map' {
  declare class SourceMapGenerator {
    setSourceContent(filename: string, content: string): void;
    addMapping(mapping: Object): void;
    toString(): string;
  }
  declare class SourceMapConsumer {
    constructor (map: Object): void;
    originalPositionFor(position: { line: number; column: number; }): {
      source: ?string;
      line: ?number;
      column: ?number;
    };
  }
}

declare module 'lru-cache' {
  declare var exports: {
    (): any
  }
}

declare module 'de-indent' {
  declare var exports: {
    (input: string): string
  }
}

declare module 'serialize-javascript' {
  declare var exports: {
    (input: string, options: { isJSON: boolean }): string
  }
}

declare module 'lodash.template' {
  declare var exports: {
    (input: string, options: { interpolate: RegExp, escape: RegExp }): Function
  }
}


================================================
FILE: flow/options.js
================================================
declare type InternalComponentOptions = {
  _isComponent: true;
  parent: Component;
  propsData: ?Object;
  _parentVnode: VNode;
  _parentListeners: ?Object;
  _renderChildren: ?Array<VNode>;
  _componentTag: ?string;
  _parentElm: ?Node;
  _refElm: ?Node;
  render?: Function;
  staticRenderFns?: Array<Function>
};

declare type ComponentOptions = {
  // data
  data: Object | Function | void;
  props?: { [key: string]: PropOptions };
  propsData?: ?Object;
  computed?: {
    [key: string]: Function | {
      get?: Function;
      set?: Function;
      cache?: boolean
    }
  };
  methods?: { [key: string]: Function };
  watch?: { [key: string]: Function | string };

  // DOM
  el?: string | Element;
  template?: string;
  render: (h: () => VNode) => VNode;
  renderError?: (h: () => VNode, err: Error) => VNode;
  staticRenderFns?: Array<() => VNode>;

  // lifecycle
  beforeCreate?: Function;
  created?: Function;
  beforeMount?: Function;
  mounted?: Function;
  beforeUpdate?: Function;
  updated?: Function;
  activated?: Function;
  deactivated?: Function;
  beforeDestroy?: Function;
  destroyed?: Function;

  // assets
  directives?: { [key: string]: Object };
  components?: { [key: string]: Class<Component> };
  transitions?: { [key: string]: Object };
  filters?: { [key: string]: Function };

  // context
  provide?: { [key: string | Symbol]: any } | () => { [key: string | Symbol]: any };
  inject?: { [key: string]: string | Symbol } | Array<string>;

  // component v-model customization
  model?: {
    prop?: string;
    event?: string;
  };

  // misc
  parent?: Component;
  mixins?: Array<Object>;
  name?: string;
  extends?: Class<Component> | Object;
  delimiters?: [string, string];
  comments?: boolean;
  inheritAttrs?: boolean;

  // private
  _isComponent?: true;
  _propKeys?: Array<string>;
  _parentVnode?: VNode;
  _parentListeners?: ?Object;
  _renderChildren?: ?Array<VNode>;
  _componentTag: ?string;
  _scopeId: ?string;
  _base: Class<Component>;
  _parentElm: ?Node;
  _refElm: ?Node;
};

declare type PropOptions = {
  type: Function | Array<Function> | null;
  default: any;
  required: ?boolean;
  validator: ?Function;
}


================================================
FILE: flow/ssr.js
================================================
declare type ComponentWithCacheContext = {
  type: 'ComponentWithCache';
  bufferIndex: number;
  buffer: Array<string>;
  key: string;
};

declare type ElementContext = {
  type: 'Element';
  children: Array<VNode>;
  rendered: number;
  endTag: string;
  total: number;
};

declare type ComponentContext = {
  type: 'Component';
  prevActive: Component;
};

declare type RenderState = ComponentContext | ComponentWithCacheContext | ElementContext;


================================================
FILE: flow/vnode.js
================================================
declare type VNodeChildren = Array<?VNode | string | VNodeChildren> | string;

declare type VNodeComponentOptions = {
  Ctor: Class<Component>;
  propsData: ?Object;
  listeners: ?Object;
  children: ?Array<VNode>;
  tag?: string;
};

declare type MountedComponentVNode = {
  context: Component;
  componentOptions: VNodeComponentOptions;
  componentInstance: Component;
  parent: VNode;
  data: VNodeData;
};

// interface for vnodes in update modules
declare type VNodeWithData = {
  tag: string;
  data: VNodeData;
  children: ?Array<VNode>;
  text: void;
  elm: any;
  ns: string | void;
  context: Component;
  key: string | number | void;
  parent?: VNodeWithData;
  componentOptions?: VNodeComponentOptions;
  componentInstance?: Component;
  isRootInsert: boolean;
};

declare interface VNodeData {
  key?: string | number;
  slot?: string;
  ref?: string;
  is?: string;
  pre?: boolean;
  tag?: string;
  staticClass?: string;
  class?: any;
  staticStyle?: { [key: string]: any };
  style?: Array<Object> | Object;
  normalizedStyle?: Object;
  props?: { [key: string]: any };
  attrs?: { [key: string]: string };
  domProps?: { [key: string]: any };
  hook?: { [key: string]: Function };
  on?: ?{ [key: string]: Function | Array<Function> };
  nativeOn?: { [key: string]: Function | Array<Function> };
  transition?: Object;
  show?: boolean; // marker for v-show
  inlineTemplate?: {
    render: Function;
    staticRenderFns: Array<Function>;
  };
  directives?: Array<VNodeDirective>;
  keepAlive?: boolean;
  scopedSlots?: { [key: string]: Function };
  model?: {
    value: any;
    callback: Function;
  };
};

declare type VNodeDirective = {
  name: string;
  rawName: string;
  value?: any;
  oldValue?: any;
  arg?: string;
  modifiers?: ASTModifiers;
  def?: Object;
};

declare type ScopedSlotsData = Array<{ key: string, fn: Function } | ScopedSlotsData>;


================================================
FILE: package.json
================================================
{
  "name": "vue",
  "version": "2.4.1",
  "description": "Vue.js in mini program",
  "main": "dist/vue.runtime.common.js",
  "module": "dist/vue.runtime.esm.js",
  "unpkg": "dist/vue.js",
  "typings": "types/index.d.ts",
  "files": [
    "dist/*.js",
    "types/*.d.ts"
  ],
  "scripts": {
    "dev": "rollup -w -c build/config.js --environment TARGET:web-full-dev",
    "dev:cjs": "rollup -w -c build/config.js --environment TARGET:web-runtime-cjs",
    "dev:esm": "rollup -w -c build/config.js --environment TARGET:web-runtime-esm",
    "dev:test": "karma start test/unit/karma.dev.config.js",
    "dev:ssr": "rollup -w -c build/config.js --environment TARGET:web-server-renderer",
    "dev:compiler": "rollup -w -c build/config.js --environment TARGET:web-compiler ",
    "dev:weex": "rollup -w -c build/config.js --environment TARGET:weex-framework ",
    "dev:weex:compiler": "rollup -w -c build/config.js --environment TARGET:weex-compiler ",
    "dev:mpvue": "rollup -w -c build/config.js --environment TARGET:mpvue ",
    "dev:mpvue:compiler": "rollup -w -c build/config.js --environment TARGET:mpvue-template-compiler ",
    "build": "node build/build.js",
    "build:ssr": "npm run build -- vue.runtime.common.js,vue-server-renderer",
    "build:weex": "npm run build -- weex-vue-framework,weex-template-compiler",
    "build:mpvue": "npm run build -- mpvue,mpvue-template-compiler",
    "test": "npm run lint && flow check && npm run test:types && npm run test:cover && npm run test:e2e -- --env phantomjs && npm run test:ssr && npm run test:weex && npm run test:mpvue",
    "test:unit": "karma start test/unit/karma.unit.config.js",
    "test:cover": "karma start test/unit/karma.cover.config.js",
    "test:e2e": "npm run build -- vue.min.js && node test/e2e/runner.js",
    "test:weex": "npm run build:weex && jasmine JASMINE_CONFIG_PATH=test/weex/jasmine.json",
    "test:mpvue": "npm run build:mpvue && jasmine JASMINE_CONFIG_PATH=test/mp/jasmine.json",
    "test:ssr": "npm run build:ssr && jasmine JASMINE_CONFIG_PATH=test/ssr/jasmine.json",
    "test:sauce": "npm run sauce -- 0 && npm run sauce -- 1 && npm run sauce -- 2",
    "test:types": "tsc -p ./types/test/tsconfig.json",
    "lint": "eslint src build test",
    "flow": "flow check",
    "sauce": "karma start test/unit/karma.sauce.config.js",
    "bench:ssr": "npm run build:ssr && node benchmarks/ssr/renderToString.js && node benchmarks/ssr/renderToStream.js",
    "release": "bash build/release.sh",
    "release:weex": "bash build/release-weex.sh",
    "release:note": "node build/gen-release-note.js",
    "setup": "node build/install-hooks.js",
    "commit": "git-cz"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Meituan-Dianping/mpvue.git"
  },
  "keywords": [
    "vue"
  ],
  "author": "anchengjian",
  "contributors": [
    {
      "name": "hucq"
    },
    {
      "name": "aOrz"
    }
  ],
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Meituan-Dianping/mpvue/issues"
  },
  "homepage": "https://github.com/Meituan-Dianping/mpvue",
  "devDependencies": {
    "babel-core": "^6.25.0",
    "babel-eslint": "^7.2.3",
    "babel-helper-vue-jsx-merge-props": "^2.0.2",
    "babel-loader": "^7.0.0",
    "babel-plugin-istanbul": "^4.1.4",
    "babel-plugin-syntax-dynamic-import": "^6.18.0",
    "babel-plugin-syntax-jsx": "^6.18.0",
    "babel-plugin-transform-vue-jsx": "^3.4.3",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-flow-vue": "^1.0.0",
    "buble": "^0.15.2",
    "chalk": "^1.1.3",
    "chromedriver": "^2.30.1",
    "codecov.io": "^0.1.6",
    "commitizen": "^2.9.6",
    "conventional-changelog": "^1.1.3",
    "cross-spawn": "^5.1.0",
    "cz-conventional-changelog": "^2.0.0",
    "de-indent": "^1.0.2",
    "es6-promise": "^4.1.0",
    "eslint": "^3.0.0",
    "eslint-loader": "^1.7.1",
    "eslint-plugin-flowtype": "^2.34.0",
    "eslint-plugin-jasmine": "^2.2.0",
    "eslint-plugin-vue-libs": "^1.2.0",
    "file-loader": "^0.11.2",
    "flow-bin": "^0.48.0",
    "hash-sum": "^1.0.2",
    "he": "^1.1.1",
    "http-server": "^0.10.0",
    "jasmine": "^2.6.0",
    "jasmine-core": "^2.6.3",
    "karma": "^1.7.0",
    "karma-chrome-launcher": "^2.1.1",
    "karma-coverage": "^1.1.1",
    "karma-firefox-launcher": "^1.0.1",
    "karma-jasmine": "^1.1.0",
    "karma-mocha-reporter": "^2.2.3",
    "karma-phantomjs-launcher": "^1.0.4",
    "karma-safari-launcher": "^1.0.0",
    "karma-sauce-launcher": "^1.1.0",
    "karma-sourcemap-loader": "^0.3.7",
    "karma-webpack": "^2.0.3",
    "lodash": "^4.17.4",
    "lodash.template": "^4.4.0",
    "lodash.uniq": "^4.5.0",
    "lru-cache": "^4.1.1",
    "nightwatch": "^0.9.16",
    "nightwatch-helpers": "^1.2.0",
    "phantomjs-prebuilt": "^2.1.14",
    "prettier": "^1.11.1",
    "resolve": "^1.3.3",
    "rollup": "^0.45.1",
    "rollup-plugin-alias": "^1.4.0",
    "rollup-plugin-babel": "^2.7.1",
    "rollup-plugin-buble": "^0.15.0",
    "rollup-plugin-commonjs": "^8.0.2",
    "rollup-plugin-flow-no-whitespace": "^1.0.0",
    "rollup-plugin-node-resolve": "^3.0.0",
    "rollup-plugin-replace": "^1.1.1",
    "rollup-watch": "^4.0.0",
    "selenium-server": "^2.53.1",
    "serialize-javascript": "^1.3.0",
    "shelljs": "^0.7.8",
    "typescript": "^2.3.4",
    "uglify-js": "^3.0.15",
    "webpack": "^2.6.1",
    "weex-js-runtime": "^0.20.5",
    "weex-vdom-tester": "^0.2.0"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  }
}


================================================
FILE: packages/mpvue/README.md
================================================
# mpvue

> This package is auto-generated. For pull requests please see [src/platforms/mp/entry-runtime.js](https://github.com/Meituan-Dianping/mpvue/blob/master/src/platforms/mp/entry-runtime.js).


================================================
FILE: packages/mpvue/index.js
================================================
// fix env
try {
  if (!global) global = {};
  global.process = global.process || {};
  global.process.env = global.process.env || {};
  global.App = global.App || App;
  global.Page = global.Page || Page;
  global.Component = global.Component || Component;
  global.getApp = global.getApp || getApp;

  if (typeof wx !== 'undefined') {
    global.mpvue = wx;
    global.mpvuePlatform = 'wx';
  } else if (typeof swan !== 'undefined') {
    global.mpvue = swan;
    global.mpvuePlatform = 'swan';
  }else if (typeof tt !== 'undefined') {
    global.mpvue = tt;
    global.mpvuePlatform = 'tt';
  }else if (typeof my !== 'undefined') {
    global.mpvue = my;
    global.mpvuePlatform = 'my';
  }
} catch (e) {}

(function (global, factory) {
	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
	typeof define === 'function' && define.amd ? define(factory) :
	(global.Vue = factory());
}(this, (function () { 'use strict';

/*  */

// these helpers produces better vm code in JS engines due to their
// explicitness and function inlining
function isUndef (v) {
  return v === undefined || v === null
}

function isDef (v) {
  return v !== undefined && v !== null
}

function isTrue (v) {
  return v === true
}

function isFalse (v) {
  return v === false
}

/**
 * Check if value is primitive
 */
function isPrimitive (value) {
  return typeof value === 'string' || typeof value === 'number'
}

/**
 * Quick object check - this is primarily used to tell
 * Objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject (obj) {
  return obj !== null && typeof obj === 'object'
}

var _toString = Object.prototype.toString;

/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject (obj) {
  return _toString.call(obj) === '[object Object]'
}

function isRegExp (v) {
  return _toString.call(v) === '[object RegExp]'
}

/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex (val) {
  var n = parseFloat(val);
  return n >= 0 && Math.floor(n) === n && isFinite(val)
}

/**
 * Convert a value to a string that is actually rendered.
 */
function toString (val) {
  return val == null
    ? ''
    : typeof val === 'object'
      ? JSON.stringify(val, null, 2)
      : String(val)
}

/**
 * Convert a input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber (val) {
  var n = parseFloat(val);
  return isNaN(n) ? val : n
}

/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap (
  str,
  expectsLowerCase
) {
  var map = Object.create(null);
  var list = str.split(',');
  for (var i = 0; i < list.length; i++) {
    map[list[i]] = true;
  }
  return expectsLowerCase
    ? function (val) { return map[val.toLowerCase()]; }
    : function (val) { return map[val]; }
}

/**
 * Check if a tag is a built-in tag.
 */
var isBuiltInTag = makeMap('slot,component', true);

/**
 * Check if a attribute is a reserved attribute.
 */
var isReservedAttribute = makeMap('key,ref,slot,is');

/**
 * Remove an item from an array
 */
function remove (arr, item) {
  if (arr.length) {
    var index = arr.indexOf(item);
    if (index > -1) {
      return arr.splice(index, 1)
    }
  }
}

/**
 * Check whether the object has the property.
 */
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn (obj, key) {
  return hasOwnProperty.call(obj, key)
}

/**
 * Create a cached version of a pure function.
 */
function cached (fn) {
  var cache = Object.create(null);
  return (function cachedFn (str) {
    var hit = cache[str];
    return hit || (cache[str] = fn(str))
  })
}

/**
 * Camelize a hyphen-delimited string.
 */
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
});

/**
 * Capitalize a string.
 */
var capitalize = cached(function (str) {
  return str.charAt(0).toUpperCase() + str.slice(1)
});

/**
 * Hyphenate a camelCase string.
 */
var hyphenateRE = /([^-])([A-Z])/g;
var hyphenate = cached(function (str) {
  return str
    .replace(hyphenateRE, '$1-$2')
    .replace(hyphenateRE, '$1-$2')
    .toLowerCase()
});

/**
 * Simple bind, faster than native
 */
function bind (fn, ctx) {
  function boundFn (a) {
    var l = arguments.length;
    return l
      ? l > 1
        ? fn.apply(ctx, arguments)
        : fn.call(ctx, a)
      : fn.call(ctx)
  }
  // record original fn length
  boundFn._length = fn.length;
  return boundFn
}

/**
 * Convert an Array-like object to a real Array.
 */
function toArray (list, start) {
  start = start || 0;
  var i = list.length - start;
  var ret = new Array(i);
  while (i--) {
    ret[i] = list[i + start];
  }
  return ret
}

/**
 * Mix properties into target object.
 */
function extend (to, _from) {
  for (var key in _from) {
    to[key] = _from[key];
  }
  return to
}

/**
 * Merge an Array of Objects into a single Object.
 */
function toObject (arr) {
  var res = {};
  for (var i = 0; i < arr.length; i++) {
    if (arr[i]) {
      extend(res, arr[i]);
    }
  }
  return res
}

/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)
 */
function noop (a, b, c) {}

/**
 * Always return false.
 */
var no = function (a, b, c) { return false; };

/**
 * Return same value
 */
var identity = function (_) { return _; };

/**
 * Generate a static keys string from compiler modules.
 */


/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual (a, b) {
  var isObjectA = isObject(a);
  var isObjectB = isObject(b);
  if (isObjectA && isObjectB) {
    try {
      return JSON.stringify(a) === JSON.stringify(b)
    } catch (e) {
      // possible circular reference
      return a === b
    }
  } else if (!isObjectA && !isObjectB) {
    return String(a) === String(b)
  } else {
    return false
  }
}

function looseIndexOf (arr, val) {
  for (var i = 0; i < arr.length; i++) {
    if (looseEqual(arr[i], val)) { return i }
  }
  return -1
}

/**
 * Ensure a function is called only once.
 */
function once (fn) {
  var called = false;
  return function () {
    if (!called) {
      called = true;
      fn.apply(this, arguments);
    }
  }
}

var SSR_ATTR = 'data-server-rendered';

var ASSET_TYPES = [
  'component',
  'directive',
  'filter'
];

var LIFECYCLE_HOOKS = [
  'beforeCreate',
  'created',
  'beforeMount',
  'mounted',
  'beforeUpdate',
  'updated',
  'beforeDestroy',
  'destroyed',
  'activated',
  'deactivated', 'onLaunch',
  'onLoad',
  'onShow',
  'onReady',
  'onHide',
  'onUnload',
  'onPullDownRefresh',
  'onReachBottom',
  'onShareAppMessage',
  'onPageScroll',
  'onTabItemTap',
  'attached',
  'ready',
  'moved',
  'detached'
];

/*  */

var config = ({
  /**
   * Option merge strategies (used in core/util/options)
   */
  optionMergeStrategies: Object.create(null),

  /**
   * Whether to suppress warnings.
   */
  silent: false,

  /**
   * Show production mode tip message on boot?
   */
  productionTip: "production" !== 'production',

  /**
   * Whether to enable devtools
   */
  devtools: "production" !== 'production',

  /**
   * Whether to record perf
   */
  performance: false,

  /**
   * Error handler for watcher errors
   */
  errorHandler: null,

  /**
   * Warn handler for watcher warns
   */
  warnHandler: null,

  /**
   * Ignore certain custom elements
   */
  ignoredElements: [],

  /**
   * Custom user key aliases for v-on
   */
  keyCodes: Object.create(null),

  /**
   * Check if a tag is reserved so that it cannot be registered as a
   * component. This is platform-dependent and may be overwritten.
   */
  isReservedTag: no,

  /**
   * Check if an attribute is reserved so that it cannot be used as a component
   * prop. This is platform-dependent and may be overwritten.
   */
  isReservedAttr: no,

  /**
   * Check if a tag is an unknown element.
   * Platform-dependent.
   */
  isUnknownElement: no,

  /**
   * Get the namespace of an element
   */
  getTagNamespace: noop,

  /**
   * Parse the real tag name for the specific platform.
   */
  parsePlatformTagName: identity,

  /**
   * Check if an attribute must be bound using property, e.g. value
   * Platform-dependent.
   */
  mustUseProp: no,

  /**
   * Exposed for legacy reasons
   */
  _lifecycleHooks: LIFECYCLE_HOOKS
});

/*  */

var emptyObject = Object.freeze({});

/**
 * Check if a string starts with $ or _
 */
function isReserved (str) {
  var c = (str + '').charCodeAt(0);
  return c === 0x24 || c === 0x5F
}

/**
 * Define a property.
 */
function def (obj, key, val, enumerable) {
  Object.defineProperty(obj, key, {
    value: val,
    enumerable: !!enumerable,
    writable: true,
    configurable: true
  });
}

/**
 * Parse simple path.
 */
var bailRE = /[^\w.$]/;
function parsePath (path) {
  if (bailRE.test(path)) {
    return
  }
  var segments = path.split('.');
  return function (obj) {
    for (var i = 0; i < segments.length; i++) {
      if (!obj) { return }
      obj = obj[segments[i]];
    }
    return obj
  }
}

/*  */

var warn = noop;

var formatComponentName = (null); // work around flow check

/*  */

function handleError (err, vm, info) {
  if (config.errorHandler) {
    config.errorHandler.call(null, err, vm, info);
  } else {
    if (inBrowser && typeof console !== 'undefined') {
      console.error(err);
    } else {
      throw err
    }
  }
}

/*  */

// can we use __proto__?
var hasProto = '__proto__' in {};

// Browser environment sniffing
var inBrowser = typeof window !== 'undefined';
var UA = ['mpvue-runtime'].join();
var isIE = UA && /msie|trident/.test(UA);
var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
var isEdge = UA && UA.indexOf('edge/') > 0;
var isAndroid = UA && UA.indexOf('android') > 0;
var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;

// Firefix has a "watch" function on Object.prototype...
var nativeWatch = ({}).watch;

var supportsPassive = false;
if (inBrowser) {
  try {
    var opts = {};
    Object.defineProperty(opts, 'passive', ({
      get: function get () {
        /* istanbul ignore next */
        supportsPassive = true;
      }
    })); // https://github.com/facebook/flow/issues/285
    window.addEventListener('test-passive', null, opts);
  } catch (e) {}
}

// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer;
var isServerRendering = function () {
  if (_isServer === undefined) {
    /* istanbul ignore if */
    if (!inBrowser && typeof global !== 'undefined') {
      // detect presence of vue-server-renderer and avoid
      // Webpack shimming the process
      _isServer = global['process'].env.VUE_ENV === 'server';
    } else {
      _isServer = false;
    }
  }
  return _isServer
};

// detect devtools
var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;

/* istanbul ignore next */
function isNative (Ctor) {
  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
}

var hasSymbol =
  typeof Symbol !== 'undefined' && isNative(Symbol) &&
  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);

/**
 * Defer a task to execute it asynchronously.
 */
var nextTick = (function () {
  var callbacks = [];
  var pending = false;
  var timerFunc;

  function nextTickHandler () {
    pending = false;
    var copies = callbacks.slice(0);
    callbacks.length = 0;
    for (var i = 0; i < copies.length; i++) {
      copies[i]();
    }
  }

  // the nextTick behavior leverages the microtask queue, which can be accessed
  // via either native Promise.then or MutationObserver.
  // MutationObserver has wider support, however it is seriously bugged in
  // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  // completely stops working after triggering a few times... so, if native
  // Promise is available, we will use it:
  /* istanbul ignore if */
  if (typeof Promise !== 'undefined' && isNative(Promise)) {
    var p = Promise.resolve();
    var logError = function (err) { console.error(err); };
    timerFunc = function () {
      p.then(nextTickHandler).catch(logError);
      // in problematic UIWebViews, Promise.then doesn't completely break, but
      // it can get stuck in a weird state where callbacks are pushed into the
      // microtask queue but the queue isn't being flushed, until the browser
      // needs to do some other work, e.g. handle a timer. Therefore we can
      // "force" the microtask queue to be flushed by adding an empty timer.
      if (isIOS) { setTimeout(noop); }
    };
  // } else if (typeof MutationObserver !== 'undefined' && (
  //   isNative(MutationObserver) ||
  //   // PhantomJS and iOS 7.x
  //   MutationObserver.toString() === '[object MutationObserverConstructor]'
  // )) {
  //   // use MutationObserver where native Promise is not available,
  //   // e.g. PhantomJS IE11, iOS7, Android 4.4
  //   var counter = 1
  //   var observer = new MutationObserver(nextTickHandler)
  //   var textNode = document.createTextNode(String(counter))
  //   observer.observe(textNode, {
  //     characterData: true
  //   })
  //   timerFunc = () => {
  //     counter = (counter + 1) % 2
  //     textNode.data = String(counter)
  //   }
  } else {
    // fallback to setTimeout
    /* istanbul ignore next */
    timerFunc = function () {
      setTimeout(nextTickHandler, 0);
    };
  }

  return function queueNextTick (cb, ctx) {
    var _resolve;
    callbacks.push(function () {
      if (cb) {
        try {
          cb.call(ctx);
        } catch (e) {
          handleError(e, ctx, 'nextTick');
        }
      } else if (_resolve) {
        _resolve(ctx);
      }
    });
    if (!pending) {
      pending = true;
      timerFunc();
    }
    if (!cb && typeof Promise !== 'undefined') {
      return new Promise(function (resolve, reject) {
        _resolve = resolve;
      })
    }
  }
})();

var _Set;
/* istanbul ignore if */
if (typeof Set !== 'undefined' && isNative(Set)) {
  // use native Set when available.
  _Set = Set;
} else {
  // a non-standard Set polyfill that only works with primitive keys.
  _Set = (function () {
    function Set () {
      this.set = Object.create(null);
    }
    Set.prototype.has = function has (key) {
      return this.set[key] === true
    };
    Set.prototype.add = function add (key) {
      this.set[key] = true;
    };
    Set.prototype.clear = function clear () {
      this.set = Object.create(null);
    };

    return Set;
  }());
}

/*  */


var uid$1 = 0;

/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 */
var Dep = function Dep () {
  this.id = uid$1++;
  this.subs = [];
};

Dep.prototype.addSub = function addSub (sub) {
  this.subs.push(sub);
};

Dep.prototype.removeSub = function removeSub (sub) {
  remove(this.subs, sub);
};

Dep.prototype.depend = function depend () {
  if (Dep.target) {
    Dep.target.addDep(this);
  }
};

Dep.prototype.notify = function notify () {
  // stabilize the subscriber list first
  var subs = this.subs.slice();
  for (var i = 0, l = subs.length; i < l; i++) {
    subs[i].update();
  }
};

// the current target watcher being evaluated.
// this is globally unique because there could be only one
// watcher being evaluated at any time.
Dep.target = null;
var targetStack = [];

function pushTarget (_target) {
  if (Dep.target) { targetStack.push(Dep.target); }
  Dep.target = _target;
}

function popTarget () {
  Dep.target = targetStack.pop();
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */

var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);[
  'push',
  'pop',
  'shift',
  'unshift',
  'splice',
  'sort',
  'reverse'
]
.forEach(function (method) {
  // cache original method
  var original = arrayProto[method];
  def(arrayMethods, method, function mutator () {
    var args = [], len = arguments.length;
    while ( len-- ) args[ len ] = arguments[ len ];

    var result = original.apply(this, args);
    var ob = this.__ob__;
    var inserted;
    switch (method) {
      case 'push':
      case 'unshift':
        inserted = args;
        break
      case 'splice':
        inserted = args.slice(2);
        break
    }
    if (inserted) { ob.observeArray(inserted); }
    // notify change
    ob.dep.notify();
    return result
  });
});

/*  */

var arrayKeys = Object.getOwnPropertyNames(arrayMethods);

/**
 * By default, when a reactive property is set, the new value is
 * also converted to become reactive. However when passing down props,
 * we don't want to force conversion because the value may be a nested value
 * under a frozen data structure. Converting it would defeat the optimization.
 */
var observerState = {
  shouldConvert: true
};

/**
 * Observer class that are attached to each observed
 * object. Once attached, the observer converts target
 * object's property keys into getter/setters that
 * collect dependencies and dispatches updates.
 */
var Observer = function Observer (value, key) {
  this.value = value;
  this.dep = new Dep();
  this.vmCount = 0;
  if (key) {
    this.key = key;
  }
  def(value, '__ob__', this);
  if (Array.isArray(value)) {
    var augment = hasProto
      ? protoAugment
      : copyAugment;
    augment(value, arrayMethods, arrayKeys);
    this.observeArray(value);
  } else {
    this.walk(value);
  }
};

/**
 * Walk through each property and convert them into
 * getter/setters. This method should only be called when
 * value type is Object.
 */
Observer.prototype.walk = function walk (obj) {
  var keys = Object.keys(obj);
  for (var i = 0; i < keys.length; i++) {
    defineReactive$$1(obj, keys[i], obj[keys[i]]);
  }
};

/**
 * Observe a list of Array items.
 */
Observer.prototype.observeArray = function observeArray (items) {
  for (var i = 0, l = items.length; i < l; i++) {
    observe(items[i]);
  }
};

// helpers

/**
 * Augment an target Object or Array by intercepting
 * the prototype chain using __proto__
 */
function protoAugment (target, src, keys) {
  /* eslint-disable no-proto */
  target.__proto__ = src;
  /* eslint-enable no-proto */
}

/**
 * Augment an target Object or Array by defining
 * hidden properties.
 */
/* istanbul ignore next */
function copyAugment (target, src, keys) {
  for (var i = 0, l = keys.length; i < l; i++) {
    var key = keys[i];
    def(target, key, src[key]);
  }
}

/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe (value, asRootData, key) {
  if (!isObject(value)) {
    return
  }
  var ob;
  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
    ob = value.__ob__;
  } else if (
    observerState.shouldConvert &&
    !isServerRendering() &&
    (Array.isArray(value) || isPlainObject(value)) &&
    Object.isExtensible(value) &&
    !value._isVue
  ) {
    ob = new Observer(value, key);
  }
  if (asRootData && ob) {
    ob.vmCount++;
  }
  return ob
}

/**
 * Define a reactive property on an Object.
 */
function defineReactive$$1 (
  obj,
  key,
  val,
  customSetter,
  shallow
) {
  var dep = new Dep();

  var property = Object.getOwnPropertyDescriptor(obj, key);
  if (property && property.configurable === false) {
    return
  }

  // cater for pre-defined getter/setters
  var getter = property && property.get;
  var setter = property && property.set;

  var childOb = !shallow && observe(val, undefined, key);
  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get: function reactiveGetter () {
      var value = getter ? getter.call(obj) : val;
      if (Dep.target) {
        dep.depend();
        if (childOb) {
          childOb.dep.depend();
        }
        if (Array.isArray(value)) {
          dependArray(value);
        }
      }
      return value
    },
    set: function reactiveSetter (newVal) {
      var value = getter ? getter.call(obj) : val;
      /* eslint-disable no-self-compare */
      if (newVal === value || (newVal !== newVal && value !== value)) {
        return
      }

      /* eslint-enable no-self-compare */
      if ("production" !== 'production' && customSetter) {
        customSetter();
      }
      if (setter) {
        setter.call(obj, newVal);
      } else {
        val = newVal;
      }
      childOb = !shallow && observe(newVal, undefined, key);
      dep.notify();

      if (!obj.__keyPath) {
        def(obj, '__keyPath', {}, false);
      }
      obj.__keyPath[key] = true;
      if (newVal instanceof Object && !(newVal instanceof Array)) {
        // 标记是否是通过this.Obj = {} 赋值印发的改动,解决少更新问题#1305
        def(newVal, '__newReference', true, false);
      }
    }
  });
}

/**
 * Set a property on an object. Adds the new property and
 * triggers change notification if the property doesn't
 * already exist.
 */
function set (target, key, val) {
  if (Array.isArray(target) && isValidArrayIndex(key)) {
    target.length = Math.max(target.length, key);
    target.splice(key, 1, val);
    return val
  }
  if (hasOwn(target, key)) {
    target[key] = val;
    return val
  }
  var ob = (target).__ob__;
  if (target._isVue || (ob && ob.vmCount)) {
    "production" !== 'production' && warn(
      'Avoid adding reactive properties to a Vue instance or its root $data ' +
      'at runtime - declare it upfront in the data option.'
    );
    return val
  }
  if (!ob) {
    target[key] = val;
    return val
  }
  defineReactive$$1(ob.value, key, val);
  // Vue.set 添加对象属性,渲染时候把 val 传给小程序渲染
  if (!target.__keyPath) {
    def(target, '__keyPath', {}, false);
  }
  target.__keyPath[key] = true;
  ob.dep.notify();
  return val
}

/**
 * Delete a property and trigger change if necessary.
 */
function del (target, key) {
  if (Array.isArray(target) && isValidArrayIndex(key)) {
    target.splice(key, 1);
    return
  }
  var ob = (target).__ob__;
  if (target._isVue || (ob && ob.vmCount)) {
    "production" !== 'production' && warn(
      'Avoid deleting properties on a Vue instance or its root $data ' +
      '- just set it to null.'
    );
    return
  }
  if (!hasOwn(target, key)) {
    return
  }
  delete target[key];
  if (!ob) {
    return
  }
  if (!target.__keyPath) {
    def(target, '__keyPath', {}, false);
  }
  // Vue.del 删除对象属性,渲染时候把这个属性设置为 undefined
  target.__keyPath[key] = 'del';
  ob.dep.notify();
}

/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray (value) {
  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
    e = value[i];
    e && e.__ob__ && e.__ob__.dep.depend();
    if (Array.isArray(e)) {
      dependArray(e);
    }
  }
}

/*  */

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
var strats = config.optionMergeStrategies;

/**
 * Options with restrictions
 */
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData (to, from) {
  if (!from) { return to }
  var key, toVal, fromVal;
  var keys = Object.keys(from);
  for (var i = 0; i < keys.length; i++) {
    key = keys[i];
    toVal = to[key];
    fromVal = from[key];
    if (!hasOwn(to, key)) {
      set(to, key, fromVal);
    } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {
      mergeData(toVal, fromVal);
    }
  }
  return to
}

/**
 * Data
 */
function mergeDataOrFn (
  parentVal,
  childVal,
  vm
) {
  if (!vm) {
    // in a Vue.extend merge, both should be functions
    if (!childVal) {
      return parentVal
    }
    if (!parentVal) {
      return childVal
    }
    // when parentVal & childVal are both present,
    // we need to return a function that returns the
    // merged result of both functions... no need to
    // check if parentVal is a function here because
    // it has to be a function to pass previous merges.
    return function mergedDataFn () {
      return mergeData(
        typeof childVal === 'function' ? childVal.call(this) : childVal,
        parentVal.call(this)
      )
    }
  } else if (parentVal || childVal) {
    return function mergedInstanceDataFn () {
      // instance merge
      var instanceData = typeof childVal === 'function'
        ? childVal.call(vm)
        : childVal;
      var defaultData = typeof parentVal === 'function'
        ? parentVal.call(vm)
        : undefined;
      if (instanceData) {
        return mergeData(instanceData, defaultData)
      } else {
        return defaultData
      }
    }
  }
}

strats.data = function (
  parentVal,
  childVal,
  vm
) {
  if (!vm) {
    if (childVal && typeof childVal !== 'function') {
      "production" !== 'production' && warn(
        'The "data" option should be a function ' +
        'that returns a per-instance value in component ' +
        'definitions.',
        vm
      );

      return parentVal
    }
    return mergeDataOrFn.call(this, parentVal, childVal)
  }

  return mergeDataOrFn(parentVal, childVal, vm)
};

/**
 * Hooks and props are merged as arrays.
 */
function mergeHook (
  parentVal,
  childVal
) {
  return childVal
    ? parentVal
      ? parentVal.concat(childVal)
      : Array.isArray(childVal)
        ? childVal
        : [childVal]
    : parentVal
}

LIFECYCLE_HOOKS.forEach(function (hook) {
  strats[hook] = mergeHook;
});

/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets (parentVal, childVal) {
  var res = Object.create(parentVal || null);
  return childVal
    ? extend(res, childVal)
    : res
}

ASSET_TYPES.forEach(function (type) {
  strats[type + 's'] = mergeAssets;
});

/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal) {
  // work around Firefox's Object.prototype.watch...
  if (parentVal === nativeWatch) { parentVal = undefined; }
  if (childVal === nativeWatch) { childVal = undefined; }
  /* istanbul ignore if */
  if (!childVal) { return Object.create(parentVal || null) }
  if (!parentVal) { return childVal }
  var ret = {};
  extend(ret, parentVal);
  for (var key in childVal) {
    var parent = ret[key];
    var child = childVal[key];
    if (parent && !Array.isArray(parent)) {
      parent = [parent];
    }
    ret[key] = parent
      ? parent.concat(child)
      : Array.isArray(child) ? child : [child];
  }
  return ret
};

/**
 * Other object hashes.
 */
strats.props =
strats.methods =
strats.inject =
strats.computed = function (parentVal, childVal) {
  if (!childVal) { return Object.create(parentVal || null) }
  if (!parentVal) { return childVal }
  var ret = Object.create(null);
  extend(ret, parentVal);
  extend(ret, childVal);
  return ret
};
strats.provide = mergeDataOrFn;

/**
 * Default strategy.
 */
var defaultStrat = function (parentVal, childVal) {
  return childVal === undefined
    ? parentVal
    : childVal
};

/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps (options) {
  var props = options.props;
  if (!props) { return }
  var res = {};
  var i, val, name;
  if (Array.isArray(props)) {
    i = props.length;
    while (i--) {
      val = props[i];
      if (typeof val === 'string') {
        name = camelize(val);
        res[name] = { type: null };
      } else {}
    }
  } else if (isPlainObject(props)) {
    for (var key in props) {
      val = props[key];
      name = camelize(key);
      res[name] = isPlainObject(val)
        ? val
        : { type: val };
    }
  }
  options.props = res;
}

/**
 * Normalize all injections into Object-based format
 */
function normalizeInject (options) {
  var inject = options.inject;
  if (Array.isArray(inject)) {
    var normalized = options.inject = {};
    for (var i = 0; i < inject.length; i++) {
      normalized[inject[i]] = inject[i];
    }
  }
}

/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives (options) {
  var dirs = options.directives;
  if (dirs) {
    for (var key in dirs) {
      var def = dirs[key];
      if (typeof def === 'function') {
        dirs[key] = { bind: def, update: def };
      }
    }
  }
}

/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions (
  parent,
  child,
  vm
) {
  if (typeof child === 'function') {
    child = child.options;
  }

  normalizeProps(child);
  normalizeInject(child);
  normalizeDirectives(child);
  var extendsFrom = child.extends;
  if (extendsFrom) {
    parent = mergeOptions(parent, extendsFrom, vm);
  }
  if (child.mixins) {
    for (var i = 0, l = child.mixins.length; i < l; i++) {
      parent = mergeOptions(parent, child.mixins[i], vm);
    }
  }
  var options = {};
  var key;
  for (key in parent) {
    mergeField(key);
  }
  for (key in child) {
    if (!hasOwn(parent, key)) {
      mergeField(key);
    }
  }
  function mergeField (key) {
    var strat = strats[key] || defaultStrat;
    options[key] = strat(parent[key], child[key], vm, key);
  }
  return options
}

/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset (
  options,
  type,
  id,
  warnMissing
) {
  /* istanbul ignore if */
  if (typeof id !== 'string') {
    return
  }
  var assets = options[type];
  // check local registration variations first
  if (hasOwn(assets, id)) { return assets[id] }
  var camelizedId = camelize(id);
  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
  var PascalCaseId = capitalize(camelizedId);
  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
  // fallback to prototype chain
  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
  if ("production" !== 'production' && warnMissing && !res) {
    warn(
      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
      options
    );
  }
  return res
}

/*  */

function validateProp (
  key,
  propOptions,
  propsData,
  vm
) {
  var prop = propOptions[key];
  var absent = !hasOwn(propsData, key);
  var value = propsData[key];
  // handle boolean props
  if (isType(Boolean, prop.type)) {
    if (absent && !hasOwn(prop, 'default')) {
      value = false;
    } else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) {
      value = true;
    }
  }
  // check default value
  if (value === undefined) {
    value = getPropDefaultValue(vm, prop, key);
    // since the default value is a fresh copy,
    // make sure to observe it.
    var prevShouldConvert = observerState.shouldConvert;
    observerState.shouldConvert = true;
    observe(value);
    observerState.shouldConvert = prevShouldConvert;
  }
  return value
}

/**
 * Get the default value of a prop.
 */
function getPropDefaultValue (vm, prop, key) {
  // no default, return undefined
  if (!hasOwn(prop, 'default')) {
    return undefined
  }
  var def = prop.default;
  // warn against non-factory defaults for Object & Array
  if ("production" !== 'production' && isObject(def)) {
    warn(
      'Invalid default value for prop "' + key + '": ' +
      'Props with type Object/Array must use a factory function ' +
      'to return the default value.',
      vm
    );
  }
  // the raw prop value was also undefined from previous render,
  // return previous default value to avoid unnecessary watcher trigger
  if (vm && vm.$options.propsData &&
    vm.$options.propsData[key] === undefined &&
    vm._props[key] !== undefined
  ) {
    return vm._props[key]
  }
  // call factory function for non-Function types
  // a value is Function if its prototype is function even across different execution context
  return typeof def === 'function' && getType(prop.type) !== 'Function'
    ? def.call(vm)
    : def
}

/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType (fn) {
  var match = fn && fn.toString().match(/^\s*function (\w+)/);
  return match ? match[1] : ''
}

function isType (type, fn) {
  if (!Array.isArray(fn)) {
    return getType(fn) === getType(type)
  }
  for (var i = 0, len = fn.length; i < len; i++) {
    if (getType(fn[i]) === getType(type)) {
      return true
    }
  }
  /* istanbul ignore next */
  return false
}

/*  */

/* not type checking this file because flow doesn't play well with Proxy */

var mark;
var measure;

/*  */

var VNode = function VNode (
  tag,
  data,
  children,
  text,
  elm,
  context,
  componentOptions,
  asyncFactory
) {
  this.tag = tag;
  this.data = data;
  this.children = children;
  this.text = text;
  this.elm = elm;
  this.ns = undefined;
  this.context = context;
  this.functionalContext = undefined;
  this.key = data && data.key;
  this.componentOptions = componentOptions;
  this.componentInstance = undefined;
  this.parent = undefined;
  this.raw = false;
  this.isStatic = false;
  this.isRootInsert = true;
  this.isComment = false;
  this.isCloned = false;
  this.isOnce = false;
  this.asyncFactory = asyncFactory;
  this.asyncMeta = undefined;
  this.isAsyncPlaceholder = false;
};

var prototypeAccessors = { child: {} };

// DEPRECATED: alias for componentInstance for backwards compat.
/* istanbul ignore next */
prototypeAccessors.child.get = function () {
  return this.componentInstance
};

Object.defineProperties( VNode.prototype, prototypeAccessors );

var createEmptyVNode = function (text) {
  if ( text === void 0 ) text = '';

  var node = new VNode();
  node.text = text;
  node.isComment = true;
  return node
};

function createTextVNode (val) {
  return new VNode(undefined, undefined, undefined, String(val))
}

// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode (vnode) {
  var cloned = new VNode(
    vnode.tag,
    vnode.data,
    vnode.children,
    vnode.text,
    vnode.elm,
    vnode.context,
    vnode.componentOptions,
    vnode.asyncFactory
  );
  cloned.ns = vnode.ns;
  cloned.isStatic = vnode.isStatic;
  cloned.key = vnode.key;
  cloned.isComment = vnode.isComment;
  cloned.isCloned = true;
  return cloned
}

function cloneVNodes (vnodes) {
  var len = vnodes.length;
  var res = new Array(len);
  for (var i = 0; i < len; i++) {
    res[i] = cloneVNode(vnodes[i]);
  }
  return res
}

/*  */

var normalizeEvent = cached(function (name) {
  var passive = name.charAt(0) === '&';
  name = passive ? name.slice(1) : name;
  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
  name = once$$1 ? name.slice(1) : name;
  var capture = name.charAt(0) === '!';
  name = capture ? name.slice(1) : name;
  return {
    name: name,
    once: once$$1,
    capture: capture,
    passive: passive
  }
});

function createFnInvoker (fns) {
  function invoker () {
    var arguments$1 = arguments;

    var fns = invoker.fns;
    if (Array.isArray(fns)) {
      var cloned = fns.slice();
      for (var i = 0; i < cloned.length; i++) {
        cloned[i].apply(null, arguments$1);
      }
    } else {
      // return handler return value for single handlers
      return fns.apply(null, arguments)
    }
  }
  invoker.fns = fns;
  return invoker
}

function updateListeners (
  on,
  oldOn,
  add,
  remove$$1,
  vm
) {
  var name, cur, old, event;
  for (name in on) {
    cur = on[name];
    old = oldOn[name];
    event = normalizeEvent(name);
    if (isUndef(cur)) {
      "production" !== 'production' && warn(
        "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
        vm
      );
    } else if (isUndef(old)) {
      if (isUndef(cur.fns)) {
        cur = on[name] = createFnInvoker(cur);
      }
      add(event.name, cur, event.once, event.capture, event.passive);
    } else if (cur !== old) {
      old.fns = cur;
      on[name] = old;
    }
  }
  for (name in oldOn) {
    if (isUndef(on[name])) {
      event = normalizeEvent(name);
      remove$$1(event.name, oldOn[name], event.capture);
    }
  }
}

/*  */

/*  */

function extractPropsFromVNodeData (
  data,
  Ctor,
  tag
) {
  // we are only extracting raw values here.
  // validation and default values are handled in the child
  // component itself.
  var propOptions = Ctor.options.props;
  if (isUndef(propOptions)) {
    return
  }
  var res = {};
  var attrs = data.attrs;
  var props = data.props;
  if (isDef(attrs) || isDef(props)) {
    for (var key in propOptions) {
      var altKey = hyphenate(key);
      checkProp(res, props, key, altKey, true) ||
      checkProp(res, attrs, key, altKey, false);
    }
  }
  return res
}

function checkProp (
  res,
  hash,
  key,
  altKey,
  preserve
) {
  if (isDef(hash)) {
    if (hasOwn(hash, key)) {
      res[key] = hash[key];
      if (!preserve) {
        delete hash[key];
      }
      return true
    } else if (hasOwn(hash, altKey)) {
      res[key] = hash[altKey];
      if (!preserve) {
        delete hash[altKey];
      }
      return true
    }
  }
  return false
}

/*  */

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:

// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren (children) {
  for (var i = 0; i < children.length; i++) {
    if (Array.isArray(children[i])) {
      return Array.prototype.concat.apply([], children)
    }
  }
  return children
}

// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren (children) {
  return isPrimitive(children)
    ? [createTextVNode(children)]
    : Array.isArray(children)
      ? normalizeArrayChildren(children)
      : undefined
}

function isTextNode (node) {
  return isDef(node) && isDef(node.text) && isFalse(node.isComment)
}

function normalizeArrayChildren (children, nestedIndex) {
  var res = [];
  var i, c, last;
  for (i = 0; i < children.length; i++) {
    c = children[i];
    if (isUndef(c) || typeof c === 'boolean') { continue }
    last = res[res.length - 1];
    //  nested
    if (Array.isArray(c)) {
      res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
    } else if (isPrimitive(c)) {
      if (isTextNode(last)) {
        // merge adjacent text nodes
        // this is necessary for SSR hydration because text nodes are
        // essentially merged when rendered to HTML strings
        (last).text += String(c);
      } else if (c !== '') {
        // convert primitive to vnode
        res.push(createTextVNode(c));
      }
    } else {
      if (isTextNode(c) && isTextNode(last)) {
        // merge adjacent text nodes
        res[res.length - 1] = createTextVNode(last.text + c.text);
      } else {
        // default key for nested array children (likely generated by v-for)
        if (isTrue(children._isVList) &&
          isDef(c.tag) &&
          isUndef(c.key) &&
          isDef(nestedIndex)) {
          c.key 
Download .txt
gitextract_me0evg8s/

├── .babelrc
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .flowconfig
├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── COMMIT_CONVENTION.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug_report.md
│   │   └── Feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── issue_template.yml
│   └── stale.yml
├── .gitignore
├── BACKERS.md
├── LICENSE
├── README.md
├── benchmarks/
│   ├── big-table/
│   │   ├── demo.css
│   │   ├── index.html
│   │   └── style.css
│   ├── dbmon/
│   │   ├── ENV.js
│   │   ├── app.js
│   │   ├── index.html
│   │   └── lib/
│   │       ├── memory-stats.js
│   │       ├── monitor.js
│   │       └── styles.css
│   ├── reorder-list/
│   │   └── index.html
│   ├── ssr/
│   │   ├── README.md
│   │   ├── common.js
│   │   ├── renderToStream.js
│   │   └── renderToString.js
│   ├── svg/
│   │   └── index.html
│   └── uptime/
│       └── index.html
├── build/
│   ├── alias.js
│   ├── build.js
│   ├── ci.sh
│   ├── config.js
│   ├── gen-release-note.js
│   ├── get-weex-version.js
│   ├── git-hooks/
│   │   ├── commit-msg
│   │   └── pre-commit
│   ├── install-hooks.js
│   ├── release-weex.sh
│   └── release.sh
├── circle.yml
├── dist/
│   └── README.md
├── examples/
│   ├── commits/
│   │   ├── app.js
│   │   └── index.html
│   ├── elastic-header/
│   │   ├── index.html
│   │   └── style.css
│   ├── firebase/
│   │   ├── app.js
│   │   ├── index.html
│   │   └── style.css
│   ├── grid/
│   │   ├── grid.js
│   │   ├── index.html
│   │   └── style.css
│   ├── markdown/
│   │   ├── index.html
│   │   └── style.css
│   ├── modal/
│   │   ├── index.html
│   │   └── style.css
│   ├── move-animations/
│   │   └── index.html
│   ├── select2/
│   │   └── index.html
│   ├── svg/
│   │   ├── index.html
│   │   ├── style.css
│   │   └── svg.js
│   ├── todomvc/
│   │   ├── app.js
│   │   ├── index.html
│   │   └── readme.md
│   └── tree/
│       ├── index.html
│       └── tree.js
├── flow/
│   ├── compiler.js
│   ├── component.js
│   ├── global-api.js
│   ├── modules.js
│   ├── options.js
│   ├── ssr.js
│   └── vnode.js
├── package.json
├── packages/
│   ├── mpvue/
│   │   ├── README.md
│   │   ├── index.js
│   │   └── package.json
│   ├── mpvue-template-compiler/
│   │   ├── README.md
│   │   ├── build.js
│   │   ├── index.js
│   │   └── package.json
│   ├── vue-server-renderer/
│   │   ├── README.md
│   │   ├── index.js
│   │   ├── package.json
│   │   └── types/
│   │       ├── index.d.ts
│   │       ├── test.ts
│   │       └── tsconfig.json
│   ├── vue-template-compiler/
│   │   ├── README.md
│   │   ├── index.js
│   │   └── package.json
│   ├── weex-template-compiler/
│   │   ├── README.md
│   │   ├── build.js
│   │   ├── index.js
│   │   └── package.json
│   └── weex-vue-framework/
│       ├── README.md
│       ├── factory.js
│       ├── index.js
│       └── package.json
├── src/
│   ├── compiler/
│   │   ├── codegen/
│   │   │   ├── events.js
│   │   │   └── index.js
│   │   ├── create-compiler.js
│   │   ├── directives/
│   │   │   ├── bind.js
│   │   │   ├── index.js
│   │   │   ├── model.js
│   │   │   └── on.js
│   │   ├── error-detector.js
│   │   ├── helpers.js
│   │   ├── index.js
│   │   ├── optimizer.js
│   │   ├── parser/
│   │   │   ├── entity-decoder.js
│   │   │   ├── filter-parser.js
│   │   │   ├── html-parser.js
│   │   │   ├── index.js
│   │   │   └── text-parser.js
│   │   └── to-function.js
│   ├── core/
│   │   ├── components/
│   │   │   ├── index.js
│   │   │   └── keep-alive.js
│   │   ├── config.js
│   │   ├── global-api/
│   │   │   ├── assets.js
│   │   │   ├── extend.js
│   │   │   ├── index.js
│   │   │   ├── mixin.js
│   │   │   └── use.js
│   │   ├── index.js
│   │   ├── instance/
│   │   │   ├── events.js
│   │   │   ├── index.js
│   │   │   ├── init.js
│   │   │   ├── inject.js
│   │   │   ├── lifecycle.js
│   │   │   ├── proxy.js
│   │   │   ├── render-helpers/
│   │   │   │   ├── bind-object-listeners.js
│   │   │   │   ├── bind-object-props.js
│   │   │   │   ├── check-keycodes.js
│   │   │   │   ├── render-list.js
│   │   │   │   ├── render-slot.js
│   │   │   │   ├── render-static.js
│   │   │   │   ├── resolve-filter.js
│   │   │   │   └── resolve-slots.js
│   │   │   ├── render.js
│   │   │   └── state.js
│   │   ├── observer/
│   │   │   ├── array.js
│   │   │   ├── dep.js
│   │   │   ├── index.js
│   │   │   ├── scheduler.js
│   │   │   └── watcher.js
│   │   ├── util/
│   │   │   ├── debug.js
│   │   │   ├── env.js
│   │   │   ├── error.js
│   │   │   ├── index.js
│   │   │   ├── lang.js
│   │   │   ├── options.js
│   │   │   ├── perf.js
│   │   │   └── props.js
│   │   └── vdom/
│   │       ├── create-component.js
│   │       ├── create-element.js
│   │       ├── create-functional-component.js
│   │       ├── helpers/
│   │       │   ├── extract-props.js
│   │       │   ├── get-first-component-child.js
│   │       │   ├── index.js
│   │       │   ├── merge-hook.js
│   │       │   ├── normalize-children.js
│   │       │   ├── resolve-async-component.js
│   │       │   └── update-listeners.js
│   │       ├── modules/
│   │       │   ├── directives.js
│   │       │   ├── index.js
│   │       │   └── ref.js
│   │       ├── patch.js
│   │       └── vnode.js
│   ├── platforms/
│   │   ├── mp/
│   │   │   ├── compiler/
│   │   │   │   ├── common/
│   │   │   │   │   ├── babel-plugins.js
│   │   │   │   │   ├── config.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── tag.js
│   │   │   │   │   ├── generate.js
│   │   │   │   │   ├── tagMap.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── create-compiler.js
│   │   │   │   ├── directives/
│   │   │   │   │   ├── html.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── model.js
│   │   │   │   │   └── text.js
│   │   │   │   ├── index.js
│   │   │   │   ├── mark-component.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── style.js
│   │   │   │   ├── my/
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── astMap.js
│   │   │   │   │   │   └── directiveMap.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── attrs.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── for.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── options.js
│   │   │   │   ├── swan/
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── astMap.js
│   │   │   │   │   │   └── directiveMap.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── attrs.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── for.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── tt/
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── astMap.js
│   │   │   │   │   │   └── directiveMap.js
│   │   │   │   │   ├── convert/
│   │   │   │   │   │   ├── attrs.js
│   │   │   │   │   │   ├── component.js
│   │   │   │   │   │   ├── for.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── util.js
│   │   │   │   └── wx/
│   │   │   │       ├── config/
│   │   │   │       │   ├── astMap.js
│   │   │   │       │   └── directiveMap.js
│   │   │   │       ├── convert/
│   │   │   │       │   ├── attrs.js
│   │   │   │       │   ├── component.js
│   │   │   │       │   ├── for.js
│   │   │   │       │   └── index.js
│   │   │   │       └── index.js
│   │   │   ├── entry-compiler.js
│   │   │   ├── entry-runtime.js
│   │   │   ├── join-code-in-build.js
│   │   │   ├── runtime/
│   │   │   │   ├── diff-data.js
│   │   │   │   ├── events.js
│   │   │   │   ├── index.js
│   │   │   │   ├── lifecycle.js
│   │   │   │   ├── node-ops.js
│   │   │   │   ├── patch.js
│   │   │   │   ├── render.js
│   │   │   │   └── runtime-trace.js
│   │   │   └── util/
│   │   │       └── index.js
│   │   ├── web/
│   │   │   ├── compiler/
│   │   │   │   ├── directives/
│   │   │   │   │   ├── html.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── model.js
│   │   │   │   │   └── text.js
│   │   │   │   ├── index.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── style.js
│   │   │   │   ├── options.js
│   │   │   │   └── util.js
│   │   │   ├── entry-compiler.js
│   │   │   ├── entry-runtime-with-compiler.js
│   │   │   ├── entry-runtime.js
│   │   │   ├── entry-server-basic-renderer.js
│   │   │   ├── entry-server-renderer.js
│   │   │   ├── runtime/
│   │   │   │   ├── class-util.js
│   │   │   │   ├── components/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── transition-group.js
│   │   │   │   │   └── transition.js
│   │   │   │   ├── directives/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── model.js
│   │   │   │   │   └── show.js
│   │   │   │   ├── index.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── attrs.js
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── dom-props.js
│   │   │   │   │   ├── events.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── style.js
│   │   │   │   │   └── transition.js
│   │   │   │   ├── node-ops.js
│   │   │   │   ├── patch.js
│   │   │   │   └── transition-util.js
│   │   │   ├── server/
│   │   │   │   ├── compiler.js
│   │   │   │   ├── directives/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── show.js
│   │   │   │   ├── modules/
│   │   │   │   │   ├── attrs.js
│   │   │   │   │   ├── class.js
│   │   │   │   │   ├── dom-props.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── style.js
│   │   │   │   └── util.js
│   │   │   └── util/
│   │   │       ├── attrs.js
│   │   │       ├── class.js
│   │   │       ├── compat.js
│   │   │       ├── element.js
│   │   │       ├── index.js
│   │   │       └── style.js
│   │   └── weex/
│   │       ├── compiler/
│   │       │   ├── directives/
│   │       │   │   ├── index.js
│   │       │   │   └── model.js
│   │       │   ├── index.js
│   │       │   └── modules/
│   │       │       ├── append.js
│   │       │       ├── class.js
│   │       │       ├── index.js
│   │       │       ├── props.js
│   │       │       └── style.js
│   │       ├── entry-compiler.js
│   │       ├── entry-framework.js
│   │       ├── entry-runtime-factory.js
│   │       ├── runtime/
│   │       │   ├── components/
│   │       │   │   ├── index.js
│   │       │   │   ├── transition-group.js
│   │       │   │   └── transition.js
│   │       │   ├── directives/
│   │       │   │   └── index.js
│   │       │   ├── index.js
│   │       │   ├── modules/
│   │       │   │   ├── attrs.js
│   │       │   │   ├── class.js
│   │       │   │   ├── events.js
│   │       │   │   ├── index.js
│   │       │   │   ├── style.js
│   │       │   │   └── transition.js
│   │       │   ├── node-ops.js
│   │       │   ├── patch.js
│   │       │   └── text-node.js
│   │       └── util/
│   │           └── index.js
│   ├── server/
│   │   ├── bundle-renderer/
│   │   │   ├── create-bundle-renderer.js
│   │   │   ├── create-bundle-runner.js
│   │   │   └── source-map-support.js
│   │   ├── create-basic-renderer.js
│   │   ├── create-renderer.js
│   │   ├── optimizing-compiler/
│   │   │   ├── codegen.js
│   │   │   ├── index.js
│   │   │   ├── modules.js
│   │   │   ├── optimizer.js
│   │   │   └── runtime-helpers.js
│   │   ├── render-context.js
│   │   ├── render-stream.js
│   │   ├── render.js
│   │   ├── template-renderer/
│   │   │   ├── create-async-file-mapper.js
│   │   │   ├── index.js
│   │   │   ├── parse-template.js
│   │   │   └── template-stream.js
│   │   ├── util.js
│   │   ├── webpack-plugin/
│   │   │   ├── client.js
│   │   │   ├── server.js
│   │   │   └── util.js
│   │   └── write.js
│   ├── sfc/
│   │   └── parser.js
│   └── shared/
│       ├── constants.js
│       └── util.js
├── test/
│   ├── e2e/
│   │   ├── .eslintrc
│   │   ├── nightwatch.config.js
│   │   ├── runner.js
│   │   └── specs/
│   │       ├── commits.js
│   │       ├── grid.js
│   │       ├── markdown.js
│   │       ├── modal.js
│   │       ├── select2.js
│   │       ├── svg.js
│   │       ├── todomvc.js
│   │       └── tree.js
│   ├── helpers/
│   │   ├── .eslintrc
│   │   ├── classlist.js
│   │   ├── test-object-option.js
│   │   ├── to-equal.js
│   │   ├── to-have-been-warned.js
│   │   ├── trigger-event.js
│   │   ├── vdom.js
│   │   └── wait-for-update.js
│   ├── mp/
│   │   ├── .eslintrc
│   │   ├── compiler/
│   │   │   └── index.spec.js
│   │   ├── helpers/
│   │   │   ├── index.js
│   │   │   └── mp.runtime.js
│   │   ├── jasmine.json
│   │   └── runtime/
│   │       ├── events.spec.js
│   │       ├── instance.spec.js
│   │       └── lifecycle.spec.js
│   ├── ssr/
│   │   ├── .eslintrc
│   │   ├── async-loader.js
│   │   ├── compile-with-webpack.js
│   │   ├── fixtures/
│   │   │   ├── app.js
│   │   │   ├── async-bar.js
│   │   │   ├── async-foo.js
│   │   │   ├── cache.js
│   │   │   ├── error.js
│   │   │   ├── nested-cache.js
│   │   │   ├── split.js
│   │   │   └── test.css
│   │   ├── jasmine.json
│   │   ├── ssr-basic-renderer.spec.js
│   │   ├── ssr-bundle-render.spec.js
│   │   ├── ssr-stream.spec.js
│   │   ├── ssr-string.spec.js
│   │   └── ssr-template.spec.js
│   ├── unit/
│   │   ├── .eslintrc
│   │   ├── features/
│   │   │   ├── component/
│   │   │   │   ├── component-async.spec.js
│   │   │   │   ├── component-keep-alive.spec.js
│   │   │   │   ├── component-scoped-slot.spec.js
│   │   │   │   ├── component-slot.spec.js
│   │   │   │   └── component.spec.js
│   │   │   ├── debug.spec.js
│   │   │   ├── directives/
│   │   │   │   ├── bind.spec.js
│   │   │   │   ├── class.spec.js
│   │   │   │   ├── cloak.spec.js
│   │   │   │   ├── for.spec.js
│   │   │   │   ├── html.spec.js
│   │   │   │   ├── if.spec.js
│   │   │   │   ├── model-checkbox.spec.js
│   │   │   │   ├── model-component.spec.js
│   │   │   │   ├── model-dynamic.spec.js
│   │   │   │   ├── model-file.spec.js
│   │   │   │   ├── model-parse.spec.js
│   │   │   │   ├── model-radio.spec.js
│   │   │   │   ├── model-select.spec.js
│   │   │   │   ├── model-text.spec.js
│   │   │   │   ├── on.spec.js
│   │   │   │   ├── once.spec.js
│   │   │   │   ├── pre.spec.js
│   │   │   │   ├── show.spec.js
│   │   │   │   ├── static-style-parser.spec.js
│   │   │   │   ├── style.spec.js
│   │   │   │   └── text.spec.js
│   │   │   ├── error-handling.spec.js
│   │   │   ├── filter/
│   │   │   │   └── filter.spec.js
│   │   │   ├── global-api/
│   │   │   │   ├── assets.spec.js
│   │   │   │   ├── compile.spec.js
│   │   │   │   ├── config.spec.js
│   │   │   │   ├── extend.spec.js
│   │   │   │   ├── mixin.spec.js
│   │   │   │   ├── set-delete.spec.js
│   │   │   │   └── use.spec.js
│   │   │   ├── instance/
│   │   │   │   ├── init.spec.js
│   │   │   │   ├── methods-data.spec.js
│   │   │   │   ├── methods-events.spec.js
│   │   │   │   ├── methods-lifecycle.spec.js
│   │   │   │   ├── properties.spec.js
│   │   │   │   └── render-proxy.spec.js
│   │   │   ├── options/
│   │   │   │   ├── _scopeId.spec.js
│   │   │   │   ├── comments.spec.js
│   │   │   │   ├── components.spec.js
│   │   │   │   ├── computed.spec.js
│   │   │   │   ├── data.spec.js
│   │   │   │   ├── delimiters.spec.js
│   │   │   │   ├── directives.spec.js
│   │   │   │   ├── el.spec.js
│   │   │   │   ├── extends.spec.js
│   │   │   │   ├── functional.spec.js
│   │   │   │   ├── inheritAttrs.spec.js
│   │   │   │   ├── inject.spec.js
│   │   │   │   ├── lifecycle.spec.js
│   │   │   │   ├── methods.spec.js
│   │   │   │   ├── mixins.spec.js
│   │   │   │   ├── name.spec.js
│   │   │   │   ├── parent.spec.js
│   │   │   │   ├── props.spec.js
│   │   │   │   ├── propsData.spec.js
│   │   │   │   ├── render.spec.js
│   │   │   │   ├── renderError.spec.js
│   │   │   │   ├── template.spec.js
│   │   │   │   └── watch.spec.js
│   │   │   ├── ref.spec.js
│   │   │   └── transition/
│   │   │       ├── inject-styles.js
│   │   │       ├── transition-group.spec.js
│   │   │       ├── transition-mode.spec.js
│   │   │       └── transition.spec.js
│   │   ├── index.js
│   │   ├── karma.base.config.js
│   │   ├── karma.cover.config.js
│   │   ├── karma.dev.config.js
│   │   ├── karma.sauce.config.js
│   │   ├── karma.unit.config.js
│   │   └── modules/
│   │       ├── compiler/
│   │       │   ├── codegen.spec.js
│   │       │   ├── compiler-options.spec.js
│   │       │   ├── optimizer.spec.js
│   │       │   └── parser.spec.js
│   │       ├── observer/
│   │       │   ├── observer.spec.js
│   │       │   ├── scheduler.spec.js
│   │       │   └── watcher.spec.js
│   │       ├── server-compiler/
│   │       │   └── optimizer.spec.js
│   │       ├── sfc/
│   │       │   └── sfc-parser.spec.js
│   │       ├── util/
│   │       │   └── next-tick.spec.js
│   │       └── vdom/
│   │           ├── create-component.spec.js
│   │           ├── create-element.spec.js
│   │           ├── modules/
│   │           │   ├── attrs.spec.js
│   │           │   ├── class.spec.js
│   │           │   ├── directive.spec.js
│   │           │   ├── dom-props.spec.js
│   │           │   ├── events.spec.js
│   │           │   └── style.spec.js
│   │           └── patch/
│   │               ├── children.spec.js
│   │               ├── edge-cases.spec.js
│   │               ├── element.spec.js
│   │               ├── hooks.spec.js
│   │               └── hydration.spec.js
│   └── weex/
│       ├── .eslintrc
│       ├── compiler/
│       │   ├── append.spec.js
│       │   ├── class.spec.js
│       │   ├── compile.spec.js
│       │   ├── props.spec.js
│       │   ├── style.spec.js
│       │   └── v-model.spec.js
│       ├── helpers/
│       │   └── index.js
│       ├── jasmine.json
│       └── runtime/
│           ├── attrs.spec.js
│           ├── class.spec.js
│           ├── events.spec.js
│           ├── framework.spec.js
│           ├── node.spec.js
│           └── style.spec.js
└── types/
    ├── index.d.ts
    ├── options.d.ts
    ├── plugin.d.ts
    ├── test/
    │   ├── augmentation-test.ts
    │   ├── options-test.ts
    │   ├── plugin-test.ts
    │   ├── tsconfig.json
    │   └── vue-test.ts
    ├── typings.json
    ├── vnode.d.ts
    └── vue.d.ts
Download .txt
SYMBOL INDEX (1796 symbols across 255 files)

FILE: benchmarks/dbmon/ENV.js
  function formatElapsed (line 11) | function formatElapsed(value) {
  function getElapsedClassName (line 23) | function getElapsedClassName(elapsed) {
  function countClassName (line 37) | function countClassName(queries) {
  function updateQuery (line 51) | function updateQuery(object) {
  function cleanQuery (line 70) | function cleanQuery(value) {
  function generateRow (line 86) | function generateRow(object, keepIdentity, counter) {
  function getData (line 135) | function getData(keepIdentity) {
  function mutations (line 177) | function mutations(value) {

FILE: benchmarks/dbmon/app.js
  function loadSamples (line 8) | function loadSamples() {

FILE: benchmarks/dbmon/lib/memory-stats.js
  function bytesToSize (line 89) | function bytesToSize( bytes, nFractDigit ){

FILE: benchmarks/ssr/common.js
  function generateGrid (line 12) | function generateGrid (rowCount, columnCount) {

FILE: build/build.js
  function build (line 30) | function build (builds) {
  function buildEntry (line 45) | function buildEntry (config) {
  function write (line 66) | function write (dest, code, zip) {
  function getSize (line 87) | function getSize (code) {
  function logError (line 91) | function logError (e) {
  function blue (line 95) | function blue (str) {

FILE: build/config.js
  method intro (line 22) | intro () {
  method outro (line 25) | outro () {
  function genConfig (line 183) | function genConfig (opts) {

FILE: build/gen-release-note.js
  method transform (line 9) | transform (pkg) {

FILE: examples/svg/svg.js
  function valueToPoint (line 48) | function valueToPoint (value, index, total) {

FILE: examples/todomvc/app.js
  function onHashChange (line 143) | function onHashChange () {

FILE: flow/modules.js
  class SourceMapGenerator (line 7) | class SourceMapGenerator {

FILE: packages/mpvue-template-compiler/build.js
  function _interopDefault (line 5) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  function isObject (line 37) | function isObject (obj) {
  function isPlainObject (line 47) | function isPlainObject (obj) {
  function isValidArrayIndex (line 56) | function isValidArrayIndex (val) {
  function makeMap (line 76) | function makeMap (
  function remove (line 103) | function remove (arr, item) {
  function hasOwn (line 116) | function hasOwn (obj, key) {
  function cached (line 123) | function cached (fn) {
  function extend (line 168) | function extend (to, _from) {
  function noop (line 185) | function noop (a, b, c) {}
  function genStaticKeys (line 200) | function genStaticKeys (modules) {
  function decodeAttr (line 303) | function decodeAttr (value, shouldDecodeNewlines) {
  function parseHTML (line 308) | function parseHTML (html, options) {
  function parseComponent (line 573) | function parseComponent (
  function mustUseProp (line 707) | function mustUseProp () { /* console.log('mustUseProp') */ }
  function getTagNamespace (line 708) | function getTagNamespace () { /* console.log('getTagNamespace') */ }
  function parseFilters (line 721) | function parseFilters (exp) {
  function wrapFilter (line 803) | function wrapFilter (exp, filter) {
  function parseText (line 826) | function parseText (
  function baseWarn (line 856) | function baseWarn (msg) {
  function pluckModuleFunction (line 860) | function pluckModuleFunction (
  function addProp (line 869) | function addProp (el, name, value) {
  function addAttr (line 873) | function addAttr (el, name, value) {
  function addDirective (line 877) | function addDirective (
  function addHandler (line 888) | function addHandler (
  function getBindingAttr (line 940) | function getBindingAttr (
  function getAndRemoveAttr (line 958) | function getAndRemoveAttr (el, name) {
  function transformNode (line 974) | function transformNode (el, options) {
  function genData (line 997) | function genData (el) {
  function transformNode$1 (line 1039) | function transformNode$1 (el, options) {
  function genData$1 (line 1064) | function genData$1 (el) {
  function genComponentModel (line 1212) | function genComponentModel (
  function genAssignmentCode (line 1244) | function genAssignmentCode (
  function parseModel (line 1277) | function parseModel (val) {
  function next (line 1305) | function next () {
  function eof (line 1309) | function eof () {
  function isStringStart (line 1313) | function isStringStart (chr) {
  function parseBracket (line 1317) | function parseBracket (chr) {
  function parseString (line 1335) | function parseString (chr) {
  function model (line 1354) | function model (
  function genCheckboxModel (line 1412) | function genCheckboxModel (
  function genRadioModel (line 1443) | function genRadioModel (
  function genSelect (line 1455) | function genSelect (
  function genDefaultModel (line 1472) | function genDefaultModel (
  function text (line 1511) | function text (el, dir) {
  function html (line 1519) | function html (el, dir) {
  function handleError (line 1666) | function handleError (err, vm, info) {
  function isNative (line 1735) | function isNative (Ctor) {
  function nextTickHandler (line 1751) | function nextTickHandler () {
  function Set (line 1837) | function Set () {
  function parse (line 1880) | function parse (
  function processPre (line 2123) | function processPre (el) {
  function processRawAttrs (line 2129) | function processRawAttrs (el) {
  function processKey (line 2145) | function processKey (el) {
  function processRef (line 2155) | function processRef (el) {
  function processFor (line 2163) | function processFor (el) {
  function processIf (line 2188) | function processIf (el) {
  function processIfConditions (line 2207) | function processIfConditions (el, parent) {
  function findPrevElement (line 2222) | function findPrevElement (children) {
  function addIfCondition (line 2239) | function addIfCondition (el, condition) {
  function processOnce (line 2246) | function processOnce (el) {
  function processSlot (line 2253) | function processSlot (el) {
  function processComponent (line 2274) | function processComponent (el) {
  function processAttrs (line 2284) | function processAttrs (el) {
  function checkInFor (line 2360) | function checkInFor (el) {
  function parseModifiers (line 2371) | function parseModifiers (name) {
  function makeAttrsMap (line 2380) | function makeAttrsMap (attrs) {
  function isTextTag (line 2395) | function isTextTag (el) {
  function isForbiddenTag (line 2399) | function isForbiddenTag (el) {
  function guardIESVGBug (line 2413) | function guardIESVGBug (attrs) {
  function checkForAliasModel (line 2425) | function checkForAliasModel (el, value) {
  function optimize (line 2459) | function optimize (root, options) {
  function genStaticKeys$1 (line 2469) | function genStaticKeys$1 (keys) {
  function markStatic (line 2476) | function markStatic (node) {
  function markStaticRoots (line 2508) | function markStaticRoots (node, isInFor) {
  function isStatic (line 2538) | function isStatic (node) {
  function isDirectChildOfTemplateFor (line 2555) | function isDirectChildOfTemplateFor (node) {
  function genHandlers (line 2604) | function genHandlers (
  function genHandler (line 2627) | function genHandler (
  function genKeyFilter (line 2677) | function genKeyFilter (keys) {
  function genFilterCode (line 2681) | function genFilterCode (key) {
  function def (line 2702) | function def (obj, key, val, enumerable) {
  function protoAugment (line 2859) | function protoAugment (target, src, keys) {
  function copyAugment (line 2870) | function copyAugment (target, src, keys) {
  function observe (line 2882) | function observe (value, asRootData, key) {
  function defineReactive$$1 (line 2907) | function defineReactive$$1 (
  function set (line 2978) | function set (target, key, val) {
  function dependArray (line 3019) | function dependArray (value) {
  function mergeData (line 3056) | function mergeData (to, from) {
  function mergeDataOrFn (line 3076) | function mergeDataOrFn (
  function mergeHook (line 3143) | function mergeHook (
  function mergeAssets (line 3167) | function mergeAssets (parentVal, childVal) {
  function on (line 3249) | function on (el, dir) {
  function bind$1 (line 3258) | function bind$1 (el, dir) {
  function generate$1 (line 3288) | function generate$1 (
  function genElement (line 3300) | function genElement (el, state) {
  function genStatic (line 3333) | function genStatic (el, state) {
  function genOnce (line 3340) | function genOnce (el, state) {
  function genIf (line 3366) | function genIf (
  function genIfConditions (line 3376) | function genIfConditions (
  function genFor (line 3403) | function genFor (
  function genData$2 (line 3435) | function genData$2 (el, state) {
  function genDirectives (line 3512) | function genDirectives (el, state) {
  function genInlineTemplate (line 3537) | function genInlineTemplate (el, state) {
  function genScopedSlots (line 3550) | function genScopedSlots (
  function genScopedSlot (line 3559) | function genScopedSlot (
  function genForScopedSlot (line 3573) | function genForScopedSlot (
  function genChildren (line 3589) | function genChildren (
  function getNormalizationType (line 3619) | function getNormalizationType (
  function needsNormalization (line 3642) | function needsNormalization (el) {
  function genNode (line 3646) | function genNode (node, state) {
  function genText (line 3656) | function genText (text) {
  function genComment (line 3662) | function genComment (comment) {
  function genSlot (line 3666) | function genSlot (el, state) {
  function genComponent (line 3685) | function genComponent (
  function genProps (line 3694) | function genProps (props) {
  function transformSpecialNewlines (line 3704) | function transformSpecialNewlines (text) {
  function detectErrors (line 3732) | function detectErrors (ast) {
  function checkNode (line 3740) | function checkNode (node, errors) {
  function checkEvent (line 3766) | function checkEvent (exp, text, errors) {
  function checkFor (line 3778) | function checkFor (node, text, errors) {
  function checkIdentifier (line 3785) | function checkIdentifier (ident, type, text, errors) {
  function checkExpression (line 3791) | function checkExpression (exp, text, errors) {
  function createFunction (line 3809) | function createFunction (code, errors) {
  function createCompileToFunctionFn (line 3818) | function createCompileToFunctionFn (compile) {
  function createCompilerCreator (line 3904) | function createCompilerCreator (baseCompile) {
  function maybeTag (line 4095) | function maybeTag (tagName) {
  function getWxEleId (line 4099) | function getWxEleId (index, arr) {
  function checkRepeatIterator (line 4109) | function checkRepeatIterator (arr, options) {
  function fixDefaultIterator (line 4116) | function fixDefaultIterator (path) {
  function addAttr$1 (line 4124) | function addAttr$1 (path, key, value, inVdom) {
  function mark (line 4143) | function mark (path, options, deps, iteratorArr) {
  function markComponent (line 4206) | function markComponent (ast, options) {
  function getStrByNode (line 4322) | function getStrByNode (node, onlyStr) {
  function transformObjectToTernaryOperator (line 4341) | function transformObjectToTernaryOperator (babel$$1) {
  function transformObjectToString (line 4361) | function transformObjectToString (babel$$1) {
  function transformDynamicClass (line 4365) | function transformDynamicClass (staticClass, clsBinding) {
  function transformDynamicStyle (line 4375) | function transformDynamicStyle (staticStyle, styleBinding) {
  function getSlotsName (line 4576) | function getSlotsName (obj) {
  function tmplateSlotsObj (line 4590) | function tmplateSlotsObj(obj) {
  function convertAst (line 4722) | function convertAst (node, options, util, conventRule) {
  function getAstCommon (line 4812) | function getAstCommon (compiled, options, log, conventRule) {
  function mpmlAst (line 4835) | function mpmlAst (compiled, options, log) {
  function convertAttr (line 4875) | function convertAttr (key, val) {
  function generateCode (line 4879) | function generateCode (nodeAst, options) {
  function compileToMPMLCommon (line 4914) | function compileToMPMLCommon (compiled, options, getAst) {
  function compileToMPML$1 (line 4941) | function compileToMPML$1 (compiled, options) {
  function transformDynamicClass$1 (line 5029) | function transformDynamicClass$1 (staticClass, clsBinding) {
  function transformDynamicStyle$1 (line 5039) | function transformDynamicStyle$1 (staticStyle, styleBinding) {
  function getSlotsName$1 (line 5256) | function getSlotsName$1 (obj) {
  function tmplateSlotsObj$1 (line 5268) | function tmplateSlotsObj$1 (obj) {
  function mpmlAst$1 (line 5346) | function mpmlAst$1 (compiled, options, log) {
  function compileToMPML$2 (line 5353) | function compileToMPML$2 (compiled, options) {
  function transformDynamicClass$2 (line 5441) | function transformDynamicClass$2 (staticClass, clsBinding) {
  function transformDynamicStyle$2 (line 5451) | function transformDynamicStyle$2 (staticStyle, styleBinding) {
  function getSlotsName$2 (line 5652) | function getSlotsName$2 (obj) {
  function tmplateSlotsObj$2 (line 5666) | function tmplateSlotsObj$2(obj) {
  function mpmlAst$2 (line 5741) | function mpmlAst$2 (compiled, options, log) {
  function compileToMPML$3 (line 5748) | function compileToMPML$3 (compiled, options) {
  function transformDynamicClass$3 (line 5837) | function transformDynamicClass$3 (staticClass, clsBinding) {
  function transformDynamicStyle$3 (line 5847) | function transformDynamicStyle$3 (staticStyle, styleBinding) {
  function getSlotsName$3 (line 6046) | function getSlotsName$3 (obj) {
  function tmplateSlotsObj$3 (line 6060) | function tmplateSlotsObj$3 (obj) {
  function mpmlAst$3 (line 6136) | function mpmlAst$3 (compiled, options, log) {
  function compileToMPML$4 (line 6143) | function compileToMPML$4 (compiled, options) {
  function compileToMPML (line 6149) | function compileToMPML (compiled, options, fileExt) {

FILE: packages/mpvue/index.js
  function isUndef (line 36) | function isUndef (v) {
  function isDef (line 40) | function isDef (v) {
  function isTrue (line 44) | function isTrue (v) {
  function isFalse (line 48) | function isFalse (v) {
  function isPrimitive (line 55) | function isPrimitive (value) {
  function isObject (line 64) | function isObject (obj) {
  function isPlainObject (line 74) | function isPlainObject (obj) {
  function isRegExp (line 78) | function isRegExp (v) {
  function isValidArrayIndex (line 85) | function isValidArrayIndex (val) {
  function toString (line 93) | function toString (val) {
  function toNumber (line 105) | function toNumber (val) {
  function makeMap (line 114) | function makeMap (
  function remove (line 141) | function remove (arr, item) {
  function hasOwn (line 154) | function hasOwn (obj, key) {
  function cached (line 161) | function cached (fn) {
  function bind (line 198) | function bind (fn, ctx) {
  function toArray (line 215) | function toArray (list, start) {
  function extend (line 228) | function extend (to, _from) {
  function toObject (line 238) | function toObject (arr) {
  function noop (line 253) | function noop (a, b, c) {}
  function looseEqual (line 274) | function looseEqual (a, b) {
  function looseIndexOf (line 291) | function looseIndexOf (arr, val) {
  function once (line 301) | function once (fn) {
  function isReserved (line 441) | function isReserved (str) {
  function def (line 449) | function def (obj, key, val, enumerable) {
  function parsePath (line 462) | function parsePath (path) {
  function handleError (line 484) | function handleError (err, vm, info) {
  function isNative (line 549) | function isNative (Ctor) {
  function nextTickHandler (line 565) | function nextTickHandler () {
  function Set (line 651) | function Set () {
  function pushTarget (line 710) | function pushTarget (_target) {
  function popTarget (line 715) | function popTarget () {
  function protoAugment (line 826) | function protoAugment (target, src, keys) {
  function copyAugment (line 837) | function copyAugment (target, src, keys) {
  function observe (line 849) | function observe (value, asRootData, key) {
  function defineReactive$$1 (line 874) | function defineReactive$$1 (
  function set (line 945) | function set (target, key, val) {
  function del (line 980) | function del (target, key) {
  function dependArray (line 1012) | function dependArray (value) {
  function mergeData (line 1037) | function mergeData (to, from) {
  function mergeDataOrFn (line 1057) | function mergeDataOrFn (
  function mergeHook (line 1124) | function mergeHook (
  function mergeAssets (line 1148) | function mergeAssets (parentVal, childVal) {
  function normalizeProps (line 1216) | function normalizeProps (options) {
  function normalizeInject (line 1245) | function normalizeInject (options) {
  function normalizeDirectives (line 1258) | function normalizeDirectives (options) {
  function mergeOptions (line 1274) | function mergeOptions (
  function resolveAsset (line 1317) | function resolveAsset (
  function validateProp (line 1347) | function validateProp (
  function getPropDefaultValue (line 1380) | function getPropDefaultValue (vm, prop, key) {
  function getType (line 1415) | function getType (fn) {
  function isType (line 1420) | function isType (type, fn) {
  function createTextVNode (line 1494) | function createTextVNode (val) {
  function cloneVNode (line 1502) | function cloneVNode (vnode) {
  function cloneVNodes (line 1521) | function cloneVNodes (vnodes) {
  function createFnInvoker (line 1547) | function createFnInvoker (fns) {
  function updateListeners (line 1566) | function updateListeners (
  function extractPropsFromVNodeData (line 1605) | function extractPropsFromVNodeData (
  function checkProp (line 1630) | function checkProp (
  function simpleNormalizeChildren (line 1669) | function simpleNormalizeChildren (children) {
  function normalizeChildren (line 1682) | function normalizeChildren (children) {
  function isTextNode (line 1690) | function isTextNode (node) {
  function normalizeArrayChildren (line 1694) | function normalizeArrayChildren (children, nestedIndex) {
  function ensureCtor (line 1735) | function ensureCtor (comp, base) {
  function createAsyncPlaceholder (line 1744) | function createAsyncPlaceholder (
  function resolveAsyncComponent (line 1757) | function resolveAsyncComponent (
  function getFirstComponentChild (line 1859) | function getFirstComponentChild (children) {
  function initEvents (line 1874) | function initEvents (vm) {
  function add (line 1886) | function add (event, fn, once$$1) {
  function remove$1 (line 1894) | function remove$1 (event, fn) {
  function updateComponentListeners (line 1898) | function updateComponentListeners (
  function eventsMixin (line 1907) | function eventsMixin (Vue) {
  function resolveSlots (line 2000) | function resolveSlots (
  function isWhitespace (line 2034) | function isWhitespace (node) {
  function resolveScopedSlots (line 2038) | function resolveScopedSlots (
  function initLifecycle (line 2058) | function initLifecycle (vm) {
  function lifecycleMixin (line 2084) | function lifecycleMixin (Vue) {
  function mountComponent (line 2174) | function mountComponent (
  function updateChildComponent (line 2223) | function updateChildComponent (
  function isInInactiveTree (line 2280) | function isInInactiveTree (vm) {
  function activateChildComponent (line 2287) | function activateChildComponent (vm, direct) {
  function deactivateChildComponent (line 2305) | function deactivateChildComponent (vm, direct) {
  function callHook (line 2321) | function callHook (vm, hook) {
  function resetSchedulerState (line 2353) | function resetSchedulerState () {
  function flushSchedulerQueue (line 2362) | function flushSchedulerQueue () {
  function callUpdatedHooks (line 2417) | function callUpdatedHooks (queue) {
  function queueActivatedComponent (line 2432) | function queueActivatedComponent (vm) {
  function callActivatedHooks (line 2439) | function callActivatedHooks (queue) {
  function queueWatcher (line 2451) | function queueWatcher (watcher) {
  function traverse (line 2687) | function traverse (val) {
  function _traverse (line 2692) | function _traverse (val, seen) {
  function proxy (line 2724) | function proxy (target, sourceKey, key) {
  function initState (line 2734) | function initState (vm) {
  function checkOptionType (line 2750) | function checkOptionType (vm, name) {
  function initProps (line 2760) | function initProps (vm, propsOptions) {
  function initData (line 2788) | function initData (vm) {
  function getData (line 2822) | function getData (data, vm) {
  function initComputed (line 2833) | function initComputed (vm, computed) {
  function defineComputed (line 2851) | function defineComputed (target, key, userDef) {
  function createComputedGetter (line 2868) | function createComputedGetter (key) {
  function initMethods (line 2883) | function initMethods (vm, methods) {
  function initWatch (line 2892) | function initWatch (vm, watch) {
  function createWatcher (line 2906) | function createWatcher (
  function stateMixin (line 2922) | function stateMixin (Vue) {
  function initProvide (line 2959) | function initProvide (vm) {
  function initInjections (line 2968) | function initInjections (vm) {
  function resolveInject (line 2982) | function resolveInject (inject, vm) {
  function createFunctionalComponent (line 3011) | function createFunctionalComponent (
  function mergeProps (line 3051) | function mergeProps (to, from) {
  function createComponent (line 3130) | function createComponent (
  function createComponentInstanceForVnode (line 3221) | function createComponentInstanceForVnode (
  function mergeHooks (line 3248) | function mergeHooks (data) {
  function mergeHook$1 (line 3260) | function mergeHook$1 (one, two) {
  function transformModel (line 3269) | function transformModel (options, data) {
  function createElement (line 3287) | function createElement (
  function _createElement (line 3306) | function _createElement (
  function applyNS (line 3386) | function applyNS (vnode, ns) {
  function renderList (line 3407) | function renderList (
  function renderSlot (line 3441) | function renderSlot (
  function resolveFilter (line 3474) | function resolveFilter (id) {
  function checkKeyCodes (line 3483) | function checkKeyCodes (
  function bindObjectProps (line 3501) | function bindObjectProps (
  function renderStatic (line 3555) | function renderStatic (
  function markOnce (line 3578) | function markOnce (
  function markStatic (line 3587) | function markStatic (
  function markStaticNode (line 3603) | function markStaticNode (node, key, isOnce) {
  function bindObjectListeners (line 3611) | function bindObjectListeners (data, value) {
  function initRender (line 3632) | function initRender (vm) {
  function renderMixin (line 3658) | function renderMixin (Vue) {
  function initMixin (line 3738) | function initMixin (Vue) {
  function initInternalComponent (line 3795) | function initInternalComponent (vm, options) {
  function resolveConstructorOptions (line 3812) | function resolveConstructorOptions (Ctor) {
  function resolveModifiedOptions (line 3836) | function resolveModifiedOptions (Ctor) {
  function dedupe (line 3850) | function dedupe (latest, extended, sealed) {
  function Vue$3 (line 3869) | function Vue$3 (options) {
  function initUse (line 3886) | function initUse (Vue) {
  function initMixin$1 (line 3908) | function initMixin$1 (Vue) {
  function initExtend (line 3917) | function initExtend (Vue) {
  function initProps$1 (line 3989) | function initProps$1 (Comp) {
  function initComputed$1 (line 3996) | function initComputed$1 (Comp) {
  function initAssetRegisters (line 4005) | function initAssetRegisters (Vue) {
  function getComponentName (line 4036) | function getComponentName (opts) {
  function matches (line 4040) | function matches (pattern, name) {
  function pruneCache (line 4052) | function pruneCache (cache, current, filter) {
  function pruneCacheEntry (line 4067) | function pruneCacheEntry (vnode) {
  function initGlobalAPI (line 4137) | function initGlobalAPI (Vue) {
  function mustUseProp (line 4220) | function mustUseProp () { /* console.log('mustUseProp') */ }
  function getTagNamespace (line 4221) | function getTagNamespace () { /* console.log('getTagNamespace') */ }
  function isUnknownElement (line 4222) | function isUnknownElement () { /* console.log('isUnknownElement') */ }
  function getComKey (line 4226) | function getComKey (vm) {
  function createElement$1 (line 4253) | function createElement$1 (tagName, vnode) {
  function createElementNS (line 4257) | function createElementNS (namespace, tagName) {
  function createTextNode (line 4261) | function createTextNode (text) {
  function createComment (line 4265) | function createComment (text) {
  function insertBefore (line 4269) | function insertBefore (parentNode, newNode, referenceNode) {}
  function removeChild (line 4271) | function removeChild (node, child) {}
  function appendChild (line 4273) | function appendChild (node, child) {}
  function parentNode (line 4275) | function parentNode (node) {
  function nextSibling (line 4279) | function nextSibling (node) {
  function tagName (line 4283) | function tagName (node) {
  function setTextContent (line 4287) | function setTextContent (node, text) {
  function setAttribute (line 4291) | function setAttribute (node, key, val) {
  function registerRef (line 4328) | function registerRef (vnode, isRemoval) {
  function sameVnode (line 4373) | function sameVnode (a, b) {
  function sameInputType (line 4392) | function sameInputType (a, b) {
  function createKeyToOldIdx (line 4400) | function createKeyToOldIdx (children, beginIdx, endIdx) {
  function createPatchFunction (line 4410) | function createPatchFunction (backend) {
  function patch (line 4976) | function patch () {
  function callHook$1 (line 4981) | function callHook$1 (vm, hook, params) {
  function getGlobalData (line 5013) | function getGlobalData (app, rootVueVM) {
  function normalizeProps$1 (line 5069) | function normalizeProps$1 (props, res, vm) {
  function normalizeProperties (line 5112) | function normalizeProperties (vm) {
  function initMpProps (line 5126) | function initMpProps (vm) {
  function initMP (line 5138) | function initMP (mpType, next) {
  function diffLog (line 5340) | function diffLog (updateData) {
  function getDeepData (line 5358) | function getDeepData (keyList, viewData) {
  function compareAndSetDeepData (line 5376) | function compareAndSetDeepData (key, newData, vm, data, forceUpdate) {
  function cleanKeyPath (line 5398) | function cleanKeyPath (vm) {
  function minifyDeepData (line 5406) | function minifyDeepData (rootKey, originKey, vmData, data, _mpValueSet, ...
  function getRootKey (line 5450) | function getRootKey (vm, rootKey) {
  function diffData (line 5460) | function diffData (vm, data) {
  function getVmData (line 5548) | function getVmData (vm) {
  function getParentComKey (line 5562) | function getParentComKey (vm, res) {
  function formatVmData (line 5575) | function formatVmData (vm) {
  function collectVmData (line 5588) | function collectVmData (vm, res) {
  function throttle (line 5608) | function throttle (func, wait, options) {
  function getPage (line 5651) | function getPage (vm) {
  function updateDataToMP (line 5666) | function updateDataToMP () {
  function initDataToMP (line 5677) | function initDataToMP () {
  function isVmKeyMatchedCompkey (line 5688) | function isVmKeyMatchedCompkey (k, comkey) {
  function getVM (line 5698) | function getVM (vm, comkeys) {
  function getHandle (line 5726) | function getHandle (vnode, eventid, eventTypes) {
  function getWebEventByMP (line 5772) | function getWebEventByMP (e) {
  function handleProxyWithVue (line 5801) | function handleProxyWithVue (e) {

FILE: packages/vue-server-renderer/types/index.d.ts
  type RenderCallback (line 8) | type RenderCallback = (err: Error | null, html: string) => void;
  type Renderer (line 10) | interface Renderer {
  type BundleRenderer (line 17) | interface BundleRenderer {
  type RendererOptions (line 24) | interface RendererOptions {
  type BundleRendererOptions (line 34) | interface BundleRendererOptions extends RendererOptions {
  type RenderCache (line 40) | interface RenderCache {

FILE: packages/vue-server-renderer/types/test.ts
  function createApp (line 5) | function createApp (context: any) {
  method example (line 71) | example (vnode: Vue.VNode, directiveMeta: Vue.VNodeDirective) {

FILE: packages/weex-template-compiler/build.js
  function _interopDefault (line 5) | function _interopDefault (ex) { return (ex && (typeof ex === 'object') &...
  function isObject (line 31) | function isObject (obj) {
  function isPlainObject (line 41) | function isPlainObject (obj) {
  function isValidArrayIndex (line 50) | function isValidArrayIndex (val) {
  function makeMap (line 70) | function makeMap (
  function remove (line 97) | function remove (arr, item) {
  function hasOwn (line 110) | function hasOwn (obj, key) {
  function cached (line 117) | function cached (fn) {
  function extend (line 153) | function extend (to, _from) {
  function noop (line 170) | function noop (a, b, c) {}
  function genStaticKeys (line 185) | function genStaticKeys (modules) {
  function decodeAttr (line 288) | function decodeAttr (value, shouldDecodeNewlines) {
  function parseHTML (line 293) | function parseHTML (html, options) {
  function parseFilters (line 551) | function parseFilters (exp) {
  function wrapFilter (line 633) | function wrapFilter (exp, filter) {
  function parseText (line 656) | function parseText (
  function genComponentModel (line 689) | function genComponentModel (
  function genAssignmentCode (line 721) | function genAssignmentCode (
  function parseModel (line 754) | function parseModel (val) {
  function next (line 782) | function next () {
  function eof (line 786) | function eof () {
  function isStringStart (line 790) | function isStringStart (chr) {
  function parseBracket (line 794) | function parseBracket (chr) {
  function parseString (line 812) | function parseString (chr) {
  function handleError (line 1026) | function handleError (err, vm, info) {
  function isNative (line 1096) | function isNative (Ctor) {
  function nextTickHandler (line 1112) | function nextTickHandler () {
  function Set (line 1198) | function Set () {
  function baseWarn (line 1217) | function baseWarn (msg) {
  function pluckModuleFunction (line 1221) | function pluckModuleFunction (
  function addProp (line 1230) | function addProp (el, name, value) {
  function addAttr (line 1234) | function addAttr (el, name, value) {
  function addDirective (line 1238) | function addDirective (
  function addHandler (line 1249) | function addHandler (
  function getBindingAttr (line 1301) | function getBindingAttr (
  function getAndRemoveAttr (line 1319) | function getAndRemoveAttr (el, name) {
  function parse (line 1359) | function parse (
  function processPre (line 1602) | function processPre (el) {
  function processRawAttrs (line 1608) | function processRawAttrs (el) {
  function processKey (line 1624) | function processKey (el) {
  function processRef (line 1634) | function processRef (el) {
  function processFor (line 1642) | function processFor (el) {
  function processIf (line 1667) | function processIf (el) {
  function processIfConditions (line 1686) | function processIfConditions (el, parent) {
  function findPrevElement (line 1701) | function findPrevElement (children) {
  function addIfCondition (line 1718) | function addIfCondition (el, condition) {
  function processOnce (line 1725) | function processOnce (el) {
  function processSlot (line 1732) | function processSlot (el) {
  function processComponent (line 1753) | function processComponent (el) {
  function processAttrs (line 1763) | function processAttrs (el) {
  function checkInFor (line 1839) | function checkInFor (el) {
  function parseModifiers (line 1850) | function parseModifiers (name) {
  function makeAttrsMap (line 1859) | function makeAttrsMap (attrs) {
  function isTextTag (line 1874) | function isTextTag (el) {
  function isForbiddenTag (line 1878) | function isForbiddenTag (el) {
  function guardIESVGBug (line 1892) | function guardIESVGBug (attrs) {
  function checkForAliasModel (line 1904) | function checkForAliasModel (el, value) {
  function optimize (line 1938) | function optimize (root, options) {
  function genStaticKeys$1 (line 1948) | function genStaticKeys$1 (keys) {
  function markStatic (line 1955) | function markStatic (node) {
  function markStaticRoots (line 1987) | function markStaticRoots (node, isInFor) {
  function isStatic (line 2017) | function isStatic (node) {
  function isDirectChildOfTemplateFor (line 2034) | function isDirectChildOfTemplateFor (node) {
  function genHandlers (line 2083) | function genHandlers (
  function genHandler (line 2106) | function genHandler (
  function genKeyFilter (line 2156) | function genKeyFilter (keys) {
  function genFilterCode (line 2160) | function genFilterCode (key) {
  function def (line 2181) | function def (obj, key, val, enumerable) {
  function protoAugment (line 2335) | function protoAugment (target, src, keys) {
  function copyAugment (line 2346) | function copyAugment (target, src, keys) {
  function observe (line 2358) | function observe (value, asRootData) {
  function defineReactive$$1 (line 2383) | function defineReactive$$1 (
  function set (line 2444) | function set (target, key, val) {
  function dependArray (line 2480) | function dependArray (value) {
  function mergeData (line 2517) | function mergeData (to, from) {
  function mergeDataOrFn (line 2537) | function mergeDataOrFn (
  function mergeHook (line 2604) | function mergeHook (
  function mergeAssets (line 2628) | function mergeAssets (parentVal, childVal) {
  function on (line 2710) | function on (el, dir) {
  function bind$1 (line 2719) | function bind$1 (el, dir) {
  function generate (line 2749) | function generate (
  function genElement (line 2761) | function genElement (el, state) {
  function genStatic (line 2794) | function genStatic (el, state) {
  function genOnce (line 2801) | function genOnce (el, state) {
  function genIf (line 2827) | function genIf (
  function genIfConditions (line 2837) | function genIfConditions (
  function genFor (line 2864) | function genFor (
  function genData (line 2896) | function genData (el, state) {
  function genDirectives (line 2973) | function genDirectives (el, state) {
  function genInlineTemplate (line 2998) | function genInlineTemplate (el, state) {
  function genScopedSlots (line 3011) | function genScopedSlots (
  function genScopedSlot (line 3020) | function genScopedSlot (
  function genForScopedSlot (line 3034) | function genForScopedSlot (
  function genChildren (line 3050) | function genChildren (
  function getNormalizationType (line 3080) | function getNormalizationType (
  function needsNormalization (line 3103) | function needsNormalization (el) {
  function genNode (line 3107) | function genNode (node, state) {
  function genText (line 3117) | function genText (text) {
  function genComment (line 3123) | function genComment (comment) {
  function genSlot (line 3127) | function genSlot (el, state) {
  function genComponent (line 3146) | function genComponent (
  function genProps (line 3155) | function genProps (props) {
  function transformSpecialNewlines (line 3165) | function transformSpecialNewlines (text) {
  function detectErrors (line 3193) | function detectErrors (ast) {
  function checkNode (line 3201) | function checkNode (node, errors) {
  function checkEvent (line 3227) | function checkEvent (exp, text, errors) {
  function checkFor (line 3239) | function checkFor (node, text, errors) {
  function checkIdentifier (line 3246) | function checkIdentifier (ident, type, text, errors) {
  function checkExpression (line 3252) | function checkExpression (exp, text, errors) {
  function createFunction (line 3270) | function createFunction (code, errors) {
  function createCompileToFunctionFn (line 3279) | function createCompileToFunctionFn (compile) {
  function createCompilerCreator (line 3365) | function createCompilerCreator (baseCompile) {
  function transformNode (line 3436) | function transformNode (el, options) {
  function genData$1 (line 3460) | function genData$1 (el) {
  function parseStaticClass (line 3471) | function parseStaticClass (staticClass, options) {
  function transformNode$1 (line 3502) | function transformNode$1 (el, options) {
  function genData$2 (line 3526) | function genData$2 (el) {
  function parseStaticStyle (line 3537) | function parseStaticStyle (staticStyle, options) {
  function normalizeKeyName (line 3574) | function normalizeKeyName (str) {
  function transformNode$2 (line 3583) | function transformNode$2 (el, options) {
  function preTransformNode (line 3603) | function preTransformNode (el, options) {
  function genData$3 (line 3613) | function genData$3 (el) {
  function model (line 3632) | function model (
  function genDefaultModel (line 3644) | function genDefaultModel (
  function mustUseProp (line 3693) | function mustUseProp () { /* console.log('mustUseProp') */ }
  function getTagNamespace (line 3694) | function getTagNamespace () { /* console.log('getTagNamespace') */ }

FILE: packages/weex-vue-framework/factory.js
  function isUndef (line 9) | function isUndef (v) {
  function isDef (line 13) | function isDef (v) {
  function isTrue (line 17) | function isTrue (v) {
  function isFalse (line 21) | function isFalse (v) {
  function isPrimitive (line 28) | function isPrimitive (value) {
  function isObject (line 37) | function isObject (obj) {
  function isPlainObject (line 47) | function isPlainObject (obj) {
  function isRegExp (line 51) | function isRegExp (v) {
  function isValidArrayIndex (line 58) | function isValidArrayIndex (val) {
  function toString (line 66) | function toString (val) {
  function toNumber (line 78) | function toNumber (val) {
  function makeMap (line 87) | function makeMap (
  function remove (line 114) | function remove (arr, item) {
  function hasOwn (line 127) | function hasOwn (obj, key) {
  function cached (line 134) | function cached (fn) {
  function bind (line 171) | function bind (fn, ctx) {
  function toArray (line 188) | function toArray (list, start) {
  function extend (line 201) | function extend (to, _from) {
  function toObject (line 211) | function toObject (arr) {
  function noop (line 226) | function noop (a, b, c) {}
  function looseEqual (line 247) | function looseEqual (a, b) {
  function looseIndexOf (line 264) | function looseIndexOf (arr, val) {
  function once (line 274) | function once (fn) {
  function isReserved (line 400) | function isReserved (str) {
  function def (line 408) | function def (obj, key, val, enumerable) {
  function parsePath (line 421) | function parsePath (path) {
  function handleError (line 532) | function handleError (err, vm, info) {
  function isNative (line 602) | function isNative (Ctor) {
  function nextTickHandler (line 618) | function nextTickHandler () {
  function Set (line 704) | function Set () {
  function pushTarget (line 763) | function pushTarget (_target) {
  function popTarget (line 768) | function popTarget () {
  function protoAugment (line 876) | function protoAugment (target, src, keys) {
  function copyAugment (line 887) | function copyAugment (target, src, keys) {
  function observe (line 899) | function observe (value, asRootData) {
  function defineReactive$$1 (line 924) | function defineReactive$$1 (
  function set (line 985) | function set (target, key, val) {
  function del (line 1015) | function del (target, key) {
  function dependArray (line 1042) | function dependArray (value) {
  function mergeData (line 1079) | function mergeData (to, from) {
  function mergeDataOrFn (line 1099) | function mergeDataOrFn (
  function mergeHook (line 1166) | function mergeHook (
  function mergeAssets (line 1190) | function mergeAssets (parentVal, childVal) {
  function checkComponents (line 1257) | function checkComponents (options) {
  function normalizeProps (line 1273) | function normalizeProps (options) {
  function normalizeInject (line 1304) | function normalizeInject (options) {
  function normalizeDirectives (line 1317) | function normalizeDirectives (options) {
  function mergeOptions (line 1333) | function mergeOptions (
  function resolveAsset (line 1380) | function resolveAsset (
  function validateProp (line 1410) | function validateProp (
  function getPropDefaultValue (line 1446) | function getPropDefaultValue (vm, prop, key) {
  function assertProp (line 1479) | function assertProp (
  function assertType (line 1531) | function assertType (value, type) {
  function getType (line 1554) | function getType (fn) {
  function isType (line 1559) | function isType (type, fn) {
  function createTextVNode (line 1725) | function createTextVNode (val) {
  function cloneVNode (line 1733) | function cloneVNode (vnode) {
  function cloneVNodes (line 1752) | function cloneVNodes (vnodes) {
  function createFnInvoker (line 1778) | function createFnInvoker (fns) {
  function updateListeners (line 1797) | function updateListeners (
  function mergeVNodeHook (line 1834) | function mergeVNodeHook (def, hookKey, hook) {
  function extractPropsFromVNodeData (line 1866) | function extractPropsFromVNodeData (
  function checkProp (line 1907) | function checkProp (
  function simpleNormalizeChildren (line 1946) | function simpleNormalizeChildren (children) {
  function normalizeChildren (line 1959) | function normalizeChildren (children) {
  function isTextNode (line 1967) | function isTextNode (node) {
  function normalizeArrayChildren (line 1971) | function normalizeArrayChildren (children, nestedIndex) {
  function ensureCtor (line 2012) | function ensureCtor (comp, base) {
  function createAsyncPlaceholder (line 2021) | function createAsyncPlaceholder (
  function resolveAsyncComponent (line 2034) | function resolveAsyncComponent (
  function getFirstComponentChild (line 2138) | function getFirstComponentChild (children) {
  function initEvents (line 2153) | function initEvents (vm) {
  function add (line 2165) | function add (event, fn, once$$1) {
  function remove$1 (line 2173) | function remove$1 (event, fn) {
  function updateComponentListeners (line 2177) | function updateComponentListeners (
  function eventsMixin (line 2186) | function eventsMixin (Vue) {
  function resolveSlots (line 2291) | function resolveSlots (
  function isWhitespace (line 2325) | function isWhitespace (node) {
  function resolveScopedSlots (line 2329) | function resolveScopedSlots (
  function initLifecycle (line 2349) | function initLifecycle (vm) {
  function lifecycleMixin (line 2375) | function lifecycleMixin (Vue) {
  function mountComponent (line 2465) | function mountComponent (
  function updateChildComponent (line 2530) | function updateChildComponent (
  function isInInactiveTree (line 2595) | function isInInactiveTree (vm) {
  function activateChildComponent (line 2602) | function activateChildComponent (vm, direct) {
  function deactivateChildComponent (line 2620) | function deactivateChildComponent (vm, direct) {
  function callHook (line 2636) | function callHook (vm, hook) {
  function resetSchedulerState (line 2668) | function resetSchedulerState () {
  function flushSchedulerQueue (line 2680) | function flushSchedulerQueue () {
  function callUpdatedHooks (line 2735) | function callUpdatedHooks (queue) {
  function queueActivatedComponent (line 2750) | function queueActivatedComponent (vm) {
  function callActivatedHooks (line 2757) | function callActivatedHooks (queue) {
  function queueWatcher (line 2769) | function queueWatcher (watcher) {
  function traverse (line 3007) | function traverse (val) {
  function _traverse (line 3012) | function _traverse (val, seen) {
  function proxy (line 3044) | function proxy (target, sourceKey, key) {
  function initState (line 3054) | function initState (vm) {
  function checkOptionType (line 3070) | function checkOptionType (vm, name) {
  function initProps (line 3080) | function initProps (vm, propsOptions) {
  function initData (line 3126) | function initData (vm) {
  function getData (line 3168) | function getData (data, vm) {
  function initComputed (line 3179) | function initComputed (vm, computed) {
  function defineComputed (line 3213) | function defineComputed (target, key, userDef) {
  function createComputedGetter (line 3230) | function createComputedGetter (key) {
  function initMethods (line 3245) | function initMethods (vm, methods) {
  function initWatch (line 3268) | function initWatch (vm, watch) {
  function createWatcher (line 3282) | function createWatcher (
  function stateMixin (line 3298) | function stateMixin (Vue) {
  function initProvide (line 3347) | function initProvide (vm) {
  function initInjections (line 3356) | function initInjections (vm) {
  function resolveInject (line 3379) | function resolveInject (inject, vm) {
  function createFunctionalComponent (line 3408) | function createFunctionalComponent (
  function mergeProps (line 3448) | function mergeProps (to, from) {
  function createComponent (line 3526) | function createComponent (
  function createComponentInstanceForVnode (line 3620) | function createComponentInstanceForVnode (
  function mergeHooks (line 3647) | function mergeHooks (data) {
  function mergeHook$1 (line 3659) | function mergeHook$1 (one, two) {
  function transformModel (line 3668) | function transformModel (options, data) {
  function createElement (line 3686) | function createElement (
  function _createElement (line 3705) | function _createElement (
  function applyNS (line 3785) | function applyNS (vnode, ns) {
  function renderList (line 3806) | function renderList (
  function renderSlot (line 3840) | function renderSlot (
  function resolveFilter (line 3873) | function resolveFilter (id) {
  function checkKeyCodes (line 3882) | function checkKeyCodes (
  function bindObjectProps (line 3900) | function bindObjectProps (
  function renderStatic (line 3954) | function renderStatic (
  function markOnce (line 3977) | function markOnce (
  function markStatic (line 3986) | function markStatic (
  function markStaticNode (line 4002) | function markStaticNode (node, key, isOnce) {
  function bindObjectListeners (line 4010) | function bindObjectListeners (data, value) {
  function initRender (line 4031) | function initRender (vm) {
  function renderMixin (line 4064) | function renderMixin (Vue) {
  function initMixin (line 4148) | function initMixin (Vue) {
  function initInternalComponent (line 4207) | function initInternalComponent (vm, options) {
  function resolveConstructorOptions (line 4224) | function resolveConstructorOptions (Ctor) {
  function resolveModifiedOptions (line 4248) | function resolveModifiedOptions (Ctor) {
  function dedupe (line 4262) | function dedupe (latest, extended, sealed) {
  function Vue$2 (line 4281) | function Vue$2 (options) {
  function initUse (line 4298) | function initUse (Vue) {
  function initMixin$1 (line 4320) | function initMixin$1 (Vue) {
  function initExtend (line 4329) | function initExtend (Vue) {
  function initProps$1 (line 4411) | function initProps$1 (Comp) {
  function initComputed$1 (line 4418) | function initComputed$1 (Comp) {
  function initAssetRegisters (line 4427) | function initAssetRegisters (Vue) {
  function getComponentName (line 4466) | function getComponentName (opts) {
  function matches (line 4470) | function matches (pattern, name) {
  function pruneCache (line 4482) | function pruneCache (cache, current, filter) {
  function pruneCacheEntry (line 4497) | function pruneCacheEntry (vnode) {
  function initGlobalAPI (line 4567) | function initGlobalAPI (Vue) {
  function createElement$1 (line 4631) | function createElement$1 (tagName) {
  function createElementNS (line 4635) | function createElementNS (namespace, tagName) {
  function createTextNode (line 4639) | function createTextNode (text) {
  function createComment (line 4643) | function createComment (text) {
  function insertBefore (line 4647) | function insertBefore (node, target, before) {
  function removeChild (line 4662) | function removeChild (node, child) {
  function appendChild (line 4670) | function appendChild (node, child) {
  function parentNode (line 4686) | function parentNode (node) {
  function nextSibling (line 4690) | function nextSibling (node) {
  function tagName (line 4694) | function tagName (node) {
  function setTextContent (line 4698) | function setTextContent (node, text) {
  function setAttribute (line 4702) | function setAttribute (node, key, val) {
  function registerRef (line 4740) | function registerRef (vnode, isRemoval) {
  function sameVnode (line 4785) | function sameVnode (a, b) {
  function sameInputType (line 4804) | function sameInputType (a, b) {
  function createKeyToOldIdx (line 4812) | function createKeyToOldIdx (children, beginIdx, endIdx) {
  function createPatchFunction (line 4822) | function createPatchFunction (backend) {
  function updateDirectives (line 5439) | function updateDirectives (oldVnode, vnode) {
  function _update (line 5445) | function _update (oldVnode, vnode) {
  function normalizeDirectives$1 (line 5507) | function normalizeDirectives$1 (
  function getRawDirName (line 5527) | function getRawDirName (dir) {
  function callHook$1 (line 5531) | function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
  function updateAttrs (line 5549) | function updateAttrs (oldVnode, vnode) {
  function updateClass (line 5583) | function updateClass (oldVnode, vnode) {
  function getStyle (line 5622) | function getStyle (oldClassList, classList, ctx) {
  function add$1 (line 5651) | function add$1 (
  function remove$2 (line 5676) | function remove$2 (
  function updateDOMListeners (line 5685) | function updateDOMListeners (oldVnode, vnode) {
  function createStyle (line 5707) | function createStyle (oldVnode, vnode) {
  function updateStyle (line 5722) | function updateStyle (oldVnode, vnode) {
  function toObject$1 (line 5755) | function toObject$1 (arr) {
  function resolveTransition (line 5785) | function resolveTransition (def$$1) {
  function enter (line 5830) | function enter (_, vnode) {
  function leave (line 5948) | function leave (vnode, rm) {
  function getEnterTargetState (line 6042) | function getEnterTargetState (el, stylesheet, startClass, endClass, acti...
  function getRealChild (line 6130) | function getRealChild (vnode) {
  function extractTransitionData (line 6139) | function extractTransitionData (comp) {
  function placeholder (line 6155) | function placeholder (h, rawChild) {
  function hasParentTransition (line 6163) | function hasParentTransition (vnode) {
  function isSameChild (line 6171) | function isSameChild (child, oldChild) {
  function isAsyncPlaceholder (line 6175) | function isAsyncPlaceholder (node) {
  function mustUseProp (line 6473) | function mustUseProp () { /* console.log('mustUseProp') */ }
  function isUnknownElement (line 6475) | function isUnknownElement () { /* console.log('isUnknownElement') */ }
  function query (line 6477) | function query (el, document) {

FILE: packages/weex-vue-framework/index.js
  function TextNode (line 7) | function TextNode (text) {
  function init (line 33) | function init (cfg) {
  function reset (line 43) | function reset () {
  function clear (line 57) | function clear (obj) {
  function createInstance (line 71) | function createInstance (
  function destroyInstance (line 130) | function destroyInstance (instanceId) {
  function refreshInstance (line 146) | function refreshInstance (instanceId, data) {
  function getRoot (line 162) | function getRoot (instanceId) {
  function fireEvent (line 185) | function fireEvent (instance, nodeId, type, e, domChanges) {
  function callback (line 193) | function callback (instance, callbackId, data, ifKeepAlive) {
  function receiveTasks (line 205) | function receiveTasks (id, tasks) {
  function registerModules (line 227) | function registerModules (newModules) {
  function isRegisteredModule (line 249) | function isRegisteredModule (name, method) {
  function registerComponents (line 260) | function registerComponents (newComponents) {
  function isRegisteredComponent (line 279) | function isRegisteredComponent (name) {
  function supports (line 287) | function supports (condition) {
  function createVueModuleInstance (line 307) | function createVueModuleInstance (instanceId, moduleGetter) {
  function genModuleGetter (line 368) | function genModuleGetter (instanceId) {
  function getInstanceTimer (line 407) | function getInstanceTimer (instanceId, moduleGetter) {
  function callFunction (line 449) | function callFunction (globalObjects, body) {
  function callFunctionNative (line 473) | function callFunctionNative (globalObjects, body) {

FILE: src/compiler/codegen/events.js
  function genHandlers (line 37) | function genHandlers (
  method if (line 64) | if (!handler) {
  method if (line 84) | if (modifierCode[key]) {

FILE: src/compiler/codegen/index.js
  function generate (line 40) | function generate (
  function genElement (line 52) | function genElement (el: ASTElement, state: CodegenState): string {
  function genStatic (line 89) | function genStatic (el: ASTElement, state: CodegenState): string {
  function genOnce (line 96) | function genOnce (el: ASTElement, state: CodegenState): string {
  method if (line 138) | if (!conditions.length) {

FILE: src/compiler/create-compiler.js
  function createCompilerCreator (line 7) | function createCompilerCreator (baseCompile: Function): Function {

FILE: src/compiler/directives/bind.js
  function bind (line 3) | function bind (el: ASTElement, dir: ASTDirective) {

FILE: src/compiler/directives/model.js
  function genAssignmentCode (line 36) | function genAssignmentCode (
  function parseModel (line 64) | function parseModel (val: string): Object {
  function next (line 92) | function next (): number {
  function eof (line 96) | function eof (): boolean {
  function isStringStart (line 100) | function isStringStart (chr: number): boolean {
  function parseBracket (line 104) | function parseBracket (chr: number): void {
  function parseString (line 122) | function parseString (chr: number): void {

FILE: src/compiler/directives/on.js
  function on (line 5) | function on (el: ASTElement, dir: ASTDirective) {

FILE: src/compiler/error-detector.js
  function checkNode (line 33) | function checkNode (node: ASTNode, errors: Array<string>) {
  function checkEvent (line 59) | function checkEvent (exp: string, text: string, errors: Array<string>) {
  function checkFor (line 71) | function checkFor (node: ASTElement, text: string, errors: Array<string>) {
  function checkIdentifier (line 78) | function checkIdentifier (ident: ?string, type: string, text: string, er...
  function checkExpression (line 84) | function checkExpression (exp: string, text: string, errors: Array<strin...

FILE: src/compiler/helpers.js
  function baseWarn (line 5) | function baseWarn (msg: string) {
  function addProp (line 18) | function addProp (el: ASTElement, name: string, value: string) {
  function addAttr (line 22) | function addAttr (el: ASTElement, name: string, value: string) {
  method parseFilters (line 98) | parseFilters(dynamicValue)
  method let (line 108) | let val

FILE: src/compiler/optimizer.js
  function genStaticKeys (line 31) | function genStaticKeys (keys: string): Function {
  function markStatic (line 38) | function markStatic (node: ASTNode) {
  function markStaticRoots (line 70) | function markStaticRoots (node: ASTNode, isInFor: boolean) {
  function isStatic (line 100) | function isStatic (node: ASTNode): boolean {
  function isDirectChildOfTemplateFor (line 117) | function isDirectChildOfTemplateFor (node: ASTElement): boolean {

FILE: src/compiler/parser/filter-parser.js
  function parseFilters (line 5) | function parseFilters (exp: string): string {
  function wrapFilter (line 87) | function wrapFilter (exp: string, filter: string): string {

FILE: src/compiler/parser/html-parser.js
  constant IS_REGEX_CAPTURING_BROKEN (line 43) | let IS_REGEX_CAPTURING_BROKEN = false
  function decodeAttr (line 66) | function decodeAttr (value, shouldDecodeNewlines) {
  function parseHTML (line 71) | function parseHTML (html, options) {

FILE: src/compiler/parser/index.js
  function parse (line 46) | function parse (
  function processPre (line 290) | function processPre (el) {
  function processRawAttrs (line 296) | function processRawAttrs (el) {
  function processKey (line 312) | function processKey (el) {
  function processRef (line 322) | function processRef (el) {
  function processFor (line 330) | function processFor (el) {
  function processIf (line 355) | function processIf (el) {
  function processIfConditions (line 374) | function processIfConditions (el, parent) {
  method if (line 392) | if (children[i].type === 1) {
  method warn (line 396) | warn(

FILE: src/compiler/to-function.js
  method if (line 38) | if (e.toString().match(/unsafe-eval|CSP/)) {

FILE: src/core/components/keep-alive.js
  function matches (line 14) | function matches (pattern: string | RegExp | Array<string>, name: string...
  function pruneCache (line 26) | function pruneCache (cache: VNodeCache, current: VNode, filter: Function) {
  function pruneCacheEntry (line 41) | function pruneCacheEntry (vnode: ?VNode) {
  method created (line 56) | created () {
  method destroyed (line 60) | destroyed () {

FILE: src/core/global-api/assets.js
  method if (line 16) | if (!definition) {

FILE: src/core/global-api/extend.js
  function initExtend (line 7) | function initExtend (Vue: GlobalAPI) {
  function initProps (line 89) | function initProps (Comp) {
  function initComputed (line 96) | function initComputed (Comp) {

FILE: src/core/global-api/index.js
  function initGlobalAPI (line 20) | function initGlobalAPI (Vue: GlobalAPI) {

FILE: src/core/global-api/mixin.js
  function initMixin (line 5) | function initMixin (Vue: GlobalAPI) {

FILE: src/core/global-api/use.js
  function initUse (line 5) | function initUse (Vue: GlobalAPI) {

FILE: src/core/index.js
  method get (line 12) | get () {

FILE: src/core/instance/events.js
  function initEvents (line 12) | function initEvents (vm: Component) {
  function add (line 24) | function add (event, fn, once) {
  function remove (line 32) | function remove (event, fn) {
  function eventsMixin (line 45) | function eventsMixin (Vue: Class<Component>) {

FILE: src/core/instance/index.js
  function Vue (line 8) | function Vue (options) {

FILE: src/core/instance/init.js
  function initMixin (line 15) | function initMixin (Vue: Class<Component>) {
  function initInternalComponent (line 74) | function initInternalComponent (vm: Component, options: InternalComponen...
  function resolveConstructorOptions (line 91) | function resolveConstructorOptions (Ctor: Class<Component>) {
  method if (line 121) | if (latest[key] !== sealed[key]) {

FILE: src/core/instance/inject.js
  function initProvide (line 8) | function initProvide (vm: Component) {
  function initInjections (line 17) | function initInjections (vm: Component) {

FILE: src/core/instance/lifecycle.js
  function initLifecycle (line 23) | function initLifecycle (vm: Component) {
  function lifecycleMixin (line 49) | function lifecycleMixin (Vue: Class<Component>) {
  method if (line 211) | if (process.env.NODE_ENV !== 'production') {
  function isInInactiveTree (line 269) | function isInInactiveTree (vm) {
  function activateChildComponent (line 276) | function activateChildComponent (vm: Component, direct?: boolean) {
  function deactivateChildComponent (line 294) | function deactivateChildComponent (vm: Component, direct?: boolean) {
  function callHook (line 310) | function callHook (vm: Component, hook: string) {

FILE: src/core/instance/proxy.js
  method set (line 32) | set (target, key, value) {
  method has (line 45) | has (target, key) {
  method get (line 56) | get (target, key) {

FILE: src/core/instance/render-helpers/bind-object-listeners.js
  function bindObjectListeners (line 5) | function bindObjectListeners (data: any, value: any): VNodeData {

FILE: src/core/instance/render-helpers/bind-object-props.js
  method if (line 22) | if (value) {

FILE: src/core/instance/render-helpers/render-list.js
  method key (line 16) | key
  method isObject (line 27) | isObject(val)) {
  method if (line 35) | if (isDef(ret)) {

FILE: src/core/instance/render-helpers/resolve-filter.js
  function resolveFilter (line 8) | function resolveFilter (id: string): Function {

FILE: src/core/instance/render-helpers/resolve-slots.js
  function isWhitespace (line 40) | function isWhitespace (node: VNode): boolean {
  method if (line 50) | if (Array.isArray(fns[i])) {

FILE: src/core/instance/render.js
  function initRender (line 33) | function initRender (vm: Component) {
  function renderMixin (line 66) | function renderMixin (Vue: Class<Component>) {

FILE: src/core/instance/state.js
  function proxy (line 36) | function proxy (target: Object, sourceKey: string, key: string) {
  function initState (line 46) | function initState (vm: Component) {
  function checkOptionType (line 62) | function checkOptionType (vm: Component, name: string) {
  function initProps (line 72) | function initProps (vm: Component, propsOptions: Object) {
  function initData (line 116) | function initData (vm: Component) {
  function getData (line 158) | function getData (data: Function, vm: Component): any {
  function initComputed (line 169) | function initComputed (vm: Component, computed: Object) {
  function defineComputed (line 203) | function defineComputed (target: any, key: string, userDef: Object | Fun...
  function createComputedGetter (line 220) | function createComputedGetter (key) {
  function initMethods (line 235) | function initMethods (vm: Component, methods: Object) {
  function initWatch (line 258) | function initWatch (vm: Component, watch: Object) {
  function createWatcher (line 272) | function createWatcher (
  function stateMixin (line 288) | function stateMixin (Vue: Class<Component>) {

FILE: src/core/observer/dep.js
  function pushTarget (line 51) | function pushTarget (_target: Watcher) {
  function popTarget (line 56) | function popTarget () {

FILE: src/core/observer/index.js
  method if (line 131) | if (!isObject(value)) {

FILE: src/core/observer/scheduler.js
  constant MAX_UPDATE_COUNT (line 13) | const MAX_UPDATE_COUNT = 100

FILE: src/core/observer/watcher.js
  method if (line 100) | if (this.user) {
  method if (line 158) | if (this.lazy) {
  method if (line 172) | if (this.active) {
  method if (line 221) | if (this.active) {

FILE: src/core/util/env.js
  method get (line 27) | get () {
  function isNative (line 57) | function isNative (Ctor: any): boolean {
  function nextTickHandler (line 73) | function nextTickHandler () {
  method constructor (line 160) | constructor () {
  method has (line 163) | has (key: string | number) {
  method add (line 166) | add (key: string | number) {
  method clear (line 169) | clear () {

FILE: src/core/util/error.js
  function handleError (line 7) | function handleError (err: Error, vm: any, info: string) {

FILE: src/core/util/lang.js
  function isReserved (line 8) | function isReserved (str: string): boolean {

FILE: src/core/util/options.js
  function mergeData (line 47) | function mergeData (to: Object, from: ?Object): Object {
  method if (line 72) | if (!vm) {
  method if (line 114) | if (!vm) {
  method if (line 306) | if (process.env.NODE_ENV !== 'production') {
  method mergeField (line 329) | mergeField(key)
  method mergeField (line 336) | mergeField (key) {

FILE: src/core/util/props.js
  method if (line 31) | if (absent && !hasOwn(prop, 'default')) {
  method if (line 58) | if (!hasOwn(prop, 'default')) {
  method if (line 110) | if (!Array.isArray(type)) {
  method if (line 130) | if (!validator(value)) {

FILE: src/core/vdom/create-component.js
  method if (line 38) | if (!vnode.componentInstance || vnode.componentInstance._isDestroyed) {
  method if (line 107) | if (isUndef(Ctor)) {
  method if (line 121) | if (process.env.NODE_ENV !== 'production') {

FILE: src/core/vdom/create-element.js
  constant SIMPLE_NORMALIZE (line 21) | const SIMPLE_NORMALIZE = 1
  constant ALWAYS_NORMALIZE (line 22) | const ALWAYS_NORMALIZE = 2
  function createElement (line 26) | function createElement (
  method if (line 52) | if (isDef(data) && isDef((data: any).__ob__)) {
  method for (line 132) | for (let i = 0, l = vnode.children.length; i < l; i++) {

FILE: src/core/vdom/create-functional-component.js
  method for (line 24) | for (const key in propOptions) {
  function mergeProps (line 54) | function mergeProps (to, from) {

FILE: src/core/vdom/helpers/extract-props.js
  method for (line 27) | for (const key in propOptions) {

FILE: src/core/vdom/helpers/merge-hook.js
  function mergeVNodeHook (line 6) | function mergeVNodeHook (def: Object, hookKey: string, hook: Function) {

FILE: src/core/vdom/helpers/normalize-children.js
  function simpleNormalizeChildren (line 18) | function simpleNormalizeChildren (children: any) {
  function isTextNode (line 39) | function isTextNode (node): boolean {
  method if (line 54) | if (isTextNode(last)) {
  method if (line 69) | if (isTrue(children._isVList) &&

FILE: src/core/vdom/helpers/resolve-async-component.js
  function ensureCtor (line 14) | function ensureCtor (comp, base) {
  function resolveAsyncComponent (line 36) | function resolveAsyncComponent (

FILE: src/core/vdom/modules/directives.js
  function updateDirectives (line 15) | function updateDirectives (oldVnode: VNodeWithData, vnode: VNodeWithData) {
  function _update (line 21) | function _update (oldVnode, vnode) {
  function normalizeDirectives (line 83) | function normalizeDirectives (
  function getRawDirName (line 103) | function getRawDirName (dir: VNodeDirective): string {
  function callHook (line 107) | function callHook (dir, hook, vnode, oldVnode, isDestroy) {

FILE: src/core/vdom/patch.js
  function sameVnode (line 34) | function sameVnode (a, b) {
  function sameInputType (line 53) | function sameInputType (a, b) {
  function createKeyToOldIdx (line 61) | function createKeyToOldIdx (children, beginIdx, endIdx) {
  function createPatchFunction (line 71) | function createPatchFunction (backend) {

FILE: src/core/vdom/vnode.js
  function createTextVNode (line 74) | function createTextVNode (val: string | number) {
  function cloneVNode (line 82) | function cloneVNode (vnode: VNode): VNode {

FILE: src/platforms/mp/compiler/common/babel-plugins.js
  function getStrByNode (line 8) | function getStrByNode (node, onlyStr = false) {
  method ObjectExpression (line 17) | ObjectExpression (path) {
  function transformObjectToTernaryOperator (line 25) | function transformObjectToTernaryOperator (babel) {
  method ObjectExpression (line 31) | ObjectExpression (path) {
  function transformObjectToString (line 44) | function transformObjectToString (babel) {

FILE: src/platforms/mp/compiler/common/convert/index.js
  function convertAst (line 5) | function convertAst (node, options = {}, util, conventRule) {
  function getAstCommon (line 86) | function getAstCommon (compiled, options = {}, log, conventRule) {

FILE: src/platforms/mp/compiler/common/generate.js
  function convertAttr (line 13) | function convertAttr (key, val) {
  function generateCode (line 17) | function generateCode (nodeAst, options = {}) {
  function compileToMPMLCommon (line 46) | function compileToMPMLCommon (compiled, options = {}, getAst) {

FILE: src/platforms/mp/compiler/common/utils.js
  method toLowerCase (line 2) | toLowerCase (str) {
  method getChar (line 6) | getChar (index) {
  method log (line 10) | log (compiled) {

FILE: src/platforms/mp/compiler/directives/html.js
  function html (line 5) | function html (el: ASTElement, dir: ASTDirective) {

FILE: src/platforms/mp/compiler/directives/model.js
  constant RANGE_TOKEN (line 11) | const RANGE_TOKEN = '__r'
  constant CHECKBOX_RADIO_TOKEN (line 12) | const CHECKBOX_RADIO_TOKEN = '__c'
  function genCheckboxModel (line 72) | function genCheckboxModel (
  function genRadioModel (line 103) | function genRadioModel (
  function genSelect (line 115) | function genSelect (

FILE: src/platforms/mp/compiler/directives/text.js
  function text (line 5) | function text (el: ASTElement, dir: ASTDirective) {

FILE: src/platforms/mp/compiler/index.js
  function compileToMPML (line 9) | function compileToMPML (compiled, options, fileExt) {

FILE: src/platforms/mp/compiler/mark-component.js
  function maybeTag (line 3) | function maybeTag (tagName) {
  function getWxEleId (line 7) | function getWxEleId (index, arr) {
  function checkRepeatIterator (line 17) | function checkRepeatIterator (arr, options) {
  function fixDefaultIterator (line 24) | function fixDefaultIterator (path) {
  function addAttr (line 31) | function addAttr (path, key, value, inVdom) {
  function mark (line 50) | function mark (path, options, deps, iteratorArr = []) {
  function markComponent (line 112) | function markComponent (ast, options) {

FILE: src/platforms/mp/compiler/modules/class.js
  function transformNode (line 10) | function transformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 33) | function genData (el: ASTElement): string {

FILE: src/platforms/mp/compiler/modules/style.js
  function transformNode (line 11) | function transformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 36) | function genData (el: ASTElement): string {

FILE: src/platforms/mp/compiler/my/convert/attrs.js
  function transformDynamicClass (line 8) | function transformDynamicClass (staticClass = '', clsBinding) {
  function transformDynamicStyle (line 16) | function transformDynamicStyle (staticStyle = '', styleBinding) {
  method format (line 23) | format (attrs = {}) {
  method convertAttr (line 33) | convertAttr (ast, log) {
  method event (line 99) | event (key, val, attrs, tag, log) {
  method bind (line 134) | bind (key, val, attrs, tag, isIf) {
  method classObj (line 154) | classObj (clsBinding = '', staticCls) {
  method styleObj (line 165) | styleObj (styleBinding = '', staticStyle) {
  method model (line 176) | model (key, val, attrs, tag) {

FILE: src/platforms/mp/compiler/my/convert/component.js
  function getSlotsName (line 1) | function getSlotsName (obj) {
  function tmplateSlotsObj (line 15) | function tmplateSlotsObj (obj) {
  method isComponent (line 29) | isComponent (tagName, components = {}) {
  method convertComponent (line 32) | convertComponent (ast, components, slotName) {

FILE: src/platforms/mp/compiler/my/convert/index.js
  function mpmlAst (line 6) | function mpmlAst (compiled, options = {}, log) {

FILE: src/platforms/mp/compiler/my/index.js
  function compileToMPML (line 4) | function compileToMPML (compiled, options = {}) {

FILE: src/platforms/mp/compiler/swan/config/directiveMap.js
  method check (line 11) | check (k, v, errors) {

FILE: src/platforms/mp/compiler/swan/convert/attrs.js
  function transformDynamicClass (line 8) | function transformDynamicClass (staticClass = '', clsBinding) {
  function transformDynamicStyle (line 16) | function transformDynamicStyle (staticStyle = '', styleBinding) {
  method format (line 23) | format (attrs = {}) {
  method convertAttr (line 34) | convertAttr (ast, log) {
  method event (line 100) | event (key, val, attrs, tag) {
  method bind (line 135) | bind (key, val, attrs, tag, isIf) {
  method classObj (line 171) | classObj (clsBinding = '', staticCls) {
  method styleObj (line 182) | styleObj (styleBinding = '', staticStyle) {
  method model (line 193) | model (key, val, attrs, tag) {

FILE: src/platforms/mp/compiler/swan/convert/component.js
  function getSlotsName (line 1) | function getSlotsName (obj) {
  function tmplateSlotsObj (line 13) | function tmplateSlotsObj (obj) {
  method isComponent (line 25) | isComponent (tagName, components = {}) {
  method convertComponent (line 28) | convertComponent (ast, components, slotName) {

FILE: src/platforms/mp/compiler/swan/convert/index.js
  function mpmlAst (line 6) | function mpmlAst (compiled, options = {}, log) {

FILE: src/platforms/mp/compiler/swan/index.js
  function compileToMPML (line 4) | function compileToMPML (compiled, options = {}) {

FILE: src/platforms/mp/compiler/tt/config/directiveMap.js
  method check (line 11) | check (k, v, errors) {

FILE: src/platforms/mp/compiler/tt/convert/attrs.js
  function transformDynamicClass (line 8) | function transformDynamicClass (staticClass = '', clsBinding) {
  function transformDynamicStyle (line 16) | function transformDynamicStyle (staticStyle = '', styleBinding) {
  method format (line 23) | format (attrs = {}) {
  method convertAttr (line 34) | convertAttr (ast, log) {
  method event (line 100) | event (key, val, attrs, tag) {
  method bind (line 135) | bind (key, val, attrs, tag, isIf) {
  method classObj (line 155) | classObj (clsBinding = '', staticCls) {
  method styleObj (line 166) | styleObj (styleBinding = '', staticStyle) {
  method model (line 177) | model (key, val, attrs, tag) {

FILE: src/platforms/mp/compiler/tt/convert/component.js
  function getSlotsName (line 1) | function getSlotsName (obj) {
  function tmplateSlotsObj (line 15) | function tmplateSlotsObj(obj) {
  method isComponent (line 29) | isComponent (tagName, components = {}) {
  method convertComponent (line 32) | convertComponent (ast, components, slotName) {

FILE: src/platforms/mp/compiler/tt/convert/index.js
  function mpmlAst (line 6) | function mpmlAst (compiled, options = {}, log) {

FILE: src/platforms/mp/compiler/tt/index.js
  function compileToMPML (line 4) | function compileToMPML (compiled, options = {}) {

FILE: src/platforms/mp/compiler/wx/config/directiveMap.js
  method check (line 11) | check (k, v, errors) {

FILE: src/platforms/mp/compiler/wx/convert/attrs.js
  function transformDynamicClass (line 8) | function transformDynamicClass (staticClass = '', clsBinding) {
  function transformDynamicStyle (line 16) | function transformDynamicStyle (staticStyle = '', styleBinding) {
  method format (line 23) | format (attrs = {}) {
  method convertAttr (line 34) | convertAttr (ast, log) {
  method event (line 100) | event (key, val, attrs, tag) {
  method bind (line 135) | bind (key, val, attrs, tag, isIf) {
  method classObj (line 155) | classObj (clsBinding = '', staticCls) {
  method styleObj (line 166) | styleObj (styleBinding = '', staticStyle) {
  method model (line 177) | model (key, val, attrs, tag) {

FILE: src/platforms/mp/compiler/wx/convert/component.js
  function getSlotsName (line 1) | function getSlotsName (obj) {
  function tmplateSlotsObj (line 15) | function tmplateSlotsObj(obj) {
  method isComponent (line 29) | isComponent (tagName, components = {}) {
  method convertComponent (line 32) | convertComponent (ast, components, slotName) {

FILE: src/platforms/mp/compiler/wx/convert/index.js
  function mpmlAst (line 6) | function mpmlAst (compiled, options = {}, log) {

FILE: src/platforms/mp/compiler/wx/index.js
  function compileToMPML (line 4) | function compileToMPML (compiled, options = {}) {

FILE: src/platforms/mp/runtime/diff-data.js
  constant KEY_SEP (line 5) | const KEY_SEP = '_'
  function getDeepData (line 7) | function getDeepData (keyList, viewData) {
  function deepDiff (line 25) | function deepDiff (oldData, newData, data, key) {
  function compareAndSetDeepData (line 76) | function compareAndSetDeepData (key, newData, vm, data) {
  function cleanKeyPath (line 92) | function cleanKeyPath (vm) {
  function minifyDeepData (line 100) | function minifyDeepData (rootKey, originKey, vmData, data, _mpValueSet, ...
  function getRootKey (line 144) | function getRootKey (vm, rootKey) {
  function diffData (line 154) | function diffData (vm, data) {

FILE: src/platforms/mp/runtime/events.js
  function isVmKeyMatchedCompkey (line 5) | function isVmKeyMatchedCompkey (k, comkey) {
  function getVM (line 15) | function getVM (vm, comkeys = []) {
  function getHandle (line 41) | function getHandle (vnode, eventid, eventTypes = []) {
  function getWebEventByMP (line 81) | function getWebEventByMP (e) {
  constant KEY_SEP (line 103) | const KEY_SEP = '_'
  function handleProxyWithVue (line 104) | function handleProxyWithVue (e) {

FILE: src/platforms/mp/runtime/lifecycle.js
  function _next (line 6) | function _next (rootVueVM) {
  function callHook (line 16) | function callHook (vm, hook, params) {
  function getGlobalData (line 48) | function getGlobalData (app, rootVueVM) {
  function normalizeProps (line 104) | function normalizeProps (props, res, vm) {
  function normalizeProperties (line 149) | function normalizeProperties (vm) {
  function initMpProps (line 163) | function initMpProps (vm) {
  function initMP (line 175) | function initMP (mpType, next) {
  function createMP (line 200) | function createMP ({ mpType, init }) {

FILE: src/platforms/mp/runtime/node-ops.js
  function createElement (line 7) | function createElement (tagName: string, vnode: VNode) {
  function createElementNS (line 11) | function createElementNS (namespace: string, tagName: string) {
  function createTextNode (line 15) | function createTextNode (text: string) {
  function createComment (line 19) | function createComment (text: string) {
  function insertBefore (line 23) | function insertBefore (parentNode: Node, newNode: Node, referenceNode: N...
  function removeChild (line 25) | function removeChild (node: Node, child: Node) {}
  function appendChild (line 27) | function appendChild (node: Node, child: Node) {}
  function parentNode (line 29) | function parentNode (node: Node) {
  function nextSibling (line 33) | function nextSibling (node: Node) {
  function tagName (line 37) | function tagName (node: Element): string {
  function setTextContent (line 41) | function setTextContent (node: Node, text: string) {
  function setAttribute (line 45) | function setAttribute (node: Element, key: string, val: string) {

FILE: src/platforms/mp/runtime/patch.js
  function patch (line 17) | function patch () {

FILE: src/platforms/mp/runtime/render.js
  constant KEY_SEP (line 24) | const KEY_SEP = '_'
  function getVmData (line 26) | function getVmData (vm) {
  function getParentComKey (line 40) | function getParentComKey (vm, res = []) {
  function formatVmData (line 50) | function formatVmData (vm) {
  function collectVmData (line 62) | function collectVmData (vm, res = {}) {
  function throttle (line 80) | function throttle (func, wait, options) {
  function getPage (line 126) | function getPage (vm) {
  function updateDataToMP (line 139) | function updateDataToMP () {
  function initDataToMP (line 150) | function initDataToMP () {

FILE: src/platforms/mp/runtime/runtime-trace.js
  function diffLog (line 3) | function diffLog (updateData) {

FILE: src/platforms/mp/util/index.js
  function mustUseProp (line 33) | function mustUseProp () { /* console.log('mustUseProp') */ }
  function getTagNamespace (line 34) | function getTagNamespace () { /* console.log('getTagNamespace') */ }
  function isUnknownElement (line 35) | function isUnknownElement () { /* console.log('isUnknownElement') */ }
  function query (line 37) | function query (el, document) {
  function getComKey (line 45) | function getComKey (vm) {
  function isObject (line 67) | function isObject (obj) {
  function cloneDeep (line 71) | function cloneDeep (data, hash = new WeakMap()) {

FILE: src/platforms/web/compiler/directives/html.js
  function html (line 5) | function html (el: ASTElement, dir: ASTDirective) {

FILE: src/platforms/web/compiler/directives/model.js
  constant RANGE_TOKEN (line 11) | const RANGE_TOKEN = '__r'
  constant CHECKBOX_RADIO_TOKEN (line 12) | const CHECKBOX_RADIO_TOKEN = '__c'
  function genCheckboxModel (line 72) | function genCheckboxModel (
  function genRadioModel (line 103) | function genRadioModel (
  function genSelect (line 115) | function genSelect (

FILE: src/platforms/web/compiler/directives/text.js
  function text (line 5) | function text (el: ASTElement, dir: ASTDirective) {

FILE: src/platforms/web/compiler/modules/class.js
  function transformNode (line 10) | function transformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 33) | function genData (el: ASTElement): string {

FILE: src/platforms/web/compiler/modules/style.js
  function transformNode (line 11) | function transformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 36) | function genData (el: ASTElement): string {

FILE: src/platforms/web/entry-runtime-with-compiler.js
  method if (line 37) | if (typeof template === 'string') {
  method if (line 51) | if (process.env.NODE_ENV !== 'production') {
  method if (line 61) | if (process.env.NODE_ENV !== 'production' && config.performance && mark) {

FILE: src/platforms/web/runtime/components/transition-group.js
  method if (line 47) | if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
  method if (line 127) | if (!hasTransition) {
  method if (line 131) | if (this._hasMove) {

FILE: src/platforms/web/runtime/components/transition.js
  function componentOptions (line 30) | function getRealChild (vnode: ?VNode): ?VNode {
  function isSameChild (line 71) | function isSameChild (child: VNode, oldChild: VNode): boolean {
  function isAsyncPlaceholder (line 75) | function isAsyncPlaceholder (node: VNode): boolean {

FILE: src/platforms/web/runtime/directives/model.js
  method inserted (line 23) | inserted (el, binding, vnode) {
  method componentUpdated (line 52) | componentUpdated (el, binding, vnode) {
  function setSelected (line 69) | function setSelected (el, binding, vm) {
  function hasNoMatchingOption (line 104) | function hasNoMatchingOption (value, options) {
  function getValue (line 113) | function getValue (option) {
  function onCompositionStart (line 119) | function onCompositionStart (e) {
  function onCompositionEnd (line 123) | function onCompositionEnd (e) {
  function trigger (line 130) | function trigger (el, type) {

FILE: src/platforms/web/runtime/directives/show.js
  function locateNode (line 7) | function locateNode (vnode: VNode): VNodeWithData {

FILE: src/platforms/web/runtime/modules/attrs.js
  function updateAttrs (line 20) | function updateAttrs (oldVnode: VNodeWithData, vnode: VNodeWithData) {
  function setAttr (line 60) | function setAttr (el: Element, key: string, value: any) {

FILE: src/platforms/web/runtime/modules/class.js
  function updateClass (line 14) | function updateClass (oldVnode: any, vnode: any) {

FILE: src/platforms/web/runtime/modules/dom-props.js
  function updateDOMProps (line 5) | function updateDOMProps (oldVnode: VNodeWithData, vnode: VNodeWithData) {
  function shouldUpdateValue (line 51) | function shouldUpdateValue (
  function isDirty (line 63) | function isDirty (elm: acceptValueElm, checkVal: string): boolean {
  function isInputChanged (line 69) | function isInputChanged (elm: any, newVal: string): boolean {

FILE: src/platforms/web/runtime/modules/events.js
  function normalizeEvents (line 12) | function normalizeEvents (on) {
  function add (line 31) | function add (

FILE: src/platforms/web/runtime/modules/style.js
  function updateStyle (line 47) | function updateStyle (oldVnode: VNodeWithData, vnode: VNodeWithData) {

FILE: src/platforms/web/runtime/modules/transition.js
  function leave (line 174) | function leave (vnode: VNodeWithData, rm: Function) {
  function checkDuration (line 279) | function checkDuration (val, name, vnode) {
  function isValidDuration (line 295) | function isValidDuration (val) {
  function getHookArgumentsLength (line 305) | function getHookArgumentsLength (fn: Function): boolean {
  function _enter (line 322) | function _enter (_: any, vnode: VNodeWithData) {
  method if (line 333) | if (vnode.data.show !== true) {

FILE: src/platforms/web/runtime/node-ops.js
  function createElement (line 5) | function createElement (tagName: string, vnode: VNode): Element {
  function createElementNS (line 17) | function createElementNS (namespace: string, tagName: string): Element {
  function createTextNode (line 21) | function createTextNode (text: string): Text {
  function createComment (line 25) | function createComment (text: string): Comment {
  function insertBefore (line 29) | function insertBefore (parentNode: Node, newNode: Node, referenceNode: N...
  function removeChild (line 33) | function removeChild (node: Node, child: Node) {
  function appendChild (line 37) | function appendChild (node: Node, child: Node) {
  function tagName (line 49) | function tagName (node: Element): string {
  function setTextContent (line 53) | function setTextContent (node: Node, text: string) {
  function setAttribute (line 57) | function setAttribute (node: Element, key: string, val: string) {

FILE: src/platforms/web/runtime/transition-util.js
  method if (line 8) | if (!def) {
  method if (line 46) | if (window.ontransitionend === undefined &&
  method if (line 135) | if (transitionTimeout > 0) {
  method if (line 141) | if (animationTimeout > 0) {
  method while (line 172) | while (delays.length < durations.length) {

FILE: src/platforms/web/server/directives/show.js
  function show (line 3) | function show (node: VNodeWithData, dir: VNodeDirective) {

FILE: src/platforms/web/server/modules/attrs.js
  function renderAttrs (line 16) | function renderAttrs (node: VNodeWithData): string {
  function renderAttr (line 45) | function renderAttr (key: string, value: string): string {

FILE: src/platforms/web/server/modules/dom-props.js
  function renderDOMProps (line 8) | function renderDOMProps (node: VNodeWithData): string {
  function setText (line 43) | function setText (node, text, raw) {

FILE: src/platforms/web/server/modules/style.js
  function genStyle (line 7) | function genStyle (style: Object): string {

FILE: src/platforms/web/server/util.js
  constant ESC (line 38) | const ESC = {
  function escape (line 45) | function escape (s: string) {
  function escapeChar (line 51) | function escapeChar (a) {

FILE: src/platforms/web/util/class.js
  function genClassForVnode (line 5) | function genClassForVnode (vnode: VNode): string {
  function mergeClassData (line 23) | function mergeClassData (child: VNodeData, parent: VNodeData): {
  function stringifyClass (line 50) | function stringifyClass (value: any): string {
  method if (line 68) | if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {

FILE: src/platforms/web/util/compat.js
  function shouldDecode (line 6) | function shouldDecode (content: string, encoded: string): boolean {

FILE: src/platforms/web/util/element.js
  function isUnknownElement (line 52) | function isUnknownElement (tag: string): boolean {

FILE: src/platforms/web/util/index.js
  method if (line 13) | if (typeof el === 'string') {

FILE: src/platforms/web/util/style.js
  function getStyle (line 43) | function getStyle (vnode: VNode, checkChild: boolean): Object {

FILE: src/platforms/weex/compiler/modules/append.js
  function preTransformNode (line 3) | function preTransformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 13) | function genData (el: ASTElement): string {

FILE: src/platforms/weex/compiler/modules/class.js
  function transformNode (line 15) | function transformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 37) | function genData (el: ASTElement): string {
  function parseStaticClass (line 48) | function parseStaticClass (staticClass: ?string, options: CompilerOption...

FILE: src/platforms/weex/compiler/modules/props.js
  function normalizeKeyName (line 7) | function normalizeKeyName (str: string): string {
  function transformNode (line 16) | function transformNode (el: ASTElement, options: CompilerOptions) {

FILE: src/platforms/weex/compiler/modules/style.js
  function transformNode (line 18) | function transformNode (el: ASTElement, options: CompilerOptions) {
  function genData (line 40) | function genData (el: ASTElement): string {
  function parseStaticStyle (line 51) | function parseStaticStyle (staticStyle: ?string, options: CompilerOption...

FILE: src/platforms/weex/entry-framework.js
  function init (line 21) | function init (cfg) {
  function reset (line 31) | function reset () {
  function clear (line 45) | function clear (obj) {
  function createInstance (line 59) | function createInstance (
  function destroyInstance (line 114) | function destroyInstance (instanceId) {
  function refreshInstance (line 130) | function refreshInstance (instanceId, data) {
  function getRoot (line 146) | function getRoot (instanceId) {
  function fireEvent (line 163) | function fireEvent (instance, nodeId, type, e, domChanges) {
  function callback (line 171) | function callback (instance, callbackId, data, ifKeepAlive) {
  function receiveTasks (line 183) | function receiveTasks (id, tasks) {
  function registerModules (line 205) | function registerModules (newModules) {
  function isRegisteredModule (line 225) | function isRegisteredModule (name, method) {
  function registerComponents (line 236) | function registerComponents (newComponents) {
  function isRegisteredComponent (line 255) | function isRegisteredComponent (name) {
  function supports (line 263) | function supports (condition) {
  function createVueModuleInstance (line 283) | function createVueModuleInstance (instanceId, moduleGetter) {
  function genModuleGetter (line 344) | function genModuleGetter (instanceId) {
  function getInstanceTimer (line 378) | function getInstanceTimer (instanceId, moduleGetter) {
  function callFunction (line 414) | function callFunction (globalObjects, body) {
  function callFunctionNative (line 438) | function callFunctionNative (globalObjects, body) {

FILE: src/platforms/weex/runtime/components/transition-group.js
  method created (line 14) | created () {
  method render (line 32) | render (h) {
  method beforeUpdate (line 78) | beforeUpdate () {
  method updated (line 89) | updated () {
  method getMoveData (line 132) | getMoveData (context, moveClass) {

FILE: src/platforms/weex/runtime/modules/attrs.js
  function updateAttrs (line 5) | function updateAttrs (oldVnode: VNodeWithData, vnode: VNodeWithData) {

FILE: src/platforms/weex/runtime/modules/class.js
  function updateClass (line 5) | function updateClass (oldVnode: VNodeWithData, vnode: VNodeWithData) {
  function getStyle (line 44) | function getStyle (oldClassList: Array<string>, classList: Array<string>...

FILE: src/platforms/weex/runtime/modules/events.js
  function add (line 7) | function add (

FILE: src/platforms/weex/runtime/modules/style.js
  function createStyle (line 7) | function createStyle (oldVnode: VNodeWithData, vnode: VNodeWithData) {
  function updateStyle (line 22) | function updateStyle (oldVnode: VNodeWithData, vnode: VNodeWithData) {
  function toObject (line 55) | function toObject (arr) {

FILE: src/platforms/weex/runtime/modules/transition.js
  function enter (line 12) | function enter (_, vnode) {
  function leave (line 132) | function leave (vnode, rm) {
  function getEnterTargetState (line 228) | function getEnterTargetState (el, stylesheet, startClass, endClass, acti...

FILE: src/platforms/weex/runtime/node-ops.js
  function createElement (line 6) | function createElement (tagName) {
  function createElementNS (line 10) | function createElementNS (namespace, tagName) {
  function createTextNode (line 14) | function createTextNode (text) {
  function createComment (line 18) | function createComment (text) {
  function insertBefore (line 22) | function insertBefore (node, target, before) {
  function removeChild (line 37) | function removeChild (node, child) {
  function appendChild (line 45) | function appendChild (node, child) {
  function parentNode (line 61) | function parentNode (node) {
  function nextSibling (line 65) | function nextSibling (node) {
  function tagName (line 69) | function tagName (node) {
  function setTextContent (line 73) | function setTextContent (node, text) {
  function setAttribute (line 77) | function setAttribute (node, key, val) {

FILE: src/platforms/weex/runtime/text-node.js
  function TextNode (line 3) | function TextNode (text) {

FILE: src/platforms/weex/util/index.js
  function mustUseProp (line 27) | function mustUseProp () { /* console.log('mustUseProp') */ }
  function getTagNamespace (line 28) | function getTagNamespace () { /* console.log('getTagNamespace') */ }
  function isUnknownElement (line 29) | function isUnknownElement () { /* console.log('isUnknownElement') */ }
  function query (line 31) | function query (el, document) {

FILE: src/server/bundle-renderer/create-bundle-renderer.js
  constant INVALID_MSG (line 11) | const INVALID_MSG =
  function createBundleRendererCreator (line 30) | function createBundleRendererCreator (

FILE: src/server/bundle-renderer/create-bundle-runner.js
  function createSandbox (line 8) | function createSandbox (context) {
  function compileModule (line 25) | function compileModule (files, basedir, runInNewContext) {
  function deepClone (line 77) | function deepClone (val) {
  function createBundleRunner (line 91) | function createBundleRunner (entry, files, basedir, runInNewContext) {

FILE: src/server/bundle-renderer/source-map-support.js
  function createSourceMapConsumers (line 7) | function createSourceMapConsumers (rawMaps: Object) {
  function rewriteErrorTrace (line 15) | function rewriteErrorTrace (e: any, mapConsumers: {
  function rewriteTraceLine (line 25) | function rewriteTraceLine (trace: string, mapConsumers: {

FILE: src/server/create-basic-renderer.js
  function createBasicRenderer (line 7) | function createBasicRenderer ({

FILE: src/server/optimizing-compiler/codegen.js
  constant RAW (line 35) | const RAW = 0
  constant INTERPOLATION (line 36) | const INTERPOLATION = 1
  constant EXPRESSION (line 37) | const EXPRESSION = 2
  function generate (line 39) | function generate (
  function genSSRElement (line 51) | function genSSRElement (el: ASTElement, state: CodegenState): string {
  function genNormalElement (line 81) | function genNormalElement (el, state, stringifyChildren) {
  function genSSRChildren (line 93) | function genSSRChildren (el, state, checkSkip) {
  function genSSRNode (line 97) | function genSSRNode (el, state) {
  function genChildrenAsStringNode (line 103) | function genChildrenAsStringNode (el, state) {
  function genStringElement (line 109) | function genStringElement (el, state) {
  function genStringElementWithChildren (line 113) | function genStringElementWithChildren (el, state) {
  function elementToString (line 122) | function elementToString (el, state) {
  function elementToSegments (line 126) | function elementToSegments (el, state): Array<StringSegment> {
  function elementToOpenTagSegments (line 153) | function elementToOpenTagSegments (el, state): Array<StringSegment> {
  function childrenToSegments (line 200) | function childrenToSegments (el, state): Array<StringSegment> {
  function nodesToSegments (line 213) | function nodesToSegments (

FILE: src/server/optimizing-compiler/modules.js
  function applyModelTransform (line 28) | function applyModelTransform (el: ASTElement, state: CodegenState) {
  method if (line 63) | if (plainStringRE.test(value)) {
  method if (line 90) | if (staticClass && !classBinding) {
  method if (line 106) | if (staticStyle && !styleBinding && !vShowExpression) {

FILE: src/server/optimizing-compiler/optimizer.js
  function walk (line 32) | function walk (node: ASTNode, isRoot?: boolean) {
  function optimizeSiblings (line 74) | function optimizeSiblings (el) {
  function isUnOptimizableTree (line 109) | function isUnOptimizableTree (node: ASTNode): boolean {

FILE: src/server/optimizing-compiler/runtime-helpers.js
  function installSSRHelpers (line 20) | function installSSRHelpers (vm: Component) {
  method for (line 85) | for (i = 0, l = val.length; i < l; i++) {
  method for (line 89) | for (i = 0; i < val; i++) {

FILE: src/server/render-context.js
  function normalizeAsync (line 111) | function normalizeAsync (cache, method) {

FILE: src/server/render-stream.js
  class RenderStream (line 16) | class RenderStream extends stream.Readable {
    method constructor (line 25) | constructor (render: Function) {
    method pushBySize (line 51) | pushBySize (n: number) {
    method tryRender (line 57) | tryRender () {
    method tryNext (line 65) | tryNext () {
    method _read (line 73) | _read (n: number) {

FILE: src/server/render.js
  function renderNode (line 45) | function renderNode (node, isRoot, context) {
  function registerComponentForCache (line 67) | function registerComponentForCache (options, write) {
  function renderComponent (line 77) | function renderComponent (node, isRoot, context) {
  function renderComponentWithCache (line 136) | function renderComponentWithCache (node, isRoot, key, context) {
  function renderComponentInner (line 153) | function renderComponentInner (node, isRoot, context) {
  function renderAsyncComponent (line 171) | function renderAsyncComponent (node, isRoot, context) {
  function renderStringNode (line 224) | function renderStringNode (el, context) {
  function renderElement (line 240) | function renderElement (el, isRoot, context) {
  function hasAncestorData (line 271) | function hasAncestorData (node: VNode) {
  function tmp (line 276) | function getVShowDirectiveInfo (node: VNode): ?VNodeDirective {
  function renderStartingTag (line 292) | function renderStartingTag (node: VNode, context) {

FILE: src/server/template-renderer/create-async-file-mapper.js
  method for (line 23) | for (let j = 0; j < mapped.length; j++) {

FILE: src/server/template-renderer/index.js
  method constructor (line 50) | constructor (options: TemplateRendererOptions) {
  method bindRenderFns (line 71) | bindRenderFns (context: Object) {
  method if (line 220) | if (!context._mappedFiles && context._registeredComponents && this.mapFi...
  method if (line 228) | if (!this.parsedTemplate) {

FILE: src/server/template-renderer/parse-template.js
  method if (line 19) | if (typeof template === 'object') {

FILE: src/server/template-renderer/template-stream.js
  class TemplateStream (line 7) | class TemplateStream extends Transform {
    method constructor (line 14) | constructor (
    method _transform (line 27) | _transform (data: Buffer | string, encoding: string, done: Function) {
    method start (line 36) | start () {
    method _flush (line 62) | _flush (done: Function) {

FILE: src/server/webpack-plugin/client.js
  class VueSSRClientPlugin (line 5) | class VueSSRClientPlugin {
    method constructor (line 6) | constructor (options = {}) {
    method apply (line 12) | apply (compiler) {

FILE: src/server/webpack-plugin/server.js
  class VueSSRServerPlugin (line 3) | class VueSSRServerPlugin {
    method constructor (line 4) | constructor (options = {}) {
    method apply (line 10) | apply (compiler) {

FILE: src/server/write.js
  constant MAX_STACK_DEPTH (line 3) | const MAX_STACK_DEPTH = 1000
  function createWriteFunction (line 5) | function createWriteFunction (

FILE: src/sfc/parser.js
  method for (line 66) | for (let i = 0; i < attrs.length; i++) {

FILE: src/shared/constants.js
  constant SSR_ATTR (line 1) | const SSR_ATTR = 'data-server-rendered'
  constant ASSET_TYPES (line 3) | const ASSET_TYPES = [
  constant LIFECYCLE_HOOKS (line 9) | const LIFECYCLE_HOOKS = [

FILE: src/shared/util.js
  function isPlainObject (line 43) | function isPlainObject (obj: any): boolean {
  function isRegExp (line 47) | function isRegExp (v: any): boolean {
  function isValidArrayIndex (line 54) | function isValidArrayIndex (val: any): boolean {
  function toString (line 62) | function toString (val: any): string {
  method if (line 111) | if (arr.length) {
  method for (line 198) | for (const key in _from) {
  method if (line 210) | if (arr[i]) {
  method String (line 258) | String(b)

FILE: test/e2e/specs/grid.js
  function assertTable (line 93) | function assertTable (data) {

FILE: test/e2e/specs/todomvc.js
  function createNewItem (line 156) | function createNewItem (text) {
  function removeItemAt (line 160) | function removeItemAt (n) {

FILE: test/helpers/test-object-option.js
  function testObjectOption (line 3) | function testObjectOption (name) {

FILE: test/helpers/to-have-been-warned.js
  function noop (line 1) | function noop () {}
  function createCompareFn (line 15) | function createCompareFn (spy) {

FILE: test/helpers/wait-for-update.js
  function shift (line 19) | function shift () {
  function timeout (line 71) | function timeout (n) {

FILE: test/mp/compiler/index.spec.js
  function assertCodegen (line 4) | function assertCodegen (template, assertTemplate, options, parmas = {}) {

FILE: test/mp/helpers/index.js
  function strToRegExp (line 2) | function strToRegExp (str) {
  function createInstance (line 16) | function createInstance (options) {

FILE: test/mp/helpers/mp.runtime.js
  function getObjByPath (line 3) | function getObjByPath (obj = {}, path, op = '.') {
  class MPPage (line 18) | class MPPage {
    method constructor (line 19) | constructor (config) {
    method setData (line 33) | setData (obj) {
    method _initLifecycle (line 45) | _initLifecycle () {
    method _callHook (line 51) | _callHook (hook, ev) {
    method _leaveAndBack (line 58) | _leaveAndBack () {
  class MPApp (line 66) | class MPApp extends MPPage {
    method _initLifecycle (line 68) | _initLifecycle () {
  class MPComponent (line 74) | class MPComponent extends MPPage {
    method _initLifecycle (line 76) | _initLifecycle () {
    method _leaveAndBack (line 82) | _leaveAndBack () {
  function Page (line 87) | function Page (config) {
  function App (line 91) | function App (config) {
  function getApp (line 96) | function getApp () {
  function Component (line 100) | function Component (config) {

FILE: test/mp/runtime/events.spec.js
  method clickHandle (line 10) | clickHandle (str, ev) {
  method render (line 20) | render () {
  method onShareAppMessage (line 48) | onShareAppMessage (options) {
  method render (line 58) | render () {
  method clickHandle (line 89) | clickHandle (str, ev) {
  method render (line 98) | render () {
  method clickHandle (line 121) | clickHandle (str, ev) {
  method render (line 134) | render () {
  method data (line 166) | data () {
  method render (line 175) | render () {
  method data (line 220) | data () {
  method handle (line 226) | handle (ev) {
  method render (line 234) | render () {

FILE: test/mp/runtime/instance.spec.js
  method data (line 6) | data () {
  method render (line 12) | render () {
  function getDefAppData (line 22) | function getDefAppData () {
  function getDefAppDataByVfor (line 35) | function getDefAppDataByVfor () {
  method created (line 81) | created () {
  method created (line 101) | created () {
  method message (line 122) | message () {
  method render (line 143) | render () {
  method data (line 156) | data () {
  method render (line 164) | render () {
  method render (line 208) | render () {
  method data (line 221) | data () {
  method render (line 229) | render () {
  method render (line 259) | render () {
  method data (line 272) | data () {
  method created (line 277) | created () {
  method render (line 283) | render () {
  method data (line 314) | data () {
  method created (line 319) | created () {
  method render (line 325) | render () {
  method data (line 338) | data () {
  method render (line 346) | render () {

FILE: test/mp/runtime/lifecycle.spec.js
  function getComponentOptions (line 8) | function getComponentOptions (key = '') {
  method render (line 117) | render () {
  method render (line 143) | render () {
  method render (line 156) | render () {
  method render (line 191) | render () {
  method render (line 219) | render () {
  method render (line 257) | render () {
  method render (line 277) | render () {
  method render (line 291) | render () {
  method render (line 325) | render () {

FILE: test/ssr/compile-with-webpack.js
  function compileWithWebpack (line 5) | function compileWithWebpack (file, extraConfig, cb) {

FILE: test/ssr/fixtures/app.js
  method render (line 7) | render (h) {

FILE: test/ssr/fixtures/async-bar.js
  method beforeCreate (line 2) | beforeCreate () {
  method render (line 5) | render (h) {

FILE: test/ssr/fixtures/async-foo.js
  method beforeCreate (line 7) | beforeCreate () {
  method render (line 10) | render (h) {

FILE: test/ssr/fixtures/cache.js
  method render (line 7) | render (h) {

FILE: test/ssr/fixtures/nested-cache.js
  function createRegisterFn (line 3) | function createRegisterFn (id) {
  function addHooks (line 10) | function addHooks (comp) {
  method render (line 22) | render (h) {
  method render (line 31) | render (h) {
  method render (line 40) | render (h) {

FILE: test/ssr/fixtures/split.js
  method render (line 11) | render (h) {

FILE: test/ssr/ssr-basic-renderer.spec.js
  method render (line 25) | render () {
  method testAsync (line 29) | testAsync (resolve) {
  method created (line 61) | created () {

FILE: test/ssr/ssr-bundle-render.spec.js
  function createRenderer (line 6) | function createRenderer (file, options, cb) {
  function createAssertions (line 40) | function createAssertions (runInNewContext) {

FILE: test/ssr/ssr-stream.spec.js
  method bComp (line 24) | bComp (resolve) {
  method render (line 42) | render (h) {
  method render (line 70) | render () {

FILE: test/ssr/ssr-string.spec.js
  method data (line 398) | data () {
  method render (line 401) | render () {
  method beforeCreate (line 420) | beforeCreate () {
  method created (line 423) | created () {
  method beforeCreate (line 430) | beforeCreate () {
  method created (line 433) | created () {
  method render (line 436) | render () {
  method b (line 462) | b () {
  method created (line 466) | created () {
  method testAsync (line 484) | testAsync (resolve) {
  method render (line 543) | render () {
  method render (line 574) | render () {
  method testAsync (line 578) | testAsync (resolve) {
  method render (line 703) | render () {
  method render (line 728) | render () {
  method render (line 753) | render () {
  method render (line 781) | render () {
  function renderVmWithOptions (line 900) | function renderVmWithOptions (options, cb) {

FILE: test/ssr/ssr-template.spec.js
  function generateClientManifest (line 11) | function generateClientManifest (file, cb) {
  function createRendererWithManifest (line 29) | function createRendererWithManifest (file, options, cb) {
  function createClientManifestAssertions (line 250) | function createClientManifestAssertions (runInNewContext) {

FILE: test/unit/features/component/component-async.spec.js
  function next (line 22) | function next () {
  function next (line 49) | function next () {
  function next (line 73) | function next () {
  function step1 (line 107) | function step1 () {
  function step2 (line 115) | function step2 () {
  function next (line 156) | function next () {
  function next (line 183) | function next () {
  function next (line 221) | function next () {
  function next (line 250) | function next () {
  function next (line 279) | function next () {
  function next (line 317) | function next () {

FILE: test/unit/features/component/component-keep-alive.spec.js
  function assertHookCalls (line 34) | function assertHookCalls (component, callCounts) {
  function sharedAssertions (line 212) | function sharedAssertions (vm, done) {
  method afterLeave (line 496) | afterLeave () {
  method afterLeave (line 581) | afterLeave () {
  method afterEnter (line 666) | afterEnter () {
  method afterEnter (line 759) | afterEnter () {

FILE: test/unit/features/component/component-scoped-slot.spec.js
  method data (line 15) | data () {
  method data (line 45) | data () {
  method data (line 79) | data () {
  method data (line 103) | data () {
  method data (line 130) | data () {
  function assertOutput (line 144) | function assertOutput () {
  method data (line 168) | data () {
  function assertOutput (line 184) | function assertOutput () {
  method data (line 206) | data () {
  method data (line 231) | data () {
  method data (line 256) | data () {
  method render (line 274) | render (h) {
  method data (line 284) | data () {
  method render (line 287) | render (h) {
  method render (line 307) | render (h) {
  method data (line 314) | data () {
  method render (line 317) | render (h) {
  method render (line 365) | render (h) {
  method data (line 372) | data () {
  method render (line 375) | render (h) {

FILE: test/unit/features/component/component-slot.spec.js
  function mount (line 5) | function mount (options) {
  method render (line 303) | render () {
  method render (line 333) | render () {
  method render (line 407) | render (h, ctx) {
  method data (line 428) | data () {
  method data (line 455) | data () {
  method created (line 462) | created () {
  method destroyed (line 465) | destroyed () {
  method render (line 581) | render (h, { slots }) {
  method render (line 616) | render (h) {
  method render (line 623) | render (h) {
  method render (line 630) | render (h) {

FILE: test/unit/features/component/component.spec.js
  method data (line 9) | data () {
  method data (line 25) | data () {
  method data (line 40) | data () {
  method data (line 58) | data () {
  method data (line 72) | data () {
  method data (line 91) | data () {
  method data (line 97) | data () {
  method data (line 200) | data () {
  method data (line 228) | data () {
  method created (line 285) | created () {
  method data (line 312) | data () {
  method render (line 315) | render (h) {
  method render (line 353) | render (h) {
  method render (line 377) | render (h) {
  method mounted (line 380) | mounted () {
  method beforeDestroy (line 383) | beforeDestroy () {
  method data (line 391) | data () {

FILE: test/unit/features/directives/bind.spec.js
  method handleUpdate (line 203) | handleUpdate () {
  function makeInstance (line 360) | function makeInstance (options) {

FILE: test/unit/features/directives/class.spec.js
  function assertClass (line 3) | function assertClass (assertions, done) {
  method render (line 114) | render () {
  method render (line 119) | render () {

FILE: test/unit/features/directives/for.spec.js
  function assertMarkup (line 332) | function assertMarkup () {
  function assertMarkup (line 372) | function assertMarkup () {
  method render (line 415) | render () {}

FILE: test/unit/features/directives/if.spec.js
  method data (line 225) | data () {

FILE: test/unit/features/directives/model-select.spec.js
  function hasMultiSelectBug (line 6) | function hasMultiSelectBug () {
  function updateSelect (line 20) | function updateSelect (el, value) {
  function getValue (line 31) | function getValue (option) {

FILE: test/unit/features/directives/model-text.spec.js
  method onInput (line 227) | onInput (e) {
  method onInput (line 262) | onInput (e) {
  method onInput (line 283) | onInput (e) {

FILE: test/unit/features/directives/on.spec.js
  method foo (line 95) | foo ($event) {
  method foo (line 115) | foo () { callOrder.push(1) }
  method bar (line 116) | bar () { callOrder.push(2) }
  method foo (line 171) | foo () { callOrder.push(1) }
  method bar (line 172) | bar () { callOrder.push(2) }
  method render (line 357) | render (h) {
  method stopped (line 379) | stopped (ev) { ev.stopPropagation() }
  method render (line 383) | render (h) {
  method render (line 409) | render (h) {
  method stopped (line 433) | stopped (ev) { ev.stopPropagation() }
  method render (line 437) | render (h) {
  method render (line 470) | render (h) {
  method foo (line 554) | foo (e) {
  method foo (line 582) | foo ($event) {
  method foo (line 597) | foo () {}
  method created (line 609) | created () {
  method created (line 633) | created () {

FILE: test/unit/features/directives/once.spec.js
  function expectTextContent (line 340) | function expectTextContent (vm, text) {

FILE: test/unit/features/directives/style.spec.js
  function checkPrefixedProp (line 3) | function checkPrefixedProp (prop) {
  method data (line 24) | data () {

FILE: test/unit/features/error-handling.spec.js
  function getErrorMsg (line 70) | function getErrorMsg () {
  function createErrorTestComponents (line 129) | function createErrorTestComponents () {
  function createTestInstance (line 235) | function createTestInstance (Comp) {
  function assertRootInstanceActive (line 252) | function assertRootInstanceActive (vm, chain) {
  function assertBothInstancesActive (line 260) | function assertBothInstancesActive (vm) {

FILE: test/unit/features/global-api/extend.spec.js
  method created (line 57) | created () {
  method created (line 62) | created () {
  method created (line 67) | created () {
  method a (line 77) | a () { return this.n }
  method b (line 82) | b () { return this.n + 1 }
  method c (line 88) | c () { return this.n + 2 }

FILE: test/unit/features/global-api/mixin.spec.js
  method created (line 11) | created () {
  method beforeCreate (line 25) | beforeCreate () {
  method beforeCreate (line 30) | beforeCreate () {
  method created (line 132) | created () {

FILE: test/unit/features/instance/properties.spec.js
  method a (line 22) | a () {}
  method b (line 27) | b () {}
  method created (line 62) | created () {
  method render (line 116) | render () {}
  method mounted (line 117) | mounted () {

FILE: test/unit/features/instance/render-proxy.spec.js
  method render (line 25) | render (h) {

FILE: test/unit/features/options/comments.spec.js
  method data (line 7) | data () {

FILE: test/unit/features/options/computed.spec.js
  method b (line 12) | b () {
  method get (line 34) | get () { return this.a + 1 }
  method set (line 35) | set (v) { this.a = v - 1 }
  method data (line 63) | data () {
  method set (line 70) | set (v) { this.a = v }
  method b (line 88) | b () { return this.a + 1 }
  method b (line 105) | b () {
  method get (line 127) | get () {
  method data (line 144) | data () {
  method b (line 149) | b () {
  method c (line 158) | c () {

FILE: test/unit/features/options/data.spec.js
  method data (line 20) | data () {
  method data (line 38) | data () {
  method data (line 66) | data () {}
  method render (line 82) | render () {}
  method data (line 83) | data () {
  method get (line 99) | get () {
  method data (line 103) | data () {

FILE: test/unit/features/options/directives.spec.js
  method bind (line 26) | bind (el, binding, vnode) {
  method inserted (line 34) | inserted (el, binding, vnode) {
  method update (line 42) | update (el, binding, vnode, oldVnode) {
  method componentUpdated (line 53) | componentUpdated (el, binding, vnode) {
  method unbind (line 57) | unbind (el, binding, vnode) {
  method test (line 91) | test (el, binding, vnode) {

FILE: test/unit/features/options/el.spec.js
  method render (line 32) | render (h) {

FILE: test/unit/features/options/extends.spec.js
  method data (line 6) | data () {
  method data (line 12) | data () {
  method data (line 29) | data () {
  method data (line 35) | data () {

FILE: test/unit/features/options/functional.spec.js
  method render (line 13) | render (h, { props, children }) {
  method render (line 29) | render (h, { props }) {
  method render (line 36) | render (h) {
  method render (line 62) | render (h, { listeners }) {
  method render (line 86) | render (h) {
  method render (line 103) | render (h, { slots }) {
  method render (line 126) | render (h, { props, children, data: { on }}) {
  method render (line 133) | render () {
  method mounted (line 136) | mounted () {
  method destroyed (line 139) | destroyed () {
  method onInput (line 143) | onInput (e) {
  method validate (line 150) | validate (val) {
  method render (line 175) | render () {

FILE: test/unit/features/options/inject.spec.js
  method render (line 9) | render () {}
  method created (line 10) | created () {
  method provide (line 69) | provide () {
  method render (line 94) | render () {}
  method created (line 95) | created () {
  method data (line 129) | data () {
  method default (line 136) | default () {
  method render (line 160) | render (h, context) {
  method data (line 194) | data () {
  method provide (line 199) | provide () {
  method created (line 233) | created () {
  method created (line 279) | created () {}
  method created (line 296) | created () {}
  method created (line 310) | created () {
  method render (line 316) | render (h) {
  method created (line 329) | created () {
  method render (line 335) | render (h) {
  method created (line 350) | created () {
  method render (line 356) | render (h) {
  method created (line 369) | created () {
  method render (line 375) | render (h) {
  method created (line 387) | created () {
  method render (line 394) | render (h) {
  function isObserver (line 406) | function isObserver (obj) {
  method data (line 415) | data () {
  method provide (line 422) | provide () {

FILE: test/unit/features/options/lifecycle.spec.js
  method beforeCreate (line 15) | beforeCreate () {
  method created (line 36) | created () {
  method render (line 48) | render () {}
  method beforeMount (line 49) | beforeMount () {
  method mounted (line 67) | mounted () {
  method mounted (line 86) | mounted () {
  method mounted (line 97) | mounted () {
  method mounted (line 103) | mounted () {
  method mounted (line 110) | mounted () {
  method beforeUpdate (line 128) | beforeUpdate () {
  method updated (line 147) | updated () {
  method updated (line 168) | updated () {
  method updated (line 174) | updated () {
  method render (line 192) | render () {}
  method beforeDestroy (line 193) | beforeDestroy () {
  method render (line 210) | render () {}
  method destroyed (line 211) | destroyed () {
  method render (line 230) | render () {}
  method beforeCreate (line 231) | beforeCreate () {

FILE: test/unit/features/options/methods.spec.js
  method plus (line 11) | plus () {
  method foo (line 37) | foo () {}

FILE: test/unit/features/options/parent.spec.js
  method render (line 6) | render () {}
  method render (line 11) | render () {}

FILE: test/unit/features/options/props.spec.js
  function makeInstance (line 146) | function makeInstance (value, type, validator, required) {
  function Class (line 219) | function Class () {}
  method a (line 329) | a () {

FILE: test/unit/features/options/render.spec.js
  method render (line 6) | render (h) {
  method render (line 27) | render (h) {

FILE: test/unit/features/options/renderError.spec.js
  method render (line 10) | render (h) {
  method renderError (line 17) | renderError (h, err) {

FILE: test/unit/features/ref.spec.js
  method render (line 51) | render (h) {
  function assertRefs (line 110) | function assertRefs () {
  function assertRefs (line 142) | function assertRefs () {
  method data (line 153) | data () {
  function assertRefs (line 188) | function assertRefs () {

FILE: test/unit/features/transition/inject-styles.js
  function insertCSS (line 1) | function insertCSS (text) {
  function injectStyles (line 11) | function injectStyles () {

FILE: test/unit/features/transition/transition-group.spec.js
  function createBasicVM (line 16) | function createBasicVM (useIs, appear) {
  method beforeEnter (line 195) | beforeEnter (el) {
  method afterEnter (line 199) | afterEnter (el) {
  method afterLeave (line 204) | afterLeave (el) {

FILE: test/unit/features/transition/transition-mode.spec.js
  method afterLeave (line 62) | afterLeave () {
  method afterLeave (line 107) | afterLeave () {
  method afterEnter (line 154) | afterEnter () {
  method afterEnter (line 204) | afterEnter () {
  method afterLeave (line 299) | afterLeave () {
  method afterEnter (line 342) | afterEnter () {
  function next1 (line 411) | function next1 () {
  function next2 (line 427) | function next2 () {
  function next1 (line 526) | function next1 () {
  function next2 (line 541) | function next2 () {

FILE: test/unit/features/transition/transition.spec.js
  method render (line 143) | render (h) {
  method render (line 846) | render (h, { data, children }) {

FILE: test/unit/modules/compiler/codegen.spec.js
  function assertCodegen (line 8) | function assertCodegen (template, generatedCode, ...args) {

FILE: test/unit/modules/compiler/compiler-options.spec.js
  method validate (line 13) | validate (el, dir) {
  method transformNode (line 23) | transformNode (el) {
  method genData (line 33) | genData (el) {
  method transformCode (line 43) | transformCode (el, code) {
  method render (line 76) | render (h) {
  method valid (line 80) | valid () {
  method mounted (line 92) | mounted () {
  method required (line 102) | required (val) {
  method max (line 105) | max (val, rule) {

FILE: test/unit/modules/compiler/parser.spec.js
  method preTransformNode (line 471) | preTransformNode (el) {
  method postTransformNode (line 474) | postTransformNode (el) {

FILE: test/unit/modules/observer/observer.spec.js
  method get (line 67) | get () {
  method set (line 71) | set (v) { val = v }
  method get (line 101) | get () { return 123 }
  method set (line 132) | set (v) { val = v }
  method addDep (line 185) | addDep (dep) {
  method get (line 221) | get () { return this.val }
  method set (line 222) | set (v) {

FILE: test/unit/modules/observer/scheduler.spec.js
  function queueWatcher (line 7) | function queueWatcher (watcher) {
  method run (line 49) | run () { queueWatcher(job) }
  method a (line 64) | a () { calls.push(1) }
  method beforeUpdate (line 66) | beforeUpdate () {
  method a (line 84) | a () {
  method beforeUpdate (line 88) | beforeUpdate () {
  method a (line 97) | a () {
  method beforeUpdate (line 101) | beforeUpdate () {
  method run (line 117) | run () {
  method run (line 134) | run () {
  method updated (line 165) | updated () {

FILE: test/unit/modules/vdom/create-component.spec.js
  method data (line 9) | data () {
  method render (line 20) | render () {}
  function async (line 53) | function async (resolve, reject) {
  function go (line 62) | function go () {
  function loaded (line 67) | function loaded () {
  function async (line 89) | function async (resolve, reject) {
  function go (line 95) | function go () {
  function failed (line 99) | function failed () {

FILE: test/unit/modules/vdom/create-element.spec.js
  method render (line 149) | render (h) {
  method render (line 158) | render (h) {
  method render (line 168) | render (h) {

FILE: test/unit/modules/vdom/modules/attrs.spec.js
  method render (line 86) | render (h) {

FILE: test/unit/modules/vdom/modules/dom-props.spec.js
  method render (line 74) | render (h) {

FILE: test/unit/modules/vdom/patch/children.spec.js
  function prop (line 4) | function prop (name) {
  function map (line 8) | function map (fn, list) {
  function spanNum (line 16) | function spanNum (n) {
  function shuffle (line 24) | function shuffle (array) {
  function spanNumWithOpacity (line 242) | function spanNumWithOpacity (n, o) {
  function makeNode (line 449) | function makeNode (text) {
  function makeNode (line 470) | function makeNode (text) {

FILE: test/unit/modules/vdom/patch/edge-cases.spec.js
  method render (line 64) | render (h) {
  method render (line 77) | render (h) {

FILE: test/unit/modules/vdom/patch/hooks.spec.js
  function insert (line 19) | function insert (vnode) {
  function prepatch (line 38) | function prepatch (oldVnode, newVnode) {
  function prepatch (line 65) | function prepatch (oldVnode, newVnode) {
  function postpatch (line 68) | function postpatch (oldVnode, newVnode) {
  function cb (line 95) | function cb (result, oldVnode, newVnode) {
  function remove (line 123) | function remove (vnode, rm) {
  function init (line 148) | function init (vnode) { count++ }
  function prepatch (line 149) | function prepatch (oldVnode, newVnode) { count++ }
  method remove (line 163) | remove (_, rm) { rm1 = rm }
  method remove (line 164) | remove (_, rm) { rm2 = rm }
  method remove (line 168) | remove (_, rm) { rm3 = rm }
  function remove (line 188) | function remove (vnode, rm) {
  function destroy (line 207) | function destroy (vnode) { result.push(vnode) }
  method create (line 234) | create () { created++ }
  method destroy (line 235) | destroy () { destroyed++ }
  method create (line 259) | create () { created++ }
  method remove (line 260) | remove () { removed++ }
  method create (line 281) | create () { created++ }
  method destroy (line 282) | destroy () { destroyed++ }
  function create (line 305) | function create (empty, vnode) {

FILE: test/unit/modules/vdom/patch/hydration.spec.js
  function createMockSSRDOM (line 6) | function createMockSSRDOM (innerHTML) {
  function init (line 22) | function init (vnode) { result.push(vnode) }
  function createServerRenderedDOM (line 23) | function createServerRenderedDOM () {
  function traverseAndAssert (line 49) | function traverseAndAssert (vnode, element) {
  function createServerRenderedDOM (line 74) | function createServerRenderedDOM () {
  method data (line 112) | data () {
  method data (line 160) | data () {
  method data (line 180) | data () {

FILE: test/weex/helpers/index.js
  function strToRegExp (line 14) | function strToRegExp (str) {
  function compileAndStringify (line 18) | function compileAndStringify (template) {
  function parseStatic (line 26) | function parseStatic (fns) {
  function prepareRuntime (line 30) | function prepareRuntime () {
  function resetRuntime (line 43) | function resetRuntime () {
  function createInstance (line 48) | function createInstance (runtime, code) {
  function syncPromise (line 56) | function syncPromise (arr) {
  function checkRefresh (line 64) | function checkRefresh (instance, data, checker) {

FILE: test/weex/runtime/framework.spec.js
  function sendTasks (line 12) | function sendTasks () {

FILE: types/index.d.ts
  type CreateElement (line 9) | type CreateElement = V.CreateElement;
  type Component (line 11) | type Component = Options.Component;
  type AsyncComponent (line 12) | type AsyncComponent = Options.AsyncComponent;
  type ComponentOptions (line 13) | type ComponentOptions<V extends Vue> = Options.ComponentOptions<V>;
  type FunctionalComponentOptions (line 14) | type FunctionalComponentOptions = Options.FunctionalComponentOptions;
  type RenderContext (line 15) | type RenderContext = Options.RenderContext;
  type PropOptions (line 16) | type PropOptions = Options.PropOptions;
  type ComputedOptions (line 17) | type ComputedOptions<V extends Vue> = Options.ComputedOptions<V>;
  type WatchHandler (line 18) | type WatchHandler<V extends Vue> = Options.WatchHandler<V, any>;
  type WatchOptions (line 19) | type WatchOptions = Options.WatchOptions;
  type DirectiveFunction (line 20) | type DirectiveFunction = Options.DirectiveFunction;
  type DirectiveOptions (line 21) | type DirectiveOptions = Options.DirectiveOptions;
  type PluginFunction (line 23) | type PluginFunction<T> = Plugin.PluginFunction<T>;
  type PluginObject (line 24) | type PluginObject<T> = Plugin.PluginObject<T>;
  type VNodeChildren (line 26) | type VNodeChildren = VNode.VNodeChildren;
  type VNodeChildrenArrayContents (line 27) | type VNodeChildrenArrayContents = VNode.VNodeChildrenArrayContents;
  type VNode (line 28) | type VNode = VNode.VNode;
  type VNodeComponentOptions (line 29) | type VNodeComponentOptions = VNode.VNodeComponentOptions;
  type VNodeData (line 30) | type VNodeData = VNode.VNodeData;
  type VNodeDirective (line 31) | type VNodeDirective = VNode.VNodeDirective;
  class Vue (line 35) | class Vue extends V.Vue {}

FILE: types/options.d.ts
  type Constructor (line 4) | type Constructor = {
  type Component (line 8) | type Component = typeof Vue | ComponentOptions<Vue> | FunctionalComponen...
  type AsyncComponent (line 9) | type AsyncComponent = (
  type ComponentOptions (line 14) | interface ComponentOptions<V extends Vue> {
  type FunctionalComponentOptions (line 61) | interface FunctionalComponentOptions {
  type RenderContext (line 68) | interface RenderContext {
  type PropOptions (line 77) | interface PropOptions {
  type ComputedOptions (line 84) | interface ComputedOptions<V> {
  type WatchHandler (line 90) | type WatchHandler<V, T> = (this: V, val: T, oldVal: T) => void;
  type WatchOptions (line 92) | interface WatchOptions {
  type DirectiveFunction (line 97) | type DirectiveFunction = (
  type DirectiveOptions (line 104) | interface DirectiveOptions {

FILE: types/plugin.d.ts
  type PluginFunction (line 3) | type PluginFunction<T> = (Vue: typeof _Vue, options?: T) => void;
  type PluginObject (line 5) | interface PluginObject<T> {

FILE: types/test/augmentation-test.ts
  type Vue (line 5) | interface Vue {
  type ComponentOptions (line 19) | interface ComponentOptions<V extends Vue> {

FILE: types/test/options-test.ts
  type Component (line 4) | interface Component extends Vue {
  method data (line 9) | data() {
  method validator (line 22) | validator(value) {
  method aDouble (line 31) | aDouble(this: Component) {
  method get (line 35) | get(this: Component) {
  method set (line 38) | set(this: Component, v: number) {
  method plus (line 45) | plus() {
  method handler (line 55) | handler(val, oldVal) {
  method render (line 63) | render(createElement) {
  method beforeCreate (line 116) | beforeCreate() {
  method created (line 119) | created() {}
  method beforeDestroy (line 120) | beforeDestroy() {}
  method destroyed (line 121) | destroyed() {}
  method beforeMount (line 122) | beforeMount() {}
  method mounted (line 123) | mounted() {}
  method beforeUpdate (line 124) | beforeUpdate() {}
  method updated (line 125) | updated() {}
  method activated (line 126) | activated() {}
  method deactivated (line 127) | deactivated() {}
  method bind (line 131) | bind() {}
  method inserted (line 132) | inserted() {}
  method update (line 133) | update() {}
  method componentMounted (line 134) | componentMounted() {}
  method unbind (line 135) | unbind() {}
  method b (line 137) | b(el, binding, vnode, oldVnode) {
  method double (line 154) | double(value: number) {
  method render (line 166) | render (h) {
  method render (line 186) | render (h) {
  method render (line 199) | render(createElement, context) {

FILE: types/test/plugin-test.ts
  class Option (line 4) | class Option {
  method install (line 10) | install(Vue, option) {

FILE: types/test/vue-test.ts
  class Test (line 3) | class Test extends Vue {
    method testProperties (line 6) | testProperties() {
    method testReification (line 27) | testReification() {
    method testMethods (line 34) | testMethods() {
    method testConfig (line 56) | static testConfig() {
    method testMethods (line 76) | static testMethods() {

FILE: types/vnode.d.ts
  type ScopedSlot (line 3) | type ScopedSlot = (props: any) => VNodeChildrenArrayContents | string;
  type VNodeChildren (line 5) | type VNodeChildren = VNodeChildrenArrayContents | [ScopedSlot] | string;
  type VNodeChildrenArrayContents (line 6) | interface VNodeChildrenArrayContents {
  type VNode (line 10) | interface VNode {
  type VNodeComponentOptions (line 28) | interface VNodeComponentOptions {
  type VNodeData (line 36) | interface VNodeData {
  type VNodeDirective (line 62) | interface VNodeDirective {

FILE: types/vue.d.ts
  type CreateElement (line 14) | type CreateElement = {
  class Vue (line 31) | class Vue {
Condensed preview — 500 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,160K chars).
[
  {
    "path": ".babelrc",
    "chars": 160,
    "preview": "{\n  \"presets\": [\"es2015\", \"flow-vue\"],\n  \"plugins\": [\"transform-vue-jsx\", \"syntax-dynamic-import\"],\n  \"ignore\": [\n    \"d"
  },
  {
    "path": ".editorconfig",
    "chars": 244,
    "preview": "# http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert"
  },
  {
    "path": ".eslintignore",
    "chars": 19,
    "preview": "flow\ndist\npackages\n"
  },
  {
    "path": ".eslintrc",
    "chars": 184,
    "preview": "{\n  \"root\": true,\n  \"plugins\": [\n    \"flowtype\"\n  ],\n  \"extends\": [\n    \"plugin:vue-libs/recommended\",\n    \"plugin:flowt"
  },
  {
    "path": ".flowconfig",
    "chars": 783,
    "preview": "[ignore]\n.*/node_modules/.*\n.*/test/.*\n.*/build/.*\n.*/examples/.*\n.*/benchmarks/.*\n\n[include]\n\n[libs]\nflow\n\n[options]\nun"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "chars": 1423,
    "preview": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project, we pledge to respect all people who cont"
  },
  {
    "path": ".github/COMMIT_CONVENTION.md",
    "chars": 2757,
    "preview": "## Git Commit Message Convention\n\n> This is adapted from [Angular's commit convention](https://github.com/conventional-c"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 1149,
    "preview": "# 贡献\n\n> 欢迎任何形式的贡献,我们的开发计划见 [mpvue 开发计划](https://trello.com/b/ZBP1leCF/mpvue)\n\n## Issues\n\n### 提交 issues\n\n- 确定在最新版本中该 bug "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_report.md",
    "chars": 328,
    "preview": "---\nname: 报告问题(Bug report)\nabout: 描述你遇到的问题并寻求社区帮助\n---\n<!--\n    注意:为更好的解决你的问题,请参考模板提供完整信息,准确描述问题,信息不全的 issue 将被关闭。\n-->\n##"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Feature_request.md",
    "chars": 201,
    "preview": "---\nname: 建议新功能(Feature Request)\nabout: 展示已经实现的新功能,或者对项目提出新的需求和建议\n---\n\n## [在此简单描述您的建议]\n\n**新功能相关的问题issue或讨论:**\n\n[在这里引用新功能"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 1035,
    "preview": "<!-- PULL REQUEST TEMPLATE -->\n<!-- (Update \"[ ]\" to \"[x]\" to check a box) -->\n\n**What kind of change does this PR intro"
  },
  {
    "path": ".github/issue_template.yml",
    "chars": 652,
    "preview": "issueConfigs:\n  -\n    bannedTitle: \"问题简单描述\"\n    subtitles:\n      - \"问题复现步骤:\"\n      - \"期望的表现:\"\n      - \"观察到的表现:\"\n      - "
  },
  {
    "path": ".github/stale.yml",
    "chars": 111,
    "preview": "daysUntilStale: 30\n\nmarkComment: \"issue超过30天无更新或响应,7天后将自动关闭,如果问题状态有更新请及时更新issue\"\n\nlimitPerRun: 24\n\nonly: issues"
  },
  {
    "path": ".gitignore",
    "chars": 404,
    "preview": ".DS_Store\nnode_modules\n*.log\npackage-lock.json\nexplorations\nTODOs.md\ndist/*.gz\ndist/*.map\ndist/vue.common.min.js\ntest/e2"
  },
  {
    "path": "BACKERS.md",
    "chars": 6132,
    "preview": "# Backers\n\nYou can join them in supporting  Vue.js development by [pledging on Patreon](https://www.patreon.com/evanyou)"
  },
  {
    "path": "LICENSE",
    "chars": 1079,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2018-present, 美团点评\n\nPermission is hereby granted, free of charge, to any person obt"
  },
  {
    "path": "README.md",
    "chars": 13187,
    "preview": "<p align=\"center\"><a href=\"http://mpvue.com\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"100\" src=\"http://mpvu"
  },
  {
    "path": "benchmarks/big-table/demo.css",
    "chars": 187,
    "preview": "form {\n  margin-bottom: 15px;\n}\n\ntd.hidden {\n  color: #ccc;\n}\n\ntable.filtered td.item {\n  background-color: #FFFFBF;\n}\n\n"
  },
  {
    "path": "benchmarks/big-table/index.html",
    "chars": 4818,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title></title>\n    <script src=\"../../dist/vue"
  },
  {
    "path": "benchmarks/big-table/style.css",
    "chars": 9233,
    "preview": "@font-face {\n  font-family: octicons-anchor;\n  src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQA"
  },
  {
    "path": "benchmarks/dbmon/ENV.js",
    "chars": 5807,
    "preview": "var ENV = ENV || (function() {\n\n  var first = true;\n  var counter = 0;\n  var data;\n  var _base;\n  (_base = String.protot"
  },
  {
    "path": "benchmarks/dbmon/app.js",
    "chars": 247,
    "preview": "var app = new Vue({\n  el: '#app',\n  data: {\n    databases: []\n  }\n})\n\nfunction loadSamples() {\n  app.databases = Object."
  },
  {
    "path": "benchmarks/dbmon/index.html",
    "chars": 1188,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n<meta name=\"description\" content=\"dbmon vue\" />\n<link href=\"./lib/styles.css\" rel=\"stylesh"
  },
  {
    "path": "benchmarks/dbmon/lib/memory-stats.js",
    "chars": 3080,
    "preview": "/**\n * @author mrdoob / http://mrdoob.com/\n * @author jetienne / http://jetienne.com/\n * @author paulirish / http://paul"
  },
  {
    "path": "benchmarks/dbmon/lib/monitor.js",
    "chars": 1856,
    "preview": "var Monitoring = Monitoring || (function() {\n\n  var stats = new MemoryStats();\n  stats.domElement.style.position = 'fixe"
  },
  {
    "path": "benchmarks/dbmon/lib/styles.css",
    "chars": 1881,
    "preview": "body {color:#333;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0;"
  },
  {
    "path": "benchmarks/reorder-list/index.html",
    "chars": 2772,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue benchmark</title>\n  </head>\n  <body>"
  },
  {
    "path": "benchmarks/ssr/README.md",
    "chars": 862,
    "preview": "# Vue.js SSR benchmark\n\nThis benchmark renders a table of 1000 rows with 10 columns (10k components), with around 30k no"
  },
  {
    "path": "benchmarks/ssr/common.js",
    "chars": 1543,
    "preview": "'use strict'\n\nconst self = (global || root)\n\nself.performance = {\n  now: function () {\n    var hrtime = process.hrtime()"
  },
  {
    "path": "benchmarks/ssr/renderToStream.js",
    "chars": 825,
    "preview": "/* eslint-disable no-unused-vars */\n\n'use strict'\n\nprocess.env.NODE_ENV = 'production'\n\nconst Vue = require('../../dist/"
  },
  {
    "path": "benchmarks/ssr/renderToString.js",
    "chars": 598,
    "preview": "'use strict'\n\nprocess.env.NODE_ENV = 'production'\n\nconst Vue = require('../../dist/vue.runtime.common.js')\nconst createR"
  },
  {
    "path": "benchmarks/svg/index.html",
    "chars": 2107,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <title>vue.js version</title>\n  <script src=\"https://cdn.jsdelivr.net/stats.js"
  },
  {
    "path": "benchmarks/uptime/index.html",
    "chars": 5240,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue benchmark</title>\n    <style type=\"t"
  },
  {
    "path": "build/alias.js",
    "chars": 610,
    "preview": "const path = require('path')\n\nmodule.exports = {\n  vue: path.resolve(__dirname, '../src/platforms/web/entry-runtime-with"
  },
  {
    "path": "build/build.js",
    "chars": 2267,
    "preview": "const fs = require('fs')\nconst path = require('path')\nconst zlib = require('zlib')\nconst rollup = require('rollup')\ncons"
  },
  {
    "path": "build/ci.sh",
    "chars": 148,
    "preview": "set -e\nnpm test\n\n# report coverage stats for non-PRs\nif [[ -z $CI_PULL_REQUEST ]]; then\n  cat ./coverage/lcov.info | ./n"
  },
  {
    "path": "build/config.js",
    "chars": 7221,
    "preview": "const path = require('path')\nconst buble = require('rollup-plugin-buble')\nconst alias = require('rollup-plugin-alias')\nc"
  },
  {
    "path": "build/gen-release-note.js",
    "chars": 414,
    "preview": "const version = process.argv[2] || process.env.VERSION\nconst cc = require('conventional-changelog')\nconst file = `./RELE"
  },
  {
    "path": "build/get-weex-version.js",
    "chars": 664,
    "preview": "var coreVersion = require('../package.json').version\nvar weexVersion = require('../packages/weex-vue-framework/package.j"
  },
  {
    "path": "build/git-hooks/commit-msg",
    "chars": 477,
    "preview": "#!/usr/bin/env bash\n\n# Validate commit log\ncommit_regex='^Merge.+|(feat|fix|docs|style|refactor|perf|test|build|ci|chore"
  },
  {
    "path": "build/git-hooks/pre-commit",
    "chars": 190,
    "preview": "#!/usr/bin/env bash\n\nfiles_to_lint=$(git diff --cached --name-only --diff-filter=ACM | grep '\\.js$')\n\nif [ -n \"$files_to"
  },
  {
    "path": "build/install-hooks.js",
    "chars": 306,
    "preview": "const { test, ln, chmod } = require('shelljs')\n\nif (test('-e', '.git/hooks')) {\n  ln('-sf', '../../build/git-hooks/pre-c"
  },
  {
    "path": "build/release-weex.sh",
    "chars": 842,
    "preview": "set -e\nCUR_VERSION=`node build/get-weex-version.js -c`\nNEXT_VERSION=`node build/get-weex-version.js`\n\necho \"Current: $CU"
  },
  {
    "path": "build/release.sh",
    "chars": 1410,
    "preview": "set -e\n\nif [[ -z $1 ]]; then\n  echo \"Enter new version: \"\n  read VERSION\nelse\n  VERSION=$1\nfi\n\nread -p \"Releasing $VERSI"
  },
  {
    "path": "circle.yml",
    "chars": 74,
    "preview": "machine:\n  node:\n    version: 6\n\ntest:\n  override:\n    - bash build/ci.sh\n"
  },
  {
    "path": "dist/README.md",
    "chars": 4282,
    "preview": "## Explanation of Build Files\n\n| | UMD | CommonJS | ES Module |\n| --- | --- | --- | --- |\n| **Full** | vue.js | vue.comm"
  },
  {
    "path": "examples/commits/app.js",
    "chars": 873,
    "preview": "var apiURL = 'https://api.github.com/repos/vuejs/vue/commits?per_page=3&sha='\n\n/**\n * Actual demo\n */\n\nvar demo = new Vu"
  },
  {
    "path": "examples/commits/index.html",
    "chars": 1401,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Vue.js github commits example</title>\n    <style>\n      #demo {\n        font-"
  },
  {
    "path": "examples/elastic-header/index.html",
    "chars": 3598,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"initial-scale=1,"
  },
  {
    "path": "examples/elastic-header/style.css",
    "chars": 846,
    "preview": "h1 {\n  font-weight: 300;\n  font-size: 1.8em;\n  margin-top: 0;\n}\na {\n  color: #fff;\n}\n.draggable-header-view {\n  backgrou"
  },
  {
    "path": "examples/firebase/app.js",
    "chars": 1379,
    "preview": "var emailRE = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.["
  },
  {
    "path": "examples/firebase/index.html",
    "chars": 1220,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Vue.js firebase + validation example</title>\n    <meta charset=\"utf"
  },
  {
    "path": "examples/firebase/style.css",
    "chars": 431,
    "preview": "body {\n  font-family: Helvetica, Arial, sans-serif;\n}\n\nul {\n  padding: 0;\n}\n\n.user {\n  height: 30px;\n  line-height: 30px"
  },
  {
    "path": "examples/grid/grid.js",
    "chars": 1629,
    "preview": "// register the grid component\nVue.component('demo-grid', {\n  template: '#grid-template',\n  replace: true,\n  props: {\n  "
  },
  {
    "path": "examples/grid/index.html",
    "chars": 1363,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js grid component example</title>\n  "
  },
  {
    "path": "examples/grid/style.css",
    "chars": 902,
    "preview": "body {\n  font-family: Helvetica Neue, Arial, sans-serif;\n  font-size: 14px;\n  color: #444;\n}\n\ntable {\n  border: 2px soli"
  },
  {
    "path": "examples/markdown/index.html",
    "chars": 975,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js markdown editor example</title>\n "
  },
  {
    "path": "examples/markdown/style.css",
    "chars": 564,
    "preview": "html, body, #editor {\n  margin: 0;\n  height: 100%;\n  font-family: 'Helvetica Neue', Arial, sans-serif;\n  color: #333;\n}\n"
  },
  {
    "path": "examples/modal/index.html",
    "chars": 1903,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js modal component example</title>\n "
  },
  {
    "path": "examples/modal/style.css",
    "chars": 1051,
    "preview": ".modal-mask {\n  position: fixed;\n  z-index: 9998;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color"
  },
  {
    "path": "examples/move-animations/index.html",
    "chars": 2404,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Move Animations</title>\n    <style>\n    "
  },
  {
    "path": "examples/select2/index.html",
    "chars": 2174,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js wrapper component example (jquery"
  },
  {
    "path": "examples/svg/index.html",
    "chars": 1735,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js SVG graph example</title>\n    <li"
  },
  {
    "path": "examples/svg/style.css",
    "chars": 403,
    "preview": "body {\n    font-family: Helvetica Neue, Arial, sans-serif;\n}\n\npolygon {\n    fill: #42b983;\n    opacity: .75;\n}\n\ncircle {"
  },
  {
    "path": "examples/svg/svg.js",
    "chars": 1879,
    "preview": "// The raw data to observe\nvar stats = [\n  { label: 'A', value: 100 },\n  { label: 'B', value: 100 },\n  { label: 'C', val"
  },
  {
    "path": "examples/todomvc/app.js",
    "chars": 3364,
    "preview": "// Full spec-compliant TodoMVC with localStorage persistence\n// and hash-based routing in ~150 lines.\n\n// localStorage p"
  },
  {
    "path": "examples/todomvc/index.html",
    "chars": 2723,
    "preview": "<!doctype html>\n<html data-framework=\"vue\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js • TodoMVC</title>\n    "
  },
  {
    "path": "examples/todomvc/readme.md",
    "chars": 912,
    "preview": "# Vue.js TodoMVC Example\n\n> Vue.js is a library for building interactive web interfaces. \nIt provides data-driven, nesta"
  },
  {
    "path": "examples/tree/index.html",
    "chars": 1420,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Vue.js tree view example</title>\n    <st"
  },
  {
    "path": "examples/tree/tree.js",
    "chars": 1304,
    "preview": "// demo data\nvar data = {\n  name: 'My Tree',\n  children: [\n    { name: 'hello' },\n    { name: 'wat' },\n    {\n      name:"
  },
  {
    "path": "flow/compiler.js",
    "chars": 5025,
    "preview": "declare type CompilerOptions = {\n  warn?: Function; // allow customizing warning in different environments; e.g. node\n  "
  },
  {
    "path": "flow/component.js",
    "chars": 4691,
    "preview": "import type { Config } from '../src/core/config'\nimport type VNode from '../src/core/vdom/vnode'\nimport type Watcher fro"
  },
  {
    "path": "flow/global-api.js",
    "chars": 805,
    "preview": "declare interface GlobalAPI {\n  cid: number;\n  options: Object;\n  config: Config;\n  util: Object;\n\n  extend: (options: O"
  },
  {
    "path": "flow/modules.js",
    "chars": 984,
    "preview": "declare module 'he' {\n  declare function escape(html: string): string;\n  declare function decode(html: string): string;\n"
  },
  {
    "path": "flow/options.js",
    "chars": 2178,
    "preview": "declare type InternalComponentOptions = {\n  _isComponent: true;\n  parent: Component;\n  propsData: ?Object;\n  _parentVnod"
  },
  {
    "path": "flow/ssr.js",
    "chars": 450,
    "preview": "declare type ComponentWithCacheContext = {\n  type: 'ComponentWithCache';\n  bufferIndex: number;\n  buffer: Array<string>;"
  },
  {
    "path": "flow/vnode.js",
    "chars": 1881,
    "preview": "declare type VNodeChildren = Array<?VNode | string | VNodeChildren> | string;\n\ndeclare type VNodeComponentOptions = {\n  "
  },
  {
    "path": "package.json",
    "chars": 5512,
    "preview": "{\n  \"name\": \"vue\",\n  \"version\": \"2.4.1\",\n  \"description\": \"Vue.js in mini program\",\n  \"main\": \"dist/vue.runtime.common.j"
  },
  {
    "path": "packages/mpvue/README.md",
    "chars": 198,
    "preview": "# mpvue\n\n> This package is auto-generated. For pull requests please see [src/platforms/mp/entry-runtime.js](https://gith"
  },
  {
    "path": "packages/mpvue/index.js",
    "chars": 151062,
    "preview": "// fix env\ntry {\n  if (!global) global = {};\n  global.process = global.process || {};\n  global.process.env = global.proc"
  },
  {
    "path": "packages/mpvue/package.json",
    "chars": 486,
    "preview": "{\n  \"name\": \"mpvue\",\n  \"version\": \"2.0.6\",\n  \"description\": \"Vue Runtime for mini program\",\n  \"main\": \"index.js\",\n  \"rep"
  },
  {
    "path": "packages/mpvue-template-compiler/README.md",
    "chars": 218,
    "preview": "# mpvue-template-compiler\n\n> This package is auto-generated. For pull requests please see [src/platforms/mp/entry-compil"
  },
  {
    "path": "packages/mpvue-template-compiler/build.js",
    "chars": 161627,
    "preview": "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (e"
  },
  {
    "path": "packages/mpvue-template-compiler/index.js",
    "chars": 637,
    "preview": "try {\n  var vueVersion = require('mpvue/package.json').version\n} catch (e) {}\n\nvar packageName = require('./package.json"
  },
  {
    "path": "packages/mpvue-template-compiler/package.json",
    "chars": 578,
    "preview": "{\n  \"name\": \"mpvue-template-compiler\",\n  \"version\": \"2.0.6\",\n  \"description\": \"mpvue template compiler for Vue\",\n  \"main"
  },
  {
    "path": "packages/vue-server-renderer/README.md",
    "chars": 380,
    "preview": "# vue-server-renderer\n\n> This package is auto-generated. For pull requests please see [src/entries/web-server-renderer.j"
  },
  {
    "path": "packages/vue-server-renderer/index.js",
    "chars": 515,
    "preview": "try {\n  var vueVersion = require('vue').version\n} catch (e) {}\n\nvar packageName = require('./package.json').name\nvar pac"
  },
  {
    "path": "packages/vue-server-renderer/package.json",
    "chars": 916,
    "preview": "{\n  \"name\": \"vue-server-renderer\",\n  \"version\": \"2.4.1\",\n  \"description\": \"server renderer for Vue 2.0\",\n  \"main\": \"inde"
  },
  {
    "path": "packages/vue-server-renderer/types/index.d.ts",
    "chars": 1338,
    "preview": "import Vue = require('vue');\nimport { Readable } from 'stream';\n\nexport declare function createRenderer(options?: Render"
  },
  {
    "path": "packages/vue-server-renderer/types/test.ts",
    "chars": 1851,
    "preview": "import Vue = require('vue');\nimport { readFileSync } from 'fs';\nimport { createRenderer, createBundleRenderer } from '.."
  },
  {
    "path": "packages/vue-server-renderer/types/tsconfig.json",
    "chars": 209,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"strict\": tr"
  },
  {
    "path": "packages/vue-template-compiler/README.md",
    "chars": 4836,
    "preview": "# vue-template-compiler\n\n> This package is auto-generated. For pull requests please see [src/entries/web-compiler.js](ht"
  },
  {
    "path": "packages/vue-template-compiler/index.js",
    "chars": 732,
    "preview": "try {\n  var vueVersion = require('vue').version\n} catch (e) {}\n\nvar packageName = require('./package.json').name\nvar pac"
  },
  {
    "path": "packages/vue-template-compiler/package.json",
    "chars": 545,
    "preview": "{\n  \"name\": \"vue-template-compiler\",\n  \"version\": \"2.4.1\",\n  \"description\": \"template compiler for Vue 2.0\",\n  \"main\": \""
  },
  {
    "path": "packages/weex-template-compiler/README.md",
    "chars": 188,
    "preview": "# weex-template-compiler\n\n> This package is auto-generated. For pull requests please see [src/entries/weex-compiler.js]("
  },
  {
    "path": "packages/weex-template-compiler/build.js",
    "chars": 95507,
    "preview": "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (e"
  },
  {
    "path": "packages/weex-template-compiler/index.js",
    "chars": 640,
    "preview": "try {\n  var vueVersion = require('weex-vue-framework').version\n} catch (e) {}\n\nvar packageName = require('./package.json"
  },
  {
    "path": "packages/weex-template-compiler/package.json",
    "chars": 532,
    "preview": "{\n  \"name\": \"weex-template-compiler\",\n  \"version\": \"2.1.9-weex.1\",\n  \"description\": \"Weex template compiler for Vue 2.0\""
  },
  {
    "path": "packages/weex-vue-framework/README.md",
    "chars": 189,
    "preview": "# weex-vue-framework\n\n> This package is auto-generated. For pull requests please see [src/entries/weex-framework.js](htt"
  },
  {
    "path": "packages/weex-vue-framework/factory.js",
    "chars": 170214,
    "preview": "'use strict';\n\nmodule.exports = function weexFactory (exports, renderer) {\n\n/*  */\n\n// these helpers produces better vm "
  },
  {
    "path": "packages/weex-vue-framework/index.js",
    "chars": 14632,
    "preview": "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar latestNodeId = 1;\n\nfunction TextNode "
  },
  {
    "path": "packages/weex-vue-framework/package.json",
    "chars": 472,
    "preview": "{\n  \"name\": \"weex-vue-framework\",\n  \"version\": \"2.1.9-weex.1\",\n  \"description\": \"Vue 2.0 Framework for Weex\",\n  \"main\": "
  },
  {
    "path": "src/compiler/codegen/events.js",
    "chars": 3567,
    "preview": "/* @flow */\n\nconst fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/\nconst simplePathRE = /^\\s*[A-Za-z_$][\\w$]*(?"
  },
  {
    "path": "src/compiler/codegen/index.js",
    "chars": 13484,
    "preview": "/* @flow */\n\nimport { genHandlers } from './events'\nimport baseDirectives from '../directives/index'\nimport { camelize, "
  },
  {
    "path": "src/compiler/create-compiler.js",
    "chars": 1569,
    "preview": "/* @flow */\n\nimport { extend } from 'shared/util'\nimport { detectErrors } from './error-detector'\nimport { createCompile"
  },
  {
    "path": "src/compiler/directives/bind.js",
    "chars": 307,
    "preview": "/* @flow */\n\nexport default function bind (el: ASTElement, dir: ASTDirective) {\n  el.wrapData = (code: string) => {\n    "
  },
  {
    "path": "src/compiler/directives/index.js",
    "chars": 144,
    "preview": "/* @flow */\n\nimport on from './on'\nimport bind from './bind'\nimport { noop } from 'shared/util'\n\nexport default {\n  on,\n"
  },
  {
    "path": "src/compiler/directives/model.js",
    "chars": 2725,
    "preview": "/* @flow */\n\n/**\n * Cross-platform code generation for component v-model\n */\nexport function genComponentModel (\n  el: A"
  },
  {
    "path": "src/compiler/directives/on.js",
    "chars": 316,
    "preview": "/* @flow */\n\nimport { warn } from 'core/util/index'\n\nexport default function on (el: ASTElement, dir: ASTDirective) {\n  "
  },
  {
    "path": "src/compiler/error-detector.js",
    "chars": 3343,
    "preview": "/* @flow */\n\nimport { dirRE, onRE } from './parser/index'\n\n// these keywords should not appear inside expressions, but o"
  },
  {
    "path": "src/compiler/helpers.js",
    "chars": 3040,
    "preview": "/* @flow */\n\nimport { parseFilters } from './parser/filter-parser'\n\nexport function baseWarn (msg: string) {\n  console.e"
  },
  {
    "path": "src/compiler/index.js",
    "chars": 741,
    "preview": "/* @flow */\n\nimport { parse } from './parser/index'\nimport { optimize } from './optimizer'\nimport { generate } from './c"
  },
  {
    "path": "src/compiler/optimizer.js",
    "chars": 3617,
    "preview": "/* @flow */\n\nimport { makeMap, isBuiltInTag, cached, no } from 'shared/util'\n\nlet isStaticKey\nlet isPlatformReservedTag\n"
  },
  {
    "path": "src/compiler/parser/entity-decoder.js",
    "chars": 198,
    "preview": "/* @flow */\n\nlet decoder\n\nexport default {\n  decode (html: string): string {\n    decoder = decoder || document.createEle"
  },
  {
    "path": "src/compiler/parser/filter-parser.js",
    "chars": 2674,
    "preview": "/* @flow */\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/\n\nexport function parseFilters (exp: string): string {\n  let inS"
  },
  {
    "path": "src/compiler/parser/html-parser.js",
    "chars": 9154,
    "preview": "/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n/*!\n * HTML Parser By John Resig (ejohn.org)\n *"
  },
  {
    "path": "src/compiler/parser/index.js",
    "chars": 16286,
    "preview": "/* @flow */\n\nimport he from 'he'\nimport { parseHTML } from './html-parser'\nimport { parseText } from './text-parser'\nimp"
  },
  {
    "path": "src/compiler/parser/text-parser.js",
    "chars": 1138,
    "preview": "/* @flow */\n\nimport { cached } from 'shared/util'\nimport { parseFilters } from './filter-parser'\n\nconst defaultTagRE = /"
  },
  {
    "path": "src/compiler/to-function.js",
    "chars": 2799,
    "preview": "/* @flow */\n\nimport { noop } from 'shared/util'\nimport { warn, tip } from 'core/util/debug'\n\ntype CompiledFunctionResult"
  },
  {
    "path": "src/core/components/index.js",
    "chars": 69,
    "preview": "import KeepAlive from './keep-alive'\n\nexport default {\n  KeepAlive\n}\n"
  },
  {
    "path": "src/core/components/keep-alive.js",
    "chars": 2750,
    "preview": "/* @flow */\n\nimport { isRegExp } from 'shared/util'\nimport { getFirstComponentChild } from 'core/vdom/helpers/index'\n\nty"
  },
  {
    "path": "src/core/config.js",
    "chars": 2505,
    "preview": "/* @flow */\n\nimport {\n  no,\n  noop,\n  identity\n} from 'shared/util'\n\nimport { LIFECYCLE_HOOKS } from 'shared/constants'\n"
  },
  {
    "path": "src/core/global-api/assets.js",
    "chars": 1220,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport { ASSET_TYPES } from 'shared/constants'\nimport { warn, isPlainObject "
  },
  {
    "path": "src/core/global-api/extend.js",
    "chars": 2843,
    "preview": "/* @flow */\n\nimport { ASSET_TYPES } from 'shared/constants'\nimport { warn, extend, mergeOptions } from '../util/index'\ni"
  },
  {
    "path": "src/core/global-api/index.js",
    "chars": 1496,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport { initUse } from './use'\nimport { initMixin } from './mixin'\nimport {"
  },
  {
    "path": "src/core/global-api/mixin.js",
    "chars": 220,
    "preview": "/* @flow */\n\nimport { mergeOptions } from '../util/index'\n\nexport function initMixin (Vue: GlobalAPI) {\n  Vue.mixin = fu"
  },
  {
    "path": "src/core/global-api/use.js",
    "chars": 629,
    "preview": "/* @flow */\n\nimport { toArray } from '../util/index'\n\nexport function initUse (Vue: GlobalAPI) {\n  Vue.use = function (p"
  },
  {
    "path": "src/core/index.js",
    "chars": 478,
    "preview": "import Vue from './instance/index'\nimport { initGlobalAPI } from './global-api/index'\nimport { isServerRendering } from "
  },
  {
    "path": "src/core/instance/events.js",
    "chars": 3514,
    "preview": "/* @flow */\n\nimport {\n  tip,\n  toArray,\n  hyphenate,\n  handleError,\n  formatComponentName\n} from '../util/index'\nimport "
  },
  {
    "path": "src/core/instance/index.js",
    "chars": 549,
    "preview": "import { initMixin } from './init'\nimport { stateMixin } from './state'\nimport { renderMixin } from './render'\nimport { "
  },
  {
    "path": "src/core/instance/init.js",
    "chars": 4590,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport { initProxy } from './proxy'\nimport { initState } from './state'\nimpo"
  },
  {
    "path": "src/core/instance/inject.js",
    "chars": 1906,
    "preview": "/* @flow */\n\nimport { warn } from '../util/index'\nimport { hasOwn } from 'shared/util'\nimport { hasSymbol } from 'core/u"
  },
  {
    "path": "src/core/instance/lifecycle.js",
    "chars": 8753,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport Watcher from '../observer/watcher'\nimport { mark, measure } from '../"
  },
  {
    "path": "src/core/instance/proxy.js",
    "chars": 2118,
    "preview": "/* not type checking this file because flow doesn't play well with Proxy */\n\nimport config from 'core/config'\nimport { w"
  },
  {
    "path": "src/core/instance/render-helpers/bind-object-listeners.js",
    "chars": 597,
    "preview": "/* @flow */\n\nimport { warn, extend, isPlainObject } from 'core/util/index'\n\nexport function bindObjectListeners (data: a"
  },
  {
    "path": "src/core/instance/render-helpers/bind-object-props.js",
    "chars": 1335,
    "preview": "/* @flow */\n\nimport config from 'core/config'\n\nimport {\n  warn,\n  isObject,\n  toObject,\n  isReservedAttribute\n} from 'co"
  },
  {
    "path": "src/core/instance/render-helpers/check-keycodes.js",
    "chars": 430,
    "preview": "/* @flow */\n\nimport config from 'core/config'\n\n/**\n * Runtime helper for checking keyCodes from config.\n */\nexport funct"
  },
  {
    "path": "src/core/instance/render-helpers/render-list.js",
    "chars": 895,
    "preview": "/* @flow */\n\nimport { isObject, isDef } from 'core/util/index'\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nexp"
  },
  {
    "path": "src/core/instance/render-helpers/render-slot.js",
    "chars": 881,
    "preview": "/* @flow */\n\nimport { extend, warn } from 'core/util/index'\n\n/**\n * Runtime helper for rendering <slot>\n */\nexport funct"
  },
  {
    "path": "src/core/instance/render-helpers/render-static.js",
    "chars": 1429,
    "preview": "/* @flow */\n\nimport { cloneVNode, cloneVNodes } from 'core/vdom/vnode'\n\n/**\n * Runtime helper for rendering static trees"
  },
  {
    "path": "src/core/instance/render-helpers/resolve-filter.js",
    "chars": 246,
    "preview": "/* @flow */\n\nimport { identity, resolveAsset } from 'core/util/index'\n\n/**\n * Runtime helper for resolving filters\n */\ne"
  },
  {
    "path": "src/core/instance/render-helpers/resolve-slots.js",
    "chars": 1423,
    "preview": "/* @flow */\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nexport function resolveSlot"
  },
  {
    "path": "src/core/instance/render.js",
    "chars": 4986,
    "preview": "/* @flow */\n\nimport {\n  warn,\n  nextTick,\n  toNumber,\n  toString,\n  looseEqual,\n  emptyObject,\n  handleError,\n  looseInd"
  },
  {
    "path": "src/core/instance/state.js",
    "chars": 9342,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport Dep from '../observer/dep'\nimport Watcher from '../observer/watcher'\n"
  },
  {
    "path": "src/core/observer/array.js",
    "chars": 917,
    "preview": "/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototyp"
  },
  {
    "path": "src/core/observer/dep.js",
    "chars": 1096,
    "preview": "/* @flow */\n\nimport type Watcher from './watcher'\nimport { remove } from '../util/index'\n\nlet uid = 0\n\n/**\n * A dep is a"
  },
  {
    "path": "src/core/observer/index.js",
    "chars": 7574,
    "preview": "/* @flow */\n\nimport Dep from './dep'\nimport { arrayMethods } from './array'\nimport {\n  def,\n  warn,\n  hasOwn,\n  hasProto"
  },
  {
    "path": "src/core/observer/scheduler.js",
    "chars": 3945,
    "preview": "/* @flow */\n\nimport type Watcher from './watcher'\nimport config from '../config'\nimport { callHook, activateChildCompone"
  },
  {
    "path": "src/core/observer/watcher.js",
    "chars": 5969,
    "preview": "/* @flow */\n\nimport { queueWatcher } from './scheduler'\nimport Dep, { pushTarget, popTarget } from './dep'\n\nimport {\n  w"
  },
  {
    "path": "src/core/util/debug.js",
    "chars": 2681,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport { noop } from 'shared/util'\n\nexport let warn = noop\nexport let tip = "
  },
  {
    "path": "src/core/util/env.js",
    "chars": 5426,
    "preview": "/* @flow */\n\nimport { noop } from 'shared/util'\nimport { handleError } from './error'\n\n// can we use __proto__?\nexport c"
  },
  {
    "path": "src/core/util/error.js",
    "chars": 529,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport { warn } from './debug'\nimport { inBrowser } from './env'\n\nexport fun"
  },
  {
    "path": "src/core/util/index.js",
    "chars": 235,
    "preview": "/* @flow */\n\nexport * from 'shared/util'\nexport * from './lang'\nexport * from './env'\nexport * from './options'\nexport *"
  },
  {
    "path": "src/core/util/lang.js",
    "chars": 810,
    "preview": "/* @flow */\n\nexport const emptyObject = Object.freeze({})\n\n/**\n * Check if a string starts with $ or _\n */\nexport functi"
  },
  {
    "path": "src/core/util/options.js",
    "chars": 8915,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport { warn } from './debug'\nimport { nativeWatch } from './env'\nimport { "
  },
  {
    "path": "src/core/util/perf.js",
    "chars": 523,
    "preview": "import { inBrowser } from './env'\n\nexport let mark\nexport let measure\n\nif (process.env.NODE_ENV !== 'production') {\n  co"
  },
  {
    "path": "src/core/util/props.js",
    "chars": 4635,
    "preview": "/* @flow */\n\nimport { warn } from './debug'\nimport { observe, observerState } from '../observer/index'\nimport {\n  hasOwn"
  },
  {
    "path": "src/core/vdom/create-component.js",
    "chars": 7170,
    "preview": "/* @flow */\n\nimport VNode from './vnode'\nimport { resolveConstructorOptions } from 'core/instance/init'\nimport { queueAc"
  },
  {
    "path": "src/core/vdom/create-element.js",
    "chars": 3680,
    "preview": "/* @flow */\n\nimport config from '../config'\nimport VNode, { createEmptyVNode } from './vnode'\nimport { createComponent }"
  },
  {
    "path": "src/core/vdom/create-functional-component.js",
    "chars": 1612,
    "preview": "/* @flow */\n\nimport VNode from './vnode'\nimport { createElement } from './create-element'\nimport { resolveInject } from "
  },
  {
    "path": "src/core/vdom/helpers/extract-props.js",
    "chars": 1852,
    "preview": "/* @flow */\n\nimport {\n  tip,\n  hasOwn,\n  isDef,\n  isUndef,\n  hyphenate,\n  formatComponentName\n} from 'core/util/index'\n\n"
  },
  {
    "path": "src/core/vdom/helpers/get-first-component-child.js",
    "chars": 322,
    "preview": "/* @flow */\n\nimport { isDef } from 'shared/util'\n\nexport function getFirstComponentChild (children: ?Array<VNode>): ?VNo"
  },
  {
    "path": "src/core/vdom/helpers/index.js",
    "chars": 232,
    "preview": "/* @flow */\n\nexport * from './merge-hook'\nexport * from './extract-props'\nexport * from './update-listeners'\nexport * fr"
  },
  {
    "path": "src/core/vdom/helpers/merge-hook.js",
    "chars": 901,
    "preview": "/* @flow */\n\nimport { createFnInvoker } from './update-listeners'\nimport { remove, isDef, isUndef, isTrue } from 'shared"
  },
  {
    "path": "src/core/vdom/helpers/normalize-children.js",
    "chars": 2995,
    "preview": "/* @flow */\n\nimport VNode, { createTextVNode } from 'core/vdom/vnode'\nimport { isFalse, isTrue, isDef, isUndef, isPrimit"
  },
  {
    "path": "src/core/vdom/helpers/resolve-async-component.js",
    "chars": 3342,
    "preview": "/* @flow */\n\nimport {\n  warn,\n  once,\n  isDef,\n  isUndef,\n  isTrue,\n  isObject\n} from 'core/util/index'\n\nimport { create"
  },
  {
    "path": "src/core/vdom/helpers/update-listeners.js",
    "chars": 1841,
    "preview": "/* @flow */\n\nimport { warn } from 'core/util/index'\nimport { cached, isUndef } from 'shared/util'\n\nconst normalizeEvent "
  },
  {
    "path": "src/core/vdom/modules/directives.js",
    "chars": 3103,
    "preview": "/* @flow */\n\nimport { emptyNode } from 'core/vdom/patch'\nimport { resolveAsset, handleError } from 'core/util/index'\nimp"
  },
  {
    "path": "src/core/vdom/modules/index.js",
    "chars": 102,
    "preview": "import directives from './directives'\nimport ref from './ref'\n\nexport default [\n  ref,\n  directives\n]\n"
  },
  {
    "path": "src/core/vdom/modules/ref.js",
    "chars": 1032,
    "preview": "/* @flow */\n\nimport { remove } from 'shared/util'\n\nexport default {\n  create (_: any, vnode: VNodeWithData) {\n    regist"
  },
  {
    "path": "src/core/vdom/patch.js",
    "chars": 22724,
    "preview": "/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT "
  },
  {
    "path": "src/core/vdom/vnode.js",
    "chars": 3067,
    "preview": "/* @flow */\n\nexport default class VNode {\n  tag: string | void;\n  data: VNodeData | void;\n  children: ?Array<VNode>;\n  t"
  },
  {
    "path": "src/platforms/mp/compiler/common/babel-plugins.js",
    "chars": 1450,
    "preview": "// babel-plugin-transform-object-to-ternary-operator.js\n\nimport * as t from 'babel-types'\nimport generate from 'babel-ge"
  },
  {
    "path": "src/platforms/mp/compiler/common/config.js",
    "chars": 63,
    "preview": "export default {\n  virtualTag: ['slot', 'template', 'block']\n}\n"
  },
  {
    "path": "src/platforms/mp/compiler/common/convert/index.js",
    "chars": 3557,
    "preview": "import tag from './tag'\nimport tagConfig from '../config'\nimport { hyphenate } from 'shared/util'\n\nfunction convertAst ("
  },
  {
    "path": "src/platforms/mp/compiler/common/convert/tag.js",
    "chars": 2833,
    "preview": "// import component from './component'\nimport tagMap from '../../common/tagMap'\nimport _ from 'lodash'\n\nexport default f"
  },
  {
    "path": "src/platforms/mp/compiler/common/generate.js",
    "chars": 2060,
    "preview": "import utils from './utils'\n\nconst autoEndTags = [\n  'progress',\n  'checkbox',\n  'switch',\n  'input',\n  'radio',\n  'slid"
  },
  {
    "path": "src/platforms/mp/compiler/common/tagMap.js",
    "chars": 2571,
    "preview": "export default {\n  'br': 'view',\n  'hr': 'view',\n\n  'p': 'view',\n  'h1': 'view',\n  'h2': 'view',\n  'h3': 'view',\n  'h4':"
  },
  {
    "path": "src/platforms/mp/compiler/common/utils.js",
    "chars": 415,
    "preview": "export default {\n  toLowerCase (str) {\n    return str.replace(/([A-Z])/g, '-$1').toLowerCase().trim()\n  },\n\n  getChar (i"
  },
  {
    "path": "src/platforms/mp/compiler/create-compiler.js",
    "chars": 883,
    "preview": "/* @flow */\n\nimport { parse } from 'compiler/parser/index'\nimport { optimize } from 'compiler/optimizer'\nimport { genera"
  },
  {
    "path": "src/platforms/mp/compiler/directives/html.js",
    "chars": 198,
    "preview": "/* @flow */\n\nimport { addProp } from 'compiler/helpers'\n\nexport default function html (el: ASTElement, dir: ASTDirective"
  },
  {
    "path": "src/platforms/mp/compiler/directives/index.js",
    "chars": 124,
    "preview": "import model from './model'\nimport text from './text'\nimport html from './html'\n\nexport default {\n  model,\n  text,\n  htm"
  },
  {
    "path": "src/platforms/mp/compiler/directives/model.js",
    "chars": 5237,
    "preview": "/* @flow */\n\nimport config from 'core/config'\nimport { addHandler, addProp, getBindingAttr } from 'compiler/helpers'\nimp"
  },
  {
    "path": "src/platforms/mp/compiler/directives/text.js",
    "chars": 200,
    "preview": "/* @flow */\n\nimport { addProp } from 'compiler/helpers'\n\nexport default function text (el: ASTElement, dir: ASTDirective"
  },
  {
    "path": "src/platforms/mp/compiler/index.js",
    "chars": 816,
    "preview": "import { baseOptions } from './options'\nimport { createCompiler } from './create-compiler'\n\nimport codeGenWx from './wx/"
  },
  {
    "path": "src/platforms/mp/compiler/mark-component.js",
    "chars": 2770,
    "preview": "import convertTagMap from './common/tagMap'\n\nfunction maybeTag (tagName) {\n  return convertTagMap[tagName]\n}\n\nfunction g"
  },
  {
    "path": "src/platforms/mp/compiler/modules/class.js",
    "chars": 1241,
    "preview": "/* @flow */\n\nimport { parseText } from 'compiler/parser/text-parser'\nimport {\n  getAndRemoveAttr,\n  getBindingAttr,\n  ba"
  },
  {
    "path": "src/platforms/mp/compiler/modules/index.js",
    "chars": 93,
    "preview": "import klass from './class'\nimport style from './style'\n\nexport default [\n  klass,\n  style\n]\n"
  },
  {
    "path": "src/platforms/mp/compiler/modules/style.js",
    "chars": 1344,
    "preview": "/* @flow */\n\nimport { parseText } from 'compiler/parser/text-parser'\nimport { parseStyleText } from 'web/util/style'\nimp"
  },
  {
    "path": "src/platforms/mp/compiler/my/config/astMap.js",
    "chars": 127,
    "preview": "export default {\n  'if': 'a:if',\n  'iterator1': 'a:for-index',\n  'key': 'a:key',\n  'alias': 'a:for-item',\n  'v-for': 'a:"
  },
  {
    "path": "src/platforms/mp/compiler/my/config/directiveMap.js",
    "chars": 1388,
    "preview": "// type:\n// 0, 默认值, 拼接 ${name}={{ ${content} }}\n// 1, 拼接 ${name}\n// 2, 拼接 ${map[key]}={{ '${content}' }}\n// 3, 拼接 {{ ${c"
  },
  {
    "path": "src/platforms/mp/compiler/my/convert/attrs.js",
    "chars": 5867,
    "preview": "import directiveMap from '../config/directiveMap'\nimport tagConfig from '../../common/config'\n\nimport babel from 'babel-"
  },
  {
    "path": "src/platforms/mp/compiler/my/convert/component.js",
    "chars": 1405,
    "preview": "function getSlotsName (obj) {\n  if (!obj) {\n    return ''\n  }\n  // wxml模板中 data=\"{{ a:{a1:'string2'}, b:'string'}}\" 键a不能"
  },
  {
    "path": "src/platforms/mp/compiler/my/convert/for.js",
    "chars": 447,
    "preview": "import astMap from '../config/astMap'\n\nexport default function (ast) {\n  const { iterator1, for: forText, key, alias, at"
  },
  {
    "path": "src/platforms/mp/compiler/my/convert/index.js",
    "chars": 330,
    "preview": "import attrs from './attrs'\nimport component from './component'\nimport convertFor from './for'\nimport getAstCommon from "
  },
  {
    "path": "src/platforms/mp/compiler/my/index.js",
    "chars": 223,
    "preview": "import getMpmlAst from './convert/index'\nimport compileToMPMLCommon from '../common/generate'\n\nexport default function c"
  },
  {
    "path": "src/platforms/mp/compiler/options.js",
    "chars": 516,
    "preview": "/* @flow */\n\nimport {\n  isPreTag,\n  mustUseProp,\n  isReservedTag,\n  getTagNamespace\n} from '../util/index'\n\nimport modul"
  },
  {
    "path": "src/platforms/mp/compiler/swan/config/astMap.js",
    "chars": 127,
    "preview": "export default {\n  'if': 's-if',\n  'v-for': 's-for',\n  'alias': 's-for-item',\n  'iterator1': 's-for-index',\n  'key': 's-"
  },
  {
    "path": "src/platforms/mp/compiler/swan/config/directiveMap.js",
    "chars": 1383,
    "preview": "// type:\n// 0, 默认值, 拼接 ${name}={{ ${content} }}\n// 1, 拼接 ${name}\n// 2, 拼接 ${map[key]}={{ '${content}' }}\n// 3, 拼接 {{ ${c"
  },
  {
    "path": "src/platforms/mp/compiler/swan/convert/attrs.js",
    "chars": 6248,
    "preview": "import directiveMap from '../config/directiveMap'\nimport tagConfig from '../../common/config'\n\nimport babel from 'babel-"
  }
]

// ... and 300 more files (download for full content)

About this extraction

This page contains the full source code of the Meituan-Dianping/mpvue GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 500 files (1.9 MB), approximately 535.7k tokens, and a symbol index with 1796 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!