├── .arcconfig
├── .arclint
├── .circleci
└── config.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── assets
├── general-solution.gif
├── ode.gif
└── wobble-logo.png
├── demos
├── 1-chat-heads
│ ├── 0.jpg
│ ├── 1.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── index.html
│ └── index.tsx
├── dist
│ └── now.json
├── index.html
├── package.json
├── tsconfig.json
└── yarn.lock
├── jest
└── rAF.js
├── package.json
├── rollup.config.js
├── src
├── __tests__
│ ├── Springs-test.ts
│ └── __snapshots__
│ │ └── Springs-test.ts.snap
├── index.ts
└── utils.ts
├── tsconfig.json
├── tslint.json
└── yarn.lock
/.arcconfig:
--------------------------------------------------------------------------------
1 | {
2 | "load": [
3 | "material-arc-tools/third_party/arc-hook-conphig",
4 | "material-arc-tools/third_party/arc-hook-github-issues",
5 | "material-arc-tools/third_party/arc-proselint"
6 | ],
7 | "arcanist_configuration": "HookConphig",
8 | "phabricator.uri": "http://codereview.cc/",
9 | "arc.land.onto.default": "develop",
10 | "arc.feature.start.default": "origin/develop"
11 | }
12 |
--------------------------------------------------------------------------------
/.arclint:
--------------------------------------------------------------------------------
1 | {
2 | "linters": {
3 | "chmod": {
4 | "type": "chmod"
5 | },
6 | "prose": {
7 | "type": "prose",
8 | "include": "(\\.(md)$)",
9 | "exclude": [
10 | "(^CHANGELOG.md)"
11 | ],
12 | "severity": {
13 | "consistency.spacing": "disabled",
14 | "typography.symbols.curly_quotes": "disabled",
15 | "typography.symbols.ellipsis": "disabled",
16 | "leonard.exclamation.30ppm": "disabled",
17 | "misc.annotations": "warning"
18 | }
19 | },
20 | "spelling": {
21 | "type": "spelling",
22 | "include": "(\\.(md)$)"
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # This configuration was automatically generated from a CircleCI 1.0 config.
2 | # It should include any build commands you had along with commands that CircleCI
3 | # inferred from your project structure. We strongly recommend you read all the
4 | # comments in this file to understand the structure of CircleCI 2.0, as the idiom
5 | # for configuration has changed substantially in 2.0 to allow arbitrary jobs rather
6 | # than the prescribed lifecycle of 1.0. In general, we recommend using this generated
7 | # configuration as a reference rather than using it in production, though in most
8 | # cases it should duplicate the execution of your original 1.0 config.
9 | version: 2
10 | jobs:
11 | build:
12 | working_directory: ~/skevy/wobble
13 | parallelism: 1
14 | shell: /bin/bash --login
15 | # CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did.
16 | # If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables .
17 | environment:
18 | CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
19 | CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
20 | # In CircleCI 1.0 we used a pre-configured image with a large number of languages and other packages.
21 | # In CircleCI 2.0 you can now specify your own image, or use one of our pre-configured images.
22 | # The following configuration line tells CircleCI to use the specified docker image as the runtime environment for you job.
23 | # We have selected a pre-built image that mirrors the build environment we use on
24 | # the 1.0 platform, but we recommend you choose an image more tailored to the needs
25 | # of each job. For more information on choosing an image (or alternatively using a
26 | # VM instead of a container) see https://circleci.com/docs/2.0/executor-types/
27 | # To see the list of pre-built images that CircleCI provides for most common languages see
28 | # https://circleci.com/docs/2.0/circleci-images/
29 | docker:
30 | - image: circleci/node:10-stretch-browsers
31 | steps:
32 | # Machine Setup
33 | # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each
34 | # The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out.
35 | - checkout
36 | # Prepare for artifact and test results collection equivalent to how it was done on 1.0.
37 | # In many cases you can simplify this from what is generated here.
38 | # 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/'
39 | - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS/jest/ $CIRCLE_TEST_REPORTS/tslint/
40 | # Dependencies
41 | # This would typically go in either a build or a build-and-test job when using workflows
42 | # Restore the dependency cache
43 | - restore_cache:
44 | keys:
45 | # This branch if available
46 | - node10-{{ .Branch }}-
47 | # Default branch if not
48 | - node10-develop-
49 | # Any branch if there are none on the default branch - this should be unnecessary if you have your default branch configured correctly
50 | - node10-
51 |
52 | - run:
53 | name: Configure yarn
54 | command: |
55 | yarn config set prefix "$HOME/.yarn
56 | PATH=$( yarn global bin ):$PATH"
57 |
58 | - run:
59 | name: Install yarn dependencies for Wobble
60 | command: yarn
61 |
62 |
63 | - run:
64 | name: Check dependencies in demos
65 | working_directory: ./demos
66 | command: yarn
67 | when: always
68 |
69 | # Save dependency cache
70 | - save_cache:
71 | key: node10-{{ .Branch }}-{{ epoch }}
72 | paths:
73 | - ~/.cache/yarn
74 | - ./node_modules
75 | - ./demos/node_modules
76 |
77 | # jest-junit seems to be ignoring the JEST_JUNIT_OUTPUT environment
78 | # variables, so set them in package.json instead.
79 | - run:
80 | name: Add $CIRCLE_TEST_REPORTS to package.json
81 | command: |
82 | awk "{gsub(/CIRCLE_TEST_REPORTS/,\"$CIRCLE_TEST_REPORTS\"); print}" package.json > package.ci.json
83 | rm package.json
84 | mv package.ci.json package.json
85 |
86 | # Test
87 | # This would typically be a build job when using workflows, possibly combined with build
88 | # This is based on your 1.0 configuration file or project settings
89 | - run:
90 | name: Run tests
91 | command: yarn run test --ci --reporters=default --reporters=jest-junit
92 | when: always
93 |
94 | # yarn will lint separately as part of pretest, but we're running it manually to get the output piped into Circle
95 | - run:
96 | name: Run linter
97 | command: yarn run lint --out $CIRCLE_TEST_REPORTS/tslint/core.xml --formatters-dir ./node_modules/tslint-junit-formatter/formatters --format junit
98 | when: always
99 |
100 | # Teardown
101 | # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each
102 | # Save test results
103 | - store_test_results:
104 | path: /tmp/circleci-test-results
105 | # Save artifacts
106 | - store_artifacts:
107 | path: /tmp/circleci-artifacts
108 | - store_artifacts:
109 | path: /tmp/circleci-test-results
110 |
111 | # From http://codereview.cc/harbormaster/step/edit/6/
112 | #
113 | # This was from CircleCI v1, but Internet comments lead me to believe it's
114 | # unofficially still supported in Circle v2.
115 | notify:
116 | webhooks:
117 | - url: http://codereview.cc/harbormaster/hook/circleci/
118 |
119 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | build
4 | *.log
5 | coverage
6 | demos/.cache
7 | .DS_Store
8 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # CHANGELOG
2 |
3 | ### v1.5.1
4 |
5 | - Distribute unminified bundles by default - minified versions are available at `/dist/wobble.${MODULE_FORMAT}.min.js` ([af82dda](https://github.com/skevy/wobble/commit/af82dda29eae11741efd380fcde5a1e7542f759d))
6 | - Add `typescript:main` field to `package.json`, which points to the raw TypeScript source ([0198d63](https://github.com/skevy/wobble/commit/0198d630a4d426c9fc9bbdb1e7e9e74c28873c31))
7 |
8 | ### v1.5.0
9 |
10 | - Fixup `yarn watch` to support es module compilation ([f7dd689](https://github.com/skevy/wobble/commit/f7dd68951e0f2cd8a083706c9727b1906d3b6e03))
11 | - Add module entry point for .es.js dist ([0b929acf](https://github.com/skevy/wobble/commit/0b929acf6ba3a443b974a1c350213a3d64ff45cc))
12 |
13 | ### v1.4.1
14 |
15 | - Remove Babel ([cfdc3d85](https://github.com/skevy/wobble/commit/cfdc3d85ce01687b77c44cc68d11cabc85ffe0a3))
16 | - Fixup typescript interface names and member access ([2112b118](https://github.com/skevy/wobble/commit/2112b118fbb491113ec0432d9080b7f7acfc2bd5))
17 |
18 | ### v1.4.0
19 |
20 | - Remove Flow, rewrite in TypeScript ([a85aa77](https://github.com/skevy/wobble/commit/a85aa771843ec9a9ddf7d3d187dc4c2e5ff5a1b6))
21 |
22 | ### v1.3.1
23 |
24 | - Fix types for chainable methods ([bd7b496](https://github.com/skevy/wobble/commit/bd7b49622805b9bc218c87017ea92d3cb35d623f))
25 | - Use lolex in tests to properly fake timers ([3cb1e92](https://github.com/skevy/wobble/commit/3cb1e92729eb7948776f4548f9e86a4bad4c3077))
26 |
27 | ### v1.3.0
28 |
29 | - Update TypeScript definition with chainable API ([0c9bb96](https://github.com/skevy/wobble/commit/0c9bb96eb66c716d4d3b057bb366d593ea9bc79e))
30 | - Add README ([4656acf](https://github.com/skevy/wobble/commit/4656acf67f1a892ac81a1684d6516384eb900cd3
31 | ))
32 | - Deploy demos to wobble-demos.now.sh ([4172c9c](https://github.com/skevy/wobble/commit/4172c9c13aa6877a7f3951c201ca33a4e3e37856
33 | ))
34 | - Set _currentValue + _currentVelocity in constructor ([6112980](https://github.com/skevy/wobble/commit/61129802df8b2536264ceff46823e5e3911e9eef))
35 | - Add "chat heads" demo ([5189aea](https://github.com/skevy/wobble/commit/5189aea291131816fd80dc834fac2885a72e58b1))
36 | - Use `Date.now()` instead of `performance.now()` for React Native compatibility ([34d9a0f](https://github.com/skevy/wobble/commit/34d9a0fe6ef3ac24630c8524a0ac1229ed09fc08))
37 | - Make `this._currentTime` always equal to "now", remove "first step" calculation ([4589723](https://github.com/skevy/wobble/commit/45897231dd8683f4e820d2030956fe34cb4866ee))
38 | - Make all APIs chainable ([b89559f](https://github.com/skevy/wobble/commit/b89559fb6e83314098a673461d2225369f170d81))
39 | - Set default `toValue` to 1. ([c0fb41a](https://github.com/skevy/wobble/commit/c0fb41a3d17f30fb1c5298cc3c2aa20af7fe55a8))
40 | - Move @flow annotations + fix comments ([058c75d](https://github.com/skevy/wobble/commit/058c75d934a36c0e2a8f5dd5f34d5854ce664124))
41 | - Remove "browser" field from package.json ([261cca3](https://github.com/skevy/wobble/commit/261cca3237837cf2650a9441fe1406bc41a37b73))
42 |
43 | ### v1.2.0
44 |
45 | - Consistently use the term "listener" in tests ([1328f38](https://github.com/skevy/wobble/commit/1328f3878b7eea60611f4d722fa13d32e854826f))
46 | - Ensure listeners are only notified once per frame ([cf92f76](https://github.com/skevy/wobble/commit/cf92f7670aae10dc776af1a624a5d2509d0f1b70))
47 | - Made _evaluateSpring take an absolute timestamp ([0696712](https://github.com/skevy/wobble/commit/0696712d1352263d6dc09bc61e03be06be4f98ed))
48 |
49 | ### v1.1.0
50 |
51 | - Made onStart synchronous ([aaf21a9](https://github.com/skevy/wobble/commit/aaf21a97435864b93122ed6480765a654713f888))
52 | - Update _currentValue and _currentVelocity before updating fromValue ([9abf13f](https://github.com/skevy/wobble/commit/9abf13f8e1a107619a31c304750cd0363ad976ed))
53 |
54 | ### v1.0.0
55 |
56 | 🎉🎉🎉🎉🎉🎉 Initial Release! 🎉🎉🎉🎉🎉🎉
57 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2017 Adam Miskiewicz
2 |
3 | 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:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | 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.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | [](https://www.npmjs.com/package/wobble/v/1.5.1)
4 | [](https://circleci.com/gh/skevy/wobble/133)
5 | [](https://codecov.io/gh/skevy/wobble/tree/81d48aa583e633fef9da5d0050002b7438a1eb4d/src)
6 | [](https://github.com/skevy/wobble)
7 | [](https://circleci.com/gh/skevy/wobble/tree/develop)
8 | [](https://codecov.io/gh/skevy/wobble/branch/develop)
9 |
10 | A tiny (~1.7 KB gzipped) spring physics micro-library that models a [damped harmonic oscillator](https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).
11 |
12 | # Why Would I Use This?
13 |
14 | Perhaps, you just really like to dance.
15 |
16 | Use _wobble_ if you need a very small and accurate damped harmonic spring simulation in your animation library or application. _wobble_ intentionally **only** provides a way to animate a scalar value according to equations governing damped harmonic motion. That's all this library will ever do -- any other functionality (integration with [insert ui library here], multi-dimensional springs, a nice API around chaining springs together, etc.) is left to the reader to implement.
17 |
18 | # Background
19 |
20 | Using spring physics in UI design is a common way to express natural motion, and there are several ways to model the physics behind springs.
21 |
22 | There are two main ways that spring physics is typically implemented: numerical integration (using something like the [Runge-Kutta 4th order](https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods) numerical integration method) or by using a closed-form (exact) solution. Numerical integration is an approximation of the exact solution, and is generally easier to derive. The numerical integration technique can be applied to basically any ordinary differential equation. Though there are several different numerical integration methods, it's common to leverage RK4 when accuracy of the approximation is required, even though it's slightly slower. RK4 is commonly used in other animation libraries, such as [Rebound](https://github.com/facebook/rebound) and [Pop](https://github.com/facebook/pop/).
23 |
24 | The original goal of the algorithm used in _wobble_ was to replicate `CASpringAnimation` from Apple's Core Animation library (used to power animations on macOS and iOS) in order to mimic iOS animations in React Native. After doing a [little spelunking](https://github.com/facebook/react-native/pull/15322) inside `QuartzCore.framework`, it became clear that Apple was using the closed-form solution for damped harmonic oscillation to power `CASpringAnimation`. _wobble_ leverages the same equations as `CASpringAnimation` in order to be able to match Apple animations precisely.
25 |
26 | The closed-form solution lets us calculate position (_x_) and velocity (_v_) from time _t_, and thus it turns out that using the closed-form solution provides a couple advantages over RK4:
27 |
28 | - Easier to generate keyframes and build continuous/interruptible gestures and animations, due to the fact that _x_ and _v_ are pure functions of _t_.
29 | - Less code.
30 | - It's faster.
31 |
32 | ### Math!
33 |
34 | The ODE for damped harmonic motion is:
35 |
36 | 
37 |
38 | Solving this ODE yields:
39 |
40 | 
41 |
42 | And from this general solution, we're able to easily derive the solutions for under-damped, critically-damped, and over-damped damped harmonic oscillation.
43 |
44 | The full proof can be found [in this PDF](http://planetmath.org/sites/default/files/texpdf/39745.pdf) from [planetmath.org](http://planetmath.org).
45 |
46 | # Demos
47 |
48 | Wobble demos are located here: [https://wobble-demos.now.sh/](https://wobble-demos.now.sh/). Send PRs to add more!
49 |
50 | ... and of course, [Our FAVORITE Demo](https://m.youtube.com/watch?v=rFdeskwbhAM)
51 |
52 | # Getting Started
53 |
54 | ```bash
55 | yarn add wobble
56 | # or
57 | npm install --save wobble
58 | ```
59 |
60 | # Usage
61 |
62 | ```jsx
63 | import { Spring } from 'wobble';
64 |
65 | // Create a new spring
66 | const spring = new Spring({
67 | toValue: 100,
68 | stiffness: 1000,
69 | damping: 500,
70 | mass: 3,
71 | });
72 |
73 | // Set listeners for spring events, start the spring.
74 | spring
75 | .onStart(() => {
76 | console.log('Spring started!');
77 | })
78 | .onUpdate((s) => {
79 | console.log(`Spring's current value: ` + s.currentValue);
80 | console.log(`Spring's current velocity: ` + s.currentVelocity);
81 | })
82 | .onStop(() => {
83 | console.log('Spring is at rest!');
84 | })
85 | .start();
86 | ```
87 |
88 | # API
89 |
90 | #### `new Spring(config: SpringConfig)`
91 |
92 | Initialize a new spring with a given spring configuration.
93 |
94 | ## Configuration
95 |
96 | #### `fromValue: number`
97 |
98 | Starting value of the animation. Defaults to `0`.
99 |
100 | #### `toValue: number`
101 |
102 | Ending value of the animation. Defaults to `1`.
103 |
104 | #### `stiffness: number`
105 |
106 | The spring stiffness coefficient. Defaults to `100`.
107 |
108 | #### `damping: number`
109 |
110 | Defines how the spring’s motion should be damped due to the forces of friction. Defaults to `10`.
111 |
112 | #### `mass: number`
113 |
114 | The mass of the object attached to the end of the spring. Defaults to `1`.
115 |
116 | #### `initialVelocity: number`
117 |
118 | The initial velocity (in units/ms) of the object attached to the spring. Defaults to `0`.
119 |
120 | #### `allowsOverdamping: boolean`
121 |
122 | Whether or not the spring allows "overdamping" (a damping ratio > 1). Defaults to `false`.
123 |
124 | #### `overshootClamping: boolean`
125 |
126 | False when overshooting is allowed, true when it is not. Defaults to `false`.
127 |
128 | #### `restVelocityThreshold: number`
129 |
130 | When spring's velocity is below `restVelocityThreshold`, it is at rest. Defaults to `.001`.
131 |
132 | #### `restDisplacementThreshold: number`
133 |
134 | When the spring's displacement (current value) is below `restDisplacementThreshold`, it is at rest. Defaults to `.001`.
135 |
136 | ## Methods
137 |
138 | #### `start(): Spring`
139 |
140 | If `fromValue` differs from `toValue`, or `initialVelocity` is non-zero, start the simulation and call the `onStart` listeners.
141 |
142 | #### `stop(): Spring`
143 |
144 | If a simulation is in progress, stop it and call the `onStop` listeners.
145 |
146 | #### `updateConfig(updatedConfig: PartialSpringConfig): Spring`
147 |
148 | Updates the spring config with the given values. Values not explicitly supplied will be reused from the existing config.
149 |
150 | #### `onStart(listener: SpringListenerFn): Spring`
151 |
152 | The provided callback will be invoked when the simulation begins.
153 |
154 | #### `onUpdate(listener: SpringListenerFn): Spring`
155 |
156 | The provided callback will be invoked on each frame while the simulation is running.
157 |
158 | #### `onStop(listener: SpringListenerFn): Spring`
159 |
160 | The provided callback will be invoked when the simulation ends.
161 |
162 | #### `removeListener(listenerFn: SpringListenerFn): Spring`
163 |
164 | Remove a single listener from this spring.
165 |
166 | #### `removeAllListeners(): Spring`
167 |
168 | Removes all listeners from this spring.
169 |
170 | ## Properties
171 |
172 | #### `currentValue: number`
173 |
174 | The spring's current displacement.
175 |
176 | #### `currentVelocity: number`
177 |
178 | The spring's current velocity in units / ms.
179 |
180 | #### `isAtRest: boolean`
181 |
182 | If the spring has reached its `toValue`, or if its velocity is below the `restVelocityThreshold`, it is considered at rest. If `stop()` is called during a simulation, both `isAnimating` and `isAtRest` will be false.
183 |
184 | #### `isAnimating: boolean`
185 |
186 | Whether or not the spring is currently emitting values. Note: this is distinct from whether or not it is at rest. See also `isAtRest`.
187 |
188 | # Credits
189 |
190 | Brenton Simpson ([@appsforartists](https://twitter.com/appsforartists)) - For his assistance in creating and testing this library.
191 |
192 | Devine Lu Linvega ([@neauoire](https://twitter.com/neauoire)) - The awesome logo!
193 |
--------------------------------------------------------------------------------
/assets/general-solution.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/assets/general-solution.gif
--------------------------------------------------------------------------------
/assets/ode.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/assets/ode.gif
--------------------------------------------------------------------------------
/assets/wobble-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/assets/wobble-logo.png
--------------------------------------------------------------------------------
/demos/1-chat-heads/0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/demos/1-chat-heads/0.jpg
--------------------------------------------------------------------------------
/demos/1-chat-heads/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/demos/1-chat-heads/1.jpg
--------------------------------------------------------------------------------
/demos/1-chat-heads/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/demos/1-chat-heads/2.jpg
--------------------------------------------------------------------------------
/demos/1-chat-heads/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/demos/1-chat-heads/3.jpg
--------------------------------------------------------------------------------
/demos/1-chat-heads/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/demos/1-chat-heads/4.jpg
--------------------------------------------------------------------------------
/demos/1-chat-heads/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skevy/wobble/142d649f6351cae53c0eaa113bab7bac3e7e83fc/demos/1-chat-heads/5.jpg
--------------------------------------------------------------------------------
/demos/1-chat-heads/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Chat Heads
4 |
5 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/demos/1-chat-heads/index.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import * as ReactDOM from "react-dom";
3 |
4 | import { Spring } from "wobble";
5 |
6 | // @ts-ignore
7 | import * as images from "./*.jpg";
8 |
9 | const INITIAL_X = 250;
10 | const INITIAL_Y = 300;
11 |
12 | interface Ball {
13 | x: number;
14 | y: number;
15 | }
16 |
17 | interface BallSpring {
18 | x: Spring;
19 | y: Spring;
20 | }
21 |
22 | class ChatHeads extends React.Component {
23 | balls: Ball[] = Array(6)
24 | .fill([])
25 | .map(() => ({ x: INITIAL_X, y: INITIAL_Y }));
26 |
27 | springs: BallSpring[] = [];
28 |
29 | componentDidMount() {
30 | window.addEventListener("mousemove", this.handleMouseMove);
31 | window.addEventListener("touchmove", this.handleTouchMove);
32 | this.createFollowerSprings();
33 | this.springs[0].x.start();
34 | this.springs[0].y.start();
35 | }
36 |
37 | render() {
38 | return (
39 |
47 | {this.balls.map(({ x, y }, i) => (
48 |
63 | ))}
64 |
65 | );
66 | }
67 |
68 | createFollowerSprings() {
69 | const springConfig = {
70 | stiffness: 120,
71 | damping: 14,
72 | mass: 1
73 | };
74 | // Follower springs
75 | for (let i = 0; i < this.balls.length - 1; i++) {
76 | const x = new Spring({
77 | ...springConfig,
78 | fromValue: 0,
79 | toValue: INITIAL_X
80 | }).onUpdate(s => this.onSpringUpdate(i, "x", s));
81 | const y = new Spring({
82 | ...springConfig,
83 | fromValue: 0,
84 | toValue: INITIAL_Y
85 | }).onUpdate(s => this.onSpringUpdate(i, "y", s));
86 | this.springs.push({ x, y });
87 | }
88 | }
89 |
90 | onSpringUpdate = (i: number, dim: "x" | "y", s: Spring) => {
91 | const val = s.currentValue;
92 | this.balls[i + 1][dim] = val;
93 | if (i < this.balls.length - 2) {
94 | this.springs[i + 1][dim]
95 | .updateConfig({
96 | toValue: val
97 | })
98 | .start();
99 | }
100 | this.forceUpdate();
101 | };
102 |
103 | handleMouseMove = ({
104 | pageX: x,
105 | pageY: y
106 | }: {
107 | pageX: number;
108 | pageY: number;
109 | }) => {
110 | this.balls[0].x = x;
111 | this.balls[0].y = y;
112 | this.springs[0].x
113 | .updateConfig({
114 | toValue: x
115 | })
116 | .start();
117 | this.springs[0].y
118 | .updateConfig({
119 | toValue: y
120 | })
121 | .start();
122 | };
123 |
124 | handleTouchMove = ({ touches }: TouchEvent) => {
125 | this.handleMouseMove(touches[0]);
126 | };
127 | }
128 |
129 | ReactDOM.render(, document.getElementById("app"));
130 |
--------------------------------------------------------------------------------
/demos/dist/now.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "static",
3 | "alias": "wobble-demos"
4 | }
5 |
--------------------------------------------------------------------------------
/demos/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Demos
4 |
5 |
6 | Demos
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/demos/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "wobble-demos",
3 | "scripts": {
4 | "start": "parcel serve",
5 | "build": "parcel build index.html --public-url ./",
6 | "deploy": "yarn build && cd dist && now --public && now alias"
7 | },
8 | "dependencies": {
9 | "react": "^16.2.0",
10 | "react-dom": "^16.2.0",
11 | "wobble": "link:../"
12 | },
13 | "devDependencies": {
14 | "@types/react": "^16.0.34",
15 | "@types/react-dom": "^16.0.3",
16 | "now": "^9.1.0",
17 | "parcel-bundler": "^1.4.1",
18 | "tslint": "^5.9.1",
19 | "typescript": "^2.6.2"
20 | }
21 | }
--------------------------------------------------------------------------------
/demos/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "jsx": "react",
5 | "sourceMap": true,
6 | "noImplicitReturns": true,
7 | "noImplicitThis": true,
8 | "noImplicitAny": true,
9 | "strictNullChecks": true,
10 | "lib": [
11 | "dom",
12 | "esnext"
13 | ],
14 | "target": "es5",
15 | "pretty": true
16 | },
17 | "exclude": [
18 | "node_modules"
19 | ]
20 | }
--------------------------------------------------------------------------------
/demos/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/node@*":
6 | version "9.3.0"
7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5"
8 |
9 | "@types/react-dom@^16.0.3":
10 | version "16.0.3"
11 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.3.tgz#8accad7eabdab4cca3e1a56f5ccb57de2da0ff64"
12 | dependencies:
13 | "@types/node" "*"
14 | "@types/react" "*"
15 |
16 | "@types/react@*", "@types/react@^16.0.34":
17 | version "16.0.34"
18 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.34.tgz#7a8f795afd8a404a9c4af9539b24c75d3996914e"
19 |
20 | abbrev@1:
21 | version "1.1.1"
22 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
23 |
24 | ajv@^4.9.1:
25 | version "4.11.8"
26 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
27 | dependencies:
28 | co "^4.6.0"
29 | json-stable-stringify "^1.0.1"
30 |
31 | align-text@^0.1.1, align-text@^0.1.3:
32 | version "0.1.4"
33 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
34 | dependencies:
35 | kind-of "^3.0.2"
36 | longest "^1.0.1"
37 | repeat-string "^1.5.2"
38 |
39 | alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
40 | version "1.0.2"
41 | resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
42 |
43 | ansi-regex@^2.0.0:
44 | version "2.1.1"
45 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
46 |
47 | ansi-styles@^2.2.1:
48 | version "2.2.1"
49 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
50 |
51 | ansi-styles@^3.1.0:
52 | version "3.2.0"
53 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
54 | dependencies:
55 | color-convert "^1.9.0"
56 |
57 | anymatch@^1.3.0:
58 | version "1.3.2"
59 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
60 | dependencies:
61 | micromatch "^2.1.5"
62 | normalize-path "^2.0.0"
63 |
64 | aproba@^1.0.3:
65 | version "1.2.0"
66 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
67 |
68 | are-we-there-yet@~1.1.2:
69 | version "1.1.4"
70 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
71 | dependencies:
72 | delegates "^1.0.0"
73 | readable-stream "^2.0.6"
74 |
75 | argparse@^1.0.7:
76 | version "1.0.9"
77 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
78 | dependencies:
79 | sprintf-js "~1.0.2"
80 |
81 | arr-diff@^2.0.0:
82 | version "2.0.0"
83 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
84 | dependencies:
85 | arr-flatten "^1.0.1"
86 |
87 | arr-diff@^4.0.0:
88 | version "4.0.0"
89 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
90 |
91 | arr-flatten@^1.0.1, arr-flatten@^1.1.0:
92 | version "1.1.0"
93 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
94 |
95 | arr-union@^3.1.0:
96 | version "3.1.0"
97 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
98 |
99 | array-unique@^0.2.1:
100 | version "0.2.1"
101 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
102 |
103 | array-unique@^0.3.2:
104 | version "0.3.2"
105 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
106 |
107 | asap@~2.0.3:
108 | version "2.0.6"
109 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
110 |
111 | asn1.js@^4.0.0:
112 | version "4.9.2"
113 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
114 | dependencies:
115 | bn.js "^4.0.0"
116 | inherits "^2.0.1"
117 | minimalistic-assert "^1.0.0"
118 |
119 | asn1@~0.2.3:
120 | version "0.2.3"
121 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
122 |
123 | assert-plus@1.0.0, assert-plus@^1.0.0:
124 | version "1.0.0"
125 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
126 |
127 | assert-plus@^0.2.0:
128 | version "0.2.0"
129 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
130 |
131 | assert@^1.1.1:
132 | version "1.4.1"
133 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
134 | dependencies:
135 | util "0.10.3"
136 |
137 | assign-symbols@^1.0.0:
138 | version "1.0.0"
139 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
140 |
141 | async-each@^1.0.0:
142 | version "1.0.1"
143 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
144 |
145 | async-limiter@~1.0.0:
146 | version "1.0.0"
147 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
148 |
149 | asynckit@^0.4.0:
150 | version "0.4.0"
151 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
152 |
153 | atob@^2.0.0:
154 | version "2.0.3"
155 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d"
156 |
157 | autoprefixer@^6.3.1:
158 | version "6.7.7"
159 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
160 | dependencies:
161 | browserslist "^1.7.6"
162 | caniuse-db "^1.0.30000634"
163 | normalize-range "^0.1.2"
164 | num2fraction "^1.2.2"
165 | postcss "^5.2.16"
166 | postcss-value-parser "^3.2.3"
167 |
168 | aws-sign2@~0.6.0:
169 | version "0.6.0"
170 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
171 |
172 | aws4@^1.2.1:
173 | version "1.6.0"
174 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
175 |
176 | babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
177 | version "6.26.0"
178 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
179 | dependencies:
180 | chalk "^1.1.3"
181 | esutils "^2.0.2"
182 | js-tokens "^3.0.2"
183 |
184 | babel-core@^6.25.0, babel-core@^6.26.0:
185 | version "6.26.0"
186 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
187 | dependencies:
188 | babel-code-frame "^6.26.0"
189 | babel-generator "^6.26.0"
190 | babel-helpers "^6.24.1"
191 | babel-messages "^6.23.0"
192 | babel-register "^6.26.0"
193 | babel-runtime "^6.26.0"
194 | babel-template "^6.26.0"
195 | babel-traverse "^6.26.0"
196 | babel-types "^6.26.0"
197 | babylon "^6.18.0"
198 | convert-source-map "^1.5.0"
199 | debug "^2.6.8"
200 | json5 "^0.5.1"
201 | lodash "^4.17.4"
202 | minimatch "^3.0.4"
203 | path-is-absolute "^1.0.1"
204 | private "^0.1.7"
205 | slash "^1.0.0"
206 | source-map "^0.5.6"
207 |
208 | babel-generator@^6.25.0, babel-generator@^6.26.0:
209 | version "6.26.0"
210 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
211 | dependencies:
212 | babel-messages "^6.23.0"
213 | babel-runtime "^6.26.0"
214 | babel-types "^6.26.0"
215 | detect-indent "^4.0.0"
216 | jsesc "^1.3.0"
217 | lodash "^4.17.4"
218 | source-map "^0.5.6"
219 | trim-right "^1.0.1"
220 |
221 | babel-helpers@^6.24.1:
222 | version "6.24.1"
223 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
224 | dependencies:
225 | babel-runtime "^6.22.0"
226 | babel-template "^6.24.1"
227 |
228 | babel-messages@^6.23.0:
229 | version "6.23.0"
230 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
231 | dependencies:
232 | babel-runtime "^6.22.0"
233 |
234 | babel-plugin-transform-es2015-modules-commonjs@^6.26.0:
235 | version "6.26.0"
236 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
237 | dependencies:
238 | babel-plugin-transform-strict-mode "^6.24.1"
239 | babel-runtime "^6.26.0"
240 | babel-template "^6.26.0"
241 | babel-types "^6.26.0"
242 |
243 | babel-plugin-transform-strict-mode@^6.24.1:
244 | version "6.24.1"
245 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
246 | dependencies:
247 | babel-runtime "^6.22.0"
248 | babel-types "^6.24.1"
249 |
250 | babel-register@^6.26.0:
251 | version "6.26.0"
252 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
253 | dependencies:
254 | babel-core "^6.26.0"
255 | babel-runtime "^6.26.0"
256 | core-js "^2.5.0"
257 | home-or-tmp "^2.0.0"
258 | lodash "^4.17.4"
259 | mkdirp "^0.5.1"
260 | source-map-support "^0.4.15"
261 |
262 | babel-runtime@^6.11.6, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
263 | version "6.26.0"
264 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
265 | dependencies:
266 | core-js "^2.4.0"
267 | regenerator-runtime "^0.11.0"
268 |
269 | babel-template@^6.24.1, babel-template@^6.26.0:
270 | version "6.26.0"
271 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
272 | dependencies:
273 | babel-runtime "^6.26.0"
274 | babel-traverse "^6.26.0"
275 | babel-types "^6.26.0"
276 | babylon "^6.18.0"
277 | lodash "^4.17.4"
278 |
279 | babel-traverse@^6.26.0:
280 | version "6.26.0"
281 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
282 | dependencies:
283 | babel-code-frame "^6.26.0"
284 | babel-messages "^6.23.0"
285 | babel-runtime "^6.26.0"
286 | babel-types "^6.26.0"
287 | babylon "^6.18.0"
288 | debug "^2.6.8"
289 | globals "^9.18.0"
290 | invariant "^2.2.2"
291 | lodash "^4.17.4"
292 |
293 | babel-types@^6.15.0, babel-types@^6.24.1, babel-types@^6.26.0:
294 | version "6.26.0"
295 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
296 | dependencies:
297 | babel-runtime "^6.26.0"
298 | esutils "^2.0.2"
299 | lodash "^4.17.4"
300 | to-fast-properties "^1.0.3"
301 |
302 | babylon-walk@^1.0.2:
303 | version "1.0.2"
304 | resolved "https://registry.yarnpkg.com/babylon-walk/-/babylon-walk-1.0.2.tgz#3b15a5ddbb482a78b4ce9c01c8ba181702d9d6ce"
305 | dependencies:
306 | babel-runtime "^6.11.6"
307 | babel-types "^6.15.0"
308 | lodash.clone "^4.5.0"
309 |
310 | babylon@^6.17.4, babylon@^6.18.0:
311 | version "6.18.0"
312 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
313 |
314 | balanced-match@^0.4.2:
315 | version "0.4.2"
316 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
317 |
318 | balanced-match@^1.0.0:
319 | version "1.0.0"
320 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
321 |
322 | base64-js@^1.0.2:
323 | version "1.2.1"
324 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
325 |
326 | base@^0.11.1:
327 | version "0.11.2"
328 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
329 | dependencies:
330 | cache-base "^1.0.1"
331 | class-utils "^0.3.5"
332 | component-emitter "^1.2.1"
333 | define-property "^1.0.0"
334 | isobject "^3.0.1"
335 | mixin-deep "^1.2.0"
336 | pascalcase "^0.1.1"
337 |
338 | bcrypt-pbkdf@^1.0.0:
339 | version "1.0.1"
340 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
341 | dependencies:
342 | tweetnacl "^0.14.3"
343 |
344 | binary-extensions@^1.0.0:
345 | version "1.11.0"
346 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
347 |
348 | block-stream@*:
349 | version "0.0.9"
350 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
351 | dependencies:
352 | inherits "~2.0.0"
353 |
354 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
355 | version "4.11.8"
356 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
357 |
358 | boom@2.x.x:
359 | version "2.10.1"
360 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
361 | dependencies:
362 | hoek "2.x.x"
363 |
364 | brace-expansion@^1.1.7:
365 | version "1.1.8"
366 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
367 | dependencies:
368 | balanced-match "^1.0.0"
369 | concat-map "0.0.1"
370 |
371 | braces@^1.8.2:
372 | version "1.8.5"
373 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
374 | dependencies:
375 | expand-range "^1.8.1"
376 | preserve "^0.2.0"
377 | repeat-element "^1.1.2"
378 |
379 | braces@^2.3.0:
380 | version "2.3.0"
381 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e"
382 | dependencies:
383 | arr-flatten "^1.1.0"
384 | array-unique "^0.3.2"
385 | define-property "^1.0.0"
386 | extend-shallow "^2.0.1"
387 | fill-range "^4.0.0"
388 | isobject "^3.0.1"
389 | repeat-element "^1.1.2"
390 | snapdragon "^0.8.1"
391 | snapdragon-node "^2.0.1"
392 | split-string "^3.0.2"
393 | to-regex "^3.0.1"
394 |
395 | brorand@^1.0.1:
396 | version "1.1.0"
397 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
398 |
399 | browser-resolve@^1.11.2:
400 | version "1.11.2"
401 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
402 | dependencies:
403 | resolve "1.1.7"
404 |
405 | browserify-aes@^1.0.0, browserify-aes@^1.0.4:
406 | version "1.1.1"
407 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
408 | dependencies:
409 | buffer-xor "^1.0.3"
410 | cipher-base "^1.0.0"
411 | create-hash "^1.1.0"
412 | evp_bytestokey "^1.0.3"
413 | inherits "^2.0.1"
414 | safe-buffer "^5.0.1"
415 |
416 | browserify-cipher@^1.0.0:
417 | version "1.0.0"
418 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
419 | dependencies:
420 | browserify-aes "^1.0.4"
421 | browserify-des "^1.0.0"
422 | evp_bytestokey "^1.0.0"
423 |
424 | browserify-des@^1.0.0:
425 | version "1.0.0"
426 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
427 | dependencies:
428 | cipher-base "^1.0.1"
429 | des.js "^1.0.0"
430 | inherits "^2.0.1"
431 |
432 | browserify-rsa@^4.0.0:
433 | version "4.0.1"
434 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
435 | dependencies:
436 | bn.js "^4.1.0"
437 | randombytes "^2.0.1"
438 |
439 | browserify-sign@^4.0.0:
440 | version "4.0.4"
441 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
442 | dependencies:
443 | bn.js "^4.1.1"
444 | browserify-rsa "^4.0.0"
445 | create-hash "^1.1.0"
446 | create-hmac "^1.1.2"
447 | elliptic "^6.0.0"
448 | inherits "^2.0.1"
449 | parse-asn1 "^5.0.0"
450 |
451 | browserify-zlib@^0.2.0:
452 | version "0.2.0"
453 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
454 | dependencies:
455 | pako "~1.0.5"
456 |
457 | browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
458 | version "1.7.7"
459 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
460 | dependencies:
461 | caniuse-db "^1.0.30000639"
462 | electron-to-chromium "^1.2.7"
463 |
464 | buffer-xor@^1.0.3:
465 | version "1.0.3"
466 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
467 |
468 | buffer@^4.3.0:
469 | version "4.9.1"
470 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
471 | dependencies:
472 | base64-js "^1.0.2"
473 | ieee754 "^1.1.4"
474 | isarray "^1.0.0"
475 |
476 | builtin-modules@^1.1.1:
477 | version "1.1.1"
478 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
479 |
480 | builtin-status-codes@^3.0.0:
481 | version "3.0.0"
482 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
483 |
484 | cache-base@^1.0.1:
485 | version "1.0.1"
486 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
487 | dependencies:
488 | collection-visit "^1.0.0"
489 | component-emitter "^1.2.1"
490 | get-value "^2.0.6"
491 | has-value "^1.0.0"
492 | isobject "^3.0.1"
493 | set-value "^2.0.0"
494 | to-object-path "^0.3.0"
495 | union-value "^1.0.0"
496 | unset-value "^1.0.0"
497 |
498 | camelcase@^1.0.2:
499 | version "1.2.1"
500 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
501 |
502 | caniuse-api@^1.5.2:
503 | version "1.6.1"
504 | resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
505 | dependencies:
506 | browserslist "^1.3.6"
507 | caniuse-db "^1.0.30000529"
508 | lodash.memoize "^4.1.2"
509 | lodash.uniq "^4.5.0"
510 |
511 | caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
512 | version "1.0.30000792"
513 | resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000792.tgz#a7dac6dc9f5181b675fd69e5cb06fefb523157f8"
514 |
515 | caseless@~0.12.0:
516 | version "0.12.0"
517 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
518 |
519 | center-align@^0.1.1:
520 | version "0.1.3"
521 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
522 | dependencies:
523 | align-text "^0.1.3"
524 | lazy-cache "^1.0.3"
525 |
526 | chalk@^1.1.3:
527 | version "1.1.3"
528 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
529 | dependencies:
530 | ansi-styles "^2.2.1"
531 | escape-string-regexp "^1.0.2"
532 | has-ansi "^2.0.0"
533 | strip-ansi "^3.0.0"
534 | supports-color "^2.0.0"
535 |
536 | chalk@^2.1.0, chalk@^2.3.0:
537 | version "2.3.0"
538 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
539 | dependencies:
540 | ansi-styles "^3.1.0"
541 | escape-string-regexp "^1.0.5"
542 | supports-color "^4.0.0"
543 |
544 | chokidar@^1.7.0:
545 | version "1.7.0"
546 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
547 | dependencies:
548 | anymatch "^1.3.0"
549 | async-each "^1.0.0"
550 | glob-parent "^2.0.0"
551 | inherits "^2.0.1"
552 | is-binary-path "^1.0.0"
553 | is-glob "^2.0.0"
554 | path-is-absolute "^1.0.0"
555 | readdirp "^2.0.0"
556 | optionalDependencies:
557 | fsevents "^1.0.0"
558 |
559 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
560 | version "1.0.4"
561 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
562 | dependencies:
563 | inherits "^2.0.1"
564 | safe-buffer "^5.0.1"
565 |
566 | clap@^1.0.9:
567 | version "1.2.3"
568 | resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
569 | dependencies:
570 | chalk "^1.1.3"
571 |
572 | class-utils@^0.3.5:
573 | version "0.3.6"
574 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
575 | dependencies:
576 | arr-union "^3.1.0"
577 | define-property "^0.2.5"
578 | isobject "^3.0.0"
579 | static-extend "^0.1.1"
580 |
581 | cliui@^2.1.0:
582 | version "2.1.0"
583 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
584 | dependencies:
585 | center-align "^0.1.1"
586 | right-align "^0.1.1"
587 | wordwrap "0.0.2"
588 |
589 | clone@^1.0.2:
590 | version "1.0.3"
591 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
592 |
593 | co@^4.6.0:
594 | version "4.6.0"
595 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
596 |
597 | coa@~1.0.1:
598 | version "1.0.4"
599 | resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
600 | dependencies:
601 | q "^1.1.2"
602 |
603 | code-point-at@^1.0.0:
604 | version "1.1.0"
605 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
606 |
607 | collection-visit@^1.0.0:
608 | version "1.0.0"
609 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
610 | dependencies:
611 | map-visit "^1.0.0"
612 | object-visit "^1.0.0"
613 |
614 | color-convert@^1.3.0, color-convert@^1.9.0:
615 | version "1.9.1"
616 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
617 | dependencies:
618 | color-name "^1.1.1"
619 |
620 | color-name@^1.0.0, color-name@^1.1.1:
621 | version "1.1.3"
622 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
623 |
624 | color-string@^0.3.0:
625 | version "0.3.0"
626 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
627 | dependencies:
628 | color-name "^1.0.0"
629 |
630 | color@^0.11.0:
631 | version "0.11.4"
632 | resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
633 | dependencies:
634 | clone "^1.0.2"
635 | color-convert "^1.3.0"
636 | color-string "^0.3.0"
637 |
638 | colormin@^1.0.5:
639 | version "1.1.2"
640 | resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
641 | dependencies:
642 | color "^0.11.0"
643 | css-color-names "0.0.4"
644 | has "^1.0.1"
645 |
646 | colors@~1.1.2:
647 | version "1.1.2"
648 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
649 |
650 | combined-stream@^1.0.5, combined-stream@~1.0.5:
651 | version "1.0.5"
652 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
653 | dependencies:
654 | delayed-stream "~1.0.0"
655 |
656 | commander@^2.11.0, commander@^2.12.1, commander@~2.13.0:
657 | version "2.13.0"
658 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
659 |
660 | component-emitter@^1.2.1:
661 | version "1.2.1"
662 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
663 |
664 | concat-map@0.0.1:
665 | version "0.0.1"
666 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
667 |
668 | console-browserify@^1.1.0:
669 | version "1.1.0"
670 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
671 | dependencies:
672 | date-now "^0.1.4"
673 |
674 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
675 | version "1.1.0"
676 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
677 |
678 | constants-browserify@^1.0.0:
679 | version "1.0.0"
680 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
681 |
682 | convert-source-map@^1.5.0:
683 | version "1.5.1"
684 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
685 |
686 | copy-descriptor@^0.1.0:
687 | version "0.1.1"
688 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
689 |
690 | core-js@^1.0.0:
691 | version "1.2.7"
692 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
693 |
694 | core-js@^2.4.0, core-js@^2.5.0:
695 | version "2.5.3"
696 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
697 |
698 | core-util-is@1.0.2, core-util-is@~1.0.0:
699 | version "1.0.2"
700 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
701 |
702 | create-ecdh@^4.0.0:
703 | version "4.0.0"
704 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
705 | dependencies:
706 | bn.js "^4.1.0"
707 | elliptic "^6.0.0"
708 |
709 | create-hash@^1.1.0, create-hash@^1.1.2:
710 | version "1.1.3"
711 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
712 | dependencies:
713 | cipher-base "^1.0.1"
714 | inherits "^2.0.1"
715 | ripemd160 "^2.0.0"
716 | sha.js "^2.4.0"
717 |
718 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
719 | version "1.1.6"
720 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
721 | dependencies:
722 | cipher-base "^1.0.3"
723 | create-hash "^1.1.0"
724 | inherits "^2.0.1"
725 | ripemd160 "^2.0.0"
726 | safe-buffer "^5.0.1"
727 | sha.js "^2.4.8"
728 |
729 | cross-spawn@^5.1.0:
730 | version "5.1.0"
731 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
732 | dependencies:
733 | lru-cache "^4.0.1"
734 | shebang-command "^1.2.0"
735 | which "^1.2.9"
736 |
737 | cryptiles@2.x.x:
738 | version "2.0.5"
739 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
740 | dependencies:
741 | boom "2.x.x"
742 |
743 | crypto-browserify@^3.11.0:
744 | version "3.12.0"
745 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
746 | dependencies:
747 | browserify-cipher "^1.0.0"
748 | browserify-sign "^4.0.0"
749 | create-ecdh "^4.0.0"
750 | create-hash "^1.1.0"
751 | create-hmac "^1.1.0"
752 | diffie-hellman "^5.0.0"
753 | inherits "^2.0.1"
754 | pbkdf2 "^3.0.3"
755 | public-encrypt "^4.0.0"
756 | randombytes "^2.0.0"
757 | randomfill "^1.0.3"
758 |
759 | css-color-names@0.0.4:
760 | version "0.0.4"
761 | resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
762 |
763 | cssnano@^3.10.0, cssnano@^3.4.0:
764 | version "3.10.0"
765 | resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
766 | dependencies:
767 | autoprefixer "^6.3.1"
768 | decamelize "^1.1.2"
769 | defined "^1.0.0"
770 | has "^1.0.1"
771 | object-assign "^4.0.1"
772 | postcss "^5.0.14"
773 | postcss-calc "^5.2.0"
774 | postcss-colormin "^2.1.8"
775 | postcss-convert-values "^2.3.4"
776 | postcss-discard-comments "^2.0.4"
777 | postcss-discard-duplicates "^2.0.1"
778 | postcss-discard-empty "^2.0.1"
779 | postcss-discard-overridden "^0.1.1"
780 | postcss-discard-unused "^2.2.1"
781 | postcss-filter-plugins "^2.0.0"
782 | postcss-merge-idents "^2.1.5"
783 | postcss-merge-longhand "^2.0.1"
784 | postcss-merge-rules "^2.0.3"
785 | postcss-minify-font-values "^1.0.2"
786 | postcss-minify-gradients "^1.0.1"
787 | postcss-minify-params "^1.0.4"
788 | postcss-minify-selectors "^2.0.4"
789 | postcss-normalize-charset "^1.1.0"
790 | postcss-normalize-url "^3.0.7"
791 | postcss-ordered-values "^2.1.0"
792 | postcss-reduce-idents "^2.2.2"
793 | postcss-reduce-initial "^1.0.0"
794 | postcss-reduce-transforms "^1.0.3"
795 | postcss-svgo "^2.1.1"
796 | postcss-unique-selectors "^2.0.2"
797 | postcss-value-parser "^3.2.3"
798 | postcss-zindex "^2.0.1"
799 |
800 | csso@~2.3.1:
801 | version "2.3.2"
802 | resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
803 | dependencies:
804 | clap "^1.0.9"
805 | source-map "^0.5.3"
806 |
807 | dashdash@^1.12.0:
808 | version "1.14.1"
809 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
810 | dependencies:
811 | assert-plus "^1.0.0"
812 |
813 | date-now@^0.1.4:
814 | version "0.1.4"
815 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
816 |
817 | debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
818 | version "2.6.9"
819 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
820 | dependencies:
821 | ms "2.0.0"
822 |
823 | decamelize@^1.0.0, decamelize@^1.1.2:
824 | version "1.2.0"
825 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
826 |
827 | decode-uri-component@^0.2.0:
828 | version "0.2.0"
829 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
830 |
831 | deep-extend@~0.4.0:
832 | version "0.4.2"
833 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
834 |
835 | define-property@^0.2.5:
836 | version "0.2.5"
837 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
838 | dependencies:
839 | is-descriptor "^0.1.0"
840 |
841 | define-property@^1.0.0:
842 | version "1.0.0"
843 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
844 | dependencies:
845 | is-descriptor "^1.0.0"
846 |
847 | defined@^1.0.0:
848 | version "1.0.0"
849 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
850 |
851 | delayed-stream@~1.0.0:
852 | version "1.0.0"
853 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
854 |
855 | delegates@^1.0.0:
856 | version "1.0.0"
857 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
858 |
859 | depd@1.1.1:
860 | version "1.1.1"
861 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
862 |
863 | depd@~1.1.1:
864 | version "1.1.2"
865 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
866 |
867 | des.js@^1.0.0:
868 | version "1.0.0"
869 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
870 | dependencies:
871 | inherits "^2.0.1"
872 | minimalistic-assert "^1.0.0"
873 |
874 | destroy@~1.0.4:
875 | version "1.0.4"
876 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
877 |
878 | detect-indent@^4.0.0:
879 | version "4.0.0"
880 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
881 | dependencies:
882 | repeating "^2.0.0"
883 |
884 | detect-libc@^1.0.2:
885 | version "1.0.3"
886 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
887 |
888 | diff@^3.2.0:
889 | version "3.4.0"
890 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
891 |
892 | diffie-hellman@^5.0.0:
893 | version "5.0.2"
894 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
895 | dependencies:
896 | bn.js "^4.1.0"
897 | miller-rabin "^4.0.0"
898 | randombytes "^2.0.0"
899 |
900 | dom-serializer@0:
901 | version "0.1.0"
902 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
903 | dependencies:
904 | domelementtype "~1.1.1"
905 | entities "~1.1.1"
906 |
907 | domain-browser@^1.1.1:
908 | version "1.1.7"
909 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
910 |
911 | domelementtype@1, domelementtype@^1.3.0:
912 | version "1.3.0"
913 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
914 |
915 | domelementtype@~1.1.1:
916 | version "1.1.3"
917 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
918 |
919 | domhandler@^2.3.0:
920 | version "2.4.1"
921 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
922 | dependencies:
923 | domelementtype "1"
924 |
925 | domutils@^1.5.1:
926 | version "1.6.2"
927 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
928 | dependencies:
929 | dom-serializer "0"
930 | domelementtype "1"
931 |
932 | ecc-jsbn@~0.1.1:
933 | version "0.1.1"
934 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
935 | dependencies:
936 | jsbn "~0.1.0"
937 |
938 | ee-first@1.1.1:
939 | version "1.1.1"
940 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
941 |
942 | electron-releases@^2.1.0:
943 | version "2.1.0"
944 | resolved "https://registry.yarnpkg.com/electron-releases/-/electron-releases-2.1.0.tgz#c5614bf811f176ce3c836e368a0625782341fd4e"
945 |
946 | electron-to-chromium@^1.2.7:
947 | version "1.3.30"
948 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz#9666f532a64586651fc56a72513692e820d06a80"
949 | dependencies:
950 | electron-releases "^2.1.0"
951 |
952 | elliptic@^6.0.0:
953 | version "6.4.0"
954 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
955 | dependencies:
956 | bn.js "^4.4.0"
957 | brorand "^1.0.1"
958 | hash.js "^1.0.0"
959 | hmac-drbg "^1.0.0"
960 | inherits "^2.0.1"
961 | minimalistic-assert "^1.0.0"
962 | minimalistic-crypto-utils "^1.0.0"
963 |
964 | encodeurl@~1.0.1:
965 | version "1.0.1"
966 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
967 |
968 | encoding@^0.1.11:
969 | version "0.1.12"
970 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
971 | dependencies:
972 | iconv-lite "~0.4.13"
973 |
974 | entities@^1.1.1, entities@~1.1.1:
975 | version "1.1.1"
976 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
977 |
978 | errno@^0.1.4:
979 | version "0.1.6"
980 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
981 | dependencies:
982 | prr "~1.0.1"
983 |
984 | escape-html@~1.0.3:
985 | version "1.0.3"
986 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
987 |
988 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
989 | version "1.0.5"
990 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
991 |
992 | esprima@^2.6.0:
993 | version "2.7.3"
994 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
995 |
996 | esprima@^4.0.0:
997 | version "4.0.0"
998 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
999 |
1000 | esutils@^2.0.2:
1001 | version "2.0.2"
1002 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
1003 |
1004 | etag@~1.8.1:
1005 | version "1.8.1"
1006 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
1007 |
1008 | events@^1.0.0:
1009 | version "1.1.1"
1010 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
1011 |
1012 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
1013 | version "1.0.3"
1014 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
1015 | dependencies:
1016 | md5.js "^1.3.4"
1017 | safe-buffer "^5.1.1"
1018 |
1019 | expand-brackets@^0.1.4:
1020 | version "0.1.5"
1021 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
1022 | dependencies:
1023 | is-posix-bracket "^0.1.0"
1024 |
1025 | expand-brackets@^2.1.4:
1026 | version "2.1.4"
1027 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
1028 | dependencies:
1029 | debug "^2.3.3"
1030 | define-property "^0.2.5"
1031 | extend-shallow "^2.0.1"
1032 | posix-character-classes "^0.1.0"
1033 | regex-not "^1.0.0"
1034 | snapdragon "^0.8.1"
1035 | to-regex "^3.0.1"
1036 |
1037 | expand-range@^1.8.1:
1038 | version "1.8.2"
1039 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
1040 | dependencies:
1041 | fill-range "^2.1.0"
1042 |
1043 | extend-shallow@^2.0.1:
1044 | version "2.0.1"
1045 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
1046 | dependencies:
1047 | is-extendable "^0.1.0"
1048 |
1049 | extend-shallow@^3.0.0:
1050 | version "3.0.2"
1051 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
1052 | dependencies:
1053 | assign-symbols "^1.0.0"
1054 | is-extendable "^1.0.1"
1055 |
1056 | extend@~3.0.0:
1057 | version "3.0.1"
1058 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
1059 |
1060 | extglob@^0.3.1:
1061 | version "0.3.2"
1062 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
1063 | dependencies:
1064 | is-extglob "^1.0.0"
1065 |
1066 | extglob@^2.0.2:
1067 | version "2.0.4"
1068 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
1069 | dependencies:
1070 | array-unique "^0.3.2"
1071 | define-property "^1.0.0"
1072 | expand-brackets "^2.1.4"
1073 | extend-shallow "^2.0.1"
1074 | fragment-cache "^0.2.1"
1075 | regex-not "^1.0.0"
1076 | snapdragon "^0.8.1"
1077 | to-regex "^3.0.1"
1078 |
1079 | extsprintf@1.3.0:
1080 | version "1.3.0"
1081 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
1082 |
1083 | extsprintf@^1.2.0:
1084 | version "1.4.0"
1085 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
1086 |
1087 | fbjs@^0.8.16:
1088 | version "0.8.16"
1089 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
1090 | dependencies:
1091 | core-js "^1.0.0"
1092 | isomorphic-fetch "^2.1.1"
1093 | loose-envify "^1.0.0"
1094 | object-assign "^4.1.0"
1095 | promise "^7.1.1"
1096 | setimmediate "^1.0.5"
1097 | ua-parser-js "^0.7.9"
1098 |
1099 | filename-regex@^2.0.0:
1100 | version "2.0.1"
1101 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
1102 |
1103 | fill-range@^2.1.0:
1104 | version "2.2.3"
1105 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
1106 | dependencies:
1107 | is-number "^2.1.0"
1108 | isobject "^2.0.0"
1109 | randomatic "^1.1.3"
1110 | repeat-element "^1.1.2"
1111 | repeat-string "^1.5.2"
1112 |
1113 | fill-range@^4.0.0:
1114 | version "4.0.0"
1115 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
1116 | dependencies:
1117 | extend-shallow "^2.0.1"
1118 | is-number "^3.0.0"
1119 | repeat-string "^1.6.1"
1120 | to-regex-range "^2.1.0"
1121 |
1122 | flatten@^1.0.2:
1123 | version "1.0.2"
1124 | resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
1125 |
1126 | for-in@^1.0.1, for-in@^1.0.2:
1127 | version "1.0.2"
1128 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
1129 |
1130 | for-own@^0.1.4:
1131 | version "0.1.5"
1132 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
1133 | dependencies:
1134 | for-in "^1.0.1"
1135 |
1136 | forever-agent@~0.6.1:
1137 | version "0.6.1"
1138 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
1139 |
1140 | form-data@~2.1.1:
1141 | version "2.1.4"
1142 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
1143 | dependencies:
1144 | asynckit "^0.4.0"
1145 | combined-stream "^1.0.5"
1146 | mime-types "^2.1.12"
1147 |
1148 | fragment-cache@^0.2.1:
1149 | version "0.2.1"
1150 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
1151 | dependencies:
1152 | map-cache "^0.2.2"
1153 |
1154 | fresh@0.5.2:
1155 | version "0.5.2"
1156 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
1157 |
1158 | fs.realpath@^1.0.0:
1159 | version "1.0.0"
1160 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1161 |
1162 | fsevents@^1.0.0:
1163 | version "1.1.3"
1164 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
1165 | dependencies:
1166 | nan "^2.3.0"
1167 | node-pre-gyp "^0.6.39"
1168 |
1169 | fstream-ignore@^1.0.5:
1170 | version "1.0.5"
1171 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
1172 | dependencies:
1173 | fstream "^1.0.0"
1174 | inherits "2"
1175 | minimatch "^3.0.0"
1176 |
1177 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
1178 | version "1.0.11"
1179 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
1180 | dependencies:
1181 | graceful-fs "^4.1.2"
1182 | inherits "~2.0.0"
1183 | mkdirp ">=0.5 0"
1184 | rimraf "2"
1185 |
1186 | function-bind@^1.0.2:
1187 | version "1.1.1"
1188 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1189 |
1190 | gauge@~2.7.3:
1191 | version "2.7.4"
1192 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
1193 | dependencies:
1194 | aproba "^1.0.3"
1195 | console-control-strings "^1.0.0"
1196 | has-unicode "^2.0.0"
1197 | object-assign "^4.1.0"
1198 | signal-exit "^3.0.0"
1199 | string-width "^1.0.1"
1200 | strip-ansi "^3.0.1"
1201 | wide-align "^1.1.0"
1202 |
1203 | get-port@^3.2.0:
1204 | version "3.2.0"
1205 | resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc"
1206 |
1207 | get-value@^2.0.3, get-value@^2.0.6:
1208 | version "2.0.6"
1209 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
1210 |
1211 | getpass@^0.1.1:
1212 | version "0.1.7"
1213 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
1214 | dependencies:
1215 | assert-plus "^1.0.0"
1216 |
1217 | glob-base@^0.3.0:
1218 | version "0.3.0"
1219 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
1220 | dependencies:
1221 | glob-parent "^2.0.0"
1222 | is-glob "^2.0.0"
1223 |
1224 | glob-parent@^2.0.0:
1225 | version "2.0.0"
1226 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
1227 | dependencies:
1228 | is-glob "^2.0.0"
1229 |
1230 | glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
1231 | version "7.1.2"
1232 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
1233 | dependencies:
1234 | fs.realpath "^1.0.0"
1235 | inflight "^1.0.4"
1236 | inherits "2"
1237 | minimatch "^3.0.4"
1238 | once "^1.3.0"
1239 | path-is-absolute "^1.0.0"
1240 |
1241 | globals@^9.18.0:
1242 | version "9.18.0"
1243 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
1244 |
1245 | graceful-fs@^4.1.2:
1246 | version "4.1.11"
1247 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
1248 |
1249 | har-schema@^1.0.5:
1250 | version "1.0.5"
1251 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
1252 |
1253 | har-validator@~4.2.1:
1254 | version "4.2.1"
1255 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
1256 | dependencies:
1257 | ajv "^4.9.1"
1258 | har-schema "^1.0.5"
1259 |
1260 | has-ansi@^2.0.0:
1261 | version "2.0.0"
1262 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
1263 | dependencies:
1264 | ansi-regex "^2.0.0"
1265 |
1266 | has-flag@^1.0.0:
1267 | version "1.0.0"
1268 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
1269 |
1270 | has-flag@^2.0.0:
1271 | version "2.0.0"
1272 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
1273 |
1274 | has-unicode@^2.0.0:
1275 | version "2.0.1"
1276 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
1277 |
1278 | has-value@^0.3.1:
1279 | version "0.3.1"
1280 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
1281 | dependencies:
1282 | get-value "^2.0.3"
1283 | has-values "^0.1.4"
1284 | isobject "^2.0.0"
1285 |
1286 | has-value@^1.0.0:
1287 | version "1.0.0"
1288 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
1289 | dependencies:
1290 | get-value "^2.0.6"
1291 | has-values "^1.0.0"
1292 | isobject "^3.0.0"
1293 |
1294 | has-values@^0.1.4:
1295 | version "0.1.4"
1296 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
1297 |
1298 | has-values@^1.0.0:
1299 | version "1.0.0"
1300 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
1301 | dependencies:
1302 | is-number "^3.0.0"
1303 | kind-of "^4.0.0"
1304 |
1305 | has@^1.0.1:
1306 | version "1.0.1"
1307 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
1308 | dependencies:
1309 | function-bind "^1.0.2"
1310 |
1311 | hash-base@^2.0.0:
1312 | version "2.0.2"
1313 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
1314 | dependencies:
1315 | inherits "^2.0.1"
1316 |
1317 | hash-base@^3.0.0:
1318 | version "3.0.4"
1319 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
1320 | dependencies:
1321 | inherits "^2.0.1"
1322 | safe-buffer "^5.0.1"
1323 |
1324 | hash.js@^1.0.0, hash.js@^1.0.3:
1325 | version "1.1.3"
1326 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
1327 | dependencies:
1328 | inherits "^2.0.3"
1329 | minimalistic-assert "^1.0.0"
1330 |
1331 | hawk@3.1.3, hawk@~3.1.3:
1332 | version "3.1.3"
1333 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
1334 | dependencies:
1335 | boom "2.x.x"
1336 | cryptiles "2.x.x"
1337 | hoek "2.x.x"
1338 | sntp "1.x.x"
1339 |
1340 | hmac-drbg@^1.0.0:
1341 | version "1.0.1"
1342 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
1343 | dependencies:
1344 | hash.js "^1.0.3"
1345 | minimalistic-assert "^1.0.0"
1346 | minimalistic-crypto-utils "^1.0.1"
1347 |
1348 | hoek@2.x.x:
1349 | version "2.16.3"
1350 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
1351 |
1352 | home-or-tmp@^2.0.0:
1353 | version "2.0.0"
1354 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
1355 | dependencies:
1356 | os-homedir "^1.0.0"
1357 | os-tmpdir "^1.0.1"
1358 |
1359 | html-comment-regex@^1.1.0:
1360 | version "1.1.1"
1361 | resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
1362 |
1363 | htmlnano@^0.1.6:
1364 | version "0.1.6"
1365 | resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-0.1.6.tgz#709aa2d96d8df37bfd8dbfa6ce5f4f80c863738e"
1366 | dependencies:
1367 | cssnano "^3.4.0"
1368 | object-assign "^4.0.1"
1369 | posthtml "^0.8.7"
1370 | posthtml-render "^1.0.6"
1371 | svgo "^0.7.2"
1372 | uglify-js "^2.8.29"
1373 |
1374 | htmlparser2@^3.8.3, htmlparser2@^3.9.2:
1375 | version "3.9.2"
1376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
1377 | dependencies:
1378 | domelementtype "^1.3.0"
1379 | domhandler "^2.3.0"
1380 | domutils "^1.5.1"
1381 | entities "^1.1.1"
1382 | inherits "^2.0.1"
1383 | readable-stream "^2.0.2"
1384 |
1385 | http-errors@~1.6.2:
1386 | version "1.6.2"
1387 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
1388 | dependencies:
1389 | depd "1.1.1"
1390 | inherits "2.0.3"
1391 | setprototypeof "1.0.3"
1392 | statuses ">= 1.3.1 < 2"
1393 |
1394 | http-signature@~1.1.0:
1395 | version "1.1.1"
1396 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
1397 | dependencies:
1398 | assert-plus "^0.2.0"
1399 | jsprim "^1.2.2"
1400 | sshpk "^1.7.0"
1401 |
1402 | https-browserify@^1.0.0:
1403 | version "1.0.0"
1404 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
1405 |
1406 | iconv-lite@~0.4.13:
1407 | version "0.4.19"
1408 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
1409 |
1410 | ieee754@^1.1.4:
1411 | version "1.1.8"
1412 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
1413 |
1414 | indexes-of@^1.0.1:
1415 | version "1.0.1"
1416 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
1417 |
1418 | indexof@0.0.1:
1419 | version "0.0.1"
1420 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
1421 |
1422 | inflight@^1.0.4:
1423 | version "1.0.6"
1424 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1425 | dependencies:
1426 | once "^1.3.0"
1427 | wrappy "1"
1428 |
1429 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
1430 | version "2.0.3"
1431 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1432 |
1433 | inherits@2.0.1:
1434 | version "2.0.1"
1435 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
1436 |
1437 | ini@~1.3.0:
1438 | version "1.3.5"
1439 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
1440 |
1441 | invariant@^2.2.2:
1442 | version "2.2.2"
1443 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
1444 | dependencies:
1445 | loose-envify "^1.0.0"
1446 |
1447 | is-absolute-url@^2.0.0:
1448 | version "2.1.0"
1449 | resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
1450 |
1451 | is-accessor-descriptor@^0.1.6:
1452 | version "0.1.6"
1453 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
1454 | dependencies:
1455 | kind-of "^3.0.2"
1456 |
1457 | is-accessor-descriptor@^1.0.0:
1458 | version "1.0.0"
1459 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
1460 | dependencies:
1461 | kind-of "^6.0.0"
1462 |
1463 | is-binary-path@^1.0.0:
1464 | version "1.0.1"
1465 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
1466 | dependencies:
1467 | binary-extensions "^1.0.0"
1468 |
1469 | is-buffer@^1.1.5:
1470 | version "1.1.6"
1471 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
1472 |
1473 | is-data-descriptor@^0.1.4:
1474 | version "0.1.4"
1475 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
1476 | dependencies:
1477 | kind-of "^3.0.2"
1478 |
1479 | is-data-descriptor@^1.0.0:
1480 | version "1.0.0"
1481 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
1482 | dependencies:
1483 | kind-of "^6.0.0"
1484 |
1485 | is-descriptor@^0.1.0:
1486 | version "0.1.6"
1487 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
1488 | dependencies:
1489 | is-accessor-descriptor "^0.1.6"
1490 | is-data-descriptor "^0.1.4"
1491 | kind-of "^5.0.0"
1492 |
1493 | is-descriptor@^1.0.0:
1494 | version "1.0.2"
1495 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
1496 | dependencies:
1497 | is-accessor-descriptor "^1.0.0"
1498 | is-data-descriptor "^1.0.0"
1499 | kind-of "^6.0.2"
1500 |
1501 | is-dotfile@^1.0.0:
1502 | version "1.0.3"
1503 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
1504 |
1505 | is-equal-shallow@^0.1.3:
1506 | version "0.1.3"
1507 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
1508 | dependencies:
1509 | is-primitive "^2.0.0"
1510 |
1511 | is-extendable@^0.1.0, is-extendable@^0.1.1:
1512 | version "0.1.1"
1513 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
1514 |
1515 | is-extendable@^1.0.1:
1516 | version "1.0.1"
1517 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
1518 | dependencies:
1519 | is-plain-object "^2.0.4"
1520 |
1521 | is-extglob@^1.0.0:
1522 | version "1.0.0"
1523 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
1524 |
1525 | is-finite@^1.0.0:
1526 | version "1.0.2"
1527 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1528 | dependencies:
1529 | number-is-nan "^1.0.0"
1530 |
1531 | is-fullwidth-code-point@^1.0.0:
1532 | version "1.0.0"
1533 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1534 | dependencies:
1535 | number-is-nan "^1.0.0"
1536 |
1537 | is-glob@^2.0.0, is-glob@^2.0.1:
1538 | version "2.0.1"
1539 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
1540 | dependencies:
1541 | is-extglob "^1.0.0"
1542 |
1543 | is-number@^2.1.0:
1544 | version "2.1.0"
1545 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
1546 | dependencies:
1547 | kind-of "^3.0.2"
1548 |
1549 | is-number@^3.0.0:
1550 | version "3.0.0"
1551 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
1552 | dependencies:
1553 | kind-of "^3.0.2"
1554 |
1555 | is-odd@^1.0.0:
1556 | version "1.0.0"
1557 | resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088"
1558 | dependencies:
1559 | is-number "^3.0.0"
1560 |
1561 | is-plain-obj@^1.0.0:
1562 | version "1.1.0"
1563 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
1564 |
1565 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
1566 | version "2.0.4"
1567 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
1568 | dependencies:
1569 | isobject "^3.0.1"
1570 |
1571 | is-posix-bracket@^0.1.0:
1572 | version "0.1.1"
1573 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
1574 |
1575 | is-primitive@^2.0.0:
1576 | version "2.0.0"
1577 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
1578 |
1579 | is-stream@^1.0.1:
1580 | version "1.1.0"
1581 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
1582 |
1583 | is-svg@^2.0.0:
1584 | version "2.1.0"
1585 | resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
1586 | dependencies:
1587 | html-comment-regex "^1.1.0"
1588 |
1589 | is-typedarray@~1.0.0:
1590 | version "1.0.0"
1591 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1592 |
1593 | is-url@^1.2.2:
1594 | version "1.2.2"
1595 | resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
1596 |
1597 | is-wsl@^1.1.0:
1598 | version "1.1.0"
1599 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
1600 |
1601 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
1602 | version "1.0.0"
1603 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1604 |
1605 | isexe@^2.0.0:
1606 | version "2.0.0"
1607 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1608 |
1609 | isobject@^2.0.0, isobject@^2.1.0:
1610 | version "2.1.0"
1611 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1612 | dependencies:
1613 | isarray "1.0.0"
1614 |
1615 | isobject@^3.0.0, isobject@^3.0.1:
1616 | version "3.0.1"
1617 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
1618 |
1619 | isomorphic-fetch@^2.1.1:
1620 | version "2.2.1"
1621 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
1622 | dependencies:
1623 | node-fetch "^1.0.1"
1624 | whatwg-fetch ">=0.10.0"
1625 |
1626 | isstream@~0.1.2:
1627 | version "0.1.2"
1628 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1629 |
1630 | js-base64@^2.1.9:
1631 | version "2.4.0"
1632 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa"
1633 |
1634 | js-tokens@^3.0.0, js-tokens@^3.0.2:
1635 | version "3.0.2"
1636 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1637 |
1638 | js-yaml@^3.10.0, js-yaml@^3.7.0:
1639 | version "3.10.0"
1640 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
1641 | dependencies:
1642 | argparse "^1.0.7"
1643 | esprima "^4.0.0"
1644 |
1645 | js-yaml@~3.7.0:
1646 | version "3.7.0"
1647 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
1648 | dependencies:
1649 | argparse "^1.0.7"
1650 | esprima "^2.6.0"
1651 |
1652 | jsbn@~0.1.0:
1653 | version "0.1.1"
1654 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1655 |
1656 | jsesc@^1.3.0:
1657 | version "1.3.0"
1658 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
1659 |
1660 | json-schema@0.2.3:
1661 | version "0.2.3"
1662 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1663 |
1664 | json-stable-stringify@^1.0.1:
1665 | version "1.0.1"
1666 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
1667 | dependencies:
1668 | jsonify "~0.0.0"
1669 |
1670 | json-stringify-safe@~5.0.1:
1671 | version "5.0.1"
1672 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1673 |
1674 | json5@^0.5.1:
1675 | version "0.5.1"
1676 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
1677 |
1678 | jsonify@~0.0.0:
1679 | version "0.0.0"
1680 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
1681 |
1682 | jsprim@^1.2.2:
1683 | version "1.4.1"
1684 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
1685 | dependencies:
1686 | assert-plus "1.0.0"
1687 | extsprintf "1.3.0"
1688 | json-schema "0.2.3"
1689 | verror "1.10.0"
1690 |
1691 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
1692 | version "3.2.2"
1693 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1694 | dependencies:
1695 | is-buffer "^1.1.5"
1696 |
1697 | kind-of@^4.0.0:
1698 | version "4.0.0"
1699 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
1700 | dependencies:
1701 | is-buffer "^1.1.5"
1702 |
1703 | kind-of@^5.0.0, kind-of@^5.0.2:
1704 | version "5.1.0"
1705 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
1706 |
1707 | kind-of@^6.0.0, kind-of@^6.0.2:
1708 | version "6.0.2"
1709 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
1710 |
1711 | lazy-cache@^1.0.3:
1712 | version "1.0.4"
1713 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1714 |
1715 | lazy-cache@^2.0.2:
1716 | version "2.0.2"
1717 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264"
1718 | dependencies:
1719 | set-getter "^0.1.0"
1720 |
1721 | lodash.clone@^4.5.0:
1722 | version "4.5.0"
1723 | resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6"
1724 |
1725 | lodash.memoize@^4.1.2:
1726 | version "4.1.2"
1727 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
1728 |
1729 | lodash.uniq@^4.5.0:
1730 | version "4.5.0"
1731 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
1732 |
1733 | lodash@^4.17.4:
1734 | version "4.17.4"
1735 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
1736 |
1737 | longest@^1.0.1:
1738 | version "1.0.1"
1739 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
1740 |
1741 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
1742 | version "1.3.1"
1743 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
1744 | dependencies:
1745 | js-tokens "^3.0.0"
1746 |
1747 | lru-cache@^4.0.1:
1748 | version "4.1.1"
1749 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
1750 | dependencies:
1751 | pseudomap "^1.0.2"
1752 | yallist "^2.1.2"
1753 |
1754 | macaddress@^0.2.8:
1755 | version "0.2.8"
1756 | resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
1757 |
1758 | map-cache@^0.2.2:
1759 | version "0.2.2"
1760 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
1761 |
1762 | map-visit@^1.0.0:
1763 | version "1.0.0"
1764 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
1765 | dependencies:
1766 | object-visit "^1.0.0"
1767 |
1768 | math-expression-evaluator@^1.2.14:
1769 | version "1.2.17"
1770 | resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
1771 |
1772 | md5.js@^1.3.4:
1773 | version "1.3.4"
1774 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
1775 | dependencies:
1776 | hash-base "^3.0.0"
1777 | inherits "^2.0.1"
1778 |
1779 | micromatch@^2.1.5:
1780 | version "2.3.11"
1781 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
1782 | dependencies:
1783 | arr-diff "^2.0.0"
1784 | array-unique "^0.2.1"
1785 | braces "^1.8.2"
1786 | expand-brackets "^0.1.4"
1787 | extglob "^0.3.1"
1788 | filename-regex "^2.0.0"
1789 | is-extglob "^1.0.0"
1790 | is-glob "^2.0.1"
1791 | kind-of "^3.0.2"
1792 | normalize-path "^2.0.1"
1793 | object.omit "^2.0.0"
1794 | parse-glob "^3.0.4"
1795 | regex-cache "^0.4.2"
1796 |
1797 | micromatch@^3.0.4:
1798 | version "3.1.5"
1799 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.5.tgz#d05e168c206472dfbca985bfef4f57797b4cd4ba"
1800 | dependencies:
1801 | arr-diff "^4.0.0"
1802 | array-unique "^0.3.2"
1803 | braces "^2.3.0"
1804 | define-property "^1.0.0"
1805 | extend-shallow "^2.0.1"
1806 | extglob "^2.0.2"
1807 | fragment-cache "^0.2.1"
1808 | kind-of "^6.0.0"
1809 | nanomatch "^1.2.5"
1810 | object.pick "^1.3.0"
1811 | regex-not "^1.0.0"
1812 | snapdragon "^0.8.1"
1813 | to-regex "^3.0.1"
1814 |
1815 | miller-rabin@^4.0.0:
1816 | version "4.0.1"
1817 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
1818 | dependencies:
1819 | bn.js "^4.0.0"
1820 | brorand "^1.0.1"
1821 |
1822 | mime-db@~1.30.0:
1823 | version "1.30.0"
1824 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
1825 |
1826 | mime-types@^2.1.12, mime-types@~2.1.7:
1827 | version "2.1.17"
1828 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
1829 | dependencies:
1830 | mime-db "~1.30.0"
1831 |
1832 | mime@1.4.1:
1833 | version "1.4.1"
1834 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
1835 |
1836 | minimalistic-assert@^1.0.0:
1837 | version "1.0.0"
1838 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
1839 |
1840 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
1841 | version "1.0.1"
1842 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
1843 |
1844 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
1845 | version "3.0.4"
1846 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1847 | dependencies:
1848 | brace-expansion "^1.1.7"
1849 |
1850 | minimist@0.0.8:
1851 | version "0.0.8"
1852 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1853 |
1854 | minimist@^1.2.0:
1855 | version "1.2.0"
1856 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1857 |
1858 | mixin-deep@^1.2.0:
1859 | version "1.3.0"
1860 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.0.tgz#47a8732ba97799457c8c1eca28f95132d7e8150a"
1861 | dependencies:
1862 | for-in "^1.0.2"
1863 | is-extendable "^1.0.1"
1864 |
1865 | "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
1866 | version "0.5.1"
1867 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1868 | dependencies:
1869 | minimist "0.0.8"
1870 |
1871 | ms@2.0.0:
1872 | version "2.0.0"
1873 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1874 |
1875 | nan@^2.3.0:
1876 | version "2.8.0"
1877 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
1878 |
1879 | nanomatch@^1.2.5:
1880 | version "1.2.7"
1881 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.7.tgz#53cd4aa109ff68b7f869591fdc9d10daeeea3e79"
1882 | dependencies:
1883 | arr-diff "^4.0.0"
1884 | array-unique "^0.3.2"
1885 | define-property "^1.0.0"
1886 | extend-shallow "^2.0.1"
1887 | fragment-cache "^0.2.1"
1888 | is-odd "^1.0.0"
1889 | kind-of "^5.0.2"
1890 | object.pick "^1.3.0"
1891 | regex-not "^1.0.0"
1892 | snapdragon "^0.8.1"
1893 | to-regex "^3.0.1"
1894 |
1895 | node-fetch@^1.0.1:
1896 | version "1.7.3"
1897 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
1898 | dependencies:
1899 | encoding "^0.1.11"
1900 | is-stream "^1.0.1"
1901 |
1902 | node-forge@^0.7.1:
1903 | version "0.7.1"
1904 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
1905 |
1906 | node-libs-browser@^2.0.0:
1907 | version "2.1.0"
1908 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
1909 | dependencies:
1910 | assert "^1.1.1"
1911 | browserify-zlib "^0.2.0"
1912 | buffer "^4.3.0"
1913 | console-browserify "^1.1.0"
1914 | constants-browserify "^1.0.0"
1915 | crypto-browserify "^3.11.0"
1916 | domain-browser "^1.1.1"
1917 | events "^1.0.0"
1918 | https-browserify "^1.0.0"
1919 | os-browserify "^0.3.0"
1920 | path-browserify "0.0.0"
1921 | process "^0.11.10"
1922 | punycode "^1.2.4"
1923 | querystring-es3 "^0.2.0"
1924 | readable-stream "^2.3.3"
1925 | stream-browserify "^2.0.1"
1926 | stream-http "^2.7.2"
1927 | string_decoder "^1.0.0"
1928 | timers-browserify "^2.0.4"
1929 | tty-browserify "0.0.0"
1930 | url "^0.11.0"
1931 | util "^0.10.3"
1932 | vm-browserify "0.0.4"
1933 |
1934 | node-pre-gyp@^0.6.39:
1935 | version "0.6.39"
1936 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
1937 | dependencies:
1938 | detect-libc "^1.0.2"
1939 | hawk "3.1.3"
1940 | mkdirp "^0.5.1"
1941 | nopt "^4.0.1"
1942 | npmlog "^4.0.2"
1943 | rc "^1.1.7"
1944 | request "2.81.0"
1945 | rimraf "^2.6.1"
1946 | semver "^5.3.0"
1947 | tar "^2.2.1"
1948 | tar-pack "^3.4.0"
1949 |
1950 | nopt@^4.0.1:
1951 | version "4.0.1"
1952 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
1953 | dependencies:
1954 | abbrev "1"
1955 | osenv "^0.1.4"
1956 |
1957 | normalize-path@^2.0.0, normalize-path@^2.0.1:
1958 | version "2.1.1"
1959 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
1960 | dependencies:
1961 | remove-trailing-separator "^1.0.1"
1962 |
1963 | normalize-range@^0.1.2:
1964 | version "0.1.2"
1965 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
1966 |
1967 | normalize-url@^1.4.0:
1968 | version "1.9.1"
1969 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
1970 | dependencies:
1971 | object-assign "^4.0.1"
1972 | prepend-http "^1.0.0"
1973 | query-string "^4.1.0"
1974 | sort-keys "^1.0.0"
1975 |
1976 | now@^9.1.0:
1977 | version "9.1.0"
1978 | resolved "https://registry.yarnpkg.com/now/-/now-9.1.0.tgz#b13feae859311fd3d4d0f084e02a1a67680c7116"
1979 |
1980 | npmlog@^4.0.2:
1981 | version "4.1.2"
1982 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1983 | dependencies:
1984 | are-we-there-yet "~1.1.2"
1985 | console-control-strings "~1.1.0"
1986 | gauge "~2.7.3"
1987 | set-blocking "~2.0.0"
1988 |
1989 | num2fraction@^1.2.2:
1990 | version "1.2.2"
1991 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
1992 |
1993 | number-is-nan@^1.0.0:
1994 | version "1.0.1"
1995 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1996 |
1997 | oauth-sign@~0.8.1:
1998 | version "0.8.2"
1999 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
2000 |
2001 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
2002 | version "4.1.1"
2003 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
2004 |
2005 | object-copy@^0.1.0:
2006 | version "0.1.0"
2007 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
2008 | dependencies:
2009 | copy-descriptor "^0.1.0"
2010 | define-property "^0.2.5"
2011 | kind-of "^3.0.3"
2012 |
2013 | object-visit@^1.0.0:
2014 | version "1.0.1"
2015 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
2016 | dependencies:
2017 | isobject "^3.0.0"
2018 |
2019 | object.omit@^2.0.0:
2020 | version "2.0.1"
2021 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
2022 | dependencies:
2023 | for-own "^0.1.4"
2024 | is-extendable "^0.1.1"
2025 |
2026 | object.pick@^1.3.0:
2027 | version "1.3.0"
2028 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
2029 | dependencies:
2030 | isobject "^3.0.1"
2031 |
2032 | on-finished@~2.3.0:
2033 | version "2.3.0"
2034 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
2035 | dependencies:
2036 | ee-first "1.1.1"
2037 |
2038 | once@^1.3.0, once@^1.3.3:
2039 | version "1.4.0"
2040 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
2041 | dependencies:
2042 | wrappy "1"
2043 |
2044 | opn@^5.1.0:
2045 | version "5.2.0"
2046 | resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
2047 | dependencies:
2048 | is-wsl "^1.1.0"
2049 |
2050 | os-browserify@^0.3.0:
2051 | version "0.3.0"
2052 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
2053 |
2054 | os-homedir@^1.0.0:
2055 | version "1.0.2"
2056 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
2057 |
2058 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
2059 | version "1.0.2"
2060 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
2061 |
2062 | osenv@^0.1.4:
2063 | version "0.1.4"
2064 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
2065 | dependencies:
2066 | os-homedir "^1.0.0"
2067 | os-tmpdir "^1.0.0"
2068 |
2069 | pako@~1.0.5:
2070 | version "1.0.6"
2071 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
2072 |
2073 | parcel-bundler@^1.4.1:
2074 | version "1.4.1"
2075 | resolved "https://registry.yarnpkg.com/parcel-bundler/-/parcel-bundler-1.4.1.tgz#9f86d9d113d5fdf130dd414508c7a75293be0c61"
2076 | dependencies:
2077 | babel-core "^6.25.0"
2078 | babel-generator "^6.25.0"
2079 | babel-plugin-transform-es2015-modules-commonjs "^6.26.0"
2080 | babylon "^6.17.4"
2081 | babylon-walk "^1.0.2"
2082 | browser-resolve "^1.11.2"
2083 | chalk "^2.1.0"
2084 | chokidar "^1.7.0"
2085 | commander "^2.11.0"
2086 | cross-spawn "^5.1.0"
2087 | cssnano "^3.10.0"
2088 | get-port "^3.2.0"
2089 | glob "^7.1.2"
2090 | htmlnano "^0.1.6"
2091 | is-url "^1.2.2"
2092 | js-yaml "^3.10.0"
2093 | json5 "^0.5.1"
2094 | micromatch "^3.0.4"
2095 | mkdirp "^0.5.1"
2096 | node-forge "^0.7.1"
2097 | node-libs-browser "^2.0.0"
2098 | opn "^5.1.0"
2099 | physical-cpu-count "^2.0.0"
2100 | postcss "^6.0.10"
2101 | postcss-value-parser "^3.3.0"
2102 | posthtml "^0.10.1"
2103 | resolve "^1.4.0"
2104 | sanitize-filename "^1.6.1"
2105 | serve-static "^1.12.4"
2106 | uglify-es "^3.2.1"
2107 | v8-compile-cache "^1.1.0"
2108 | worker-farm "^1.4.1"
2109 | ws "^3.3.3"
2110 |
2111 | parse-asn1@^5.0.0:
2112 | version "5.1.0"
2113 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
2114 | dependencies:
2115 | asn1.js "^4.0.0"
2116 | browserify-aes "^1.0.0"
2117 | create-hash "^1.1.0"
2118 | evp_bytestokey "^1.0.0"
2119 | pbkdf2 "^3.0.3"
2120 |
2121 | parse-glob@^3.0.4:
2122 | version "3.0.4"
2123 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
2124 | dependencies:
2125 | glob-base "^0.3.0"
2126 | is-dotfile "^1.0.0"
2127 | is-extglob "^1.0.0"
2128 | is-glob "^2.0.0"
2129 |
2130 | parseurl@~1.3.2:
2131 | version "1.3.2"
2132 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
2133 |
2134 | pascalcase@^0.1.1:
2135 | version "0.1.1"
2136 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
2137 |
2138 | path-browserify@0.0.0:
2139 | version "0.0.0"
2140 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
2141 |
2142 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
2143 | version "1.0.1"
2144 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
2145 |
2146 | path-parse@^1.0.5:
2147 | version "1.0.5"
2148 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
2149 |
2150 | pbkdf2@^3.0.3:
2151 | version "3.0.14"
2152 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
2153 | dependencies:
2154 | create-hash "^1.1.2"
2155 | create-hmac "^1.1.4"
2156 | ripemd160 "^2.0.1"
2157 | safe-buffer "^5.0.1"
2158 | sha.js "^2.4.8"
2159 |
2160 | performance-now@^0.2.0:
2161 | version "0.2.0"
2162 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
2163 |
2164 | physical-cpu-count@^2.0.0:
2165 | version "2.0.0"
2166 | resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660"
2167 |
2168 | posix-character-classes@^0.1.0:
2169 | version "0.1.1"
2170 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
2171 |
2172 | postcss-calc@^5.2.0:
2173 | version "5.3.1"
2174 | resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
2175 | dependencies:
2176 | postcss "^5.0.2"
2177 | postcss-message-helpers "^2.0.0"
2178 | reduce-css-calc "^1.2.6"
2179 |
2180 | postcss-colormin@^2.1.8:
2181 | version "2.2.2"
2182 | resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
2183 | dependencies:
2184 | colormin "^1.0.5"
2185 | postcss "^5.0.13"
2186 | postcss-value-parser "^3.2.3"
2187 |
2188 | postcss-convert-values@^2.3.4:
2189 | version "2.6.1"
2190 | resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
2191 | dependencies:
2192 | postcss "^5.0.11"
2193 | postcss-value-parser "^3.1.2"
2194 |
2195 | postcss-discard-comments@^2.0.4:
2196 | version "2.0.4"
2197 | resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
2198 | dependencies:
2199 | postcss "^5.0.14"
2200 |
2201 | postcss-discard-duplicates@^2.0.1:
2202 | version "2.1.0"
2203 | resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
2204 | dependencies:
2205 | postcss "^5.0.4"
2206 |
2207 | postcss-discard-empty@^2.0.1:
2208 | version "2.1.0"
2209 | resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
2210 | dependencies:
2211 | postcss "^5.0.14"
2212 |
2213 | postcss-discard-overridden@^0.1.1:
2214 | version "0.1.1"
2215 | resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
2216 | dependencies:
2217 | postcss "^5.0.16"
2218 |
2219 | postcss-discard-unused@^2.2.1:
2220 | version "2.2.3"
2221 | resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
2222 | dependencies:
2223 | postcss "^5.0.14"
2224 | uniqs "^2.0.0"
2225 |
2226 | postcss-filter-plugins@^2.0.0:
2227 | version "2.0.2"
2228 | resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
2229 | dependencies:
2230 | postcss "^5.0.4"
2231 | uniqid "^4.0.0"
2232 |
2233 | postcss-merge-idents@^2.1.5:
2234 | version "2.1.7"
2235 | resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
2236 | dependencies:
2237 | has "^1.0.1"
2238 | postcss "^5.0.10"
2239 | postcss-value-parser "^3.1.1"
2240 |
2241 | postcss-merge-longhand@^2.0.1:
2242 | version "2.0.2"
2243 | resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
2244 | dependencies:
2245 | postcss "^5.0.4"
2246 |
2247 | postcss-merge-rules@^2.0.3:
2248 | version "2.1.2"
2249 | resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
2250 | dependencies:
2251 | browserslist "^1.5.2"
2252 | caniuse-api "^1.5.2"
2253 | postcss "^5.0.4"
2254 | postcss-selector-parser "^2.2.2"
2255 | vendors "^1.0.0"
2256 |
2257 | postcss-message-helpers@^2.0.0:
2258 | version "2.0.0"
2259 | resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
2260 |
2261 | postcss-minify-font-values@^1.0.2:
2262 | version "1.0.5"
2263 | resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
2264 | dependencies:
2265 | object-assign "^4.0.1"
2266 | postcss "^5.0.4"
2267 | postcss-value-parser "^3.0.2"
2268 |
2269 | postcss-minify-gradients@^1.0.1:
2270 | version "1.0.5"
2271 | resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
2272 | dependencies:
2273 | postcss "^5.0.12"
2274 | postcss-value-parser "^3.3.0"
2275 |
2276 | postcss-minify-params@^1.0.4:
2277 | version "1.2.2"
2278 | resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
2279 | dependencies:
2280 | alphanum-sort "^1.0.1"
2281 | postcss "^5.0.2"
2282 | postcss-value-parser "^3.0.2"
2283 | uniqs "^2.0.0"
2284 |
2285 | postcss-minify-selectors@^2.0.4:
2286 | version "2.1.1"
2287 | resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
2288 | dependencies:
2289 | alphanum-sort "^1.0.2"
2290 | has "^1.0.1"
2291 | postcss "^5.0.14"
2292 | postcss-selector-parser "^2.0.0"
2293 |
2294 | postcss-normalize-charset@^1.1.0:
2295 | version "1.1.1"
2296 | resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
2297 | dependencies:
2298 | postcss "^5.0.5"
2299 |
2300 | postcss-normalize-url@^3.0.7:
2301 | version "3.0.8"
2302 | resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
2303 | dependencies:
2304 | is-absolute-url "^2.0.0"
2305 | normalize-url "^1.4.0"
2306 | postcss "^5.0.14"
2307 | postcss-value-parser "^3.2.3"
2308 |
2309 | postcss-ordered-values@^2.1.0:
2310 | version "2.2.3"
2311 | resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
2312 | dependencies:
2313 | postcss "^5.0.4"
2314 | postcss-value-parser "^3.0.1"
2315 |
2316 | postcss-reduce-idents@^2.2.2:
2317 | version "2.4.0"
2318 | resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
2319 | dependencies:
2320 | postcss "^5.0.4"
2321 | postcss-value-parser "^3.0.2"
2322 |
2323 | postcss-reduce-initial@^1.0.0:
2324 | version "1.0.1"
2325 | resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
2326 | dependencies:
2327 | postcss "^5.0.4"
2328 |
2329 | postcss-reduce-transforms@^1.0.3:
2330 | version "1.0.4"
2331 | resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
2332 | dependencies:
2333 | has "^1.0.1"
2334 | postcss "^5.0.8"
2335 | postcss-value-parser "^3.0.1"
2336 |
2337 | postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
2338 | version "2.2.3"
2339 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
2340 | dependencies:
2341 | flatten "^1.0.2"
2342 | indexes-of "^1.0.1"
2343 | uniq "^1.0.1"
2344 |
2345 | postcss-svgo@^2.1.1:
2346 | version "2.1.6"
2347 | resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
2348 | dependencies:
2349 | is-svg "^2.0.0"
2350 | postcss "^5.0.14"
2351 | postcss-value-parser "^3.2.3"
2352 | svgo "^0.7.0"
2353 |
2354 | postcss-unique-selectors@^2.0.2:
2355 | version "2.0.2"
2356 | resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
2357 | dependencies:
2358 | alphanum-sort "^1.0.1"
2359 | postcss "^5.0.4"
2360 | uniqs "^2.0.0"
2361 |
2362 | postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
2363 | version "3.3.0"
2364 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
2365 |
2366 | postcss-zindex@^2.0.1:
2367 | version "2.2.0"
2368 | resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
2369 | dependencies:
2370 | has "^1.0.1"
2371 | postcss "^5.0.4"
2372 | uniqs "^2.0.0"
2373 |
2374 | postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
2375 | version "5.2.18"
2376 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
2377 | dependencies:
2378 | chalk "^1.1.3"
2379 | js-base64 "^2.1.9"
2380 | source-map "^0.5.6"
2381 | supports-color "^3.2.3"
2382 |
2383 | postcss@^6.0.10:
2384 | version "6.0.16"
2385 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.16.tgz#112e2fe2a6d2109be0957687243170ea5589e146"
2386 | dependencies:
2387 | chalk "^2.3.0"
2388 | source-map "^0.6.1"
2389 | supports-color "^5.1.0"
2390 |
2391 | posthtml-parser@^0.1.3:
2392 | version "0.1.3"
2393 | resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.1.3.tgz#43251f575ba34e361032f79a11e0fc93ab232b24"
2394 | dependencies:
2395 | htmlparser2 "^3.8.3"
2396 |
2397 | posthtml-parser@^0.3.0:
2398 | version "0.3.1"
2399 | resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.3.1.tgz#c8a3cfb126313fe733fe239430e9318d538c22f8"
2400 | dependencies:
2401 | htmlparser2 "^3.9.2"
2402 | isobject "^2.1.0"
2403 | object-assign "^4.1.1"
2404 |
2405 | posthtml-render@^1.0.5, posthtml-render@^1.0.6:
2406 | version "1.0.6"
2407 | resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.0.6.tgz#1b88b8e7860a8ebdfe2f2a1310a4642a55cf5bda"
2408 |
2409 | posthtml@^0.10.1:
2410 | version "0.10.1"
2411 | resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.10.1.tgz#029caa80591d2788ac1903dcf92352f46cec3cb5"
2412 | dependencies:
2413 | posthtml-parser "^0.3.0"
2414 | posthtml-render "^1.0.5"
2415 |
2416 | posthtml@^0.8.7:
2417 | version "0.8.7"
2418 | resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.8.7.tgz#aba6124c6cf87b4ceea6bab5f7e50268f2c2006d"
2419 | dependencies:
2420 | posthtml-parser "^0.1.3"
2421 | posthtml-render "^1.0.5"
2422 |
2423 | prepend-http@^1.0.0:
2424 | version "1.0.4"
2425 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
2426 |
2427 | preserve@^0.2.0:
2428 | version "0.2.0"
2429 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
2430 |
2431 | private@^0.1.7:
2432 | version "0.1.8"
2433 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
2434 |
2435 | process-nextick-args@~1.0.6:
2436 | version "1.0.7"
2437 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
2438 |
2439 | process@^0.11.10:
2440 | version "0.11.10"
2441 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
2442 |
2443 | promise@^7.1.1:
2444 | version "7.3.1"
2445 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
2446 | dependencies:
2447 | asap "~2.0.3"
2448 |
2449 | prop-types@^15.6.0:
2450 | version "15.6.0"
2451 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
2452 | dependencies:
2453 | fbjs "^0.8.16"
2454 | loose-envify "^1.3.1"
2455 | object-assign "^4.1.1"
2456 |
2457 | prr@~1.0.1:
2458 | version "1.0.1"
2459 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
2460 |
2461 | pseudomap@^1.0.2:
2462 | version "1.0.2"
2463 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
2464 |
2465 | public-encrypt@^4.0.0:
2466 | version "4.0.0"
2467 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
2468 | dependencies:
2469 | bn.js "^4.1.0"
2470 | browserify-rsa "^4.0.0"
2471 | create-hash "^1.1.0"
2472 | parse-asn1 "^5.0.0"
2473 | randombytes "^2.0.1"
2474 |
2475 | punycode@1.3.2:
2476 | version "1.3.2"
2477 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
2478 |
2479 | punycode@^1.2.4, punycode@^1.4.1:
2480 | version "1.4.1"
2481 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
2482 |
2483 | q@^1.1.2:
2484 | version "1.5.1"
2485 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
2486 |
2487 | qs@~6.4.0:
2488 | version "6.4.0"
2489 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
2490 |
2491 | query-string@^4.1.0:
2492 | version "4.3.4"
2493 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
2494 | dependencies:
2495 | object-assign "^4.1.0"
2496 | strict-uri-encode "^1.0.0"
2497 |
2498 | querystring-es3@^0.2.0:
2499 | version "0.2.1"
2500 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
2501 |
2502 | querystring@0.2.0:
2503 | version "0.2.0"
2504 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
2505 |
2506 | randomatic@^1.1.3:
2507 | version "1.1.7"
2508 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
2509 | dependencies:
2510 | is-number "^3.0.0"
2511 | kind-of "^4.0.0"
2512 |
2513 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
2514 | version "2.0.6"
2515 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
2516 | dependencies:
2517 | safe-buffer "^5.1.0"
2518 |
2519 | randomfill@^1.0.3:
2520 | version "1.0.3"
2521 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
2522 | dependencies:
2523 | randombytes "^2.0.5"
2524 | safe-buffer "^5.1.0"
2525 |
2526 | range-parser@~1.2.0:
2527 | version "1.2.0"
2528 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
2529 |
2530 | rc@^1.1.7:
2531 | version "1.2.3"
2532 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b"
2533 | dependencies:
2534 | deep-extend "~0.4.0"
2535 | ini "~1.3.0"
2536 | minimist "^1.2.0"
2537 | strip-json-comments "~2.0.1"
2538 |
2539 | react-dom@^16.2.0:
2540 | version "16.2.0"
2541 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
2542 | dependencies:
2543 | fbjs "^0.8.16"
2544 | loose-envify "^1.1.0"
2545 | object-assign "^4.1.1"
2546 | prop-types "^15.6.0"
2547 |
2548 | react@^16.2.0:
2549 | version "16.2.0"
2550 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
2551 | dependencies:
2552 | fbjs "^0.8.16"
2553 | loose-envify "^1.1.0"
2554 | object-assign "^4.1.1"
2555 | prop-types "^15.6.0"
2556 |
2557 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.3.3:
2558 | version "2.3.3"
2559 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
2560 | dependencies:
2561 | core-util-is "~1.0.0"
2562 | inherits "~2.0.3"
2563 | isarray "~1.0.0"
2564 | process-nextick-args "~1.0.6"
2565 | safe-buffer "~5.1.1"
2566 | string_decoder "~1.0.3"
2567 | util-deprecate "~1.0.1"
2568 |
2569 | readdirp@^2.0.0:
2570 | version "2.1.0"
2571 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
2572 | dependencies:
2573 | graceful-fs "^4.1.2"
2574 | minimatch "^3.0.2"
2575 | readable-stream "^2.0.2"
2576 | set-immediate-shim "^1.0.1"
2577 |
2578 | reduce-css-calc@^1.2.6:
2579 | version "1.3.0"
2580 | resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
2581 | dependencies:
2582 | balanced-match "^0.4.2"
2583 | math-expression-evaluator "^1.2.14"
2584 | reduce-function-call "^1.0.1"
2585 |
2586 | reduce-function-call@^1.0.1:
2587 | version "1.0.2"
2588 | resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
2589 | dependencies:
2590 | balanced-match "^0.4.2"
2591 |
2592 | regenerator-runtime@^0.11.0:
2593 | version "0.11.1"
2594 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
2595 |
2596 | regex-cache@^0.4.2:
2597 | version "0.4.4"
2598 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
2599 | dependencies:
2600 | is-equal-shallow "^0.1.3"
2601 |
2602 | regex-not@^1.0.0:
2603 | version "1.0.0"
2604 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9"
2605 | dependencies:
2606 | extend-shallow "^2.0.1"
2607 |
2608 | remove-trailing-separator@^1.0.1:
2609 | version "1.1.0"
2610 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
2611 |
2612 | repeat-element@^1.1.2:
2613 | version "1.1.2"
2614 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
2615 |
2616 | repeat-string@^1.5.2, repeat-string@^1.6.1:
2617 | version "1.6.1"
2618 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
2619 |
2620 | repeating@^2.0.0:
2621 | version "2.0.1"
2622 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
2623 | dependencies:
2624 | is-finite "^1.0.0"
2625 |
2626 | request@2.81.0:
2627 | version "2.81.0"
2628 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
2629 | dependencies:
2630 | aws-sign2 "~0.6.0"
2631 | aws4 "^1.2.1"
2632 | caseless "~0.12.0"
2633 | combined-stream "~1.0.5"
2634 | extend "~3.0.0"
2635 | forever-agent "~0.6.1"
2636 | form-data "~2.1.1"
2637 | har-validator "~4.2.1"
2638 | hawk "~3.1.3"
2639 | http-signature "~1.1.0"
2640 | is-typedarray "~1.0.0"
2641 | isstream "~0.1.2"
2642 | json-stringify-safe "~5.0.1"
2643 | mime-types "~2.1.7"
2644 | oauth-sign "~0.8.1"
2645 | performance-now "^0.2.0"
2646 | qs "~6.4.0"
2647 | safe-buffer "^5.0.1"
2648 | stringstream "~0.0.4"
2649 | tough-cookie "~2.3.0"
2650 | tunnel-agent "^0.6.0"
2651 | uuid "^3.0.0"
2652 |
2653 | resolve-url@^0.2.1:
2654 | version "0.2.1"
2655 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
2656 |
2657 | resolve@1.1.7:
2658 | version "1.1.7"
2659 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
2660 |
2661 | resolve@^1.3.2, resolve@^1.4.0:
2662 | version "1.5.0"
2663 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
2664 | dependencies:
2665 | path-parse "^1.0.5"
2666 |
2667 | right-align@^0.1.1:
2668 | version "0.1.3"
2669 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
2670 | dependencies:
2671 | align-text "^0.1.1"
2672 |
2673 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
2674 | version "2.6.2"
2675 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
2676 | dependencies:
2677 | glob "^7.0.5"
2678 |
2679 | ripemd160@^2.0.0, ripemd160@^2.0.1:
2680 | version "2.0.1"
2681 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
2682 | dependencies:
2683 | hash-base "^2.0.0"
2684 | inherits "^2.0.1"
2685 |
2686 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
2687 | version "5.1.1"
2688 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
2689 |
2690 | sanitize-filename@^1.6.1:
2691 | version "1.6.1"
2692 | resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a"
2693 | dependencies:
2694 | truncate-utf8-bytes "^1.0.0"
2695 |
2696 | sax@~1.2.1:
2697 | version "1.2.4"
2698 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
2699 |
2700 | semver@^5.3.0:
2701 | version "5.4.1"
2702 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
2703 |
2704 | send@0.16.1:
2705 | version "0.16.1"
2706 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
2707 | dependencies:
2708 | debug "2.6.9"
2709 | depd "~1.1.1"
2710 | destroy "~1.0.4"
2711 | encodeurl "~1.0.1"
2712 | escape-html "~1.0.3"
2713 | etag "~1.8.1"
2714 | fresh "0.5.2"
2715 | http-errors "~1.6.2"
2716 | mime "1.4.1"
2717 | ms "2.0.0"
2718 | on-finished "~2.3.0"
2719 | range-parser "~1.2.0"
2720 | statuses "~1.3.1"
2721 |
2722 | serve-static@^1.12.4:
2723 | version "1.13.1"
2724 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
2725 | dependencies:
2726 | encodeurl "~1.0.1"
2727 | escape-html "~1.0.3"
2728 | parseurl "~1.3.2"
2729 | send "0.16.1"
2730 |
2731 | set-blocking@~2.0.0:
2732 | version "2.0.0"
2733 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2734 |
2735 | set-getter@^0.1.0:
2736 | version "0.1.0"
2737 | resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376"
2738 | dependencies:
2739 | to-object-path "^0.3.0"
2740 |
2741 | set-immediate-shim@^1.0.1:
2742 | version "1.0.1"
2743 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
2744 |
2745 | set-value@^0.4.3:
2746 | version "0.4.3"
2747 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
2748 | dependencies:
2749 | extend-shallow "^2.0.1"
2750 | is-extendable "^0.1.1"
2751 | is-plain-object "^2.0.1"
2752 | to-object-path "^0.3.0"
2753 |
2754 | set-value@^2.0.0:
2755 | version "2.0.0"
2756 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
2757 | dependencies:
2758 | extend-shallow "^2.0.1"
2759 | is-extendable "^0.1.1"
2760 | is-plain-object "^2.0.3"
2761 | split-string "^3.0.1"
2762 |
2763 | setimmediate@^1.0.4, setimmediate@^1.0.5:
2764 | version "1.0.5"
2765 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
2766 |
2767 | setprototypeof@1.0.3:
2768 | version "1.0.3"
2769 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
2770 |
2771 | sha.js@^2.4.0, sha.js@^2.4.8:
2772 | version "2.4.9"
2773 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d"
2774 | dependencies:
2775 | inherits "^2.0.1"
2776 | safe-buffer "^5.0.1"
2777 |
2778 | shebang-command@^1.2.0:
2779 | version "1.2.0"
2780 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
2781 | dependencies:
2782 | shebang-regex "^1.0.0"
2783 |
2784 | shebang-regex@^1.0.0:
2785 | version "1.0.0"
2786 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
2787 |
2788 | signal-exit@^3.0.0:
2789 | version "3.0.2"
2790 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
2791 |
2792 | slash@^1.0.0:
2793 | version "1.0.0"
2794 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
2795 |
2796 | snapdragon-node@^2.0.1:
2797 | version "2.1.1"
2798 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
2799 | dependencies:
2800 | define-property "^1.0.0"
2801 | isobject "^3.0.0"
2802 | snapdragon-util "^3.0.1"
2803 |
2804 | snapdragon-util@^3.0.1:
2805 | version "3.0.1"
2806 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
2807 | dependencies:
2808 | kind-of "^3.2.0"
2809 |
2810 | snapdragon@^0.8.1:
2811 | version "0.8.1"
2812 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370"
2813 | dependencies:
2814 | base "^0.11.1"
2815 | debug "^2.2.0"
2816 | define-property "^0.2.5"
2817 | extend-shallow "^2.0.1"
2818 | map-cache "^0.2.2"
2819 | source-map "^0.5.6"
2820 | source-map-resolve "^0.5.0"
2821 | use "^2.0.0"
2822 |
2823 | sntp@1.x.x:
2824 | version "1.0.9"
2825 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
2826 | dependencies:
2827 | hoek "2.x.x"
2828 |
2829 | sort-keys@^1.0.0:
2830 | version "1.1.2"
2831 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
2832 | dependencies:
2833 | is-plain-obj "^1.0.0"
2834 |
2835 | source-map-resolve@^0.5.0:
2836 | version "0.5.1"
2837 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
2838 | dependencies:
2839 | atob "^2.0.0"
2840 | decode-uri-component "^0.2.0"
2841 | resolve-url "^0.2.1"
2842 | source-map-url "^0.4.0"
2843 | urix "^0.1.0"
2844 |
2845 | source-map-support@^0.4.15:
2846 | version "0.4.18"
2847 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
2848 | dependencies:
2849 | source-map "^0.5.6"
2850 |
2851 | source-map-url@^0.4.0:
2852 | version "0.4.0"
2853 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
2854 |
2855 | source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
2856 | version "0.5.7"
2857 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2858 |
2859 | source-map@^0.6.1, source-map@~0.6.1:
2860 | version "0.6.1"
2861 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
2862 |
2863 | split-string@^3.0.1, split-string@^3.0.2:
2864 | version "3.1.0"
2865 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
2866 | dependencies:
2867 | extend-shallow "^3.0.0"
2868 |
2869 | sprintf-js@~1.0.2:
2870 | version "1.0.3"
2871 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2872 |
2873 | sshpk@^1.7.0:
2874 | version "1.13.1"
2875 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
2876 | dependencies:
2877 | asn1 "~0.2.3"
2878 | assert-plus "^1.0.0"
2879 | dashdash "^1.12.0"
2880 | getpass "^0.1.1"
2881 | optionalDependencies:
2882 | bcrypt-pbkdf "^1.0.0"
2883 | ecc-jsbn "~0.1.1"
2884 | jsbn "~0.1.0"
2885 | tweetnacl "~0.14.0"
2886 |
2887 | static-extend@^0.1.1:
2888 | version "0.1.2"
2889 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
2890 | dependencies:
2891 | define-property "^0.2.5"
2892 | object-copy "^0.1.0"
2893 |
2894 | "statuses@>= 1.3.1 < 2":
2895 | version "1.4.0"
2896 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
2897 |
2898 | statuses@~1.3.1:
2899 | version "1.3.1"
2900 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
2901 |
2902 | stream-browserify@^2.0.1:
2903 | version "2.0.1"
2904 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
2905 | dependencies:
2906 | inherits "~2.0.1"
2907 | readable-stream "^2.0.2"
2908 |
2909 | stream-http@^2.7.2:
2910 | version "2.8.0"
2911 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
2912 | dependencies:
2913 | builtin-status-codes "^3.0.0"
2914 | inherits "^2.0.1"
2915 | readable-stream "^2.3.3"
2916 | to-arraybuffer "^1.0.0"
2917 | xtend "^4.0.0"
2918 |
2919 | strict-uri-encode@^1.0.0:
2920 | version "1.1.0"
2921 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
2922 |
2923 | string-width@^1.0.1, string-width@^1.0.2:
2924 | version "1.0.2"
2925 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
2926 | dependencies:
2927 | code-point-at "^1.0.0"
2928 | is-fullwidth-code-point "^1.0.0"
2929 | strip-ansi "^3.0.0"
2930 |
2931 | string_decoder@^1.0.0, string_decoder@~1.0.3:
2932 | version "1.0.3"
2933 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
2934 | dependencies:
2935 | safe-buffer "~5.1.0"
2936 |
2937 | stringstream@~0.0.4:
2938 | version "0.0.5"
2939 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
2940 |
2941 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2942 | version "3.0.1"
2943 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2944 | dependencies:
2945 | ansi-regex "^2.0.0"
2946 |
2947 | strip-json-comments@~2.0.1:
2948 | version "2.0.1"
2949 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2950 |
2951 | supports-color@^2.0.0:
2952 | version "2.0.0"
2953 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
2954 |
2955 | supports-color@^3.2.3:
2956 | version "3.2.3"
2957 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
2958 | dependencies:
2959 | has-flag "^1.0.0"
2960 |
2961 | supports-color@^4.0.0:
2962 | version "4.5.0"
2963 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
2964 | dependencies:
2965 | has-flag "^2.0.0"
2966 |
2967 | supports-color@^5.1.0:
2968 | version "5.1.0"
2969 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
2970 | dependencies:
2971 | has-flag "^2.0.0"
2972 |
2973 | svgo@^0.7.0, svgo@^0.7.2:
2974 | version "0.7.2"
2975 | resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
2976 | dependencies:
2977 | coa "~1.0.1"
2978 | colors "~1.1.2"
2979 | csso "~2.3.1"
2980 | js-yaml "~3.7.0"
2981 | mkdirp "~0.5.1"
2982 | sax "~1.2.1"
2983 | whet.extend "~0.9.9"
2984 |
2985 | tar-pack@^3.4.0:
2986 | version "3.4.1"
2987 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
2988 | dependencies:
2989 | debug "^2.2.0"
2990 | fstream "^1.0.10"
2991 | fstream-ignore "^1.0.5"
2992 | once "^1.3.3"
2993 | readable-stream "^2.1.4"
2994 | rimraf "^2.5.1"
2995 | tar "^2.2.1"
2996 | uid-number "^0.0.6"
2997 |
2998 | tar@^2.2.1:
2999 | version "2.2.1"
3000 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
3001 | dependencies:
3002 | block-stream "*"
3003 | fstream "^1.0.2"
3004 | inherits "2"
3005 |
3006 | timers-browserify@^2.0.4:
3007 | version "2.0.4"
3008 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
3009 | dependencies:
3010 | setimmediate "^1.0.4"
3011 |
3012 | to-arraybuffer@^1.0.0:
3013 | version "1.0.1"
3014 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
3015 |
3016 | to-fast-properties@^1.0.3:
3017 | version "1.0.3"
3018 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
3019 |
3020 | to-object-path@^0.3.0:
3021 | version "0.3.0"
3022 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
3023 | dependencies:
3024 | kind-of "^3.0.2"
3025 |
3026 | to-regex-range@^2.1.0:
3027 | version "2.1.1"
3028 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
3029 | dependencies:
3030 | is-number "^3.0.0"
3031 | repeat-string "^1.6.1"
3032 |
3033 | to-regex@^3.0.1:
3034 | version "3.0.1"
3035 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae"
3036 | dependencies:
3037 | define-property "^0.2.5"
3038 | extend-shallow "^2.0.1"
3039 | regex-not "^1.0.0"
3040 |
3041 | tough-cookie@~2.3.0:
3042 | version "2.3.3"
3043 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
3044 | dependencies:
3045 | punycode "^1.4.1"
3046 |
3047 | trim-right@^1.0.1:
3048 | version "1.0.1"
3049 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
3050 |
3051 | truncate-utf8-bytes@^1.0.0:
3052 | version "1.0.2"
3053 | resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
3054 | dependencies:
3055 | utf8-byte-length "^1.0.1"
3056 |
3057 | tslib@^1.8.0, tslib@^1.8.1:
3058 | version "1.8.1"
3059 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac"
3060 |
3061 | tslint@^5.9.1:
3062 | version "5.9.1"
3063 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae"
3064 | dependencies:
3065 | babel-code-frame "^6.22.0"
3066 | builtin-modules "^1.1.1"
3067 | chalk "^2.3.0"
3068 | commander "^2.12.1"
3069 | diff "^3.2.0"
3070 | glob "^7.1.1"
3071 | js-yaml "^3.7.0"
3072 | minimatch "^3.0.4"
3073 | resolve "^1.3.2"
3074 | semver "^5.3.0"
3075 | tslib "^1.8.0"
3076 | tsutils "^2.12.1"
3077 |
3078 | tsutils@^2.12.1:
3079 | version "2.18.0"
3080 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.18.0.tgz#f97385709d348169002c12f6f5fd42c1df13b250"
3081 | dependencies:
3082 | tslib "^1.8.1"
3083 |
3084 | tty-browserify@0.0.0:
3085 | version "0.0.0"
3086 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
3087 |
3088 | tunnel-agent@^0.6.0:
3089 | version "0.6.0"
3090 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
3091 | dependencies:
3092 | safe-buffer "^5.0.1"
3093 |
3094 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
3095 | version "0.14.5"
3096 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
3097 |
3098 | typescript@^2.6.2:
3099 | version "2.6.2"
3100 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4"
3101 |
3102 | ua-parser-js@^0.7.9:
3103 | version "0.7.17"
3104 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
3105 |
3106 | uglify-es@^3.2.1:
3107 | version "3.3.7"
3108 | resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.7.tgz#d1249af668666aba7cb1163e277455be9eb393cf"
3109 | dependencies:
3110 | commander "~2.13.0"
3111 | source-map "~0.6.1"
3112 |
3113 | uglify-js@^2.8.29:
3114 | version "2.8.29"
3115 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
3116 | dependencies:
3117 | source-map "~0.5.1"
3118 | yargs "~3.10.0"
3119 | optionalDependencies:
3120 | uglify-to-browserify "~1.0.0"
3121 |
3122 | uglify-to-browserify@~1.0.0:
3123 | version "1.0.2"
3124 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
3125 |
3126 | uid-number@^0.0.6:
3127 | version "0.0.6"
3128 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
3129 |
3130 | ultron@~1.1.0:
3131 | version "1.1.1"
3132 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
3133 |
3134 | union-value@^1.0.0:
3135 | version "1.0.0"
3136 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
3137 | dependencies:
3138 | arr-union "^3.1.0"
3139 | get-value "^2.0.6"
3140 | is-extendable "^0.1.1"
3141 | set-value "^0.4.3"
3142 |
3143 | uniq@^1.0.1:
3144 | version "1.0.1"
3145 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
3146 |
3147 | uniqid@^4.0.0:
3148 | version "4.1.1"
3149 | resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
3150 | dependencies:
3151 | macaddress "^0.2.8"
3152 |
3153 | uniqs@^2.0.0:
3154 | version "2.0.0"
3155 | resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
3156 |
3157 | unset-value@^1.0.0:
3158 | version "1.0.0"
3159 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
3160 | dependencies:
3161 | has-value "^0.3.1"
3162 | isobject "^3.0.0"
3163 |
3164 | urix@^0.1.0:
3165 | version "0.1.0"
3166 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
3167 |
3168 | url@^0.11.0:
3169 | version "0.11.0"
3170 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
3171 | dependencies:
3172 | punycode "1.3.2"
3173 | querystring "0.2.0"
3174 |
3175 | use@^2.0.0:
3176 | version "2.0.2"
3177 | resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8"
3178 | dependencies:
3179 | define-property "^0.2.5"
3180 | isobject "^3.0.0"
3181 | lazy-cache "^2.0.2"
3182 |
3183 | utf8-byte-length@^1.0.1:
3184 | version "1.0.4"
3185 | resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
3186 |
3187 | util-deprecate@~1.0.1:
3188 | version "1.0.2"
3189 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
3190 |
3191 | util@0.10.3, util@^0.10.3:
3192 | version "0.10.3"
3193 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
3194 | dependencies:
3195 | inherits "2.0.1"
3196 |
3197 | uuid@^3.0.0:
3198 | version "3.1.0"
3199 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
3200 |
3201 | v8-compile-cache@^1.1.0:
3202 | version "1.1.0"
3203 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.0.tgz#1dc2a340fb8e5f800a32bcdbfb8c23cd747021b9"
3204 |
3205 | vendors@^1.0.0:
3206 | version "1.0.1"
3207 | resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
3208 |
3209 | verror@1.10.0:
3210 | version "1.10.0"
3211 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
3212 | dependencies:
3213 | assert-plus "^1.0.0"
3214 | core-util-is "1.0.2"
3215 | extsprintf "^1.2.0"
3216 |
3217 | vm-browserify@0.0.4:
3218 | version "0.0.4"
3219 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
3220 | dependencies:
3221 | indexof "0.0.1"
3222 |
3223 | whatwg-fetch@>=0.10.0:
3224 | version "2.0.3"
3225 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
3226 |
3227 | whet.extend@~0.9.9:
3228 | version "0.9.9"
3229 | resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
3230 |
3231 | which@^1.2.9:
3232 | version "1.3.0"
3233 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
3234 | dependencies:
3235 | isexe "^2.0.0"
3236 |
3237 | wide-align@^1.1.0:
3238 | version "1.1.2"
3239 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
3240 | dependencies:
3241 | string-width "^1.0.2"
3242 |
3243 | window-size@0.1.0:
3244 | version "0.1.0"
3245 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
3246 |
3247 | "wobble@link:..":
3248 | version "1.4.0"
3249 |
3250 | wordwrap@0.0.2:
3251 | version "0.0.2"
3252 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
3253 |
3254 | worker-farm@^1.4.1:
3255 | version "1.5.2"
3256 | resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
3257 | dependencies:
3258 | errno "^0.1.4"
3259 | xtend "^4.0.1"
3260 |
3261 | wrappy@1:
3262 | version "1.0.2"
3263 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
3264 |
3265 | ws@^3.3.3:
3266 | version "3.3.3"
3267 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
3268 | dependencies:
3269 | async-limiter "~1.0.0"
3270 | safe-buffer "~5.1.0"
3271 | ultron "~1.1.0"
3272 |
3273 | xtend@^4.0.0, xtend@^4.0.1:
3274 | version "4.0.1"
3275 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
3276 |
3277 | yallist@^2.1.2:
3278 | version "2.1.2"
3279 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
3280 |
3281 | yargs@~3.10.0:
3282 | version "3.10.0"
3283 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
3284 | dependencies:
3285 | camelcase "^1.0.2"
3286 | cliui "^2.1.0"
3287 | decamelize "^1.0.0"
3288 | window-size "0.1.0"
3289 |
--------------------------------------------------------------------------------
/jest/rAF.js:
--------------------------------------------------------------------------------
1 | // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
2 | // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
3 |
4 | // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
5 |
6 | // MIT license
7 |
8 | (function() {
9 | var lastTime = 0;
10 | var vendors = ["ms", "moz", "webkit", "o"];
11 | for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
12 | window.requestAnimationFrame = window[vendors[x] + "RequestAnimationFrame"];
13 | window.cancelAnimationFrame =
14 | window[vendors[x] + "CancelAnimationFrame"] ||
15 | window[vendors[x] + "CancelRequestAnimationFrame"];
16 | }
17 |
18 | if (!window.requestAnimationFrame)
19 | window.requestAnimationFrame = function(callback, element) {
20 | var currTime = new Date().getTime();
21 | var timeToCall = Math.max(0, 16 - (currTime - lastTime));
22 | var id = window.setTimeout(function() {
23 | callback(currTime + timeToCall);
24 | }, 1000 / 60);
25 | lastTime = currTime + timeToCall;
26 | return id;
27 | };
28 |
29 | if (!window.cancelAnimationFrame)
30 | window.cancelAnimationFrame = function(id) {
31 | clearTimeout(id);
32 | };
33 |
34 | if (!window.performance)
35 | window.performance = {
36 | now() {
37 | // Using rAF polyfill's `lastTime` to ensure that timestamp passed into
38 | // rAF's callback and `performance.now()` are on the same timescale.
39 | return lastTime;
40 | }
41 | };
42 | })();
43 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "wobble",
3 | "version": "1.5.1",
4 | "description": "Wobble is a tiny spring simulation library based on the equations of motion governing damped harmonic oscillators.",
5 | "repository": "https://github.com/skevy/wobble",
6 | "author": "Adam Miskiewicz ",
7 | "license": "MIT",
8 | "typescript:main": "src/index.ts",
9 | "main": "./dist/module/index.js",
10 | "module": "./dist/wobble.es.js",
11 | "types": "./dist/module/index.d.ts",
12 | "scripts": {
13 | "dev": "concurrently \"yarn watch\" \"cd demos && yarn start\"",
14 | "lint": "tslint -p . --format codeFrame",
15 | "test": "tsc --noEmit && jest --coverage",
16 | "posttest": "codecov -f coverage/*.json",
17 | "clean": "rm -rf ./dist/",
18 | "watch": "concurrently \"tsc -w\" \"yarn dist-es -w\"",
19 | "build": "tsc",
20 | "dist-es": "rollup -c --environment ROLLUP_CONFIG:es",
21 | "dist-cjs": "rollup -c --environment ROLLUP_CONFIG:cjs",
22 | "dist-browser": "rollup -c --environment ROLLUP_CONFIG:browser",
23 | "dist": "yarn run clean && concurrently \"yarn build\" \"yarn dist-es\" \"yarn dist-cjs\" \"yarn dist-browser\"",
24 | "prepublish": "yarn dist",
25 | "precommit": "lint-staged"
26 | },
27 | "files": [
28 | "src",
29 | "dist"
30 | ],
31 | "jest": {
32 | "globals": {
33 | "ts-jest": {
34 | "useBabelrc": true
35 | }
36 | },
37 | "setupFiles": [
38 | "./jest/rAF.js"
39 | ],
40 | "modulePathIgnorePatterns": [
41 | "/build/",
42 | "/dist/"
43 | ],
44 | "transform": {
45 | "^.+\\.tsx?$": "ts-jest"
46 | },
47 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
48 | "moduleFileExtensions": [
49 | "ts",
50 | "tsx",
51 | "js",
52 | "jsx",
53 | "json",
54 | "node"
55 | ],
56 | "mapCoverage": true,
57 | "timers": "fake"
58 | },
59 | "lint-staged": {
60 | "**/*.+(ts|tsx)": [
61 | "tslint --format codeFrame"
62 | ]
63 | },
64 | "jest-junit": {
65 | "outputDirectory": "CIRCLE_TEST_REPORTS/jest/",
66 | "outputName": "./test-results.xml"
67 | },
68 | "devDependencies": {
69 | "@types/jest": "^22.0.1",
70 | "@types/lolex": "^2.1.1",
71 | "codecov": "^3.0.0",
72 | "concurrently": "^3.5.1",
73 | "husky": "^0.14.3",
74 | "jest": "^22.1.1",
75 | "jest-junit": "^5.2.0",
76 | "lint-staged": "^6.0.0",
77 | "lolex": "^2.3.1",
78 | "prettier": "^1.10.2",
79 | "rimraf": "^2.6.2",
80 | "rollup": "^0.54.0",
81 | "rollup-plugin-node-resolve": "^3.0.2",
82 | "rollup-plugin-typescript": "^0.8.1",
83 | "rollup-plugin-typescript2": "^0.10.0",
84 | "rollup-plugin-uglify": "^2.0.1",
85 | "rollup-watch": "^4.3.1",
86 | "temp-dir": "^1.0.0",
87 | "ts-jest": "^22.0.1",
88 | "tslint": "^5.9.1",
89 | "tslint-config-prettier": "^1.6.0",
90 | "tslint-eslint-rules": "^4.1.1",
91 | "tslint-junit-formatter": "^5.1.0",
92 | "tslint-plugin-prettier": "^1.3.0",
93 | "tslint-react": "^3.4.0",
94 | "typescript": "^2.6.2",
95 | "uglify-es": "^3.3.7"
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | // rollup.config.js
2 | import resolve from "rollup-plugin-node-resolve";
3 | import typescript from "rollup-plugin-typescript2";
4 | import uglify from "rollup-plugin-uglify";
5 | import { minify } from "uglify-es";
6 |
7 | const base = {
8 | input: "src/index.ts",
9 | plugins: [resolve()],
10 | };
11 |
12 | const CACHE_ROOT = `${require("temp-dir")}/.rpt2_cache_${process.env
13 | .ROLLUP_CONFIG}`;
14 |
15 | const browser = {
16 | ...base,
17 | output: {
18 | name: "Wobble",
19 | format: "iife",
20 | file: "./dist/wobble.browser.js",
21 | sourcemap: true,
22 | },
23 | plugins: [
24 | ...base.plugins,
25 | typescript({
26 | cacheRoot: CACHE_ROOT,
27 | tsconfigOverride: {
28 | compilerOptions: {
29 | declaration: false,
30 | },
31 | },
32 | typescript: require("typescript"),
33 | }),
34 | ]
35 | };
36 |
37 | const cjs = {
38 | ...browser,
39 | output: {
40 | ...browser.output,
41 | format: "cjs",
42 | file: browser.output.file.replace("browser", "cjs"),
43 | },
44 | };
45 |
46 | const es = {
47 | ...base,
48 | output: {
49 | format: "es",
50 | file: "./dist/wobble.es.js",
51 | sourcemap: true
52 | },
53 | plugins: [
54 | ...base.plugins,
55 | typescript({
56 | cacheRoot: CACHE_ROOT,
57 | tsconfigOverride: {
58 | compilerOptions: {
59 | module: "esnext",
60 | target: "ES2017",
61 | declaration: false,
62 | },
63 | },
64 | typescript: require("typescript"),
65 | }),
66 | ]
67 | };
68 |
69 | let config;
70 | switch (process.env.ROLLUP_CONFIG) {
71 | case "cjs":
72 | config = cjs;
73 | break;
74 | case "browser":
75 | config = browser;
76 | break;
77 | case "es":
78 | config = es;
79 | break;
80 | default:
81 | throw new Error("Must set ROLLUP_CONFIG");
82 | }
83 |
84 | export default [
85 | config,
86 | addMinifier(config),
87 | ];
88 |
89 | function addMinifier(config) {
90 | return {
91 | ...config,
92 | output: {
93 | ...config.output,
94 | file: config.output.file.replace(".js", ".min.js"),
95 | },
96 | plugins: [
97 | ...config.plugins,
98 | uglify({}, minify),
99 | ],
100 | };
101 | }
102 |
--------------------------------------------------------------------------------
/src/__tests__/Springs-test.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @license
3 | * Copyright 2017 Adam Miskiewicz
4 | *
5 | * Use of this source code is governed by a MIT-style license that can be found
6 | * in the LICENSE file or at https://opensource.org/licenses/MIT.
7 | */
8 |
9 | import * as lolex from "lolex";
10 | import { Spring } from "../";
11 |
12 | describe("Spring", () => {
13 | it("animates correctly with base values", () => {
14 | const clock = lolex.install();
15 |
16 | const spring = new Spring({
17 | fromValue: 0,
18 | toValue: 1
19 | });
20 |
21 | const { values, velocities } = _measureSpringDynamics(clock, spring, 80);
22 | expect(values).toMatchSnapshot();
23 | expect(velocities).toMatchSnapshot();
24 |
25 | clock.uninstall();
26 | });
27 |
28 | it("animates correctly with non-zero initialVelocity", () => {
29 | const clock = lolex.install();
30 |
31 | const spring = new Spring({
32 | fromValue: 10,
33 | toValue: 100,
34 | stiffness: 230,
35 | damping: 22,
36 | mass: 1,
37 | initialVelocity: 2
38 | });
39 |
40 | const { values, velocities } = _measureSpringDynamics(clock, spring, 80);
41 |
42 | expect(velocities[0]).toBe(2);
43 | expect(velocities[values.length - 1]).toBe(0);
44 |
45 | expect(values).toMatchSnapshot();
46 | expect(velocities).toMatchSnapshot();
47 |
48 | clock.uninstall();
49 | });
50 |
51 | it("animates correctly with non-zero fromValue", () => {
52 | const clock = lolex.install();
53 |
54 | const spring = new Spring({
55 | fromValue: 25,
56 | toValue: 50,
57 | stiffness: 230,
58 | damping: 22,
59 | mass: 1
60 | });
61 |
62 | const { values, velocities } = _measureSpringDynamics(clock, spring, 60);
63 |
64 | expect(values[0]).toBe(25);
65 | expect(values[values.length - 1]).toBe(50);
66 |
67 | expect(values).toMatchSnapshot();
68 | expect(velocities).toMatchSnapshot();
69 |
70 | clock.uninstall();
71 | });
72 |
73 | it("animates correctly with fromValue that's larger than toValue", () => {
74 | const clock = lolex.install();
75 |
76 | const spring = new Spring({
77 | fromValue: 200,
78 | toValue: 11,
79 | stiffness: 230,
80 | damping: 22,
81 | mass: 1
82 | });
83 |
84 | const { values, velocities } = _measureSpringDynamics(clock, spring, 60);
85 |
86 | expect(values[0]).toBe(200);
87 | expect(values[values.length - 1]).toBe(11);
88 |
89 | expect(values).toMatchSnapshot();
90 | expect(velocities).toMatchSnapshot();
91 |
92 | clock.uninstall();
93 | });
94 |
95 | it("keeps proper dynamics when the config is updated during the animation", () => {
96 | const clock = lolex.install();
97 |
98 | const spring = new Spring({
99 | fromValue: 25,
100 | toValue: 131,
101 | stiffness: 230,
102 | damping: 22,
103 | mass: 1
104 | });
105 |
106 | const {
107 | values: expectedValues,
108 | velocities: expectedVelocities
109 | } = _measureSpringDynamics(clock, spring, 60);
110 |
111 | // Just run spring for 10 frames...we don't care about its
112 | // values/velocities -- other tests cover this
113 | _measureSpringDynamics(clock, spring, 10);
114 |
115 | spring.updateConfig({}); // don't change anything
116 |
117 | const {
118 | values: valuesAfterUpdate,
119 | velocities: velocitiesAfterUpdate
120 | } = _measureSpringDynamics(clock, spring, 60);
121 |
122 | // Get the expected values/velocities after 10 frames
123 | const expectedValuesAfterUpdate = expectedValues.slice(10);
124 | const expectedVelocitiesAfterUpdate = expectedVelocities.slice(10);
125 |
126 | valuesAfterUpdate.forEach((val, i) => {
127 | expect(val).toBeCloseTo(expectedValuesAfterUpdate[i], 0.00000001);
128 | });
129 | velocitiesAfterUpdate.forEach((vel, i) => {
130 | expect(vel).toBeCloseTo(expectedVelocitiesAfterUpdate[i], 0.00000001);
131 | });
132 |
133 | clock.uninstall();
134 | });
135 |
136 | it("respects toValue being updated mid-animation", () => {
137 | const clock = lolex.install();
138 |
139 | const spring = new Spring({
140 | fromValue: 25,
141 | toValue: 131,
142 | stiffness: 230,
143 | damping: 22,
144 | mass: 1
145 | });
146 |
147 | const {
148 | values: expectedValues,
149 | velocities: expectedVelocities
150 | } = _measureSpringDynamics(clock, spring, 60);
151 |
152 | // Just run spring for 5 frames
153 | _measureSpringDynamics(clock, spring, 5);
154 |
155 | spring.updateConfig({
156 | toValue: 200,
157 | restDisplacementThreshold: 0.01
158 | }); // Extend the spring
159 |
160 | // Run the simulation till spring rests
161 | const {
162 | values: valuesAfterUpdate,
163 | velocities: velocitiesAfterUpdate
164 | } = _measureSpringDynamics(clock, spring, 60);
165 |
166 | // Expect spring to be at rest with new values
167 | expect(valuesAfterUpdate[valuesAfterUpdate.length - 1]).toBe(200);
168 | expect(velocitiesAfterUpdate[velocitiesAfterUpdate.length - 1]).toBe(0);
169 |
170 | clock.uninstall();
171 | });
172 |
173 | it("respects initialVelocity being updated mid-animation", () => {
174 | const clock = lolex.install();
175 |
176 | const spring = new Spring({
177 | fromValue: 25,
178 | toValue: 131,
179 | stiffness: 230,
180 | damping: 22,
181 | mass: 1
182 | });
183 |
184 | const {
185 | values: expectedValues,
186 | velocities: expectedVelocities
187 | } = _measureSpringDynamics(clock, spring, 60);
188 |
189 | // Just run spring for 10 frames
190 | _measureSpringDynamics(clock, spring, 10);
191 |
192 | spring.updateConfig({
193 | initialVelocity: 200
194 | });
195 |
196 | // Run the simulation till spring rests
197 | const {
198 | values: valuesAfterUpdate,
199 | velocities: velocitiesAfterUpdate
200 | } = _measureSpringDynamics(clock, spring, 60);
201 |
202 | // Expect spring to be at rest with new values
203 | expect(valuesAfterUpdate[0]).toBe(expectedValues[10]); // first frame should be the same position as ending frame
204 | expect(valuesAfterUpdate[1]).toBeGreaterThan(2000); // should go to a really high number
205 | expect(velocitiesAfterUpdate[0]).toBe(200);
206 | expect(velocitiesAfterUpdate[8]).toBeLessThan(0); // given the spring dynamics, v should go negative pretty quickly
207 |
208 | clock.uninstall();
209 | });
210 |
211 | it("removes existing listener", () => {
212 | const spring = new Spring();
213 | const onUpdateListener = () => {};
214 | spring.onUpdate(onUpdateListener);
215 | expect(spring._listeners[0].onUpdate).toBe(onUpdateListener);
216 | spring.removeListener(onUpdateListener);
217 | expect(spring._listeners).toEqual([]);
218 | });
219 |
220 | it("clears all listeners", () => {
221 | const spring = new Spring();
222 | const onUpdateListener = () => {};
223 | spring.onUpdate(onUpdateListener);
224 | expect(spring._listeners[0].onUpdate).toBe(onUpdateListener);
225 | spring.removeAllListeners();
226 | expect(spring._listeners).toEqual([]);
227 | });
228 |
229 | it("synchronously notifies listeners that the spring has started when .start() is called", () => {
230 | const onStartListener = jest.fn();
231 |
232 | const spring = new Spring({
233 | toValue: 1
234 | });
235 |
236 | spring.onStart(onStartListener);
237 |
238 | spring.start();
239 | expect(onStartListener).toHaveBeenCalledWith(spring);
240 | });
241 |
242 | it("synchronously notifies listeners that the spring has stopped when .stop() is called mid-animation", () => {
243 | const clock = lolex.install();
244 | const onStopListener = jest.fn();
245 |
246 | const spring = new Spring({
247 | toValue: 1
248 | });
249 |
250 | spring
251 | .onStop(s => {
252 | onStopListener(s);
253 | expect(s.currentVelocity).toBeCloseTo(0.00165009062976268, 0.001);
254 | })
255 | .start();
256 |
257 | clock.tick(1000 / 60 * 10);
258 |
259 | spring.stop();
260 | expect(onStopListener).toHaveBeenCalledWith(spring);
261 | expect(spring.isAtRest).toBeFalsy();
262 |
263 | clock.tick(1000 / 60 * 1);
264 |
265 | expect(onStopListener).toHaveBeenCalledTimes(1);
266 |
267 | clock.uninstall();
268 | });
269 |
270 | it("should only call onUpdate once per frame", () => {
271 | const clock = lolex.install();
272 | const onUpdateListener = jest.fn();
273 | const onStopListener = jest.fn();
274 |
275 | const spring = new Spring({ fromValue: 0, toValue: 1 });
276 | spring.onUpdate(onUpdateListener);
277 | spring.onStop(onStopListener);
278 |
279 | spring.start();
280 | spring.updateConfig({ toValue: 0 });
281 | spring.updateConfig({ fromValue: 1 });
282 |
283 | expect(onUpdateListener).not.toHaveBeenCalled();
284 |
285 | clock.tick(1000 / 60);
286 |
287 | expect(onUpdateListener).toHaveBeenCalledTimes(1);
288 | expect(onStopListener).not.toHaveBeenCalled();
289 |
290 | clock.uninstall();
291 | });
292 |
293 | it("should call onStop on the next frame if fromValue and toValue are updated to match during the animation", () => {
294 | const clock = lolex.install();
295 | const onStopListener = jest.fn();
296 |
297 | const spring = new Spring({ fromValue: 0, toValue: 1 });
298 | spring.onStop(onStopListener);
299 |
300 | spring.start();
301 |
302 | clock.tick(1000 / 60);
303 | spring.updateConfig({ fromValue: 1, initialVelocity: 0 });
304 | expect(onStopListener).not.toHaveBeenCalled();
305 |
306 | clock.tick(1000 / 60);
307 | expect(onStopListener).toHaveBeenCalled();
308 |
309 | clock.uninstall();
310 | });
311 |
312 | function _measureSpringDynamics(
313 | clock: any,
314 | spring: Spring,
315 | numFrames: number
316 | ) {
317 | const values = [spring.currentValue];
318 | const velocities = [spring.currentVelocity];
319 |
320 | spring
321 | .onUpdate(s => {
322 | values.push(s.currentValue);
323 | velocities.push(s.currentVelocity);
324 | })
325 | .start();
326 |
327 | clock.tick(Math.round(1000 / 60.0 * numFrames / 16) * 16); // round to the nearest frame
328 |
329 | spring.removeAllListeners();
330 |
331 | return { values, velocities };
332 | }
333 | });
334 |
--------------------------------------------------------------------------------
/src/__tests__/__snapshots__/Springs-test.ts.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Spring animates correctly with base values 1`] = `
4 | Array [
5 | 0,
6 | 0.012118183855440723,
7 | 0.045765140015336936,
8 | 0.09696341587796564,
9 | 0.16190932310375994,
10 | 0.2370370376012132,
11 | 0.31906760676794765,
12 | 0.4050439386491632,
13 | 0.49235301969933065,
14 | 0.5787367249918682,
15 | 0.6622926523620347,
16 | 0.7414664358152023,
17 | 0.8150369794982677,
18 | 0.8820960075484949,
19 | 0.9420232530109494,
20 | 0.994458516320375,
21 | 1.0392717158058167,
22 | 1.0765319341153579,
23 | 1.1064763397287811,
24 | 1.1294797356842887,
25 | 1.1460253616325144,
26 | 1.1566774531695427,
27 | 1.1620559464048958,
28 | 1.1628136077170668,
29 | 1.159615770006046,
30 | 1.1531227684140493,
31 | 1.1439750910140445,
32 | 1.13278119358284,
33 | 1.1201078722089377,
34 | 1.1064730428132934,
35 | 1.0923407421568574,
36 | 1.078118139883442,
37 | 1.0641543347893314,
38 | 1.0507406999265947,
39 | 1.0381125393887147,
40 | 1.0264518237270874,
41 | 1.0158907799422672,
42 | 1.0065161249483228,
43 | 0.9983737474311465,
44 | 0.9914736612801814,
45 | 0.9857950735061112,
46 | 0.9812914300808033,
47 | 0.9778953238487577,
48 | 0.9755231690445936,
49 | 0.9740795665759048,
50 | 0.973461302744298,
51 | 0.9735609412068916,
52 | 0.9742699835262327,
53 | 0.9754815874857109,
54 | 0.9770928443874273,
55 | 0.979006626780466,
56 | 0.9811330265155371,
57 | 0.9833904097512144,
58 | 0.9857061206427543,
59 | 0.9880168690462664,
60 | 0.9902688398061515,
61 | 0.9924175622115515,
62 | 0.9944275781639953,
63 | 0.9962719466514748,
64 | 0.9979316204297375,
65 | 0.9993947285201821,
66 | 1,
67 | ]
68 | `;
69 |
70 | exports[`Spring animates correctly with base values 2`] = `
71 | Array [
72 | 0,
73 | 0.0014722643337529411,
74 | 0.002692090100901331,
75 | 0.0036680059846017103,
76 | 0.004413037529862265,
77 | 0.004943734765886689,
78 | 0.005279260399440419,
79 | 0.005440551148082793,
80 | 0.00544956119714427,
81 | 0.005328593497343909,
82 | 0.00509972170104589,
83 | 0.0047843029817831425,
84 | 0.00440257980006235,
85 | 0.003973366865141564,
86 | 0.0035138180857917237,
87 | 0.003039267184671805,
88 | 0.00256313484724593,
89 | 0.0020968947595945853,
90 | 0.00165009062976268,
91 | 0.0012303962525958773,
92 | 0.0008437108358921209,
93 | 0.0004942821239385422,
94 | 0.00018485030189079542,
95 | -0.00008319378867348585,
96 | -0.00030964197395281427,
97 | -0.000495298797419148,
98 | -0.0006418127907510669,
99 | -0.0007515127687238599,
100 | -0.0008272522697527069,
101 | -0.0008722646099318806,
102 | -0.0008900304029785307,
103 | -0.0008841588303220178,
104 | -0.0008582834311026966,
105 | -0.0008159727252641336,
106 | -0.0007606555864577867,
107 | -0.0006955609456000093,
108 | -0.0006236711295988386,
109 | -0.0005476879207195682,
110 | -0.00047001025698630467,
111 | -0.00039272237883750555,
112 | -0.00031759115730901406,
113 | -0.0002460713092712086,
114 | -0.0001793172104563659,
115 | -0.00011820005188667955,
116 | -0.00006332914464319894,
117 | -0.0000150762566847655,
118 | 0.000026398041099778095,
119 | 0.00006111693862418324,
120 | 0.00008925966899400152,
121 | 0.00011113420546903981,
122 | 0.00012715095623345315,
123 | 0.00013779793041819583,
124 | 0.0001436177440875581,
125 | 0.00014518673694992226,
126 | 0.00014309638069229773,
127 | 0.00013793707899365293,
128 | 0.00013028438801892302,
129 | 0.00012068762479774043,
130 | 0.00010966077934163385,
131 | 0.00009767560441157903,
132 | 0.00008515672408379602,
133 | 0,
134 | ]
135 | `;
136 |
137 | exports[`Spring animates correctly with fromValue that's larger than toValue 1`] = `
138 | Array [
139 | 200,
140 | 195.05879648140845,
141 | 182.49297418542363,
142 | 165.18554241058436,
143 | 145.39825516562362,
144 | 124.8442406041327,
145 | 104.76617681550424,
146 | 86.01450710975685,
147 | 69.12181997875679,
148 | 54.370858080609224,
149 | 41.854687638996964,
150 | 31.528382616207214,
151 | 23.25218868349522,
152 | 16.82656320842733,
153 | 12.019771160895,
154 | 8.588882766695027,
155 | 6.295093654887642,
156 | 4.914295456808681,
157 | 4.2437840540466825,
158 | 4.105920187404668,
159 | 4.349465922296467,
160 | 4.849220581361768,
161 | 5.504478707681407,
162 | 6.2367357476320775,
163 | 6.986977987589001,
164 | 7.712813956242222,
165 | 8.385636014555168,
166 | 8.987943366831226,
167 | 9.510910814092904,
168 | 9.952250413843375,
169 | 10.314384748944883,
170 | 10.602929568318068,
171 | 10.825468945960472,
172 | 10.990596657899847,
173 | 11.107192131884522,
174 | 11.183897128687047,
175 | 11.228759440979136,
176 | 11.249011650266404,
177 | 11.250955794796825,
178 | 11.239928218871462,
179 | 11.220322548254767,
180 | 11.195652409746248,
181 | 11.168639004274318,
182 | 11.141311833691699,
183 | 11.115113703352058,
184 | 11.091003545619664,
185 | 11.069552632370982,
186 | 11.051031386113765,
187 | 11.035485291648522,
188 | 11.022799393036555,
189 | 11.012751577297877,
190 | 11.005055340325985,
191 | 10.999393043621197,
192 | 11,
193 | ]
194 | `;
195 |
196 | exports[`Spring animates correctly with fromValue that's larger than toValue 2`] = `
197 | Array [
198 | 0,
199 | -0.5805667416086457,
200 | -0.9601932580432371,
201 | -1.179752531750891,
202 | -1.2758955339616094,
203 | -1.2804937663421414,
204 | -1.2204832724317183,
205 | -1.1179986991617832,
206 | -0.9907047234569577,
207 | -0.8522499124198902,
208 | -0.7127842722007753,
209 | -0.5794960258100922,
210 | -0.4571354024933738,
211 | -0.34850342233082965,
212 | -0.2548919213159135,
213 | -0.17646755173486192,
214 | -0.11259741548473648,
215 | -0.06211756577647179,
216 | -0.02354806785191467,
217 | 0.004740146257445649,
218 | 0.024400566318536772,
219 | 0.03702219063273279,
220 | 0.04407018037609186,
221 | 0.04685023936488721,
222 | 0.046491438745436736,
223 | 0.04394286193120299,
224 | 0.039980134753606046,
225 | 0.03521858515915774,
226 | 0.030130415369569202,
227 | 0.025063847784232544,
228 | 0.020262713349108917,
229 | 0.01588538362239904,
230 | 0.012022306209361193,
231 | 0.008711691888986423,
232 | 0.005953127065895795,
233 | 0.0037190548177109635,
234 | 0.0019641899123149908,
235 | 0.0006330158139724396,
236 | -0.00033443749119602085,
237 | -0.0009983101055073508,
238 | -0.0014158913961132345,
239 | -0.001639636309292585,
240 | -0.0017160090586120886,
241 | -0.0016849657996026062,
242 | -0.0015799122419520046,
243 | -0.001427997369371168,
244 | -0.0012506290303086946,
245 | -0.0010641201006948123,
246 | -0.0008803945610404532,
247 | -0.0007077008365485966,
248 | -0.000551295012870641,
249 | -0.00041406912157516864,
250 | -0.0002971097628489569,
251 | 0,
252 | ]
253 | `;
254 |
255 | exports[`Spring animates correctly with non-zero fromValue 1`] = `
256 | Array [
257 | 25,
258 | 25.653598349020047,
259 | 27.31574415536725,
260 | 29.605086982726935,
261 | 32.22245302042016,
262 | 34.94123801532636,
263 | 37.59706655879574,
264 | 40.07744614950306,
265 | 42.31192857423852,
266 | 44.263114010501425,
267 | 45.918692111243786,
268 | 47.284605474046664,
269 | 48.37934012123079,
270 | 49.22929058089586,
271 | 49.86510963480225,
272 | 50.31893085096627,
273 | 50.62234210914185,
274 | 50.804987373438,
275 | 50.89367935793033,
276 | 50.911915319126365,
277 | 50.87970027482851,
278 | 50.813595161195536,
279 | 50.72692080586225,
280 | 50.63006140904338,
281 | 50.530823017514685,
282 | 50.43481296875103,
283 | 50.345815341990054,
284 | 50.26614505729746,
285 | 50.19696946903533,
286 | 50.138591215100085,
287 | 50.09068984802316,
288 | 50.05252254387327,
289 | 50.023086118259194,
290 | 50.00124382832013,
291 | 49.98582114657612,
292 | 49.97567498297791,
293 | 49.9697408146853,
294 | 49.96706195102296,
295 | 49.96680478904804,
296 | 49.96826346311224,
297 | 49.970856805786404,
298 | 49.974120051620865,
299 | 49.97769325340287,
300 | 49.98130795850639,
301 | 49.98477331966242,
302 | 49.987962493965654,
303 | 49.99079991635305,
304 | 49.99324981665162,
305 | 49.99530617835337,
306 | 49.996984207270295,
307 | 49.99831328342621,
308 | 49.99933130418968,
309 | 50,
310 | ]
311 | `;
312 |
313 | exports[`Spring animates correctly with non-zero fromValue 2`] = `
314 | Array [
315 | 0,
316 | 0.07679454254082613,
317 | 0.12700969021735947,
318 | 0.15605192218927133,
319 | 0.16876925052402242,
320 | 0.16937748232038907,
321 | 0.16143958630049182,
322 | 0.14788342581505068,
323 | 0.1310455983408674,
324 | 0.11273146989681088,
325 | 0.09428363388899147,
326 | 0.07665291346694342,
327 | 0.060467645832456854,
328 | 0.04609833628714678,
329 | 0.03371586260792507,
330 | 0.023342268747997608,
331 | 0.014893838027081543,
332 | 0.00821660922969204,
333 | 0.0031148237899358,
334 | -0.0006270034732070995,
335 | -0.003227588137372588,
336 | -0.0048971151630598925,
337 | -0.005829388938636489,
338 | -0.006197121609112065,
339 | -0.006149661209713854,
340 | -0.00581254787449775,
341 | -0.005288377612910853,
342 | -0.0046585430104705994,
343 | -0.003985504678514445,
344 | -0.0033153237809831404,
345 | -0.0026802530885064704,
346 | -0.002101241219894053,
347 | -0.0015902521440953959,
348 | -0.0011523401969558758,
349 | -0.0007874506700920363,
350 | -0.0004919384679511855,
351 | -0.00025981348046494584,
352 | -0.00008373225052545497,
353 | 0.000044237763385717084,
354 | 0.000132051601257586,
355 | 0.00018728722170809983,
356 | 0.00021688310969478637,
357 | 0.00022698532521323923,
358 | 0.00022287907402150878,
359 | 0.00020898310078730213,
360 | 0.0001888885409221122,
361 | 0.000165427120411203,
362 | 0.00014075662707603337,
363 | 0.00011645430701593295,
364 | 0.00009361122176568737,
365 | 0.0000729226207500848,
366 | 0.00005477104782740325,
367 | 0,
368 | ]
369 | `;
370 |
371 | exports[`Spring animates correctly with non-zero initialVelocity 1`] = `
372 | Array [
373 | 10,
374 | 39.06409928806386,
375 | 62.51396251318623,
376 | 80.8572425949548,
377 | 94.70317888186817,
378 | 104.70236374922327,
379 | 111.5023391944444,
380 | 115.71651946518517,
381 | 117.90402055103863,
382 | 118.55815648886977,
383 | 118.10159904012683,
384 | 116.88646265159178,
385 | 115.19784907380713,
386 | 113.25965001718917,
387 | 111.24165124456638,
388 | 109.26720106278208,
389 | 107.42089699363466,
390 | 105.75590558079143,
391 | 104.30066265896166,
392 | 103.06480698426115,
393 | 102.04428163725304,
394 | 101.22559817576135,
395 | 100.58930135723053,
396 | 100.112700512865,
397 | 99.77195026836978,
398 | 99.5435709050697,
399 | 99.40549953971696,
400 | 99.3377594200202,
401 | 99.3228275916526,
402 | 99.34577227662703,
403 | 99.39422150905506,
404 | 99.45821464667628,
405 | 99.52997884517819,
406 | 99.60366380040259,
407 | 99.67506024242464,
408 | 99.7413209063896,
409 | 99.80069702661841,
410 | 99.85229876263033,
411 | 99.89588428870711,
412 | 99.93167945894584,
413 | 99.96022788229475,
414 | 99.98226978920722,
415 | 99.99864712971579,
416 | 100.0102318068044,
417 | 100.01787372497162,
418 | 100.02236534033622,
419 | 100.02441956684008,
420 | 100.02465816675488,
421 | 100.02360808799072,
422 | 100.02170357113505,
423 | 100.01929221016046,
424 | 100.01664349432718,
425 | 100.0139586731709,
426 | 100.01138106475277,
427 | 100.00900616651616,
428 | 100.00689112793977,
429 | 100.00506330649466,
430 | 100.00352775632362,
431 | 100.00227359645484,
432 | 100.00127927648482,
433 | 100.00051680679795,
434 | 100,
435 | ]
436 | `;
437 |
438 | exports[`Spring animates correctly with non-zero initialVelocity 2`] = `
439 | Array [
440 | 2,
441 | 1.6365272901303531,
442 | 1.300075114168103,
443 | 0.9992435132061892,
444 | 0.7383214040690447,
445 | 0.5183539434582274,
446 | 0.338053395156957,
447 | 0.19455494778050617,
448 | 0.08402615904488181,
449 | 0.002143357664982831,
450 | -0.055549050571416236,
451 | -0.09337937423326034,
452 | -0.11537262672389709,
453 | -0.12514172220915018,
454 | -0.12583130969977188,
455 | -0.12010140056918722,
456 | -0.11013979064978245,
457 | -0.09769411944927074,
458 | -0.0841161563397317,
459 | -0.07041249841259188,
460 | -0.057297273533970974,
461 | -0.04524365058272171,
462 | -0.03453196668285285,
463 | -0.025293098203068156,
464 | -0.017546344673116717,
465 | -0.011231582634726203,
466 | -0.006235801553844076,
467 | -0.0024143781239765547,
468 | 0.0003924005657625629,
469 | 0.002346971330585942,
470 | 0.0036056638037470427,
471 | 0.004312791346404617,
472 | 0.004597088792729067,
473 | 0.004569976619445893,
474 | 0.004325195337065842,
475 | 0.003939421588422054,
476 | 0.0034735442329731202,
477 | 0.002974341559422668,
478 | 0.002476357765393879,
479 | 0.002003826897229159,
480 | 0.00157253514303554,
481 | 0.0011915477910457162,
482 | 0.0008647557142977911,
483 | 0.0005922185499756275,
484 | 0.0003712985577286597,
485 | 0.00019759126475033136,
486 | 0.00006566722991624419,
487 | -0.000030355664454962653,
488 | -0.00009638737322113902,
489 | -0.00013806553243080494,
490 | -0.00016055781557080187,
491 | -0.00016844614637102464,
492 | -0.00016567419849620714,
493 | -0.00015554199666841127,
494 | -0.00014073390994317854,
495 | -0.00012336874641923147,
496 | -0.00010506291723991592,
497 | -0.00008699967226059632,
498 | -0.00006999918620773934,
499 | -0.000054585781375324923,
500 | -0.00004104981633641747,
501 | 0,
502 | ]
503 | `;
504 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @license
3 | * Copyright 2017 Adam Miskiewicz
4 | *
5 | * Use of this source code is governed by a MIT-style license that can be found
6 | * in the LICENSE file or at https://opensource.org/licenses/MIT.
7 | */
8 |
9 | import { invariant, withDefault } from "./utils";
10 |
11 | export interface SpringConfig {
12 | fromValue: number; // Starting value of the animation.
13 | toValue: number; // Ending value of the animation.
14 | stiffness: number; // The spring stiffness coefficient.
15 | damping: number; // Defines how the spring’s motion should be damped due to the forces of friction.
16 | mass: number; // The mass of the object attached to the end of the spring.
17 | initialVelocity: number; // The initial velocity (in units/ms) of the object attached to the spring.
18 | allowsOverdamping: boolean; // Whether or not the spring allows "overdamping" (a damping ratio > 1). Defaults to false.
19 | overshootClamping: boolean; // False when overshooting is allowed, true when it is not. Defaults to false.
20 | restVelocityThreshold: number; // When spring's velocity is below `restVelocityThreshold`, it is at rest. Defaults to .001.
21 | restDisplacementThreshold: number; // When the spring's displacement (current value) is below `restDisplacementThreshold`, it is at rest. Defaults to .001.
22 | }
23 |
24 | export type PartialSpringConfig = Partial;
25 |
26 | export type SpringListenerFn = (spring: Spring) => void;
27 | export interface SpringListener {
28 | onUpdate?: SpringListenerFn;
29 | onStart?: SpringListenerFn;
30 | onStop?: SpringListenerFn;
31 | }
32 |
33 | /**
34 | * Implements a spring physics simulation based on the equations behind
35 | * damped harmonic oscillators (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).
36 | */
37 | export class Spring {
38 | static MAX_DELTA_TIME_MS = 1 / 60 * 1000 * 4; // advance 4 frames at max
39 |
40 | _listeners: SpringListener[] = [];
41 |
42 | private _config: SpringConfig;
43 | private _currentAnimationStep: number = 0; // current requestAnimationFrame
44 |
45 | private _currentTime: number = 0; // Current timestamp of animation in ms (real time)
46 | private _springTime: number = 0; // Current time along the spring curve in ms (zero-based)
47 |
48 | private _currentValue: number = 0; // the current value of the spring
49 | private _currentVelocity: number = 0; // the current velocity of the spring
50 | private _isAnimating: boolean = false;
51 |
52 | private _oscillationVelocityPairs = [];
53 |
54 | constructor(config: PartialSpringConfig = {}) {
55 | this._config = {
56 | fromValue: withDefault(config.fromValue, 0),
57 | toValue: withDefault(config.toValue, 1),
58 | stiffness: withDefault(config.stiffness, 100),
59 | damping: withDefault(config.damping, 10),
60 | mass: withDefault(config.mass, 1),
61 | initialVelocity: withDefault(config.initialVelocity, 0),
62 | overshootClamping: withDefault(config.overshootClamping, false),
63 | allowsOverdamping: withDefault(config.allowsOverdamping, false),
64 | restVelocityThreshold: withDefault(config.restVelocityThreshold, 0.001),
65 | restDisplacementThreshold: withDefault(
66 | config.restDisplacementThreshold,
67 | 0.001
68 | )
69 | };
70 | this._currentValue = this._config.fromValue;
71 | this._currentVelocity = this._config.initialVelocity;
72 | }
73 |
74 | /**
75 | * If `fromValue` differs from `toValue`, or `initialVelocity` is non-zero,
76 | * start the simulation and call the `onStart` listeners.
77 | */
78 | start(): this {
79 | const { fromValue, toValue, initialVelocity } = this._config;
80 |
81 | if (fromValue !== toValue || initialVelocity !== 0) {
82 | this._reset();
83 | this._isAnimating = true;
84 |
85 | if (!this._currentAnimationStep) {
86 | this._notifyListeners("onStart");
87 | this._currentAnimationStep = requestAnimationFrame((t: number) => {
88 | this._step(Date.now());
89 | });
90 | }
91 | }
92 |
93 | return this;
94 | }
95 |
96 | /**
97 | * If a simulation is in progress, stop it and call the `onStop` listeners.
98 | */
99 | stop(): this {
100 | if (!this._isAnimating) {
101 | return this;
102 | }
103 |
104 | this._isAnimating = false;
105 | this._notifyListeners("onStop");
106 |
107 | if (this._currentAnimationStep) {
108 | cancelAnimationFrame(this._currentAnimationStep);
109 | this._currentAnimationStep = 0;
110 | }
111 |
112 | return this;
113 | }
114 |
115 | /**
116 | * The spring's current position.
117 | */
118 | get currentValue(): number {
119 | return this._currentValue;
120 | }
121 |
122 | /**
123 | * The spring's current velocity in units / ms.
124 | */
125 | get currentVelocity(): number {
126 | return this._currentVelocity; // give velocity in units/ms;
127 | }
128 |
129 | /**
130 | * If the spring has reached its `toValue`, or if its velocity is below the
131 | * `restVelocityThreshold`, it is considered at rest. If `stop()` is called
132 | * during a simulation, both `isAnimating` and `isAtRest` will be false.
133 | */
134 | get isAtRest(): boolean {
135 | return this._isSpringAtRest();
136 | }
137 |
138 | /**
139 | * Whether or not the spring is currently emitting values.
140 | *
141 | * Note: this is distinct from whether or not it is at rest.
142 | * See also `isAtRest`.
143 | */
144 | get isAnimating(): boolean {
145 | return this._isAnimating;
146 | }
147 |
148 | /**
149 | * Updates the spring config with the given values. Values not explicitly
150 | * supplied will be reused from the existing config.
151 | */
152 | updateConfig(updatedConfig: PartialSpringConfig): this {
153 | // When we update the spring config, we reset the simulation to ensure the
154 | // spring always moves the full distance between `fromValue` and `toValue`.
155 | // To ensure that the simulation behaves correctly if those values aren't
156 | // being changed in `updatedConfig`, we run the simulation with `_step()`
157 | // and default `fromValue` and `initialVelocity` to their current values.
158 |
159 | this._advanceSpringToTime(Date.now());
160 |
161 | const baseConfig = {
162 | fromValue: this._currentValue,
163 | initialVelocity: this._currentVelocity
164 | };
165 |
166 | this._config = {
167 | ...this._config,
168 | ...baseConfig,
169 | ...updatedConfig
170 | };
171 |
172 | this._reset();
173 |
174 | return this;
175 | }
176 |
177 | /**
178 | * The provided callback will be invoked when the simulation begins.
179 | */
180 | onStart(listener: SpringListenerFn): this {
181 | this._listeners.push({ onStart: listener });
182 | return this;
183 | }
184 |
185 | /**
186 | * The provided callback will be invoked on each frame while the simulation is
187 | * running.
188 | */
189 | onUpdate(listener: SpringListenerFn): this {
190 | this._listeners.push({ onUpdate: listener });
191 | return this;
192 | }
193 |
194 | /**
195 | * The provided callback will be invoked when the simulation ends.
196 | */
197 | onStop(listener: SpringListenerFn): this {
198 | this._listeners.push({ onStop: listener });
199 | return this;
200 | }
201 |
202 | /**
203 | * Remove a single listener from this spring.
204 | */
205 | removeListener(listenerFn: SpringListenerFn): this {
206 | this._listeners = this._listeners.reduce(
207 | (result, listener) => {
208 | const foundListenerFn =
209 | Object.values(listener).indexOf(listenerFn) !== -1;
210 | if (!foundListenerFn) {
211 | result.push(listener);
212 | }
213 | return result;
214 | },
215 | [] as SpringListener[]
216 | );
217 | return this;
218 | }
219 |
220 | /**
221 | * Removes all listeners from this spring.
222 | */
223 | removeAllListeners(): this {
224 | this._listeners = [];
225 | return this;
226 | }
227 |
228 | private _reset() {
229 | this._currentTime = Date.now();
230 | this._springTime = 0.0;
231 | this._currentValue = this._config.fromValue;
232 | this._currentVelocity = this._config.initialVelocity;
233 | }
234 |
235 | private _notifyListeners(eventName: keyof SpringListener) {
236 | this._listeners.forEach((listener: Partial) => {
237 | const maybeListenerFn = listener[eventName];
238 | if (typeof maybeListenerFn === "function") {
239 | maybeListenerFn(this);
240 | }
241 | });
242 | }
243 |
244 | /**
245 | * `_step` is the main loop. While the animation is running, it updates the
246 | * current state once per frame, and schedules the next frame if the spring is
247 | * not yet at rest.
248 | */
249 | private _step(timestamp: number) {
250 | this._advanceSpringToTime(timestamp, true);
251 |
252 | // check `_isAnimating`, in case `stop()` got called during
253 | // `_advanceSpringToTime()`
254 | if (this._isAnimating) {
255 | this._currentAnimationStep = requestAnimationFrame((t: number) =>
256 | this._step(Date.now())
257 | );
258 | }
259 | }
260 |
261 | private _advanceSpringToTime(
262 | timestamp: number,
263 | shouldNotifyListeners: boolean = false
264 | ) {
265 | // `_advanceSpringToTime` updates `_currentTime` and triggers the listeners.
266 | // Because of these side effects, it's only safe to call when an animation
267 | // is already in-progress.
268 | if (!this._isAnimating) {
269 | return;
270 | }
271 |
272 | let deltaTime = timestamp - this._currentTime;
273 |
274 | // If for some reason we lost a lot of frames (e.g. process large payload or
275 | // stopped in the debugger), we only advance by 4 frames worth of
276 | // computation and will continue on the next frame. It's better to have it
277 | // running at slower speed than jumping to the end.
278 | if (deltaTime > Spring.MAX_DELTA_TIME_MS) {
279 | deltaTime = Spring.MAX_DELTA_TIME_MS;
280 | }
281 | this._springTime += deltaTime;
282 |
283 | const c = this._config.damping;
284 | const m = this._config.mass;
285 | const k = this._config.stiffness;
286 | const fromValue = this._config.fromValue;
287 | const toValue = this._config.toValue;
288 | const v0 = -this._config.initialVelocity;
289 |
290 | invariant(m > 0, "Mass value must be greater than 0");
291 | invariant(k > 0, "Stiffness value must be greater than 0");
292 |
293 | let zeta = c / (2 * Math.sqrt(k * m)); // damping ratio (dimensionless)
294 | const omega0 = Math.sqrt(k / m) / 1000; // undamped angular frequency of the oscillator (rad/ms)
295 | const omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay
296 | const omega2 = omega0 * Math.sqrt(zeta * zeta - 1.0); // frequency of damped oscillation
297 | const x0 = toValue - fromValue; // initial displacement of the spring at t = 0
298 |
299 | if (zeta > 1 && !this._config.allowsOverdamping) {
300 | zeta = 1;
301 | }
302 |
303 | let oscillation = 0.0;
304 | let velocity = 0.0;
305 | const t = this._springTime;
306 | if (zeta < 1) {
307 | // Under damped
308 | const envelope = Math.exp(-zeta * omega0 * t);
309 | oscillation =
310 | toValue -
311 | envelope *
312 | ((v0 + zeta * omega0 * x0) / omega1 * Math.sin(omega1 * t) +
313 | x0 * Math.cos(omega1 * t));
314 | // This looks crazy -- it's actually just the derivative of the
315 | // oscillation function
316 | velocity =
317 | zeta *
318 | omega0 *
319 | envelope *
320 | (Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0) / omega1 +
321 | x0 * Math.cos(omega1 * t)) -
322 | envelope *
323 | (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) -
324 | omega1 * x0 * Math.sin(omega1 * t));
325 | } else if (zeta === 1) {
326 | // Critically damped
327 | const envelope = Math.exp(-omega0 * t);
328 | oscillation = toValue - envelope * (x0 + (v0 + omega0 * x0) * t);
329 | velocity =
330 | envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0));
331 | } else {
332 | // Overdamped
333 | const envelope = Math.exp(-zeta * omega0 * t);
334 | oscillation =
335 | toValue -
336 | envelope *
337 | ((v0 + zeta * omega0 * x0) * Math.sinh(omega2 * t) +
338 | omega2 * x0 * Math.cosh(omega2 * t)) /
339 | omega2;
340 | velocity =
341 | envelope *
342 | zeta *
343 | omega0 *
344 | (Math.sinh(omega2 * t) * (v0 + zeta * omega0 * x0) +
345 | x0 * omega2 * Math.cosh(omega2 * t)) /
346 | omega2 -
347 | envelope *
348 | (omega2 * Math.cosh(omega2 * t) * (v0 + zeta * omega0 * x0) +
349 | omega2 * omega2 * x0 * Math.sinh(omega2 * t)) /
350 | omega2;
351 | }
352 |
353 | this._currentTime = timestamp;
354 | this._currentValue = oscillation;
355 | this._currentVelocity = velocity;
356 |
357 | if (!shouldNotifyListeners) {
358 | return;
359 | }
360 |
361 | this._notifyListeners("onUpdate");
362 | if (!this._isAnimating) {
363 | // a listener might have stopped us in _onUpdate
364 | return;
365 | }
366 |
367 | // If the Spring is overshooting (when overshoot clamping is on), or if the
368 | // spring is at rest (based on the thresholds set in the config), stop the
369 | // animation.
370 | if (this._isSpringOvershooting() || this._isSpringAtRest()) {
371 | if (k !== 0) {
372 | // Ensure that we end up with a round value
373 | this._currentValue = toValue;
374 | this._currentVelocity = 0;
375 | this._notifyListeners("onUpdate");
376 | }
377 |
378 | this.stop();
379 | return;
380 | }
381 | }
382 |
383 | private _isSpringOvershooting() {
384 | const { stiffness, fromValue, toValue, overshootClamping } = this._config;
385 | let isOvershooting = false;
386 | if (overshootClamping && stiffness !== 0) {
387 | if (fromValue < toValue) {
388 | isOvershooting = this._currentValue > toValue;
389 | } else {
390 | isOvershooting = this._currentValue < toValue;
391 | }
392 | }
393 | return isOvershooting;
394 | }
395 |
396 | private _isSpringAtRest() {
397 | const {
398 | stiffness,
399 | toValue,
400 | restDisplacementThreshold,
401 | restVelocityThreshold
402 | } = this._config;
403 |
404 | const isNoVelocity =
405 | Math.abs(this._currentVelocity) <= restVelocityThreshold;
406 | const isNoDisplacement =
407 | stiffness !== 0 &&
408 | Math.abs(toValue - this._currentValue) <= restDisplacementThreshold;
409 | return isNoDisplacement && isNoVelocity;
410 | }
411 | }
412 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @license
3 | * Copyright 2017 Adam Miskiewicz
4 | *
5 | * Use of this source code is governed by a MIT-style license that can be found
6 | * in the LICENSE file or at https://opensource.org/licenses/MIT.
7 | */
8 |
9 | export function invariant(condition: boolean, message: string): void {
10 | if (!condition) {
11 | throw new Error(message);
12 | }
13 | }
14 |
15 | export function withDefault(maybeValue: X | undefined, defaultValue: X): X {
16 | return typeof maybeValue !== "undefined" && maybeValue !== null
17 | ? (maybeValue as X)
18 | : defaultValue;
19 | }
20 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "jsx": "react",
5 | "sourceMap": true,
6 | "noImplicitReturns": true,
7 | "noImplicitThis": true,
8 | "noImplicitAny": true,
9 | "strictNullChecks": true,
10 | "lib": [
11 | "dom",
12 | "esnext"
13 | ],
14 | "target": "es5",
15 | "pretty": true,
16 | "declaration": true,
17 | "outDir": "./dist/module"
18 | },
19 | "exclude": [
20 | "dist",
21 | "demos",
22 | "node_modules"
23 | ]
24 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "tslint:latest",
4 | "tslint-react",
5 | "tslint-eslint-rules",
6 | "tslint-config-prettier"
7 | ],
8 | "rulesDirectory": [
9 | "tslint-plugin-prettier"
10 | ],
11 | "rules": {
12 | "interface-name": [
13 | true,
14 | "never-prefix"
15 | ],
16 | "member-access": [
17 | true,
18 | "no-public"
19 | ],
20 | "no-empty": false,
21 | "no-implicit-dependencies": [
22 | true,
23 | "dev"
24 | ],
25 | "no-submodule-imports": false,
26 | "object-literal-sort-keys": false,
27 | "prettier": true,
28 | "prefer-conditional-expression": false,
29 | "variable-name": [
30 | true,
31 | "ban-keywords",
32 | "check-format",
33 | "allow-leading-underscore"
34 | ]
35 | }
36 | }
--------------------------------------------------------------------------------