Full Code of mobxjs/mobx for AI

main cdb249a7623a cached
403 files
4.6 MB
1.2M tokens
3504 symbols
1 requests
Download .txt
Showing preview only (4,863K chars total). Download the full file or copy to clipboard to get everything.
Repository: mobxjs/mobx
Branch: main
Commit: cdb249a7623a
Files: 403
Total size: 4.6 MB

Directory structure:
gitextract_y2fezz_f/

├── .changeset/
│   ├── README.md
│   └── config.json
├── .editorconfig
├── .eslintrc.js
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.md
│   │   ├── config.yml
│   │   └── documentation.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── lock.yml
│   ├── stale.yml
│   └── workflows/
│       ├── build_and_test.yml
│       ├── coveralls.yml
│       └── release.yml
├── .gitignore
├── .idea/
│   └── vcs.xml
├── .prettierignore
├── .prettierrc
├── .vscode/
│   ├── launch.json
│   └── settings.json
├── .watchmanconfig
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── docs/
│   ├── LINKS.md
│   ├── README.md
│   ├── about-this-documentation.md
│   ├── actions.md
│   ├── analyzing-reactivity.md
│   ├── api.md
│   ├── assets/
│   │   ├── action-state-view.excalidraw
│   │   ├── flow.excalidraw..excalidraw..excalidraw
│   │   └── getting-started-assets/
│   │       ├── javascripts/
│   │       │   ├── JSXTransformer.js
│   │       │   ├── codemirror/
│   │       │   │   ├── javascript/
│   │       │   │   │   ├── index.html
│   │       │   │   │   ├── javascript.js
│   │       │   │   │   ├── json-ld.html
│   │       │   │   │   ├── test.js
│   │       │   │   │   └── typescript.html
│   │       │   │   ├── lib/
│   │       │   │   │   ├── codemirror.css
│   │       │   │   │   └── codemirror.js
│   │       │   │   └── theme/
│   │       │   │       └── xq-light.css
│   │       │   ├── mobx-react.js
│   │       │   ├── mobx.umd.js
│   │       │   └── react-with-addons.js
│   │       ├── script.js
│   │       ├── style.css
│   │       └── stylesheets/
│   │           ├── github-light.css
│   │           └── stylesheet.css
│   ├── backers-sponsors.md
│   ├── best/
│   │   ├── debugging-mobx.md
│   │   ├── decorators.md
│   │   ├── store.md
│   │   └── what-does-mobx-react-to.md
│   ├── collection-utilities.md
│   ├── computeds-with-args.md
│   ├── computeds.md
│   ├── configuration.md
│   ├── custom-observables.md
│   ├── defining-data-stores.md
│   ├── enabling-decorators.md
│   ├── faq/
│   │   └── migrate-to-6.md
│   ├── installation.md
│   ├── intercept-and-observe.md
│   ├── intro/
│   │   ├── concepts.md
│   │   ├── how-to-read.md
│   │   └── installation.md
│   ├── lazy-observables.md
│   ├── migrating-from-4-or-5.md
│   ├── mobx-utils.md
│   ├── observable-state.md
│   ├── react/
│   │   ├── react-integration.md
│   │   └── react-performance.md
│   ├── react-integration.md
│   ├── react-optimizations.md
│   ├── reactions.md
│   ├── refguide/
│   │   ├── action.md
│   │   ├── api.md
│   │   ├── autorun.md
│   │   ├── computed-with-args.md
│   │   ├── computed.md
│   │   ├── configure.md
│   │   ├── extending.md
│   │   ├── mobx-utils.md
│   │   ├── modifiers.md
│   │   ├── object-api.md
│   │   ├── object.md
│   │   ├── observable.md
│   │   ├── observe.md
│   │   ├── on-become-observed.md
│   │   └── set.md
│   ├── styles/
│   │   └── website.css
│   ├── subclassing.md
│   ├── the-gist-of-mobx.md
│   └── understanding-reactivity.md
├── jest.base.config.js
├── jest.config.js
├── lerna.json
├── package.json
├── packages/
│   ├── eslint-plugin-mobx/
│   │   ├── .babelrc.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __tests__/
│   │   │   ├── exhaustive-make-observable.js
│   │   │   ├── missing-make-observable.js
│   │   │   ├── missing-observer.js
│   │   │   ├── no-anonymous-observer.js
│   │   │   ├── unconditional-make-observable.js
│   │   │   └── utils/
│   │   │       └── get-rule-tester.js
│   │   ├── jest.config-eslint-7.js
│   │   ├── jest.config-eslint-9.js
│   │   ├── jest.setup.js
│   │   ├── package.json
│   │   ├── preview/
│   │   │   ├── .eslintrc.js
│   │   │   ├── .gitignore
│   │   │   ├── make-observable.js
│   │   │   ├── missing-observer.js
│   │   │   ├── no-anonymous-observer.js
│   │   │   └── node_modules/
│   │   │       └── eslint-plugin-mobx/
│   │   │           └── index.js
│   │   ├── rollup.config.js
│   │   └── src/
│   │       ├── exhaustive-make-observable.js
│   │       ├── index.js
│   │       ├── missing-make-observable.js
│   │       ├── missing-observer.js
│   │       ├── no-anonymous-observer.js
│   │       ├── unconditional-make-observable.js
│   │       └── utils.js
│   ├── mobx/
│   │   ├── .flowconfig
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── __tests__/
│   │   │   ├── .babelrc
│   │   │   ├── decorators_20223/
│   │   │   │   ├── stage3-decorators.ts
│   │   │   │   └── tsconfig.json
│   │   │   ├── mixed-versions/
│   │   │   │   ├── mixed-versions.js
│   │   │   │   └── state-sharing.js
│   │   │   ├── perf/
│   │   │   │   ├── index.js
│   │   │   │   └── perf.js
│   │   │   ├── tsconfig.json
│   │   │   ├── v4/
│   │   │   │   ├── base/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   ├── array.js.snap
│   │   │   │   │   │   ├── extras.js.snap
│   │   │   │   │   │   ├── makereactive.js.snap
│   │   │   │   │   │   ├── object-api.js.snap
│   │   │   │   │   │   ├── observables.js.snap
│   │   │   │   │   │   └── spy.js.snap
│   │   │   │   │   ├── array.js
│   │   │   │   │   ├── autorun.js
│   │   │   │   │   ├── cycles.js
│   │   │   │   │   ├── extendObservable.js
│   │   │   │   │   ├── extras.js
│   │   │   │   │   ├── intercept.js
│   │   │   │   │   ├── jsconfig.json
│   │   │   │   │   ├── makereactive.js
│   │   │   │   │   ├── nested.js
│   │   │   │   │   ├── object-api.js
│   │   │   │   │   ├── observables.js
│   │   │   │   │   ├── observe.ts
│   │   │   │   │   ├── spy.js
│   │   │   │   │   ├── tojs.js
│   │   │   │   │   └── untracked.ts
│   │   │   │   └── mobx4.ts
│   │   │   └── v5/
│   │   │       ├── base/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   ├── action.js.snap
│   │   │       │   │   ├── extras.js.snap
│   │   │       │   │   ├── flow.js.snap
│   │   │       │   │   ├── makereactive.js.snap
│   │   │       │   │   ├── object-api.js.snap
│   │   │       │   │   ├── observables.js.snap
│   │   │       │   │   ├── proxies.js.snap
│   │   │       │   │   └── spy.js.snap
│   │   │       │   ├── action.js
│   │   │       │   ├── api.js
│   │   │       │   ├── array.js
│   │   │       │   ├── autorun.js
│   │   │       │   ├── autorunAsync.js
│   │   │       │   ├── babel-decorators.js
│   │   │       │   ├── babel-tests.js
│   │   │       │   ├── become-observed.ts
│   │   │       │   ├── cycles.js
│   │   │       │   ├── decorate.js
│   │   │       │   ├── errorhandling.js
│   │   │       │   ├── extendObservable.js
│   │   │       │   ├── extras.js
│   │   │       │   ├── flow.js
│   │   │       │   ├── intercept.js
│   │   │       │   ├── make-observable.ts
│   │   │       │   ├── makereactive.js
│   │   │       │   ├── map.js
│   │   │       │   ├── nested.js
│   │   │       │   ├── object-api-proxy.js
│   │   │       │   ├── object-api.js
│   │   │       │   ├── observables.js
│   │   │       │   ├── observe.ts
│   │   │       │   ├── proxies.js
│   │   │       │   ├── reaction.js
│   │   │       │   ├── set.js
│   │   │       │   ├── spy.js
│   │   │       │   ├── strict-mode.js
│   │   │       │   ├── tojs.js
│   │   │       │   ├── trace.ts
│   │   │       │   ├── typescript-decorators.ts
│   │   │       │   ├── typescript-tests.ts
│   │   │       │   └── untracked.ts
│   │   │       ├── flow/
│   │   │       │   └── test.js
│   │   │       └── utils/
│   │   │           └── test-utils.ts
│   │   ├── flow-typed/
│   │   │   └── mobx.js
│   │   ├── jest.config-decorators.js
│   │   ├── jest.config.js
│   │   ├── jest.projects.js
│   │   ├── jest.setup.ts
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   ├── perf.sh
│   │   │   └── prepublish.js
│   │   ├── src/
│   │   │   ├── api/
│   │   │   │   ├── action.ts
│   │   │   │   ├── annotation.ts
│   │   │   │   ├── autorun.ts
│   │   │   │   ├── become-observed.ts
│   │   │   │   ├── computed.ts
│   │   │   │   ├── configure.ts
│   │   │   │   ├── decorators.ts
│   │   │   │   ├── extendobservable.ts
│   │   │   │   ├── extras.ts
│   │   │   │   ├── flow.ts
│   │   │   │   ├── intercept-read.ts
│   │   │   │   ├── intercept.ts
│   │   │   │   ├── iscomputed.ts
│   │   │   │   ├── isobservable.ts
│   │   │   │   ├── makeObservable.ts
│   │   │   │   ├── object-api.ts
│   │   │   │   ├── observable.ts
│   │   │   │   ├── observe.ts
│   │   │   │   ├── tojs.ts
│   │   │   │   ├── trace.ts
│   │   │   │   ├── transaction.ts
│   │   │   │   └── when.ts
│   │   │   ├── core/
│   │   │   │   ├── action.ts
│   │   │   │   ├── atom.ts
│   │   │   │   ├── computedvalue.ts
│   │   │   │   ├── derivation.ts
│   │   │   │   ├── globalstate.ts
│   │   │   │   ├── observable.ts
│   │   │   │   ├── reaction.ts
│   │   │   │   └── spy.ts
│   │   │   ├── errors.ts
│   │   │   ├── global.d.ts
│   │   │   ├── internal.ts
│   │   │   ├── mobx.ts
│   │   │   ├── types/
│   │   │   │   ├── actionannotation.ts
│   │   │   │   ├── autoannotation.ts
│   │   │   │   ├── computedannotation.ts
│   │   │   │   ├── decorator_fills.ts
│   │   │   │   ├── dynamicobject.ts
│   │   │   │   ├── flowannotation.ts
│   │   │   │   ├── generic-abort-signal.ts
│   │   │   │   ├── intercept-utils.ts
│   │   │   │   ├── legacyobservablearray.ts
│   │   │   │   ├── listen-utils.ts
│   │   │   │   ├── modifiers.ts
│   │   │   │   ├── observableannotation.ts
│   │   │   │   ├── observablearray.ts
│   │   │   │   ├── observablemap.ts
│   │   │   │   ├── observableobject.ts
│   │   │   │   ├── observableset.ts
│   │   │   │   ├── observablevalue.ts
│   │   │   │   ├── overrideannotation.ts
│   │   │   │   └── type-utils.ts
│   │   │   └── utils/
│   │   │       ├── comparer.ts
│   │   │       ├── eq.ts
│   │   │       ├── global.ts
│   │   │       ├── iterable.ts
│   │   │       └── utils.ts
│   │   ├── tsconfig.json
│   │   └── tsdx.config.js
│   ├── mobx-react/
│   │   ├── .browserlistrc
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __mocks__/
│   │   │   └── react-native.js
│   │   ├── __tests__/
│   │   │   ├── .eslintrc.yaml
│   │   │   ├── Provider.test.tsx
│   │   │   ├── __snapshots__/
│   │   │   │   ├── hooks.test.tsx.snap
│   │   │   │   ├── observer.test.tsx.snap
│   │   │   │   └── stateless.test.tsx.snap
│   │   │   ├── context.test.tsx
│   │   │   ├── disposeOnUnmount.test.tsx
│   │   │   ├── finalizationRegistry.tsx
│   │   │   ├── hooks.test.tsx
│   │   │   ├── inject.test.tsx
│   │   │   ├── issue21.test.tsx
│   │   │   ├── issue806.test.tsx
│   │   │   ├── misc.test.tsx
│   │   │   ├── observer.test.tsx
│   │   │   ├── propTypes.test.ts
│   │   │   ├── stateless.test.tsx
│   │   │   ├── timerBasedFinalizationRegistry.tsx
│   │   │   ├── transactions.test.tsx
│   │   │   ├── tsconfig.json
│   │   │   └── utils/
│   │   │       ├── ErrorCatcher.tsx
│   │   │       ├── compile-ts.tsx
│   │   │       ├── killFinalizationRegistry.ts
│   │   │       └── withConsole.ts
│   │   ├── batchingForReactDom.js
│   │   ├── batchingForReactNative.js
│   │   ├── batchingOptOut.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Provider.tsx
│   │   │   ├── disposeOnUnmount.ts
│   │   │   ├── globals.d.ts
│   │   │   ├── index.ts
│   │   │   ├── inject.ts
│   │   │   ├── observer.tsx
│   │   │   ├── observerClass.ts
│   │   │   ├── propTypes.ts
│   │   │   ├── types/
│   │   │   │   ├── IReactComponent.ts
│   │   │   │   ├── IStoresToProps.ts
│   │   │   │   ├── IValueMap.ts
│   │   │   │   └── IWrappedComponent.ts
│   │   │   └── utils/
│   │   │       └── utils.ts
│   │   ├── tsconfig.json
│   │   ├── tsconfig.test.json
│   │   └── tsdx.config.js
│   ├── mobx-react-lite/
│   │   ├── .eslintignore
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __tests__/
│   │   │   ├── .eslintrc.yaml
│   │   │   ├── ObserverComponent.test.tsx
│   │   │   ├── __snapshots__/
│   │   │   │   ├── observer.test.tsx.snap
│   │   │   │   ├── printDebugValue.test.ts.snap
│   │   │   │   ├── useAsObservableSource.deprecated.test.tsx.snap
│   │   │   │   └── useLocalStore.deprecated.test.tsx.snap
│   │   │   ├── api.test.ts
│   │   │   ├── assertEnvironment.test.ts
│   │   │   ├── enforceActions.test.tsx
│   │   │   ├── observer.test.tsx
│   │   │   ├── printDebugValue.test.ts
│   │   │   ├── strictAndConcurrentMode.test.tsx
│   │   │   ├── strictAndConcurrentModeUsingFinalizationRegistry.test.tsx
│   │   │   ├── strictAndConcurrentModeUsingTimers.test.tsx
│   │   │   ├── transactions.test.tsx
│   │   │   ├── tsconfig.json
│   │   │   ├── useAsObservableSource.deprecated.test.tsx
│   │   │   ├── useAsObservableSource.test.tsx
│   │   │   ├── useLocalObservable.test.tsx
│   │   │   ├── useLocalStore.deprecated.test.tsx
│   │   │   ├── utils/
│   │   │   │   └── killFinalizationRegistry.ts
│   │   │   └── utils.ts
│   │   ├── batchingForReactDom.js
│   │   ├── batchingForReactNative.js
│   │   ├── batchingOptOut.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ObserverComponent.ts
│   │   │   ├── index.ts
│   │   │   ├── observer.ts
│   │   │   ├── staticRendering.ts
│   │   │   ├── useAsObservableSource.ts
│   │   │   ├── useLocalObservable.ts
│   │   │   ├── useLocalStore.ts
│   │   │   ├── useObserver.ts
│   │   │   └── utils/
│   │   │       ├── UniversalFinalizationRegistry.ts
│   │   │       ├── assertEnvironment.ts
│   │   │       ├── observerBatching.ts
│   │   │       ├── observerFinalizationRegistry.ts
│   │   │       ├── printDebugValue.ts
│   │   │       ├── reactBatchedUpdates.native.ts
│   │   │       ├── reactBatchedUpdates.ts
│   │   │       └── utils.ts
│   │   ├── tsconfig.build.cjs.json
│   │   ├── tsconfig.build.es.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   ├── tsconfig.test.json
│   │   └── tsdx.config.js
│   └── mobx-undecorate/
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── README.md
│       ├── __tests__/
│       │   ├── cli.spec.tsx
│       │   ├── fixtures/
│       │   │   └── .gitignore
│       │   ├── tsconfig.json
│       │   └── undecorate.spec.ts
│       ├── cli.js
│       ├── jest.config.js
│       ├── package.json
│       ├── src/
│       │   └── undecorate.ts
│       └── tsconfig.json
├── scripts/
│   └── build.js
├── sponsors.md
├── tsconfig.json
├── tsconfig.test.json
└── website/
    ├── core/
    │   └── Footer.js
    ├── i18n/
    │   └── en.json
    ├── package.json
    ├── sidebars.json
    ├── siteConfig.js
    └── static/
        ├── css/
        │   └── custom.css
        ├── getting-started.html
        ├── index.html
        └── js/
            └── scripts.js

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

================================================
FILE: .changeset/README.md
================================================
# Changesets

Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)

We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/master/docs/common-questions.md)


================================================
FILE: .changeset/config.json
================================================
{
    "changelog": ["@changesets/changelog-github", { "repo": "mobxjs/mobx" }],
    "commit": false,
    "access": "public",
    "baseBranch": "main",
    "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
        "onlyUpdatePeerDependentsWhenOutOfRange": true
    }
}


================================================
FILE: .editorconfig
================================================
root = true

[*]
end_of_line = lf
charset = utf-8
indent_style = space
tab_width = 4

[{package.json}]
indent_style = space
indent_size = 2


================================================
FILE: .eslintrc.js
================================================
module.exports = {
    parser: "@typescript-eslint/parser",
    plugins: ["@typescript-eslint"],
    extends: "eslint:recommended",
    ignorePatterns: ["**/__tests__/**/*"],
    env: {
        browser: true,
        es6: true,
        node: true
    },
    parserOptions: {
        ecmaVersion: 6,
        sourceType: "module"
    },
    rules: {
        "no-fallthrough": "off",
        "no-constant-condition": "off",
        curly: "error",
        "getter-return": "off",
        "no-console": "off",
        "no-var": "error",
        "no-undef": "off",
        "no-extra-semi": "off", // doesn't get along well with prettier
        "no-unused-vars": "off", // got typescript for that,
        "no-redeclare": "off", // No idea what it does, but it dies
        "require-yield": "off" // Doesn't work with TS
    },
    globals: {
        process: "readable",
        global: "readable",
        console: "readable",
        setTimeout: "readable",
        clearTimeout: "readable",
        module: "writable"
    }
}


================================================
FILE: .github/FUNDING.yml
================================================
open_collective: mobx


================================================
FILE: .github/ISSUE_TEMPLATE/bug.md
================================================
---
name: 🐛 Reporting a Bug
about: Open a new issue if something isn't working as expected.
labels: 🐛 bug
---

<!--
  Thanks for filing an issue on MobX!

  Please make sure that you include the following information to ensure that your issue is actionable.

  If you don't follow the template, your issue may end up being closed without anyone looking at it carefully, because it is not actionable for us without the information in this template.
-->

**Intended outcome:**

<!--
What you were trying to accomplish when the bug occurred, and as much code as possible related to the source of the problem.
-->

**Actual outcome:**

<!--
A description of what happened, including a screenshot or copy-paste of any related error messages, logs, or other output that might be related. Places to look for information include your browser console, server console, and network logs. Please avoid non-specific phrases like “didn’t work” or “broke”.
-->

**How to reproduce the issue:**

<!--
Please create a reproduction and link to it here. You can use the following starters:
- React: https://codesandbox.io/s/minimal-mobx-react-project-ppgml
- React Native: https://snack.expo.dev/vEF39Ohnb

If the issue is more complicated or not reproducible with React, feel free to create your CodeSandbox or your own GitHub repo with the code.

Instructions for how the issue can be reproduced by a maintainer or contributor. Be as specific as possible, and only mention what is necessary to reproduce the bug. If possible, try to isolate the exact circumstances in which the bug occurs and avoid speculation over what the cause might be. Help us so we can help you quickly.
-->

**Versions**

<!--
If you are unable to use CodeSandbox for whatever reasons, please list here all relevant dependencies

If you encounter the issue after upgrading from MobX 4/5 to MobX 6, make sure you've applied the migration guide: https://mobx.js.org/migrating-from-4-or-5.html
-->


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: ✨ Feature Request / idea
    url: https://github.com/mobxjs/mobx/discussions/new
    about: Missing something in MobX? Let us know.
  - name: 💬 Question / Discussion
    about: Feel free to ask anything
    url: https://github.com/mobxjs/mobx/discussions/new
  - name: 📖 View documentation
    url: https://mobx.js.org
    about: Official Mobx documentation    
  - name: ❓ StackOverflow
    url: https://stackoverflow.com/questions/tagged/mobx
    about: Ask question or find answers on Stack overflow

================================================
FILE: .github/ISSUE_TEMPLATE/documentation.md
================================================
---
name: ✏ Documentation improvement
about: Please open the PR instead!
labels: 📖 documentation
---

Documentation lives in the `/docs` folder. Please, send in PR directly with a change instead of describing what you want to change.

Ask here only if your change is bigger and there is a chance for rejecting it.


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
    Thanks for taking the effort to create a PR! 🙌

    👋 Are you making a change to documentation only? Delete the rest of the template and go ahead.

    👋 If you are creating an extensive PR, you might want to open an issue with your idea first in case there is a chance for rejecting it.

    👋 If you intend to work on PR over several days, please, create [draft pull requests](https://github.blog/2019-02-14-introducing-draft-pull-requests/) instead.

    👇 Please look at the following checklist to ensure that your PR can be accepted quickly:
-->

### Code change checklist

-   [ ] Added/updated unit tests
-   [ ] Updated `/docs`. For new functionality, at least `API.md` should be updated
-   [ ] Verified that there is no significant performance drop (`yarn mobx test:performance`)

<!--
    Feel free to ask help with any of these boxes!
-->


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/lock.yml
================================================
# Configuration for Lock Threads - https://github.com/dessant/lock-threads

# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 60

# Skip issues and pull requests created before a given timestamp. Timestamp must
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
skipCreatedBefore: 2019-01-01

# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
exemptLabels: []

# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false

# Comment to post before locking. Set to `false` to disable
lockComment: >
  This thread has been automatically locked since there has not been
  any recent activity after it was closed. Please open a new issue for
  related bugs or questions.

# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: true

# Limit to only `issues` or `pulls`
only: issues


================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 14
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 4
# Issues with these labels will never be considered stale
exemptLabels:
    - 📌 pinned
    - 💬 discuss
    - 🍗 enhancement
    - 📖 documentation
    - 🔨 breaking-change
    - 🚧 experimental
    - 🙏 help wanted
    - 👓 needs investigation
    - ✋ on hold

# Label to use when marking an issue as stale
staleLabel: 🚶 stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
    This issue has been automatically marked as stale because it has not had
    recent activity. It will be closed if no further activity occurs. Thank you
    for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
# Limit to only `issues` or `pulls`
only: issues
# Comment to post when removing the stale label.
unmarkComment: >
    This issue has been automatically unmarked as stale. Please disregard previous warnings.


================================================
FILE: .github/workflows/build_and_test.yml
================================================
name: Build and test

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  workflow_dispatch: {}

jobs:
  build:
    name: Build and test
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master

      - name: Setup Node.js 22.x
        uses: actions/setup-node@master
        with:
          node-version: 22.x

      - name: Install Dependencies
        run: yarn --frozen-lockfile --ignore-scripts

      - name: Lint
        run: yarn lint

      - name: Build check
        run: yarn lerna run build:check

      - name: Build packages
        run: yarn lerna run build:test

      - name: Test
        run: yarn test -i

      - name: Test size
        run: yarn lerna run test:size

      - name: Test flow
        run: yarn mobx test:flow

      - name: Test performance
        run: yarn mobx test:performance


================================================
FILE: .github/workflows/coveralls.yml
================================================
name: Coveralls

on: ["push"]

jobs:
  mobx:
    name: Packages coverage
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master
        with:
          # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits
          fetch-depth: 0

      - name: Setup Node.js 22.x
        uses: actions/setup-node@master
        with:
          node-version: 22.x

      - name: Install Dependencies
        run: yarn --frozen-lockfile --ignore-scripts

      - name: Build packages
        run: yarn lerna run build:test

      # - name: Run Coverage
      #   run: yarn coverage

      # - name: Upload to coveralls
      #   uses: coverallsapp/github-action@v2.3.6
      #   with:
      #     github-token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  push:
    branches:
      - main

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@main
        with:
          # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits
          fetch-depth: 0

      - name: Setup Node.js 22.x
        uses: actions/setup-node@master
        with:
          node-version: 22.x

      - name: Install Dependencies
        run: yarn

      - name: Build packages
        run: yarn lerna run build

      - name: Create Release Pull Request or Publish to npm
        id: changesets
        uses: changesets/action@v1
        with:
          # This expects you to have a script called release which does a build for your packages and calls changeset publish
          publish: yarn release
          commit: Version release
          title: Next release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}


================================================
FILE: .gitignore
================================================
.tscache
.settings
node_modules
npm-debug.log
coverage
test/babel-tests.js
test/typescript/typescript-tests.js
dist/
**/.idea/*
!/.idea/icon.png
!/.idea/vcs.xml
.wp-build*/
*.iml
*.ipr
*.iws
yarn-error.log
build/
.DS_Store


================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="IssueNavigationConfiguration">
    <option name="links">
      <list>
        <IssueNavigationLink>
          <option name="issueRegexp" value="#(\d+)" />
          <option name="linkRegexp" value="https://github.com/mobxjs/mobx/issues/$1" />
        </IssueNavigationLink>
      </list>
    </option>
  </component>
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
  </component>
</project>

================================================
FILE: .prettierignore
================================================
/**/package.json
website/**/*
dist/
docs/assets/
*.yml
coverage

================================================
FILE: .prettierrc
================================================
{
    "printWidth": 100,
    "semi": false,
    "tabWidth": 4,
    "singleQuote": false,
    "trailingComma": "none",
    "arrowParens": "avoid",
    "useTabs": false
}


================================================
FILE: .vscode/launch.json
================================================
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "type": "node",
            "request": "launch",
            "name": "debug unit test",
            "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
            "args": ["-i", "${file}"],
            // "preLaunchTask": "tsc: build - tsconfig.json"
        },
        {
            "type": "node",
            "request": "launch",
            "name": "debug perf test",
            "program": "${file}",
            // "preLaunchTask": "tsc: build - tsconfig.json"
        }
    ]
}

================================================
FILE: .vscode/settings.json
================================================
{
    "[typescript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.formatOnSave": true,
        "editor.formatOnPaste": false
    },
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.formatOnSave": true,
        "editor.formatOnPaste": false
    },
    "typescript.tsdk": "node_modules/typescript/lib",
    // "javascript.validate.enable": false // enable for flow
    "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
    "fb.doctor.disabled-tests": ["CorporateNetworkDoctor"],
    "cSpell.enabled": true
}


================================================
FILE: .watchmanconfig
================================================
{
  "ignore_dirs": ["node_modules", "_site", "dist", "coverage"]
}


================================================
FILE: CODE_OF_CONDUCT.md
================================================
Contributor Code of Conduct

As contributors and maintainers of the MobX project, we pledge to respect everyone who contributes by posting issues, updating documentation, submitting pull requests, providing feedback in comments, and any other activities.

Communication through GitHub, Gitter, email or any other channel must be constructive and never resort to personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.

We promise to extend courtesy and respect to everyone involved in this project regardless of gender, gender identity, sexual orientation, disability, age, race, ethnicity, religion, or level of experience. We expect anyone contributing to the project to do the same.

If any member of the community violates this code of conduct, the maintainers of the MobX project may take action, removing issues, comments, and PRs or blocking accounts as deemed appropriate.

If you are subject to or witness unacceptable behavior, or have any other concerns, please open an issue or send a direct message to [Michel](https://twitter.com/mweststrate) on Twitter.


================================================
FILE: CONTRIBUTING.md
================================================
# MobX Contributor Guide

Welcome to a community of developers just like you, striving to create the best experience around MobX. We welcome anyone who wants to contribute or provide constructive feedback, no matter the age or level of experience.

Here are some ways to contribute to the project, from easiest to most difficult:

-   [Reporting bugs](#reporting-bugs)
-   [Improving the documentation](#improving-the-documentation)
-   [Responding to issues](#responding-to-issues)
-   [Small bug fixes](#small-bug-fixes)

## Issues

### Reporting bugs

If you encounter a bug, please file an issue on GitHub via the repository of the sub-project you think contains the bug. If an issue you have is already reported, please add additional information or add a 👍 reaction to indicate your agreement.

Include in the issue a link to your reproduction. A couple good options are a small Github repo or a [CodeSandbox](https://codesandbox.io/s/minimal-mobx-react-project-ppgml).

If you have a more complicated issue where it is helpful to run it locally, you can download CodeSandbox template and work on it and then commit into your GitHub repo.

### Improving the documentation

Improving the documentation, examples, and other open source content can be the easiest way to contribute to the library. If you see a piece of content that can be better, open a PR with an improvement, no matter how small! If you would like to suggest a big change or major rewrite, we’d love to hear your ideas but please open an issue for discussion before writing the PR.

### Responding to issues

In addition to reporting issues, a great way to contribute to MobX is to respond to other peoples' issues and try to identify the problem or help them work around it. If you’re interested in taking a more active role in this process, please go ahead and respond to issues.

### Small bug fixes

For a small bug fix change (less than 20 lines of code changed), feel free to open a pull request. We’ll try to merge it as fast as possible and ideally publish a new release on the same day. The only requirement is, make sure you also add a test that verifies the bug you are trying to fix.

#### Getting things running

```
git clone git@github.com:mobxjs/mobx.git
cd mobx
yarn install
yarn lerna run build
yarn test
```



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

Copyright (c) 2015 Michel Weststrate

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
================================================
<img src="https://mobx.js.org/assets/mobx.png" alt="logo" height="120" align="right" />

# MobX

_Simple, scalable state management._

[![npm version](https://badge.fury.io/js/mobx.svg)](https://badge.fury.io/js/mobx)
[![OpenCollective](https://opencollective.com/mobx/backers/badge.svg)](docs/backers-sponsors.md#backers)
[![OpenCollective](https://opencollective.com/mobx/sponsors/badge.svg)](docs/backers-sponsors.md#sponsors)
[![Discuss on Github](https://img.shields.io/badge/discuss%20on-GitHub-orange)](https://github.com/mobxjs/mobx/discussions)
[![Coverage Status](https://coveralls.io/repos/github/mobxjs/mobx/badge.svg?branch=main)](https://coveralls.io/github/mobxjs/mobx?branch=main)
[![View changelog](https://img.shields.io/badge/changelogs.xyz-Explore%20Changelog-brightgreen)](https://changelogs.xyz/mobx)

---

## Documentation

Documentation can be found at **[mobx.js.org](https://mobx.js.org/)**.

---

## Sponsors

MobX is made possible by the generosity of the sponsors below, and many other [individual backers](https://github.com/mobxjs/mobx/blob/main/docs/backers-sponsors.md#backers). Sponsoring directly impacts the longevity of this project.

**🥇🥇 Platinum sponsors (\$5000+ total contribution): 🥇🥇**

<br/>
<a href="https://www.guilded.gg/"><img src="https://mobx.js.org/assets/guilded.jpg" align="center" width="100" title="Guilded" alt="Guilded" /></a>
<a href="https://www.canva.com/"><img src="https://mobx.js.org/assets/canva.svg" align="center" width="100" title="Canva" alt="Canva" /></a>
<a href="https://www.getparallax.com/"><img src="https://mobx.js.org/assets/parallax.png" align="center" width="100" title="Parallax" alt="Parallax" /></a>

**🥇 Gold sponsors (\$2500+ total contribution):**

<br/>
<a href="https://www.one-beyond.com"><img src="https://mobx.js.org/assets/dcsl.png" align="center" width="100" title="One Beyond" alt="One Beyond"/></a>
<a href="https://frontendmasters.com/"><img src="https://mobx.js.org/assets/frontendmasters.jpg" align="center" width="100" title="Frontend Masters" alt="Frontend Masters"></a>
<a href="http://auctionfrontier.com/"><img src="https://mobx.js.org/assets/auctionfrontier.jpeg" align="center" width="100" title="Auction Frontier" alt="Auction Frontier"></a>
<a href="https://www.codefirst.co.uk/"><img src="https://mobx.js.org/assets/codefirst.png" align="center" width="100" title="CodeFirst" alt="CodeFirst"/></a>
<a href="https://modulz.app/"><img src="https://mobx.js.org/assets/modulz.png" align="center" width="100" title="Modulz" alt="Modulz"/></a>
<a href="https://coinbase.com/"><img src="https://mobx.js.org/assets/coinbase.jpeg" align="center" width="100" title="Coinbase" alt="Coinbase" /></a>
<a href="https://curology.com/blog/tech"><img src="https://mobx.js.org/assets/curology.png" align="center" width="100" title="Curology" alt="Curology"/></a>
<a href="https://mendix.com/"><img src="https://mobx.js.org/assets/mendix-logo.png" align="center" width="100" title="Mendix" alt="Mendix" /></a>
<a href="https://opensource.facebook.com/"><img src="https://mobx.js.org/assets/fbos.jpeg" align="center" width="100" title="Facebook Open Source" alt="Facebook Open Source" /></a>
<a href="https://casinosites.ltd.uk/?utm_source=sponsorship&utm_medium=mobx&utm_campaign=readme"><img src="https://mobx.js.org/assets/casino2.png" align="center" width="100" title="Casino Sites" alt="Casino Sites"/></a>
<a href="https://www.bugsnag.com/platforms/react-error-reporting?utm_source=MobX&utm_medium=Website&utm_content=open-source&utm_campaign=2019-community&utm_term=20190913"><img src="https://mobx.js.org/assets/bugsnag.jpg" align="center" width="100" title="Bugsnag" alt="Bugsnag"/></a>

**🥈 Silver sponsors (\$500+ total contributions):**<br/>

<a href="https://mantro.net/jobs/warlock"><img src="https://mobx.js.org/assets/mantro.png" align="center" width="100" title="mantro GmbH" alt="mantro GmbH"></a>
<a href="https://xh.io/"><img src="https://mobx.js.org/assets/xh.png" align="center" width="100" title="Extremely Heavy Industries" alt="Extremely Heavy Industries" /></a>
<a href="https://www.algolia.com/"><img src="https://mobx.js.org/assets/algolia.jpg" align="center" width="100" title="Algolia" alt="Algolia" /></a>
<a href="https://space307.com/?utm_source=sponsorship&utm_medium=mobx&utm_campaign=readme"><img src="https://mobx.js.org/assets/space307.png" align="center" width="100" title="Space307" alt="Space307"/></a>
<a href="https://blokt.com/"><img src="https://mobx.js.org/assets/blokt.jpg" align="center" width="100" title="Blokt" alt="Blokt"/></a>
<a href="https://upper.co/?utm_source=github_mobxjs_sponsorship&utm_medium=paid_acquisition&utm_campaign=sponsorship"><img src="https://mobx.js.org/assets/upper.png" align="center" width="100" title="UPPER" alt="UPPER"/></a>
<a href="https://careers.dazn.com/"><img src="https://mobx.js.org/assets/dazn.png" align="center" width="100" title="DAZN" alt="DAZN"></a>
<a href="https://talentplot.com/"><img src="https://mobx.js.org/assets/talentplot.png" align="center" width="100" title="talentplot" alt="talentplot"></a>
<a href="https://www.easeus.com/?utm_source=github_mobxjs_sponsorship&utm_medium=readme&utm_campaign=sponsorship"><img src="https://mobx.js.org/assets/easeus.png" align="center" width="100" title="EaseUS" alt="EaseUS"/></a>
<a href="https://route4me.com/"><img src="https://mobx.js.org/assets/route4me.png" align="center" width="100" title="Route Planner and Route Optimizer" alt="Route Planner and Route Optimizer"/></a>
<a href="https://handsontable.com/docs/react-data-grid/?utm_source=Mobx_homepage&utm_medium=sponsorship&utm_campaign=library_sponsorship"><img src="https://mobx.js.org/assets/handsontable.png" align="center" width="100" title="Handsontable" alt="Handsontable"/></a>

## Introduction

_Anything that can be derived from the application state, should be. Automatically._

MobX is a signal based, battle-tested library that makes state management simple and scalable by transparently applying functional reactive programming.
The philosophy behind MobX is simple:

<div class="benefits">
    <div>
        <div class="pic">😙</div>
        <div>
            <h4>Straightforward</h4>
            <p>Write minimalistic, boilerplate-free code that captures your intent.
            Trying to update a record field? Simply use a normal JavaScript assignment —
            the reactivity system will detect all your changes and propagate them out to where they are being used.
            No special tools are required when updating data in an asynchronous process.
            </p>
        </div>
    </div>
    <div>
        <div class="pic">🚅</div>
        <div>
            <h4>Effortless optimal rendering</h4>
            <p>
                All changes to and uses of your data are tracked at runtime, building a dependency tree that captures all relations between state and output.
                This guarantees that computations that depend on your state, like React components, run only when strictly needed.
                There is no need to manually optimize components with error-prone and sub-optimal techniques like memoization and selectors.
            </p>
        </div>
    </div>
    <div>
        <div class="pic">🤹🏻‍♂️</div>
        <div>
            <h4>Architectural freedom</h4>
            <p>
                MobX is unopinionated and allows you to manage your application state outside of any UI framework.
                This makes your code decoupled, portable, and above all, easily testable.
            </p>
        </div>
    </div>
</div>

---

## A quick example

So what does code that uses MobX look like?

```javascript
import React from "react"
import ReactDOM from "react-dom"
import { makeAutoObservable } from "mobx"
import { observer } from "mobx-react-lite"

// Model the application state.
function createTimer() {
    return makeAutoObservable({
        secondsPassed: 0,
        increase() {
            this.secondsPassed += 1
        },
        reset() {
            this.secondsPassed = 0
        }
    })
}

const myTimer = createTimer()

// Build a "user interface" that uses the observable state.
const TimerView = observer(({ timer }) => (
    <button onClick={() => timer.reset()}>Seconds passed: {timer.secondsPassed}</button>
))

ReactDOM.render(<TimerView timer={myTimer} />, document.body)

// Update the 'Seconds passed: X' text every second.
setInterval(() => {
    myTimer.increase()
}, 1000)
```

The `observer` wrapper around the `TimerView` React component will automatically detect that rendering
depends on the `timer.secondsPassed` observable, even though this relationship is not explicitly defined. The reactivity system will take care of re-rendering the component when _precisely that_ field is updated in the future.

Every event (`onClick` / `setInterval`) invokes an _action_ (`myTimer.increase` / `myTimer.reset`) that updates _observable state_ (`myTimer.secondsPassed`).
Changes in the observable state are propagated precisely to all _computations_ and _side effects_ (`TimerView`) that depend on the changes being made.

<img alt="MobX unidirectional flow" src="https://mobx.js.org/assets/flow2.png" align="center" />

This conceptual picture can be applied to the above example, or any other application using MobX.

## Getting started

To learn about the core concepts of MobX using a larger example, check out **[The gist of MobX](https://mobx.js.org/the-gist-of-mobx.html)** page, or take the **[10 minute interactive introduction to MobX and React](https://mobx.js.org/getting-started)**.
The philosophy and benefits of the mental model provided by MobX are also described in great detail in the blog posts [UI as an afterthought](https://michel.codes/blogs/ui-as-an-afterthought) and [How to decouple state and UI (a.k.a. you don’t need componentWillMount)](https://hackernoon.com/how-to-decouple-state-and-ui-a-k-a-you-dont-need-componentwillmount-cc90b787aa37).

## Further resources

-   The [MobX cheat sheet](https://gum.co/fSocU) (£5) is both useful and sponsors the project
-   [10 minute interactive introduction to MobX and React](https://mobx.js.org/getting-started)
-   [Egghead.io course, based on MobX 3](https://egghead.io/courses/manage-complex-state-in-react-apps-with-mobx)
-   The [MobX awesome list](https://github.com/mobxjs/awesome-mobx#awesome-mobx) – a long list of MobX resources and example projects

### The MobX book

<a href="https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837"><img src="https://mobx.js.org/assets/book.jpg" height="120px" /></a>

The **[MobX Quick Start Guide](https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837)** ($24.99) by [Pavan Podila](https://twitter.com/pavanpodila) and [Michel Weststrate](https://twitter.com/mweststrate) is available as an [ebook](https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837), [paperback](https://www.amazon.com/MobX-Quick-Start-Guide-Supercharge/dp/1789344832), and on the [O'Reilly platform](https://www.oreilly.com/library/view/mobx-quick-start/9781789344837/) (see [preview](https://books.google.com/books?id=ALFmDwAAQBAJ&printsec=frontcover#v=onepage&q&f=false)).

### Videos

-   [Introduction to MobX & React in 2020](https://www.youtube.com/watch?v=pnhIJA64ByY) by Leigh Halliday, _17 min_.
-   [ReactNext 2016: Real World MobX](https://www.youtube.com/watch?v=Aws40KOx90U) by Michel Weststrate, _40 min_, [slides](https://docs.google.com/presentation/d/1DrI6Hc2xIPTLBkfNH8YczOcPXQTOaCIcDESdyVfG_bE/edit?usp=sharing).
-   [CityJS 2020: MobX, from mutable to immutable, to observable data](https://youtu.be/sP7dtZm_Wx0?t=27050) by Michel Weststrate, _30 min_.
-   [OpenSourceNorth: Practical React with MobX (ES5)](https://www.youtube.com/watch?v=XGwuM_u7UeQ) by Matt Ruby, _42 min_.
-   [HolyJS 2019: MobX and the unique symbiosis of predictability and speed](https://www.youtube.com/watch?v=NBYbBbjZeX4&list=PL8sJahqnzh8JJD7xahG5zXkjfM5GOgcPA&index=21&t=0s) by Michel Weststrate, _59 min_.
-   [React Amsterdam 2016: State Management Is Easy](https://www.youtube.com/watch?v=ApmSsu3qnf0&feature=youtu.be) by Michel Weststrate, _20 min_, [slides](https://speakerdeck.com/mweststrate/state-management-is-easy-introduction-to-mobx).
-   {🚀} [React Live 2019: Reinventing MobX](https://www.youtube.com/watch?v=P_WqKZxpX8g) by Max Gallo, _27 min_.

## Credits

MobX is inspired by reactive programming principles, which are for example used in spreadsheets. It is inspired by model–view–viewmodel frameworks like [MeteorJS's Tracker](https://docs.meteor.com/api/tracker.html), [Knockout](https://knockoutjs.com/) and [Vue.js](https://vuejs.org/), but MobX brings _transparent functional reactive programming_ (TFRP, a concept which is further explained in the [MobX book](https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837)) to the next level and provides a standalone implementation. It implements TFRP in a glitch-free, synchronous, predictable and efficient manner.

A ton of credit goes to [Mendix](https://github.com/mendix), for providing the flexibility and support to maintain MobX and the chance to prove the philosophy of MobX in a real, complex, performance critical applications.


================================================
FILE: SECURITY.md
================================================
# Security Policy

All our packages are provided as-is without guarantees or SLAs.
Security issues will be handled with appropriate urgency but without warranties.

## Supported Versions

Security issues must be reported against latest version of each package (as found on NPM) and will not be back-ported. 

## Reporting a Vulnerability

Security issues can be reported at info@michel.codes. Since this software is provided as-is no follow up, remediation or time lines are guaranteed.


================================================
FILE: docs/LINKS.md
================================================
<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CEBD4KQ7&placement=mobxjsorg" id="_carbonads_js"></script>

# Resources

-   [Ten minute interactive introduction to MobX and React](https://mobx.js.org/getting-started)
-   How MobX works: [In depth explanation of MobX](https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.wnlo6bw8y)
-   Clone the boilerplate repository containing the above example from: https://github.com/mweststrate/react-mobservable-boilerplate.
-   Or fork this [JSFiddle](https://jsfiddle.net/mweststrate/wgbe4guu/).

## Related projects

-   [mobx-connect](https://github.com/nightwolfz/mobx-connect) MobX @connect decorator for react components. Similar to redux's @connect.
-   [rfx-stack](https://github.com/foxhound87/rfx-stack) RFX Stack - Universal App featuring: React + Feathers + MobX
-   [mobx-reactor](https://github.com/amsb/mobx-reactor) Connect MobX data stores to functional stateless React components with async actions and unidirectional data flow.
-   [mobx-model](https://github.com/ikido/mobx-model) Simplify mobx data stores that mimic backend models
-   [rx-mobx](https://github.com/chicoxyzzy/rx-mobx) Convert MobX observables to RxJS and vice versa

## More examples

A nice list is WIP, but see this [github issue](https://github.com/mobxjs/mobx/issues/104) for a list of example projects, including routing, authorization, server side rendering etc.

-   [TodoMVC using MobX and React](https://github.com/mweststrate/mobx-todomvc)
-   The [ports of the _Notes_ and _Kanban_ examples](https://github.com/survivejs/mobservable-demo) from the book "SurviveJS - Webpack and React" to mobservable.
-   A simple webshop using [React + mobx](https://jsfiddle.net/mweststrate/46vL0phw) or [JQuery + mobx](http://jsfiddle.net/mweststrate/vxn7qgdw).
-   [Simple timer](https://jsfiddle.net/mweststrate/wgbe4guu/) application in JSFiddle.
-   [Simple ES5 MobX examples](https://github.com/mattruby/mobx-examples) Bite sized MobX examples all setup to run in jsFiddle.

## Philosophy

-   [Making React reactive: the pursuit of high performing, easily maintainable React apps](https://www.mendix.com/tech-blog/making-react-reactive-pursuit-high-performing-easily-maintainable-react-apps/)
-   [SurviveJS interview on Mobservable, React and Flux](http://survivejs.com/blog/mobservable-interview/)
-   [Pure rendering in the light of time and state](https://medium.com/@mweststrate/pure-rendering-in-the-light-of-time-and-state-4b537d8d40b1)
-   [Official homepage](http://mobxjs.github.io/mobx/)


================================================
FILE: docs/README.md
================================================
---
title: About MobX
sidebar_label: About MobX
hide_title: true
---

<img src="https://mobx.js.org/assets/mobx.png" alt="logo" height="120" align="right" />

# MobX

_Simple, scalable state management._

[![Discuss on Github](https://img.shields.io/badge/discuss%20on-GitHub-orange)](https://github.com/mobxjs/mobx/discussions)
[![npm version](https://badge.fury.io/js/mobx.svg)](https://badge.fury.io/js/mobx)
[![OpenCollective](https://opencollective.com/mobx/backers/badge.svg)](backers-sponsors.md#backers)
[![OpenCollective](https://opencollective.com/mobx/sponsors/badge.svg)](backers-sponsors.md#sponsors)
[![View changelog](https://img.shields.io/badge/changelogs.xyz-Explore%20Changelog-brightgreen)](https://changelogs.xyz/mobx)

---

MobX is made possible by the generosity of the sponsors below, and many other [individual backers](backers-sponsors.md#backers). Sponsoring directly impacts the longevity of this project.

**🥇🥇 Platinum sponsors (\$5000+ total contribution): 🥇🥇**

<br/>
<a href="https://www.guilded.gg/"><img src="https://mobx.js.org/assets/guilded.jpg" align="center" width="100" title="Guilded" alt="Guilded" /></a>
<a href="https://www.canva.com/"><img src="https://mobx.js.org/assets/canva.svg" align="center" width="100" title="Canva" alt="Canva" /></a>
<a href="https://www.getparallax.com/"><img src="https://mobx.js.org/assets/parallax.png" align="center" width="100" title="Parallax" alt="Parallax" /></a>

**🥇 Gold sponsors (\$2500+ total contribution):**

<br/>
<a href="https://www.one-beyond.com"><img src="https://mobx.js.org/assets/dcsl.png" align="center" width="100" title="One Beyond" alt="One Beyond"/></a>
<a href="https://frontendmasters.com/"><img src="https://mobx.js.org/assets/frontendmasters.jpg" align="center" width="100" title="Frontend Masters" alt="Frontend Masters"></a>
<a href="http://auctionfrontier.com/"><img src="https://mobx.js.org/assets/auctionfrontier.jpeg" align="center" width="100" title="Auction Frontier" alt="Auction Frontier"></a>
<a href="https://www.codefirst.co.uk/"><img src="https://mobx.js.org/assets/codefirst.png" align="center" width="100" title="CodeFirst" alt="CodeFirst"/></a>
<a href="https://modulz.app/"><img src="https://mobx.js.org/assets/modulz.png" align="center" width="100" title="Modulz" alt="Modulz"/></a>
<a href="https://coinbase.com/"><img src="https://mobx.js.org/assets/coinbase.jpeg" align="center" width="100" title="Coinbase" alt="Coinbase" /></a>
<a href="https://curology.com/blog/tech"><img src="https://mobx.js.org/assets/curology.png" align="center" width="100" title="Curology" alt="Curology"/></a>
<a href="https://mendix.com/"><img src="https://mobx.js.org/assets/mendix-logo.png" align="center" width="100" title="Mendix" alt="Mendix" /></a>
<a href="https://opensource.facebook.com/"><img src="https://mobx.js.org/assets/fbos.jpeg" align="center" width="100" title="Facebook Open Source" alt="Facebook Open Source" /></a>
<a href="https://casinosites.ltd.uk/?utm_source=sponsorship&utm_medium=mobx&utm_campaign=readme"><img src="https://mobx.js.org/assets/casino2.png" align="center" width="100" title="Casino Sites" alt="Casino Sites"/></a>
<a href="https://www.bugsnag.com/platforms/react-error-reporting?utm_source=MobX&utm_medium=Website&utm_content=open-source&utm_campaign=2019-community&utm_term=20190913"><img src="https://mobx.js.org/assets/bugsnag.jpg" align="center" width="100" title="Bugsnag" alt="Bugsnag"/></a>

**🥈 Silver sponsors (\$500+ total contributions):**<br/>

<a href="https://mantro.net/jobs/warlock"><img src="https://mobx.js.org/assets/mantro.png" align="center" width="100" title="mantro GmbH" alt="mantro GmbH"></a>
<a href="https://www.xh.com/"><img src="https://mobx.js.org/assets/xh.png" align="center" width="100" title="Extremely Heavy" alt="Extremely Heavy" /></a>
<a href="https://www.algolia.com/"><img src="https://mobx.js.org/assets/algolia.jpg" align="center" width="100" title="Algolia" alt="Algolia" /></a>
<a href="https://space307.com/?utm_source=sponsorship&utm_medium=mobx&utm_campaign=readme"><img src="https://mobx.js.org/assets/space307.png" align="center" width="100" title="Space307" alt="Space307"/></a>
<a href="https://blokt.com/"><img src="https://mobx.js.org/assets/blokt.jpg" align="center" width="100" title="Blokt" alt="Blokt"/></a>
<a href="https://upper.co/?utm_source=github_mobxjs_sponsorship&utm_medium=paid_acquisition&utm_campaign=sponsorship"><img src="https://mobx.js.org/assets/upper.png" align="center" width="100" title="UPPER" alt="UPPER"/></a>
<a href="https://careers.dazn.com/"><img src="https://mobx.js.org/assets/dazn.png" align="center" width="100" title="DAZN" alt="DAZN"></a>
<a href="https://talentplot.com/"><img src="https://mobx.js.org/assets/talentplot.png" align="center" width="100" title="talentplot" alt="talentplot"></a>
<a href="https://www.easeus.com/?utm_source=github_mobxjs_sponsorship&utm_medium=readme&utm_campaign=sponsorship"><img src="https://mobx.js.org/assets/easeus.png" align="center" width="100" title="EaseUS" alt="EaseUS"/></a>
<a href="https://route4me.com/"><img src="https://mobx.js.org/assets/route4me.png" align="center" width="100" title="Route Planner and Route Optimizer" alt="Route Planner and Route Optimizer"/></a>
<a href="https://handsontable.com/docs/react-data-grid/?utm_source=Mobx_homepage&utm_medium=sponsorship&utm_campaign=library_sponsorship"><img src="https://mobx.js.org/assets/handsontable.png" align="center" width="100" title="Handsontable" alt="Handsontable"/></a>

---

## Introduction

_Anything that can be derived from the application state, should be. Automatically._

MobX is a signal based, battle-tested library that makes state management simple and scalable by transparently applying functional reactive programming.
The philosophy behind MobX is simple:

<div class="benefits">
    <div>
        <div class="pic">😙</div>
        <div>
            <h4>Straightforward</h4>
            <p>Write minimalistic, boilerplate-free code that captures your intent.
            Trying to update a record field? Simply use a normal JavaScript assignment —
            the reactivity system will detect all your changes and propagate them out to where they are being used.
            No special tools are required when updating data in an asynchronous process.
            </p>
        </div>
    </div>
    <div>
        <div class="pic">🚅</div>
        <div>
            <h4>Effortless optimal rendering</h4>
            <p>
                All changes to and uses of your data are tracked at runtime, building a dependency tree that captures all relations between state and output.
                This guarantees that computations that depend on your state, like React components, run only when strictly needed.
                There is no need to manually optimize components with error-prone and sub-optimal techniques like memoization and selectors.
            </p>
        </div>
    </div>
    <div>
        <div class="pic">🤹🏻‍♂️</div>
        <div>
            <h4>Architectural freedom</h4>
            <p>
                MobX is unopinionated and allows you to manage your application state outside of any UI framework.
                This makes your code decoupled, portable, and above all, easily testable.
            </p>
        </div>
    </div>
</div>

---

## A quick example

So what does code that uses MobX look like?

```javascript
import React from "react"
import ReactDOM from "react-dom"
import { makeAutoObservable } from "mobx"
import { observer } from "mobx-react-lite"

// Model the application state.
function createTimer() {
    return makeAutoObservable({
        secondsPassed: 0,
        increase() {
            this.secondsPassed += 1
        },
        reset() {
            this.secondsPassed = 0
        }
    })
}

const myTimer = createTimer()

// Build a "user interface" that uses the observable state.
const TimerView = observer(({ timer }) => (
    <button onClick={() => timer.reset()}>Seconds passed: {timer.secondsPassed}</button>
))

ReactDOM.render(<TimerView timer={myTimer} />, document.body)

// Update the 'Seconds passed: X' text every second.
setInterval(() => {
    myTimer.increase()
}, 1000)
```

The `observer` wrapper around the `TimerView` React component will automatically detect that rendering
depends on the `timer.secondsPassed` observable, even though this relationship is not explicitly defined. The reactivity system will take care of re-rendering the component when _precisely that_ field is updated in the future.

Every event (`onClick` / `setInterval`) invokes an _action_ (`myTimer.increase` / `myTimer.reset`) that updates _observable state_ (`myTimer.secondsPassed`).
Changes in the observable state are propagated precisely to all _computations_ and _side effects_ (`TimerView`) that depend on the changes being made.

<img alt="MobX unidirectional flow" src="https://mobx.js.org/assets/flow2.png" align="center" />

This conceptual picture can be applied to the above example, or any other application using MobX.

## Getting started

To learn about the core concepts of MobX using a larger example, check out **[The gist of MobX](the-gist-of-mobx.md)** page, or take the **[10 minute interactive introduction to MobX and React](https://mobx.js.org/getting-started)**.

The philosophy and benefits of the mental model provided by MobX are also described in great detail in the blog posts [UI as an afterthought](https://michel.codes/blogs/ui-as-an-afterthought) and [How to decouple state and UI (a.k.a. you don’t need componentWillMount)](https://hackernoon.com/how-to-decouple-state-and-ui-a-k-a-you-dont-need-componentwillmount-cc90b787aa37).

## Further resources

-   The [MobX cheat sheet](https://gum.co/fSocU) (£5) is both useful and sponsors the project
-   [10 minute interactive introduction to MobX and React](https://mobx.js.org/getting-started)
-   [Egghead.io course, based on MobX 3](https://egghead.io/courses/manage-complex-state-in-react-apps-with-mobx)
-   The [MobX awesome list](https://github.com/mobxjs/awesome-mobx#awesome-mobx) – a long list of MobX resources and example projects

### The MobX book

<a href="https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837"><img src="https://mobx.js.org/assets/book.jpg" height="120px" /></a>

The **[MobX Quick Start Guide](https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837)** ($24.99) by [Pavan Podila](https://twitter.com/pavanpodila) and [Michel Weststrate](https://twitter.com/mweststrate) is available as an [ebook](https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837), [paperback](https://www.amazon.com/MobX-Quick-Start-Guide-Supercharge/dp/1789344832), and on the [O'Reilly platform](https://www.oreilly.com/library/view/mobx-quick-start/9781789344837/) (see [preview](https://books.google.com/books?id=ALFmDwAAQBAJ&printsec=frontcover#v=onepage&q&f=false)).

### Videos

-   [Introduction to MobX & React in 2020](https://www.youtube.com/watch?v=pnhIJA64ByY) by Leigh Halliday, _17 min_.
-   [ReactNext 2016: Real World MobX](https://www.youtube.com/watch?v=Aws40KOx90U) by Michel Weststrate, _40 min_, [slides](https://docs.google.com/presentation/d/1DrI6Hc2xIPTLBkfNH8YczOcPXQTOaCIcDESdyVfG_bE/edit?usp=sharing).
-   [CityJS 2020: MobX, from mutable to immutable, to observable data](https://youtu.be/sP7dtZm_Wx0?t=27050) by Michel Weststrate, _30 min_.
-   [OpenSourceNorth: Practical React with MobX (ES5)](https://www.youtube.com/watch?v=XGwuM_u7UeQ) by Matt Ruby, _42 min_.
-   [HolyJS 2019: MobX and the unique symbiosis of predictability and speed](https://www.youtube.com/watch?v=NBYbBbjZeX4&list=PL8sJahqnzh8JJD7xahG5zXkjfM5GOgcPA&index=21&t=0s) by Michel Weststrate, _59 min_.
-   [React Amsterdam 2016: State Management Is Easy](https://www.youtube.com/watch?v=ApmSsu3qnf0&feature=youtu.be) by Michel Weststrate, _20 min_, [slides](https://speakerdeck.com/mweststrate/state-management-is-easy-introduction-to-mobx).
-   {🚀} [React Live 2019: Reinventing MobX](https://www.youtube.com/watch?v=P_WqKZxpX8g) by Max Gallo, _27 min_.

## Credits

MobX is inspired by reactive programming principles, which are for example used in spreadsheets. It is inspired by model–view–viewmodel frameworks like [MeteorJS's Tracker](https://docs.meteor.com/api/tracker.html), [Knockout](https://knockoutjs.com/) and [Vue.js](https://vuejs.org/), but MobX brings _transparent functional reactive programming_ (TFRP, a concept which is further explained in the [MobX book](https://www.packtpub.com/product/mobx-quick-start-guide/9781789344837)) to the next level and provides a standalone implementation. It implements TFRP in a glitch-free, synchronous, predictable and efficient manner.

A ton of credit goes to [Mendix](https://github.com/mendix) for providing the flexibility and support to maintain MobX and the chance to prove the philosophy of MobX in a real, complex, performance critical applications.


================================================
FILE: docs/about-this-documentation.md
================================================
---
title: About this documentation
sidebar_label: About this documentation
hide_title: true
---

<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CEBD4KQ7&placement=mobxjsorg" id="_carbonads_js"></script>

# About this documentation

It follows the principle that the most commonly used concepts are
introduced before specialized information. This applies to the headings in the table
of concepts as well as the pages under those headings.

We've marked the sections and concepts that are more advanced with the {🚀} marker. You likely won't have to understand them until you will have a special use case, and can use MobX very effectively without knowing about them. Feel free to skip them and move on to the next section!

The documentation has been rewritten for MobX 6. For older versions of MobX, it can be found [here](https://github.com/mobxjs/mobx/tree/mobx4and5/docs).
All the principles are the same, and the API is largely the same. The main difference is that before MobX 6, [decorators](https://github.com/mobxjs/mobx/blob/mobx4and5/docs/best/decorators.md) were the recommended syntax to write MobX enhanced classes.

A summary of the documentation can be downloaded as cheat sheet:

<div class="cheat"><a href="https://gum.co/fSocU"><button title="Download the MobX 6 cheat sheet and sponsor the project">Download the MobX 6 cheat sheet</button></a></div>

## Guided tour

To get an overall idea of how to use MobX with React, read through the current _Introduction_ heading, in particular [The gist of MobX](the-gist-of-mobx.md) section.
It will introduce you to the most important principles, APIs and how they relate.
You should be ready to use MobX once you read this!

Here are a few suggestions about the next things to check out:

-   Try the [10 minute interactive introduction to MobX and React](https://mobx.js.org/getting-started)

-   [React integration](react-integration.md)

-   [`makeObservable` / `makeAutoObservable`](observable-state.md)

-   Learn about [actions](actions.md), which includes a discussion on asynchronous actions

-   The basics of [computeds](computeds.md)

-   Read about [`autorun`](reactions.md#autorun), if only because it's used in the examples

-   To get an idea on how to organize your application's data stores, check out [Defining data stores](defining-data-stores.md)

-   If the behavior of MobX confuses you, it's useful to check out [Understanding reactivity](understanding-reactivity.md)

-   Get a [quick overview of the API](api.md), also linked in the top navigation bar

This should give you a good understanding of the day-to-day uses of MobX. There is plenty more available for you to read at your own leisure.


================================================
FILE: docs/actions.md
================================================
---
title: Updating state using actions
sidebar_label: Actions
hide_title: true
---

<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CEBD4KQ7&placement=mobxjsorg" id="_carbonads_js"></script>

# Updating state using actions

Usage:

-   `action` _(annotation)_
-   `action(fn)`
-   `action(name, fn)`
-   `@action` _(method / field decorator)_

All applications have actions. An action is any piece of code that modifies the state. In principle, actions always happen in response to an event. For example, a button was clicked, some input changed, a websocket message arrived, etc.

MobX requires that you declare your actions, although [`makeAutoObservable`](observable-state.md#makeautoobservable) can automate much of this job. Actions help you structure your code better and offer the following performance benefits:

1. They are run inside [transactions](api.md#transaction). No reactions will be run until the outer-most action has finished, guaranteeing that intermediate or incomplete values produced during an action are not visible to the rest of the application until the action has completed.

2. By default, it is not allowed to change the state outside of actions. This helps to clearly identify in your code base where the state updates happen.

The `action` annotation should only be used on functions that intend to _modify_ the state. Functions that derive information (performing lookups or filtering data) should _not_ be marked as actions, to allow MobX to track their invocations. `action` annotated members will be non-enumerable.

## Examples

<!--DOCUSAURUS_CODE_TABS-->
<!--makeObservable-->

```javascript
import { makeObservable, observable, action } from "mobx"

class Doubler {
    value = 0

    constructor() {
        makeObservable(this, {
            value: observable,
            increment: action
        })
    }

    increment() {
        // Intermediate states will not become visible to observers.
        this.value++
        this.value++
    }
}
```

<!--@action-->

```javascript
import { observable, action } from "mobx"

class Doubler {
    @observable accessor value = 0

    @action
    increment() {
        // Intermediate states will not become visible to observers.
        this.value++
        this.value++
    }
}
```

<!--makeAutoObservable-->

```javascript
import { makeAutoObservable } from "mobx"

class Doubler {
    value = 0

    constructor() {
        makeAutoObservable(this)
    }

    increment() {
        this.value++
        this.value++
    }
}
```

<!--action.bound-->

```javascript
import { makeObservable, observable, action } from "mobx"

class Doubler {
    value = 0

    constructor() {
        makeObservable(this, {
            value: observable,
            increment: action.bound
        })
    }

    increment() {
        this.value++
        this.value++
    }
}

const doubler = new Doubler()

// Calling increment this way is safe as it is already bound.
setInterval(doubler.increment, 1000)
```

<!--action(fn)-->

```javascript
import { observable, action } from "mobx"

const state = observable({ value: 0 })

const increment = action(state => {
    state.value++
    state.value++
})

increment(state)
```

<!--runInAction(fn)-->

```javascript
import { observable, runInAction } from "mobx"

const state = observable({ value: 0 })

runInAction(() => {
    state.value++
    state.value++
})
```

<!--END_DOCUSAURUS_CODE_TABS-->

## Wrapping functions using `action`

To leverage the transactional nature of MobX as much as possible, actions should be passed as far outward as possible. It is good to mark a class method as an action if it modifies the state. It is even better to mark event handlers as actions, as it is the outer-most transaction that counts. A single unmarked event handler that calls two actions subsequently would still generate two transactions.

To help create action based event handlers, `action` is not only an annotation, but also a higher order function. It can be called with a function as an argument, and in that case it will return an `action` wrapped function with the same signature.

For example in React, an `onClick` handler can be wrapped as below.

```javascript
const ResetButton = ({ formState }) => (
    <button
        onClick={action(e => {
            formState.resetPendingUploads()
            formState.resetValues()
            e.preventDefault()
        })}
    >
        Reset form
    </button>
)
```

For debugging purposes, we recommend to either name the wrapped function, or pass a name as the first argument to `action`.

<details id="actions-are-untracked"><summary>**Note:** actions are untracked<a href="#actions-are-untracked" class="tip-anchor"></a></summary>

Another feature of actions is that they are [untracked](api.md#untracked). When an action is called from inside a side effect or a computed value (very rare!), observables read by the action won't be counted towards the dependencies of the derivation.

`makeAutoObservable`, `extendObservable` and `observable` use a special flavour of `action` called [`autoAction`](observable-state.md#autoAction),
that will determine at runtime if the function is a derivation or action.

</details>

## `action.bound`

Usage:

-   `action.bound` _(annotation)_

The `action.bound` annotation can be used to automatically bind a method to the correct instance, so that `this` is always correctly bound inside the function.

<details id="auto-bind"><summary>**Tip:** use `makeAutoObservable(o, {}, { autoBind: true })` to bind all actions and flows automatically<a href="#avoid-bound" class="tip-anchor"></a></summary>

```javascript
import { makeAutoObservable } from "mobx"

class Doubler {
    value = 0

    constructor() {
        makeAutoObservable(this, {}, { autoBind: true })
    }

    increment() {
        this.value++
        this.value++
    }

    *flow() {
        const response = yield fetch("http://example.com/value")
        this.value = yield response.json()
    }
}
```

</details>

## `runInAction`

Usage:

-   `runInAction(fn)`

Use this utility to create a temporary action that is immediately invoked. Can be useful in asynchronous processes.
Check out the [above code block](#examples) for an example.

## Actions and inheritance

Only actions defined **on prototype** can be **overridden** by subclass:

```javascript
class Parent {
    // on instance
    arrowAction = () => {}

    // on prototype
    action() {}
    boundAction() {}

    constructor() {
        makeObservable(this, {
            arrowAction: action,
            action: action,
            boundAction: action.bound,
        })
    }
}
class Child extends Parent {
    // THROWS: TypeError: Cannot redefine property: arrowAction
    arrowAction = () => {}

    // OK
    action() {}
    boundAction() {}

    constructor() {
        super()
        makeObservable(this, {
            arrowAction: override,
            action: override,
            boundAction: override,
        })
    }
}
```

To **bind** a single _action_ to `this`, `action.bound` can be used instead of _arrow functions_.<br>
See [**subclassing**](subclassing.md) for more information.

## Asynchronous actions

In essence, asynchronous processes don't need any special treatment in MobX, as all reactions will update automatically regardless of the moment in time they are caused.
And since observable objects are mutable, it is generally safe to keep references to them for the duration of an action.
However, every step (tick) that updates observables in an asynchronous process should be marked as `action`.
This can be achieved in multiple ways by leveraging the above APIs, as shown below.

For example, when handling promises, the handlers that update state should be actions or should be wrapped using `action`, as shown below.

<!--DOCUSAURUS_CODE_TABS-->
<!--Wrap handlers in `action`-->

Promise resolution handlers are handled in-line, but run after the original action finished, so they need to be wrapped by `action`:

```javascript
import { action, makeAutoObservable } from "mobx"

class Store {
    githubProjects = []
    state = "pending" // "pending", "done" or "error"

    constructor() {
        makeAutoObservable(this)
    }

    fetchProjects() {
        this.githubProjects = []
        this.state = "pending"
        fetchGithubProjectsSomehow().then(
            action("fetchSuccess", projects => {
                const filteredProjects = somePreprocessing(projects)
                this.githubProjects = filteredProjects
                this.state = "done"
            }),
            action("fetchError", error => {
                this.state = "error"
            })
        )
    }
}
```

<!--Handle updates in separate actions-->

If the promise handlers are class fields, they will automatically be wrapped in `action` by `makeAutoObservable`:

```javascript
import { makeAutoObservable } from "mobx"

class Store {
    githubProjects = []
    state = "pending" // "pending", "done" or "error"

    constructor() {
        makeAutoObservable(this)
    }

    fetchProjects() {
        this.githubProjects = []
        this.state = "pending"
        fetchGithubProjectsSomehow().then(this.projectsFetchSuccess, this.projectsFetchFailure)
    }

    projectsFetchSuccess = projects => {
        const filteredProjects = somePreprocessing(projects)
        this.githubProjects = filteredProjects
        this.state = "done"
    }

    projectsFetchFailure = error => {
        this.state = "error"
    }
}
```

<!--async/await + runInAction-->

Any steps after `await` aren't in the same tick, so they require action wrapping.
Here, we can leverage `runInAction`:

```javascript
import { runInAction, makeAutoObservable } from "mobx"

class Store {
    githubProjects = []
    state = "pending" // "pending", "done" or "error"

    constructor() {
        makeAutoObservable(this)
    }

    async fetchProjects() {
        this.githubProjects = []
        this.state = "pending"
        try {
            const projects = await fetchGithubProjectsSomehow()
            const filteredProjects = somePreprocessing(projects)
            runInAction(() => {
                this.githubProjects = filteredProjects
                this.state = "done"
            })
        } catch (e) {
            runInAction(() => {
                this.state = "error"
            })
        }
    }
}
```

<!--`flow` + generator function -->

```javascript
import { flow, makeAutoObservable, flowResult } from "mobx"

class Store {
    githubProjects = []
    state = "pending"

    constructor() {
        makeAutoObservable(this, {
            fetchProjects: flow
        })
    }

    // Note the star, this a generator function!
    *fetchProjects() {
        this.githubProjects = []
        this.state = "pending"
        try {
            // Yield instead of await.
            const projects = yield fetchGithubProjectsSomehow()
            const filteredProjects = somePreprocessing(projects)
            this.state = "done"
            this.githubProjects = filteredProjects
            return projects
        } catch (error) {
            this.state = "error"
        }
    }
}

const store = new Store()
const projects = await flowResult(store.fetchProjects())
```

<!--END_DOCUSAURUS_CODE_TABS-->

## Using flow instead of async / await {🚀}

Usage:

-   `flow` _(annotation)_
-   `flow(function* (args) { })`
-   `@flow` _(method decorator)_

The `flow` wrapper is an optional alternative to `async` / `await` that makes it easier to
work with MobX actions.
`flow` takes a [generator function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator) as its only input.
Inside the generator, you can chain promises by yielding them (instead of `await somePromise` you write `yield somePromise`).
The flow mechanism will then make sure the generator either continues or throws when a yielded promise resolves.

So `flow` is an alternative to `async` / `await` that doesn't need any further `action` wrapping. It can be applied as follows:

1. Wrap `flow` around your asynchronous function.
2. Instead of `async` use `function *`.
3. Instead of `await` use `yield`.

The [`flow` + generator function](#asynchronous-actions) example above shows what this looks like in practice.

Note that the `flowResult` function is only needed when using TypeScript.
Since decorating a method with `flow`, it will wrap the returned generator in a promise.
However, TypeScript isn't aware of that transformation, so `flowResult` will make sure that TypeScript is aware of that type change.

`makeAutoObservable` and friends will automatically infer generators to be `flow`s. `flow` annotated members will be non-enumerable.

<details id="flow-wrap"><summary>{🚀} **Note:** using flow on object fields<a href="#flow-wrap" class="tip-anchor"></a></summary>
`flow`, like `action`, can be used to wrap functions directly. The above example could also have been written as follows:

```typescript
import { flow, makeObservable, observable } from "mobx"

class Store {
    githubProjects = []
    state = "pending"

    constructor() {
        makeObservable(this, {
            githubProjects: observable,
            state: observable,
        })
    }

    fetchProjects = flow(function* (this: Store) {
        this.githubProjects = []
        this.state = "pending"
        try {
            // yield instead of await.
            const projects = yield fetchGithubProjectsSomehow()
            const filteredProjects = somePreprocessing(projects)
            this.state = "done"
            this.githubProjects = filteredProjects
        } catch (error) {
            this.state = "error"
        }
    })
}

const store = new Store()
const projects = await store.fetchProjects()
```

The upside is that we don't need `flowResult` anymore, the downside is that `this` needs to be typed to make sure its type is inferred correctly.

</details>

## `flow.bound`

Usage:

-   `flow.bound` _(annotation)_

The `flow.bound` annotation can be used to automatically bind a method to the correct instance, so that `this` is always correctly bound inside the function.
Similarly to actions, flows can be bound by default using [`autoBind` option](#auto-bind).

## Cancelling flows {🚀}

Another neat benefit of flows is that they are cancellable.
The return value of `flow` is a promise that resolves with the value that is returned from the generator function in the end.
The returned promise has an additional `cancel()` method that will interrupt the running generator and cancel it.
Any `try` / `finally` clauses will still be run.

## Disabling mandatory actions {🚀}

By default, MobX 6 and later require that you use actions to make changes to the state.
However, you can configure MobX to disable this behavior. Check out the [`enforceActions`](configuration.md#enforceactions) section.
For example, this can be quite useful in unit test setup, where the warnings don't always have much value.


================================================
FILE: docs/analyzing-reactivity.md
================================================
---
title: Analyzing reactivity
sidebar_label: Analyzing reactivity {🚀}
hide_title: true
---

<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CEBD4KQ7&placement=mobxjsorg" id="_carbonads_js"></script>

# Analyzing reactivity {🚀}

# Using `trace` for debugging

Trace is a small utility that helps you find out why your computed values, reactions or components are re-evaluating.

It can be used by simply importing `import { trace } from "mobx"`, and then putting it inside a reaction or computed value.
It will print why it is re-evaluating the current derivation.

Optionally it is possible to automatically enter the debugger by passing `true` as the last argument.
This way the exact mutation that causes the reaction to re-run will still be in stack, usually ~8 stack frames up. See the image below.

In debugger mode, the debug information will also reveal the full derivation tree that is affecting the current computation / reaction.

![trace](assets/trace-tips2.png)

![trace](assets/trace.gif)

## Live examples

Simple [CodeSandbox `trace` example](https://codesandbox.io/s/trace-dnhbz?file=/src/index.js:309-338).

[Here's a deployed example](https://csb-nr58ylyn4m-hontnuliaa.now.sh/) for exploring the stack.
Make sure to play with the chrome debugger's blackbox feature!

## Usage examples

There are different ways of calling `trace()`, some examples:

```javascript
import { observer } from "mobx-react"
import { trace } from "mobx"

const MyComponent = observer(() => {
    trace(true) // Enter the debugger whenever an observable value causes this component to re-run.
    return <div>{this.props.user.name}</name>
})
```

Enable trace by using the `reaction` argument of a reaction / autorun:

```javascript
mobx.autorun("logger", reaction => {
    reaction.trace()
    console.log(user.fullname)
})
```

Pass in the property name of a computed property:

```javascript
trace(user, "fullname")
```

# Introspection APIs

The following APIs might come in handy if you want to inspect the internal state of MobX while debugging, or want to build cool tools on top of MobX.
Also relevant are the various [`isObservable*` APIs](api.md#isobservable).

### `getDebugName`

Usage:

-   `getDebugName(thing, property?)`

Returns a (generated) friendly debug name of an observable object, property, reaction etc. Used for example by the [MobX developer tools](https://github.com/mobxjs/mobx-devtools).

### `getDependencyTree`

Usage:

-   `getDependencyTree(thing, property?)`.

Returns a tree structure with all observables the given reaction / computation currently depends upon.

### `getObserverTree`

Usage:

-   `getObserverTree(thing, property?)`.

Returns a tree structure with all reactions / computations that are observing the given observable.

### `getAtom`

Usage:

-   `getAtom(thing, property?)`.

Returns the backing _Atom_ of a given observable object, property, reaction etc.

# Spy

Usage:

-   `spy(listener)`

Registers a global spy listener that listens to all events that happen in MobX.
It is similar to attaching an `observe` listener to _all_ observables at once, but also notifies about running (trans/re)actions and computations.
Used for example by the [MobX developer tools](https://github.com/mobxjs/mobx-devtools).

Example usage of spying all actions:

```javascript
spy(event => {
    if (event.type === "action") {
        console.log(`${event.name} with args: ${event.arguments}`)
    }
})
```

Spy listeners always receive one object, which usually has at least a `type` field. The following events are emitted by default by spy:

| Type                            | observableKind | Other fields                                                   | Nested |
| ------------------------------- | -------------- | -------------------------------------------------------------- | ------ |
| action                          |                | name, object (scope), arguments[]                              | yes    |
| scheduled-reaction              |                | name                                                           | no     |
| reaction                        |                | name                                                           | yes    |
| error                           |                | name, message, error                                           | no     |
| add,update,remove,delete,splice |                | Check out [Intercept & observe {🚀}](intercept-and-observe.md) | yes    |
| report-end                      |                | spyReportEnd=true, time? (total execution time in ms)          | no     |

The `report-end` events are part of an earlier fired event that had `spyReportStart: true`.
This event indicates the end of an event and this way groups of events with sub-events are created.
This event might report the total execution time as well.

The spy events for observable values are identical to the events passed to `observe`.
In production builds, the `spy` API is a no-op as it will be minimized away.

Check out the [Intercept & observe {🚀}](intercept-and-observe.md#event-overview) section for an extensive overview.


================================================
FILE: docs/api.md
================================================
---
title: MobX API Reference
sidebar_label: API
hide_title: true
---

<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CEBD4KQ7&placement=mobxjsorg" id="_carbonads_js"></script>

# MobX API Reference

Functions marked with {🚀} are considered advanced, and should typically not be needed.
Consider downloading our handy cheat sheet that explains all important APIs on a single page:

<div class="cheat"><a href="https://gum.co/fSocU"><button title="Download the MobX 6 cheat sheet and sponsor the project">Get the MobX 6 cheat sheet (£5)</button></a></div>

## Core APIs

_These are the most important MobX APIs._

> Understanding [`observable`](#observable), [`computed`](#computed), [`reaction`](#reaction) and [`action`](#action) is enough to master and use MobX in your applications!

## Creating observables

_Making things observable._

### `makeObservable`

Usage: `makeObservable(target, annotations?, options?)`
<small>(<b>[further information](observable-state.md#makeobservable)</b>)</small>

Properties, entire objects, arrays, Maps and Sets can all be made observable.

### `makeAutoObservable`

Usage: `makeAutoObservable(target, overrides?, options?)`
<small>(<b>[further information](observable-state.md#makeautoobservable)</b>)</small>

Automatically make properties, objects, arrays, Maps and Sets observable.

### `extendObservable`

{🚀} Usage: `extendObservable(target, properties, overrides?, options?)`

Can be used to introduce new properties on the `target` object and make them observable immediately. Basically a shorthand for `Object.assign(target, properties); makeAutoObservable(target, overrides, options);`. However, existing properties on `target` won't be touched.

Old-fashioned constructor functions can nicely leverage `extendObservable`:

```javascript
function Person(firstName, lastName) {
    extendObservable(this, { firstName, lastName })
}

const person = new Person("Michel", "Weststrate")
```

It is possible to use `extendObservable` to add observable fields to an existing object after instantiation, but be careful that adding an observable property this way is in itself not a fact that can be observed.

### `observable`

Usage: `observable(source, overrides?, options?)`, `observable` _(annotation)_ or `@observable accessor` _(field decorator)_.
<small>(<b>[further information](observable-state.md#observable)</b>)</small>

Clones an object and makes it observable. Source can be a plain object, array, Map or Set. By default, `observable` is applied recursively. If one of the encountered values is an object or array, that value will be passed through `observable` as well.

### `observable.object`

{🚀} Usage: `observable.object(source, overrides?, options?)`
<small>(<b>[further information](observable-state.md#observable)</b>)</small>

Alias for `observable(source, overrides?, options?)`. Creates a clone of the provided object and makes all of its properties observable.

### `observable.array`

{🚀} Usage: `observable.array(initialValues?, options?)`

Creates a new observable array based on the provided `initialValues`.
To convert observable arrays back to plain arrays, use the `.slice()` method, or check out [toJS](#tojs) to convert them recursively.
Besides all the language built-in array functions, the following goodies are available on observable arrays as well:

-   `clear()` removes all current entries from the array.
-   `replace(newItems)` replaces all existing entries in the array with new ones.
-   `remove(value)` removes a single item by value from the array and returns `true` if the item was found and removed.

If the values in the array should not be turned into observables automatically, use the `{ deep: false }` option to make the array shallowly observable.

### `observable.map`

{🚀} Usage: `observable.map(initialMap?, options?)`

Creates a new observable [ES6 Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) based on the provided `initialMap`.
They are very useful if you don't want to react just to the change of a specific entry, but also to their addition and removal.
Creating observable Maps is the recommended approach for creating dynamically keyed collections if you don't have [enabled Proxies](configuration.md#proxy-support).

Besides all the language built-in Map functions, the following goodies are available on observable Maps as well:

-   `toJSON()` returns a shallow plain object representation of this Map (use [toJS](#tojs) for a deep copy).
-   `merge(values)` copies all entries from the provided `values` (plain object, array of entries or a string-keyed ES6 Map) into this Map.
-   `replace(values)` replaces the entire contents of this Map with the provided `values`.

If the values in the Map should not be turned into observables automatically, use the `{ deep: false }` option to make the Map shallowly observable.

### `observable.set`

{🚀} Usage: `observable.set(initialSet?, options?)`

Creates a new observable [ES6 Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) based on the provided `initialSet`. Use it whenever you want to create a dynamic set where the addition and removal of values needs to be observed, but where values can appear only once in the entire collection.

If the values in the Set should not be turned into observables automatically, use the `{ deep: false }` option to make the Set shallowly observable.

Unlike Map keys, Set values are [not tracked individually](https://github.com/mobxjs/mobx/issues/2336#issuecomment-616128089).

### `observable.ref`

Usage: `observable.ref` _(annotation)_
<small>(<b>[further information](observable-state.md#available-annotations)</b>)</small>

Like the `observable` annotation, but only reassignments will be tracked. The assigned values themselves won't be made observable automatically. For example, use this if you intend to store immutable data in an observable field.

### `observable.shallow`

Usage: `observable.shallow` _(annotation)_
<small>(<b>[further information](observable-state.md#available-annotations)</b>)</small>

Like the `observable.ref` annotation, but for collections. Any collection assigned will be made observable, but the contents of the collection itself won't become observable.

### `observable.struct`

{🚀} Usage: `observable.struct` _(annotation)_
<small>(<b>[further information](observable-state.md#available-annotations)</b>)</small>

Like the `observable` annotation, except that any assigned value that is structurally equal to the current value will be ignored.

### `observable.deep`

{🚀} Usage: `observable.deep` _(annotation)_
<small>(<b>[further information](observable-state.md#available-annotations)</b>)</small>

Alias for the [`observable`](#observable) annotation.

### `observable.box`

{🚀} Usage: `observable.box(value, options?)`

All primitive values in JavaScript are immutable and hence per definition not observable.
Usually that is fine, as MobX can just make the _property_ that contains the value observable.
In rare cases, it can be convenient to have an observable _primitive_ that is not owned by an object.
For such cases, it is possible to create an observable _box_ that manages such a _primitive_.

`observable.box(value)` accepts any value and stores it inside a box. The current value can be accessed through `.get()` and updated using `.set(newValue)`.

```javascript
import { observable, autorun } from "mobx"

const cityName = observable.box("Vienna")

autorun(() => {
    console.log(cityName.get())
})
// Prints: 'Vienna'

cityName.set("Amsterdam")
// Prints: 'Amsterdam'
```

If the values in the box should not be turned into observables automatically, use the `{ deep: false }` option to make the box shallowly observable.

---

## Actions

_An action is any piece of code that modifies the state._

### `action`

Usage: `action(fn)`, `action` _(annotation)_ or `@action` _(method / field decorator)_
<small>(<b>[further information](actions.md)</b>)</small>

Use on functions that intend to modify the state.

### `runInAction`

{🚀} Usage: `runInAction(fn)`
<small>(<b>[further information](actions.md#runinaction)</b>)</small>

Create a one-time action that is immediately invoked.

### `flow`

Usage: `flow(fn)`, `flow` _(annotation)_ or `@flow` _(generator method decorator)_
<small>(<b>[further information](actions.md#using-flow-instead-of-async--await-)</b>)</small>

MobX friendly replacement for `async` / `await` that supports cancellation.

### `flowResult`

Usage: `flowResult(flowFunctionResult)`
<small>(<b>[further information](actions.md#using-flow-instead-of-async--await-)</b>)</small>

For TypeScript users only. Utility that casts the output of the generator to a promise.
This is just a type-wise correction for the promise wrapping done by `flow`. At runtime it directly returns the inputted value.

---

## Computeds

_Computed values can be used to derive information from other observables._

### `computed`

Usage: `computed(fn, options?)`, `computed(options?)` _(annotation)_ or `@computed` _(getter decorator)_
<small>(<b>[further information](computeds.md)</b>)</small>

Creates an observable value that is derived from other observables, but won't be recomputed unless one of the underlying observables changes.

---

## React integration

_From the `mobx-react` / `mobx-react-lite` packages._

### `observer`

Usage: `observer(component)`
<small>(<b>[further information](react-integration.md)</b>)</small>

A higher order component you can use to make a functional or class based React component re-render when observables change.

### `Observer`

Usage: `<Observer>{() => rendering}</Observer>`
<small>(<b>[further information](react-integration.md#callback-components-might-require-observer)</b>)</small>

Renders the given render function, and automatically re-renders it once one of the observables used in the render function changes.

### `useLocalObservable`

Usage: `useLocalObservable(() => source, annotations?)`
<small>(<b>[further information](react-integration.md#using-local-observable-state-in-observer-components)</b>)</small>

Creates a new observable object using `makeObservable`, and keeps it around in the component for the entire life-cycle of the component.

---

## Reactions

_The goal of reactions is to model side effects that happen automatically._

### `autorun`

Usage: `autorun(() => effect, options?)`
<small>(<b>[further information](reactions.md#autorun)</b>)</small>

Reruns a function every time anything it observes changes.

### `reaction`

Usage: `reaction(() => data, data => effect, options?)`
<small>(<b>[further information](reactions.md#reaction)</b>)</small>

Reruns a side effect when any selected data changes.

### `when`

Usage: `when(() => condition, () => effect, options?)` or `await when(() => condition, options?)`
<small>(<b>[further information](reactions.md#when)</b>)</small>

Executes a side effect once when a observable condition becomes true.

---

## Utilities

_Utilities that might make working with observable objects or computed values more convenient. Less trivial utilities can also be found in the [mobx-utils](https://github.com/mobxjs/mobx-utils) package._

### `onReactionError`

{🚀} Usage: `onReactionError(handler: (error: any, derivation) => void)`

Attaches a global error listener, which is invoked for every error that is thrown from a _reaction_. This can be used for monitoring or test purposes.

### `intercept`

{🚀} Usage: `intercept(propertyName|array|object|Set|Map, listener)`
<small>(<b>[further information](intercept-and-observe.md#intercept)</b>)</small>

Intercepts changes before they are applied to an observable API. Returns a disposer function that stops the interception.

### `observe`

{🚀} Usage: `observe(propertyName|array|object|Set|Map, listener)`
<small>(<b>[further information](intercept-and-observe.md#observe)</b>)</small>

Low-level API that can be used to observe a single observable value. Returns a disposer function that stops the interception.

### `onBecomeObserved`

{🚀} Usage: `onBecomeObserved(observable, property?, listener: () => void)`
<small>(<b>[further information](lazy-observables.md)</b>)</small>

Hook for when something becomes observed.

### `onBecomeUnobserved`

{🚀} Usage: `onBecomeUnobserved(observable, property?, listener: () => void)`
<small>(<b>[further information](lazy-observables.md)</b>)</small>

Hook for when something stops being observed.

### `toJS`

Usage: `toJS(value)`
<small>(<b>[further information](observable-state.md#converting-observables-back-to-vanilla-javascript-collections)</b>)</small>

Recursively converts an observable object to a JavaScript _object_. Supports observable arrays, objects, Maps and primitives.

It does NOT recurse into non-observables, these are left as they are, even if they contain observables.
Computed and other non-enumerable properties are completely ignored and won't be returned.

For more complex (de)serialization scenarios, it is recommended to give classes a (computed) `toJSON` method, or use a serialization library like [serializr](https://github.com/mobxjs/serializr).

```javascript
const obj = mobx.observable({
    x: 1
})

const clone = mobx.toJS(obj)

console.log(mobx.isObservableObject(obj)) // true
console.log(mobx.isObservableObject(clone)) // false
```

---

## Configuration

_Fine-tuning your MobX instance._

### `configure`

Usage: sets global behavior settings on the active MobX instance.
<small>(<b>[further information](configuration.md)</b>)</small>
Use it to change how MobX behaves as a whole.

---

## Collection utilities {🚀}

_They enable manipulating observable arrays, objects and Maps with the same generic API. This can be useful in [environments without `Proxy` support](configuration.md#limitations-without-proxy-support), but is otherwise typically not needed._

### `values`

{🚀} Usage: `values(array|object|Set|Map)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Returns all values in the collection as an array.

### `keys`

{🚀} Usage: `keys(array|object|Set|Map)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Returns all keys / indices in the collection as an array.

### `entries`

{🚀} Usage: `entries(array|object|Set|Map)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Returns a `[key, value]` pair of every entry in the collection as an array.

### `set`

{🚀} Usage: `set(array|object|Map, key, value)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Updates the collection.

### `remove`

{🚀} Usage: `remove(array|object|Map, key)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Removes item from the collection.

### `has`

{🚀} Usage: `has(array|object|Map, key)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Checks for membership in the collection.

### `get`

{🚀} Usage: `get(array|object|Map, key)`
<small>(<b>[further information](collection-utilities.md)</b>)</small>

Gets value from the collection with key.

---

## Introspection utilities {🚀}

_Utilities that might come in handy if you want to inspect the internal state of MobX, or want to build cool tools on top of MobX._

### `isObservable`

{🚀} Usage: `isObservable(array|object|Set|Map)`

Is the object / collection made observable by MobX?

### `isObservableProp`

{🚀} Usage: `isObservableProp(object, propertyName)`

Is the property observable?

### `isObservableArray`

{🚀} Usage: `isObservableArray(array)`

Is the value an observable array?

### `isObservableObject`

{🚀} Usage: `isObservableObject(object)`

Is the value an observable object?

### `isObservableSet`

{🚀} Usage: `isObservableSet(set)`

Is the value an observable Set?

### `isObservableMap`

{🚀} Usage: `isObservableMap(map)`

Is the value an observable Map?

### `isBoxedObservable`

{🚀} Usage: `isBoxedObservable(value)`

Is the value an observable box, created using `observable.box`?

### `isAction`

{🚀} Usage: `isAction(func)`

Is the function marked as an `action`?

### `isComputed`

{🚀} Usage: `isComputed(boxedComputed)`

Is this a boxed computed value, created using `computed(() => expr)`?

### `isComputedProp`

{🚀} Usage: `isComputedProp(object, propertyName)`

Is this a computed property?

### `trace`

{🚀} Usage: `trace()`, `trace(true)` _(enter debugger)_ or `trace(object, propertyName, enterDebugger?)`
<small>(<b>[further information](analyzing-reactivity.md)</b>)</small>

Should be used inside an observer, reaction or computed value. Logs when the value is invalidated, or sets the debugger breakpoint if called with _true_.

### `spy`

{🚀} Usage: `spy(eventListener)`
<small>(<b>[further information](analyzing-reactivity.md#spy)</b>)</small>

Registers a global spy listener that listens to all events that happen in MobX.

### `getDebugName`

{🚀} Usage: `getDebugName(reaction|array|Set|Map)` or `getDebugName(object|Map, propertyName)`
<small>(<b>[further information](analyzing-reactivity.md#getdebugname)</b>)</small>

Returns the (generated) friendly debug name for an observable or reaction.

### `getDependencyTree`

{🚀} Usage: `getDependencyTree(object, computedPropertyName)`
<small>(<b>[further information](analyzing-reactivity.md#getdependencytree)</b>)</small>

Returns a tree structure with all observables the given reaction / computation currently depends upon.

### `getObserverTree`

{🚀} Usage: `getObserverTree(array|Set|Map)` or `getObserverTree(object|Map, propertyName)`
<small>(<b>[further information](analyzing-reactivity.md#getobservertree)</b>)</small>

Returns a tree structure with all reactions / computations that are observing the given observable.

---

## Extending MobX {🚀}

_In the rare case you want to extend MobX itself._

### `createAtom`

{🚀} Usage: `createAtom(name, onBecomeObserved?, onBecomeUnobserved?)`
<small>(<b>[further information](custom-observables.md)</b>)</small>

Creates your own observable data structure and hooks it up to MobX. Used internally by all observable data types. Atom exposes two _report_ methods to notify MobX with when:

-   `reportObserved()`: the atom has become observed, and should be considered part of the dependency tree of the current derivation.
-   `reportChanged()`: the atom has changed, and all derivations depending on it should be invalidated.

### `getAtom`

{🚀} Usage: `getAtom(thing, property?)`
<small>(<b>[further information](analyzing-reactivity.md#getatom)</b>)</small>

Returns the backing atom.

### `transaction`

{🚀} Usage: `transaction(worker: () => any)`

_Transaction is a low-level API. It is recommended to use [`action`](#action) or [`runInAction`](#runinaction) instead._

Used to batch a bunch of updates without running any reactions until the end of the transaction. Like [`untracked`](#untracked), it is automatically applied by `action`, so usually it makes more sense to use actions than to use `transaction` directly.

It takes a single, parameterless `worker` function as an argument, and returns any value that was returned by it.
Note that `transaction` runs completely synchronously and can be nested. Only after completing the outermost `transaction`, the pending reactions will be run.

```javascript
import { observable, transaction, autorun } from "mobx"

const numbers = observable([])

autorun(() => console.log(numbers.length, "numbers!"))
// Prints: '0 numbers!'

transaction(() => {
    transaction(() => {
        numbers.push(1)
        numbers.push(2)
    })
    numbers.push(3)
})
// Prints: '3 numbers!'
```

### `untracked`

{🚀} Usage: `untracked(worker: () => any)`

_Untracked is a low-level API. It is recommended to use [`reaction`](#reaction), [`action`](#action) or [`runInAction`](#runinaction) instead._

Runs a piece of code without establishing observers. Like `transaction`, `untracked` is automatically applied by `action`, so usually it makes more sense to use actions than to use `untracked` directly.

```javascript
const person = observable({
    firstName: "Michel",
    lastName: "Weststrate"
})

autorun(() => {
    console.log(
        person.lastName,
        ",",
        // This untracked block will return the person's
        // firstName without establishing a dependency.
        untracked(() => person.firstName)
    )
})
// Prints: 'Weststrate, Michel'

person.firstName = "G.K."
// Doesn't print!

person.lastName = "Chesterton"
// Prints: 'Chesterton, G.K.'
```


================================================
FILE: docs/assets/action-state-view.excalidraw
================================================
{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [
    {
      "id": "pIZO1JmQiFI2poIar1JJR",
      "type": "rectangle",
      "x": 1265.39453125,
      "y": 506.8125,
      "width": 169.73437500000006,
      "height": 42.90625,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fab005",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 217429890,
      "version": 373,
      "versionNonce": 1117308162,
      "isDeleted": false
    },
    {
      "id": "pD5v3-2w2hmmHs3ijydzw",
      "type": "text",
      "x": 1288.564453125,
      "y": 513.876953125,
      "width": 126,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 258359006,
      "version": 335,
      "versionNonce": 1677952030,
      "isDeleted": false,
      "text": "reduceEnergy",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 18
    },
    {
      "id": "u7JpBImi1GLSlmI3XfhSo",
      "type": "rectangle",
      "x": 1016.30859375,
      "y": 490.58984375,
      "width": 96.56250000000003,
      "height": 51.124999999999986,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#228be6",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 1302734018,
      "version": 259,
      "versionNonce": 1929172162,
      "isDeleted": false
    },
    {
      "id": "BWk9D8NLVXhfJLVv98F7C",
      "type": "text",
      "x": 1026.07421875,
      "y": 500.50390625,
      "width": 76,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 1412671326,
      "version": 121,
      "versionNonce": 1736003678,
      "isDeleted": false,
      "text": "isHungry",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "top",
      "baseline": 18
    },
    {
      "id": "4-ymabCsXtPMIqHbdW8oE",
      "type": "rectangle",
      "x": 531.86328125,
      "y": 477.41015625,
      "width": 320.26171875000006,
      "height": 119.37500000000001,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fa5252",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 500763422,
      "version": 549,
      "versionNonce": 1668755806,
      "isDeleted": false
    },
    {
      "id": "LKVSistQFQl5dwvDIha03",
      "type": "text",
      "x": 548.16796875,
      "y": 485.490234375,
      "width": 74,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 275201474,
      "version": 248,
      "versionNonce": 399874946,
      "isDeleted": false,
      "text": "autorun",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 18
    },
    {
      "id": "AmfUhwRl3kmfUpDL-cz69",
      "type": "arrow",
      "x": 893.578125,
      "y": 542.67578125,
      "width": 103.203125,
      "height": 26.18359375,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fa5252",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 14401054,
      "version": 98,
      "versionNonce": 1922705986,
      "isDeleted": false,
      "points": [
        [
          0,
          0
        ],
        [
          103.203125,
          -26.18359375
        ]
      ],
      "lastCommittedPoint": null
    },
    {
      "id": "5Ri4oSpXCOayASosdJczV",
      "type": "rectangle",
      "x": 643.65625,
      "y": 500.65234375,
      "width": 181.6875,
      "height": 77.12109375,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 958282526,
      "version": 72,
      "versionNonce": 1344405954,
      "isDeleted": false
    },
    {
      "id": "4VRPEmGVy-I7ISGPIC3lG",
      "type": "text",
      "x": 697,
      "y": 526.712890625,
      "width": 75,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 132157534,
      "version": 17,
      "versionNonce": 1011446622,
      "isDeleted": false,
      "text": "function",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 18
    },
    {
      "id": "FQzAKSjfUWyDZAjvXVOY5",
      "type": "text",
      "x": 537.37890625,
      "y": 429.46484375,
      "width": 217,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 1833437214,
      "version": 104,
      "versionNonce": 499153282,
      "isDeleted": false,
      "text": "1. autorun runs initially",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 18
    },
    {
      "id": "DaIFjPSHk2uPQUxrBhM14",
      "type": "text",
      "x": 897.24609375,
      "y": 434.5,
      "width": 197,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 1406985630,
      "version": 127,
      "versionNonce": 2009028510,
      "isDeleted": false,
      "text": "2. read & subscribe",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 18
    },
    {
      "id": "gdEVREQf-CI_WiOGb0k0p",
      "type": "arrow",
      "x": 1248.12109375,
      "y": 535.2734375,
      "width": 117.19921875,
      "height": 10.93359375,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 419114910,
      "version": 39,
      "versionNonce": 1265546206,
      "isDeleted": false,
      "points": [
        [
          0,
          0
        ],
        [
          -117.19921875,
          -10.93359375
        ]
      ],
      "lastCommittedPoint": null
    },
    {
      "id": "2L7qtsz980qi281apFm68",
      "type": "text",
      "x": 1170.65625,
      "y": 565.06640625,
      "width": 161,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 942371998,
      "version": 36,
      "versionNonce": 1861058818,
      "isDeleted": false,
      "text": "3. update state",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 18
    },
    {
      "id": "W81Z7ZPQ_NNZj_IpAcRgP",
      "type": "arrow",
      "x": 1055.921875,
      "y": 563.03125,
      "width": 283.78515625,
      "height": 130.73046875,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 93774430,
      "version": 90,
      "versionNonce": 1080000386,
      "isDeleted": false,
      "points": [
        [
          0,
          0
        ],
        [
          -169.859375,
          130.73046875
        ],
        [
          -283.78515625,
          56.4453125
        ]
      ],
      "lastCommittedPoint": [
        -283.78515625,
        56.4453125
      ]
    },
    {
      "id": "7PSGJMcV7z4iygXHJNS_o",
      "type": "text",
      "x": 966.2265625,
      "y": 676.7265625,
      "width": 276,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fff",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 775974494,
      "version": 50,
      "versionNonce": 1448293598,
      "isDeleted": false,
      "text": "4. notify and re-run autorun",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 18
    }
  ],
  "appState": {
    "viewBackgroundColor": "#ffffff",
    "gridSize": null
  }
}

================================================
FILE: docs/assets/flow.excalidraw..excalidraw..excalidraw
================================================
{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [
    {
      "id": "umJvYNbrYyosAii0TCe8X",
      "type": "ellipse",
      "x": 600.93359375,
      "y": 295.0234375,
      "width": 166,
      "height": 98.13671875,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fd7e14",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 798279679,
      "version": 61,
      "versionNonce": 534261841,
      "isDeleted": false,
      "boundElementIds": [
        "SQTF1dyrT_6IGmfEPfDFk",
        "Qs4t0BM0S_4Pke8rNKbmD",
        "c9iGYLrlWNl56Bq2qFVR3"
      ]
    },
    {
      "id": "tMxgXvq5-KCTnP_iTfUt8",
      "type": "text",
      "x": 648.93359375,
      "y": 331.826171875,
      "width": 70,
      "height": 25,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1329095185,
      "version": 11,
      "versionNonce": 637794161,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "Actions",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 18
    },
    {
      "id": "fESH7TjYaPiRAXCLgu6gj",
      "type": "ellipse",
      "x": 889.2734375,
      "y": 293.07421875,
      "width": 153.390625,
      "height": 97.08984375,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#228be6",
      "fillStyle": "cross-hatch",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 754120735,
      "version": 162,
      "versionNonce": 277796639,
      "isDeleted": false,
      "boundElementIds": [
        "SQTF1dyrT_6IGmfEPfDFk",
        "Gfe2kVUk-oe4nZFYZ4TS2"
      ]
    },
    {
      "id": "YNybqj5LHUYEaaw-npqM0",
      "type": "text",
      "x": 913.22265625,
      "y": 316.373046875,
      "width": 105,
      "height": 50,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1139926705,
      "version": 92,
      "versionNonce": 806532223,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "Observable\nState",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 43
    },
    {
      "id": "Rp_m5EtBqLK880zk0HPes",
      "type": "ellipse",
      "x": 1168.73046875,
      "y": 287.671875,
      "width": 152.62109375,
      "height": 101.0078125,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#82c91e",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 979115551,
      "version": 137,
      "versionNonce": 842295903,
      "isDeleted": false,
      "boundElementIds": [
        "Gfe2kVUk-oe4nZFYZ4TS2",
        "muBFJlzUT62Z5u6vtgoPo"
      ]
    },
    {
      "id": "bUQmcBczRpetKGA2QAQOC",
      "type": "text",
      "x": 1198.294921875,
      "y": 313.17578125,
      "width": 93,
      "height": 50,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 21397215,
      "version": 89,
      "versionNonce": 275028479,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "Computed\nValues",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 43
    },
    {
      "id": "2iAmN0ThUq3khqXmobwXR",
      "type": "ellipse",
      "x": 1440.24609375,
      "y": 280.24609375,
      "width": 180,
      "height": 97.82421875,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "#fa5252",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 155797873,
      "version": 93,
      "versionNonce": 1218509617,
      "isDeleted": false,
      "boundElementIds": [
        "muBFJlzUT62Z5u6vtgoPo",
        "YsOB3_rayI5zJZmc-0vka",
        "MwGF75DmHeJQFvsbtXTC3",
        "c9iGYLrlWNl56Bq2qFVR3"
      ]
    },
    {
      "id": "-ksRGDFon1_cAw4yzn-NY",
      "type": "text",
      "x": 1468.4375,
      "y": 303.76953125,
      "width": 122,
      "height": 50,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 919383807,
      "version": 107,
      "versionNonce": 1840129151,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "Side-effects\n(like render)",
      "fontSize": 20,
      "fontFamily": 1,
      "textAlign": "center",
      "verticalAlign": "middle",
      "baseline": 43
    },
    {
      "id": "SQTF1dyrT_6IGmfEPfDFk",
      "type": "arrow",
      "x": 778.8445740250362,
      "y": 346.239580272118,
      "width": 99.00070983588682,
      "height": 1.6378151789648427,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "round",
      "seed": 1143683505,
      "version": 44,
      "versionNonce": 965939217,
      "isDeleted": false,
      "boundElementIds": null,
      "points": [
        [
          0,
          0
        ],
        [
          99.00070983588682,
          -1.6378151789648427
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": {
        "elementId": "umJvYNbrYyosAii0TCe8X",
        "focus": 0.07806863034707597,
        "gap": 11.969792579631289
      },
      "endBinding": {
        "elementId": "fESH7TjYaPiRAXCLgu6gj",
        "focus": -0.031398466371432183,
        "gap": 11.536940281179355
      }
    },
    {
      "id": "Gfe2kVUk-oe4nZFYZ4TS2",
      "type": "arrow",
      "x": 1053.9983652852434,
      "y": 343.1772085606117,
      "width": 106.42230116522956,
      "height": 0.10172927196111914,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "round",
      "seed": 1805338897,
      "version": 44,
      "versionNonce": 468837745,
      "isDeleted": false,
      "boundElementIds": null,
      "points": [
        [
          0,
          0
        ],
        [
          106.42230116522956,
          -0.10172927196111914
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": {
        "elementId": "fESH7TjYaPiRAXCLgu6gj",
        "focus": 0.034035946947105086,
        "gap": 11.364088475962532
      },
      "endBinding": {
        "elementId": "Rp_m5EtBqLK880zk0HPes",
        "focus": -0.09541448620171078,
        "gap": 8.602060160628056
      }
    },
    {
      "id": "muBFJlzUT62Z5u6vtgoPo",
      "type": "arrow",
      "x": 1341.157078677608,
      "y": 339.7422181379586,
      "width": 88.60855868842668,
      "height": 2.6091895262144362,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "round",
      "seed": 1832057969,
      "version": 128,
      "versionNonce": 1342081055,
      "isDeleted": false,
      "boundElementIds": null,
      "points": [
        [
          0,
          0
        ],
        [
          88.60855868842668,
          -2.6091895262144362
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": {
        "elementId": "Rp_m5EtBqLK880zk0HPes",
        "gap": 19.82936306898931,
        "focus": 0.08945444862904846
      },
      "endBinding": {
        "elementId": "2iAmN0ThUq3khqXmobwXR",
        "gap": 11.37138636336131,
        "focus": -0.1024021768851719
      }
    },
    {
      "id": "Qs4t0BM0S_4Pke8rNKbmD",
      "type": "arrow",
      "x": 492.0234375,
      "y": 350.046875,
      "width": 95.43387310642322,
      "height": 0.9643864370914343,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "round",
      "seed": 234060401,
      "version": 68,
      "versionNonce": 297558161,
      "isDeleted": false,
      "boundElementIds": null,
      "points": [
        [
          0,
          0
        ],
        [
          95.43387310642322,
          -0.9643864370914343
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": {
        "elementId": "umJvYNbrYyosAii0TCe8X",
        "focus": -0.08182839036919108,
        "gap": 13.781886293370846
      }
    },
    {
      "id": "c9iGYLrlWNl56Bq2qFVR3",
      "type": "arrow",
      "x": 1521.4329053171455,
      "y": 397.76984274454924,
      "width": 847.5934093483568,
      "height": 71.62078225545076,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "round",
      "seed": 1408772703,
      "version": 339,
      "versionNonce": 455396689,
      "isDeleted": false,
      "boundElementIds": null,
      "points": [
        [
          0,
          0
        ],
        [
          -85.06181156714547,
          61.46453225545076
        ],
        [
          -770.2180615671455,
          71.62078225545076
        ],
        [
          -847.5934093483568,
          15.194066486107488
        ]
      ],
      "lastCommittedPoint": [
        -834.17578125,
        10.3515625
      ],
      "startBinding": {
        "elementId": "2iAmN0ThUq3khqXmobwXR",
        "gap": 19.92113118460233,
        "focus": -0.7649085384743577
      },
      "endBinding": {
        "elementId": "umJvYNbrYyosAii0TCe8X",
        "focus": 0.9783632894951878,
        "gap": 20.136000442647486
      }
    },
    {
      "id": "eGPmufgc-vKMKmqf5K70-",
      "type": "text",
      "x": 499.75,
      "y": 299.75,
      "width": 59,
      "height": 24,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1637190321,
      "version": 57,
      "versionNonce": 722379505,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "event",
      "fontSize": 20,
      "fontFamily": 3,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 19
    },
    {
      "id": "vynyr8w8fVE7OJXHAE365",
      "type": "text",
      "x": 780,
      "y": 300,
      "width": 70,
      "height": 24,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1893934897,
      "version": 361,
      "versionNonce": 1504841009,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "update",
      "fontSize": 20,
      "fontFamily": 3,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 19
    },
    {
      "id": "4svZvrPyD8SmDlCrAqiub",
      "type": "text",
      "x": 1060,
      "y": 300,
      "width": 70,
      "height": 24,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1281306641,
      "version": 14,
      "versionNonce": 881014001,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "notify",
      "fontSize": 20,
      "fontFamily": 3,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 19
    },
    {
      "id": "9SF49CHx9H587dg3XyxK3",
      "type": "text",
      "x": 1340,
      "y": 300,
      "width": 82,
      "height": 24,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1159088735,
      "version": 18,
      "versionNonce": 1065184433,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "trigger",
      "fontSize": 20,
      "fontFamily": 3,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 19
    },
    {
      "id": "Qw_akk4TX_QbVkg5X1aKS",
      "type": "text",
      "x": 1078.23046875,
      "y": 484.29296875,
      "width": 59,
      "height": 24,
      "angle": 0,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "seed": 1289093279,
      "version": 95,
      "versionNonce": 313892977,
      "isDeleted": false,
      "boundElementIds": null,
      "text": "event",
      "fontSize": 20,
      "fontFamily": 3,
      "textAlign": "left",
      "verticalAlign": "top",
      "baseline": 19
    }
  ],
  "appState": {
    "viewBackgroundColor": "#ffffff",
    "gridSize": null
  }
}

================================================
FILE: docs/assets/getting-started-assets/javascripts/JSXTransformer.js
================================================
/**
 * JSXTransformer v0.13.3
 */
;(function(f) {
    if (typeof exports === "object" && typeof module !== "undefined") {
        module.exports = f()
    } else if (typeof define === "function" && define.amd) {
        define([], f)
    } else {
        var g
        if (typeof window !== "undefined") {
            g = window
        } else if (typeof global !== "undefined") {
            g = global
        } else if (typeof self !== "undefined") {
            g = self
        } else {
            g = this
        }
        g.JSXTransformer = f()
    }
})(function() {
    var define, module, exports
    return (function e(t, n, r) {
        function s(o, u) {
            if (!n[o]) {
                if (!t[o]) {
                    var a = typeof require == "function" && require
                    if (!u && a) return a(o, !0)
                    if (i) return i(o, !0)
                    var f = new Error("Cannot find module '" + o + "'")
                    throw ((f.code = "MODULE_NOT_FOUND"), f)
                }
                var l = (n[o] = { exports: {} })
                t[o][0].call(
                    l.exports,
                    function(e) {
                        var n = t[o][1][e]
                        return s(n ? n : e)
                    },
                    l,
                    l.exports,
                    e,
                    t,
                    n,
                    r
                )
            }
            return n[o].exports
        }
        var i = typeof require == "function" && require
        for (var o = 0; o < r.length; o++) s(r[o])
        return s
    })(
        {
            1: [
                function(_dereq_, module, exports) {
                    /**
                     * Copyright 2013-2015, Facebook, Inc.
                     * All rights reserved.
                     *
                     * This source code is licensed under the BSD-style license found in the
                     * LICENSE file in the root directory of this source tree. An additional grant
                     * of patent rights can be found in the PATENTS file in the same directory.
                     */
                    /* jshint browser: true */
                    /* jslint evil: true */
                    /*eslint-disable no-eval */
                    /*eslint-disable block-scoped-var */

                    "use strict"

                    var ReactTools = _dereq_("../main")
                    var inlineSourceMap = _dereq_("./inline-source-map")

                    var headEl
                    var dummyAnchor
                    var inlineScriptCount = 0

                    // The source-map library relies on Object.defineProperty, but IE8 doesn't
                    // support it fully even with es5-sham. Indeed, es5-sham's defineProperty
                    // throws when Object.prototype.__defineGetter__ is missing, so we skip building
                    // the source map in that case.
                    var supportsAccessors = Object.prototype.hasOwnProperty("__defineGetter__")

                    /**
                     * Run provided code through jstransform.
                     *
                     * @param {string} source Original source code
                     * @param {object?} options Options to pass to jstransform
                     * @return {object} object as returned from jstransform
                     */
                    function transformReact(source, options) {
                        options = options || {}

                        // Force the sourcemaps option manually. We don't want to use it if it will
                        // break (see above note about supportsAccessors). We'll only override the
                        // value here if sourceMap was specified and is truthy. This guarantees that
                        // we won't override any user intent (since this method is exposed publicly).
                        if (options.sourceMap) {
                            options.sourceMap = supportsAccessors
                        }

                        // Otherwise just pass all options straight through to react-tools.
                        return ReactTools.transformWithDetails(source, options)
                    }

                    /**
                     * Eval provided source after transforming it.
                     *
                     * @param {string} source Original source code
                     * @param {object?} options Options to pass to jstransform
                     */
                    function exec(source, options) {
                        return eval(transformReact(source, options).code)
                    }

                    /**
                     * This method returns a nicely formatted line of code pointing to the exact
                     * location of the error `e`. The line is limited in size so big lines of code
                     * are also shown in a readable way.
                     *
                     * Example:
                     * ... x', overflow:'scroll'}} id={} onScroll={this.scroll} class=" ...
                     * ^
                     *
                     * @param {string} code The full string of code
                     * @param {Error} e The error being thrown
                     * @return {string} formatted message
                     * @internal
                     */
                    function createSourceCodeErrorMessage(code, e) {
                        var sourceLines = code.split("\n")
                        // e.lineNumber is non-standard so we can't depend on its availability. If
                        // we're in a browser where it isn't supported, don't even bother trying to
                        // format anything. We may also hit a case where the line number is reported
                        // incorrectly and is outside the bounds of the actual code. Handle that too.
                        if (!e.lineNumber || e.lineNumber > sourceLines.length) {
                            return ""
                        }
                        var erroneousLine = sourceLines[e.lineNumber - 1]

                        // Removes any leading indenting spaces and gets the number of
                        // chars indenting the `erroneousLine`
                        var indentation = 0
                        erroneousLine = erroneousLine.replace(/^\s+/, function(leadingSpaces) {
                            indentation = leadingSpaces.length
                            return ""
                        })

                        // Defines the number of characters that are going to show
                        // before and after the erroneous code
                        var LIMIT = 30
                        var errorColumn = e.column - indentation

                        if (errorColumn > LIMIT) {
                            erroneousLine = "... " + erroneousLine.slice(errorColumn - LIMIT)
                            errorColumn = 4 + LIMIT
                        }
                        if (erroneousLine.length - errorColumn > LIMIT) {
                            erroneousLine = erroneousLine.slice(0, errorColumn + LIMIT) + " ..."
                        }
                        var message = "\n\n" + erroneousLine + "\n"
                        message += new Array(errorColumn - 1).join(" ") + "^"
                        return message
                    }

                    /**
                     * Actually transform the code.
                     *
                     * @param {string} code
                     * @param {string?} url
                     * @param {object?} options
                     * @return {string} The transformed code.
                     * @internal
                     */
                    function transformCode(code, url, options) {
                        try {
                            var transformed = transformReact(code, options)
                        } catch (e) {
                            e.message += "\n    at "
                            if (url) {
                                if ("fileName" in e) {
                                    // We set `fileName` if it's supported by this error object and
                                    // a `url` was provided.
                                    // The error will correctly point to `url` in Firefox.
                                    e.fileName = url
                                }
                                e.message += url + ":" + e.lineNumber + ":" + e.columnNumber
                            } else {
                                e.message += location.href
                            }
                            e.message += createSourceCodeErrorMessage(code, e)
                            throw e
                        }

                        if (!transformed.sourceMap) {
                            return transformed.code
                        }

                        var source
                        if (url == null) {
                            source = "Inline JSX script"
                            inlineScriptCount++
                            if (inlineScriptCount > 1) {
                                source += " (" + inlineScriptCount + ")"
                            }
                        } else if (dummyAnchor) {
                            // Firefox has problems when the sourcemap source is a proper URL with a
                            // protocol and hostname, so use the pathname. We could use just the
                            // filename, but hopefully using the full path will prevent potential
                            // issues where the same filename exists in multiple directories.
                            dummyAnchor.href = url
                            source = dummyAnchor.pathname.substr(1)
                        }

                        return (
                            transformed.code +
                            "\n" +
                            inlineSourceMap(transformed.sourceMap, code, source)
                        )
                    }

                    /**
                     * Appends a script element at the end of the <head> with the content of code,
                     * after transforming it.
                     *
                     * @param {string} code The original source code
                     * @param {string?} url Where the code came from. null if inline
                     * @param {object?} options Options to pass to jstransform
                     * @internal
                     */
                    function run(code, url, options) {
                        var scriptEl = document.createElement("script")
                        scriptEl.text = transformCode(code, url, options)
                        headEl.appendChild(scriptEl)
                    }

                    /**
                     * Load script from the provided url and pass the content to the callback.
                     *
                     * @param {string} url The location of the script src
                     * @param {function} callback Function to call with the content of url
                     * @internal
                     */
                    function load(url, successCallback, errorCallback) {
                        var xhr
                        xhr = window.ActiveXObject
                            ? new window.ActiveXObject("Microsoft.XMLHTTP")
                            : new XMLHttpRequest()

                        // async, however scripts will be executed in the order they are in the
                        // DOM to mirror normal script loading.
                        xhr.open("GET", url, true)
                        if ("overrideMimeType" in xhr) {
                            xhr.overrideMimeType("text/plain")
                        }
                        xhr.onreadystatechange = function() {
                            if (xhr.readyState === 4) {
                                if (xhr.status === 0 || xhr.status === 200) {
                                    successCallback(xhr.responseText)
                                } else {
                                    errorCallback()
                                    throw new Error("Could not load " + url)
                                }
                            }
                        }
                        return xhr.send(null)
                    }

                    /**
                     * Loop over provided script tags and get the content, via innerHTML if an
                     * inline script, or by using XHR. Transforms are applied if needed. The scripts
                     * are executed in the order they are found on the page.
                     *
                     * @param {array} scripts The <script> elements to load and run.
                     * @internal
                     */
                    function loadScripts(scripts) {
                        var result = []
                        var count = scripts.length

                        function check() {
                            var script, i

                            for (i = 0; i < count; i++) {
                                script = result[i]

                                if (script.loaded && !script.executed) {
                                    script.executed = true
                                    run(script.content, script.url, script.options)
                                } else if (!script.loaded && !script.error && !script.async) {
                                    break
                                }
                            }
                        }

                        scripts.forEach(function(script, i) {
                            var options = {
                                sourceMap: true
                            }
                            if (/;harmony=true(;|$)/.test(script.type)) {
                                options.harmony = true
                            }
                            if (/;stripTypes=true(;|$)/.test(script.type)) {
                                options.stripTypes = true
                            }

                            // script.async is always true for non-javascript script tags
                            var async = script.hasAttribute("async")

                            if (script.src) {
                                result[i] = {
                                    async: async,
                                    error: false,
                                    executed: false,
                                    content: null,
                                    loaded: false,
                                    url: script.src,
                                    options: options
                                }

                                load(
                                    script.src,
                                    function(content) {
                                        result[i].loaded = true
                                        result[i].content = content
                                        check()
                                    },
                                    function() {
                                        result[i].error = true
                                        check()
                                    }
                                )
                            } else {
                                result[i] = {
                                    async: async,
                                    error: false,
                                    executed: false,
                                    content: script.innerHTML,
                                    loaded: true,
                                    url: null,
                                    options: options
                                }
                            }
                        })

                        check()
                    }

                    /**
                     * Find and run all script tags with type="text/jsx".
                     *
                     * @internal
                     */
                    function runScripts() {
                        var scripts = document.getElementsByTagName("script")

                        // Array.prototype.slice cannot be used on NodeList on IE8
                        var jsxScripts = []
                        for (var i = 0; i < scripts.length; i++) {
                            if (/^text\/jsx(;|$)/.test(scripts.item(i).type)) {
                                jsxScripts.push(scripts.item(i))
                            }
                        }

                        if (jsxScripts.length < 1) {
                            return
                        }

                        console.warn(
                            "You are using the in-browser JSX transformer. Be sure to precompile " +
                                "your JSX for production - " +
                                "http://facebook.github.io/react/docs/tooling-integration.html#jsx"
                        )

                        loadScripts(jsxScripts)
                    }

                    // Listen for load event if we're in a browser and then kick off finding and
                    // running of scripts.
                    if (typeof window !== "undefined" && window !== null) {
                        headEl = document.getElementsByTagName("head")[0]
                        dummyAnchor = document.createElement("a")

                        if (window.addEventListener) {
                            window.addEventListener("DOMContentLoaded", runScripts, false)
                        } else {
                            window.attachEvent("onload", runScripts)
                        }
                    }

                    module.exports = {
                        transform: transformReact,
                        exec: exec
                    }
                },
                { "../main": 2, "./inline-source-map": 41 }
            ],
            2: [
                function(_dereq_, module, exports) {
                    /**
                     * Copyright 2013-2015, Facebook, Inc.
                     * All rights reserved.
                     *
                     * This source code is licensed under the BSD-style license found in the
                     * LICENSE file in the root directory of this source tree. An additional grant
                     * of patent rights can be found in the PATENTS file in the same directory.
                     */

                    "use strict"
                    /*eslint-disable no-undef*/
                    var visitors = _dereq_("./vendor/fbtransform/visitors")
                    var transform = _dereq_("jstransform").transform
                    var typesSyntax = _dereq_("jstransform/visitors/type-syntax")
                    var inlineSourceMap = _dereq_("./vendor/inline-source-map")

                    module.exports = {
                        transform: function(input, options) {
                            options = processOptions(options)
                            var output = innerTransform(input, options)
                            var result = output.code
                            if (options.sourceMap) {
                                var map = inlineSourceMap(output.sourceMap, input, options.filename)
                                result += "\n" + map
                            }
                            return result
                        },
                        transformWithDetails: function(input, options) {
                            options = processOptions(options)
                            var output = innerTransform(input, options)
                            var result = {}
                            result.code = output.code
                            if (options.sourceMap) {
                                result.sourceMap = output.sourceMap.toJSON()
                            }
                            if (options.filename) {
                                result.sourceMap.sources = [options.filename]
                            }
                            return result
                        }
                    }

                    /**
                     * Only copy the values that we need. We'll do some preprocessing to account for
                     * converting command line flags to options that jstransform can actually use.
                     */
                    function processOptions(opts) {
                        opts = opts || {}
                        var options = {}

                        options.harmony = opts.harmony
                        options.stripTypes = opts.stripTypes
                        options.sourceMap = opts.sourceMap
                        options.filename = opts.sourceFilename

                        if (opts.es6module) {
                            options.sourceType = "module"
                        }
                        if (opts.nonStrictEs6module) {
                            options.sourceType = "nonStrictModule"
                        }

                        // Instead of doing any fancy validation, only look for 'es3'. If we have
                        // that, then use it. Otherwise use 'es5'.
                        options.es3 = opts.target === "es3"
                        options.es5 = !options.es3

                        return options
                    }

                    function innerTransform(input, options) {
                        var visitorSets = ["react"]
                        if (options.harmony) {
                            visitorSets.push("harmony")
                        }

                        if (options.es3) {
                            visitorSets.push("es3")
                        }

                        if (options.stripTypes) {
                            // Stripping types needs to happen before the other transforms
                            // unfortunately, due to bad interactions. For example,
                            // es6-rest-param-visitors conflict with stripping rest param type
                            // annotation
                            input = transform(typesSyntax.visitorList, input, options).code
                        }

                        var visitorList = visitors.getVisitorsBySet(visitorSets)
                        return transform(visitorList, input, options)
                    }
                },
                {
                    "./vendor/fbtransform/visitors": 40,
                    "./vendor/inline-source-map": 41,
                    jstransform: 22,
                    "jstransform/visitors/type-syntax": 36
                }
            ],
            3: [
                function(_dereq_, module, exports) {
                    /*!
                     * The buffer module from node.js, for the browser.
                     *
                     * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
                     * @license  MIT
                     */

                    var base64 = _dereq_("base64-js")
                    var ieee754 = _dereq_("ieee754")
                    var isArray = _dereq_("is-array")

                    exports.Buffer = Buffer
                    exports.SlowBuffer = SlowBuffer
                    exports.INSPECT_MAX_BYTES = 50
                    Buffer.poolSize = 8192 // not used by this implementation

                    var kMaxLength = 0x3fffffff
                    var rootParent = {}

                    /**
                     * If `Buffer.TYPED_ARRAY_SUPPORT`:
                     *   === true    Use Uint8Array implementation (fastest)
                     *   === false   Use Object implementation (most compatible, even IE6)
                     *
                     * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
                     * Opera 11.6+, iOS 4.2+.
                     *
                     * Note:
                     *
                     * - Implementation must support adding new properties to `Uint8Array` instances.
                     *   Firefox 4-29 lacked support, fixed in Firefox 30+.
                     *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
                     *
                     *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
                     *
                     *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
                     *    incorrect length in some situations.
                     *
                     * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will
                     * get the Object implementation, which is slower but will work correctly.
                     */
                    Buffer.TYPED_ARRAY_SUPPORT = (function() {
                        try {
                            var buf = new ArrayBuffer(0)
                            var arr = new Uint8Array(buf)
                            arr.foo = function() {
                                return 42
                            }
                            return (
                                arr.foo() === 42 && // typed array instances can be augmented
                                typeof arr.subarray === "function" && // chrome 9-10 lack `subarray`
                                new Uint8Array(1).subarray(1, 1).byteLength === 0
                            ) // ie10 has broken `subarray`
                        } catch (e) {
                            return false
                        }
                    })()

                    /**
                     * Class: Buffer
                     * =============
                     *
                     * The Buffer constructor returns instances of `Uint8Array` that are augmented
                     * with function properties for all the node `Buffer` API functions. We use
                     * `Uint8Array` so that square bracket notation works as expected -- it returns
                     * a single octet.
                     *
                     * By augmenting the instances, we can avoid modifying the `Uint8Array`
                     * prototype.
                     */
                    function Buffer(subject, encoding) {
                        var self = this
                        if (!(self instanceof Buffer)) return new Buffer(subject, encoding)

                        var type = typeof subject
                        var length

                        if (type === "number") {
                            length = +subject
                        } else if (type === "string") {
                            length = Buffer.byteLength(subject, encoding)
                        } else if (type === "object" && subject !== null) {
                            // assume object is array-like
                            if (subject.type === "Buffer" && isArray(subject.data))
                                subject = subject.data
                            length = +subject.length
                        } else {
                            throw new TypeError("must start with number, buffer, array or string")
                        }

                        if (length > kMaxLength) {
                            throw new RangeError(
                                "Attempt to allocate Buffer larger than maximum size: 0x" +
                                    kMaxLength.toString(16) +
                                    " bytes"
                            )
                        }

                        if (length < 0) length = 0
                        else length >>>= 0 // coerce to uint32

                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            // Preferred: Return an augmented `Uint8Array` instance for best performance
                            self = Buffer._augment(new Uint8Array(length)) // eslint-disable-line consistent-this
                        } else {
                            // Fallback: Return THIS instance of Buffer (created by `new`)
                            self.length = length
                            self._isBuffer = true
                        }

                        var i
                        if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === "number") {
                            // Speed optimization -- use set if we're copying from a typed array
                            self._set(subject)
                        } else if (isArrayish(subject)) {
                            // Treat array-ish objects as a byte array
                            if (Buffer.isBuffer(subject)) {
                                for (i = 0; i < length; i++) {
                                    self[i] = subject.readUInt8(i)
                                }
                            } else {
                                for (i = 0; i < length; i++) {
                                    self[i] = ((subject[i] % 256) + 256) % 256
                                }
                            }
                        } else if (type === "string") {
                            self.write(subject, 0, encoding)
                        } else if (type === "number" && !Buffer.TYPED_ARRAY_SUPPORT) {
                            for (i = 0; i < length; i++) {
                                self[i] = 0
                            }
                        }

                        if (length > 0 && length <= Buffer.poolSize) self.parent = rootParent

                        return self
                    }

                    function SlowBuffer(subject, encoding) {
                        if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)

                        var buf = new Buffer(subject, encoding)
                        delete buf.parent
                        return buf
                    }

                    Buffer.isBuffer = function isBuffer(b) {
                        return !!(b != null && b._isBuffer)
                    }

                    Buffer.compare = function compare(a, b) {
                        if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
                            throw new TypeError("Arguments must be Buffers")
                        }

                        if (a === b) return 0

                        var x = a.length
                        var y = b.length
                        for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
                        if (i !== len) {
                            x = a[i]
                            y = b[i]
                        }
                        if (x < y) return -1
                        if (y < x) return 1
                        return 0
                    }

                    Buffer.isEncoding = function isEncoding(encoding) {
                        switch (String(encoding).toLowerCase()) {
                            case "hex":
                            case "utf8":
                            case "utf-8":
                            case "ascii":
                            case "binary":
                            case "base64":
                            case "raw":
                            case "ucs2":
                            case "ucs-2":
                            case "utf16le":
                            case "utf-16le":
                                return true
                            default:
                                return false
                        }
                    }

                    Buffer.concat = function concat(list, totalLength) {
                        if (!isArray(list))
                            throw new TypeError("list argument must be an Array of Buffers.")

                        if (list.length === 0) {
                            return new Buffer(0)
                        } else if (list.length === 1) {
                            return list[0]
                        }

                        var i
                        if (totalLength === undefined) {
                            totalLength = 0
                            for (i = 0; i < list.length; i++) {
                                totalLength += list[i].length
                            }
                        }

                        var buf = new Buffer(totalLength)
                        var pos = 0
                        for (i = 0; i < list.length; i++) {
                            var item = list[i]
                            item.copy(buf, pos)
                            pos += item.length
                        }
                        return buf
                    }

                    Buffer.byteLength = function byteLength(str, encoding) {
                        var ret
                        str = str + ""
                        switch (encoding || "utf8") {
                            case "ascii":
                            case "binary":
                            case "raw":
                                ret = str.length
                                break
                            case "ucs2":
                            case "ucs-2":
                            case "utf16le":
                            case "utf-16le":
                                ret = str.length * 2
                                break
                            case "hex":
                                ret = str.length >>> 1
                                break
                            case "utf8":
                            case "utf-8":
                                ret = utf8ToBytes(str).length
                                break
                            case "base64":
                                ret = base64ToBytes(str).length
                                break
                            default:
                                ret = str.length
                        }
                        return ret
                    }

                    // pre-set for values that may exist in the future
                    Buffer.prototype.length = undefined
                    Buffer.prototype.parent = undefined

                    // toString(encoding, start=0, end=buffer.length)
                    Buffer.prototype.toString = function toString(encoding, start, end) {
                        var loweredCase = false

                        start = start >>> 0
                        end = end === undefined || end === Infinity ? this.length : end >>> 0

                        if (!encoding) encoding = "utf8"
                        if (start < 0) start = 0
                        if (end > this.length) end = this.length
                        if (end <= start) return ""

                        while (true) {
                            switch (encoding) {
                                case "hex":
                                    return hexSlice(this, start, end)

                                case "utf8":
                                case "utf-8":
                                    return utf8Slice(this, start, end)

                                case "ascii":
                                    return asciiSlice(this, start, end)

                                case "binary":
                                    return binarySlice(this, start, end)

                                case "base64":
                                    return base64Slice(this, start, end)

                                case "ucs2":
                                case "ucs-2":
                                case "utf16le":
                                case "utf-16le":
                                    return utf16leSlice(this, start, end)

                                default:
                                    if (loweredCase)
                                        throw new TypeError("Unknown encoding: " + encoding)
                                    encoding = (encoding + "").toLowerCase()
                                    loweredCase = true
                            }
                        }
                    }

                    Buffer.prototype.equals = function equals(b) {
                        if (!Buffer.isBuffer(b)) throw new TypeError("Argument must be a Buffer")
                        if (this === b) return true
                        return Buffer.compare(this, b) === 0
                    }

                    Buffer.prototype.inspect = function inspect() {
                        var str = ""
                        var max = exports.INSPECT_MAX_BYTES
                        if (this.length > 0) {
                            str = this.toString("hex", 0, max)
                                .match(/.{2}/g)
                                .join(" ")
                            if (this.length > max) str += " ... "
                        }
                        return "<Buffer " + str + ">"
                    }

                    Buffer.prototype.compare = function compare(b) {
                        if (!Buffer.isBuffer(b)) throw new TypeError("Argument must be a Buffer")
                        if (this === b) return 0
                        return Buffer.compare(this, b)
                    }

                    Buffer.prototype.indexOf = function indexOf(val, byteOffset) {
                        if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
                        else if (byteOffset < -0x80000000) byteOffset = -0x80000000
                        byteOffset >>= 0

                        if (this.length === 0) return -1
                        if (byteOffset >= this.length) return -1

                        // Negative offsets start from the end of the buffer
                        if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)

                        if (typeof val === "string") {
                            if (val.length === 0) return -1 // special case: looking for empty string always fails
                            return String.prototype.indexOf.call(this, val, byteOffset)
                        }
                        if (Buffer.isBuffer(val)) {
                            return arrayIndexOf(this, val, byteOffset)
                        }
                        if (typeof val === "number") {
                            if (
                                Buffer.TYPED_ARRAY_SUPPORT &&
                                Uint8Array.prototype.indexOf === "function"
                            ) {
                                return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
                            }
                            return arrayIndexOf(this, [val], byteOffset)
                        }

                        function arrayIndexOf(arr, val, byteOffset) {
                            var foundIndex = -1
                            for (var i = 0; byteOffset + i < arr.length; i++) {
                                if (
                                    arr[byteOffset + i] ===
                                    val[foundIndex === -1 ? 0 : i - foundIndex]
                                ) {
                                    if (foundIndex === -1) foundIndex = i
                                    if (i - foundIndex + 1 === val.length)
                                        return byteOffset + foundIndex
                                } else {
                                    foundIndex = -1
                                }
                            }
                            return -1
                        }

                        throw new TypeError("val must be string, number or Buffer")
                    }

                    // `get` will be removed in Node 0.13+
                    Buffer.prototype.get = function get(offset) {
                        console.log(".get() is deprecated. Access using array indexes instead.")
                        return this.readUInt8(offset)
                    }

                    // `set` will be removed in Node 0.13+
                    Buffer.prototype.set = function set(v, offset) {
                        console.log(".set() is deprecated. Access using array indexes instead.")
                        return this.writeUInt8(v, offset)
                    }

                    function hexWrite(buf, string, offset, length) {
                        offset = Number(offset) || 0
                        var remaining = buf.length - offset
                        if (!length) {
                            length = remaining
                        } else {
                            length = Number(length)
                            if (length > remaining) {
                                length = remaining
                            }
                        }

                        // must be an even number of digits
                        var strLen = string.length
                        if (strLen % 2 !== 0) throw new Error("Invalid hex string")

                        if (length > strLen / 2) {
                            length = strLen / 2
                        }
                        for (var i = 0; i < length; i++) {
                            var parsed = parseInt(string.substr(i * 2, 2), 16)
                            if (isNaN(parsed)) throw new Error("Invalid hex string")
                            buf[offset + i] = parsed
                        }
                        return i
                    }

                    function utf8Write(buf, string, offset, length) {
                        var charsWritten = blitBuffer(
                            utf8ToBytes(string, buf.length - offset),
                            buf,
                            offset,
                            length
                        )
                        return charsWritten
                    }

                    function asciiWrite(buf, string, offset, length) {
                        var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)
                        return charsWritten
                    }

                    function binaryWrite(buf, string, offset, length) {
                        return asciiWrite(buf, string, offset, length)
                    }

                    function base64Write(buf, string, offset, length) {
                        var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)
                        return charsWritten
                    }

                    function utf16leWrite(buf, string, offset, length) {
                        var charsWritten = blitBuffer(
                            utf16leToBytes(string, buf.length - offset),
                            buf,
                            offset,
                            length
                        )
                        return charsWritten
                    }

                    Buffer.prototype.write = function write(string, offset, length, encoding) {
                        // Support both (string, offset, length, encoding)
                        // and the legacy (string, encoding, offset, length)
                        if (isFinite(offset)) {
                            if (!isFinite(length)) {
                                encoding = length
                                length = undefined
                            }
                        } else {
                            // legacy
                            var swap = encoding
                            encoding = offset
                            offset = length
                            length = swap
                        }

                        offset = Number(offset) || 0

                        if (length < 0 || offset < 0 || offset > this.length) {
                            throw new RangeError("attempt to write outside buffer bounds")
                        }

                        var remaining = this.length - offset
                        if (!length) {
                            length = remaining
                        } else {
                            length = Number(length)
                            if (length > remaining) {
                                length = remaining
                            }
                        }
                        encoding = String(encoding || "utf8").toLowerCase()

                        var ret
                        switch (encoding) {
                            case "hex":
                                ret = hexWrite(this, string, offset, length)
                                break
                            case "utf8":
                            case "utf-8":
                                ret = utf8Write(this, string, offset, length)
                                break
                            case "ascii":
                                ret = asciiWrite(this, string, offset, length)
                                break
                            case "binary":
                                ret = binaryWrite(this, string, offset, length)
                                break
                            case "base64":
                                ret = base64Write(this, string, offset, length)
                                break
                            case "ucs2":
                            case "ucs-2":
                            case "utf16le":
                            case "utf-16le":
                                ret = utf16leWrite(this, string, offset, length)
                                break
                            default:
                                throw new TypeError("Unknown encoding: " + encoding)
                        }
                        return ret
                    }

                    Buffer.prototype.toJSON = function toJSON() {
                        return {
                            type: "Buffer",
                            data: Array.prototype.slice.call(this._arr || this, 0)
                        }
                    }

                    function base64Slice(buf, start, end) {
                        if (start === 0 && end === buf.length) {
                            return base64.fromByteArray(buf)
                        } else {
                            return base64.fromByteArray(buf.slice(start, end))
                        }
                    }

                    function utf8Slice(buf, start, end) {
                        var res = ""
                        var tmp = ""
                        end = Math.min(buf.length, end)

                        for (var i = start; i < end; i++) {
                            if (buf[i] <= 0x7f) {
                                res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
                                tmp = ""
                            } else {
                                tmp += "%" + buf[i].toString(16)
                            }
                        }

                        return res + decodeUtf8Char(tmp)
                    }

                    function asciiSlice(buf, start, end) {
                        var ret = ""
                        end = Math.min(buf.length, end)

                        for (var i = start; i < end; i++) {
                            ret += String.fromCharCode(buf[i] & 0x7f)
                        }
                        return ret
                    }

                    function binarySlice(buf, start, end) {
                        var ret = ""
                        end = Math.min(buf.length, end)

                        for (var i = start; i < end; i++) {
                            ret += String.fromCharCode(buf[i])
                        }
                        return ret
                    }

                    function hexSlice(buf, start, end) {
                        var len = buf.length

                        if (!start || start < 0) start = 0
                        if (!end || end < 0 || end > len) end = len

                        var out = ""
                        for (var i = start; i < end; i++) {
                            out += toHex(buf[i])
                        }
                        return out
                    }

                    function utf16leSlice(buf, start, end) {
                        var bytes = buf.slice(start, end)
                        var res = ""
                        for (var i = 0; i < bytes.length; i += 2) {
                            res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
                        }
                        return res
                    }

                    Buffer.prototype.slice = function slice(start, end) {
                        var len = this.length
                        start = ~~start
                        end = end === undefined ? len : ~~end

                        if (start < 0) {
                            start += len
                            if (start < 0) start = 0
                        } else if (start > len) {
                            start = len
                        }

                        if (end < 0) {
                            end += len
                            if (end < 0) end = 0
                        } else if (end > len) {
                            end = len
                        }

                        if (end < start) end = start

                        var newBuf
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            newBuf = Buffer._augment(this.subarray(start, end))
                        } else {
                            var sliceLen = end - start
                            newBuf = new Buffer(sliceLen, undefined)
                            for (var i = 0; i < sliceLen; i++) {
                                newBuf[i] = this[i + start]
                            }
                        }

                        if (newBuf.length) newBuf.parent = this.parent || this

                        return newBuf
                    }

                    /*
                     * Need to make sure that buffer isn't trying to write out of bounds.
                     */
                    function checkOffset(offset, ext, length) {
                        if (offset % 1 !== 0 || offset < 0)
                            throw new RangeError("offset is not uint")
                        if (offset + ext > length)
                            throw new RangeError("Trying to access beyond buffer length")
                    }

                    Buffer.prototype.readUIntLE = function readUIntLE(
                        offset,
                        byteLength,
                        noAssert
                    ) {
                        offset = offset >>> 0
                        byteLength = byteLength >>> 0
                        if (!noAssert) checkOffset(offset, byteLength, this.length)

                        var val = this[offset]
                        var mul = 1
                        var i = 0
                        while (++i < byteLength && (mul *= 0x100)) {
                            val += this[offset + i] * mul
                        }

                        return val
                    }

                    Buffer.prototype.readUIntBE = function readUIntBE(
                        offset,
                        byteLength,
                        noAssert
                    ) {
                        offset = offset >>> 0
                        byteLength = byteLength >>> 0
                        if (!noAssert) {
                            checkOffset(offset, byteLength, this.length)
                        }

                        var val = this[offset + --byteLength]
                        var mul = 1
                        while (byteLength > 0 && (mul *= 0x100)) {
                            val += this[offset + --byteLength] * mul
                        }

                        return val
                    }

                    Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 1, this.length)
                        return this[offset]
                    }

                    Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 2, this.length)
                        return this[offset] | (this[offset + 1] << 8)
                    }

                    Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 2, this.length)
                        return (this[offset] << 8) | this[offset + 1]
                    }

                    Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 4, this.length)

                        return (
                            (this[offset] | (this[offset + 1] << 8) | (this[offset + 2] << 16)) +
                            this[offset + 3] * 0x1000000
                        )
                    }

                    Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 4, this.length)

                        return (
                            this[offset] * 0x1000000 +
                            ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3])
                        )
                    }

                    Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
                        offset = offset >>> 0
                        byteLength = byteLength >>> 0
                        if (!noAssert) checkOffset(offset, byteLength, this.length)

                        var val = this[offset]
                        var mul = 1
                        var i = 0
                        while (++i < byteLength && (mul *= 0x100)) {
                            val += this[offset + i] * mul
                        }
                        mul *= 0x80

                        if (val >= mul) val -= Math.pow(2, 8 * byteLength)

                        return val
                    }

                    Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
                        offset = offset >>> 0
                        byteLength = byteLength >>> 0
                        if (!noAssert) checkOffset(offset, byteLength, this.length)

                        var i = byteLength
                        var mul = 1
                        var val = this[offset + --i]
                        while (i > 0 && (mul *= 0x100)) {
                            val += this[offset + --i] * mul
                        }
                        mul *= 0x80

                        if (val >= mul) val -= Math.pow(2, 8 * byteLength)

                        return val
                    }

                    Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 1, this.length)
                        if (!(this[offset] & 0x80)) return this[offset]
                        return (0xff - this[offset] + 1) * -1
                    }

                    Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 2, this.length)
                        var val = this[offset] | (this[offset + 1] << 8)
                        return val & 0x8000 ? val | 0xffff0000 : val
                    }

                    Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 2, this.length)
                        var val = this[offset + 1] | (this[offset] << 8)
                        return val & 0x8000 ? val | 0xffff0000 : val
                    }

                    Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 4, this.length)

                        return (
                            this[offset] |
                            (this[offset + 1] << 8) |
                            (this[offset + 2] << 16) |
                            (this[offset + 3] << 24)
                        )
                    }

                    Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 4, this.length)

                        return (
                            (this[offset] << 24) |
                            (this[offset + 1] << 16) |
                            (this[offset + 2] << 8) |
                            this[offset + 3]
                        )
                    }

                    Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 4, this.length)
                        return ieee754.read(this, offset, true, 23, 4)
                    }

                    Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 4, this.length)
                        return ieee754.read(this, offset, false, 23, 4)
                    }

                    Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 8, this.length)
                        return ieee754.read(this, offset, true, 52, 8)
                    }

                    Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
                        if (!noAssert) checkOffset(offset, 8, this.length)
                        return ieee754.read(this, offset, false, 52, 8)
                    }

                    function checkInt(buf, value, offset, ext, max, min) {
                        if (!Buffer.isBuffer(buf))
                            throw new TypeError("buffer must be a Buffer instance")
                        if (value > max || value < min)
                            throw new RangeError("value is out of bounds")
                        if (offset + ext > buf.length) throw new RangeError("index out of range")
                    }

                    Buffer.prototype.writeUIntLE = function writeUIntLE(
                        value,
                        offset,
                        byteLength,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        byteLength = byteLength >>> 0
                        if (!noAssert)
                            checkInt(
                                this,
                                value,
                                offset,
                                byteLength,
                                Math.pow(2, 8 * byteLength),
                                0
                            )

                        var mul = 1
                        var i = 0
                        this[offset] = value & 0xff
                        while (++i < byteLength && (mul *= 0x100)) {
                            this[offset + i] = ((value / mul) >>> 0) & 0xff
                        }

                        return offset + byteLength
                    }

                    Buffer.prototype.writeUIntBE = function writeUIntBE(
                        value,
                        offset,
                        byteLength,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        byteLength = byteLength >>> 0
                        if (!noAssert)
                            checkInt(
                                this,
                                value,
                                offset,
                                byteLength,
                                Math.pow(2, 8 * byteLength),
                                0
                            )

                        var i = byteLength - 1
                        var mul = 1
                        this[offset + i] = value & 0xff
                        while (--i >= 0 && (mul *= 0x100)) {
                            this[offset + i] = ((value / mul) >>> 0) & 0xff
                        }

                        return offset + byteLength
                    }

                    Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
                        if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
                        this[offset] = value
                        return offset + 1
                    }

                    function objectWriteUInt16(buf, value, offset, littleEndian) {
                        if (value < 0) value = 0xffff + value + 1
                        for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
                            buf[offset + i] =
                                (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
                                ((littleEndian ? i : 1 - i) * 8)
                        }
                    }

                    Buffer.prototype.writeUInt16LE = function writeUInt16LE(
                        value,
                        offset,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value
                            this[offset + 1] = value >>> 8
                        } else {
                            objectWriteUInt16(this, value, offset, true)
                        }
                        return offset + 2
                    }

                    Buffer.prototype.writeUInt16BE = function writeUInt16BE(
                        value,
                        offset,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value >>> 8
                            this[offset + 1] = value
                        } else {
                            objectWriteUInt16(this, value, offset, false)
                        }
                        return offset + 2
                    }

                    function objectWriteUInt32(buf, value, offset, littleEndian) {
                        if (value < 0) value = 0xffffffff + value + 1
                        for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
                            buf[offset + i] = (value >>> ((littleEndian ? i : 3 - i) * 8)) & 0xff
                        }
                    }

                    Buffer.prototype.writeUInt32LE = function writeUInt32LE(
                        value,
                        offset,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset + 3] = value >>> 24
                            this[offset + 2] = value >>> 16
                            this[offset + 1] = value >>> 8
                            this[offset] = value
                        } else {
                            objectWriteUInt32(this, value, offset, true)
                        }
                        return offset + 4
                    }

                    Buffer.prototype.writeUInt32BE = function writeUInt32BE(
                        value,
                        offset,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value >>> 24
                            this[offset + 1] = value >>> 16
                            this[offset + 2] = value >>> 8
                            this[offset + 3] = value
                        } else {
                            objectWriteUInt32(this, value, offset, false)
                        }
                        return offset + 4
                    }

                    Buffer.prototype.writeIntLE = function writeIntLE(
                        value,
                        offset,
                        byteLength,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) {
                            checkInt(
                                this,
                                value,
                                offset,
                                byteLength,
                                Math.pow(2, 8 * byteLength - 1) - 1,
                                -Math.pow(2, 8 * byteLength - 1)
                            )
                        }

                        var i = 0
                        var mul = 1
                        var sub = value < 0 ? 1 : 0
                        this[offset] = value & 0xff
                        while (++i < byteLength && (mul *= 0x100)) {
                            this[offset + i] = (((value / mul) >> 0) - sub) & 0xff
                        }

                        return offset + byteLength
                    }

                    Buffer.prototype.writeIntBE = function writeIntBE(
                        value,
                        offset,
                        byteLength,
                        noAssert
                    ) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) {
                            checkInt(
                                this,
                                value,
                                offset,
                                byteLength,
                                Math.pow(2, 8 * byteLength - 1) - 1,
                                -Math.pow(2, 8 * byteLength - 1)
                            )
                        }

                        var i = byteLength - 1
                        var mul = 1
                        var sub = value < 0 ? 1 : 0
                        this[offset + i] = value & 0xff
                        while (--i >= 0 && (mul *= 0x100)) {
                            this[offset + i] = (((value / mul) >> 0) - sub) & 0xff
                        }

                        return offset + byteLength
                    }

                    Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
                        if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
                        if (value < 0) value = 0xff + value + 1
                        this[offset] = value
                        return offset + 1
                    }

                    Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value
                            this[offset + 1] = value >>> 8
                        } else {
                            objectWriteUInt16(this, value, offset, true)
                        }
                        return offset + 2
                    }

                    Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value >>> 8
                            this[offset + 1] = value
                        } else {
                            objectWriteUInt16(this, value, offset, false)
                        }
                        return offset + 2
                    }

                    Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value
                            this[offset + 1] = value >>> 8
                            this[offset + 2] = value >>> 16
                            this[offset + 3] = value >>> 24
                        } else {
                            objectWriteUInt32(this, value, offset, true)
                        }
                        return offset + 4
                    }

                    Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
                        value = +value
                        offset = offset >>> 0
                        if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
                        if (value < 0) value = 0xffffffff + value + 1
                        if (Buffer.TYPED_ARRAY_SUPPORT) {
                            this[offset] = value >>> 24
                            this[offset + 1] = value >>> 16
                            this[offset + 2] = value >>> 8
                            this[offset + 3] = value
                        } else {
                            objectWriteUInt32(this, value, offset, false)
                        }
                        return offset + 4
                    }

                    function checkIEEE754(buf, value, offset, ext, max, min) {
                        if (value > max || value < min)
                            throw new RangeError("value is out of bounds")
                        if (offset + ext > buf.length) throw new RangeError("index out of range")
                        if (offset < 0) throw new RangeError("index out of range")
                    }

                    function writeFloat(buf, value, offset, littleEndian, noAssert) {
                        if (!noAssert) {
                            checkIEEE754(
                                buf,
                                value,
                                offset,
                                4,
                                3.4028234663852886e38,
                                -3.4028234663852886e38
                            )
                        }
                        ieee754.write(buf, value, offset, littleEndian, 23, 4)
                        return offset + 4
                    }

                    Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
                        return writeFloat(this, value, offset, true, noAssert)
                    }

                    Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
                        return writeFloat(this, value, offset, false, noAssert)
                    }

                    function writeDouble(buf, value, offset, littleEndian, noAssert) {
                        if (!noAssert) {
                            checkIEEE754(
                                buf,
                                value,
                                offset,
                                8,
                                1.7976931348623157e308,
                                -1.7976931348623157e308
                            )
                        }
                        ieee754.write(buf, value, offset, littleEndian, 52, 8)
                        return offset + 8
                    }

                    Buffer.prototype.writeDoubleLE = function writeDoubleLE(
                        value,
                        offset,
                        noAssert
                    ) {
                        return writeDouble(this, value, offset, true, noAssert)
                    }

                    Buffer.prototype.writeDoubleBE = function writeDoubleBE(
                        value,
                        offset,
                        noAssert
                    ) {
                        return writeDouble(this, value, offset, false, noAssert)
                    }

                    // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
                    Buffer.prototype.copy = function copy(target, target_start, start, end) {
                        if (!start) start = 0
                        if (!end && end !== 0) end = this.length
                        if (target_start >= target.length) target_start = target.length
                        if (!target_start) target_start = 0
                        if (end > 0 && end < start) end = start

                        // Copy 0 bytes; we're done
                        if (end === start) return 0
                        if (target.length === 0 || this.length === 0) return 0

                        // Fatal error conditions
                        if (target_start < 0) {
                            throw new RangeError("targetStart out of bounds")
                        }
                        if (start < 0 || start >= this.length)
                            throw new RangeError("sourceStart out of bounds")
                        if (end < 0) throw new RangeError("sourceEnd out of bounds")

                        // Are we oob?
                        if (end > this.length) end = this.length
                        if (target.length - target_start < end - start) {
                            end = target.length - target_start + start
                        }

                        var len = end - start

                        if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
                            for (var i = 0; i < len; i++) {
                                target[i + target_start] = this[i + start]
                            }
                        } else {
                            target._set(this.subarray(start, start + len), target_start)
                        }

                        return len
                    }

                    // fill(value, start=0, end=buffer.length)
                    Buffer.prototype.fill = function fill(value, start, end) {
                        if (!value) value = 0
                        if (!start) start = 0
                        if (!end) end = this.length

                        if (end < start) throw new RangeError("end < start")

                        // Fill 0 bytes; we're done
                        if (end === start) return
                        if (this.length === 0) return

                        if (start < 0 || start >= this.length)
                            throw new RangeError("start out of bounds")
                        if (end < 0 || end > this.length) throw new RangeError("end out of bounds")

                        var i
                        if (typeof value === "number") {
                            for (i = start; i < end; i++) {
                                this[i] = value
                            }
                        } else {
                            var bytes = utf8ToBytes(value.toString())
                            var len = bytes.length
                            for (i = start; i < end; i++) {
                                this[i] = bytes[i % len]
                            }
                        }

                        return this
                    }

                    /**
                     * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
                     * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
                     */
                    Buffer.prototype.toArrayBuffer = function toArrayBuffer() {
                        if (typeof Uint8Array !== "undefined") {
                            if (Buffer.TYPED_ARRAY_SUPPORT) {
                                return new Buffer(this).buffer
                            } else {
                                var buf = new Uint8Array(this.length)
                                for (var i = 0, len = buf.length; i < len; i += 1) {
                                    buf[i] = this[i]
                                }
                                return buf.buffer
                            }
                        } else {
                            throw new TypeError(
                                "Buffer.toArrayBuffer not supported in this browser"
                            )
                        }
                    }

                    // HELPER FUNCTIONS
                    // ================

                    var BP = Buffer.prototype

                    /**
                     * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
                     */
                    Buffer._augment = function _augment(arr) {
                        arr.constructor = Buffer
                        arr._isBuffer = true

                        // save reference to original Uint8Array set method before overwriting
                        arr._set = arr.set

                        // deprecated, will be removed in node 0.13+
                        arr.get = BP.get
                        arr.set = BP.set

                        arr.write = BP.write
                        arr.toString = BP.toString
                        arr.toLocaleString = BP.toString
                        arr.toJSON = BP.toJSON
                        arr.equals = BP.equals
                        arr.compare = BP.compare
                        arr.indexOf = BP.indexOf
                        arr.copy = BP.copy
                        arr.slice = BP.slice
                        arr.readUIntLE = BP.readUIntLE
                        arr.readUIntBE = BP.readUIntBE
                        arr.readUInt8 = BP.readUInt8
                        arr.readUInt16LE = BP.readUInt16LE
                        arr.readUInt16BE = BP.readUInt16BE
                        arr.readUInt32LE = BP.readUInt32LE
                        arr.readUInt32BE = BP.readUInt32BE
                        arr.readIntLE = BP.readIntLE
                        arr.readIntBE = BP.readIntBE
                        arr.readInt8 = BP.readInt8
                        arr.readInt16LE = BP.readInt16LE
                        arr.readInt16BE = BP.readInt16BE
                        arr.readInt32LE = BP.readInt32LE
                        arr.readInt32BE 
Download .txt
gitextract_y2fezz_f/

├── .changeset/
│   ├── README.md
│   └── config.json
├── .editorconfig
├── .eslintrc.js
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.md
│   │   ├── config.yml
│   │   └── documentation.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── lock.yml
│   ├── stale.yml
│   └── workflows/
│       ├── build_and_test.yml
│       ├── coveralls.yml
│       └── release.yml
├── .gitignore
├── .idea/
│   └── vcs.xml
├── .prettierignore
├── .prettierrc
├── .vscode/
│   ├── launch.json
│   └── settings.json
├── .watchmanconfig
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── docs/
│   ├── LINKS.md
│   ├── README.md
│   ├── about-this-documentation.md
│   ├── actions.md
│   ├── analyzing-reactivity.md
│   ├── api.md
│   ├── assets/
│   │   ├── action-state-view.excalidraw
│   │   ├── flow.excalidraw..excalidraw..excalidraw
│   │   └── getting-started-assets/
│   │       ├── javascripts/
│   │       │   ├── JSXTransformer.js
│   │       │   ├── codemirror/
│   │       │   │   ├── javascript/
│   │       │   │   │   ├── index.html
│   │       │   │   │   ├── javascript.js
│   │       │   │   │   ├── json-ld.html
│   │       │   │   │   ├── test.js
│   │       │   │   │   └── typescript.html
│   │       │   │   ├── lib/
│   │       │   │   │   ├── codemirror.css
│   │       │   │   │   └── codemirror.js
│   │       │   │   └── theme/
│   │       │   │       └── xq-light.css
│   │       │   ├── mobx-react.js
│   │       │   ├── mobx.umd.js
│   │       │   └── react-with-addons.js
│   │       ├── script.js
│   │       ├── style.css
│   │       └── stylesheets/
│   │           ├── github-light.css
│   │           └── stylesheet.css
│   ├── backers-sponsors.md
│   ├── best/
│   │   ├── debugging-mobx.md
│   │   ├── decorators.md
│   │   ├── store.md
│   │   └── what-does-mobx-react-to.md
│   ├── collection-utilities.md
│   ├── computeds-with-args.md
│   ├── computeds.md
│   ├── configuration.md
│   ├── custom-observables.md
│   ├── defining-data-stores.md
│   ├── enabling-decorators.md
│   ├── faq/
│   │   └── migrate-to-6.md
│   ├── installation.md
│   ├── intercept-and-observe.md
│   ├── intro/
│   │   ├── concepts.md
│   │   ├── how-to-read.md
│   │   └── installation.md
│   ├── lazy-observables.md
│   ├── migrating-from-4-or-5.md
│   ├── mobx-utils.md
│   ├── observable-state.md
│   ├── react/
│   │   ├── react-integration.md
│   │   └── react-performance.md
│   ├── react-integration.md
│   ├── react-optimizations.md
│   ├── reactions.md
│   ├── refguide/
│   │   ├── action.md
│   │   ├── api.md
│   │   ├── autorun.md
│   │   ├── computed-with-args.md
│   │   ├── computed.md
│   │   ├── configure.md
│   │   ├── extending.md
│   │   ├── mobx-utils.md
│   │   ├── modifiers.md
│   │   ├── object-api.md
│   │   ├── object.md
│   │   ├── observable.md
│   │   ├── observe.md
│   │   ├── on-become-observed.md
│   │   └── set.md
│   ├── styles/
│   │   └── website.css
│   ├── subclassing.md
│   ├── the-gist-of-mobx.md
│   └── understanding-reactivity.md
├── jest.base.config.js
├── jest.config.js
├── lerna.json
├── package.json
├── packages/
│   ├── eslint-plugin-mobx/
│   │   ├── .babelrc.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __tests__/
│   │   │   ├── exhaustive-make-observable.js
│   │   │   ├── missing-make-observable.js
│   │   │   ├── missing-observer.js
│   │   │   ├── no-anonymous-observer.js
│   │   │   ├── unconditional-make-observable.js
│   │   │   └── utils/
│   │   │       └── get-rule-tester.js
│   │   ├── jest.config-eslint-7.js
│   │   ├── jest.config-eslint-9.js
│   │   ├── jest.setup.js
│   │   ├── package.json
│   │   ├── preview/
│   │   │   ├── .eslintrc.js
│   │   │   ├── .gitignore
│   │   │   ├── make-observable.js
│   │   │   ├── missing-observer.js
│   │   │   ├── no-anonymous-observer.js
│   │   │   └── node_modules/
│   │   │       └── eslint-plugin-mobx/
│   │   │           └── index.js
│   │   ├── rollup.config.js
│   │   └── src/
│   │       ├── exhaustive-make-observable.js
│   │       ├── index.js
│   │       ├── missing-make-observable.js
│   │       ├── missing-observer.js
│   │       ├── no-anonymous-observer.js
│   │       ├── unconditional-make-observable.js
│   │       └── utils.js
│   ├── mobx/
│   │   ├── .flowconfig
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── __tests__/
│   │   │   ├── .babelrc
│   │   │   ├── decorators_20223/
│   │   │   │   ├── stage3-decorators.ts
│   │   │   │   └── tsconfig.json
│   │   │   ├── mixed-versions/
│   │   │   │   ├── mixed-versions.js
│   │   │   │   └── state-sharing.js
│   │   │   ├── perf/
│   │   │   │   ├── index.js
│   │   │   │   └── perf.js
│   │   │   ├── tsconfig.json
│   │   │   ├── v4/
│   │   │   │   ├── base/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   ├── array.js.snap
│   │   │   │   │   │   ├── extras.js.snap
│   │   │   │   │   │   ├── makereactive.js.snap
│   │   │   │   │   │   ├── object-api.js.snap
│   │   │   │   │   │   ├── observables.js.snap
│   │   │   │   │   │   └── spy.js.snap
│   │   │   │   │   ├── array.js
│   │   │   │   │   ├── autorun.js
│   │   │   │   │   ├── cycles.js
│   │   │   │   │   ├── extendObservable.js
│   │   │   │   │   ├── extras.js
│   │   │   │   │   ├── intercept.js
│   │   │   │   │   ├── jsconfig.json
│   │   │   │   │   ├── makereactive.js
│   │   │   │   │   ├── nested.js
│   │   │   │   │   ├── object-api.js
│   │   │   │   │   ├── observables.js
│   │   │   │   │   ├── observe.ts
│   │   │   │   │   ├── spy.js
│   │   │   │   │   ├── tojs.js
│   │   │   │   │   └── untracked.ts
│   │   │   │   └── mobx4.ts
│   │   │   └── v5/
│   │   │       ├── base/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   ├── action.js.snap
│   │   │       │   │   ├── extras.js.snap
│   │   │       │   │   ├── flow.js.snap
│   │   │       │   │   ├── makereactive.js.snap
│   │   │       │   │   ├── object-api.js.snap
│   │   │       │   │   ├── observables.js.snap
│   │   │       │   │   ├── proxies.js.snap
│   │   │       │   │   └── spy.js.snap
│   │   │       │   ├── action.js
│   │   │       │   ├── api.js
│   │   │       │   ├── array.js
│   │   │       │   ├── autorun.js
│   │   │       │   ├── autorunAsync.js
│   │   │       │   ├── babel-decorators.js
│   │   │       │   ├── babel-tests.js
│   │   │       │   ├── become-observed.ts
│   │   │       │   ├── cycles.js
│   │   │       │   ├── decorate.js
│   │   │       │   ├── errorhandling.js
│   │   │       │   ├── extendObservable.js
│   │   │       │   ├── extras.js
│   │   │       │   ├── flow.js
│   │   │       │   ├── intercept.js
│   │   │       │   ├── make-observable.ts
│   │   │       │   ├── makereactive.js
│   │   │       │   ├── map.js
│   │   │       │   ├── nested.js
│   │   │       │   ├── object-api-proxy.js
│   │   │       │   ├── object-api.js
│   │   │       │   ├── observables.js
│   │   │       │   ├── observe.ts
│   │   │       │   ├── proxies.js
│   │   │       │   ├── reaction.js
│   │   │       │   ├── set.js
│   │   │       │   ├── spy.js
│   │   │       │   ├── strict-mode.js
│   │   │       │   ├── tojs.js
│   │   │       │   ├── trace.ts
│   │   │       │   ├── typescript-decorators.ts
│   │   │       │   ├── typescript-tests.ts
│   │   │       │   └── untracked.ts
│   │   │       ├── flow/
│   │   │       │   └── test.js
│   │   │       └── utils/
│   │   │           └── test-utils.ts
│   │   ├── flow-typed/
│   │   │   └── mobx.js
│   │   ├── jest.config-decorators.js
│   │   ├── jest.config.js
│   │   ├── jest.projects.js
│   │   ├── jest.setup.ts
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   ├── perf.sh
│   │   │   └── prepublish.js
│   │   ├── src/
│   │   │   ├── api/
│   │   │   │   ├── action.ts
│   │   │   │   ├── annotation.ts
│   │   │   │   ├── autorun.ts
│   │   │   │   ├── become-observed.ts
│   │   │   │   ├── computed.ts
│   │   │   │   ├── configure.ts
│   │   │   │   ├── decorators.ts
│   │   │   │   ├── extendobservable.ts
│   │   │   │   ├── extras.ts
│   │   │   │   ├── flow.ts
│   │   │   │   ├── intercept-read.ts
│   │   │   │   ├── intercept.ts
│   │   │   │   ├── iscomputed.ts
│   │   │   │   ├── isobservable.ts
│   │   │   │   ├── makeObservable.ts
│   │   │   │   ├── object-api.ts
│   │   │   │   ├── observable.ts
│   │   │   │   ├── observe.ts
│   │   │   │   ├── tojs.ts
│   │   │   │   ├── trace.ts
│   │   │   │   ├── transaction.ts
│   │   │   │   └── when.ts
│   │   │   ├── core/
│   │   │   │   ├── action.ts
│   │   │   │   ├── atom.ts
│   │   │   │   ├── computedvalue.ts
│   │   │   │   ├── derivation.ts
│   │   │   │   ├── globalstate.ts
│   │   │   │   ├── observable.ts
│   │   │   │   ├── reaction.ts
│   │   │   │   └── spy.ts
│   │   │   ├── errors.ts
│   │   │   ├── global.d.ts
│   │   │   ├── internal.ts
│   │   │   ├── mobx.ts
│   │   │   ├── types/
│   │   │   │   ├── actionannotation.ts
│   │   │   │   ├── autoannotation.ts
│   │   │   │   ├── computedannotation.ts
│   │   │   │   ├── decorator_fills.ts
│   │   │   │   ├── dynamicobject.ts
│   │   │   │   ├── flowannotation.ts
│   │   │   │   ├── generic-abort-signal.ts
│   │   │   │   ├── intercept-utils.ts
│   │   │   │   ├── legacyobservablearray.ts
│   │   │   │   ├── listen-utils.ts
│   │   │   │   ├── modifiers.ts
│   │   │   │   ├── observableannotation.ts
│   │   │   │   ├── observablearray.ts
│   │   │   │   ├── observablemap.ts
│   │   │   │   ├── observableobject.ts
│   │   │   │   ├── observableset.ts
│   │   │   │   ├── observablevalue.ts
│   │   │   │   ├── overrideannotation.ts
│   │   │   │   └── type-utils.ts
│   │   │   └── utils/
│   │   │       ├── comparer.ts
│   │   │       ├── eq.ts
│   │   │       ├── global.ts
│   │   │       ├── iterable.ts
│   │   │       └── utils.ts
│   │   ├── tsconfig.json
│   │   └── tsdx.config.js
│   ├── mobx-react/
│   │   ├── .browserlistrc
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __mocks__/
│   │   │   └── react-native.js
│   │   ├── __tests__/
│   │   │   ├── .eslintrc.yaml
│   │   │   ├── Provider.test.tsx
│   │   │   ├── __snapshots__/
│   │   │   │   ├── hooks.test.tsx.snap
│   │   │   │   ├── observer.test.tsx.snap
│   │   │   │   └── stateless.test.tsx.snap
│   │   │   ├── context.test.tsx
│   │   │   ├── disposeOnUnmount.test.tsx
│   │   │   ├── finalizationRegistry.tsx
│   │   │   ├── hooks.test.tsx
│   │   │   ├── inject.test.tsx
│   │   │   ├── issue21.test.tsx
│   │   │   ├── issue806.test.tsx
│   │   │   ├── misc.test.tsx
│   │   │   ├── observer.test.tsx
│   │   │   ├── propTypes.test.ts
│   │   │   ├── stateless.test.tsx
│   │   │   ├── timerBasedFinalizationRegistry.tsx
│   │   │   ├── transactions.test.tsx
│   │   │   ├── tsconfig.json
│   │   │   └── utils/
│   │   │       ├── ErrorCatcher.tsx
│   │   │       ├── compile-ts.tsx
│   │   │       ├── killFinalizationRegistry.ts
│   │   │       └── withConsole.ts
│   │   ├── batchingForReactDom.js
│   │   ├── batchingForReactNative.js
│   │   ├── batchingOptOut.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Provider.tsx
│   │   │   ├── disposeOnUnmount.ts
│   │   │   ├── globals.d.ts
│   │   │   ├── index.ts
│   │   │   ├── inject.ts
│   │   │   ├── observer.tsx
│   │   │   ├── observerClass.ts
│   │   │   ├── propTypes.ts
│   │   │   ├── types/
│   │   │   │   ├── IReactComponent.ts
│   │   │   │   ├── IStoresToProps.ts
│   │   │   │   ├── IValueMap.ts
│   │   │   │   └── IWrappedComponent.ts
│   │   │   └── utils/
│   │   │       └── utils.ts
│   │   ├── tsconfig.json
│   │   ├── tsconfig.test.json
│   │   └── tsdx.config.js
│   ├── mobx-react-lite/
│   │   ├── .eslintignore
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __tests__/
│   │   │   ├── .eslintrc.yaml
│   │   │   ├── ObserverComponent.test.tsx
│   │   │   ├── __snapshots__/
│   │   │   │   ├── observer.test.tsx.snap
│   │   │   │   ├── printDebugValue.test.ts.snap
│   │   │   │   ├── useAsObservableSource.deprecated.test.tsx.snap
│   │   │   │   └── useLocalStore.deprecated.test.tsx.snap
│   │   │   ├── api.test.ts
│   │   │   ├── assertEnvironment.test.ts
│   │   │   ├── enforceActions.test.tsx
│   │   │   ├── observer.test.tsx
│   │   │   ├── printDebugValue.test.ts
│   │   │   ├── strictAndConcurrentMode.test.tsx
│   │   │   ├── strictAndConcurrentModeUsingFinalizationRegistry.test.tsx
│   │   │   ├── strictAndConcurrentModeUsingTimers.test.tsx
│   │   │   ├── transactions.test.tsx
│   │   │   ├── tsconfig.json
│   │   │   ├── useAsObservableSource.deprecated.test.tsx
│   │   │   ├── useAsObservableSource.test.tsx
│   │   │   ├── useLocalObservable.test.tsx
│   │   │   ├── useLocalStore.deprecated.test.tsx
│   │   │   ├── utils/
│   │   │   │   └── killFinalizationRegistry.ts
│   │   │   └── utils.ts
│   │   ├── batchingForReactDom.js
│   │   ├── batchingForReactNative.js
│   │   ├── batchingOptOut.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── ObserverComponent.ts
│   │   │   ├── index.ts
│   │   │   ├── observer.ts
│   │   │   ├── staticRendering.ts
│   │   │   ├── useAsObservableSource.ts
│   │   │   ├── useLocalObservable.ts
│   │   │   ├── useLocalStore.ts
│   │   │   ├── useObserver.ts
│   │   │   └── utils/
│   │   │       ├── UniversalFinalizationRegistry.ts
│   │   │       ├── assertEnvironment.ts
│   │   │       ├── observerBatching.ts
│   │   │       ├── observerFinalizationRegistry.ts
│   │   │       ├── printDebugValue.ts
│   │   │       ├── reactBatchedUpdates.native.ts
│   │   │       ├── reactBatchedUpdates.ts
│   │   │       └── utils.ts
│   │   ├── tsconfig.build.cjs.json
│   │   ├── tsconfig.build.es.json
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   ├── tsconfig.test.json
│   │   └── tsdx.config.js
│   └── mobx-undecorate/
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── README.md
│       ├── __tests__/
│       │   ├── cli.spec.tsx
│       │   ├── fixtures/
│       │   │   └── .gitignore
│       │   ├── tsconfig.json
│       │   └── undecorate.spec.ts
│       ├── cli.js
│       ├── jest.config.js
│       ├── package.json
│       ├── src/
│       │   └── undecorate.ts
│       └── tsconfig.json
├── scripts/
│   └── build.js
├── sponsors.md
├── tsconfig.json
├── tsconfig.test.json
└── website/
    ├── core/
    │   └── Footer.js
    ├── i18n/
    │   └── en.json
    ├── package.json
    ├── sidebars.json
    ├── siteConfig.js
    └── static/
        ├── css/
        │   └── custom.css
        ├── getting-started.html
        ├── index.html
        └── js/
            └── scripts.js
Download .txt
Showing preview only (406K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3504 symbols across 173 files)

FILE: docs/assets/getting-started-assets/javascripts/JSXTransformer.js
  function s (line 25) | function s(o, u) {
  function transformReact (line 93) | function transformReact(source, options) {
  function exec (line 114) | function exec(source, options) {
  function createSourceCodeErrorMessage (line 132) | function createSourceCodeErrorMessage(code, e) {
  function transformCode (line 177) | function transformCode(code, url, options) {
  function run (line 233) | function run(code, url, options) {
  function load (line 246) | function load(url, successCallback, errorCallback) {
  function loadScripts (line 279) | function loadScripts(scripts) {
  function runScripts (line 356) | function runScripts() {
  function processOptions (line 448) | function processOptions(opts) {
  function innerTransform (line 472) | function innerTransform(input, options) {
  function Buffer (line 573) | function Buffer(subject, encoding) {
  function SlowBuffer (line 641) | function SlowBuffer(subject, encoding) {
  function arrayIndexOf (line 851) | function arrayIndexOf(arr, val, byteOffset) {
  function hexWrite (line 883) | function hexWrite(buf, string, offset, length) {
  function utf8Write (line 910) | function utf8Write(buf, string, offset, length) {
  function asciiWrite (line 920) | function asciiWrite(buf, string, offset, length) {
  function binaryWrite (line 925) | function binaryWrite(buf, string, offset, length) {
  function base64Write (line 929) | function base64Write(buf, string, offset, length) {
  function utf16leWrite (line 934) | function utf16leWrite(buf, string, offset, length) {
  function base64Slice (line 1014) | function base64Slice(buf, start, end) {
  function utf8Slice (line 1022) | function utf8Slice(buf, start, end) {
  function asciiSlice (line 1039) | function asciiSlice(buf, start, end) {
  function binarySlice (line 1049) | function binarySlice(buf, start, end) {
  function hexSlice (line 1059) | function hexSlice(buf, start, end) {
  function utf16leSlice (line 1072) | function utf16leSlice(buf, start, end) {
  function checkOffset (line 1121) | function checkOffset(offset, ext, length) {
  function checkInt (line 1296) | function checkInt(buf, value, offset, ext, max, min) {
  function objectWriteUInt16 (line 1371) | function objectWriteUInt16(buf, value, offset, littleEndian) {
  function objectWriteUInt32 (line 1414) | function objectWriteUInt32(buf, value, offset, littleEndian) {
  function checkIEEE754 (line 1586) | function checkIEEE754(buf, value, offset, ext, max, min) {
  function writeFloat (line 1593) | function writeFloat(buf, value, offset, littleEndian, noAssert) {
  function writeDouble (line 1616) | function writeDouble(buf, value, offset, littleEndian, noAssert) {
  function base64clean (line 1813) | function base64clean(str) {
  function stringtrim (line 1825) | function stringtrim(str) {
  function isArrayish (line 1830) | function isArrayish(subject) {
  function toHex (line 1840) | function toHex(n) {
  function utf8ToBytes (line 1845) | function utf8ToBytes(string, units) {
  function asciiToBytes (line 1926) | function asciiToBytes(str) {
  function utf16leToBytes (line 1935) | function utf16leToBytes(str, units) {
  function base64ToBytes (line 1951) | function base64ToBytes(str) {
  function blitBuffer (line 1955) | function blitBuffer(src, dst, offset, length) {
  function decodeUtf8Char (line 1963) | function decodeUtf8Char(str) {
  function decode (line 1990) | function decode(elt) {
  function b64ToByteArray (line 2000) | function b64ToByteArray(b64) {
  function uint8ToBase64 (line 2059) | function uint8ToBase64(uint8) {
  function normalizeArray (line 2278) | function normalizeArray(parts, allowAboveRoot) {
  function trim (line 2395) | function trim(arr) {
  function filter (line 2466) | function filter(xs, f) {
  function drainQueue (line 2497) | function drainQueue() {
  function noop (line 2529) | function noop() {}
  function assert (line 2940) | function assert(condition, message) {
  function StringMap (line 2947) | function StringMap() {
  function isDecimalDigit (line 2972) | function isDecimalDigit(ch) {
  function isHexDigit (line 2976) | function isHexDigit(ch) {
  function isOctalDigit (line 2980) | function isOctalDigit(ch) {
  function isWhiteSpace (line 2986) | function isWhiteSpace(ch) {
  function isLineTerminator (line 3002) | function isLineTerminator(ch) {
  function isIdentifierStart (line 3008) | function isIdentifierStart(ch) {
  function isIdentifierPart (line 3020) | function isIdentifierPart(ch) {
  function isFutureReservedWord (line 3035) | function isFutureReservedWord(id) {
  function isStrictModeReservedWord (line 3049) | function isStrictModeReservedWord(id) {
  function isRestrictedWord (line 3066) | function isRestrictedWord(id) {
  function isKeyword (line 3072) | function isKeyword(id) {
  function addComment (line 3136) | function addComment(type, value, start, end, loc) {
  function skipSingleLineComment (line 3166) | function skipSingleLineComment() {
  function skipMultiLineComment (line 3208) | function skipMultiLineComment() {
  function skipComment (line 3257) | function skipComment() {
  function scanHexEscape (line 3293) | function scanHexEscape(prefix) {
  function scanUnicodeCodePointEscape (line 3311) | function scanUnicodeCodePointEscape() {
  function getEscapedIdentifier (line 3343) | function getEscapedIdentifier() {
  function getIdentifier (line 3388) | function getIdentifier() {
  function scanIdentifier (line 3409) | function scanIdentifier() {
  function scanPunctuator (line 3445) | function scanPunctuator() {
  function scanHexLiteral (line 3669) | function scanHexLiteral(start) {
  function scanBinaryLiteral (line 3696) | function scanBinaryLiteral(start) {
  function scanOctalLiteral (line 3731) | function scanOctalLiteral(prefix, start) {
  function scanNumericLiteral (line 3772) | function scanNumericLiteral() {
  function scanStringLiteral (line 3854) | function scanStringLiteral() {
  function scanTemplate (line 3983) | function scanTemplate() {
  function scanTemplateElement (line 4126) | function scanTemplateElement(option) {
  function testRegExp (line 4145) | function testRegExp(pattern, flags) {
  function scanRegExpBody (line 4185) | function scanRegExpBody() {
  function scanRegExpFlags (line 4232) | function scanRegExpFlags() {
  function scanRegExp (line 4277) | function scanRegExp() {
  function isIdentifierName (line 4313) | function isIdentifierName(token) {
  function advanceSlash (line 4322) | function advanceSlash() {
  function advance (line 4387) | function advance() {
  function lex (line 4454) | function lex() {
  function peek (line 4471) | function peek() {
  function lookahead2 (line 4483) | function lookahead2() {
  function rewind (line 4512) | function rewind(token) {
  function markerCreate (line 4519) | function markerCreate() {
  function markerCreatePreserveWhitespace (line 4527) | function markerCreatePreserveWhitespace() {
  function processComment (line 4534) | function processComment(node) {
  function markerApply (line 4598) | function markerApply(marker, node) {
  function peekLineTerminator (line 5586) | function peekLineTerminator() {
  function throwError (line 5603) | function throwError(token, messageFormat) {
  function throwErrorTolerant (line 5627) | function throwErrorTolerant() {
  function throwUnexpected (line 5641) | function throwUnexpected(token) {
  function expect (line 5682) | function expect(value) {
  function expectKeyword (line 5692) | function expectKeyword(keyword, contextual) {
  function expectContextualKeyword (line 5705) | function expectContextualKeyword(keyword) {
  function match (line 5711) | function match(value) {
  function matchKeyword (line 5717) | function matchKeyword(keyword, contextual) {
  function matchContextualKeyword (line 5724) | function matchContextualKeyword(keyword) {
  function matchAssign (line 5730) | function matchAssign() {
  function matchYield (line 5757) | function matchYield() {
  function matchAsync (line 5761) | function matchAsync() {
  function matchAwait (line 5774) | function matchAwait() {
  function consumeSemicolon (line 5778) | function consumeSemicolon() {
  function isLeftHandSide (line 5813) | function isLeftHandSide(expr) {
  function isAssignableLeftHandSide (line 5820) | function isAssignableLeftHandSide(expr) {
  function parseArrayInitialiser (line 5830) | function parseArrayInitialiser() {
  function parsePropertyFunction (line 5911) | function parsePropertyFunction(options) {
  function parsePropertyMethodFunction (line 5953) | function parsePropertyMethodFunction(options) {
  function parseObjectPropertyKey (line 5980) | function parseObjectPropertyKey() {
  function parseObjectProperty (line 6012) | function parseObjectProperty() {
  function parseObjectSpreadProperty (line 6232) | function parseObjectSpreadProperty() {
  function getFieldName (line 6241) | function getFieldName(key) {
  function parseObjectInitialiser (line 6249) | function parseObjectInitialiser() {
  function parseTemplateElement (line 6321) | function parseTemplateElement(option) {
  function parseTemplateLiteral (line 6336) | function parseTemplateLiteral() {
  function parseGroupExpression (line 6360) | function parseGroupExpression() {
  function matchAsyncFuncExprOrDecl (line 6384) | function matchAsyncFuncExprOrDecl() {
  function parsePrimaryExpression (line 6399) | function parsePrimaryExpression() {
  function parseArguments (line 6485) | function parseArguments() {
  function parseSpreadOrAssignmentExpression (line 6511) | function parseSpreadOrAssignmentExpression() {
  function parseNonComputedProperty (line 6523) | function parseNonComputedProperty() {
  function parseNonComputedMember (line 6534) | function parseNonComputedMember() {
  function parseComputedMember (line 6540) | function parseComputedMember() {
  function parseNewExpression (line 6552) | function parseNewExpression() {
  function parseLeftHandSideExpressionAllowCall (line 6564) | function parseLeftHandSideExpressionAllowCall() {
  function parseLeftHandSideExpression (line 6617) | function parseLeftHandSideExpression() {
  function parsePostfixExpression (line 6660) | function parsePostfixExpression() {
  function parseUnaryExpression (line 6695) | function parseUnaryExpression() {
  function binaryPrecedence (line 6763) | function binaryPrecedence(token, allowIn) {
  function parseBinaryExpression (line 6842) | function parseBinaryExpression() {
  function parseConditionalExpression (line 6919) | function parseConditionalExpression() {
  function reinterpretAsAssignmentBindingPattern (line 6953) | function reinterpretAsAssignmentBindingPattern(expr) {
  function reinterpretAsDestructuredParameter (line 7004) | function reinterpretAsDestructuredParameter(options, expr) {
  function reinterpretAsCoverFormalsList (line 7047) | function reinterpretAsCoverFormalsList(expressions) {
  function parseArrowFunctionExpression (line 7112) | function parseArrowFunctionExpression(options, marker) {
  function parseAssignmentExpression (line 7148) | function parseAssignmentExpression() {
  function parseExpression (line 7281) | function parseExpression() {
  function parseStatementList (line 7322) | function parseStatementList() {
  function parseBlock (line 7340) | function parseBlock() {
  function parseTypeParameterDeclaration (line 7355) | function parseTypeParameterDeclaration() {
  function parseTypeParameterInstantiation (line 7374) | function parseTypeParameterInstantiation() {
  function parseObjectTypeIndexer (line 7398) | function parseObjectTypeIndexer(marker, isStatic) {
  function parseObjectTypeMethodish (line 7415) | function parseObjectTypeMethodish(marker) {
  function parseObjectTypeMethod (line 7451) | function parseObjectTypeMethod(marker, isStatic, key) {
  function parseObjectTypeCallProperty (line 7462) | function parseObjectTypeCallProperty(marker, isStatic) {
  function parseObjectType (line 7473) | function parseObjectType(allowStatic) {
  function parseGenericType (line 7556) | function parseGenericType() {
  function parseVoidType (line 7584) | function parseVoidType() {
  function parseTypeofType (line 7590) | function parseTypeofType() {
  function parseTupleType (line 7601) | function parseTupleType() {
  function parseFunctionTypeParam (line 7617) | function parseFunctionTypeParam() {
  function parseFunctionTypeParams (line 7635) | function parseFunctionTypeParams() {
  function parsePrimaryType (line 7654) | function parsePrimaryType() {
  function parsePostfixType (line 7794) | function parsePostfixType() {
  function parsePrefixType (line 7805) | function parsePrefixType() {
  function parseIntersectionType (line 7817) | function parseIntersectionType() {
  function parseUnionType (line 7836) | function parseUnionType() {
  function parseType (line 7851) | function parseType() {
  function parseTypeAnnotation (line 7862) | function parseTypeAnnotation() {
  function parseVariableIdentifier (line 7872) | function parseVariableIdentifier() {
  function parseTypeAnnotatableIdentifier (line 7883) | function parseTypeAnnotatableIdentifier(
  function parseVariableDeclaration (line 7909) | function parseVariableDeclaration(kind) {
  function parseVariableDeclarationList (line 7953) | function parseVariableDeclarationList(kind) {
  function parseVariableStatement (line 7967) | function parseVariableStatement() {
  function parseConstLetDeclaration (line 7987) | function parseConstLetDeclaration(kind) {
  function parseModuleSpecifier (line 8005) | function parseModuleSpecifier() {
  function parseExportBatchSpecifier (line 8017) | function parseExportBatchSpecifier() {
  function parseExportSpecifier (line 8023) | function parseExportSpecifier() {
  function parseExportDeclaration (line 8043) | function parseExportDeclaration() {
  function parseImportSpecifier (line 8216) | function parseImportSpecifier() {
  function parseNamedImports (line 8231) | function parseNamedImports() {
  function parseImportDefaultSpecifier (line 8244) | function parseImportDefaultSpecifier() {
  function parseImportNamespaceSpecifier (line 8254) | function parseImportNamespaceSpecifier() {
  function parseImportDeclaration (line 8269) | function parseImportDeclaration() {
  function parseEmptyStatement (line 8345) | function parseEmptyStatement() {
  function parseExpressionStatement (line 8353) | function parseExpressionStatement() {
  function parseIfStatement (line 8362) | function parseIfStatement() {
  function parseDoWhileStatement (line 8393) | function parseDoWhileStatement() {
  function parseWhileStatement (line 8423) | function parseWhileStatement() {
  function parseForVariableDeclaration (line 8447) | function parseForVariableDeclaration() {
  function parseForStatement (line 8458) | function parseForStatement(opts) {
  function parseContinueStatement (line 8577) | function parseContinueStatement() {
  function parseBreakStatement (line 8621) | function parseBreakStatement() {
  function parseReturnStatement (line 8665) | function parseReturnStatement() {
  function parseWithStatement (line 8704) | function parseWithStatement() {
  function parseSwitchCase (line 8728) | function parseSwitchCase() {
  function parseSwitchStatement (line 8757) | function parseSwitchStatement() {
  function parseThrowStatement (line 8815) | function parseThrowStatement() {
  function parseCatchClause (line 8834) | function parseCatchClause() {
  function parseTryStatement (line 8861) | function parseTryStatement() {
  function parseDebuggerStatement (line 8892) | function parseDebuggerStatement() {
  function parseStatement (line 8903) | function parseStatement() {
  function parseConciseBody (line 8994) | function parseConciseBody() {
  function parseFunctionSourceElements (line 9001) | function parseFunctionSourceElements() {
  function validateParam (line 9081) | function validateParam(options, param, name) {
  function parseParam (line 9106) | function parseParam(options) {
  function parseParams (line 9170) | function parseParams(firstRestricted) {
  function parseFunctionDeclaration (line 9207) | function parseFunctionDeclaration() {
  function parseFunctionExpression (line 9299) | function parseFunctionExpression() {
  function parseYieldExpression (line 9395) | function parseYieldExpression() {
  function parseAwaitExpression (line 9416) | function parseAwaitExpression() {
  function specialMethod (line 9431) | function specialMethod(methodDefinition) {
  function parseMethodDefinition (line 9439) | function parseMethodDefinition(key, isStatic, generator, computed) {
  function parseClassProperty (line 9529) | function parseClassProperty(key, computed, isStatic) {
  function parseClassElement (line 9543) | function parseClassElement() {
  function parseClassBody (line 9592) | function parseClassBody() {
  function parseClassImplements (line 9654) | function parseClassImplements() {
  function parseClassExpression (line 9686) | function parseClassExpression() {
  function parseClassDeclaration (line 9742) | function parseClassDeclaration() {
  function parseSourceElement (line 9793) | function parseSourceElement() {
  function parseProgramElement (line 9856) | function parseProgramElement() {
  function parseProgramElements (line 9873) | function parseProgramElements() {
  function parseProgram (line 9918) | function parseProgram() {
  function getQualifiedJSXName (line 10185) | function getQualifiedJSXName(object) {
  function isJSXIdentifierStart (line 10204) | function isJSXIdentifierStart(ch) {
  function isJSXIdentifierPart (line 10209) | function isJSXIdentifierPart(ch) {
  function scanJSXIdentifier (line 10214) | function scanJSXIdentifier() {
  function scanJSXEntity (line 10237) | function scanJSXEntity() {
  function scanJSXText (line 10279) | function scanJSXText(stopChars) {
  function scanJSXStringLiteral (line 10314) | function scanJSXStringLiteral() {
  function advanceJSXChild (line 10343) | function advanceJSXChild() {
  function parseJSXIdentifier (line 10354) | function parseJSXIdentifier() {
  function parseJSXNamespacedName (line 10366) | function parseJSXNamespacedName() {
  function parseJSXMemberExpression (line 10381) | function parseJSXMemberExpression() {
  function parseJSXElementName (line 10396) | function parseJSXElementName() {
  function parseJSXAttributeName (line 10407) | function parseJSXAttributeName() {
  function parseJSXAttributeValue (line 10415) | function parseJSXAttributeValue() {
  function parseJSXEmptyExpression (line 10437) | function parseJSXEmptyExpression() {
  function parseJSXExpressionContainer (line 10445) | function parseJSXExpressionContainer() {
  function parseJSXSpreadAttribute (line 10475) | function parseJSXSpreadAttribute() {
  function parseJSXAttribute (line 10502) | function parseJSXAttribute() {
  function parseJSXChild (line 10525) | function parseJSXChild() {
  function parseJSXClosingElement (line 10540) | function parseJSXClosingElement() {
  function parseJSXOpeningElement (line 10561) | function parseJSXOpeningElement() {
  function parseJSXElement (line 10606) | function parseJSXElement() {
  function parseTypeAlias (line 10661) | function parseTypeAlias() {
  function parseInterfaceExtends (line 10680) | function parseInterfaceExtends() {
  function parseInterfaceish (line 10696) | function parseInterfaceish(marker, allowStatic) {
  function parseInterface (line 10729) | function parseInterface() {
  function parseDeclareClass (line 10741) | function parseDeclareClass() {
  function parseDeclareFunction (line 10752) | function parseDeclareFunction() {
  function parseDeclareVariable (line 10803) | function parseDeclareVariable() {
  function parseDeclareModule (line 10815) | function parseDeclareModule() {
  function collectToken (line 10864) | function collectToken() {
  function collectRegex (line 10906) | function collectRegex() {
  function filterTokenLocation (line 10949) | function filterTokenLocation() {
  function patch (line 10979) | function patch() {
  function unpatch (line 10989) | function unpatch() {
  function extend (line 10998) | function extend(object, properties) {
  function tokenize (line 11019) | function tokenize(code, options) {
  function parse (line 11109) | function parse(code, options) {
  function ArraySet (line 11374) | function ArraySet() {
  function toVLQSigned (line 11529) | function toVLQSigned(aValue) {
  function fromVLQSigned (line 11539) | function fromVLQSigned(aValue) {
  function recursiveSearch (line 11665) | function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) {
  function SourceMapConsumer (line 11777) | function SourceMapConsumer(aSourceMap) {
  function SourceMapGenerator (line 12282) | function SourceMapGenerator(aArgs) {
  function SourceNode (line 12712) | function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  function addMappingWithCode (line 12820) | function addMappingWithCode(mapping, code) {
  function getArg (line 13105) | function getArg(aArgs, aName, aDefaultValue) {
  function urlParse (line 13119) | function urlParse(aUrl) {
  function urlGenerate (line 13134) | function urlGenerate(aParsedUrl) {
  function join (line 13152) | function join(aRoot, aPath) {
  function toSetString (line 13177) | function toSetString(aStr) {
  function fromSetString (line 13182) | function fromSetString(aStr) {
  function relative (line 13187) | function relative(aRoot, aPath) {
  function strcmp (line 13201) | function strcmp(aStr1, aStr2) {
  function compareByOriginalPositions (line 13215) | function compareByOriginalPositions(
  function compareByGeneratedPositions (line 13260) | function compareByGeneratedPositions(
  function amdefine (line 13322) | function amdefine(module, requireFn) {
  function extract (line 13662) | function extract(contents) {
  function parse (line 13681) | function parse(docblock) {
  function parseAsObject (line 13712) | function parseAsObject(docblock) {
  function _nodeIsClosureScopeBoundary (line 13761) | function _nodeIsClosureScopeBoundary(node, parentNode) {
  function _nodeIsBlockScopeBoundary (line 13781) | function _nodeIsBlockScopeBoundary(node, parentNode) {
  function traverse (line 13797) | function traverse(node, path, state) {
  function collectClosureIdentsAndTraverse (line 13926) | function collectClosureIdentsAndTraverse(node, path, state) {
  function collectBlockIdentsAndTraverse (line 13936) | function collectBlockIdentsAndTraverse(node, path, state) {
  function visitLocalClosureIdentifiers (line 13946) | function visitLocalClosureIdentifiers(node, path, state) {
  function visitLocalBlockIdentifiers (line 13980) | function visitLocalBlockIdentifiers(node, path, state) {
  function walker (line 13987) | function walker(node, path, state) {
  function getAstForSource (line 13998) | function getAstForSource(source, options) {
  function transform (line 14021) | function transform(visitors, source, options) {
  function createState (line 14090) | function createState(source, rootNode, transformOptions) {
  function updateState (line 14242) | function updateState(state, update) {
  function catchup (line 14259) | function catchup(end, state, contentTransformer) {
  function getNodeSourceText (line 14322) | function getNodeSourceText(node, state) {
  function _replaceNonWhite (line 14326) | function _replaceNonWhite(value) {
  function _stripNonWhite (line 14333) | function _stripNonWhite(value) {
  function getNextSyntacticCharOffset (line 14349) | function getNextSyntacticCharOffset(char, state) {
  function catchupWhiteOut (line 14398) | function catchupWhiteOut(end, state) {
  function catchupWhiteSpace (line 14405) | function catchupWhiteSpace(end, state) {
  function stripNonNewline (line 14413) | function stripNonNewline(value) {
  function catchupNewlines (line 14425) | function catchupNewlines(end, state) {
  function move (line 14435) | function move(end, state) {
  function append (line 14461) | function append(str, state) {
  function updateIndent (line 14493) | function updateIndent(str, state) {
  function indentBefore (line 14521) | function indentBefore(start, state) {
  function getDocblock (line 14534) | function getDocblock(state) {
  function identWithinLexicalScope (line 14544) | function identWithinLexicalScope(identName, state, stopBeforeNode) {
  function identInLocalScope (line 14560) | function identInLocalScope(identName, state) {
  function initScopeMetadata (line 14569) | function initScopeMetadata(boundaryNode, path, node) {
  function declareIdentInLocalScope (line 14577) | function declareIdentInLocalScope(identName, metaData, state) {
  function getLexicalBindingMetadata (line 14586) | function getLexicalBindingMetadata(identName, state) {
  function getLocalBindingMetadata (line 14597) | function getLocalBindingMetadata(identName, state) {
  function analyzeAndTraverse (line 14612) | function analyzeAndTraverse(analyzer, traverser, node, path, state) {
  function getOrderedChildren (line 14642) | function getOrderedChildren(node) {
  function enqueueNodeWithStartIndex (line 14669) | function enqueueNodeWithStartIndex(queue, node) {
  function containsChildOfType (line 14688) | function containsChildOfType(node, type) {
  function containsChildMatching (line 14694) | function containsChildMatching(node, matcher) {
  function getBoundaryNode (line 14717) | function getBoundaryNode(path) {
  function getTempVar (line 14729) | function getTempVar(tempVarIndex) {
  function injectTempVar (line 14733) | function injectTempVar(state) {
  function injectTempVarDeclarations (line 14739) | function injectTempVarDeclarations(state, index) {
  function visitArrowFunction (line 14833) | function visitArrowFunction(traverse, node, path, state) {
  function renderParams (line 14882) | function renderParams(traverse, node, path, state) {
  function isParensFreeSingleParam (line 14896) | function isParensFreeSingleParam(node, state) {
  function renderExpressionBody (line 14900) | function renderExpressionBody(traverse, node, path, state) {
  function renderStatementBody (line 14928) | function renderStatementBody(traverse, node, path, state) {
  function process (line 14965) | function process(traverse, node, path, state) {
  function visitCallSpread (line 14971) | function visitCallSpread(traverse, node, path, state) {
  function resetSymbols (line 15092) | function resetSymbols() {
  function _generateAnonymousClassName (line 15104) | function _generateAnonymousClassName(state) {
  function _getMungedName (line 15116) | function _getMungedName(identName, state) {
  function _getSuperClassInfo (line 15149) | function _getSuperClassInfo(node, state) {
  function _isConstructorMethod (line 15176) | function _isConstructorMethod(classElement) {
  function _shouldMungeIdentifier (line 15189) | function _shouldMungeIdentifier(node, state) {
  function visitClassMethod (line 15203) | function visitClassMethod(traverse, node, path, state) {
  function visitClassFunctionExpression (line 15235) | function visitClassFunctionExpression(traverse, node, path, state) {
  function visitClassMethodParam (line 15362) | function visitClassMethodParam(traverse, node, path, state) {
  function _renderClassBody (line 15391) | function _renderClassBody(traverse, node, path, state) {
  function visitClassDeclaration (line 15509) | function visitClassDeclaration(traverse, node, path, state) {
  function visitClassExpression (line 15533) | function visitClassExpression(traverse, node, path, state) {
  function visitPrivateIdentifier (line 15561) | function visitPrivateIdentifier(traverse, node, path, state) {
  function visitSuperCallExpression (line 15623) | function visitSuperCallExpression(traverse, node, path, state) {
  function visitSuperMemberExpression (line 15687) | function visitSuperMemberExpression(traverse, node, path, state) {
  function visitStructuredVariable (line 15772) | function visitStructuredVariable(traverse, node, path, state) {
  function isStructuredPattern (line 15791) | function isStructuredPattern(node) {
  function getDestructuredComponents (line 15799) | function getDestructuredComponents(node, state) {
  function getPatternItems (line 15858) | function getPatternItems(node) {
  function getPatternItemAccessor (line 15862) | function getPatternItemAccessor(node, patternItem, tmpIndex, idx) {
  function getPatternItemValue (line 15877) | function getPatternItemValue(node, patternItem) {
  function visitStructuredAssignment (line 15888) | function visitStructuredAssignment(traverse, node, path, state) {
  function visitStructuredParameter (line 15926) | function visitStructuredParameter(traverse, node, path, state) {
  function getParamIndex (line 15932) | function getParamIndex(paramNode, path) {
  function isFunctionNode (line 15951) | function isFunctionNode(node) {
  function visitFunctionBodyForStructuredParameter (line 15966) | function visitFunctionBodyForStructuredParameter(traverse, node, path, s...
  function renderDestructuredComponents (line 15982) | function renderDestructuredComponents(funcNode, state) {
  function visitObjectConciseMethod (line 16056) | function visitObjectConciseMethod(traverse, node, path, state) {
  function visitObjectLiteralShortNotation (line 16129) | function visitObjectLiteralShortNotation(traverse, node, path, state) {
  function _nodeIsFunctionWithRestParam (line 16188) | function _nodeIsFunctionWithRestParam(node) {
  function visitFunctionParamsWithRestParam (line 16197) | function visitFunctionParamsWithRestParam(traverse, node, path, state) {
  function renderRestParamSetup (line 16227) | function renderRestParamSetup(functionNode, state) {
  function visitFunctionBodyWithRestParam (line 16254) | function visitFunctionBodyWithRestParam(traverse, node, path, state) {
  function visitTemplateLiteral (line 16307) | function visitTemplateLiteral(traverse, node, path, state) {
  function visitTaggedTemplateExpression (line 16366) | function visitTaggedTemplateExpression(traverse, node, path, state) {
  function getCookedValue (line 16425) | function getCookedValue(templateElement) {
  function getRawValue (line 16429) | function getRawValue(templateElement) {
  function getPropertyNames (line 16480) | function getPropertyNames(properties) {
  function getRestFunctionCall (line 16496) | function getRestFunctionCall(source, exclusion) {
  function getSimpleShallowCopy (line 16500) | function getSimpleShallowCopy(accessorExpression) {
  function renderRestExpression (line 16507) | function renderRestExpression(accessorExpression, excludedProperties) {
  function visitObjectLiteralSpread (line 16542) | function visitObjectLiteralSpread(traverse, node, path, state) {
  function visitProperty (line 16772) | function visitProperty(traverse, node, path, state) {
  function visitMemberExpression (line 16793) | function visitMemberExpression(traverse, node, path, state) {
  function _isFunctionNode (line 16823) | function _isFunctionNode(node) {
  function visitClassProperty (line 16831) | function visitClassProperty(traverse, node, path, state) {
  function visitTypeAlias (line 16840) | function visitTypeAlias(traverse, node, path, state) {
  function visitTypeCast (line 16848) | function visitTypeCast(traverse, node, path, state) {
  function visitInterfaceDeclaration (line 16861) | function visitInterfaceDeclaration(traverse, node, path, state) {
  function visitDeclare (line 16869) | function visitDeclare(traverse, node, path, state) {
  function visitFunctionParametricAnnotation (line 16884) | function visitFunctionParametricAnnotation(traverse, node, path, state) {
  function visitFunctionReturnAnnotation (line 16898) | function visitFunctionReturnAnnotation(traverse, node, path, state) {
  function visitOptionalFunctionParameterAnnotation (line 16907) | function visitOptionalFunctionParameterAnnotation(traverse, node, path, ...
  function visitTypeAnnotatedIdentifier (line 16921) | function visitTypeAnnotatedIdentifier(traverse, node, path, state) {
  function visitTypeAnnotatedObjectOrArrayPattern (line 16930) | function visitTypeAnnotatedObjectOrArrayPattern(traverse, node, path, st...
  function visitMethod (line 16952) | function visitMethod(traverse, node, path, state) {
  function visitImportType (line 16976) | function visitImportType(traverse, node, path, state) {
  function renderJSXLiteral (line 17016) | function renderJSXLiteral(object, isLast, state, start, end) {
  function renderJSXExpressionContainer (line 17081) | function renderJSXExpressionContainer(traverse, object, isLast, path, st...
  function quoteAttrName (line 17099) | function quoteAttrName(attr) {
  function trimLeft (line 17107) | function trimLeft(value) {
  function stripNonWhiteParen (line 17155) | function stripNonWhiteParen(value) {
  function isTagName (line 17160) | function isTagName(name) {
  function visitReactTag (line 17164) | function visitReactTag(traverse, object, path, state) {
  function addDisplayName (line 17400) | function addDisplayName(displayName, object, state) {
  function visitReactDisplayName (line 17449) | function visitReactDisplayName(traverse, object, path, state) {
  function getAllVisitors (line 17569) | function getAllVisitors(excludes) {
  function getVisitorsBySet (line 17586) | function getVisitorsBySet(sets) {
  function inlineSourceMap (line 17643) | function inlineSourceMap(sourceMap, sourceCode, sourceFilename) {

FILE: docs/assets/getting-started-assets/javascripts/codemirror/javascript/javascript.js
  function kw (line 29) | function kw(type) {
  function readRegexp (line 114) | function readRegexp(stream) {
  function ret (line 131) | function ret(tp, style, cont) {
  function tokenBase (line 136) | function tokenBase(stream, state) {
  function tokenString (line 194) | function tokenString(quote) {
  function tokenComment (line 211) | function tokenComment(stream, state) {
  function tokenQuasi (line 224) | function tokenQuasi(stream, state) {
  function findFatArrow (line 245) | function findFatArrow(stream, state) {
  function JSLexical (line 287) | function JSLexical(indented, column, type, align, prev, info) {
  function inScope (line 296) | function inScope(state, varname) {
  function parseJS (line 303) | function parseJS(state, style, type, content, stream) {
  function pass (line 328) | function pass() {
  function cont (line 331) | function cont() {
  function register (line 335) | function register(varname) {
  function pushcontext (line 355) | function pushcontext() {
  function popcontext (line 359) | function popcontext() {
  function pushlex (line 363) | function pushlex(type, info) {
  function poplex (line 387) | function poplex() {
  function expect (line 396) | function expect(wanted) {
  function statement (line 405) | function statement(type, value) {
  function expression (line 453) | function expression(type) {
  function expressionNoComma (line 456) | function expressionNoComma(type) {
  function expressionInner (line 459) | function expressionInner(type, noComma) {
  function maybeexpression (line 498) | function maybeexpression(type) {
  function maybeexpressionNoComma (line 502) | function maybeexpressionNoComma(type) {
  function maybeoperatorComma (line 507) | function maybeoperatorComma(type, value) {
  function maybeoperatorNoComma (line 511) | function maybeoperatorNoComma(type, value, noComma) {
  function quasi (line 529) | function quasi(type, value) {
  function continueQuasi (line 534) | function continueQuasi(type) {
  function arrowBody (line 541) | function arrowBody(type) {
  function arrowBodyNoComma (line 545) | function arrowBodyNoComma(type) {
  function maybelabel (line 549) | function maybelabel(type) {
  function property (line 553) | function property(type) {
  function objprop (line 559) | function objprop(type, value) {
  function getterSetter (line 573) | function getterSetter(type) {
  function afterprop (line 578) | function afterprop(type) {
  function commasep (line 582) | function commasep(what, end) {
  function contCommasep (line 597) | function contCommasep(what, end, info) {
  function block (line 601) | function block(type) {
  function maybetype (line 605) | function maybetype(type) {
  function maybedefault (line 608) | function maybedefault(_, value) {
  function typedef (line 611) | function typedef(type) {
  function vardef (line 617) | function vardef() {
  function pattern (line 620) | function pattern(type, value) {
  function proppattern (line 628) | function proppattern(type, value) {
  function maybeAssign (line 636) | function maybeAssign(_type, value) {
  function vardefCont (line 639) | function vardefCont(type) {
  function maybeelse (line 642) | function maybeelse(type, value) {
  function forspec (line 646) | function forspec(type) {
  function forspec1 (line 649) | function forspec1(type) {
  function formaybeinof (line 655) | function formaybeinof(_type, value) {
  function forspec2 (line 662) | function forspec2(type, value) {
  function forspec3 (line 670) | function forspec3(type) {
  function functiondef (line 673) | function functiondef(type, value) {
  function funarg (line 692) | function funarg(type) {
  function className (line 696) | function className(type, value) {
  function classNameAfter (line 702) | function classNameAfter(type, value) {
  function classBody (line 706) | function classBody(type, value) {
  function classGetterSetter (line 724) | function classGetterSetter(type) {
  function afterModule (line 729) | function afterModule(type, value) {
  function afterExport (line 736) | function afterExport(_type, value) {
  function afterImport (line 747) | function afterImport(type) {
  function importSpec (line 751) | function importSpec(type, value) {
  function maybeAs (line 757) | function maybeAs(_type, value) {
  function maybeFrom (line 763) | function maybeFrom(_type, value) {
  function arrayLiteral (line 769) | function arrayLiteral(type) {
  function maybeArrayComprehension (line 773) | function maybeArrayComprehension(type) {
  function comprehension (line 778) | function comprehension(type) {
  function isContinuedStatement (line 783) | function isContinuedStatement(state, textAfter) {

FILE: docs/assets/getting-started-assets/javascripts/codemirror/javascript/test.js
  function MT (line 6) | function MT(name) {
  function LD (line 215) | function LD(name) {

FILE: docs/assets/getting-started-assets/javascripts/codemirror/lib/codemirror.js
  function classTest (line 60) | function classTest(cls) {
  function removeChildren (line 73) | function removeChildren(e) {
  function removeChildrenAndAdd (line 80) | function removeChildrenAndAdd(parent, e) {
  function elt (line 84) | function elt(tag, content, className, style) {
  function eltP (line 102) | function eltP(tag, content, className, style) {
  function contains (line 131) | function contains(parent, child) {
  function activeElt (line 149) | function activeElt() {
  function addClass (line 169) | function addClass(node, cls) {
  function joinClasses (line 175) | function joinClasses(a, b) {
  function bind (line 203) | function bind(f) {
  function copyObj (line 210) | function copyObj(obj, target, overwrite) {
  function countColumn (line 224) | function countColumn(string, end, tabSize, startIndex, startValue) {
  function indexOf (line 266) | function indexOf(array, elt) {
  function findColumn (line 293) | function findColumn(string, goal, tabSize) {
  function spaceStr (line 313) | function spaceStr(n) {
  function lst (line 320) | function lst(arr) {
  function map (line 324) | function map(array, f) {
  function insertSorted (line 332) | function insertSorted(array, value, score) {
  function nothing (line 341) | function nothing() {}
  function createObj (line 343) | function createObj(base, props) {
  function isWordCharBasic (line 358) | function isWordCharBasic(ch) {
  function isWordChar (line 365) | function isWordChar(ch, helper) {
  function isEmpty (line 375) | function isEmpty(obj) {
  function isExtendingChar (line 390) | function isExtendingChar(ch) {
  function skipExtendingChars (line 395) | function skipExtendingChars(str, pos, dir) {
  function findFirst (line 405) | function findFirst(pred, from, to) {
  function iterateBidiSections (line 428) | function iterateBidiSections(order, from, to, f) {
  function getBidiPartAt (line 451) | function getBidiPartAt(order, ch, sticky) {
  function charType (line 507) | function charType(code) {
  function BidiSpan (line 531) | function BidiSpan(level, from, to) {
  function getOrder (line 705) | function getOrder(line, direction) {
  function getHandlers (line 731) | function getHandlers(emitter, type) {
  function off (line 735) | function off(emitter, type, f) {
  function signal (line 752) | function signal(emitter, type /*, values...*/) {
  function signalDOMEvent (line 766) | function signalDOMEvent(cm, e, override) {
  function signalCursorActivity (line 779) | function signalCursorActivity(cm) {
  function hasHandler (line 792) | function hasHandler(emitter, type) {
  function eventMixin (line 798) | function eventMixin(ctor) {
  function e_preventDefault (line 810) | function e_preventDefault(e) {
  function e_stopPropagation (line 817) | function e_stopPropagation(e) {
  function e_defaultPrevented (line 824) | function e_defaultPrevented(e) {
  function e_stop (line 827) | function e_stop(e) {
  function e_target (line 832) | function e_target(e) {
  function e_button (line 835) | function e_button(e) {
  function zeroWidthElement (line 864) | function zeroWidthElement(measure) {
  function hasBadBidiRects (line 882) | function hasBadBidiRects(measure) {
  function hasBadZoomedRects (line 954) | function hasBadZoomedRects(measure) {
  function defineMode (line 971) | function defineMode(name, mode) {
  function defineMIME (line 978) | function defineMIME(mime, spec) {
  function resolveMode (line 984) | function resolveMode(spec) {
  function getMode (line 1008) | function getMode(options, spec) {
  function extendMode (line 1043) | function extendMode(mode, properties) {
  function copyState (line 1050) | function copyState(mode, state) {
  function innerMode (line 1070) | function innerMode(mode, state) {
  function startState (line 1083) | function startState(mode, a1, a2) {
  function getLine (line 1219) | function getLine(doc, n) {
  function getBetween (line 1241) | function getBetween(doc, start, end) {
  function getLines (line 1258) | function getLines(doc, from, to) {
  function updateLineHeight (line 1268) | function updateLineHeight(line, height) {
  function lineNo (line 1279) | function lineNo(line) {
  function lineAtHeight (line 1298) | function lineAtHeight(chunk, h) {
  function isLine (line 1325) | function isLine(doc, l) {
  function lineNumberFor (line 1329) | function lineNumberFor(options, i) {
  function Pos (line 1334) | function Pos(line, ch, sticky) {
  function cmp (line 1347) | function cmp(a, b) {
  function equalCursorPos (line 1351) | function equalCursorPos(a, b) {
  function copyPos (line 1355) | function copyPos(x) {
  function maxPos (line 1358) | function maxPos(a, b) {
  function minPos (line 1361) | function minPos(a, b) {
  function clipLine (line 1367) | function clipLine(doc, n) {
  function clipPos (line 1370) | function clipPos(doc, pos) {
  function clipToLen (line 1380) | function clipToLen(pos, linelen) {
  function clipPosArray (line 1390) | function clipPosArray(doc, array) {
  function highlightLine (line 1458) | function highlightLine(cm, line, context, forceToEnd) {
  function getLineStyles (line 1528) | function getLineStyles(cm, line, updateFrontier) {
  function getContextBefore (line 1552) | function getContextBefore(cm, n, precise) {
  function processLine (line 1582) | function processLine(cm, text, context, startAt) {
  function callBlankLine (line 1595) | function callBlankLine(mode, state) {
  function readToken (line 1608) | function readToken(mode, stream, state, inner) {
  function takeToken (line 1630) | function takeToken(cm, pos, precise, asArray) {
  function extractLineClasses (line 1652) | function extractLineClasses(type, output) {
  function runMode (line 1674) | function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
  function findStartLine (line 1731) | function findStartLine(cm, n, precise) {
  function retreatFrontier (line 1759) | function retreatFrontier(doc, n) {
  function seeReadOnlySpans (line 1782) | function seeReadOnlySpans() {
  function seeCollapsedSpans (line 1786) | function seeCollapsedSpans() {
  function MarkedSpan (line 1792) | function MarkedSpan(marker, from, to) {
  function getMarkedSpanFor (line 1799) | function getMarkedSpanFor(spans, marker) {
  function removeMarkedSpan (line 1811) | function removeMarkedSpan(spans, span) {
  function addMarkedSpan (line 1821) | function addMarkedSpan(line, span) {
  function markedSpansBefore (line 1830) | function markedSpansBefore(old, startCh, isInsert) {
  function markedSpansAfter (line 1856) | function markedSpansAfter(old, endCh, isInsert) {
  function stretchSpansOverChange (line 1892) | function stretchSpansOverChange(doc, change) {
  function clearEmptySpans (line 1981) | function clearEmptySpans(spans) {
  function removeReadOnlyRanges (line 1995) | function removeReadOnlyRanges(doc, from, to) {
  function detachMarkedSpans (line 2036) | function detachMarkedSpans(line) {
  function attachMarkedSpans (line 2046) | function attachMarkedSpans(line, spans) {
  function extraLeft (line 2058) | function extraLeft(marker) {
  function extraRight (line 2061) | function extraRight(marker) {
  function compareCollapsedMarkers (line 2068) | function compareCollapsedMarkers(a, b) {
  function collapsedSpanAtSide (line 2088) | function collapsedSpanAtSide(line, start) {
  function collapsedSpanAtStart (line 2105) | function collapsedSpanAtStart(line) {
  function collapsedSpanAtEnd (line 2108) | function collapsedSpanAtEnd(line) {
  function collapsedSpanAround (line 2112) | function collapsedSpanAround(line, ch) {
  function conflictingCollapsedRange (line 2134) | function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
  function visualLine (line 2169) | function visualLine(line) {
  function visualLineEnd (line 2177) | function visualLineEnd(line) {
  function visualLineContinued (line 2187) | function visualLineContinued(line) {
  function visualLineNo (line 2198) | function visualLineNo(doc, lineN) {
  function visualLineEndNo (line 2209) | function visualLineEndNo(doc, lineN) {
  function lineIsHidden (line 2227) | function lineIsHidden(doc, line) {
  function lineIsHiddenInner (line 2247) | function lineIsHiddenInner(doc, line, span) {
  function heightAtLine (line 2275) | function heightAtLine(lineObj) {
  function lineLength (line 2304) | function lineLength(line) {
  function findMaxLine (line 2327) | function findMaxLine(cm) {
  function updateLine (line 2360) | function updateLine(line, text, markedSpans, estimateHeight) {
  function cleanUpLine (line 2380) | function cleanUpLine(line) {
  function interpretTokenStyle (line 2390) | function interpretTokenStyle(style, options) {
  function buildLineContent (line 2403) | function buildLineContent(cm, lineView) {
  function defaultSpecialCharPlaceholder (line 2483) | function defaultSpecialCharPlaceholder(ch) {
  function buildToken (line 2492) | function buildToken(builder, text, style, startStyle, endStyle, css, att...
  function splitSpaces (line 2582) | function splitSpaces(text, trailingBefore) {
  function buildTokenBadBidi (line 2605) | function buildTokenBadBidi(inner, order) {
  function buildCollapsedSpan (line 2638) | function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
  function insertLineContent (line 2659) | function insertLineContent(line, builder, styles) {
  function LineView (line 2807) | function LineView(doc, line, lineN) {
  function buildViewArray (line 2819) | function buildViewArray(cm, from, to) {
  function pushOperation (line 2832) | function pushOperation(op) {
  function fireCallbacksForOps (line 2843) | function fireCallbacksForOps(group) {
  function finishOperation (line 2863) | function finishOperation(op, endCb) {
  function signalLater (line 2886) | function signalLater(emitter, type /*, values...*/) {
  function fireOrphanDelayed (line 2910) | function fireOrphanDelayed() {
  function updateLineForChanges (line 2921) | function updateLineForChanges(cm, lineView, lineN, dims) {
  function ensureLineWrapped (line 2939) | function ensureLineWrapped(lineView) {
  function updateLineBackground (line 2953) | function updateLineBackground(cm, lineView) {
  function getLineContent (line 2976) | function getLineContent(cm, lineView) {
  function updateLineText (line 2989) | function updateLineText(cm, lineView) {
  function updateLineClasses (line 3006) | function updateLineClasses(cm, lineView) {
  function updateLineGutter (line 3019) | function updateLineGutter(cm, lineView, lineN, dims) {
  function updateLineWidgets (line 3094) | function updateLineWidgets(cm, lineView, dims) {
  function buildLineElement (line 3109) | function buildLineElement(cm, lineView, lineN, dims) {
  function insertLineWidgets (line 3127) | function insertLineWidgets(cm, lineView, dims) {
  function insertLineWidgetsFor (line 3136) | function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
  function positionLineWidget (line 3162) | function positionLineWidget(widget, node, lineView, dims) {
  function widgetHeight (line 3182) | function widgetHeight(widget) {
  function eventInWidget (line 3204) | function eventInWidget(display, e) {
  function paddingTop (line 3218) | function paddingTop(display) {
  function paddingVert (line 3221) | function paddingVert(display) {
  function paddingH (line 3224) | function paddingH(display) {
  function scrollGap (line 3237) | function scrollGap(cm) {
  function displayWidth (line 3240) | function displayWidth(cm) {
  function displayHeight (line 3243) | function displayHeight(cm) {
  function ensureLineHeights (line 3251) | function ensureLineHeights(cm, lineView, rect) {
  function mapFromLineView (line 3274) | function mapFromLineView(lineView, line, lineN) {
  function updateExternalMeasurement (line 3296) | function updateExternalMeasurement(cm, line) {
  function measureChar (line 3309) | function measureChar(cm, line, ch, bias) {
  function findViewForLine (line 3314) | function findViewForLine(cm, lineN) {
  function prepareMeasureForLine (line 3329) | function prepareMeasureForLine(cm, line) {
  function measureCharPrepared (line 3356) | function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
  function nodeAndOffsetInLineMap (line 3387) | function nodeAndOffsetInLineMap(map, ch, bias) {
  function getUsefulRect (line 3442) | function getUsefulRect(rects, bias) {
  function measureCharInner (line 3460) | function measureCharInner(cm, prepared, ch, bias) {
  function maybeUpdateRectForZooming (line 3561) | function maybeUpdateRectForZooming(measure, rect) {
  function clearLineMeasurementCacheFor (line 3580) | function clearLineMeasurementCacheFor(lineView) {
  function clearLineMeasurementCache (line 3592) | function clearLineMeasurementCache(cm) {
  function clearCaches (line 3600) | function clearCaches(cm) {
  function pageScrollX (line 3609) | function pageScrollX() {
  function pageScrollY (line 3621) | function pageScrollY() {
  function widgetTopHeight (line 3631) | function widgetTopHeight(lineObj) {
  function intoCoordSystem (line 3647) | function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
  function fromCoordSystem (line 3679) | function fromCoordSystem(cm, coords, context) {
  function charCoords (line 3699) | function charCoords(cm, pos, context, lineObj, bias) {
  function cursorCoords (line 3722) | function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHei...
  function estimateCoords (line 3772) | function estimateCoords(cm, pos) {
  function PosWithInfo (line 3789) | function PosWithInfo(line, ch, sticky, outside, xRel) {
  function coordsChar (line 3800) | function coordsChar(cm, x, y) {
  function wrappedLineExtent (line 3833) | function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
  function wrappedLineExtentChar (line 3853) | function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
  function boxIsAfter (line 3868) | function boxIsAfter(box, x, y, left) {
  function coordsCharInner (line 3872) | function coordsCharInner(cm, lineObj, lineNo, x, y) {
  function coordsBidiPart (line 3969) | function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, ...
  function coordsBidiPartWrapped (line 4014) | function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, or...
  function textHeight (line 4064) | function textHeight(display) {
  function charWidth (line 4088) | function charWidth(display) {
  function getDimensions (line 4105) | function getDimensions(cm) {
  function compensateForHScroll (line 4127) | function compensateForHScroll(display) {
  function estimateHeight (line 4137) | function estimateHeight(cm) {
  function estimateLineHeights (line 4164) | function estimateLineHeights(cm) {
  function posFromMouse (line 4180) | function posFromMouse(cm, e, liberal, forRect) {
  function findViewIndex (line 4217) | function findViewIndex(cm, n) {
  function regChange (line 4240) | function regChange(cm, from, to, lendiff) {
  function regLineChange (line 4324) | function regLineChange(cm, line, type) {
  function resetView (line 4346) | function resetView(cm) {
  function viewCuttingPoint (line 4352) | function viewCuttingPoint(cm, oldN, newN, dir) {
  function adjustView (line 4388) | function adjustView(cm, from, to) {
  function countDirtyView (line 4412) | function countDirtyView(cm) {
  function updateSelection (line 4424) | function updateSelection(cm) {
  function prepareSelection (line 4428) | function prepareSelection(cm, primary) {
  function drawSelectionCursor (line 4456) | function drawSelectionCursor(cm, head, output) {
  function cmpCoords (line 4476) | function cmpCoords(a, b) {
  function drawSelectionRange (line 4481) | function drawSelectionRange(cm, range, output) {
  function restartBlink (line 4624) | function restartBlink(cm) {
  function ensureFocus (line 4641) | function ensureFocus(cm) {
  function delayBlurEvent (line 4648) | function delayBlurEvent(cm) {
  function onFocus (line 4658) | function onFocus(cm, e) {
  function onBlur (line 4685) | function onBlur(cm, e) {
  function updateHeightsInViewport (line 4705) | function updateHeightsInViewport(cm) {
  function updateWidgetHeight (line 4752) | function updateWidgetHeight(line) {
  function visibleLines (line 4767) | function visibleLines(display, doc, viewport) {
  function maybeScrollWindow (line 4806) | function maybeScrollWindow(cm, rect) {
  function scrollPosIntoView (line 4846) | function scrollPosIntoView(cm, pos, end, margin) {
  function scrollIntoView (line 4893) | function scrollIntoView(cm, rect) {
  function calculateScrollPos (line 4907) | function calculateScrollPos(cm, rect) {
  function addToScrollTop (line 4953) | function addToScrollTop(cm, top) {
  function ensureCursorVisible (line 4964) | function ensureCursorVisible(cm) {
  function scrollToCoords (line 4970) | function scrollToCoords(cm, x, y) {
  function scrollToRange (line 4982) | function scrollToRange(cm, range) {
  function resolveScrollToPos (line 4991) | function resolveScrollToPos(cm) {
  function scrollToCoordsRange (line 5001) | function scrollToCoordsRange(cm, from, to, margin) {
  function updateScrollTop (line 5013) | function updateScrollTop(cm, val) {
  function setScrollTop (line 5027) | function setScrollTop(cm, val, forceScroll) {
  function setScrollLeft (line 5044) | function setScrollLeft(cm, val, isScroller, forceScroll) {
  function measureForScrollbars (line 5067) | function measureForScrollbars(cm) {
  function maybeDisable (line 5186) | function maybeDisable() {
  function updateScrollbars (line 5222) | function updateScrollbars(cm, measure) {
  function updateScrollbarsInner (line 5245) | function updateScrollbarsInner(cm, measure) {
  function initScrollbars (line 5271) | function initScrollbars(cm) {
  function startOperation (line 5314) | function startOperation(cm) {
  function endOperation (line 5337) | function endOperation(cm) {
  function endOperations (line 5351) | function endOperations(group) {
  function endOperation_R1 (line 5390) | function endOperation_R1(op) {
  function endOperation_W1 (line 5415) | function endOperation_W1(op) {
  function endOperation_R2 (line 5419) | function endOperation_R2(op) {
  function endOperation_W2 (line 5450) | function endOperation_W2(op) {
  function endOperation_finish (line 5484) | function endOperation_finish(op) {
  function runInOp (line 5553) | function runInOp(cm, f) {
  function operation (line 5565) | function operation(cm, f) {
  function methodOp (line 5580) | function methodOp(f) {
  function docMethodOp (line 5593) | function docMethodOp(f) {
  function startWorker (line 5610) | function startWorker(cm, time) {
  function highlightWorker (line 5616) | function highlightWorker(cm) {
  function maybeClipScrollbars (line 5714) | function maybeClipScrollbars(cm) {
  function selectionSnapshot (line 5725) | function selectionSnapshot(cm) {
  function restoreSelection (line 5746) | function restoreSelection(snapshot) {
  function updateDisplayIfNeeded (line 5769) | function updateDisplayIfNeeded(cm, update) {
  function postUpdateDisplay (line 5864) | function postUpdateDisplay(cm, update) {
  function updateDisplaySimple (line 5910) | function updateDisplaySimple(cm, viewport) {
  function patchDisplay (line 5927) | function patchDisplay(cm, updateNumbersFrom, dims) {
  function updateGutterSpace (line 5986) | function updateGutterSpace(display) {
  function setDocumentHeight (line 5991) | function setDocumentHeight(cm, measure) {
  function alignHorizontally (line 6000) | function alignHorizontally(cm) {
  function maybeUpdateLineNumberWidth (line 6035) | function maybeUpdateLineNumberWidth(cm) {
  function getGutters (line 6060) | function getGutters(gutters, lineNumbers) {
  function renderGutters (line 6087) | function renderGutters(display) {
  function updateGutters (line 6109) | function updateGutters(cm) {
  function Display (line 6119) | function Display(place, doc, input, options) {
  function wheelEventDelta (line 6265) | function wheelEventDelta(e) {
  function wheelEventPixels (line 6278) | function wheelEventPixels(e) {
  function onScrollWheel (line 6285) | function onScrollWheel(cm, e) {
  function normalizeSelection (line 6466) | function normalizeSelection(cm, ranges, primIndex) {
  function simpleSelection (line 6490) | function simpleSelection(anchor, head) {
  function changeEnd (line 6496) | function changeEnd(change) {
  function adjustForChange (line 6508) | function adjustForChange(pos, change) {
  function computeSelAfterChange (line 6524) | function computeSelAfterChange(doc, change) {
  function offsetPos (line 6538) | function offsetPos(pos, old, nw) {
  function computeReplacedSel (line 6548) | function computeReplacedSel(doc, changes, hint) {
  function loadMode (line 6571) | function loadMode(cm) {
  function resetModeState (line 6576) | function resetModeState(cm) {
  function isWholeLineUpdate (line 6598) | function isWholeLineUpdate(doc, change) {
  function updateDoc (line 6608) | function updateDoc(doc, change, markedSpans, estimateHeight) {
  function linkedDocs (line 6684) | function linkedDocs(doc, f, sharedHistOnly) {
  function attachDoc (line 6705) | function attachDoc(cm, doc) {
  function setDirectionClass (line 6721) | function setDirectionClass(cm) {
  function directionChanged (line 6725) | function directionChanged(cm) {
  function History (line 6732) | function History(startGen) {
  function historyChangeFromChange (line 6750) | function historyChangeFromChange(doc, change) {
  function clearSelectionEvents (line 6769) | function clearSelectionEvents(array) {
  function lastChangeEvent (line 6782) | function lastChangeEvent(hist, force) {
  function addChangeToHistory (line 6797) | function addChangeToHistory(doc, change, selAfter, opId) {
  function selectionEventCanBeMerged (line 6850) | function selectionEventCanBeMerged(doc, origin, prev, sel) {
  function addSelectionToHistory (line 6866) | function addSelectionToHistory(doc, sel, opId, options) {
  function pushSelectionToHistory (line 6894) | function pushSelectionToHistory(sel, dest) {
  function attachLocalSpans (line 6902) | function attachLocalSpans(doc, change, from, to) {
  function removeClearedSpans (line 6915) | function removeClearedSpans(spans) {
  function getOldSpans (line 6933) | function getOldSpans(doc, change) {
  function mergeOldSpans (line 6949) | function mergeOldSpans(doc, change) {
  function copyHistoryArray (line 6981) | function copyHistoryArray(events, newGroup, instantiateSel) {
  function extendRange (line 7019) | function extendRange(range, head, other, extend) {
  function extendSelection (line 7038) | function extendSelection(doc, head, other, options, extend) {
  function extendSelections (line 7051) | function extendSelections(doc, heads, options) {
  function replaceOneSelection (line 7062) | function replaceOneSelection(doc, i, range, options) {
  function setSimpleSelection (line 7069) | function setSimpleSelection(doc, anchor, head, options) {
  function filterSelectionChange (line 7075) | function filterSelectionChange(doc, sel, options) {
  function setSelectionReplaceHistory (line 7100) | function setSelectionReplaceHistory(doc, sel, options) {
  function setSelection (line 7112) | function setSelection(doc, sel, options) {
  function setSelectionNoUndo (line 7117) | function setSelectionNoUndo(doc, sel, options) {
  function setSelectionInner (line 7135) | function setSelectionInner(doc, sel) {
  function reCheckSelection (line 7152) | function reCheckSelection(doc) {
  function skipAtomicInSelection (line 7158) | function skipAtomicInSelection(doc, sel, bias, mayClear) {
  function skipAtomicInner (line 7175) | function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
  function skipAtomic (line 7241) | function skipAtomic(doc, pos, oldPos, bias, mayClear) {
  function movePos (line 7255) | function movePos(doc, pos, dir, line) {
  function selectAll (line 7273) | function selectAll(cm) {
  function filterChange (line 7280) | function filterChange(doc, change, update) {
  function makeChange (line 7323) | function makeChange(doc, change, ignoreReadOnly) {
  function makeChangeInner (line 7358) | function makeChangeInner(doc, change) {
  function makeChangeFromHistory (line 7378) | function makeChangeFromHistory(doc, type, allowSelectionOnly) {
  function shiftDoc (line 7467) | function shiftDoc(doc, distance) {
  function makeChangeSingleDoc (line 7491) | function makeChangeSingleDoc(doc, change, selAfter, spans) {
  function makeChangeSingleDocInEditor (line 7544) | function makeChangeSingleDocInEditor(cm, change, spans) {
  function replaceRange (line 7620) | function replaceRange(doc, code, from, to, origin) {
  function rebaseHistSelSingle (line 7637) | function rebaseHistSelSingle(pos, from, to, diff) {
  function rebaseHistArray (line 7653) | function rebaseHistArray(array, from, to, diff) {
  function rebaseHist (line 7685) | function rebaseHist(hist, change) {
  function changeLine (line 7696) | function changeLine(doc, handle, changeType, op) {
  function LeafChunk (line 7726) | function LeafChunk(lines) {
  function BranchChunk (line 7781) | function BranchChunk(children) {
  function adjustScrollWhenAboveVisible (line 7980) | function adjustScrollWhenAboveVisible(cm, line, diff) {
  function addLineWidget (line 7986) | function addLineWidget(doc, handle, node, options) {
  function markText (line 8201) | function markText(doc, from, to, options, type) {
  function markTextShared (line 8353) | function markTextShared(doc, from, to, options, type) {
  function findSharedMarkers (line 8374) | function findSharedMarkers(doc) {
  function copySharedMarkers (line 8380) | function copySharedMarkers(doc, markers) {
  function detachSharedMarkers (line 8394) | function detachSharedMarkers(markers) {
  function onDrop (line 9079) | function onDrop(e) {
  function onDragStart (line 9190) | function onDragStart(cm, e) {
  function onDragOver (line 9220) | function onDragOver(cm, e) {
  function clearDragCursor (line 9234) | function clearDragCursor(cm) {
  function forEachCodeMirror (line 9245) | function forEachCodeMirror(f) {
  function ensureGlobalHandlers (line 9267) | function ensureGlobalHandlers() {
  function registerGlobalHandlers (line 9274) | function registerGlobalHandlers() {
  function onResize (line 9291) | function onResize(cm) {
  function normalizeKeyName (line 9479) | function normalizeKeyName(name) {
  function normalizeKeyMap (line 9517) | function normalizeKeyMap(keymap) {
  function lookupKey (line 9557) | function lookupKey(key, map, handle, context) {
  function isModifierKey (line 9585) | function isModifierKey(value) {
  function addModifierNames (line 9590) | function addModifierNames(name, event, noShift) {
  function keyName (line 9608) | function keyName(event, noShift) {
  function getKeyMap (line 9624) | function getKeyMap(val) {
  function deleteNearSelection (line 9630) | function deleteNearSelection(cm, compute) {
  function moveCharLogically (line 9655) | function moveCharLogically(line, ch, dir) {
  function moveLogically (line 9660) | function moveLogically(line, start, dir) {
  function endOfLine (line 9665) | function endOfLine(visually, cm, lineObj, lineNo, dir) {
  function moveVisually (line 9705) | function moveVisually(cm, line, start, dir) {
  function lineStart (line 10083) | function lineStart(cm, lineN) {
  function lineEnd (line 10091) | function lineEnd(cm, lineN) {
  function lineStartSmart (line 10099) | function lineStartSmart(cm, pos) {
  function doHandleBinding (line 10112) | function doHandleBinding(cm, bound, dropShift) {
  function lookupKeyForEditor (line 10139) | function lookupKeyForEditor(cm, name, handle) {
  function dispatchKey (line 10157) | function dispatchKey(cm, name, e, handle) {
  function dispatchKeyInner (line 10180) | function dispatchKeyInner(cm, name, e, handle) {
  function handleKeyBinding (line 10199) | function handleKeyBinding(cm, e) {
  function handleCharBinding (line 10227) | function handleCharBinding(cm, e, ch) {
  function onKeyDown (line 10234) | function onKeyDown(e) {
  function showCrossHair (line 10272) | function showCrossHair(cm) {
  function onKeyUp (line 10287) | function onKeyUp(e) {
  function onKeyPress (line 10294) | function onKeyPress(e) {
  function clickRepeat (line 10340) | function clickRepeat(pos, button) {
  function onMouseDown (line 10361) | function onMouseDown(e) {
  function handleMappedButton (line 10420) | function handleMappedButton(cm, button, pos, repeat, event) {
  function configureMouse (line 10449) | function configureMouse(cm, repeat, event) {
  function leftButtonDown (line 10474) | function leftButtonDown(cm, pos, repeat, event) {
  function leftButtonStartDrag (line 10502) | function leftButtonStartDrag(cm, event, pos, behavior) {
  function rangeForUnit (line 10559) | function rangeForUnit(cm, pos, unit) {
  function leftButtonSelect (line 10574) | function leftButtonSelect(cm, event, start, behavior) {
  function bidiSimplify (line 10779) | function bidiSimplify(cm, range) {
  function gutterEvent (line 10826) | function gutterEvent(cm, e, type, prevent) {
  function clickInGutter (line 10865) | function clickInGutter(cm, e) {
  function onContextMenu (line 10874) | function onContextMenu(cm, e) {
  function contextMenuInGutter (line 10886) | function contextMenuInGutter(cm, e) {
  function themeChanged (line 10893) | function themeChanged(cm) {
  function defineOptions (line 10909) | function defineOptions(CodeMirror) {
  function dragDropChanged (line 11193) | function dragDropChanged(cm, value, old) {
  function wrappingChanged (line 11206) | function wrappingChanged(cm) {
  function CodeMirror (line 11226) | function CodeMirror(place, options) {
  function registerEventHandlers (line 11326) | function registerEventHandlers(cm) {
  function indentLine (line 11511) | function indentLine(cm, n, how, aggressive) {
  function setLastCopied (line 11597) | function setLastCopied(newLastCopied) {
  function applyTextInput (line 11601) | function applyTextInput(cm, inserted, deleted, sel, origin) {
  function handlePaste (line 11675) | function handlePaste(e, cm) {
  function triggerElectric (line 11688) | function triggerElectric(cm, inserted) {
  function copyableRanges (line 11724) | function copyableRanges(cm) {
  function disableBrowserMagic (line 11736) | function disableBrowserMagic(field, spellcheck, autocorrect, autocapital...
  function hiddenTextarea (line 11742) | function hiddenTextarea() {
  function addEditorMethods (line 11780) | function addEditorMethods(CodeMirror) {
  function findPosH (line 12425) | function findPosH(doc, pos, dir, unit, visually) {
  function findPosV (line 12507) | function findPosV(cm, pos, dir, unit) {
  function onCopyCut (line 12602) | function onCopyCut(e) {
  function poll (line 12808) | function poll() {
  function posToDOM (line 13045) | function posToDOM(cm, pos) {
  function isInGutter (line 13064) | function isInGutter(node) {
  function badPos (line 13073) | function badPos(pos, bad) {
  function domTextBetween (line 13080) | function domTextBetween(cm, from, to, fromLine, toLine) {
  function domToPos (line 13161) | function domToPos(cm, node, offset) {
  function locateNodeInLineView (line 13188) | function locateNodeInLineView(lineView, node, offset) {
  function prepareCopyCut (line 13316) | function prepareCopyCut(e) {
  function p (line 13507) | function p() {
  function prepareSelectAllHack (line 13672) | function prepareSelectAllHack() {
  function rehide (line 13686) | function rehide() {
  function fromTextArea (line 13748) | function fromTextArea(textarea, options) {
  function addLegacyProps (line 13817) | function addLegacyProps(CodeMirror) {

FILE: docs/assets/getting-started-assets/javascripts/mobx-react.js
  function mrFactory (line 2) | function mrFactory(mobx, React, ReactDOM) {

FILE: docs/assets/getting-started-assets/javascripts/mobx.umd.js
  function s (line 22) | function s(o, u) {
  function __ (line 60) | function __() {
  function autorun (line 80) | function autorun(view, scope) {
  function when (line 97) | function when(predicate, effect, scope) {
  function autorunUntil (line 110) | function autorunUntil(predicate, effect, scope) {
  function autorunAsync (line 115) | function autorunAsync(func, delay, scope) {
  function computed (line 134) | function computed(target, key, baseDescriptor, options) {
  function throwingComputedValueSetter (line 197) | function throwingComputedValueSetter() {
  function createTransformer (line 202) | function createTransformer(transformer, onCleanup) {
  function getMemoizationId (line 243) | function getMemoizationId(object) {
  function expr (line 252) | function expr(expr, scope) {
  function extendObservable (line 260) | function extendObservable(target) {
  function extendObservableHelper (line 287) | function extendObservableHelper(target, properties, mode, name) {
  function allowStateChanges (line 300) | function allowStateChanges(allowStateChanges, func) {
  function reportTransition (line 308) | function reportTransition(node, state, changed) {
  function getDependencyTree (line 321) | function getDependencyTree(thing) {
  function nodeToDependencyTree (line 324) | function nodeToDependencyTree(node) {
  function getObserverTree (line 335) | function getObserverTree(thing) {
  function nodeToObserverTree (line 338) | function nodeToObserverTree(node) {
  function createConsoleReporter (line 347) | function createConsoleReporter(extensive) {
  function trackTransitions (line 362) | function trackTransitions(extensive, onReport) {
  function isObservable (line 379) | function isObservable(value, property) {
  function observableDecorator (line 403) | function observableDecorator(target, key, baseDescriptor) {
  function observable (line 458) | function observable(v, keyOrScope) {
  function observableIsDeprecated (line 498) | function observableIsDeprecated() {
  function getTypeOfValue (line 512) | function getTypeOfValue(value) {
  function observe (line 526) | function observe(thing, propOrCb, cbOrFire, fireImmediately) {
  function observeObservable (line 537) | function observeObservable(thing, listener, fireImmediately) {
  function observeObservableProperty (line 555) | function observeObservableProperty(
  function toJSON (line 592) | function toJSON(source, detectCycles, __alreadySeen) {
  function propagateAtomReady (line 638) | function propagateAtomReady(atom) {
  function Atom (line 645) | function Atom(name, onBecomeObserved, onBecomeUnobserved) {
  function ComputedValue (line 695) | function ComputedValue(derivation, scope, compareStructural, name) {
  function isComputingDerivation (line 796) | function isComputingDerivation() {
  function checkIfStateModificationsAreAllowed (line 799) | function checkIfStateModificationsAreAllowed() {
  function notifyDependencyStale (line 805) | function notifyDependencyStale(derivation) {
  function notifyDependencyReady (line 811) | function notifyDependencyReady(derivation, dependencyDidChange) {
  function trackDerivedFunction (line 829) | function trackDerivedFunction(derivation, f) {
  function bindDependencies (line 837) | function bindDependencies(derivation, prevObserving) {
  function findCycle (line 854) | function findCycle(needle, node) {
  function MobXGlobals (line 863) | function MobXGlobals() {
  function getNextId (line 893) | function getNextId() {
  function registerGlobals (line 896) | function registerGlobals() {}
  function resetGlobalState (line 897) | function resetGlobalState() {
  function addObserver (line 901) | function addObserver(observable, node) {
  function removeObserver (line 907) | function removeObserver(observable, node) {
  function reportObserved (line 913) | function reportObserved(observable) {
  function propagateStaleness (line 927) | function propagateStaleness(observable) {
  function propagateReadiness (line 932) | function propagateReadiness(observable, valueDidActuallyChange) {
  function untracked (line 937) | function untracked(action) {
  function Reaction (line 948) | function Reaction(name, onInvalidate) {
  function runReactions (line 1005) | function runReactions() {
  function transaction (line 1021) | function transaction(action, thisArg) {
  function asReference (line 1040) | function asReference(value) {
  function asStructure (line 1044) | function asStructure(value) {
  function asFlat (line 1048) | function asFlat(value) {
  function AsReference (line 1053) | function AsReference(value) {
  function AsStructure (line 1060) | function AsStructure(value) {
  function AsFlat (line 1067) | function AsFlat(value) {
  function getValueModeFromValue (line 1073) | function getValueModeFromValue(value, defaultMode) {
  function getValueModeFromModifierFunc (line 1081) | function getValueModeFromModifierFunc(func) {
  function makeChildObservable (line 1092) | function makeChildObservable(value, parentMode, name) {
  function assertUnwrapped (line 1127) | function assertUnwrapped(value, message) {
  function StubArray (line 1140) | function StubArray() {}
  function getArrayLength (line 1144) | function getArrayLength(adm) {
  function setArrayLength (line 1148) | function setArrayLength(adm, newLength) {
  function updateArrayLength (line 1162) | function updateArrayLength(adm, oldLength, delta) {
  function spliceWithArray (line 1172) | function spliceWithArray(adm, index, deleteCount, newItems) {
  function makeReactiveArrayItem (line 1198) | function makeReactiveArrayItem(value) {
  function notifyArrayChildUpdate (line 1208) | function notifyArrayChildUpdate(adm, index, oldValue) {
  function notifyArraySplice (line 1218) | function notifyArraySplice(adm, index, deleted, added) {
  function ObservableArray (line 1232) | function ObservableArray(initialValues, mode, name) {
  function createArrayBufferItem (line 1434) | function createArrayBufferItem(index) {
  function reserveArrayBuffer (line 1476) | function reserveArrayBuffer(max) {
  function createObservableArray (line 1482) | function createObservableArray(initialValues, mode, name) {
  function fastArray (line 1485) | function fastArray(initialValues) {
  function isObservableArray (line 1492) | function isObservableArray(thing) {
  function ObservableMap (line 1498) | function ObservableMap(initialData, valueModeFunc) {
  function map (line 1684) | function map(initialValues, valueModifier) {
  function isObservableMap (line 1688) | function isObservableMap(thing) {
  function asObservableObject (line 1693) | function asObservableObject(target, name, mode) {
  function setObservableObjectProperty (line 1724) | function setObservableObjectProperty(adm, propName, value) {
  function defineObservableProperty (line 1728) | function defineObservableProperty(adm, propName, value) {
  function observeObservableObject (line 1768) | function observeObservableObject(object, callback, fireImmediately) {
  function isObservableObject (line 1778) | function isObservableObject(thing) {
  function ObservableValue (line 1786) | function ObservableValue(value, mode, name) {
  function SimpleEventEmitter (line 1842) | function SimpleEventEmitter() {
  function invariant (line 1874) | function invariant(check, message, thing) {
  function deprecated (line 1883) | function deprecated(msg) {
  function once (line 1888) | function once(func) {
  function unique (line 1897) | function unique(list) {
  function isPlainObject (line 1904) | function isPlainObject(value) {
  function valueDidChange (line 1911) | function valueDidChange(compareStructural, oldValue, newValue) {
  function makeNonEnumerable (line 1916) | function makeNonEnumerable(object, props) {
  function isPropertyConfigurable (line 1926) | function isPropertyConfigurable(object, prop) {
  function assertPropertyConfigurable (line 1933) | function assertPropertyConfigurable(object, prop) {
  function deepEquals (line 1941) | function deepEquals(a, b) {
  function quickDiff (line 1963) | function quickDiff(current, base) {

FILE: docs/assets/getting-started-assets/javascripts/react-with-addons.js
  function s (line 25) | function s(o, u) {
  function isPresto (line 212) | function isPresto() {
  function isKeypressCommand (line 292) | function isKeypressCommand(nativeEvent) {
  function getCompositionEventType (line 306) | function getCompositionEventType(topLevelType) {
  function isFallbackCompositionStart (line 325) | function isFallbackCompositionStart(topLevelType, nativeEvent) {
  function isFallbackCompositionEnd (line 339) | function isFallbackCompositionEnd(topLevelType, nativeEvent) {
  function getDataFromCustomEvent (line 367) | function getDataFromCustomEvent(nativeEvent) {
  function extractCompositionEvent (line 385) | function extractCompositionEvent(
  function getNativeBeforeInputChars (line 448) | function getNativeBeforeInputChars(topLevelType, nativeEvent) {
  function getFallbackBeforeInputChars (line 502) | function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
  function extractBeforeInputEvent (line 561) | function extractBeforeInputEvent(
  function prefixKey (line 825) | function prefixKey(prefix, key) {
  function CallbackQueue (line 1125) | function CallbackQueue() {
  function shouldUseChangeEvent (line 1253) | function shouldUseChangeEvent(elem) {
  function manualDispatchChangeEvent (line 1268) | function manualDispatchChangeEvent(nativeEvent) {
  function runEventInBatch (line 1290) | function runEventInBatch(event) {
  function startWatchingForChangeEventIE8 (line 1295) | function startWatchingForChangeEventIE8(target, targetID) {
  function stopWatchingForChangeEventIE8 (line 1301) | function stopWatchingForChangeEventIE8() {
  function getTargetIDForChangeEvent (line 1310) | function getTargetIDForChangeEvent(
  function handleEventsForChangeEventIE8 (line 1319) | function handleEventsForChangeEventIE8(
  function startWatchingForValueChange (line 1366) | function startWatchingForValueChange(target, targetID) {
  function stopWatchingForValueChange (line 1383) | function stopWatchingForValueChange() {
  function handlePropertyChange (line 1402) | function handlePropertyChange(nativeEvent) {
  function getTargetIDForInputEvent (line 1418) | function getTargetIDForInputEvent(
  function handleEventsForInputEventIE (line 1431) | function handleEventsForInputEventIE(
  function getTargetIDForInputEventIE (line 1458) | function getTargetIDForInputEventIE(
  function shouldUseClickEvent (line 1488) | function shouldUseClickEvent(elem) {
  function getTargetIDForClickEvent (line 1498) | function getTargetIDForClickEvent(
  function insertChildAt (line 1648) | function insertChildAt(parentNode, childNode, index) {
  function checkMask (line 1773) | function checkMask(value, bitmask) {
  function shouldIgnoreValue (line 2111) | function shouldIgnoreValue(name, value) {
  function getNodeName (line 2341) | function getNodeName(markup) {
  function validateInstanceHandle (line 2922) | function validateInstanceHandle() {
  function recomputePluginOrdering (line 3175) | function recomputePluginOrdering() {
  function publishEventForPlugin (line 3235) | function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
  function publishRegistrationName (line 3284) | function publishRegistrationName(registrationName, PluginModule, eventNa...
  function isEndish (line 3497) | function isEndish(topLevelType) {
  function isMoveish (line 3505) | function isMoveish(topLevelType) {
  function isStartish (line 3511) | function isStartish(topLevelType) {
  function forEachEventDispatch (line 3547) | function forEachEventDispatch(event, cb) {
  function executeDispatch (line 3572) | function executeDispatch(event, listener, domID) {
  function executeDispatchesInOrder (line 3582) | function executeDispatchesInOrder(event, cb) {
  function executeDispatchesInOrderStopAtTrueImpl (line 3595) | function executeDispatchesInOrderStopAtTrueImpl(event) {
  function executeDispatchesInOrderStopAtTrue (line 3622) | function executeDispatchesInOrderStopAtTrue(event) {
  function executeDirectDispatch (line 3638) | function executeDirectDispatch(event) {
  function hasDispatches (line 3660) | function hasDispatches(event) {
  function listenerAtPhase (line 3713) | function listenerAtPhase(id, event, propagationPhase) {
  function accumulateDirectionalDispatches (line 3725) | function accumulateDirectionalDispatches(domID, upwards, event) {
  function accumulateTwoPhaseDispatchesSingle (line 3749) | function accumulateTwoPhaseDispatchesSingle(event) {
  function accumulateDispatches (line 3766) | function accumulateDispatches(id, ignoredDirection, event) {
  function accumulateDirectDispatchesSingle (line 3785) | function accumulateDirectDispatchesSingle(event) {
  function accumulateTwoPhaseDispatches (line 3791) | function accumulateTwoPhaseDispatches(events) {
  function accumulateEnterLeaveDispatches (line 3795) | function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {
  function accumulateDirectDispatches (line 3801) | function accumulateDirectDispatches(events) {
  function FallbackCompositionState (line 3904) | function FallbackCompositionState(root) {
  function _assertSingleLink (line 4252) | function _assertSingleLink(input) {
  function _assertValueLink (line 4263) | function _assertValueLink(input) {
  function _assertCheckedLink (line 4274) | function _assertCheckedLink(input) {
  function _handleLinkedValueChange (line 4289) | function _handleLinkedValueChange(e) {
  function _handleLinkedCheckChange (line 4297) | function _handleLinkedCheckChange(e) {
  function remove (line 4412) | function remove(event) {
  function assign (line 4532) | function assign(target, sources) {
  function getListeningForDocument (line 5027) | function getListeningForDocument(mountAt) {
  function ForEachBookKeeping (line 5639) | function ForEachBookKeeping(forEachFunction, forEachContext) {
  function forEachSingleChild (line 5645) | function forEachSingleChild(traverseContext, child, name, i) {
  function forEachChildren (line 5664) | function forEachChildren(children, forEachFunc, forEachContext) {
  function MapBookKeeping (line 5686) | function MapBookKeeping(mapResult, mapFunction, mapContext) {
  function mapSingleChildIntoContext (line 5693) | function mapSingleChildIntoContext(traverseContext, child, name, i) {
  function mapChildren (line 5734) | function mapChildren(children, func, context) {
  function forEachSingleChildDummy (line 5746) | function forEachSingleChildDummy(traverseContext, child, name, i) {
  function countChildren (line 5757) | function countChildren(children, context) {
  function validateTypeDef (line 6147) | function validateTypeDef(Constructor, typeDef, location) {
  function validateMethodOverride (line 6166) | function validateMethodOverride(proto, name) {
  function mixSpecIntoComponent (line 6206) | function mixSpecIntoComponent(Constructor, spec) {
  function mixStaticSpecIntoComponent (line 6326) | function mixStaticSpecIntoComponent(Constructor, statics) {
  function mergeIntoWithNoDuplicateKeys (line 6369) | function mergeIntoWithNoDuplicateKeys(one, two) {
  function createMergedResultFunction (line 6406) | function createMergedResultFunction(one, two) {
  function createChainedFunction (line 6430) | function createChainedFunction(one, two) {
  function bindAutoBindMethod (line 6444) | function bindAutoBindMethod(component, method) {
  function bindAutoBindMethods (line 6500) | function bindAutoBindMethods(component) {
  function ReactComponent (line 6803) | function ReactComponent(props, context) {
  function getDeclarationErrorAddendum (line 7139) | function getDeclarationErrorAddendum(component) {
  function createDOMFactory (line 8237) | function createDOMFactory(tag) {
  function assertValidProps (line 8513) | function assertValidProps(props) {
  function putListener (line 8566) | function putListener(id, registrationName, listener, transaction) {
  function validateDangerousTag (line 8621) | function validateDangerousTag(tag) {
  function ReactDOMComponent (line 8644) | function ReactDOMComponent(tag) {
  function forceUpdateIfMounted (line 9372) | function forceUpdateIfMounted() {
  function updateOptionsIfPendingUpdateAndMounted (line 9624) | function updateOptionsIfPendingUpdateAndMounted() {
  function selectValueType (line 9639) | function selectValueType(props, propName, componentName) {
  function updateOptions (line 9669) | function updateOptions(component, propValue) {
  function isCollapsed (line 9811) | function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
  function getIEOffsets (line 9829) | function getIEOffsets(node) {
  function getModernOffsets (line 9852) | function getModernOffsets(node) {
  function setIEOffsets (line 9908) | function setIEOffsets(node, offsets) {
  function setModernOffsets (line 9942) | function setModernOffsets(node, offsets) {
  function forceUpdateIfMounted (line 10154) | function forceUpdateIfMounted() {
  function ReactDefaultBatchingStrategyTransaction (line 10326) | function ReactDefaultBatchingStrategyTransaction() {
  function autoGenerateWrapperClass (line 10415) | function autoGenerateWrapperClass(type) {
  function inject (line 10424) | function inject() {
  function roundFloat (line 10569) | function roundFloat(val) {
  function addValue (line 10573) | function addValue(obj, key, val) {
  function getTotalTime (line 10878) | function getTotalTime(measurements) {
  function getDOMSummary (line 10891) | function getDOMSummary(measurements) {
  function getExclusiveSummary (line 10910) | function getExclusiveSummary(measurements) {
  function getInclusiveSummary (line 10958) | function getInclusiveSummary(measurements, onlyClean) {
  function getUnchangedComponents (line 11013) | function getUnchangedComponents(measurement) {
  function defineWarningProperty (line 11082) | function defineWarningProperty(object, key) {
  function defineMutationMembrane (line 11119) | function defineMutationMembrane(prototype) {
  function getDeclarationErrorAddendum (line 11394) | function getDeclarationErrorAddendum() {
  function getName (line 11421) | function getName(instance) {
  function getCurrentOwnerDisplayName (line 11439) | function getCurrentOwnerDisplayName() {
  function validateExplicitKey (line 11454) | function validateExplicitKey(element, parentType) {
  function validatePropertyKey (line 11476) | function validatePropertyKey(name, element, parentType) {
  function warnAndMonitorForKeyUse (line 11495) | function warnAndMonitorForKeyUse(message, element, parentType) {
  function validateChildKeys (line 11552) | function validateChildKeys(node, parentType) {
  function checkPropTypes (line 11596) | function checkPropTypes(componentName, propTypes, props, location) {
  function warnForPropsMutation (line 11655) | function warnForPropsMutation(propName, element) {
  function is (line 11691) | function is(a, b) {
  function checkAndWarnForMutatedProps (line 11711) | function checkAndWarnForMutatedProps(element) {
  function validatePropTypes (line 11742) | function validatePropTypes(element) {
  function registerNullComponentID (line 11932) | function registerNullComponentID(id) {
  function deregisterNullComponentID (line 11940) | function deregisterNullComponentID(id) {
  function isNullComponentID (line 11948) | function isNullComponentID(id) {
  function runEventQueueInBatch (line 12014) | function runEventQueueInBatch(events) {
  function findParent (line 12084) | function findParent(node) {
  function TopLevelCallbackBookKeeping (line 12096) | function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
  function handleTopLevelImpl (line 12113) | function handleTopLevelImpl(bookKeeping) {
  function scrollValueMonitor (line 12140) | function scrollValueMonitor(cb) {
  function isInDocument (line 12520) | function isInDocument(node) {
  function getReactRootIDString (line 12678) | function getReactRootIDString(index) {
  function isBoundary (line 12690) | function isBoundary(id, index) {
  function isValidID (line 12701) | function isValidID(id) {
  function isAncestorIDOf (line 12716) | function isAncestorIDOf(ancestorID, descendantID) {
  function getParentID (line 12730) | function getParentID(id) {
  function getNextDescendantID (line 12743) | function getNextDescendantID(ancestorID, destinationID) {
  function getFirstCommonAncestorID (line 12787) | function getFirstCommonAncestorID(oneID, twoID) {
  function traverseParentPath (line 12826) | function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {
  function ReactLink (line 13127) | function ReactLink(value, requestChange) {
  function createLinkTypeChecker (line 13140) | function createLinkTypeChecker(linkType) {
  function firstDifferenceIndex (line 13280) | function firstDifferenceIndex(string1, string2) {
  function getReactRootID (line 13294) | function getReactRootID(container) {
  function getID (line 13309) | function getID(node) {
  function internalGetID (line 13334) | function internalGetID(node) {
  function setID (line 13347) | function setID(node, id) {
  function getNode (line 13363) | function getNode(id) {
  function getNodeFromInstance (line 13377) | function getNodeFromInstance(instance) {
  function isValid (line 13398) | function isValid(node, id) {
  function purgeID (line 13422) | function purgeID(id) {
  function findDeepestCachedAncestorImpl (line 13427) | function findDeepestCachedAncestorImpl(ancestorID) {
  function findDeepestCachedAncestor (line 13441) | function findDeepestCachedAncestor(targetID) {
  function mountComponentIntoNode (line 13462) | function mountComponentIntoNode(
  function batchedMountComponentIntoNode (line 13487) | function batchedMountComponentIntoNode(
  function enqueueMarkup (line 14250) | function enqueueMarkup(parentID, markup, toIndex) {
  function enqueueMove (line 14271) | function enqueueMove(parentID, fromIndex, toIndex) {
  function enqueueRemove (line 14291) | function enqueueRemove(parentID, fromIndex) {
  function enqueueTextContent (line 14311) | function enqueueTextContent(parentID, textContent) {
  function processQueue (line 14329) | function processQueue() {
  function clearQueue (line 14344) | function clearQueue() {
  function getComponentClassForElement (line 14722) | function getComponentClassForElement(element) {
  function createInternalComponent (line 14742) | function createInternalComponent(element) {
  function createInstanceForText (line 14757) | function createInstanceForText(text) {
  function isTextComponent (line 14765) | function isTextComponent(component) {
  function _noMeasure (line 15001) | function _noMeasure(objName, fnName, func) {
  function createTransferStrategy (line 15035) | function createTransferStrategy(mergeStrategy) {
  function transferInto (line 15080) | function transferInto(props, newProps) {
  function createChainableTypeChecker (line 15268) | function createChainableTypeChecker(validate) {
  function createPrimitiveTypeChecker (line 15295) | function createPrimitiveTypeChecker(expectedType) {
  function createAnyTypeChecker (line 15326) | function createAnyTypeChecker() {
  function createArrayOfTypeChecker (line 15330) | function createArrayOfTypeChecker(typeChecker) {
  function createElementTypeChecker (line 15360) | function createElementTypeChecker() {
  function createInstanceTypeChecker (line 15378) | function createInstanceTypeChecker(expectedClass) {
  function createEnumTypeChecker (line 15401) | function createEnumTypeChecker(expectedValues) {
  function createObjectOfTypeChecker (line 15430) | function createObjectOfTypeChecker(typeChecker) {
  function createUnionTypeChecker (line 15462) | function createUnionTypeChecker(arrayOfTypeCheckers) {
  function createNodeChecker (line 15484) | function createNodeChecker() {
  function createShapeTypeChecker (line 15502) | function createShapeTypeChecker(shapeTypes) {
  function isNode (line 15534) | function isNode(propValue) {
  function getPropType (line 15562) | function getPropType(propValue) {
  function getPreciseType (line 15578) | function getPreciseType(propValue) {
  function ReactPutListenerQueue (line 15614) | function ReactPutListenerQueue() {
  function ReactReconcileTransaction (line 15775) | function ReactReconcileTransaction() {
  function attachRefs (line 15853) | function attachRefs() {
  function attachRef (line 15976) | function attachRef(ref, component, owner) {
  function detachRef (line 15985) | function detachRef(ref, component, owner) {
  function renderToString (line 16093) | function renderToString(element) {
  function renderToStaticMarkup (line 16125) | function renderToStaticMarkup(element) {
  function ReactServerRenderingTransaction (line 16216) | function ReactServerRenderingTransaction(renderToStaticMarkup) {
  function createStateKeySetter (line 16327) | function createStateKeySetter(component, key) {
  function Event (line 16417) | function Event(suffix) {}
  function makeSimulator (line 16800) | function makeSimulator(eventType) {
  function buildSimulators (line 16828) | function buildSimulators() {
  function makeNativeSimulator (line 16871) | function makeNativeSimulator(eventType) {
  function getValueForKey (line 16987) | function getValueForKey(key) {
  function detectEvents (line 17080) | function detectEvents() {
  function addEventListener (line 17117) | function addEventListener(node, eventName, eventListener) {
  function removeEventListener (line 17121) | function removeEventListener(node, eventName, eventListener) {
  function enqueueUpdate (line 17424) | function enqueueUpdate(internalInstance) {
  function getInternalInstanceReadyForUpdate (line 17434) | function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
  function ensureInjected (line 17752) | function ensureInjected() {
  function ReactUpdatesFlushTransaction (line 17792) | function ReactUpdatesFlushTransaction() {
  function batchedUpdates (line 17830) | function batchedUpdates(callback, a, b, c, d) {
  function mountOrderComparator (line 17842) | function mountOrderComparator(c1, c2) {
  function runBatchedUpdates (line 17846) | function runBatchedUpdates(transaction) {
  function enqueueUpdate (line 17922) | function enqueueUpdate(component) {
  function asap (line 17952) | function asap(callback, context) {
  function getSelection (line 18186) | function getSelection(node) {
  function constructSelectEvent (line 18220) | function constructSelectEvent(nativeEvent) {
  function SyntheticClipboardEvent (line 18862) | function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeE...
  function SyntheticCompositionEvent (line 18904) | function SyntheticCompositionEvent(
  function SyntheticDragEvent (line 18953) | function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticEvent (line 19021) | function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticFocusEvent (line 19163) | function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticInputEvent (line 19206) | function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticKeyboardEvent (line 19296) | function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEv...
  function SyntheticMouseEvent (line 19383) | function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticTouchEvent (line 19434) | function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticUIEvent (line 19499) | function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function SyntheticWheelEvent (line 19566) | function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {
  function accumulateInto (line 19878) | function accumulateInto(current, next) {
  function adler32 (line 19939) | function adler32(data) {
  function camelize (line 19978) | function camelize(string) {
  function camelizeStyleName (line 20025) | function camelizeStyleName(string) {
  function cloneWithProps (line 20066) | function cloneWithProps(child, props) {
  function containsNode (line 20122) | function containsNode(outerNode, innerNode) {
  function hasArrayNature (line 20175) | function hasArrayNature(obj) {
  function createArrayFromMixed (line 20217) | function createArrayFromMixed(obj) {
  function createFullPageComponent (line 20264) | function createFullPageComponent(tag) {
  function getNodeName (line 20336) | function getNodeName(markup) {
  function createNodesFromMarkup (line 20351) | function createNodesFromMarkup(markup, handleScript) {
  function cx (line 20426) | function cx(classNames) {
  function dangerousStyleValue (line 20482) | function dangerousStyleValue(name, value) {
  function makeEmptyFunction (line 20530) | function makeEmptyFunction(arg) {
  function emptyFunction (line 20541) | function emptyFunction() {}
  function escaper (line 20608) | function escaper(match) {
  function escapeTextContentForBrowser (line 20618) | function escapeTextContentForBrowser(text) {
  function findDOMNode (line 20656) | function findDOMNode(componentOrElement) {
  function flattenSingleChildIntoContext (line 20731) | function flattenSingleChildIntoContext(traverseContext, child, name) {
  function flattenChildren (line 20756) | function flattenChildren(children) {
  function focusNode (line 20787) | function focusNode(node) {
  function getActiveElement (line 20854) | function getActiveElement() /*?DOMElement*/ {
  function getEventCharCode (line 20892) | function getEventCharCode(nativeEvent) {
  function getEventKey (line 21006) | function getEventKey(nativeEvent) {
  function modifierStateGetter (line 21070) | function modifierStateGetter(keyArg) {
  function getEventModifierState (line 21081) | function getEventModifierState(nativeEvent) {
  function getEventTarget (line 21112) | function getEventTarget(nativeEvent) {
  function getIteratorFn (line 21157) | function getIteratorFn(maybeIterable) {
  function getMarkupWrap (line 21271) | function getMarkupWrap(nodeName) {
  function getLeafNode (line 21314) | function getLeafNode(node) {
  function getSiblingNode (line 21328) | function getSiblingNode(node) {
  function getNodeForCharacterOffset (line 21344) | function getNodeForCharacterOffset(root, offset) {
  function getReactRootElementInContainer (line 21393) | function getReactRootElementInContainer(container) {
  function getTextContentAccessor (line 21434) | function getTextContentAccessor() {
  function getUnboundedScrollPosition (line 21476) | function getUnboundedScrollPosition(scrollable) {
  function hyphenate (line 21521) | function hyphenate(string) {
  function hyphenateStyleName (line 21565) | function hyphenateStyleName(string) {
  function isInternalComponentType (line 21614) | function isInternalComponentType(type) {
  function instantiateReactComponent (line 21631) | function instantiateReactComponent(node, parentCompositeType) {
  function isEventSupported (line 21822) | function isEventSupported(eventNameSuffix, capture) {
  function isNode (line 21869) | function isNode(object) {
  function isTextInputElement (line 21920) | function isTextInputElement(elem) {
  function isTextNode (line 21952) | function isTextNode(object) {
  function joinClasses (line 21983) | function joinClasses(className /*, ... */) {
  function mapObject (line 22139) | function mapObject(object, callback, context) {
  function memoizeStringOnly (line 22178) | function memoizeStringOnly(callback) {
  function onlyChild (line 22221) | function onlyChild(children) {
  function quoteAttributeValueForBrowser (line 22318) | function quoteAttributeValueForBrowser(value) {
  function shallowEqual (line 22487) | function shallowEqual(objA, objB) {
  function shouldUpdateReactComponent (line 22543) | function shouldUpdateReactComponent(prevElement, nextElement) {
  function toArray (line 22666) | function toArray(obj) {
  function userProvidedKeyEscaper (line 22761) | function userProvidedKeyEscaper(match) {
  function getComponentKey (line 22772) | function getComponentKey(component, index) {
  function escapeUserProvidedKey (line 22787) | function escapeUserProvidedKey(text) {
  function wrapUserProvidedKey (line 22801) | function wrapUserProvidedKey(key) {
  function traverseAllChildrenImpl (line 22814) | function traverseAllChildrenImpl(
  function traverseAllChildren (line 22973) | function traverseAllChildren(children, callback, traverseContext) {
  function shallowCopy (line 23007) | function shallowCopy(x) {
  function invariantArrayCase (line 23039) | function invariantArrayCase(value, spec, command) {
  function update (line 23060) | function update(value, spec) {

FILE: docs/assets/getting-started-assets/script.js
  function getCodeFromTA (line 12) | function getCodeFromTA(elem) {
  function runCodeHelper (line 22) | function runCodeHelper(code) {
  function runCode (line 44) | function runCode(ids) {
  function runCodePerLine (line 56) | function runCodePerLine() {
  function clearConsole (line 107) | function clearConsole() {
  function escapeHtml (line 120) | function escapeHtml(string) {

FILE: packages/eslint-plugin-mobx/__tests__/utils/get-rule-tester.js
  function getRuleTesterConfig (line 6) | function getRuleTesterConfig() {
  function getRuleTester (line 25) | function getRuleTester() {

FILE: packages/eslint-plugin-mobx/preview/make-observable.js
  method a (line 14) | a() { }
  method c (line 15) | get c() { }
  method c (line 16) | set c() { }
  method [cmp()] (line 18) | [cmp()]() { }
  method a (line 24) | a() { }
  method c (line 25) | get c() { }
  method c (line 26) | set c() { }
  method [cmp()] (line 33) | [cmp()]() { }
  class Exhaustive1 (line 36) | class Exhaustive1 {
    method a (line 38) | a() { }
    method c (line 39) | get c() { }
    method c (line 40) | set c() { }
    method [cmp()] (line 42) | [cmp()]() { }
    method constructor (line 44) | constructor() {
  class Exhaustive2 (line 49) | class Exhaustive2 {
    method a (line 51) | a() { }
    method c (line 52) | get c() { }
    method c (line 53) | set c() { }
    method [cmp()] (line 55) | [cmp()]() { }
    method constructor (line 57) | constructor() {
  class Exhaustive3 (line 69) | class Exhaustive3 {
    method a (line 72) | a() { }
    method a2 (line 73) | a2() { }
    method c (line 74) | get c() { }
    method c2 (line 75) | get c2() { }
    method constructor (line 77) | constructor() {
  class Exhaustive4 (line 86) | class Exhaustive4 {
    method a (line 88) | a() { }
    method c (line 89) | get c() { }
    method constructor (line 91) | constructor() {
    method a (line 100) | a() { }
    method c (line 101) | get c() { }
    method constructor (line 103) | constructor() {
  class Exhaustive4 (line 98) | class Exhaustive4 {
    method a (line 88) | a() { }
    method c (line 89) | get c() { }
    method constructor (line 91) | constructor() {
    method a (line 100) | a() { }
    method c (line 101) | get c() { }
    method constructor (line 103) | constructor() {
  class Unconditional2 (line 108) | class Unconditional2 {
    method constructor (line 109) | constructor() {
  class MissingMakeObservable1 (line 137) | class MissingMakeObservable1 {
  class MissingMakeObservable2 (line 141) | class MissingMakeObservable2 {
    method constructor (line 143) | constructor() { }
  class MissingMakeObservable3 (line 146) | class MissingMakeObservable3 {
    method constructor (line 148) | constructor() {
  class MissingMakeObservable4 (line 153) | class MissingMakeObservable4 {
  class MissingMakeObservable5 (line 159) | class MissingMakeObservable5 {
    method constructor (line 161) | constructor() {

FILE: packages/eslint-plugin-mobx/preview/missing-observer.js
  function Named (line 3) | function Named() {}
  function notCmp (line 20) | function notCmp() {}
  class Cmp (line 26) | class Cmp extends React.Component {}
  class Cmp (line 27) | class Cmp extends Component {}
  class NotCmp (line 33) | class NotCmp {}
  class NotCmp (line 34) | class NotCmp extends Foo {}
  class NotCmp (line 35) | class NotCmp extends React.Foo {}

FILE: packages/eslint-plugin-mobx/src/exhaustive-make-observable.js
  function create (line 7) | function create(context) {

FILE: packages/eslint-plugin-mobx/src/missing-make-observable.js
  function create (line 5) | function create(context) {

FILE: packages/eslint-plugin-mobx/src/missing-observer.js
  function create (line 3) | function create(context) {

FILE: packages/eslint-plugin-mobx/src/no-anonymous-observer.js
  function create (line 3) | function create(context) {

FILE: packages/eslint-plugin-mobx/src/unconditional-make-observable.js
  function create (line 5) | function create(context) {

FILE: packages/eslint-plugin-mobx/src/utils.js
  function isMobxDecorator (line 5) | function isMobxDecorator(decorator) {
  function findAncestor (line 11) | function findAncestor(node, match) {
  function assert (line 18) | function assert(expr, error) {

FILE: packages/mobx-react-lite/__tests__/observer.test.tsx
  function runTestSuite (line 17) | function runTestSuite(mode: "observer" | "useObserver") {
  type IMethods (line 495) | interface IMethods {
  type IProps (line 499) | interface IProps {
  type IMethods (line 530) | interface IMethods {
  type IProps (line 534) | interface IProps {
  type IMethods (line 563) | interface IMethods {
  type IProps (line 567) | interface IProps {
  type IProps (line 610) | interface IProps {
  function isNumber (line 625) | function isNumber() {
  function MyHipsterComponent (line 629) | function MyHipsterComponent() {
  function Name (line 649) | function Name() {
  class User (line 663) | class User {
    method constructor (line 665) | constructor() {
  class Store (line 672) | class Store {
    method logout (line 674) | public logout() {
    method constructor (line 677) | constructor() {
  function tryLogout (line 687) | function tryLogout() {
  type IProps (line 725) | interface IProps {
  type IProps (line 741) | interface IProps {
  type IMethods (line 754) | interface IMethods {
  type IProps (line 758) | interface IProps {
  type IColor (line 774) | interface IColor {
  type ITestComponentProps (line 779) | interface ITestComponentProps<T> {
  function callbackString (line 787) | function callbackString(value: string) {
  function callbackColor (line 790) | function callbackColor(value: IColor) {
  type IMethods (line 803) | interface IMethods {
  type IColor (line 807) | interface IColor {
  type ITestComponentProps (line 812) | interface ITestComponentProps<T> {
  function callbackString (line 823) | function callbackString(value: string) {
  function callbackColor (line 826) | function callbackColor(value: IColor) {
  type TestComponentProps (line 839) | interface TestComponentProps {
  function TestComponent (line 843) | function TestComponent({ a }: TestComponentProps): JSX.Element | null {
  function runEffects (line 953) | async function runEffects() {
  method double (line 976) | get double() {
  method inc (line 980) | inc() {
  function ContextConsumer (line 1031) | function ContextConsumer(_, context) {
  class ContextProvider (line 1042) | class ContextProvider extends React.Component {
    method getChildContext (line 1043) | getChildContext() {
    method render (line 1047) | render() {

FILE: packages/mobx-react-lite/__tests__/printDebugValue.test.ts
  method pound (line 7) | get pound() {

FILE: packages/mobx-react-lite/__tests__/strictAndConcurrentModeUsingFinalizationRegistry.test.tsx
  function nextFrame (line 16) | function nextFrame() {
  function gc_cycle (line 20) | async function gc_cycle() {

FILE: packages/mobx-react-lite/__tests__/transactions.test.tsx
  function flipStuff (line 16) | function flipStuff() {

FILE: packages/mobx-react-lite/__tests__/useAsObservableSource.deprecated.test.tsx
  function Counter (line 23) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 54) | function Parent() {
  method multiplied (line 96) | get multiplied() {
  method inc (line 99) | inc() {
  function Parent (line 114) | function Parent() {
  function Counter (line 149) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 194) | function Parent() {
  method value (line 228) | get value() {
  method value (line 255) | get value() {
  method render (line 300) | render() {
  method render (line 320) | render() {
  method render (line 340) | render() {

FILE: packages/mobx-react-lite/__tests__/useAsObservableSource.test.tsx
  function Counter (line 19) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 48) | function Parent() {
  function Counter (line 84) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 117) | function Parent() {
  method multiplied (line 158) | get multiplied() {
  method inc (line 161) | inc() {
  function Parent (line 180) | function Parent() {
  function Counter (line 215) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 260) | function Parent() {
  method value (line 294) | get value() {
  method value (line 321) | get value() {
  method render (line 363) | render() {
  method render (line 383) | render() {
  method render (line 403) | render() {

FILE: packages/mobx-react-lite/__tests__/useLocalObservable.test.tsx
  function Counter (line 22) | function Counter() {
  method inc (line 126) | inc() {
  method z (line 148) | get z() {
  method getMeThatX (line 166) | getMeThatX() {
  method z (line 169) | get z() {
  method inc (line 188) | inc(delta: number) {
  function Counter (line 243) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 275) | function Parent() {
  function Counter (line 311) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 345) | function Parent() {
  method multiplied (line 386) | get multiplied() {
  method inc (line 389) | inc() {
  function Parent (line 406) | function Parent() {
  method multiplied (line 449) | get multiplied() {
  method inc (line 452) | inc() {
  method render (line 464) | render() {
  method multiplied (line 485) | get multiplied() {
  method inc (line 488) | inc() {
  method render (line 500) | render() {
  method multiplied (line 521) | get multiplied() {
  method inc (line 524) | inc() {
  method render (line 536) | render() {

FILE: packages/mobx-react-lite/__tests__/useLocalStore.deprecated.test.tsx
  function Counter (line 21) | function Counter() {
  method inc (line 130) | inc() {
  method z (line 152) | get z() {
  method getMeThatX (line 170) | getMeThatX() {
  method z (line 173) | get z() {
  method inc (line 192) | inc(delta: number) {
  function Counter (line 248) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 281) | function Parent() {
  function Counter (line 318) | function Counter({ multiplier }: { multiplier: number }) {
  function Parent (line 351) | function Parent() {
  method multiplied (line 392) | get multiplied() {
  method inc (line 395) | inc() {
  function Parent (line 412) | function Parent() {

FILE: packages/mobx-react-lite/__tests__/utils.ts
  function resetMobx (line 3) | function resetMobx(): void {
  function enableDevEnvironment (line 7) | function enableDevEnvironment() {
  function sleep (line 14) | function sleep(time: number) {

FILE: packages/mobx-react-lite/src/ObserverComponent.ts
  type IObserverProps (line 5) | interface IObserverProps {
  function ObserverComponent (line 10) | function ObserverComponent({ children, render }: IObserverProps) {
  function ObserverPropsCheck (line 32) | function ObserverPropsCheck(

FILE: packages/mobx-react-lite/src/index.ts
  function useObserver (line 22) | function useObserver<T>(fn: () => T, baseComponentName: string = "observ...
  function useStaticRendering (line 33) | function useStaticRendering(enable: boolean) {

FILE: packages/mobx-react-lite/src/observer.ts
  type IObserverOptions (line 26) | interface IObserverOptions {
  function observer (line 77) | function observer<P extends object, TRef = {}>(
  function copyStaticProperties (line 189) | function copyStaticProperties(base: any, target: any) {

FILE: packages/mobx-react-lite/src/staticRendering.ts
  function enableStaticRendering (line 3) | function enableStaticRendering(enable: boolean) {
  function isUsingStaticRendering (line 7) | function isUsingStaticRendering(): boolean {

FILE: packages/mobx-react-lite/src/useAsObservableSource.ts
  function useAsObservableSource (line 5) | function useAsObservableSource<TSource extends object>(current: TSource)...

FILE: packages/mobx-react-lite/src/useLocalObservable.ts
  function useLocalObservable (line 4) | function useLocalObservable<TStore extends Record<string, any>>(

FILE: packages/mobx-react-lite/src/useLocalStore.ts
  function useLocalStore (line 12) | function useLocalStore<TStore extends Record<string, any>, TSource exten...

FILE: packages/mobx-react-lite/src/useObserver.ts
  type ObserverAdministration (line 10) | type ObserverAdministration = {
  function createReaction (line 25) | function createReaction(adm: ObserverAdministration) {
  function useObserver (line 35) | function useObserver<T>(render: () => T, baseComponentName: string = "ob...

FILE: packages/mobx-react-lite/src/utils/UniversalFinalizationRegistry.ts
  class FinalizationRegistryType (line 1) | class FinalizationRegistryType<T> {
  constant REGISTRY_FINALIZE_AFTER (line 9) | const REGISTRY_FINALIZE_AFTER = 10_000
  constant REGISTRY_SWEEP_INTERVAL (line 10) | const REGISTRY_SWEEP_INTERVAL = 10_000
  class TimerBasedFinalizationRegistry (line 12) | class TimerBasedFinalizationRegistry<T> implements FinalizationRegistryT...
    method constructor (line 16) | constructor(private readonly finalize: (value: T) => void) {}
    method register (line 19) | register(target: object, value: T, token?: object) {
    method unregister (line 27) | unregister(token: unknown) {
    method scheduleSweep (line 55) | private scheduleSweep() {

FILE: packages/mobx-react-lite/src/utils/observerBatching.ts
  function defaultNoopBatch (line 3) | function defaultNoopBatch(callback: () => void) {
  function observerBatching (line 7) | function observerBatching(reactionScheduler: any) {

FILE: packages/mobx-react-lite/src/utils/printDebugValue.ts
  function printDebugValue (line 3) | function printDebugValue(v: Reaction) {

FILE: packages/mobx-react-lite/src/utils/utils.ts
  function useDeprecated (line 3) | function useDeprecated(msg: string) {

FILE: packages/mobx-react-lite/tsdx.config.js
  method rollup (line 2) | rollup(config) {

FILE: packages/mobx-react/__tests__/Provider.test.tsx
  function A (line 9) | function A() {
  function A (line 22) | function A() {
  function B (line 41) | function B() {
  function A (line 49) | function A() {
  function A (line 69) | function A({ foo }) {

FILE: packages/mobx-react/__tests__/context.test.tsx
  method render (line 13) | render() {
  class App (line 24) | class App extends React.Component {
    method render (line 25) | render() {
  class Main (line 54) | class Main extends React.Component<any, any> {
    method getDerivedStateFromProps (line 55) | static getDerivedStateFromProps(nextProps, prevState) {
    method render (line 65) | render() {
    method constructor (line 96) | constructor(props) {
    method getDerivedStateFromProps (line 101) | static getDerivedStateFromProps() {
    method render (line 107) | render() {
  class Main (line 90) | @observer
    method getDerivedStateFromProps (line 55) | static getDerivedStateFromProps(nextProps, prevState) {
    method render (line 65) | render() {
    method constructor (line 96) | constructor(props) {
    method getDerivedStateFromProps (line 101) | static getDerivedStateFromProps() {
    method render (line 107) | render() {

FILE: packages/mobx-react/__tests__/disposeOnUnmount.test.tsx
  type ClassC (line 6) | interface ClassC extends MockedComponentClass {
  function testComponent (line 13) | function testComponent(C: ClassC, afterMount?: Function, afterUnmount?: ...
  class C (line 35) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 56) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 89) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 122) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 152) | @observer
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 174) | @observer
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 208) | @observer
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 243) | @observer
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  function doTest (line 273) | function doTest(withObserver) {
  class C (line 361) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 390) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class B (line 398) | class B extends C {
    method fn (line 400) | fn() {}
    method constructor (line 414) | constructor(props) {
  class C (line 406) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class B (line 412) | class B extends C {
    method fn (line 400) | fn() {}
    method constructor (line 414) | constructor(props) {
  class C (line 427) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class C (line 444) | class C extends React.Component {
    method render (line 45) | render() {
    method render (line 66) | render() {
    method componentWillUnmount (line 70) | componentWillUnmount() {
    method render (line 99) | render() {
    method render (line 123) | render() {
    method constructor (line 130) | constructor(props) {
    method render (line 163) | render() {
    method render (line 185) | render() {
    method componentWillUnmount (line 189) | componentWillUnmount() {
    method render (line 219) | render() {
    method render (line 245) | render() {
    method constructor (line 252) | constructor(props) {
    method componentWillUnmount (line 362) | componentWillUnmount() {
    method constructor (line 366) | constructor(props) {
    method render (line 373) | render() {
    method fn (line 378) | fn() {
    method render (line 391) | render() {
    method render (line 407) | render() {
    method componentDidMount (line 431) | componentDidMount() {
    method render (line 435) | render() {
    method render (line 451) | render() {
  class A (line 461) | class A extends React.Component {
    method constructor (line 467) | constructor(props) {
    method render (line 472) | render() {

FILE: packages/mobx-react/__tests__/finalizationRegistry.tsx
  class A (line 25) | @observer
    method constructor (line 27) | constructor(props) {
    method componentDidMount (line 34) | componentDidMount(): void {
    method render (line 37) | render() {
  class B (line 47) | class B extends React.Component {
    method render (line 48) | render() {
  function App (line 56) | function App() {

FILE: packages/mobx-react/__tests__/hooks.test.tsx
  method getPropX (line 23) | get getPropX() {
  method getPropX (line 65) | get getPropX() {

FILE: packages/mobx-react/__tests__/inject.test.tsx
  method render (line 15) | render() {
  method render (line 39) | render() {
  method render (line 51) | render() {
  method render (line 66) | render() {
  method render (line 78) | render() {
  method render (line 90) | render() {
  method render (line 122) | render() {
  method render (line 135) | render() {
  method render (line 155) | render() {
  method render (line 175) | render() {
  method render (line 197) | render() {
  method render (line 210) | render() {
  class FancyComp (line 224) | class FancyComp extends React.Component<any, any> {
    method render (line 226) | render() {
    method doSomething (line 231) | doSomething() {}
  class B (line 271) | class B extends React.Component<any, any> {
    method render (line 276) | render() {
  method render (line 307) | render() {
  method render (line 351) | render() {
  method render (line 373) | render() {
  function connect (line 412) | function connect() {
  class State (line 419) | class State {
    method isHighlighted (line 422) | isHighlighted(item) {
    method constructor (line 431) | constructor() {
  class ListComponent (line 447) | class ListComponent extends React.PureComponent<any> {
    method render (line 448) | render() {
  class ItemComponent (line 463) | @connect(({ state }, { item }) => {
    method render (line 481) | render() {
  class MainCompClass (line 526) | class MainCompClass extends React.Component<any, any> {
    method render (line 528) | render() {
  function App (line 542) | function App() {

FILE: packages/mobx-react/__tests__/issue21.test.tsx
  method activeStep (line 33) | get activeStep() {
  method setActiveStep (line 44) | setActiveStep(modeToActivate) {
  method render (line 61) | render() {
  method componentWillUnmount (line 85) | componentWillUnmount() {
  method render (line 88) | render() {
  function createItem (line 125) | function createItem(subid, label) {
  method componentDidUpdate (line 156) | componentDidUpdate(prevProps) {
  method render (line 159) | render() {
  method render (line 168) | render() {
  function changeStuff (line 182) | function changeStuff() {
  function createItem (line 216) | function createItem(subid, label) {
  method componentDidMount (line 234) | componentDidMount() {
  method componentDidUpdate (line 237) | componentDidUpdate(prevProps) {
  method render (line 240) | render() {
  method render (line 249) | render() {
  function changeStuff (line 266) | function changeStuff() {
  method componentDidUpdate (line 284) | componentDidUpdate(prevProps) {
  method render (line 288) | render() {
  method render (line 303) | render() {

FILE: packages/mobx-react/__tests__/issue806.test.tsx
  class Issue806Component (line 7) | @observer
    method render (line 9) | render() {
  class Issue806Component2 (line 19) | @observer
    method render (line 21) | render() {

FILE: packages/mobx-react/__tests__/misc.test.tsx
  function ExampleState (line 7) | function ExampleState() {
  method render (line 19) | render() {
  method constructor (line 55) | constructor(p) {
  method render (line 60) | render() {

FILE: packages/mobx-react/__tests__/observer.test.tsx
  method render (line 49) | render() {
  method y (line 170) | get y() {
  class Row (line 256) | class Row extends React.Component<any, any> {
    method constructor (line 257) | constructor(props) {
    method render (line 261) | render() {
  method render (line 327) | render() {
  method render (line 338) | render() {
  method render (line 352) | render() {
  class T (line 367) | class T extends React.Component<any, any> {
    method computedProp (line 369) | get computedProp() {
    method render (line 372) | render() {
  class Parent (line 384) | class Parent extends React.Component {
    method render (line 386) | render() {
    method render (line 811) | render() {
    method componentDidMount (line 816) | componentDidMount() {
    method render (line 1311) | render() {
  class Outer (line 417) | class Outer extends React.Component<any> {
    method render (line 420) | render() {
    method getDerivedStateFromError (line 424) | static getDerivedStateFromError() {
    method componentDidCatch (line 428) | componentDidCatch(error, info) {
  method render (line 437) | render() {
  method render (line 483) | render() {
  class Comp (line 524) | @observer
    method computed (line 527) | get computed() {
    method render (line 531) | render() {
  method render (line 542) | render() {
  function stuff (line 549) | function stuff() {
  class Component (line 569) | @observer
    method computed (line 572) | get computed() {
    method render (line 576) | render() {
  function stuff (line 591) | function stuff() {
  class User (line 673) | class User {
  class Store (line 678) | class Store {
    method logout (line 682) | logout() {
    method constructor (line 685) | constructor() {
  function tryLogout (line 690) | function tryLogout() {
  method render (line 771) | render() {
  class Child (line 796) | @observer
    method getPropX (line 799) | get getPropX() {
    method render (line 803) | render() {
    method componentDidMount (line 1301) | componentDidMount(): void {
    method render (line 1304) | render() {
  class Parent (line 809) | class Parent extends React.Component {
    method render (line 386) | render() {
    method render (line 811) | render() {
    method componentDidMount (line 816) | componentDidMount() {
    method render (line 1311) | render() {
  class Test (line 837) | @observer
    method constructor (line 845) | constructor(props) {
    method render (line 851) | render() {
    method componentDidUpdate (line 855) | componentDidUpdate() {
  class AlreadyObserver (line 881) | @observer
    method render (line 883) | render() {
  class Component (line 892) | class Component extends React.Component<any, any> {
    method computed (line 572) | get computed() {
    method render (line 576) | render() {
  class TestCmp (line 904) | @observer
    method componentDidMount (line 906) | componentDidMount() {
    method render (line 909) | render() {
    method render (line 938) | render() {
  class TestCmp (line 936) | @observer
    method componentDidMount (line 906) | componentDidMount() {
    method render (line 909) | render() {
    method render (line 938) | render() {
  class A (line 962) | @observer
    method constructor (line 964) | constructor(props) {
    method componentDidMount (line 968) | componentDidMount(): void {
    method render (line 971) | render() {
  class B (line 982) | class B extends React.Component {
    method render (line 983) | render() {
  function App (line 991) | function App() {
  method render (line 1021) | render() {
  method componentDidMount (line 1045) | componentDidMount(): void {
  method componentWillUnmount (line 1051) | componentWillUnmount(): void {
  method render (line 1055) | render() {
  method componentDidMount (line 1075) | componentDidMount(): void {
  method render (line 1079) | render() {
  method componentWillUnmount (line 1097) | componentWillUnmount(): void {
  method render (line 1101) | render() {
  method computed (line 1130) | get computed() {
  method constructor (line 1134) | constructor(props) {
  method componentDidMount (line 1146) | componentDidMount(): void {
  method componentDidUpdate (line 1157) | componentDidUpdate(): void {
  method componentWillUnmount (line 1162) | componentWillUnmount(): void {
  method render (line 1166) | render() {
  method constructor (line 1202) | constructor(props, context) {
  method computed (line 1219) | get computed() {
  method componentDidMount (line 1223) | componentDidMount(): void {
  method componentDidUpdate (line 1233) | componentDidUpdate(): void {
  method componentWillUnmount (line 1246) | componentWillUnmount(): void {
  method render (line 1250) | render() {
  class Child (line 1299) | @observer
    method getPropX (line 799) | get getPropX() {
    method render (line 803) | render() {
    method componentDidMount (line 1301) | componentDidMount(): void {
    method render (line 1304) | render() {
  class Parent (line 1309) | @observer
    method render (line 386) | render() {
    method render (line 811) | render() {
    method componentDidMount (line 816) | componentDidMount() {
    method render (line 1311) | render() {

FILE: packages/mobx-react/__tests__/propTypes.test.ts
  function typeCheckFail (line 9) | function typeCheckFail(declaration, value, message) {
  function typeCheckFailRequiredValues (line 27) | function typeCheckFailRequiredValues(declaration) {
  function typeCheckPass (line 55) | function typeCheckPass(declaration: any, value?: any) {

FILE: packages/mobx-react/__tests__/stateless.test.tsx
  class Comp (line 63) | class Comp extends React.Component {
    method render (line 64) | render() {

FILE: packages/mobx-react/__tests__/timerBasedFinalizationRegistry.tsx
  class TestCmp (line 15) | @observer
    method render (line 17) | render() {

FILE: packages/mobx-react/__tests__/transactions.test.tsx
  function flipStuff (line 15) | function flipStuff() {
  method render (line 25) | render() {

FILE: packages/mobx-react/__tests__/utils/ErrorCatcher.tsx
  type ErrorCatcherState (line 3) | interface ErrorCatcherState {
  class ErrorCatcher (line 8) | class ErrorCatcher extends React.Component<any, Readonly<ErrorCatcherSta...
    method constructor (line 11) | constructor(props) {
    method componentDidCatch (line 16) | componentDidCatch(error, info) {
    method render (line 22) | render() {

FILE: packages/mobx-react/__tests__/utils/compile-ts.tsx
  class T1 (line 14) | @observer
    method render (line 16) | render() {
  method render (line 24) | render() {
  class T6 (line 51) | @observer
    method render (line 53) | render() {
  class T7 (line 67) | class T7 extends React.Component<{ pizza: number }, {}> {
    method render (line 68) | render() {
  class ProviderTest (line 76) | class ProviderTest extends React.Component<any, any> {
    method render (line 77) | render() {
  class T11 (line 86) | @inject(() => ({ x: 3 }))
    method render (line 88) | render() {
  class T15 (line 98) | class T15 extends React.Component<{ pizza: number; x?: number }, {}> {
    method render (line 99) | render() {
  constant T16 (line 108) | const T16 = inject(() => ({ x: 3 }))(T15)
  class T17 (line 110) | class T17 extends React.Component<{}, {}> {
    method render (line 111) | render() {
  class T12 (line 125) | @inject("a", "b")
    method render (line 127) | render() {
  class T13 (line 132) | @inject("a", "b")
    method render (line 135) | render() {
  method render (line 156) | render() {
  class LoginContainer2 (line 170) | @inject(allStores => ({
    method render (line 185) | render() {
  class ObserverTest (line 198) | class ObserverTest extends React.Component<any, any> {
    method render (line 199) | render() {
  class ObserverTest2 (line 204) | class ObserverTest2 extends React.Component<any, any> {
    method render (line 205) | render() {
  class ComponentWithoutPropsAndState (line 210) | @observer
    method componentDidUpdate (line 212) | componentDidUpdate() {}
    method render (line 214) | render() {
  class App2 (line 232) | @inject("store")
  class InjectSomeStores (line 236) | class InjectSomeStores extends React.Component<{ x: any }, {}> {
    method render (line 237) | render() {
  class T (line 245) | class T extends React.Component<{ x: number }> {
    method render (line 246) | render() {
  class DisposeOnUnmountComponent (line 257) | class DisposeOnUnmountComponent extends React.Component<{}> {

FILE: packages/mobx-react/__tests__/utils/withConsole.ts
  function withConsole (line 7) | function withConsole(...args: Array<any>): void {

FILE: packages/mobx-react/src/Provider.tsx
  type ProviderProps (line 7) | interface ProviderProps extends IValueMap {
  function Provider (line 11) | function Provider(props: ProviderProps) {

FILE: packages/mobx-react/src/disposeOnUnmount.ts
  type Disposer (line 7) | type Disposer = () => void
  function runDisposersOnWillUnmount (line 12) | function runDisposersOnWillUnmount() {
  function disposeOnUnmount (line 39) | function disposeOnUnmount(

FILE: packages/mobx-react/src/inject.ts
  function createStoreInjector (line 13) | function createStoreInjector(
  function getInjectName (line 42) | function getInjectName(component: IReactComponent<any>, injectNames: str...
  function grabStoresByName (line 54) | function grabStoresByName(
  function inject (line 93) | function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNam...

FILE: packages/mobx-react/src/observer.tsx
  function observer (line 12) | function observer<T extends IReactComponent>(component: T, context?: Cla...

FILE: packages/mobx-react/src/observerClass.ts
  type ObserverAdministration (line 27) | type ObserverAdministration = {
  function getAdministration (line 39) | function getAdministration(component: Component): ObserverAdministration {
  function makeClassComponentObserver (line 55) | function makeClassComponentObserver(
  function getDisplayName (line 177) | function getDisplayName(componentClass: ComponentClass) {
  function createReactiveRender (line 181) | function createReactiveRender(originalRender: any) {
  function createReaction (line 217) | function createReaction(admin: ObserverAdministration) {
  function observerSCU (line 237) | function observerSCU(nextProps: ClassAttributes<any>, nextState: any): b...
  function createObservablePropDescriptor (line 254) | function createObservablePropDescriptor(key: "props" | "state" | "contex...

FILE: packages/mobx-react/src/propTypes.ts
  function createChainableTypeChecker (line 4) | function createChainableTypeChecker(validator: React.Validator<any>): Re...
  function isSymbol (line 48) | function isSymbol(propType: any, propValue: any): boolean {
  function getPropType (line 68) | function getPropType(propValue: any): string {
  function getPreciseType (line 87) | function getPreciseType(propValue: any): string {
  function createObservableTypeCheckerCreator (line 99) | function createObservableTypeCheckerCreator(
  function createObservableArrayOfTypeChecker (line 148) | function createObservableArrayOfTypeChecker(

FILE: packages/mobx-react/src/types/IReactComponent.ts
  type IReactComponent (line 1) | type IReactComponent<P = any> =

FILE: packages/mobx-react/src/types/IStoresToProps.ts
  type IStoresToProps (line 2) | type IStoresToProps<

FILE: packages/mobx-react/src/types/IValueMap.ts
  type IValueMap (line 1) | type IValueMap = Record<string, any>

FILE: packages/mobx-react/src/types/IWrappedComponent.ts
  type IWrappedComponent (line 2) | type IWrappedComponent<P> = {

FILE: packages/mobx-react/src/utils/utils.ts
  function shallowEqual (line 1) | function shallowEqual(objA: any, objB: any): boolean {
  function is (line 22) | function is(x: any, y: any): boolean {
  function copyStaticProperties (line 49) | function copyStaticProperties(base: object, target: object): void {
  function setHiddenProp (line 64) | function setHiddenProp(target: object, prop: any, value: any): void {
  type Mixins (line 84) | interface Mixins extends Record<string, any> {
  function getMixins (line 89) | function getMixins(target: object, methodName: string): Mixins {
  function wrapper (line 97) | function wrapper(realMethod: Function, mixins: Mixins, ...args: Array<an...
  function wrapFunction (line 118) | function wrapFunction(realMethod: Function, mixins: Mixins): (...args: A...
  function patch (line 125) | function patch(target: object, methodName: string, mixinMethod: Function...
  function createDefinition (line 150) | function createDefinition(

FILE: packages/mobx-react/tsdx.config.js
  method rollup (line 2) | rollup(config) {

FILE: packages/mobx-undecorate/__tests__/undecorate.spec.ts
  function convert (line 5) | function convert(

FILE: packages/mobx-undecorate/cli.js
  function interpret_cli_args (line 61) | function interpret_cli_args() {

FILE: packages/mobx-undecorate/src/undecorate.ts
  type MobxUndecorateOptions (line 14) | interface MobxUndecorateOptions {
  method parse (line 82) | parse(code) {
  function transform (line 87) | function transform(

FILE: packages/mobx/__tests__/decorators_20223/stage3-decorators.ts
  method equal (line 35) | equal(a: any, b: any) {
  method deepEqual (line 38) | deepEqual(a: any, b: any) {
  method notEqual (line 41) | notEqual(a: any, b: any) {
  method throws (line 45) | throws(a: any, b: any) {
  class Order (line 51) | class Order {
    method total (line 58) | get total() {
    method total (line 100) | get total() {
  class Order (line 93) | class Order {
    method total (line 58) | get total() {
    method total (line 100) | get total() {
  class Box (line 137) | class Box {
    method width (line 145) | get width() {
    method addSize (line 149) | addSize() {
  class Bla (line 177) | class Bla {
    method propX (line 180) | get propX() {
    method propX (line 183) | set propX(v) {
    method computedVal (line 749) | get computedVal() {
    method constructor (line 752) | constructor() {
  class Order (line 196) | class Order {
    method total (line 58) | get total() {
    method total (line 100) | get total() {
  class Order (line 204) | class Order {
    method total (line 58) | get total() {
    method total (line 100) | get total() {
  class TestClass (line 212) | class TestClass {
    method boxedSum (line 216) | get boxedSum() {
  function report (line 242) | function report<T>(msg: string, value: T) {
  class Card (line 247) | class Card {
    method constructor (line 248) | constructor(public game: Game, public id: number) {
    method isWrong (line 253) | get isWrong() {
    method isSelected (line 261) | get isSelected() {
  class Game (line 269) | class Game {
    method isMatchWrong (line 274) | get isMatchWrong() {
  class Test (line 305) | class Test {
  function normalizeSpyEvents (line 327) | function normalizeSpyEvents(events: any[]) {
  class Store (line 336) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class Store (line 366) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class Store (line 414) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class Store (line 446) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class Store (line 497) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class Store (line 505) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class A (line 524) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 555) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 570) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class B (line 574) | class B extends A {
    method c (line 577) | get c() {
    method constructor (line 580) | constructor() {
    method c (line 607) | get c() {
    method constructor (line 1002) | constructor() {
  class A (line 599) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class B (line 603) | class B {
    method c (line 577) | get c() {
    method constructor (line 580) | constructor() {
    method c (line 607) | get c() {
    method constructor (line 1002) | constructor() {
  class A (line 626) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 648) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class Todo (line 705) | class Todo {
    method bla (line 710) | get bla() {
    method someMethod (line 713) | someMethod() {}
    method constructor (line 714) | constructor(title: string) {
    method upperCase (line 734) | get upperCase() {
  class Todo (line 731) | class Todo {
    method bla (line 710) | get bla() {
    method someMethod (line 713) | someMethod() {}
    method constructor (line 714) | constructor(title: string) {
    method upperCase (line 734) | get upperCase() {
  class Bla (line 745) | class Bla {
    method propX (line 180) | get propX() {
    method propX (line 183) | set propX(v) {
    method computedVal (line 749) | get computedVal() {
    method constructor (line 752) | constructor() {
  class Person (line 767) | class Person {
    method fullName (line 776) | get fullName() {
    method fullName (line 781) | set fullName(val) {
  class A (line 815) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 826) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 841) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 856) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 873) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 889) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class Time (line 906) | class Time {
    method constructor (line 907) | constructor(hour: number, minute: number) {
    method time (line 917) | public get time() {
  class User (line 947) | class User {
  class A (line 962) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class A (line 995) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class B (line 999) | class B extends A {
    method c (line 577) | get c() {
    method constructor (line 580) | constructor() {
    method c (line 607) | get c() {
    method constructor (line 1002) | constructor() {
  class A (line 1020) | class A {
    method d (line 529) | get d() {
    method m1 (line 558) | m1() {}
    method c (line 630) | get c() {
    method d (line 634) | get d() {
    method b (line 651) | get b() {
    method m (line 655) | m() {} // non-enumerable, on proto
    method inc (line 876) | inc(value: number) {
    method y (line 966) | get y() {
    method m1 (line 1022) | m1() {}
    method m3 (line 1024) | m3() {}
  class X (line 1039) | class X {
  class X (line 1056) | class X {
  class TestClass (line 1073) | class TestClass {
    method boxedSum (line 216) | get boxedSum() {
  class Store (line 1098) | class Store {
    method constructor (line 337) | constructor(private multiplier: number) {}
    method add (line 340) | add(a: number, b: number): number {
    method constructor (line 367) | constructor(private multiplier: number) {}
    method add (line 370) | add(a: number, b: number): number {
    method constructor (line 415) | constructor(private multiplier: number) {}
    method constructor (line 447) | constructor(private multiplier: number) {}
  class SubStore (line 1105) | class SubStore extends Store {

FILE: packages/mobx/__tests__/mixed-versions/state-sharing.js
  function testOutput (line 4) | function testOutput(cmd, expected) {

FILE: packages/mobx/__tests__/perf/perf.js
  function gc (line 4) | function gc() {
  function voidObserver (line 8) | function voidObserver() {
  function order_system_helper (line 312) | function order_system_helper(t, usebatch, keepObserving) {
  function Item (line 466) | function Item(a, b, c) {
  function sortFn (line 478) | function sortFn(l, r) {
  function now (line 771) | function now() {

FILE: packages/mobx/__tests__/v4/base/array.js
  function predicate (line 129) | function predicate(item, index) {
  function predicate (line 160) | function predicate(item, index) {
  function generate (line 481) | function generate(count) {
  class Test (line 584) | class Test {
    method constructor (line 587) | constructor() {
  function callback (line 609) | function callback() {
  function supressConsoleWarn (line 658) | function supressConsoleWarn(fn) {

FILE: packages/mobx/__tests__/v4/base/autorun.js
  method d (line 55) | get d() {

FILE: packages/mobx/__tests__/v4/base/cycles.js
  function Item (line 139) | function Item(value) {
  function Store (line 146) | function Store() {

FILE: packages/mobx/__tests__/v4/base/extendObservable.js
  class Box (line 14) | class Box {
    method width (line 22) | get width() {
    method addSize (line 31) | addSize() {
    method constructor (line 37) | constructor() {
  method someFunc (line 47) | get someFunc() {
  method width (line 78) | get width() {
  method addSize (line 87) | addSize() {
  method someFunc (line 100) | get someFunc() {
  method width (line 131) | get width() {
  method addSize (line 140) | addSize() {

FILE: packages/mobx/__tests__/v4/base/extras.js
  function stripTrackerOutput (line 82) | function stripTrackerOutput(output) {
  function Clazz (line 117) | function Clazz() {
  function atom (line 131) | function atom(thing, prop) {
  function Clazz (line 170) | function Clazz() {
  function name (line 184) | function name(thing, prop) {
  function Clazz (line 218) | function Clazz() {
  function adm (line 232) | function adm(thing, prop) {
  method b (line 298) | get b() {
  class A (line 367) | class A {
    method constructor (line 371) | constructor(x) {

FILE: packages/mobx/__tests__/v4/base/makereactive.js
  function buffer (line 6) | function buffer() {
  function Order (line 18) | function Order() {}
  function ReactiveOrder (line 20) | function ReactiveOrder(price) {
  function Order (line 138) | function Order(price) {
  method reactive (line 216) | get reactive() {
  function c (line 330) | function c() {
  function nc (line 336) | function nc() {
  method b (line 415) | get b() {
  method c (line 419) | get c() {
  method y (line 492) | get y() {
  method y (line 495) | set y(v) {
  class Store (line 601) | class Store {
    method constructor (line 602) | constructor() {
    method constructor (line 615) | constructor() {
    method constructor (line 629) | constructor() {
  class Store (line 612) | class Store {
    method constructor (line 602) | constructor() {
    method constructor (line 615) | constructor() {
    method constructor (line 629) | constructor() {
  class Store (line 626) | class Store {
    method constructor (line 602) | constructor() {
    method constructor (line 615) | constructor() {
    method constructor (line 629) | constructor() {

FILE: packages/mobx/__tests__/v4/base/nested.js
  function Item (line 6) | function Item(name) {
  method asString (line 19) | get asString() {
  function increment (line 51) | function increment() {
  function brokenIncrement (line 60) | function brokenIncrement() {
  method scheduler (line 73) | scheduler(f) {

FILE: packages/mobx/__tests__/v4/base/object-api.js
  function expectEquality (line 63) | function expectEquality() {
  function expectKeysReaction (line 67) | function expectKeysReaction() {
  function expectValuesReaction (line 71) | function expectValuesReaction() {
  function expectEntriesReaction (line 75) | function expectEntriesReaction() {
  method y (line 419) | get y() {

FILE: packages/mobx/__tests__/v4/base/observables.js
  function buffer (line 10) | function buffer() {
  method total (line 337) | get total() {
  method total (line 367) | get total() {
  function Bzz (line 381) | function Bzz() {
  method b (line 406) | get b() {
  method calories (line 423) | get calories() {
  method da (line 461) | get da() {
  function stripSpyOutput (line 851) | function stripSpyOutput(events) {
  method c (line 866) | get c() {
  method c (line 908) | get c() {
  method b (line 965) | get b() {
  function Thing (line 1059) | function Thing(value) {
  method b (line 1111) | get b() {
  method volume (line 1424) | get volume() {
  method volume (line 1440) | get volume() {
  method volume (line 1443) | set volume(v) {
  method propX (line 1466) | get propX() {
  method propX (line 1469) | set propX(v) {
  method y (line 1488) | get y() {
  method y (line 1491) | set y(v) {
  method b (line 1520) | get b() {
  function Time (line 1711) | function Time(hour, minute) {
  method get (line 1724) | get() {
  function Time (line 1755) | function Time(hour, minute) {
  method time (line 1801) | get time() {
  method y (line 1859) | get y() {
  class Foo (line 1874) | class Foo {
    method constructor (line 1877) | constructor() {
    method y (line 1881) | @computed({ keepAlive: true })
    method constructor (line 1982) | constructor() {
    method y (line 1986) | @computed({ keepAlive: true })
  method y (line 1897) | get y() {
  method y (line 1917) | get y() {
  method y (line 1937) | get y() {
  method y (line 1959) | get y() {
  class Foo (line 1979) | class Foo {
    method constructor (line 1877) | constructor() {
    method y (line 1881) | @computed({ keepAlive: true })
    method constructor (line 1982) | constructor() {
    method y (line 1986) | @computed({ keepAlive: true })
  function tuple (line 2004) | function tuple() {

FILE: packages/mobx/__tests__/v4/base/spy.js
  function doStuff (line 25) | function doStuff() {
  method y (line 71) | get y() {

FILE: packages/mobx/__tests__/v4/base/tojs.js
  function Person (line 255) | function Person() {
  function Person (line 284) | function Person() {
  function MyClass (line 298) | function MyClass() {}
    method constructor (line 350) | constructor() {
  class MyClass (line 347) | class MyClass {
    method constructor (line 350) | constructor() {

FILE: packages/mobx/__tests__/v5/base/action.js
  function Todos (line 280) | function Todos() {
  method a1 (line 410) | a1() {
  method a2 (line 413) | a2() {
  method a3 (line 416) | a3() {
  method yValue (line 458) | get yValue() {
  method method (line 490) | method() {}

FILE: packages/mobx/__tests__/v5/base/array.js
  function predicate (line 156) | function predicate(item, index) {
  function predicate (line 184) | function predicate(item, index) {
  function generate (line 522) | function generate(count) {
  class Test (line 627) | class Test {
    method constructor (line 630) | constructor() {
  function callback (line 652) | function callback() {
  function supressConsoleWarn (line 699) | function supressConsoleWarn(fn) {

FILE: packages/mobx/__tests__/v5/base/autorun.js
  method d (line 92) | get d() {

FILE: packages/mobx/__tests__/v5/base/autorunAsync.js
  function check (line 16) | function check(fired, cCalcs, result) {

FILE: packages/mobx/__tests__/v5/base/babel-decorators.js
  class Box (line 21) | class Box {
    method constructor (line 30) | constructor() {
    method width (line 34) | @computed
    method addSize (line 38) | @action
  class A (line 71) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class TestClass (line 87) | class TestClass {
    method constructor (line 91) | constructor() {
    method boxedSum (line 95) | @computed.struct
    method constructor (line 126) | constructor() {
    method collection (line 130) | @computed.struct
  class TestClass (line 122) | class TestClass {
    method constructor (line 91) | constructor() {
    method boxedSum (line 95) | @computed.struct
    method constructor (line 126) | constructor() {
    method collection (line 130) | @computed.struct
  class Order (line 149) | class Order {
    method constructor (line 155) | constructor() {
    method total (line 159) | @computed
  class Test (line 166) | class Test {
    method constructor (line 170) | constructor() {
  class Person (line 196) | class Person {
    method constructor (line 200) | constructor() {
    method fullName (line 204) | set fullName(val) {
    method fullName (line 207) | @computed
  function normalizeSpyEvents (line 242) | function normalizeSpyEvents(events) {
  class Store (line 251) | class Store {
    method constructor (line 252) | constructor(multiplier) {
    method add (line 257) | @action
    method constructor (line 285) | constructor(multiplier) {
    method add (line 290) | @action("zoem zoem")
    method constructor (line 336) | constructor(multiplier) {
    method constructor (line 370) | constructor(multiplier) {
    method constructor (line 426) | constructor() {
    method constructor (line 439) | constructor() {
  class Store (line 284) | class Store {
    method constructor (line 252) | constructor(multiplier) {
    method add (line 257) | @action
    method constructor (line 285) | constructor(multiplier) {
    method add (line 290) | @action("zoem zoem")
    method constructor (line 336) | constructor(multiplier) {
    method constructor (line 370) | constructor(multiplier) {
    method constructor (line 426) | constructor() {
    method constructor (line 439) | constructor() {
  class Store (line 335) | class Store {
    method constructor (line 252) | constructor(multiplier) {
    method add (line 257) | @action
    method constructor (line 285) | constructor(multiplier) {
    method add (line 290) | @action("zoem zoem")
    method constructor (line 336) | constructor(multiplier) {
    method constructor (line 370) | constructor(multiplier) {
    method constructor (line 426) | constructor() {
    method constructor (line 439) | constructor() {
  class Store (line 369) | class Store {
    method constructor (line 252) | constructor(multiplier) {
    method add (line 257) | @action
    method constructor (line 285) | constructor(multiplier) {
    method add (line 290) | @action("zoem zoem")
    method constructor (line 336) | constructor(multiplier) {
    method constructor (line 370) | constructor(multiplier) {
    method constructor (line 426) | constructor() {
    method constructor (line 439) | constructor() {
  class Store (line 423) | class Store {
    method constructor (line 252) | constructor(multiplier) {
    method add (line 257) | @action
    method constructor (line 285) | constructor(multiplier) {
    method add (line 290) | @action("zoem zoem")
    method constructor (line 336) | constructor(multiplier) {
    method constructor (line 370) | constructor(multiplier) {
    method constructor (line 426) | constructor() {
    method constructor (line 439) | constructor() {
  class Store (line 436) | class Store {
    method constructor (line 252) | constructor(multiplier) {
    method add (line 257) | @action
    method constructor (line 285) | constructor(multiplier) {
    method add (line 290) | @action("zoem zoem")
    method constructor (line 336) | constructor(multiplier) {
    method constructor (line 370) | constructor(multiplier) {
    method constructor (line 426) | constructor() {
    method constructor (line 439) | constructor() {
  class A (line 461) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 497) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 522) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class B (line 530) | class B extends A {
    method constructor (line 533) | constructor() {
    method c (line 538) | @computed
    method constructor (line 744) | constructor() {
    method method (line 749) | method() {
    method constructor (line 792) | constructor() {
  class A (line 558) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 585) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 648) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class Todo (line 690) | class Todo {
    method constructor (line 695) | constructor(title) {
    method constructor (line 715) | constructor() {
    method upperCase (line 719) | @computed
  class Todo (line 712) | class Todo {
    method constructor (line 695) | constructor(title) {
    method constructor (line 715) | constructor() {
    method upperCase (line 719) | @computed
  class A (line 732) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class B (line 743) | class B extends A {
    method constructor (line 533) | constructor() {
    method c (line 538) | @computed
    method constructor (line 744) | constructor() {
    method method (line 749) | method() {
    method constructor (line 792) | constructor() {
  class C (line 754) | class C extends B {
    method constructor (line 755) | constructor() {
    method method (line 760) | method() {
  class A (line 780) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class B (line 789) | class B extends A {
    method constructor (line 533) | constructor() {
    method c (line 538) | @computed
    method constructor (line 744) | constructor() {
    method method (line 749) | method() {
    method constructor (line 792) | constructor() {
  class Bla (line 803) | class Bla {
    method constructor (line 806) | constructor() {
    method propX (line 810) | @computed
    method propX (line 814) | set propX(v) {
  class Model (line 826) | class Model {
    method constructor (line 829) | constructor() {
  class A (line 842) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 857) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 876) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class A (line 897) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class Time (line 919) | class Time {
    method constructor (line 920) | constructor(hour, minute) {
    method time (line 929) | @computed({ equals: sameTime })
  class A (line 965) | class A {
    method constructor (line 72) | constructor() {
    method Test (line 76) | @action
    method constructor (line 466) | constructor() {
    method d (line 470) | @computed
    method constructor (line 498) | constructor() {
    method m1 (line 503) | @action
    method constructor (line 525) | constructor() {
    method constructor (line 562) | constructor() {
    method c (line 566) | @computed
    method d (line 570) | @computed
    method constructor (line 589) | constructor() {
    method b (line 593) | @computed
    method m (line 597) | @action
    method b (line 651) | @computed
    method m (line 655) | @action
    method constructor (line 659) | constructor() {
    method constructor (line 733) | constructor() {
    method method (line 737) | @action
    method constructor (line 782) | constructor() {
    method constructor (line 845) | constructor() {
    method constructor (line 860) | constructor() {
    method constructor (line 879) | constructor() {
    method constructor (line 900) | constructor() {
    method inc (line 904) | @action.bound
    method constructor (line 966) | constructor() {
    method m1 (line 970) | @action
    method m3 (line 973) | @action.bound
  class X (line 996) | class X {
    method constructor (line 1006) | constructor() {
    method constructor (line 1023) | constructor() {
  class X (line 1017) | class X {
    method constructor (line 1006) | constructor() {
    method constructor (line 1023) | constructor() {
  class Contact (line 1035) | class Contact {
    method constructor (line 1039) | constructor() {
    method fullName (line 1043) | @computed({
    method fullName (line 1055) | set fullName(value) {
  class AppState (line 1076) | class AppState {
    method constructor (line 1077) | constructor(id) {
    method foo (line 1085) | @computed

FILE: packages/mobx/__tests__/v5/base/babel-tests.js
  class Box (line 21) | class Box {
    method constructor (line 29) | constructor() {
    method width (line 40) | get width() {
    method addSize (line 43) | addSize() {
  class A (line 76) | class A {
    method constructor (line 77) | constructor() {
    method Test (line 83) | get Test() {}
    method constructor (line 529) | constructor() {
    method d (line 538) | get d() {
    method constructor (line 574) | constructor() {
    method d (line 578) | @computed
    method constructor (line 605) | constructor() {
    method m1 (line 613) | m1() {}
    method constructor (line 634) | constructor() {
    method constructor (line 674) | constructor() {
    method c (line 681) | get c() {
    method constructor (line 715) | constructor() {
    method c (line 724) | get c() {
    method d (line 727) | get d() {
    method constructor (line 745) | constructor() {
    method b (line 755) | get b() {
    method m (line 758) | m() {}
    method b (line 811) | get b() {
    method m (line 814) | m() {}
    method constructor (line 817) | constructor() {
    method constructor (line 905) | constructor() {
    method method (line 911) | method() {
    method constructor (line 945) | constructor() {
    method constructor (line 1038) | constructor() {
    method constructor (line 1055) | constructor() {
    method constructor (line 1076) | constructor() {
    method constructor (line 1099) | constructor() {
    method inc (line 1106) | inc(value) {
    method constructor (line 1299) | constructor() {
    method m1 (line 1308) | m1() {}
    method m3 (line 1310) | m3() {}
  class TestClass (line 92) | class TestClass {
    method constructor (line 96) | constructor() {
    method boxedSum (line 104) | get boxedSum() {
    method constructor (line 134) | constructor() {
    method collection (line 141) | get collection() {
  class TestClass (line 130) | class TestClass {
    method constructor (line 96) | constructor() {
    method boxedSum (line 104) | get boxedSum() {
    method constructor (line 134) | constructor() {
    method collection (line 141) | get collection() {
  class Order (line 159) | class Order {
    method constructor (line 165) | constructor() {
    method total (line 175) | get total() {
  class Test (line 211) | class Test {
    method constructor (line 215) | constructor() {
  class Person (line 244) | class Person {
    method constructor (line 248) | constructor() {
    method fullName (line 256) | set fullName(val) {
    method fullName (line 259) | get fullName() {
  function normalizeSpyEvents (line 293) | function normalizeSpyEvents(events) {
  class Store (line 302) | class Store {
    method constructor (line 303) | constructor(multiplier) {
    method add (line 311) | add(a, b) {
    method constructor (line 338) | constructor(multiplier) {
    method add (line 346) | add(a, b) {
    method constructor (line 391) | constructor(multiplier) {
    method constructor (line 427) | constructor(multiplier) {
    method constructor (line 485) | constructor() {
    method constructor (line 500) | constructor() {
  class Store (line 337) | class Store {
    method constructor (line 303) | constructor(multiplier) {
    method add (line 311) | add(a, b) {
    method constructor (line 338) | constructor(multiplier) {
    method add (line 346) | add(a, b) {
    method constructor (line 391) | constructor(multiplier) {
    method constructor (line 427) | constructor(multiplier) {
    method constructor (line 485) | constructor() {
    method constructor (line 500) | constructor() {
  class Store (line 390) | class Store {
    method constructor (line 303) | constructor(multiplier) {
    method add (line 311) | add(a, b) {
    method constructor (line 338) | constructor(multiplier) {
    method add (line 346) | add(a, b) {
    method constructor (line 391) | constructor(multiplier) {
    method constructor (line 427) | constructor(multiplier) {
    method constructor (line 485) | constructor() {
    method constructor (line 500) | constructor() {
  class Store (line 426) | class Store {
    method constructor (line 303) | constructor(multiplier) {
    method add (line 311) | add(a, b) {
    method constructor (line 338) | constructor(multiplier) {
    method add (line 346) | add(a, b) {
    method constructor (line 391) | constructor(multiplier) {
    method constructor (line 427) | constructor(multiplier) {
    method constructor (line 485) | constructor() {
    method constructor (line 500) | constructor() {
  class Store (line 482) | class Store {
    method constructor (line 303) | constructor(multiplier) {
    method add (line 311) | add(a, b) {
    method constructor (line 338) | constructor(multiplier) {
    method add (line 346) | add(a, b) {
    method constructor (line 391) | constructor(multiplier) {
    method constructor (line 427) | constructor(multiplier) {
    method constructor (line 485) | constructor(
Condensed preview — 403 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,988K chars).
[
  {
    "path": ".changeset/README.md",
    "chars": 512,
    "preview": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that wo"
  },
  {
    "path": ".changeset/config.json",
    "chars": 273,
    "preview": "{\n    \"changelog\": [\"@changesets/changelog-github\", { \"repo\": \"mobxjs/mobx\" }],\n    \"commit\": false,\n    \"access\": \"publ"
  },
  {
    "path": ".editorconfig",
    "chars": 140,
    "preview": "root = true\n\n[*]\nend_of_line = lf\ncharset = utf-8\nindent_style = space\ntab_width = 4\n\n[{package.json}]\nindent_style = sp"
  },
  {
    "path": ".eslintrc.js",
    "chars": 1025,
    "preview": "module.exports = {\n    parser: \"@typescript-eslint/parser\",\n    plugins: [\"@typescript-eslint\"],\n    extends: \"eslint:re"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 22,
    "preview": "open_collective: mobx\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.md",
    "chars": 1952,
    "preview": "---\nname: 🐛 Reporting a Bug\nabout: Open a new issue if something isn't working as expected.\nlabels: 🐛 bug\n---\n\n<!--\n  Th"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 555,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: ✨ Feature Request / idea\n    url: https://github.com/mobxjs/mobx/di"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.md",
    "chars": 314,
    "preview": "---\nname: ✏ Documentation improvement\nabout: Please open the PR instead!\nlabels: 📖 documentation\n---\n\nDocumentation live"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 860,
    "preview": "<!--\n    Thanks for taking the effort to create a PR! 🙌\n\n    👋 Are you making a change to documentation only? Delete the"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 118,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/lock.yml",
    "chars": 932,
    "preview": "# Configuration for Lock Threads - https://github.com/dessant/lock-threads\n\n# Number of days of inactivity before a clos"
  },
  {
    "path": ".github/stale.yml",
    "chars": 1057,
    "preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 14\n# Number of days of inactivity before a "
  },
  {
    "path": ".github/workflows/build_and_test.yml",
    "chars": 885,
    "preview": "name: Build and test\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n  workflow_dispatch: {}\n\njob"
  },
  {
    "path": ".github/workflows/coveralls.yml",
    "chars": 828,
    "preview": "name: Coveralls\n\non: [\"push\"]\n\njobs:\n  mobx:\n    name: Packages coverage\n    runs-on: ubuntu-latest\n    steps:\n      - n"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 1053,
    "preview": "name: Release\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n   "
  },
  {
    "path": ".gitignore",
    "chars": 223,
    "preview": ".tscache\n.settings\nnode_modules\nnpm-debug.log\ncoverage\ntest/babel-tests.js\ntest/typescript/typescript-tests.js\ndist/\n**/"
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 503,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"IssueNavigationConfiguration\">\n    <opti"
  },
  {
    "path": ".prettierignore",
    "chars": 63,
    "preview": "/**/package.json\nwebsite/**/*\ndist/\ndocs/assets/\n*.yml\ncoverage"
  },
  {
    "path": ".prettierrc",
    "chars": 169,
    "preview": "{\n    \"printWidth\": 100,\n    \"semi\": false,\n    \"tabWidth\": 4,\n    \"singleQuote\": false,\n    \"trailingComma\": \"none\",\n  "
  },
  {
    "path": ".vscode/launch.json",
    "chars": 768,
    "preview": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 628,
    "preview": "{\n    \"[typescript]\": {\n        \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n        \"editor.formatOnSave\": true"
  },
  {
    "path": ".watchmanconfig",
    "chars": 67,
    "preview": "{\n  \"ignore_dirs\": [\"node_modules\", \"_site\", \"dist\", \"coverage\"]\n}\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 1113,
    "preview": "Contributor Code of Conduct\n\nAs contributors and maintainers of the MobX project, we pledge to respect everyone who cont"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2301,
    "preview": "# MobX Contributor Guide\n\nWelcome to a community of developers just like you, striving to create the best experience aro"
  },
  {
    "path": "LICENSE",
    "chars": 1084,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Michel Weststrate\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "README.md",
    "chars": 13245,
    "preview": "<img src=\"https://mobx.js.org/assets/mobx.png\" alt=\"logo\" height=\"120\" align=\"right\" />\n\n# MobX\n\n_Simple, scalable state"
  },
  {
    "path": "SECURITY.md",
    "chars": 487,
    "preview": "# Security Policy\n\nAll our packages are provided as-is without guarantees or SLAs.\nSecurity issues will be handled with "
  },
  {
    "path": "docs/LINKS.md",
    "chars": 2619,
    "preview": "<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon.js?serve=CEBD4KQ7&placement=mobxjsorg\" id=\"_carbona"
  },
  {
    "path": "docs/README.md",
    "chars": 12974,
    "preview": "---\ntitle: About MobX\nsidebar_label: About MobX\nhide_title: true\n---\n\n<img src=\"https://mobx.js.org/assets/mobx.png\" alt"
  },
  {
    "path": "docs/about-this-documentation.md",
    "chars": 2713,
    "preview": "---\ntitle: About this documentation\nsidebar_label: About this documentation\nhide_title: true\n---\n\n<script async type=\"te"
  },
  {
    "path": "docs/actions.md",
    "chars": 15048,
    "preview": "---\ntitle: Updating state using actions\nsidebar_label: Actions\nhide_title: true\n---\n\n<script async type=\"text/javascript"
  },
  {
    "path": "docs/analyzing-reactivity.md",
    "chars": 5158,
    "preview": "---\ntitle: Analyzing reactivity\nsidebar_label: Analyzing reactivity {🚀}\nhide_title: true\n---\n\n<script async type=\"text/j"
  },
  {
    "path": "docs/api.md",
    "chars": 20497,
    "preview": "---\ntitle: MobX API Reference\nsidebar_label: API\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.c"
  },
  {
    "path": "docs/assets/action-state-view.excalidraw",
    "chars": 9758,
    "preview": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"id\": \"pIZO1"
  },
  {
    "path": "docs/assets/flow.excalidraw..excalidraw..excalidraw",
    "chars": 14942,
    "preview": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"id\": \"umJvY"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/JSXTransformer.js",
    "chars": 843383,
    "preview": "/**\n * JSXTransformer v0.13.3\n */\n;(function(f) {\n    if (typeof exports === \"object\" && typeof module !== \"undefined\") "
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/javascript/index.html",
    "chars": 4193,
    "preview": "<!doctype html>\n\n<title>CodeMirror: JavaScript mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/javascript/javascript.js",
    "chars": 35011,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/javascript/json-ld.html",
    "chars": 2150,
    "preview": "<!doctype html>\n\n<title>CodeMirror: JSON-LD mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc/do"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/javascript/test.js",
    "chars": 8429,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/javascript/typescript.html",
    "chars": 1547,
    "preview": "<!doctype html>\n\n<title>CodeMirror: TypeScript mode</title>\n<meta charset=\"utf-8\"/>\n<link rel=stylesheet href=\"../../doc"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/lib/codemirror.css",
    "chars": 9399,
    "preview": "/* BASICS */\n\n.CodeMirror {\n    /* Set height, width, borders, and global font properties here */\n    font-family: monos"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/lib/codemirror.js",
    "chars": 496609,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/codemirror/theme/xq-light.css",
    "chars": 2202,
    "preview": "/*\nCopyright (C) 2011 by MarkLogic Corporation\nAuthor: Mike Brevoort <mike@brevoort.com>\n\nPermission is hereby granted, "
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/mobx-react.js",
    "chars": 8635,
    "preview": ";(function() {\n    function mrFactory(mobx, React, ReactDOM) {\n        if (!mobx) throw new Error(\"mobx-react requires t"
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/mobx.umd.js",
    "chars": 113871,
    "preview": ";(function(f) {\n    if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n        module.exports = f()\n   "
  },
  {
    "path": "docs/assets/getting-started-assets/javascripts/react-with-addons.js",
    "chars": 1150760,
    "preview": "/**\n * React (with addons) v0.13.3\n */\n;(function(f) {\n    if (typeof exports === \"object\" && typeof module !== \"undefin"
  },
  {
    "path": "docs/assets/getting-started-assets/script.js",
    "chars": 3569,
    "preview": "/* For demo purposes only, component to track its own (and parents) amount of renderings */\nvar RenderCounter = function"
  },
  {
    "path": "docs/assets/getting-started-assets/style.css",
    "chars": 2883,
    "preview": "body, html {\n    padding: 0;\n    margin: 0;\n    height: 100%;\n\tfont-family: 'PT Serif', serif;\n}\n.root {\n    height: 100"
  },
  {
    "path": "docs/assets/getting-started-assets/stylesheets/github-light.css",
    "chars": 2721,
    "preview": "/*\n   Copyright 2014 GitHub Inc.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use "
  },
  {
    "path": "docs/assets/getting-started-assets/stylesheets/stylesheet.css",
    "chars": 8335,
    "preview": "@import url(github-light.css);\n\n/*\nOverrides by mweststrate\n*/\n#usps {\n  border-style: none;\n}\n#usps td {\n  border-style"
  },
  {
    "path": "docs/backers-sponsors.md",
    "chars": 18078,
    "preview": "---\ntitle: MobX Backers and Sponsors\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com"
  },
  {
    "path": "docs/best/debugging-mobx.md",
    "chars": 321,
    "preview": "---\ntitle: Analyzing reactivity\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carb"
  },
  {
    "path": "docs/best/decorators.md",
    "chars": 319,
    "preview": "---\ntitle: Enabling decorators\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbo"
  },
  {
    "path": "docs/best/store.md",
    "chars": 321,
    "preview": "---\ntitle: Defining data stores\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carb"
  },
  {
    "path": "docs/best/what-does-mobx-react-to.md",
    "chars": 329,
    "preview": "---\ntitle: Understanding reactivity\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/"
  },
  {
    "path": "docs/collection-utilities.md",
    "chars": 2104,
    "preview": "---\ntitle: Collection utilities\nsidebar_label: Collection utilities {🚀}\nhide_title: true\n---\n\n<script async type=\"text/j"
  },
  {
    "path": "docs/computeds-with-args.md",
    "chars": 4287,
    "preview": "---\ntitle: Computeds with arguments\nsidebar_label: Computeds with arguments {🚀}\nhide_title: true\n---\n\n<script async type"
  },
  {
    "path": "docs/computeds.md",
    "chars": 11080,
    "preview": "---\ntitle: Deriving information with computeds\nsidebar_label: Computeds\nhide_title: true\n---\n\n<script async type=\"text/j"
  },
  {
    "path": "docs/configuration.md",
    "chars": 11131,
    "preview": "---\ntitle: Configuration\nsidebar_label: Configuration {🚀}\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src"
  },
  {
    "path": "docs/custom-observables.md",
    "chars": 3539,
    "preview": "---\ntitle: Creating custom observables\nsidebar_label: Custom observables {🚀}\nhide_title: true\n---\n\n<script async type=\"t"
  },
  {
    "path": "docs/defining-data-stores.md",
    "chars": 12002,
    "preview": "---\ntitle: Defining data stores\nsidebar_label: Defining data stores\nhide_title: true\n---\n\n<script async type=\"text/javas"
  },
  {
    "path": "docs/enabling-decorators.md",
    "chars": 6333,
    "preview": "---\ntitle: Decorators\nsidebar_label: Decorators {🚀}\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cd"
  },
  {
    "path": "docs/faq/migrate-to-6.md",
    "chars": 325,
    "preview": "---\ntitle: Migrating from MobX 4/5\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/c"
  },
  {
    "path": "docs/installation.md",
    "chars": 3644,
    "preview": "---\ntitle: Installation\nsidebar_label: Installation\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cd"
  },
  {
    "path": "docs/intercept-and-observe.md",
    "chars": 12411,
    "preview": "---\ntitle: Intercept & Observe\nsidebar_label: Intercept & Observe {🚀}\nhide_title: true\n---\n\n<script async type=\"text/jav"
  },
  {
    "path": "docs/intro/concepts.md",
    "chars": 313,
    "preview": "---\ntitle: The gist of MobX\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon.j"
  },
  {
    "path": "docs/intro/how-to-read.md",
    "chars": 329,
    "preview": "---\ntitle: About this documentation\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/"
  },
  {
    "path": "docs/intro/installation.md",
    "chars": 305,
    "preview": "---\ntitle: Installation\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon.js?se"
  },
  {
    "path": "docs/lazy-observables.md",
    "chars": 1689,
    "preview": "---\ntitle: Creating lazy observables\nsidebar_label: Lazy observables {🚀}\nhide_title: true\n---\n\n<script async type=\"text/"
  },
  {
    "path": "docs/migrating-from-4-or-5.md",
    "chars": 7520,
    "preview": "---\ntitle: Migrating from MobX 4/5\nsidebar_label: Migrating from MobX 4/5 {🚀}\nhide_title: true\n---\n\n<script async type=\""
  },
  {
    "path": "docs/mobx-utils.md",
    "chars": 385,
    "preview": "---\ntitle: MobX-utils\nsidebar_label: MobX-utils {🚀}\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cd"
  },
  {
    "path": "docs/observable-state.md",
    "chars": 22851,
    "preview": "---\ntitle: Creating observable state\nsidebar_label: Observable state\nhide_title: true\n---\n\n<script async type=\"text/java"
  },
  {
    "path": "docs/react/react-integration.md",
    "chars": 315,
    "preview": "---\ntitle: React integration\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon."
  },
  {
    "path": "docs/react/react-performance.md",
    "chars": 336,
    "preview": "---\ntitle: Optimizing React component rendering\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.ca"
  },
  {
    "path": "docs/react-integration.md",
    "chars": 22521,
    "preview": "---\ntitle: React integration\nsidebar_label: React integration\nhide_title: true\n---\n\n<script async type=\"text/javascript\""
  },
  {
    "path": "docs/react-optimizations.md",
    "chars": 4432,
    "preview": "---\ntitle: Optimizing React component rendering\nsidebar_label: React optimizations {🚀}\nhide_title: true\n---\n\n<script asy"
  },
  {
    "path": "docs/reactions.md",
    "chars": 16434,
    "preview": "---\ntitle: Running side effects with reactions\nsidebar_label: Reactions {🚀}\nhide_title: true\n---\n\n<script async type=\"te"
  },
  {
    "path": "docs/refguide/action.md",
    "chars": 316,
    "preview": "---\ntitle: Updating state using actions\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads."
  },
  {
    "path": "docs/refguide/api.md",
    "chars": 301,
    "preview": "---\ntitle: MobX API overview\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon."
  },
  {
    "path": "docs/refguide/autorun.md",
    "chars": 325,
    "preview": "---\ntitle: Running side effects with reactions\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.car"
  },
  {
    "path": "docs/refguide/computed-with-args.md",
    "chars": 324,
    "preview": "---\ntitle: Computeds with arguments\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/"
  },
  {
    "path": "docs/refguide/computed.md",
    "chars": 325,
    "preview": "---\ntitle: Deriving information with computeds\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.car"
  },
  {
    "path": "docs/refguide/configure.md",
    "chars": 307,
    "preview": "---\ntitle: Configuration\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon.js?s"
  },
  {
    "path": "docs/refguide/extending.md",
    "chars": 326,
    "preview": "---\ntitle: Creating custom observables\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.c"
  },
  {
    "path": "docs/refguide/mobx-utils.md",
    "chars": 301,
    "preview": "---\ntitle: MobX-utils\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon.js?serv"
  },
  {
    "path": "docs/refguide/modifiers.md",
    "chars": 339,
    "preview": "---\ntitle: Observable modifiers\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carb"
  },
  {
    "path": "docs/refguide/object-api.md",
    "chars": 321,
    "preview": "---\ntitle: Collection utilities\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carb"
  },
  {
    "path": "docs/refguide/object.md",
    "chars": 319,
    "preview": "---\ntitle: Observable Objects\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon"
  },
  {
    "path": "docs/refguide/observable.md",
    "chars": 322,
    "preview": "---\ntitle: Creating observable state\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com"
  },
  {
    "path": "docs/refguide/observe.md",
    "chars": 321,
    "preview": "---\ntitle: Intercept & Observe\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbo"
  },
  {
    "path": "docs/refguide/on-become-observed.md",
    "chars": 322,
    "preview": "---\ntitle: Creating lazy observables\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com"
  },
  {
    "path": "docs/refguide/set.md",
    "chars": 313,
    "preview": "---\ntitle: Observable Sets\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn.carbonads.com/carbon.js"
  },
  {
    "path": "docs/styles/website.css",
    "chars": 128,
    "preview": "h1 {\n    display: -ms-flexbox;\n    display: flex;\n    width: 100%;\n    -ms-flex-pack: start;\n    justify-content: flex-s"
  },
  {
    "path": "docs/subclassing.md",
    "chars": 4010,
    "preview": "---\ntitle: Subclassing\nsidebar_label: Subclassing\nhide_title: true\n---\n\n<script async type=\"text/javascript\" src=\"//cdn."
  },
  {
    "path": "docs/the-gist-of-mobx.md",
    "chars": 10254,
    "preview": "---\ntitle: The gist of MobX\nsidebar_label: The gist of MobX\nhide_title: true\n---\n\n<script async type=\"text/javascript\" s"
  },
  {
    "path": "docs/understanding-reactivity.md",
    "chars": 12817,
    "preview": "---\ntitle: Understanding reactivity\nsidebar_label: Understanding reactivity\nhide_title: true\n---\n\n<script async type=\"te"
  },
  {
    "path": "jest.base.config.js",
    "chars": 1056,
    "preview": "const fs = require(\"fs\")\nconst path = require(\"path\")\n\nmodule.exports = function buildConfig(\n    packageDirectory,\n    "
  },
  {
    "path": "jest.config.js",
    "chars": 203,
    "preview": "module.exports = {\n    coverageDirectory: \"<rootDir>/coverage/\",\n    coverageReporters: [\"lcov\", \"text\"],\n    projects: "
  },
  {
    "path": "lerna.json",
    "chars": 117,
    "preview": "{\n    \"packages\": [\"packages/*\"],\n    \"version\": \"independent\",\n    \"npmClient\": \"yarn\",\n    \"useWorkspaces\": true\n}\n"
  },
  {
    "path": "package.json",
    "chars": 2696,
    "preview": "{\n    \"name\": \"mobx-root\",\n    \"private\": true,\n    \"workspaces\": [\n        \"packages/*\"\n    ],\n    \"resolutions\": {\n   "
  },
  {
    "path": "packages/eslint-plugin-mobx/.babelrc.js",
    "chars": 127,
    "preview": "module.exports = {\n  \"presets\": [\n    [\"@babel/preset-env\"],\n  ],\n  \"plugins\": [\n    //\"@babel/plugin-transform-runtime\""
  },
  {
    "path": "packages/eslint-plugin-mobx/CHANGELOG.md",
    "chars": 3962,
    "preview": "# eslint-plugin-mobx\n\n## 0.0.14\n\n### Patch Changes\n\n-   [`f65bc0700461846b05294f857beb211f45eead6f`](https://github.com/"
  },
  {
    "path": "packages/eslint-plugin-mobx/LICENSE",
    "chars": 1084,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Michel Weststrate\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "packages/eslint-plugin-mobx/README.md",
    "chars": 4884,
    "preview": "# eslint-plugin-mobx\n\nMobx specific linting rules for `eslint`.\n\n## Installation\n\n```\nnpm install --save-dev eslint @typ"
  },
  {
    "path": "packages/eslint-plugin-mobx/__tests__/exhaustive-make-observable.js",
    "chars": 3205,
    "preview": "import { getRuleTester } from \"./utils/get-rule-tester\";\n\nimport rule from \"../src/exhaustive-make-observable.js\";\n\ncons"
  },
  {
    "path": "packages/eslint-plugin-mobx/__tests__/missing-make-observable.js",
    "chars": 2650,
    "preview": "import { getRuleTester } from \"./utils/get-rule-tester\";\n\nimport rule from \"../src/missing-make-observable.js\";\n\nconst t"
  },
  {
    "path": "packages/eslint-plugin-mobx/__tests__/missing-observer.js",
    "chars": 2056,
    "preview": "import { getRuleTester } from \"./utils/get-rule-tester\";\n\nimport rule from \"../src/missing-observer.js\"\n\nconst tester = "
  },
  {
    "path": "packages/eslint-plugin-mobx/__tests__/no-anonymous-observer.js",
    "chars": 1368,
    "preview": "import { getRuleTester } from \"./utils/get-rule-tester\";\n\nimport rule from \"../src/no-anonymous-observer.js\"\n\nconst test"
  },
  {
    "path": "packages/eslint-plugin-mobx/__tests__/unconditional-make-observable.js",
    "chars": 1309,
    "preview": "import { getRuleTester } from \"./utils/get-rule-tester\";\n\nimport rule from \"../src/unconditional-make-observable.js\";\n\nc"
  },
  {
    "path": "packages/eslint-plugin-mobx/__tests__/utils/get-rule-tester.js",
    "chars": 782,
    "preview": "const version = global.ESLINT_V;\n\nconst { RuleTester } = require(`eslint-${version}`);\nconst typescriptEslintParser = re"
  },
  {
    "path": "packages/eslint-plugin-mobx/jest.config-eslint-7.js",
    "chars": 293,
    "preview": "const buildConfig = require(\"../../jest.base.config\")\n\nmodule.exports = buildConfig(__dirname, {\n    displayName: 'eslin"
  },
  {
    "path": "packages/eslint-plugin-mobx/jest.config-eslint-9.js",
    "chars": 293,
    "preview": "const buildConfig = require(\"../../jest.base.config\")\n\nmodule.exports = buildConfig(__dirname, {\n    displayName: 'eslin"
  },
  {
    "path": "packages/eslint-plugin-mobx/jest.setup.js",
    "chars": 134,
    "preview": "/** @see https://github.com/jsdom/jsdom/issues/3363 */\nglobal.structuredClone = val => {\n    return JSON.parse(JSON.stri"
  },
  {
    "path": "packages/eslint-plugin-mobx/package.json",
    "chars": 1644,
    "preview": "{\n    \"name\": \"eslint-plugin-mobx\",\n    \"version\": \"0.0.14\",\n    \"description\": \"ESLint rules for MobX\",\n    \"main\": \"di"
  },
  {
    "path": "packages/eslint-plugin-mobx/preview/.eslintrc.js",
    "chars": 540,
    "preview": "module.exports = {\n    \"extends\": [\n        \"plugin:mobx/recommended\"\n    ],\n    \"env\": {\n        \"browser\": true,\n     "
  },
  {
    "path": "packages/eslint-plugin-mobx/preview/.gitignore",
    "chars": 14,
    "preview": "!node_modules\n"
  },
  {
    "path": "packages/eslint-plugin-mobx/preview/make-observable.js",
    "chars": 2712,
    "preview": "/* eslint mobx/exhaustive-make-observable: \"error\" */\n/* eslint mobx/missing-make-observable: \"error\" */\n/* eslint mobx/"
  },
  {
    "path": "packages/eslint-plugin-mobx/preview/missing-observer.js",
    "chars": 1317,
    "preview": "/* eslint mobx/missing-observer: \"error\" */\n\nfunction Named() {}\nconst named = function Named() {}\nconst namedRef = forw"
  },
  {
    "path": "packages/eslint-plugin-mobx/preview/no-anonymous-observer.js",
    "chars": 432,
    "preview": "/* eslint mobx/no-anonymous-observer: \"error\" */\n\nobserver(() => {})\nobserver(function () {})\nobserver(class {})\n\nconst "
  },
  {
    "path": "packages/eslint-plugin-mobx/preview/node_modules/eslint-plugin-mobx/index.js",
    "chars": 173,
    "preview": "// At the time of writing, eslint config does not allow filenames as plugins.\n// This is a fake module used as workaroun"
  },
  {
    "path": "packages/eslint-plugin-mobx/rollup.config.js",
    "chars": 475,
    "preview": "import { nodeResolve } from \"@rollup/plugin-node-resolve\";\nimport commonjs from \"@rollup/plugin-commonjs\";\nimport babel "
  },
  {
    "path": "packages/eslint-plugin-mobx/src/exhaustive-make-observable.js",
    "chars": 5187,
    "preview": "\"use strict\"\n\nconst { findAncestor, isMobxDecorator } = require(\"./utils.js\")\n\n// TODO support this.foo = 5; in construc"
  },
  {
    "path": "packages/eslint-plugin-mobx/src/index.js",
    "chars": 1462,
    "preview": "\"use strict\"\n\nconst fs = require(\"fs\")\nconst path = require(\"path\")\n\nconst exhaustiveMakeObservable = require(\"./exhaust"
  },
  {
    "path": "packages/eslint-plugin-mobx/src/missing-make-observable.js",
    "chars": 2743,
    "preview": "'use strict';\n\nconst { findAncestor, isMobxDecorator } = require('./utils.js');\n\nfunction create(context) {\n  const sour"
  },
  {
    "path": "packages/eslint-plugin-mobx/src/missing-observer.js",
    "chars": 3407,
    "preview": "\"use strict\"\n\nfunction create(context) {\n    const sourceCode = context.sourceCode ?? context.getSourceCode()\n\n    retur"
  },
  {
    "path": "packages/eslint-plugin-mobx/src/no-anonymous-observer.js",
    "chars": 2262,
    "preview": "\"use strict\"\n\nfunction create(context) {\n    const sourceCode = context.sourceCode ?? context.getSourceCode()\n\n    retur"
  },
  {
    "path": "packages/eslint-plugin-mobx/src/unconditional-make-observable.js",
    "chars": 1511,
    "preview": "'use strict';\n\nconst { findAncestor } = require('./utils.js');\n\nfunction create(context) {\n  return {\n    'CallExpressio"
  },
  {
    "path": "packages/eslint-plugin-mobx/src/utils.js",
    "chars": 739,
    "preview": "'use strict';\n\nconst mobxDecorators = new Set(['observable', 'computed', 'action', 'flow', 'override']);\n\nfunction isMob"
  },
  {
    "path": "packages/mobx/.flowconfig",
    "chars": 131,
    "preview": "[ignore]\n.*/node_modules\n\n[include]\n__tests__/v5/flow\n\n[libs]\nflow-typed/\n\n[options]\nsuppress_comment= \\\\(.\\\\|\\n\\\\)*\\\\$E"
  },
  {
    "path": "packages/mobx/.gitignore",
    "chars": 70,
    "preview": "# Both are copied during the build\nREADME.md\nLICENSE\n\ntemp\nperf_report"
  },
  {
    "path": "packages/mobx/CHANGELOG.md",
    "chars": 135959,
    "preview": "# mobx\n\n## 6.15.1\n\n### Patch Changes\n\n-   [`df81c144fb148b64140d761aa61f032a7f429e12`](https://github.com/mobxjs/mobx/co"
  },
  {
    "path": "packages/mobx/__tests__/.babelrc",
    "chars": 336,
    "preview": "{\n    \"presets\": [\"@babel/preset-env\"],\n    \"plugins\": [\n        [\n            \"@babel/plugin-transform-runtime\",\n      "
  },
  {
    "path": "packages/mobx/__tests__/decorators_20223/stage3-decorators.ts",
    "chars": 27480,
    "preview": "\"use strict\"\n\nimport {\n    observe,\n    computed,\n    observable,\n    autorun,\n    extendObservable,\n    action,\n    IOb"
  },
  {
    "path": "packages/mobx/__tests__/decorators_20223/tsconfig.json",
    "chars": 334,
    "preview": "{\n    \"extends\": [\"../../tsconfig.json\", \"../../../../tsconfig.test.json\"],\n    \"compilerOptions\": {\n        \"target\": \""
  },
  {
    "path": "packages/mobx/__tests__/mixed-versions/mixed-versions.js",
    "chars": 2049,
    "preview": "const fs = require(\"fs\")\nconst child_process = require(\"child_process\")\n\nif (!fs.existsSync(__dirname + \"/../../dist/mob"
  },
  {
    "path": "packages/mobx/__tests__/mixed-versions/state-sharing.js",
    "chars": 1561,
    "preview": "\"use strict\"\nconst child_process = require(\"child_process\")\n\nfunction testOutput(cmd, expected) {\n    it(\"Global state s"
  },
  {
    "path": "packages/mobx/__tests__/perf/index.js",
    "chars": 943,
    "preview": "const start = Date.now()\nconst mkdirp = require(\"mkdirp\")\n\nconst ver = process.argv[2]\nif (!ver || !ver.match(/legacy|pr"
  },
  {
    "path": "packages/mobx/__tests__/perf/perf.js",
    "chars": 20649,
    "preview": "const test = require(\"tape\")\nconst log = require(\"./index.js\").logMeasurement\n\nfunction gc() {\n    if (typeof global.gc "
  },
  {
    "path": "packages/mobx/__tests__/tsconfig.json",
    "chars": 49,
    "preview": "{\n    \"extends\": \"../../../tsconfig.test.json\"\n}\n"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/__snapshots__/array.js.snap",
    "chars": 449,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`very long arrays can be safely passed to nativeAr"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/__snapshots__/extras.js.snap",
    "chars": 617,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`spy 1 1`] = `\n[\n  {\n    \"debugObjectName\": \"Obser"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/__snapshots__/makereactive.js.snap",
    "chars": 122,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`computed value 1`] = `\"ComputedValue@1[() => 3]\"`"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/__snapshots__/object-api.js.snap",
    "chars": 1111,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`observe & intercept 1`] = `\n[\n  {\n    \"intercept\""
  },
  {
    "path": "packages/mobx/__tests__/v4/base/__snapshots__/observables.js.snap",
    "chars": 3759,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`delay autorun until end of transaction 1`] = `\n[\n"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/__snapshots__/spy.js.snap",
    "chars": 7028,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`spy error 1`] = `\n[\n  {\n    \"name\": \"autorun\",\n  "
  },
  {
    "path": "packages/mobx/__tests__/v4/base/array.js",
    "chars": 22569,
    "preview": "\"use strict\"\n\nconst { LegacyObservableArray } = require(\"../../../src/internal\")\nconst mobx = require(\"../mobx4\")\nconst "
  },
  {
    "path": "packages/mobx/__tests__/v4/base/autorun.js",
    "chars": 3158,
    "preview": "/**\n * @type {typeof import(\"./../../../src/v4/mobx\")}\n */\nconst mobx = require(\"../mobx4\")\nconst utils = require(\"../.."
  },
  {
    "path": "packages/mobx/__tests__/v4/base/cycles.js",
    "chars": 5402,
    "preview": "const m = require(\"../mobx4\")\n\ntest(\"cascading active state (form 1)\", function () {\n    const Store = function () {\n   "
  },
  {
    "path": "packages/mobx/__tests__/v4/base/extendObservable.js",
    "chars": 3717,
    "preview": "// @ts-check\n\nimport {\n    action,\n    autorun,\n    isObservable,\n    isObservableProp,\n    isComputedProp,\n    isAction"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/extras.js",
    "chars": 11364,
    "preview": "const mobx = require(\"../mobx4\")\nconst m = mobx\nconst { $mobx } = mobx\n\ntest(\"treeD\", function () {\n    m._resetGlobalSt"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/intercept.js",
    "chars": 3423,
    "preview": "const m = require(\"../mobx4\")\nconst intercept = m.intercept\n\ntest(\"intercept observable value\", () => {\n    const a = m."
  },
  {
    "path": "packages/mobx/__tests__/v4/base/jsconfig.json",
    "chars": 102,
    "preview": "{\n    \"compilerOptions\": {\n        \"target\": \"es2015\",\n        \"experimentalDecorators\": true\n    }\n}\n"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/makereactive.js",
    "chars": 14604,
    "preview": "const mobx = require(\"../mobx4\")\nconst m = mobx\nconst o = mobx.observable\nconst { makeObservable } = mobx\n\nfunction buff"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/nested.js",
    "chars": 2059,
    "preview": "\"use strict\"\n\nimport { extendObservable, observable, autorun, computed, runInAction } from \"../mobx4\"\n\ntest(\"nested comp"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/object-api.js",
    "chars": 13739,
    "preview": "const mobx = require(\"../mobx4\")\nconst { autorun, keys, when, set, remove, values, entries, reaction, observable, has, g"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/observables.js",
    "chars": 46974,
    "preview": "\"use strict\"\n\nconst mobx = require(\"../mobx4\")\nconst m = mobx\nconst { $mobx, makeObservable, observable, computed, trans"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/observe.ts",
    "chars": 1200,
    "preview": "import { observable, observe, computed } from \"../mobx4\"\n\ntest(\"observe object and map properties\", function () {\n    co"
  },
  {
    "path": "packages/mobx/__tests__/v4/base/spy.js",
    "chars": 1842,
    "preview": "\"use strict\"\nconst mobx = require(\"../mobx4\")\nconst utils = require(\"../../v5/utils/test-utils\")\n\ntest(\"spy output\", () "
  },
  {
    "path": "packages/mobx/__tests__/v4/base/tojs.js",
    "chars": 8948,
    "preview": "\"use strict\"\n\nconst mobx = require(\"../mobx4\")\nconst m = mobx\nconst observable = mobx.observable\nconst { makeObservable "
  },
  {
    "path": "packages/mobx/__tests__/v4/base/untracked.ts",
    "chars": 665,
    "preview": "import { autorun, observable, computed, untracked } from \"../mobx4\"\n\ntest(\"untracked 1\", () => {\n    let cCalcs = 0,\n   "
  },
  {
    "path": "packages/mobx/__tests__/v4/mobx4.ts",
    "chars": 144,
    "preview": "import { configure } from \"../../src/mobx\"\n\nconfigure({\n    useProxies: \"never\",\n    enforceActions: \"never\"\n})\n\nexport "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/action.js.snap",
    "chars": 430,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`error logging, #1836 - 1 1`] = `\n[\n  \"<STDOUT> [m"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/extras.js.snap",
    "chars": 617,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`spy 1 1`] = `\n[\n  {\n    \"debugObjectName\": \"Obser"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/flow.js.snap",
    "chars": 1925,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`it should support logging 1`] = `\n[\n  {\n    \"argu"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/makereactive.js.snap",
    "chars": 122,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`computed value 1`] = `\"ComputedValue@1[() => 3]\"`"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/object-api.js.snap",
    "chars": 869,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`observe & intercept 1`] = `\n[\n  {\n    \"intercept\""
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/observables.js.snap",
    "chars": 3759,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`delay autorun until end of transaction 1`] = `\n[\n"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/proxies.js.snap",
    "chars": 1937,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`decorate proxies 1`] = `\n{\n  \"b\": {\n    \"configur"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/__snapshots__/spy.js.snap",
    "chars": 7795,
    "preview": "// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing\n\nexports[`spy error 1`] = `\n[\n  {\n    \"name\": \"autorun\",\n  "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/action.js",
    "chars": 15515,
    "preview": "import * as mobx from \"../../../src/mobx\"\nimport * as utils from \"../utils/test-utils\"\n\ntest(\"action should wrap in tran"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/api.js",
    "chars": 2298,
    "preview": "const mobx = require(\"../../../src/mobx.ts\")\n\ntest(\"correct api should be exposed\", function () {\n    expect(\n        Ob"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/array.js",
    "chars": 24634,
    "preview": "\"use strict\"\n\nconst mobx = require(\"../../../src/mobx.ts\")\nconst { observable, when, _getAdministration, reaction, compu"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/autorun.js",
    "chars": 3903,
    "preview": "/**\n * @type {typeof import(\"./../../../src/v5/mobx\")}\n */\nconst mobx = require(\"../../../src/mobx.ts\")\nconst utils = re"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/autorunAsync.js",
    "chars": 7872,
    "preview": "/**\n * @type {typeof import(\"../../../src/v5/mobx\")}\n */\nconst mobx = require(\"../../../src/mobx.ts\")\n\nconst utils = req"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/babel-decorators.js",
    "chars": 24891,
    "preview": "import {\n    observable,\n    computed,\n    transaction,\n    autorun,\n    extendObservable,\n    action,\n    isObservableO"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/babel-tests.js",
    "chars": 33062,
    "preview": "import {\n    observable,\n    computed,\n    transaction,\n    autorun,\n    extendObservable,\n    action,\n    isObservableO"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/become-observed.ts",
    "chars": 14841,
    "preview": "import {\n    autorun,\n    onBecomeObserved,\n    observable,\n    computed,\n    action,\n    makeObservable,\n    onBecomeUn"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/cycles.js",
    "chars": 5414,
    "preview": "const m = require(\"../../../src/mobx.ts\")\n\ntest(\"cascading active state (form 1)\", function () {\n    const Store = funct"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/decorate.js",
    "chars": 11457,
    "preview": "// @ts-check\n// Why @ts-check?\n\nimport {\n    observable,\n    computed,\n    autorun,\n    action,\n    isObservableObject,\n"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/errorhandling.js",
    "chars": 24284,
    "preview": "const mobx = require(\"../../../src/mobx.ts\")\nconst m = mobx\nconst utils = require(\"../../v5/utils/test-utils\")\n\nconst { "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/extendObservable.js",
    "chars": 4084,
    "preview": "// @ts-check\n\nimport {\n    action,\n    autorun,\n    isObservable,\n    isObservableProp,\n    isComputedProp,\n    isAction"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/extras.js",
    "chars": 29305,
    "preview": "const mobx = require(\"../../../src/mobx.ts\")\nconst m = mobx\n\nconst { $mobx } = mobx\n\ntest(\"treeD\", function () {\n    m._"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/flow.js",
    "chars": 12578,
    "preview": "import * as mobx from \"../../../src/mobx\"\nimport {\n    flow,\n    FlowCancellationError,\n    isFlowCancellationError,\n   "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/intercept.js",
    "chars": 4214,
    "preview": "const m = require(\"../../../src/mobx.ts\")\nconst intercept = m.intercept\n\ntest(\"intercept observable value\", () => {\n    "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/make-observable.ts",
    "chars": 46233,
    "preview": "import { isFlow } from \"../../../src/api/flow\"\nimport { deepEnhancer } from \"../../../src/internal\"\nimport {\n    makeObs"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/makereactive.js",
    "chars": 16541,
    "preview": "const { isAction, isObservable, isObservableProp } = require(\"../../../src/mobx\")\nconst mobx = require(\"../../../src/mob"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/map.js",
    "chars": 33953,
    "preview": "\"use strict\"\n\nimport * as mobx from \"../../../src/mobx.ts\"\nimport {\n    observable,\n    autorun,\n    makeObservable,\n   "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/nested.js",
    "chars": 2068,
    "preview": "\"use strict\"\n\nimport { extendObservable, observable, autorun, computed, runInAction } from \"../../../src/mobx\"\n\ntest(\"ne"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/object-api-proxy.js",
    "chars": 8490,
    "preview": "const mobx = require(\"../../../src/mobx\")\nconst { has, autorun, when, runInAction, reaction, observable } = mobx\n\ntest(\""
  },
  {
    "path": "packages/mobx/__tests__/v5/base/object-api.js",
    "chars": 15534,
    "preview": "const mobx = require(\"../../../src/mobx\")\nconst { autorun, keys, when, set, remove, values, entries, reaction, observabl"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/observables.js",
    "chars": 61424,
    "preview": "\"use strict\"\n\nconst mobx = require(\"../../../src/mobx\")\nconst m = mobx\nconst {\n    $mobx,\n    observable,\n    computed,\n"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/observe.ts",
    "chars": 1203,
    "preview": "import { observable, observe, computed } from \"../../../src/mobx\"\n\ntest(\"observe object and map properties\", () => {\n   "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/proxies.js",
    "chars": 8918,
    "preview": "import {\n    computed,\n    isComputedProp,\n    isAction,\n    isObservableProp,\n    autorun,\n    observable,\n    action,\n"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/reaction.js",
    "chars": 17048,
    "preview": "/**\n * @type {typeof import(\"./../../../src/v5/mobx\")}\n */\nconst mobx = require(\"../../../src/mobx.ts\")\nconst reaction ="
  },
  {
    "path": "packages/mobx/__tests__/v5/base/set.js",
    "chars": 13804,
    "preview": "\"use strict\"\n\nconst mobx = require(\"../../../src/mobx.ts\")\nconst set = mobx.observable.set\nconst autorun = mobx.autorun\n"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/spy.js",
    "chars": 4056,
    "preview": "\"use strict\"\nconst mobx = require(\"../../../src/mobx.ts\")\nconst utils = require(\"../../v5/utils/test-utils\")\n\ntest(\"spy "
  },
  {
    "path": "packages/mobx/__tests__/v5/base/strict-mode.js",
    "chars": 12361,
    "preview": "/**\n * @type {typeof import(\"../../../src/v5/mobx\")}\n */\nconst mobx = require(\"../../../src/mobx.ts\")\nconst utils = requ"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/tojs.js",
    "chars": 9656,
    "preview": "\"use strict\"\n\nconst mobx = require(\"../../../src/mobx.ts\")\nconst m = mobx\nconst observable = mobx.observable\n\ntest(\"json"
  },
  {
    "path": "packages/mobx/__tests__/v5/base/trace.ts",
    "chars": 4554,
    "preview": "\"use strict\"\n\nimport * as mobx from \"../../../src/mobx\"\n\ndescribe(\"trace\", () => {\n    let consoleLogSpy\n    beforeEach("
  }
]

// ... and 203 more files (download for full content)

About this extraction

This page contains the full source code of the mobxjs/mobx GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 403 files (4.6 MB), approximately 1.2M tokens, and a symbol index with 3504 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!