├── .gitignore
├── .npmignore
├── README.md
├── demo
├── .gitignore
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
│ ├── channels
│ │ └── application_cable
│ │ │ ├── channel.rb
│ │ │ └── connection.rb
│ ├── controllers
│ │ ├── api
│ │ │ └── auth_test_controller.rb
│ │ ├── application_controller.rb
│ │ ├── concerns
│ │ │ └── .keep
│ │ └── static_controller.rb
│ ├── jobs
│ │ └── application_job.rb
│ ├── mailers
│ │ └── application_mailer.rb
│ ├── models
│ │ ├── application_record.rb
│ │ ├── concerns
│ │ │ └── .keep
│ │ └── user.rb
│ └── views
│ │ └── layouts
│ │ ├── mailer.html.erb
│ │ └── mailer.text.erb
├── bin
│ ├── bundle
│ ├── rails
│ ├── rake
│ ├── setup
│ ├── spring
│ └── update
├── client
│ ├── .gitignore
│ ├── README.md
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── manifest.json
│ ├── src
│ │ ├── actions
│ │ │ ├── auth.js
│ │ │ ├── flash.js
│ │ │ └── headers.js
│ │ ├── components
│ │ │ ├── App.js
│ │ │ ├── AuthRoute.js
│ │ │ ├── Authenticated.js
│ │ │ ├── ComponentLoader.js
│ │ │ ├── FetchUser.js
│ │ │ ├── Flash.js
│ │ │ ├── Home.js
│ │ │ ├── Login.js
│ │ │ ├── NavBar.js
│ │ │ ├── NoMatch.js
│ │ │ ├── ProtectedRoute.js
│ │ │ └── Register.js
│ │ ├── index.js
│ │ ├── reducers
│ │ │ ├── flash.js
│ │ │ ├── index.js
│ │ │ └── user.js
│ │ ├── registerServiceWorker.js
│ │ └── store.js
│ └── yarn.lock
├── config.ru
├── config
│ ├── application.rb
│ ├── boot.rb
│ ├── cable.yml
│ ├── database.yml
│ ├── environment.rb
│ ├── environments
│ │ ├── development.rb
│ │ ├── production.rb
│ │ └── test.rb
│ ├── initializers
│ │ ├── application_controller_renderer.rb
│ │ ├── backtrace_silencers.rb
│ │ ├── cors.rb
│ │ ├── devise_token_auth.rb
│ │ ├── filter_parameter_logging.rb
│ │ ├── inflections.rb
│ │ ├── mime_types.rb
│ │ └── wrap_parameters.rb
│ ├── locales
│ │ └── en.yml
│ ├── puma.rb
│ ├── routes.rb
│ ├── secrets.yml
│ └── spring.rb
├── db
│ ├── migrate
│ │ └── 20180211191111_devise_token_auth_create_users.rb
│ ├── schema.rb
│ └── seeds.rb
├── lib
│ └── tasks
│ │ └── .keep
├── log
│ └── .keep
├── package.json
├── public
│ └── robots.txt
├── tmp
│ └── .keep
└── vendor
│ └── .keep
├── package.json
├── src
└── index.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | *.tgz
4 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src
2 | *.tgz
3 | demo/
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # About
2 |
3 | This package fits a very specific use case. It's purpose is to keep help keep track of new tokens everytime a request is made. It works by capturing the dispatch and updating the axios config with the new headers recieved from devise. There is also a validate token option as well as a logout option.
4 |
5 | * You are using devise token authentiation
6 | * You are using axios
7 | * You are using redux
8 |
9 | # Installation
10 | ```npm install redux-devise-axios```
11 |
12 | store.js
13 |
14 | ```javascript
15 | import { createStore, compose, applyMiddleware } from 'redux';
16 |
17 | //This could be saga or promise or any other async middleware
18 | import thunk from 'redux-thunk';
19 |
20 | import apiMiddleware from 'redux-devise-axios';
21 |
22 | import rootReducer from './reducers/index';
23 | import axios from 'axios';
24 |
25 |
26 | /* OPTIONS
27 | axios: Your axios instance *required
28 | customHeaders: An array of headers you want to add. Defaults: ['access-token', 'token-type', 'client', 'expiry', 'uid']
29 | validateAction: default 'VALIDATE_TOKEN'
30 | logoutAction: default 'LOGOUT'
31 | */
32 | const options = { axios }
33 |
34 |
35 | //redux-devise-axios middleware must come after your async middleware
36 | const enhancers = compose(
37 | applyMiddleware(thunk, apiMiddleware(options)),
38 | window.devToolsExtension ? window.devToolsExtension() : f => f
39 | );
40 |
41 | const store = createStore(rootReducer, {}, enhancers);
42 | ```
43 |
44 |
45 | # Options
46 | * axios: This is your instance of axios and is required
47 | * customHeaders: Array of additional Headers you want to use
48 | * default: ['access-token', 'token-type', 'client', 'expiry', 'uid'] This is what devise sends by default
49 | * validateAction: This is the action you dispatch in an HOC (Usually because the user refreshed the browser)
50 | * default: 'VALIDATE_TOKEN'
51 | * logoutAction: This is the action you dispatch to logout your user.
52 | * default: 'LOGOUT'
53 |
54 | NOTE: You are resposible for the implementation of LOGOUT and VALIDATE token. These actions simply add to and clear localStorage.
55 |
56 | # Example Usage
57 |
58 | actions/auth.js
59 | ```javascript
60 | import axios from 'axios';
61 | import { setFlash } from '../actions/flash';
62 |
63 | export const registerUser = (email, password, passwordConfirmation, history) => {
64 | return(dispatch) => {
65 | axios.post('/api/auth', { email, password, password_confirmation: passwordConfirmation })
66 | .then( res => {
67 | let { data: { data: user }, headers } = res;
68 | dispatch({ type: 'LOGIN', user, headers });
69 | history.push('/');
70 | })
71 | .catch( res => {
72 | const message = res.response.data.errors.full_messages.join(',');
73 | dispatch(setFlash(message, 'error'));
74 | });
75 | }
76 | }
77 |
78 | export const handleLogout = (history) => {
79 | return(dispatch) => {
80 | axios.delete('/api/auth/sign_out')
81 | .then( res => {
82 | dispatch({ type: 'LOGOUT' });
83 | dispatch(setFlash('Logged out successfully!', 'success'));
84 | history.push('/login');
85 | })
86 | .catch( res => {
87 | // TODO: handle errors for the client
88 | console.log(res);
89 | });
90 | }
91 | }
92 |
93 | export const handleLogin = (email, password, history) => {
94 | return(dispatch) => {
95 | axios.post('/api/auth/sign_in', { email, password })
96 | .then( res => {
97 | let { data: { data: user }, headers } = res
98 | dispatch({ type: 'LOGIN', user, headers });
99 | history.push('/');
100 | })
101 | .catch( res => {
102 | // TODO: handle errors for the client
103 | console.log(res);
104 | })
105 | }
106 | }
107 |
108 | export const validateToken = (cb = f => f) => {
109 | return (dispatch) => {
110 | dispatch({ type: 'VALIDATE_TOKEN' })
111 | let headers = axios.defaults.headers.common
112 | axios.get('/api/auth/validate_token', headers)
113 | .then( res => dispatch({ type: 'LOGIN', user: res.data.data }) )
114 | .catch(() => cb())
115 | }
116 | }
117 | ```
118 | Notice that we are sending the headers when we dispatch. This is key to how this package works. Anytime any action is dispatched with a key of headers axios headers will be updated.
119 |
120 | This will work for React State as well as long as you dispatch some action with the res.headers from axios.
121 |
122 | ```javascript
123 | componentDidMount() {
124 | axios.get('/api/bio')
125 | .then( res => {
126 | this.setState({ bio: res.data.body });
127 | this.props.dispatch(setHeaders(res.headers))
128 | })
129 | .catch( res => {
130 | console.log(`Bio GET Fail: ${res}`);
131 | });
132 | }
133 | ```
134 |
135 | # Demo
136 | ```
137 | $ clone project
138 | $ cd demo
139 | $ bundle
140 | $ bundle exec rake db:create db:migrate
141 | $ rails s -p 3001
142 | $ cd client (new tab / pane)
143 | $ yarn or npm install
144 | $ yarn start or npm start
145 | ```
146 |
--------------------------------------------------------------------------------
/demo/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2 | #
3 | # If you find yourself ignoring temporary files generated by your text editor
4 | # or operating system, you probably want to add a global ignore instead:
5 | # git config --global core.excludesfile '~/.gitignore_global'
6 |
7 | # Ignore bundler config.
8 | /.bundle
9 |
10 | # Ignore all logfiles and tempfiles.
11 | /log/*
12 | /tmp/*
13 | !/log/.keep
14 | !/tmp/.keep
15 |
16 | .byebug_history
17 |
--------------------------------------------------------------------------------
/demo/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | git_source(:github) do |repo_name|
4 | repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
5 | "https://github.com/#{repo_name}.git"
6 | end
7 |
8 |
9 | # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
10 | gem 'rails', '~> 5.1.4'
11 | # Use postgresql as the database for Active Record
12 | gem 'pg', '~> 0.18'
13 | # Use Puma as the app server
14 | gem 'puma', '~> 3.7'
15 | # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
16 | # gem 'jbuilder', '~> 2.5'
17 | # Use Redis adapter to run Action Cable in production
18 | # gem 'redis', '~> 3.0'
19 | # Use ActiveModel has_secure_password
20 | # gem 'bcrypt', '~> 3.1.7'
21 |
22 | # Use Capistrano for deployment
23 | # gem 'capistrano-rails', group: :development
24 |
25 | # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
26 | # gem 'rack-cors'
27 |
28 | gem 'omniauth'
29 | gem 'devise'
30 | gem 'devise_token_auth'
31 | group :development, :test do
32 | # Call 'byebug' anywhere in the code to stop execution and get a debugger console
33 | gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
34 | end
35 |
36 | group :development do
37 | gem 'listen', '>= 3.0.5', '< 3.2'
38 | # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
39 | gem 'spring'
40 | gem 'spring-watcher-listen', '~> 2.0.0'
41 | end
42 |
43 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
44 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
45 |
--------------------------------------------------------------------------------
/demo/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | actioncable (5.1.4)
5 | actionpack (= 5.1.4)
6 | nio4r (~> 2.0)
7 | websocket-driver (~> 0.6.1)
8 | actionmailer (5.1.4)
9 | actionpack (= 5.1.4)
10 | actionview (= 5.1.4)
11 | activejob (= 5.1.4)
12 | mail (~> 2.5, >= 2.5.4)
13 | rails-dom-testing (~> 2.0)
14 | actionpack (5.1.4)
15 | actionview (= 5.1.4)
16 | activesupport (= 5.1.4)
17 | rack (~> 2.0)
18 | rack-test (>= 0.6.3)
19 | rails-dom-testing (~> 2.0)
20 | rails-html-sanitizer (~> 1.0, >= 1.0.2)
21 | actionview (5.1.4)
22 | activesupport (= 5.1.4)
23 | builder (~> 3.1)
24 | erubi (~> 1.4)
25 | rails-dom-testing (~> 2.0)
26 | rails-html-sanitizer (~> 1.0, >= 1.0.3)
27 | activejob (5.1.4)
28 | activesupport (= 5.1.4)
29 | globalid (>= 0.3.6)
30 | activemodel (5.1.4)
31 | activesupport (= 5.1.4)
32 | activerecord (5.1.4)
33 | activemodel (= 5.1.4)
34 | activesupport (= 5.1.4)
35 | arel (~> 8.0)
36 | activesupport (5.1.4)
37 | concurrent-ruby (~> 1.0, >= 1.0.2)
38 | i18n (~> 0.7)
39 | minitest (~> 5.1)
40 | tzinfo (~> 1.1)
41 | arel (8.0.0)
42 | bcrypt (3.1.11)
43 | builder (3.2.3)
44 | byebug (10.0.0)
45 | concurrent-ruby (1.0.5)
46 | crass (1.0.3)
47 | devise (4.3.0)
48 | bcrypt (~> 3.0)
49 | orm_adapter (~> 0.1)
50 | railties (>= 4.1.0, < 5.2)
51 | responders
52 | warden (~> 1.2.3)
53 | devise_token_auth (0.1.42)
54 | devise (> 3.5.2, <= 4.3)
55 | rails (< 6)
56 | erubi (1.7.0)
57 | ffi (1.9.21)
58 | globalid (0.4.1)
59 | activesupport (>= 4.2.0)
60 | hashie (3.5.7)
61 | i18n (0.9.4)
62 | concurrent-ruby (~> 1.0)
63 | listen (3.1.5)
64 | rb-fsevent (~> 0.9, >= 0.9.4)
65 | rb-inotify (~> 0.9, >= 0.9.7)
66 | ruby_dep (~> 1.2)
67 | loofah (2.1.1)
68 | crass (~> 1.0.2)
69 | nokogiri (>= 1.5.9)
70 | mail (2.7.0)
71 | mini_mime (>= 0.1.1)
72 | method_source (0.9.0)
73 | mini_mime (1.0.0)
74 | mini_portile2 (2.3.0)
75 | minitest (5.11.3)
76 | nio4r (2.2.0)
77 | nokogiri (1.8.2)
78 | mini_portile2 (~> 2.3.0)
79 | omniauth (1.8.1)
80 | hashie (>= 3.4.6, < 3.6.0)
81 | rack (>= 1.6.2, < 3)
82 | orm_adapter (0.5.0)
83 | pg (0.21.0)
84 | puma (3.11.2)
85 | rack (2.0.4)
86 | rack-test (0.8.2)
87 | rack (>= 1.0, < 3)
88 | rails (5.1.4)
89 | actioncable (= 5.1.4)
90 | actionmailer (= 5.1.4)
91 | actionpack (= 5.1.4)
92 | actionview (= 5.1.4)
93 | activejob (= 5.1.4)
94 | activemodel (= 5.1.4)
95 | activerecord (= 5.1.4)
96 | activesupport (= 5.1.4)
97 | bundler (>= 1.3.0)
98 | railties (= 5.1.4)
99 | sprockets-rails (>= 2.0.0)
100 | rails-dom-testing (2.0.3)
101 | activesupport (>= 4.2.0)
102 | nokogiri (>= 1.6)
103 | rails-html-sanitizer (1.0.3)
104 | loofah (~> 2.0)
105 | railties (5.1.4)
106 | actionpack (= 5.1.4)
107 | activesupport (= 5.1.4)
108 | method_source
109 | rake (>= 0.8.7)
110 | thor (>= 0.18.1, < 2.0)
111 | rake (12.3.0)
112 | rb-fsevent (0.10.2)
113 | rb-inotify (0.9.10)
114 | ffi (>= 0.5.0, < 2)
115 | responders (2.4.0)
116 | actionpack (>= 4.2.0, < 5.3)
117 | railties (>= 4.2.0, < 5.3)
118 | ruby_dep (1.5.0)
119 | spring (2.0.2)
120 | activesupport (>= 4.2)
121 | spring-watcher-listen (2.0.1)
122 | listen (>= 2.7, < 4.0)
123 | spring (>= 1.2, < 3.0)
124 | sprockets (3.7.1)
125 | concurrent-ruby (~> 1.0)
126 | rack (> 1, < 3)
127 | sprockets-rails (3.2.1)
128 | actionpack (>= 4.0)
129 | activesupport (>= 4.0)
130 | sprockets (>= 3.0.0)
131 | thor (0.20.0)
132 | thread_safe (0.3.6)
133 | tzinfo (1.2.5)
134 | thread_safe (~> 0.1)
135 | warden (1.2.7)
136 | rack (>= 1.0)
137 | websocket-driver (0.6.5)
138 | websocket-extensions (>= 0.1.0)
139 | websocket-extensions (0.1.3)
140 |
141 | PLATFORMS
142 | ruby
143 |
144 | DEPENDENCIES
145 | byebug
146 | devise
147 | devise_token_auth
148 | listen (>= 3.0.5, < 3.2)
149 | omniauth
150 | pg (~> 0.18)
151 | puma (~> 3.7)
152 | rails (~> 5.1.4)
153 | spring
154 | spring-watcher-listen (~> 2.0.0)
155 | tzinfo-data
156 |
157 | BUNDLED WITH
158 | 1.16.1
159 |
--------------------------------------------------------------------------------
/demo/README.md:
--------------------------------------------------------------------------------
1 | # README
2 |
3 | This README would normally document whatever steps are necessary to get the
4 | application up and running.
5 |
6 | Things you may want to cover:
7 |
8 | * Ruby version
9 |
10 | * System dependencies
11 |
12 | * Configuration
13 |
14 | * Database creation
15 |
16 | * Database initialization
17 |
18 | * How to run the test suite
19 |
20 | * Services (job queues, cache servers, search engines, etc.)
21 |
22 | * Deployment instructions
23 |
24 | * ...
25 |
--------------------------------------------------------------------------------
/demo/Rakefile:
--------------------------------------------------------------------------------
1 | # Add your own tasks in files placed in lib/tasks ending in .rake,
2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3 |
4 | require_relative 'config/application'
5 |
6 | Rails.application.load_tasks
7 |
--------------------------------------------------------------------------------
/demo/app/channels/application_cable/channel.rb:
--------------------------------------------------------------------------------
1 | module ApplicationCable
2 | class Channel < ActionCable::Channel::Base
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/demo/app/channels/application_cable/connection.rb:
--------------------------------------------------------------------------------
1 | module ApplicationCable
2 | class Connection < ActionCable::Connection::Base
3 | end
4 | end
5 |
--------------------------------------------------------------------------------
/demo/app/controllers/api/auth_test_controller.rb:
--------------------------------------------------------------------------------
1 | class Api::AuthTestController < ApplicationController
2 | before_action :authenticate_user!
3 |
4 | def index
5 | render json: { is_authenicated: user_signed_in? }
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/demo/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | class ApplicationController < ActionController::API
2 | include DeviseTokenAuth::Concerns::SetUserByToken
3 | end
4 |
--------------------------------------------------------------------------------
/demo/app/controllers/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/app/controllers/concerns/.keep
--------------------------------------------------------------------------------
/demo/app/controllers/static_controller.rb:
--------------------------------------------------------------------------------
1 | require 'rails/application_controller'
2 |
3 | class StaticController < Rails::ApplicationController
4 | layout false
5 |
6 | def index
7 | render file: Rails.root.join('public', 'index.html')
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/demo/app/jobs/application_job.rb:
--------------------------------------------------------------------------------
1 | class ApplicationJob < ActiveJob::Base
2 | end
3 |
--------------------------------------------------------------------------------
/demo/app/mailers/application_mailer.rb:
--------------------------------------------------------------------------------
1 | class ApplicationMailer < ActionMailer::Base
2 | default from: 'from@example.com'
3 | layout 'mailer'
4 | end
5 |
--------------------------------------------------------------------------------
/demo/app/models/application_record.rb:
--------------------------------------------------------------------------------
1 | class ApplicationRecord < ActiveRecord::Base
2 | self.abstract_class = true
3 | end
4 |
--------------------------------------------------------------------------------
/demo/app/models/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/app/models/concerns/.keep
--------------------------------------------------------------------------------
/demo/app/models/user.rb:
--------------------------------------------------------------------------------
1 | class User < ActiveRecord::Base
2 | # Include default devise modules.
3 | devise :database_authenticatable, :registerable,
4 | :recoverable, :rememberable, :trackable, :validatable,
5 | :omniauthable
6 | include DeviseTokenAuth::Concerns::User
7 | end
8 |
--------------------------------------------------------------------------------
/demo/app/views/layouts/mailer.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 | <%= yield %>
12 |
13 |
14 |
--------------------------------------------------------------------------------
/demo/app/views/layouts/mailer.text.erb:
--------------------------------------------------------------------------------
1 | <%= yield %>
2 |
--------------------------------------------------------------------------------
/demo/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3 | load Gem.bin_path('bundler', 'bundle')
4 |
--------------------------------------------------------------------------------
/demo/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path('../spring', __FILE__)
4 | rescue LoadError => e
5 | raise unless e.message.include?('spring')
6 | end
7 | APP_PATH = File.expand_path('../config/application', __dir__)
8 | require_relative '../config/boot'
9 | require 'rails/commands'
10 |
--------------------------------------------------------------------------------
/demo/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | begin
3 | load File.expand_path('../spring', __FILE__)
4 | rescue LoadError => e
5 | raise unless e.message.include?('spring')
6 | end
7 | require_relative '../config/boot'
8 | require 'rake'
9 | Rake.application.run
10 |
--------------------------------------------------------------------------------
/demo/bin/setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'pathname'
3 | require 'fileutils'
4 | include FileUtils
5 |
6 | # path to your application root.
7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
8 |
9 | def system!(*args)
10 | system(*args) || abort("\n== Command #{args} failed ==")
11 | end
12 |
13 | chdir APP_ROOT do
14 | # This script is a starting point to setup your application.
15 | # Add necessary setup steps to this file.
16 |
17 | puts '== Installing dependencies =='
18 | system! 'gem install bundler --conservative'
19 | system('bundle check') || system!('bundle install')
20 |
21 |
22 | # puts "\n== Copying sample files =="
23 | # unless File.exist?('config/database.yml')
24 | # cp 'config/database.yml.sample', 'config/database.yml'
25 | # end
26 |
27 | puts "\n== Preparing database =="
28 | system! 'bin/rails db:setup'
29 |
30 | puts "\n== Removing old logs and tempfiles =="
31 | system! 'bin/rails log:clear tmp:clear'
32 |
33 | puts "\n== Restarting application server =="
34 | system! 'bin/rails restart'
35 | end
36 |
--------------------------------------------------------------------------------
/demo/bin/spring:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | # This file loads spring without using Bundler, in order to be fast.
4 | # It gets overwritten when you run the `spring binstub` command.
5 |
6 | unless defined?(Spring)
7 | require 'rubygems'
8 | require 'bundler'
9 |
10 | lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
11 | spring = lockfile.specs.detect { |spec| spec.name == "spring" }
12 | if spring
13 | Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
14 | gem 'spring', spring.version
15 | require 'spring/binstub'
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/demo/bin/update:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require 'pathname'
3 | require 'fileutils'
4 | include FileUtils
5 |
6 | # path to your application root.
7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
8 |
9 | def system!(*args)
10 | system(*args) || abort("\n== Command #{args} failed ==")
11 | end
12 |
13 | chdir APP_ROOT do
14 | # This script is a way to update your development environment automatically.
15 | # Add necessary update steps to this file.
16 |
17 | puts '== Installing dependencies =='
18 | system! 'gem install bundler --conservative'
19 | system('bundle check') || system!('bundle install')
20 |
21 | puts "\n== Updating database =="
22 | system! 'bin/rails db:migrate'
23 |
24 | puts "\n== Removing old logs and tempfiles =="
25 | system! 'bin/rails log:clear tmp:clear'
26 |
27 | puts "\n== Restarting application server =="
28 | system! 'bin/rails restart'
29 | end
30 |
--------------------------------------------------------------------------------
/demo/client/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 |
12 | # misc
13 | .DS_Store
14 | .env.local
15 | .env.development.local
16 | .env.test.local
17 | .env.production.local
18 |
19 | npm-debug.log*
20 | yarn-debug.log*
21 | yarn-error.log*
22 |
--------------------------------------------------------------------------------
/demo/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.17.1",
7 | "react": "^16.2.0",
8 | "react-dom": "^16.2.0",
9 | "react-redux": "^5.0.6",
10 | "react-router-dom": "^4.2.2",
11 | "react-scripts": "1.1.1",
12 | "redux": "^3.7.2",
13 | "redux-devise-axios": "^0.0.4",
14 | "redux-thunk": "^2.2.0",
15 | "semantic-ui-css": "^2.2.14",
16 | "semantic-ui-react": "^0.78.2"
17 | },
18 | "scripts": {
19 | "start": "react-scripts start",
20 | "build": "react-scripts build",
21 | "test": "react-scripts test --env=jsdom",
22 | "eject": "react-scripts eject"
23 | },
24 | "proxy": "http://localhost:3001"
25 | }
26 |
--------------------------------------------------------------------------------
/demo/client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/client/public/favicon.ico
--------------------------------------------------------------------------------
/demo/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
22 | React App
23 |
24 |
25 |
28 |
29 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/demo/client/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/demo/client/src/actions/auth.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import axios from 'axios';
3 | import { setFlash } from '../actions/flash';
4 | import { setHeaders } from '../actions/headers';
5 |
6 | const login = user => {
7 | return { type: 'LOGIN', user };
8 | };
9 |
10 | const logout = () => {
11 | return { type: 'LOGOUT' };
12 | };
13 |
14 | export const registerUser = (email, password, passwordConfirmation, history) => {
15 | return dispatch => {
16 | axios.post('/api/auth', { email, password, password_confirmation: passwordConfirmation })
17 | .then(res => {
18 | const { data: { data: user }, headers } = res;
19 | dispatch(login(user));
20 | dispatch(setHeaders(headers));
21 | history.push('/');
22 | })
23 | .catch(res => {
24 | const messages =
25 | res.response.data.errors.full_messages.map(message =>
26 | {message}
);
27 | const { headers } = res;
28 | dispatch(setHeaders(headers));
29 | dispatch(setFlash(messages, 'red'));
30 | });
31 | };
32 | };
33 |
34 | export const handleLogout = history => {
35 | return dispatch => {
36 | axios.delete('/api/auth/sign_out')
37 | .then(res => {
38 | const { headers } = res;
39 | dispatch(setHeaders(headers));
40 | dispatch(logout());
41 | dispatch(setFlash('Logged out successfully!', 'green'));
42 | history.push('/login');
43 | })
44 | .catch(res => {
45 | const messages =
46 | res.response.data.errors.map(message =>
47 | {message}
);
48 | const { headers } = res;
49 | dispatch(setHeaders(headers));
50 | dispatch(setFlash(messages, 'red'));
51 | });
52 | };
53 | };
54 |
55 | export const handleLogin = (email, password, history) => {
56 | return dispatch => {
57 | axios.post('/api/auth/sign_in', { email, password })
58 | .then(res => {
59 | const { data: { data: user }, headers } = res;
60 | dispatch(setHeaders(headers));
61 | dispatch(login(user));
62 | history.push('/');
63 | })
64 | .catch(res => {
65 | let errors = res.response.data.errors ? res.response.data.errors : { full_messages: ['Something went wrong'] }
66 | if (Array.isArray(errors))
67 | errors = { full_messages: errors }
68 | const messages =
69 | errors.map(message =>
70 | {message}
);
71 | const { headers } = res;
72 | dispatch(setHeaders(headers));
73 | dispatch(setFlash(messages, 'red'));
74 | });
75 | };
76 | };
77 |
78 | export const validateToken = (callBack = () => {}) => {
79 | return dispatch => {
80 | dispatch({ type: 'VALIDATE_TOKEN' });
81 | const headers = axios.defaults.headers.common;
82 | axios.get('/api/auth/validate_token', headers)
83 | .then(res => {
84 | const user = res.data.data;
85 | dispatch(setHeaders(res.headers));
86 | dispatch(login(user));
87 | })
88 | .catch(() => callBack());
89 | };
90 | };
91 |
--------------------------------------------------------------------------------
/demo/client/src/actions/flash.js:
--------------------------------------------------------------------------------
1 | export const setFlash = (message, color) => {
2 | return { type: 'SET_FLASH', message, color };
3 | };
4 |
5 | export const clearFlash = () => {
6 | return { type: 'CLEAR_FLASH' };
7 | };
8 |
--------------------------------------------------------------------------------
/demo/client/src/actions/headers.js:
--------------------------------------------------------------------------------
1 | export const setHeaders = headers => {
2 | return { type: 'SET_HEADERS', headers };
3 | };
4 |
--------------------------------------------------------------------------------
/demo/client/src/components/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import NoMatch from './NoMatch';
3 | import NavBar from './NavBar';
4 | import Login from './Login';
5 | import Register from './Register';
6 | import Flash from './Flash';
7 | import Home from './Home';
8 | import ProtectedRoute from './ProtectedRoute';
9 | import AuthRoute from './AuthRoute';
10 | import FetchUser from './FetchUser';
11 | import { Switch, Route } from 'react-router-dom';
12 | import Authenticated from './Authenticated';
13 |
14 | class App extends Component {
15 | render() {
16 | return (
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 | }
33 |
34 | export default App;
35 |
--------------------------------------------------------------------------------
/demo/client/src/components/AuthRoute.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Route, Redirect } from 'react-router-dom';
3 | import { connect } from 'react-redux';
4 |
5 | const AuthRoute = ({ isAuthenticated, component: Component, ...rest }) => (
6 | (
9 | !isAuthenticated
10 | ? ()
11 | : (
12 | )
18 | )}
19 | />
20 | );
21 |
22 | const mapStateToProps = state => {
23 | return { isAuthenticated: state.user.id };
24 | };
25 |
26 | export default connect(mapStateToProps)(AuthRoute);
27 |
--------------------------------------------------------------------------------
/demo/client/src/components/Authenticated.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Link } from 'react-router-dom';
3 | import { Header } from 'semantic-ui-react';
4 | import { connect } from 'react-redux';
5 |
6 | const Authenticated = ({ user }) => (
7 |
8 |
9 | Go Back
10 |
11 | )
12 |
13 | const mapStateToProps = (state) => {
14 | return { user: state.user }
15 | }
16 |
17 | export default connect(mapStateToProps)(Authenticated);
18 |
--------------------------------------------------------------------------------
/demo/client/src/components/ComponentLoader.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Segment, Loader } from 'semantic-ui-react';
3 |
4 | const ComponentLoader = ({ loaded, message, children }) => {
5 | if(loaded)
6 | return children
7 | else
8 | return(
9 |
10 | {message}...
11 |
12 | )
13 | }
14 |
15 | export default ComponentLoader;
--------------------------------------------------------------------------------
/demo/client/src/components/FetchUser.js:
--------------------------------------------------------------------------------
1 | import { Component } from 'react';
2 | import { connect } from 'react-redux';
3 | import { validateToken } from '../actions/auth';
4 |
5 | class FetchUser extends Component {
6 | state = { loaded: false };
7 |
8 | componentDidMount() {
9 | const { isAuthenticated, dispatch } = this.props;
10 | if (isAuthenticated) this.loaded();
11 | else dispatch(validateToken(this.loaded));
12 | }
13 |
14 | componentWillReceiveProps() {
15 | if (!this.state.loaded) this.loaded();
16 | }
17 |
18 | loaded = () => {
19 | this.setState({ loaded: true });
20 | }
21 |
22 | render() {
23 | return this.state.loaded ? this.props.children : null;
24 | }
25 | }
26 |
27 | const mapStateToProps = state => {
28 | return { isAuthenticated: state.user.id };
29 | };
30 |
31 | export default connect(mapStateToProps)(FetchUser);
32 |
--------------------------------------------------------------------------------
/demo/client/src/components/Flash.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { connect } from 'react-redux';
3 | import { Message, Container, Header } from 'semantic-ui-react';
4 | import { clearFlash } from '../actions/flash';
5 | import { withRouter } from 'react-router-dom';
6 |
7 | class Flash extends Component {
8 | componentDidUpdate(prevProps) {
9 | const { location: prevLocation, flash: prevFlash } = prevProps;
10 | const { location, flash, dispatch } = this.props;
11 |
12 | const prevMessage = prevFlash.message;
13 | const prevUrl = prevLocation.pathname;
14 | const currentMessage = flash.message;
15 | const currentUrl = location.pathname;
16 |
17 | if(prevMessage && prevMessage === currentMessage) {
18 | if(prevUrl !== currentUrl) {
19 | clearTimeout(this.flashTimeout);
20 | dispatch(clearFlash());
21 | }
22 | }
23 | }
24 |
25 | fadeFlash = dispatch => {
26 | setTimeout(() => {
27 | dispatch(clearFlash());
28 | }, 15000);
29 | }
30 |
31 | render() {
32 | const { dispatch, flash: { message, color } } = this.props;
33 |
34 | if (message) {
35 | return (
36 |
37 | dispatch(clearFlash())}
39 | color={color}
40 | >
41 |
42 | {this.fadeFlash(dispatch)}
43 |
44 |
45 | );
46 | }
47 | return null;
48 | }
49 | }
50 |
51 | const mapStateToProps = state => {
52 | const { flash } = state;
53 | return { flash };
54 | };
55 |
56 | export default withRouter(connect(mapStateToProps)(Flash));
57 |
--------------------------------------------------------------------------------
/demo/client/src/components/Home.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Header, Button, Divider } from 'semantic-ui-react';
3 | import { setHeaders } from '../actions/headers';
4 | import { connect } from 'react-redux';
5 | import axios from 'axios'
6 |
7 | class Home extends Component {
8 | handleClick = () => {
9 | const { history, dispatch } = this.props;
10 | axios.get('/api/auth_test')
11 | .then( res => {
12 | dispatch(setHeaders(res.headers))
13 | history.push('/authenticated')
14 | });
15 | }
16 |
17 | render() {
18 | return (
19 |
20 |
21 |
22 |
23 |
24 | );
25 | }
26 | }
27 |
28 | export default connect()(Home);
29 |
--------------------------------------------------------------------------------
/demo/client/src/components/Login.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Header, Segment, Form, Button } from 'semantic-ui-react';
3 | import { connect } from 'react-redux';
4 | import { handleLogin } from '../actions/auth';
5 |
6 | class Login extends Component {
7 | state = { email: '', password: '' };
8 |
9 | handleChange = event => {
10 | const { id, value } = event.target;
11 | this.setState({ [id]: value });
12 | }
13 |
14 | handleSubmit = event => {
15 | event.preventDefault();
16 | const { dispatch, history } = this.props;
17 | const { email, password } = this.state;
18 | dispatch(handleLogin(email, password, history));
19 | }
20 |
21 | render() {
22 | const { email, password } = this.state;
23 | return (
24 |
25 |
26 |
28 |
29 |
36 |
37 |
38 |
39 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | );
54 | }
55 | }
56 |
57 | export default connect()(Login);
58 |
--------------------------------------------------------------------------------
/demo/client/src/components/NavBar.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Menu } from 'semantic-ui-react';
3 | import { Link, withRouter } from 'react-router-dom';
4 | import { connect } from 'react-redux';
5 | import { handleLogout } from '../actions/auth';
6 |
7 | class NavBar extends Component {
8 | rightNavs = () => {
9 | const { user, dispatch, history } = this.props;
10 |
11 | if (user.id) {
12 | return (
13 |
14 | dispatch(handleLogout(history))}
17 | />
18 |
19 | );
20 | }
21 | return (
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
33 | render() {
34 | return (
35 |
36 |
42 |
43 | );
44 | }
45 | }
46 |
47 | const mapStateToProps = state => {
48 | return { user: state.user };
49 | };
50 |
51 | export default withRouter(connect(mapStateToProps)(NavBar));
52 |
--------------------------------------------------------------------------------
/demo/client/src/components/NoMatch.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Header } from 'semantic-ui-react';
3 | import { Link } from 'react-router-dom';
4 |
5 | class NoMatch extends Component {
6 | render() {
7 | return (
8 |
9 | Page Not Found
10 | Home
11 |
12 | );
13 | }
14 | }
15 |
16 | export default NoMatch;
17 |
--------------------------------------------------------------------------------
/demo/client/src/components/ProtectedRoute.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Route, Redirect } from 'react-router-dom';
3 | import { connect } from 'react-redux';
4 |
5 | const ProtectedRoute = ({ isAuthenticated, component: Component, ...rest }) => (
6 | (
9 | isAuthenticated
10 | ? ()
11 | : (
12 | )
18 | )}
19 | />
20 | );
21 |
22 | const mapStateToProps = state => {
23 | return { isAuthenticated: state.user.id };
24 | };
25 |
26 | export default connect(mapStateToProps)(ProtectedRoute);
27 |
--------------------------------------------------------------------------------
/demo/client/src/components/Register.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Header, Form, Button, Segment } from 'semantic-ui-react';
3 | import { connect } from 'react-redux';
4 | import { registerUser } from '../actions/auth';
5 | import { setFlash } from '../actions/flash';
6 |
7 | class Register extends Component {
8 | state = { email: '', password: '', passwordConfirmation: '' };
9 |
10 | handleSubmit = event => {
11 | event.preventDefault();
12 | const { email, password, passwordConfirmation } = this.state;
13 | const { dispatch, history } = this.props;
14 | if (password === passwordConfirmation) {
15 | dispatch(registerUser(email, password, passwordConfirmation, history));
16 | } else dispatch(setFlash('Passwords do not match!, please try again', 'red'));
17 | }
18 |
19 | handleChange = event => {
20 | // use e to grab the id off the element also the value and set state
21 | // const { id, value } = event.target;
22 | const id = event.target.id;
23 | const value = event.target.value;
24 | this.setState({ [id]: value });
25 | }
26 |
27 | render() {
28 | const { email, password, passwordConfirmation } = this.state;
29 |
30 | return (
31 |
32 |
33 |
35 |
36 |
43 |
44 |
45 |
46 |
54 |
55 |
56 |
57 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | );
72 | }
73 | }
74 |
75 | export default connect()(Register);
76 |
--------------------------------------------------------------------------------
/demo/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './components/App';
4 | import registerServiceWorker from './registerServiceWorker';
5 | import { BrowserRouter } from 'react-router-dom';
6 | import { Provider } from 'react-redux';
7 | import store from './store';
8 | import 'semantic-ui-css/semantic.min.css';
9 |
10 | ReactDOM.render(
11 |
12 |
13 |
14 |
15 | ,
16 | document.getElementById('root')
17 | );
18 | registerServiceWorker();
19 |
--------------------------------------------------------------------------------
/demo/client/src/reducers/flash.js:
--------------------------------------------------------------------------------
1 | const flash = (state = {}, action) => {
2 | switch (action.type) {
3 | case 'SET_FLASH':
4 | return { message: action.message, color: action.color };
5 | case 'CLEAR_FLASH':
6 | return {};
7 | default:
8 | return state;
9 | }
10 | };
11 |
12 | export default flash;
13 |
--------------------------------------------------------------------------------
/demo/client/src/reducers/index.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux';
2 | import user from './user';
3 | import flash from './flash';
4 |
5 | const rootReducer = combineReducers({
6 | user,
7 | flash
8 | });
9 |
10 | export default rootReducer;
11 |
--------------------------------------------------------------------------------
/demo/client/src/reducers/user.js:
--------------------------------------------------------------------------------
1 | const user = (state = {}, action) => {
2 | switch (action.type) {
3 | case 'LOGIN':
4 | return action.user;
5 | case 'LOGOUT':
6 | return {};
7 | default:
8 | return state;
9 | }
10 | };
11 |
12 | export default user;
13 |
--------------------------------------------------------------------------------
/demo/client/src/registerServiceWorker.js:
--------------------------------------------------------------------------------
1 | // In production, we register a service worker to serve assets from local cache.
2 |
3 | // This lets the app load faster on subsequent visits in production, and gives
4 | // it offline capabilities. However, it also means that developers (and users)
5 | // will only see deployed updates on the "N+1" visit to a page, since previously
6 | // cached resources are updated in the background.
7 |
8 | // To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
9 | // This link also includes instructions on opting out of this behavior.
10 |
11 | const isLocalhost = Boolean(
12 | window.location.hostname === 'localhost' ||
13 | // [::1] is the IPv6 localhost address.
14 | window.location.hostname === '[::1]' ||
15 | // 127.0.0.1/8 is considered localhost for IPv4.
16 | window.location.hostname.match(
17 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
18 | )
19 | );
20 |
21 | export default function register() {
22 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
23 | // The URL constructor is available in all browsers that support SW.
24 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location);
25 | if (publicUrl.origin !== window.location.origin) {
26 | // Our service worker won't work if PUBLIC_URL is on a different origin
27 | // from what our page is served on. This might happen if a CDN is used to
28 | // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374
29 | return;
30 | }
31 |
32 | window.addEventListener('load', () => {
33 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
34 |
35 | if (isLocalhost) {
36 | // This is running on localhost. Lets check if a service worker still exists or not.
37 | checkValidServiceWorker(swUrl);
38 |
39 | // Add some additional logging to localhost, pointing developers to the
40 | // service worker/PWA documentation.
41 | navigator.serviceWorker.ready.then(() => {
42 | console.log(
43 | 'This web app is being served cache-first by a service ' +
44 | 'worker. To learn more, visit https://goo.gl/SC7cgQ'
45 | );
46 | });
47 | } else {
48 | // Is not local host. Just register service worker
49 | registerValidSW(swUrl);
50 | }
51 | });
52 | }
53 | }
54 |
55 | function registerValidSW(swUrl) {
56 | navigator.serviceWorker
57 | .register(swUrl)
58 | .then(registration => {
59 | registration.onupdatefound = () => {
60 | const installingWorker = registration.installing;
61 | installingWorker.onstatechange = () => {
62 | if (installingWorker.state === 'installed') {
63 | if (navigator.serviceWorker.controller) {
64 | // At this point, the old content will have been purged and
65 | // the fresh content will have been added to the cache.
66 | // It's the perfect time to display a "New content is
67 | // available; please refresh." message in your web app.
68 | console.log('New content is available; please refresh.');
69 | } else {
70 | // At this point, everything has been precached.
71 | // It's the perfect time to display a
72 | // "Content is cached for offline use." message.
73 | console.log('Content is cached for offline use.');
74 | }
75 | }
76 | };
77 | };
78 | })
79 | .catch(error => {
80 | console.error('Error during service worker registration:', error);
81 | });
82 | }
83 |
84 | function checkValidServiceWorker(swUrl) {
85 | // Check if the service worker can be found. If it can't reload the page.
86 | fetch(swUrl)
87 | .then(response => {
88 | // Ensure service worker exists, and that we really are getting a JS file.
89 | if (
90 | response.status === 404 ||
91 | response.headers.get('content-type').indexOf('javascript') === -1
92 | ) {
93 | // No service worker found. Probably a different app. Reload the page.
94 | navigator.serviceWorker.ready.then(registration => {
95 | registration.unregister().then(() => {
96 | window.location.reload();
97 | });
98 | });
99 | } else {
100 | // Service worker found. Proceed as normal.
101 | registerValidSW(swUrl);
102 | }
103 | })
104 | .catch(() => {
105 | console.log(
106 | 'No internet connection found. App is running in offline mode.'
107 | );
108 | });
109 | }
110 |
111 | export function unregister() {
112 | if ('serviceWorker' in navigator) {
113 | navigator.serviceWorker.ready.then(registration => {
114 | registration.unregister();
115 | });
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/demo/client/src/store.js:
--------------------------------------------------------------------------------
1 | import { createStore, compose, applyMiddleware } from 'redux';
2 | import thunk from 'redux-thunk';
3 | import apiMiddleware from 'redux-devise-axios';
4 | import rootReducer from './reducers/index';
5 | import axios from 'axios';
6 |
7 | const options = { axios };
8 |
9 | const enhancers = compose(
10 | applyMiddleware(thunk, apiMiddleware(options)),
11 | window.devToolsExtension ? window.devToolsExtension() : f => f
12 | );
13 |
14 | const store = createStore(rootReducer, {}, enhancers);
15 |
16 | if (module.hot) {
17 | module.hot.accept('./reducers/', () => {
18 | const nextRootReducer = require('./reducers/index').default;
19 | store.replaceReducer(nextRootReducer);
20 | });
21 | }
22 |
23 | export default store;
24 |
--------------------------------------------------------------------------------
/demo/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require_relative 'config/environment'
4 |
5 | run Rails.application
6 |
--------------------------------------------------------------------------------
/demo/config/application.rb:
--------------------------------------------------------------------------------
1 | require_relative 'boot'
2 |
3 | require "rails"
4 | # Pick the frameworks you want:
5 | require "active_model/railtie"
6 | require "active_job/railtie"
7 | require "active_record/railtie"
8 | require "action_controller/railtie"
9 | require "action_mailer/railtie"
10 | require "action_view/railtie"
11 | require "action_cable/engine"
12 | # require "sprockets/railtie"
13 | # require "rails/test_unit/railtie"
14 |
15 | # Require the gems listed in Gemfile, including any gems
16 | # you've limited to :test, :development, or :production.
17 | Bundler.require(*Rails.groups)
18 |
19 | module Demo
20 | class Application < Rails::Application
21 | # Initialize configuration defaults for originally generated Rails version.
22 | config.load_defaults 5.1
23 |
24 | # Settings in config/environments/* take precedence over those specified here.
25 | # Application configuration should go into files in config/initializers
26 | # -- all .rb files in that directory are automatically loaded.
27 |
28 | # Only loads a smaller set of middleware suitable for API only apps.
29 | # Middleware like session, flash, cookies can be added back manually.
30 | # Skip views, helpers and assets when generating a new resource.
31 | config.api_only = true
32 | end
33 | end
34 |
--------------------------------------------------------------------------------
/demo/config/boot.rb:
--------------------------------------------------------------------------------
1 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
2 |
3 | require 'bundler/setup' # Set up gems listed in the Gemfile.
4 |
--------------------------------------------------------------------------------
/demo/config/cable.yml:
--------------------------------------------------------------------------------
1 | development:
2 | adapter: async
3 |
4 | test:
5 | adapter: async
6 |
7 | production:
8 | adapter: redis
9 | url: redis://localhost:6379/1
10 | channel_prefix: demo_production
11 |
--------------------------------------------------------------------------------
/demo/config/database.yml:
--------------------------------------------------------------------------------
1 | # PostgreSQL. Versions 9.1 and up are supported.
2 | #
3 | # Install the pg driver:
4 | # gem install pg
5 | # On OS X with Homebrew:
6 | # gem install pg -- --with-pg-config=/usr/local/bin/pg_config
7 | # On OS X with MacPorts:
8 | # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
9 | # On Windows:
10 | # gem install pg
11 | # Choose the win32 build.
12 | # Install PostgreSQL and put its /bin directory on your path.
13 | #
14 | # Configure Using Gemfile
15 | # gem 'pg'
16 | #
17 | default: &default
18 | adapter: postgresql
19 | encoding: unicode
20 | # For details on connection pooling, see Rails configuration guide
21 | # http://guides.rubyonrails.org/configuring.html#database-pooling
22 | pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
23 |
24 | development:
25 | <<: *default
26 | database: demo_development
27 |
28 | # The specified database role being used to connect to postgres.
29 | # To create additional roles in postgres see `$ createuser --help`.
30 | # When left blank, postgres will use the default role. This is
31 | # the same name as the operating system user that initialized the database.
32 | #username: demo
33 |
34 | # The password associated with the postgres role (username).
35 | #password:
36 |
37 | # Connect on a TCP socket. Omitted by default since the client uses a
38 | # domain socket that doesn't need configuration. Windows does not have
39 | # domain sockets, so uncomment these lines.
40 | #host: localhost
41 |
42 | # The TCP port the server listens on. Defaults to 5432.
43 | # If your server runs on a different port number, change accordingly.
44 | #port: 5432
45 |
46 | # Schema search path. The server defaults to $user,public
47 | #schema_search_path: myapp,sharedapp,public
48 |
49 | # Minimum log levels, in increasing order:
50 | # debug5, debug4, debug3, debug2, debug1,
51 | # log, notice, warning, error, fatal, and panic
52 | # Defaults to warning.
53 | #min_messages: notice
54 |
55 | # Warning: The database defined as "test" will be erased and
56 | # re-generated from your development database when you run "rake".
57 | # Do not set this db to the same as development or production.
58 | test:
59 | <<: *default
60 | database: demo_test
61 |
62 | # As with config/secrets.yml, you never want to store sensitive information,
63 | # like your database password, in your source code. If your source code is
64 | # ever seen by anyone, they now have access to your database.
65 | #
66 | # Instead, provide the password as a unix environment variable when you boot
67 | # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
68 | # for a full rundown on how to provide these environment variables in a
69 | # production deployment.
70 | #
71 | # On Heroku and other platform providers, you may have a full connection URL
72 | # available as an environment variable. For example:
73 | #
74 | # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
75 | #
76 | # You can use this database configuration with:
77 | #
78 | # production:
79 | # url: <%= ENV['DATABASE_URL'] %>
80 | #
81 | production:
82 | <<: *default
83 | database: demo_production
84 | username: demo
85 | password: <%= ENV['DEMO_DATABASE_PASSWORD'] %>
86 |
--------------------------------------------------------------------------------
/demo/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require_relative 'application'
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/demo/config/environments/development.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # In the development environment your application's code is reloaded on
5 | # every request. This slows down response time but is perfect for development
6 | # since you don't have to restart the web server when you make code changes.
7 | config.cache_classes = false
8 |
9 | # Do not eager load code on boot.
10 | config.eager_load = false
11 |
12 | # Show full error reports.
13 | config.consider_all_requests_local = true
14 |
15 | # Enable/disable caching. By default caching is disabled.
16 | if Rails.root.join('tmp/caching-dev.txt').exist?
17 | config.action_controller.perform_caching = true
18 |
19 | config.cache_store = :memory_store
20 | config.public_file_server.headers = {
21 | 'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}"
22 | }
23 | else
24 | config.action_controller.perform_caching = false
25 |
26 | config.cache_store = :null_store
27 | end
28 |
29 | # Don't care if the mailer can't send.
30 | config.action_mailer.raise_delivery_errors = false
31 |
32 | config.action_mailer.perform_caching = false
33 |
34 | # Print deprecation notices to the Rails logger.
35 | config.active_support.deprecation = :log
36 |
37 | # Raise an error on page load if there are pending migrations.
38 | config.active_record.migration_error = :page_load
39 |
40 |
41 | # Raises error for missing translations
42 | # config.action_view.raise_on_missing_translations = true
43 |
44 | # Use an evented file watcher to asynchronously detect changes in source code,
45 | # routes, locales, etc. This feature depends on the listen gem.
46 | config.file_watcher = ActiveSupport::EventedFileUpdateChecker
47 | end
48 |
--------------------------------------------------------------------------------
/demo/config/environments/production.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # Code is not reloaded between requests.
5 | config.cache_classes = true
6 |
7 | # Eager load code on boot. This eager loads most of Rails and
8 | # your application in memory, allowing both threaded web servers
9 | # and those relying on copy on write to perform better.
10 | # Rake tasks automatically ignore this option for performance.
11 | config.eager_load = true
12 |
13 | # Full error reports are disabled and caching is turned on.
14 | config.consider_all_requests_local = false
15 | config.action_controller.perform_caching = true
16 |
17 | # Attempt to read encrypted secrets from `config/secrets.yml.enc`.
18 | # Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or
19 | # `config/secrets.yml.key`.
20 | config.read_encrypted_secrets = true
21 |
22 | # Disable serving static files from the `/public` folder by default since
23 | # Apache or NGINX already handles this.
24 | config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
25 |
26 |
27 | # Enable serving of images, stylesheets, and JavaScripts from an asset server.
28 | # config.action_controller.asset_host = 'http://assets.example.com'
29 |
30 | # Specifies the header that your server uses for sending files.
31 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
32 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
33 |
34 | # Mount Action Cable outside main process or domain
35 | # config.action_cable.mount_path = nil
36 | # config.action_cable.url = 'wss://example.com/cable'
37 | # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
38 |
39 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
40 | # config.force_ssl = true
41 |
42 | # Use the lowest log level to ensure availability of diagnostic information
43 | # when problems arise.
44 | config.log_level = :debug
45 |
46 | # Prepend all log lines with the following tags.
47 | config.log_tags = [ :request_id ]
48 |
49 | # Use a different cache store in production.
50 | # config.cache_store = :mem_cache_store
51 |
52 | # Use a real queuing backend for Active Job (and separate queues per environment)
53 | # config.active_job.queue_adapter = :resque
54 | # config.active_job.queue_name_prefix = "demo_#{Rails.env}"
55 | config.action_mailer.perform_caching = false
56 |
57 | # Ignore bad email addresses and do not raise email delivery errors.
58 | # Set this to true and configure the email server for immediate delivery to raise delivery errors.
59 | # config.action_mailer.raise_delivery_errors = false
60 |
61 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
62 | # the I18n.default_locale when a translation cannot be found).
63 | config.i18n.fallbacks = true
64 |
65 | # Send deprecation notices to registered listeners.
66 | config.active_support.deprecation = :notify
67 |
68 | # Use default logging formatter so that PID and timestamp are not suppressed.
69 | config.log_formatter = ::Logger::Formatter.new
70 |
71 | # Use a different logger for distributed setups.
72 | # require 'syslog/logger'
73 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
74 |
75 | if ENV["RAILS_LOG_TO_STDOUT"].present?
76 | logger = ActiveSupport::Logger.new(STDOUT)
77 | logger.formatter = config.log_formatter
78 | config.logger = ActiveSupport::TaggedLogging.new(logger)
79 | end
80 |
81 | # Do not dump schema after migrations.
82 | config.active_record.dump_schema_after_migration = false
83 | end
84 |
--------------------------------------------------------------------------------
/demo/config/environments/test.rb:
--------------------------------------------------------------------------------
1 | Rails.application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb.
3 |
4 | # The test environment is used exclusively to run your application's
5 | # test suite. You never need to work with it otherwise. Remember that
6 | # your test database is "scratch space" for the test suite and is wiped
7 | # and recreated between test runs. Don't rely on the data there!
8 | config.cache_classes = true
9 |
10 | # Do not eager load code on boot. This avoids loading your whole application
11 | # just for the purpose of running a single test. If you are using a tool that
12 | # preloads Rails for running tests, you may have to set it to true.
13 | config.eager_load = false
14 |
15 | # Configure public file server for tests with Cache-Control for performance.
16 | config.public_file_server.enabled = true
17 | config.public_file_server.headers = {
18 | 'Cache-Control' => "public, max-age=#{1.hour.seconds.to_i}"
19 | }
20 |
21 | # Show full error reports and disable caching.
22 | config.consider_all_requests_local = true
23 | config.action_controller.perform_caching = false
24 |
25 | # Raise exceptions instead of rendering exception templates.
26 | config.action_dispatch.show_exceptions = false
27 |
28 | # Disable request forgery protection in test environment.
29 | config.action_controller.allow_forgery_protection = false
30 | config.action_mailer.perform_caching = false
31 |
32 | # Tell Action Mailer not to deliver emails to the real world.
33 | # The :test delivery method accumulates sent emails in the
34 | # ActionMailer::Base.deliveries array.
35 | config.action_mailer.delivery_method = :test
36 |
37 | # Print deprecation notices to the stderr.
38 | config.active_support.deprecation = :stderr
39 |
40 | # Raises error for missing translations
41 | # config.action_view.raise_on_missing_translations = true
42 | end
43 |
--------------------------------------------------------------------------------
/demo/config/initializers/application_controller_renderer.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # ActiveSupport::Reloader.to_prepare do
4 | # ApplicationController.renderer.defaults.merge!(
5 | # http_host: 'example.org',
6 | # https: false
7 | # )
8 | # end
9 |
--------------------------------------------------------------------------------
/demo/config/initializers/backtrace_silencers.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5 |
6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7 | # Rails.backtrace_cleaner.remove_silencers!
8 |
--------------------------------------------------------------------------------
/demo/config/initializers/cors.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Avoid CORS issues when API is called from the frontend app.
4 | # Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.
5 |
6 | # Read more: https://github.com/cyu/rack-cors
7 |
8 | # Rails.application.config.middleware.insert_before 0, Rack::Cors do
9 | # allow do
10 | # origins 'example.com'
11 | #
12 | # resource '*',
13 | # headers: :any,
14 | # methods: [:get, :post, :put, :patch, :delete, :options, :head]
15 | # end
16 | # end
17 |
--------------------------------------------------------------------------------
/demo/config/initializers/devise_token_auth.rb:
--------------------------------------------------------------------------------
1 | DeviseTokenAuth.setup do |config|
2 | # By default the authorization headers will change after each request. The
3 | # client is responsible for keeping track of the changing tokens. Change
4 | # this to false to prevent the Authorization header from changing after
5 | # each request.
6 | config.change_headers_on_each_request = true
7 |
8 | # By default, users will need to re-authenticate after 2 weeks. This setting
9 | # determines how long tokens will remain valid after they are issued.
10 | # config.token_lifespan = 2.weeks
11 |
12 | # Sets the max number of concurrent devices per user, which is 10 by default.
13 | # After this limit is reached, the oldest tokens will be removed.
14 | # config.max_number_of_devices = 10
15 |
16 | # Sometimes it's necessary to make several requests to the API at the same
17 | # time. In this case, each request in the batch will need to share the same
18 | # auth token. This setting determines how far apart the requests can be while
19 | # still using the same auth token.
20 | # config.batch_request_buffer_throttle = 5.seconds
21 |
22 | # This route will be the prefix for all oauth2 redirect callbacks. For
23 | # example, using the default '/omniauth', the github oauth2 provider will
24 | # redirect successful authentications to '/omniauth/github/callback'
25 | # config.omniauth_prefix = "/omniauth"
26 |
27 | # By default sending current password is not needed for the password update.
28 | # Uncomment to enforce current_password param to be checked before all
29 | # attribute updates. Set it to :password if you want it to be checked only if
30 | # password is updated.
31 | # config.check_current_password_before_update = :attributes
32 |
33 | # By default we will use callbacks for single omniauth.
34 | # It depends on fields like email, provider and uid.
35 | # config.default_callbacks = true
36 |
37 | # Makes it possible to change the headers names
38 | # config.headers_names = {:'access-token' => 'access-token',
39 | # :'client' => 'client',
40 | # :'expiry' => 'expiry',
41 | # :'uid' => 'uid',
42 | # :'token-type' => 'token-type' }
43 |
44 | # By default, only Bearer Token authentication is implemented out of the box.
45 | # If, however, you wish to integrate with legacy Devise authentication, you can
46 | # do so by enabling this flag. NOTE: This feature is highly experimental!
47 | # config.enable_standard_devise_support = false
48 | end
49 |
--------------------------------------------------------------------------------
/demo/config/initializers/filter_parameter_logging.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Configure sensitive parameters which will be filtered from the log file.
4 | Rails.application.config.filter_parameters += [:password]
5 |
--------------------------------------------------------------------------------
/demo/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format. Inflections
4 | # are locale specific, and you may define rules for as many different
5 | # locales as you wish. All of these examples are active by default:
6 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
7 | # inflect.plural /^(ox)$/i, '\1en'
8 | # inflect.singular /^(ox)en/i, '\1'
9 | # inflect.irregular 'person', 'people'
10 | # inflect.uncountable %w( fish sheep )
11 | # end
12 |
13 | # These inflection rules are supported but not enabled by default:
14 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
15 | # inflect.acronym 'RESTful'
16 | # end
17 |
--------------------------------------------------------------------------------
/demo/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 |
--------------------------------------------------------------------------------
/demo/config/initializers/wrap_parameters.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # This file contains settings for ActionController::ParamsWrapper which
4 | # is enabled by default.
5 |
6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7 | ActiveSupport.on_load(:action_controller) do
8 | wrap_parameters format: [:json]
9 | end
10 |
11 | # To enable root element in JSON for ActiveRecord objects.
12 | # ActiveSupport.on_load(:active_record) do
13 | # self.include_root_in_json = true
14 | # end
15 |
--------------------------------------------------------------------------------
/demo/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Files in the config/locales directory are used for internationalization
2 | # and are automatically loaded by Rails. If you want to use locales other
3 | # than English, add the necessary files in this directory.
4 | #
5 | # To use the locales, use `I18n.t`:
6 | #
7 | # I18n.t 'hello'
8 | #
9 | # In views, this is aliased to just `t`:
10 | #
11 | # <%= t('hello') %>
12 | #
13 | # To use a different locale, set it with `I18n.locale`:
14 | #
15 | # I18n.locale = :es
16 | #
17 | # This would use the information in config/locales/es.yml.
18 | #
19 | # The following keys must be escaped otherwise they will not be retrieved by
20 | # the default I18n backend:
21 | #
22 | # true, false, on, off, yes, no
23 | #
24 | # Instead, surround them with single quotes.
25 | #
26 | # en:
27 | # 'true': 'foo'
28 | #
29 | # To learn more, please read the Rails Internationalization guide
30 | # available at http://guides.rubyonrails.org/i18n.html.
31 |
32 | en:
33 | hello: "Hello world"
34 |
--------------------------------------------------------------------------------
/demo/config/puma.rb:
--------------------------------------------------------------------------------
1 | # Puma can serve each request in a thread from an internal thread pool.
2 | # The `threads` method setting takes two numbers: a minimum and maximum.
3 | # Any libraries that use thread pools should be configured to match
4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum
5 | # and maximum; this matches the default thread size of Active Record.
6 | #
7 | threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8 | threads threads_count, threads_count
9 |
10 | # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
11 | #
12 | port ENV.fetch("PORT") { 3000 }
13 |
14 | # Specifies the `environment` that Puma will run in.
15 | #
16 | environment ENV.fetch("RAILS_ENV") { "development" }
17 |
18 | # Specifies the number of `workers` to boot in clustered mode.
19 | # Workers are forked webserver processes. If using threads and workers together
20 | # the concurrency of the application would be max `threads` * `workers`.
21 | # Workers do not work on JRuby or Windows (both of which do not support
22 | # processes).
23 | #
24 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
25 |
26 | # Use the `preload_app!` method when specifying a `workers` number.
27 | # This directive tells Puma to first boot the application and load code
28 | # before forking the application. This takes advantage of Copy On Write
29 | # process behavior so workers use less memory. If you use this option
30 | # you need to make sure to reconnect any threads in the `on_worker_boot`
31 | # block.
32 | #
33 | # preload_app!
34 |
35 | # If you are preloading your application and using Active Record, it's
36 | # recommended that you close any connections to the database before workers
37 | # are forked to prevent connection leakage.
38 | #
39 | # before_fork do
40 | # ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord)
41 | # end
42 |
43 | # The code in the `on_worker_boot` will be called if you are using
44 | # clustered mode by specifying a number of `workers`. After each worker
45 | # process is booted, this block will be run. If you are using the `preload_app!`
46 | # option, you will want to use this block to reconnect to any threads
47 | # or connections that may have been created at application boot, as Ruby
48 | # cannot share connections between processes.
49 | #
50 | # on_worker_boot do
51 | # ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
52 | # end
53 | #
54 |
55 | # Allow puma to be restarted by `rails restart` command.
56 | plugin :tmp_restart
57 |
--------------------------------------------------------------------------------
/demo/config/routes.rb:
--------------------------------------------------------------------------------
1 | Rails.application.routes.draw do
2 | mount_devise_token_auth_for 'User', at: 'api/auth'
3 | namespace :api do
4 | get '/auth_test', to: 'auth_test#index'
5 | end
6 |
7 | #Do not place any routes below this one
8 | get '*other', to: 'static#index'
9 | end
10 |
--------------------------------------------------------------------------------
/demo/config/secrets.yml:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Your secret key is used for verifying the integrity of signed cookies.
4 | # If you change this key, all old signed cookies will become invalid!
5 |
6 | # Make sure the secret is at least 30 characters and all random,
7 | # no regular words or you'll be exposed to dictionary attacks.
8 | # You can use `rails secret` to generate a secure secret key.
9 |
10 | # Make sure the secrets in this file are kept private
11 | # if you're sharing your code publicly.
12 |
13 | # Shared secrets are available across all environments.
14 |
15 | # shared:
16 | # api_key: a1B2c3D4e5F6
17 |
18 | # Environmental secrets are only available for that specific environment.
19 |
20 | development:
21 | secret_key_base: d5d9eb74f03caa61b3ec54b6c1dd1086c558f3cca5889868718aeca09d3bcd399c775f3645e3390bffe8f9269f0cbc504da1662ad6e44641eea8ff95ec0cd705
22 |
23 | test:
24 | secret_key_base: bb4fbe9a24bd384a268acd5fb32706dd54345d314310d9b2556173eb79e77bb67ceab7cb8435ac6cf0c8fe735fd01c1e289a3703af932f746b9610229c63a787
25 |
26 | # Do not keep production secrets in the unencrypted secrets file.
27 | # Instead, either read values from the environment.
28 | # Or, use `bin/rails secrets:setup` to configure encrypted secrets
29 | # and move the `production:` environment over there.
30 |
31 | production:
32 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
33 |
--------------------------------------------------------------------------------
/demo/config/spring.rb:
--------------------------------------------------------------------------------
1 | %w(
2 | .ruby-version
3 | .rbenv-vars
4 | tmp/restart.txt
5 | tmp/caching-dev.txt
6 | ).each { |path| Spring.watch(path) }
7 |
--------------------------------------------------------------------------------
/demo/db/migrate/20180211191111_devise_token_auth_create_users.rb:
--------------------------------------------------------------------------------
1 | class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[5.1]
2 | def change
3 | create_table(:users) do |t|
4 | ## Required
5 | t.string :provider, :null => false, :default => "email"
6 | t.string :uid, :null => false, :default => ""
7 |
8 | ## Database authenticatable
9 | t.string :encrypted_password, :null => false, :default => ""
10 |
11 | ## Recoverable
12 | t.string :reset_password_token
13 | t.datetime :reset_password_sent_at
14 |
15 | ## Rememberable
16 | t.datetime :remember_created_at
17 |
18 | ## Trackable
19 | t.integer :sign_in_count, :default => 0, :null => false
20 | t.datetime :current_sign_in_at
21 | t.datetime :last_sign_in_at
22 | t.string :current_sign_in_ip
23 | t.string :last_sign_in_ip
24 |
25 | ## Confirmable
26 | t.string :confirmation_token
27 | t.datetime :confirmed_at
28 | t.datetime :confirmation_sent_at
29 | t.string :unconfirmed_email # Only if using reconfirmable
30 |
31 | ## Lockable
32 | # t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
33 | # t.string :unlock_token # Only if unlock strategy is :email or :both
34 | # t.datetime :locked_at
35 |
36 | ## User Info
37 | t.string :name
38 | t.string :nickname
39 | t.string :image
40 | t.string :email
41 |
42 | ## Tokens
43 | t.json :tokens
44 |
45 | t.timestamps
46 | end
47 |
48 | add_index :users, :email, unique: true
49 | add_index :users, [:uid, :provider], unique: true
50 | add_index :users, :reset_password_token, unique: true
51 | add_index :users, :confirmation_token, unique: true
52 | # add_index :users, :unlock_token, unique: true
53 | end
54 | end
55 |
--------------------------------------------------------------------------------
/demo/db/schema.rb:
--------------------------------------------------------------------------------
1 | # This file is auto-generated from the current state of the database. Instead
2 | # of editing this file, please use the migrations feature of Active Record to
3 | # incrementally modify your database, and then regenerate this schema definition.
4 | #
5 | # Note that this schema.rb definition is the authoritative source for your
6 | # database schema. If you need to create the application database on another
7 | # system, you should be using db:schema:load, not running all the migrations
8 | # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9 | # you'll amass, the slower it'll run and the greater likelihood for issues).
10 | #
11 | # It's strongly recommended that you check this file into your version control system.
12 |
13 | ActiveRecord::Schema.define(version: 20180211191111) do
14 |
15 | # These are extensions that must be enabled in order to support this database
16 | enable_extension "plpgsql"
17 |
18 | create_table "users", force: :cascade do |t|
19 | t.string "provider", default: "email", null: false
20 | t.string "uid", default: "", null: false
21 | t.string "encrypted_password", default: "", null: false
22 | t.string "reset_password_token"
23 | t.datetime "reset_password_sent_at"
24 | t.datetime "remember_created_at"
25 | t.integer "sign_in_count", default: 0, null: false
26 | t.datetime "current_sign_in_at"
27 | t.datetime "last_sign_in_at"
28 | t.string "current_sign_in_ip"
29 | t.string "last_sign_in_ip"
30 | t.string "confirmation_token"
31 | t.datetime "confirmed_at"
32 | t.datetime "confirmation_sent_at"
33 | t.string "unconfirmed_email"
34 | t.string "name"
35 | t.string "nickname"
36 | t.string "image"
37 | t.string "email"
38 | t.json "tokens"
39 | t.datetime "created_at", null: false
40 | t.datetime "updated_at", null: false
41 | t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
42 | t.index ["email"], name: "index_users_on_email", unique: true
43 | t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
44 | t.index ["uid", "provider"], name: "index_users_on_uid_and_provider", unique: true
45 | end
46 |
47 | end
48 |
--------------------------------------------------------------------------------
/demo/db/seeds.rb:
--------------------------------------------------------------------------------
1 | # This file should contain all the record creation needed to seed the database with its default values.
2 | # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
3 | #
4 | # Examples:
5 | #
6 | # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
7 | # Character.create(name: 'Luke', movie: movies.first)
8 |
--------------------------------------------------------------------------------
/demo/lib/tasks/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/lib/tasks/.keep
--------------------------------------------------------------------------------
/demo/log/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/log/.keep
--------------------------------------------------------------------------------
/demo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "create-repack-app",
3 | "version": "1.0.0",
4 | "scripts": {
5 | "build": "cd client && npm install --only=dev && npm install && npm run build && cd ..",
6 | "deploy": "cp -a client/build/. public/",
7 | "heroku-postbuild": "npm run build && npm run deploy && echo 'Client Built'"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC"
12 | }
13 |
--------------------------------------------------------------------------------
/demo/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2 |
--------------------------------------------------------------------------------
/demo/tmp/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/tmp/.keep
--------------------------------------------------------------------------------
/demo/vendor/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wdjungst/redux-devise-axios/461693530a650162c36709c34be3b0571f224366/demo/vendor/.keep
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "redux-devise-axios",
3 | "version": "0.0.4",
4 | "description": "Redux Middleware to help set axios headers when using Devise Token Auth",
5 | "main": "./dist/index.js",
6 | "author": "djungst",
7 | "homepage": "https://github.com/wdjungst/redux-devios-axios",
8 | "repository": {
9 | "type": "git",
10 | "url": "https://github.com/wdjungst/redux-devios-axios"
11 | },
12 | "scripts": {
13 | "build": "babel src --presets babel-preset-latest --out-dir dist",
14 | "prepublish": "npm run build"
15 | },
16 | "license": "ISC",
17 | "devDependencies": {
18 | "babel-cli": "^6.24.1",
19 | "babel-preset-latest": "^6.24.1"
20 | },
21 | "dependencies": {}
22 | }
23 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | let HEADERS = ['access-token', 'token-type', 'client', 'expiry', 'uid']
2 |
3 | const tokenMiddleware = args => store => next => action => {
4 | if (!action)
5 | action = { type: '' }
6 | let { customHeaders = [], validateAction = 'VALIDATE_TOKEN', logoutAction = 'LOGOUT', axios, native } = args;
7 | HEADERS = [...new Set([...HEADERS, ...customHeaders])]
8 | if (action.type === validateAction) {
9 | if (native)
10 | HEADERS.forEach( async (token) => axios.defaults.headers.common[token] = await AsyncStorage.getItem(token));
11 | else
12 | HEADERS.forEach( token => axios.defaults.headers.common[token] = localStorage.getItem(token));
13 | } else if (action.type === logoutAction) {
14 | if (native)
15 | HEADERS.forEach( async (token) => await AsyncStorage.removeItem(token));
16 | else
17 | HEADERS.forEach( token => localStorage.removeItem(token));
18 | } else {
19 | let { headers } = action;
20 | if (headers) {
21 | if(headers['access-token']) {
22 | if (native){
23 | HEADERS.forEach( async (token) => {
24 | axios.defaults.headers.common[token] = headers[token];
25 | await AsyncStorage.setItem(token, headers[token])
26 | })
27 | }
28 | else {
29 | HEADERS.forEach( token => {
30 | axios.defaults.headers.common[token] = headers[token];
31 | localStorage.setItem(token, headers[token])
32 | })
33 | }
34 | }
35 | }
36 | }
37 | return next(action)
38 | }
39 |
40 | export default tokenMiddleware
41 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | abbrev@1:
6 | version "1.1.0"
7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
8 |
9 | ajv@^4.9.1:
10 | version "4.11.8"
11 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
12 | dependencies:
13 | co "^4.6.0"
14 | json-stable-stringify "^1.0.1"
15 |
16 | ansi-regex@^2.0.0:
17 | version "2.1.1"
18 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
19 |
20 | ansi-styles@^2.2.1:
21 | version "2.2.1"
22 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
23 |
24 | anymatch@^1.3.0:
25 | version "1.3.0"
26 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
27 | dependencies:
28 | arrify "^1.0.0"
29 | micromatch "^2.1.5"
30 |
31 | aproba@^1.0.3:
32 | version "1.1.2"
33 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1"
34 |
35 | are-we-there-yet@~1.1.2:
36 | version "1.1.4"
37 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
38 | dependencies:
39 | delegates "^1.0.0"
40 | readable-stream "^2.0.6"
41 |
42 | arr-diff@^2.0.0:
43 | version "2.0.0"
44 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
45 | dependencies:
46 | arr-flatten "^1.0.1"
47 |
48 | arr-flatten@^1.0.1:
49 | version "1.0.3"
50 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
51 |
52 | array-unique@^0.2.1:
53 | version "0.2.1"
54 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
55 |
56 | arrify@^1.0.0:
57 | version "1.0.1"
58 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
59 |
60 | asn1@~0.2.3:
61 | version "0.2.3"
62 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
63 |
64 | assert-plus@1.0.0, assert-plus@^1.0.0:
65 | version "1.0.0"
66 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
67 |
68 | assert-plus@^0.2.0:
69 | version "0.2.0"
70 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
71 |
72 | async-each@^1.0.0:
73 | version "1.0.1"
74 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
75 |
76 | asynckit@^0.4.0:
77 | version "0.4.0"
78 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
79 |
80 | aws-sign2@~0.6.0:
81 | version "0.6.0"
82 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
83 |
84 | aws4@^1.2.1:
85 | version "1.6.0"
86 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
87 |
88 | babel-cli@^6.24.1:
89 | version "6.24.1"
90 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283"
91 | dependencies:
92 | babel-core "^6.24.1"
93 | babel-polyfill "^6.23.0"
94 | babel-register "^6.24.1"
95 | babel-runtime "^6.22.0"
96 | commander "^2.8.1"
97 | convert-source-map "^1.1.0"
98 | fs-readdir-recursive "^1.0.0"
99 | glob "^7.0.0"
100 | lodash "^4.2.0"
101 | output-file-sync "^1.1.0"
102 | path-is-absolute "^1.0.0"
103 | slash "^1.0.0"
104 | source-map "^0.5.0"
105 | v8flags "^2.0.10"
106 | optionalDependencies:
107 | chokidar "^1.6.1"
108 |
109 | babel-code-frame@^6.22.0:
110 | version "6.22.0"
111 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
112 | dependencies:
113 | chalk "^1.1.0"
114 | esutils "^2.0.2"
115 | js-tokens "^3.0.0"
116 |
117 | babel-core@^6.24.1:
118 | version "6.25.0"
119 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729"
120 | dependencies:
121 | babel-code-frame "^6.22.0"
122 | babel-generator "^6.25.0"
123 | babel-helpers "^6.24.1"
124 | babel-messages "^6.23.0"
125 | babel-register "^6.24.1"
126 | babel-runtime "^6.22.0"
127 | babel-template "^6.25.0"
128 | babel-traverse "^6.25.0"
129 | babel-types "^6.25.0"
130 | babylon "^6.17.2"
131 | convert-source-map "^1.1.0"
132 | debug "^2.1.1"
133 | json5 "^0.5.0"
134 | lodash "^4.2.0"
135 | minimatch "^3.0.2"
136 | path-is-absolute "^1.0.0"
137 | private "^0.1.6"
138 | slash "^1.0.0"
139 | source-map "^0.5.0"
140 |
141 | babel-generator@^6.25.0:
142 | version "6.25.0"
143 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc"
144 | dependencies:
145 | babel-messages "^6.23.0"
146 | babel-runtime "^6.22.0"
147 | babel-types "^6.25.0"
148 | detect-indent "^4.0.0"
149 | jsesc "^1.3.0"
150 | lodash "^4.2.0"
151 | source-map "^0.5.0"
152 | trim-right "^1.0.1"
153 |
154 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
155 | version "6.24.1"
156 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
157 | dependencies:
158 | babel-helper-explode-assignable-expression "^6.24.1"
159 | babel-runtime "^6.22.0"
160 | babel-types "^6.24.1"
161 |
162 | babel-helper-call-delegate@^6.24.1:
163 | version "6.24.1"
164 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
165 | dependencies:
166 | babel-helper-hoist-variables "^6.24.1"
167 | babel-runtime "^6.22.0"
168 | babel-traverse "^6.24.1"
169 | babel-types "^6.24.1"
170 |
171 | babel-helper-define-map@^6.24.1:
172 | version "6.24.1"
173 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080"
174 | dependencies:
175 | babel-helper-function-name "^6.24.1"
176 | babel-runtime "^6.22.0"
177 | babel-types "^6.24.1"
178 | lodash "^4.2.0"
179 |
180 | babel-helper-explode-assignable-expression@^6.24.1:
181 | version "6.24.1"
182 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
183 | dependencies:
184 | babel-runtime "^6.22.0"
185 | babel-traverse "^6.24.1"
186 | babel-types "^6.24.1"
187 |
188 | babel-helper-function-name@^6.24.1:
189 | version "6.24.1"
190 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
191 | dependencies:
192 | babel-helper-get-function-arity "^6.24.1"
193 | babel-runtime "^6.22.0"
194 | babel-template "^6.24.1"
195 | babel-traverse "^6.24.1"
196 | babel-types "^6.24.1"
197 |
198 | babel-helper-get-function-arity@^6.24.1:
199 | version "6.24.1"
200 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
201 | dependencies:
202 | babel-runtime "^6.22.0"
203 | babel-types "^6.24.1"
204 |
205 | babel-helper-hoist-variables@^6.24.1:
206 | version "6.24.1"
207 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
208 | dependencies:
209 | babel-runtime "^6.22.0"
210 | babel-types "^6.24.1"
211 |
212 | babel-helper-optimise-call-expression@^6.24.1:
213 | version "6.24.1"
214 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
215 | dependencies:
216 | babel-runtime "^6.22.0"
217 | babel-types "^6.24.1"
218 |
219 | babel-helper-regex@^6.24.1:
220 | version "6.24.1"
221 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8"
222 | dependencies:
223 | babel-runtime "^6.22.0"
224 | babel-types "^6.24.1"
225 | lodash "^4.2.0"
226 |
227 | babel-helper-remap-async-to-generator@^6.24.1:
228 | version "6.24.1"
229 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
230 | dependencies:
231 | babel-helper-function-name "^6.24.1"
232 | babel-runtime "^6.22.0"
233 | babel-template "^6.24.1"
234 | babel-traverse "^6.24.1"
235 | babel-types "^6.24.1"
236 |
237 | babel-helper-replace-supers@^6.24.1:
238 | version "6.24.1"
239 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
240 | dependencies:
241 | babel-helper-optimise-call-expression "^6.24.1"
242 | babel-messages "^6.23.0"
243 | babel-runtime "^6.22.0"
244 | babel-template "^6.24.1"
245 | babel-traverse "^6.24.1"
246 | babel-types "^6.24.1"
247 |
248 | babel-helpers@^6.24.1:
249 | version "6.24.1"
250 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
251 | dependencies:
252 | babel-runtime "^6.22.0"
253 | babel-template "^6.24.1"
254 |
255 | babel-messages@^6.23.0:
256 | version "6.23.0"
257 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
258 | dependencies:
259 | babel-runtime "^6.22.0"
260 |
261 | babel-plugin-check-es2015-constants@^6.22.0:
262 | version "6.22.0"
263 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
264 | dependencies:
265 | babel-runtime "^6.22.0"
266 |
267 | babel-plugin-syntax-async-functions@^6.8.0:
268 | version "6.13.0"
269 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
270 |
271 | babel-plugin-syntax-exponentiation-operator@^6.8.0:
272 | version "6.13.0"
273 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
274 |
275 | babel-plugin-syntax-trailing-function-commas@^6.22.0:
276 | version "6.22.0"
277 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
278 |
279 | babel-plugin-transform-async-to-generator@^6.24.1:
280 | version "6.24.1"
281 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
282 | dependencies:
283 | babel-helper-remap-async-to-generator "^6.24.1"
284 | babel-plugin-syntax-async-functions "^6.8.0"
285 | babel-runtime "^6.22.0"
286 |
287 | babel-plugin-transform-es2015-arrow-functions@^6.22.0:
288 | version "6.22.0"
289 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
290 | dependencies:
291 | babel-runtime "^6.22.0"
292 |
293 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
294 | version "6.22.0"
295 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
296 | dependencies:
297 | babel-runtime "^6.22.0"
298 |
299 | babel-plugin-transform-es2015-block-scoping@^6.24.1:
300 | version "6.24.1"
301 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576"
302 | dependencies:
303 | babel-runtime "^6.22.0"
304 | babel-template "^6.24.1"
305 | babel-traverse "^6.24.1"
306 | babel-types "^6.24.1"
307 | lodash "^4.2.0"
308 |
309 | babel-plugin-transform-es2015-classes@^6.24.1:
310 | version "6.24.1"
311 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
312 | dependencies:
313 | babel-helper-define-map "^6.24.1"
314 | babel-helper-function-name "^6.24.1"
315 | babel-helper-optimise-call-expression "^6.24.1"
316 | babel-helper-replace-supers "^6.24.1"
317 | babel-messages "^6.23.0"
318 | babel-runtime "^6.22.0"
319 | babel-template "^6.24.1"
320 | babel-traverse "^6.24.1"
321 | babel-types "^6.24.1"
322 |
323 | babel-plugin-transform-es2015-computed-properties@^6.24.1:
324 | version "6.24.1"
325 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
326 | dependencies:
327 | babel-runtime "^6.22.0"
328 | babel-template "^6.24.1"
329 |
330 | babel-plugin-transform-es2015-destructuring@^6.22.0:
331 | version "6.23.0"
332 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
333 | dependencies:
334 | babel-runtime "^6.22.0"
335 |
336 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
337 | version "6.24.1"
338 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
339 | dependencies:
340 | babel-runtime "^6.22.0"
341 | babel-types "^6.24.1"
342 |
343 | babel-plugin-transform-es2015-for-of@^6.22.0:
344 | version "6.23.0"
345 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
346 | dependencies:
347 | babel-runtime "^6.22.0"
348 |
349 | babel-plugin-transform-es2015-function-name@^6.24.1:
350 | version "6.24.1"
351 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
352 | dependencies:
353 | babel-helper-function-name "^6.24.1"
354 | babel-runtime "^6.22.0"
355 | babel-types "^6.24.1"
356 |
357 | babel-plugin-transform-es2015-literals@^6.22.0:
358 | version "6.22.0"
359 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
360 | dependencies:
361 | babel-runtime "^6.22.0"
362 |
363 | babel-plugin-transform-es2015-modules-amd@^6.24.1:
364 | version "6.24.1"
365 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
366 | dependencies:
367 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
368 | babel-runtime "^6.22.0"
369 | babel-template "^6.24.1"
370 |
371 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
372 | version "6.24.1"
373 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe"
374 | dependencies:
375 | babel-plugin-transform-strict-mode "^6.24.1"
376 | babel-runtime "^6.22.0"
377 | babel-template "^6.24.1"
378 | babel-types "^6.24.1"
379 |
380 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
381 | version "6.24.1"
382 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
383 | dependencies:
384 | babel-helper-hoist-variables "^6.24.1"
385 | babel-runtime "^6.22.0"
386 | babel-template "^6.24.1"
387 |
388 | babel-plugin-transform-es2015-modules-umd@^6.24.1:
389 | version "6.24.1"
390 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
391 | dependencies:
392 | babel-plugin-transform-es2015-modules-amd "^6.24.1"
393 | babel-runtime "^6.22.0"
394 | babel-template "^6.24.1"
395 |
396 | babel-plugin-transform-es2015-object-super@^6.24.1:
397 | version "6.24.1"
398 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
399 | dependencies:
400 | babel-helper-replace-supers "^6.24.1"
401 | babel-runtime "^6.22.0"
402 |
403 | babel-plugin-transform-es2015-parameters@^6.24.1:
404 | version "6.24.1"
405 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
406 | dependencies:
407 | babel-helper-call-delegate "^6.24.1"
408 | babel-helper-get-function-arity "^6.24.1"
409 | babel-runtime "^6.22.0"
410 | babel-template "^6.24.1"
411 | babel-traverse "^6.24.1"
412 | babel-types "^6.24.1"
413 |
414 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
415 | version "6.24.1"
416 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
417 | dependencies:
418 | babel-runtime "^6.22.0"
419 | babel-types "^6.24.1"
420 |
421 | babel-plugin-transform-es2015-spread@^6.22.0:
422 | version "6.22.0"
423 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
424 | dependencies:
425 | babel-runtime "^6.22.0"
426 |
427 | babel-plugin-transform-es2015-sticky-regex@^6.24.1:
428 | version "6.24.1"
429 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
430 | dependencies:
431 | babel-helper-regex "^6.24.1"
432 | babel-runtime "^6.22.0"
433 | babel-types "^6.24.1"
434 |
435 | babel-plugin-transform-es2015-template-literals@^6.22.0:
436 | version "6.22.0"
437 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
438 | dependencies:
439 | babel-runtime "^6.22.0"
440 |
441 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
442 | version "6.23.0"
443 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
444 | dependencies:
445 | babel-runtime "^6.22.0"
446 |
447 | babel-plugin-transform-es2015-unicode-regex@^6.24.1:
448 | version "6.24.1"
449 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
450 | dependencies:
451 | babel-helper-regex "^6.24.1"
452 | babel-runtime "^6.22.0"
453 | regexpu-core "^2.0.0"
454 |
455 | babel-plugin-transform-exponentiation-operator@^6.24.1:
456 | version "6.24.1"
457 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
458 | dependencies:
459 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
460 | babel-plugin-syntax-exponentiation-operator "^6.8.0"
461 | babel-runtime "^6.22.0"
462 |
463 | babel-plugin-transform-regenerator@^6.24.1:
464 | version "6.24.1"
465 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418"
466 | dependencies:
467 | regenerator-transform "0.9.11"
468 |
469 | babel-plugin-transform-strict-mode@^6.24.1:
470 | version "6.24.1"
471 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
472 | dependencies:
473 | babel-runtime "^6.22.0"
474 | babel-types "^6.24.1"
475 |
476 | babel-polyfill@^6.23.0:
477 | version "6.23.0"
478 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
479 | dependencies:
480 | babel-runtime "^6.22.0"
481 | core-js "^2.4.0"
482 | regenerator-runtime "^0.10.0"
483 |
484 | babel-preset-es2015@^6.24.1:
485 | version "6.24.1"
486 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
487 | dependencies:
488 | babel-plugin-check-es2015-constants "^6.22.0"
489 | babel-plugin-transform-es2015-arrow-functions "^6.22.0"
490 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
491 | babel-plugin-transform-es2015-block-scoping "^6.24.1"
492 | babel-plugin-transform-es2015-classes "^6.24.1"
493 | babel-plugin-transform-es2015-computed-properties "^6.24.1"
494 | babel-plugin-transform-es2015-destructuring "^6.22.0"
495 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
496 | babel-plugin-transform-es2015-for-of "^6.22.0"
497 | babel-plugin-transform-es2015-function-name "^6.24.1"
498 | babel-plugin-transform-es2015-literals "^6.22.0"
499 | babel-plugin-transform-es2015-modules-amd "^6.24.1"
500 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
501 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
502 | babel-plugin-transform-es2015-modules-umd "^6.24.1"
503 | babel-plugin-transform-es2015-object-super "^6.24.1"
504 | babel-plugin-transform-es2015-parameters "^6.24.1"
505 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
506 | babel-plugin-transform-es2015-spread "^6.22.0"
507 | babel-plugin-transform-es2015-sticky-regex "^6.24.1"
508 | babel-plugin-transform-es2015-template-literals "^6.22.0"
509 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
510 | babel-plugin-transform-es2015-unicode-regex "^6.24.1"
511 | babel-plugin-transform-regenerator "^6.24.1"
512 |
513 | babel-preset-es2016@^6.24.1:
514 | version "6.24.1"
515 | resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz#f900bf93e2ebc0d276df9b8ab59724ebfd959f8b"
516 | dependencies:
517 | babel-plugin-transform-exponentiation-operator "^6.24.1"
518 |
519 | babel-preset-es2017@^6.24.1:
520 | version "6.24.1"
521 | resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz#597beadfb9f7f208bcfd8a12e9b2b29b8b2f14d1"
522 | dependencies:
523 | babel-plugin-syntax-trailing-function-commas "^6.22.0"
524 | babel-plugin-transform-async-to-generator "^6.24.1"
525 |
526 | babel-preset-latest@^6.24.1:
527 | version "6.24.1"
528 | resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz#677de069154a7485c2d25c577c02f624b85b85e8"
529 | dependencies:
530 | babel-preset-es2015 "^6.24.1"
531 | babel-preset-es2016 "^6.24.1"
532 | babel-preset-es2017 "^6.24.1"
533 |
534 | babel-register@^6.24.1:
535 | version "6.24.1"
536 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f"
537 | dependencies:
538 | babel-core "^6.24.1"
539 | babel-runtime "^6.22.0"
540 | core-js "^2.4.0"
541 | home-or-tmp "^2.0.0"
542 | lodash "^4.2.0"
543 | mkdirp "^0.5.1"
544 | source-map-support "^0.4.2"
545 |
546 | babel-runtime@^6.18.0, babel-runtime@^6.22.0:
547 | version "6.23.0"
548 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
549 | dependencies:
550 | core-js "^2.4.0"
551 | regenerator-runtime "^0.10.0"
552 |
553 | babel-template@^6.24.1, babel-template@^6.25.0:
554 | version "6.25.0"
555 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071"
556 | dependencies:
557 | babel-runtime "^6.22.0"
558 | babel-traverse "^6.25.0"
559 | babel-types "^6.25.0"
560 | babylon "^6.17.2"
561 | lodash "^4.2.0"
562 |
563 | babel-traverse@^6.24.1, babel-traverse@^6.25.0:
564 | version "6.25.0"
565 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1"
566 | dependencies:
567 | babel-code-frame "^6.22.0"
568 | babel-messages "^6.23.0"
569 | babel-runtime "^6.22.0"
570 | babel-types "^6.25.0"
571 | babylon "^6.17.2"
572 | debug "^2.2.0"
573 | globals "^9.0.0"
574 | invariant "^2.2.0"
575 | lodash "^4.2.0"
576 |
577 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.25.0:
578 | version "6.25.0"
579 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e"
580 | dependencies:
581 | babel-runtime "^6.22.0"
582 | esutils "^2.0.2"
583 | lodash "^4.2.0"
584 | to-fast-properties "^1.0.1"
585 |
586 | babylon@^6.17.2:
587 | version "6.17.4"
588 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a"
589 |
590 | balanced-match@^1.0.0:
591 | version "1.0.0"
592 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
593 |
594 | bcrypt-pbkdf@^1.0.0:
595 | version "1.0.1"
596 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
597 | dependencies:
598 | tweetnacl "^0.14.3"
599 |
600 | binary-extensions@^1.0.0:
601 | version "1.8.0"
602 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
603 |
604 | block-stream@*:
605 | version "0.0.9"
606 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
607 | dependencies:
608 | inherits "~2.0.0"
609 |
610 | boom@2.x.x:
611 | version "2.10.1"
612 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
613 | dependencies:
614 | hoek "2.x.x"
615 |
616 | brace-expansion@^1.1.7:
617 | version "1.1.8"
618 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
619 | dependencies:
620 | balanced-match "^1.0.0"
621 | concat-map "0.0.1"
622 |
623 | braces@^1.8.2:
624 | version "1.8.5"
625 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
626 | dependencies:
627 | expand-range "^1.8.1"
628 | preserve "^0.2.0"
629 | repeat-element "^1.1.2"
630 |
631 | caseless@~0.12.0:
632 | version "0.12.0"
633 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
634 |
635 | chalk@^1.1.0:
636 | version "1.1.3"
637 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
638 | dependencies:
639 | ansi-styles "^2.2.1"
640 | escape-string-regexp "^1.0.2"
641 | has-ansi "^2.0.0"
642 | strip-ansi "^3.0.0"
643 | supports-color "^2.0.0"
644 |
645 | chokidar@^1.6.1:
646 | version "1.7.0"
647 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
648 | dependencies:
649 | anymatch "^1.3.0"
650 | async-each "^1.0.0"
651 | glob-parent "^2.0.0"
652 | inherits "^2.0.1"
653 | is-binary-path "^1.0.0"
654 | is-glob "^2.0.0"
655 | path-is-absolute "^1.0.0"
656 | readdirp "^2.0.0"
657 | optionalDependencies:
658 | fsevents "^1.0.0"
659 |
660 | co@^4.6.0:
661 | version "4.6.0"
662 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
663 |
664 | code-point-at@^1.0.0:
665 | version "1.1.0"
666 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
667 |
668 | combined-stream@^1.0.5, combined-stream@~1.0.5:
669 | version "1.0.5"
670 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
671 | dependencies:
672 | delayed-stream "~1.0.0"
673 |
674 | commander@^2.8.1:
675 | version "2.10.0"
676 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.10.0.tgz#e1f5d3245de246d1a5ca04702fa1ad1bd7e405fe"
677 | dependencies:
678 | graceful-readlink ">= 1.0.0"
679 |
680 | concat-map@0.0.1:
681 | version "0.0.1"
682 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
683 |
684 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
685 | version "1.1.0"
686 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
687 |
688 | convert-source-map@^1.1.0:
689 | version "1.5.0"
690 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
691 |
692 | core-js@^2.4.0:
693 | version "2.4.1"
694 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
695 |
696 | core-util-is@~1.0.0:
697 | version "1.0.2"
698 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
699 |
700 | cryptiles@2.x.x:
701 | version "2.0.5"
702 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
703 | dependencies:
704 | boom "2.x.x"
705 |
706 | dashdash@^1.12.0:
707 | version "1.14.1"
708 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
709 | dependencies:
710 | assert-plus "^1.0.0"
711 |
712 | debug@^2.1.1, debug@^2.2.0:
713 | version "2.6.8"
714 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
715 | dependencies:
716 | ms "2.0.0"
717 |
718 | deep-extend@~0.4.0:
719 | version "0.4.2"
720 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
721 |
722 | delayed-stream@~1.0.0:
723 | version "1.0.0"
724 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
725 |
726 | delegates@^1.0.0:
727 | version "1.0.0"
728 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
729 |
730 | detect-indent@^4.0.0:
731 | version "4.0.0"
732 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
733 | dependencies:
734 | repeating "^2.0.0"
735 |
736 | ecc-jsbn@~0.1.1:
737 | version "0.1.1"
738 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
739 | dependencies:
740 | jsbn "~0.1.0"
741 |
742 | escape-string-regexp@^1.0.2:
743 | version "1.0.5"
744 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
745 |
746 | esutils@^2.0.2:
747 | version "2.0.2"
748 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
749 |
750 | expand-brackets@^0.1.4:
751 | version "0.1.5"
752 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
753 | dependencies:
754 | is-posix-bracket "^0.1.0"
755 |
756 | expand-range@^1.8.1:
757 | version "1.8.2"
758 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
759 | dependencies:
760 | fill-range "^2.1.0"
761 |
762 | extend@~3.0.0:
763 | version "3.0.1"
764 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
765 |
766 | extglob@^0.3.1:
767 | version "0.3.2"
768 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
769 | dependencies:
770 | is-extglob "^1.0.0"
771 |
772 | extsprintf@1.0.2:
773 | version "1.0.2"
774 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
775 |
776 | filename-regex@^2.0.0:
777 | version "2.0.1"
778 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
779 |
780 | fill-range@^2.1.0:
781 | version "2.2.3"
782 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
783 | dependencies:
784 | is-number "^2.1.0"
785 | isobject "^2.0.0"
786 | randomatic "^1.1.3"
787 | repeat-element "^1.1.2"
788 | repeat-string "^1.5.2"
789 |
790 | for-in@^1.0.1:
791 | version "1.0.2"
792 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
793 |
794 | for-own@^0.1.4:
795 | version "0.1.5"
796 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
797 | dependencies:
798 | for-in "^1.0.1"
799 |
800 | forever-agent@~0.6.1:
801 | version "0.6.1"
802 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
803 |
804 | form-data@~2.1.1:
805 | version "2.1.4"
806 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
807 | dependencies:
808 | asynckit "^0.4.0"
809 | combined-stream "^1.0.5"
810 | mime-types "^2.1.12"
811 |
812 | fs-readdir-recursive@^1.0.0:
813 | version "1.0.0"
814 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
815 |
816 | fs.realpath@^1.0.0:
817 | version "1.0.0"
818 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
819 |
820 | fsevents@^1.0.0:
821 | version "1.1.2"
822 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
823 | dependencies:
824 | nan "^2.3.0"
825 | node-pre-gyp "^0.6.36"
826 |
827 | fstream-ignore@^1.0.5:
828 | version "1.0.5"
829 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
830 | dependencies:
831 | fstream "^1.0.0"
832 | inherits "2"
833 | minimatch "^3.0.0"
834 |
835 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
836 | version "1.0.11"
837 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
838 | dependencies:
839 | graceful-fs "^4.1.2"
840 | inherits "~2.0.0"
841 | mkdirp ">=0.5 0"
842 | rimraf "2"
843 |
844 | gauge@~2.7.3:
845 | version "2.7.4"
846 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
847 | dependencies:
848 | aproba "^1.0.3"
849 | console-control-strings "^1.0.0"
850 | has-unicode "^2.0.0"
851 | object-assign "^4.1.0"
852 | signal-exit "^3.0.0"
853 | string-width "^1.0.1"
854 | strip-ansi "^3.0.1"
855 | wide-align "^1.1.0"
856 |
857 | getpass@^0.1.1:
858 | version "0.1.7"
859 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
860 | dependencies:
861 | assert-plus "^1.0.0"
862 |
863 | glob-base@^0.3.0:
864 | version "0.3.0"
865 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
866 | dependencies:
867 | glob-parent "^2.0.0"
868 | is-glob "^2.0.0"
869 |
870 | glob-parent@^2.0.0:
871 | version "2.0.0"
872 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
873 | dependencies:
874 | is-glob "^2.0.0"
875 |
876 | glob@^7.0.0, glob@^7.0.5:
877 | version "7.1.2"
878 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
879 | dependencies:
880 | fs.realpath "^1.0.0"
881 | inflight "^1.0.4"
882 | inherits "2"
883 | minimatch "^3.0.4"
884 | once "^1.3.0"
885 | path-is-absolute "^1.0.0"
886 |
887 | globals@^9.0.0:
888 | version "9.18.0"
889 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
890 |
891 | graceful-fs@^4.1.2, graceful-fs@^4.1.4:
892 | version "4.1.11"
893 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
894 |
895 | "graceful-readlink@>= 1.0.0":
896 | version "1.0.1"
897 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
898 |
899 | har-schema@^1.0.5:
900 | version "1.0.5"
901 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
902 |
903 | har-validator@~4.2.1:
904 | version "4.2.1"
905 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
906 | dependencies:
907 | ajv "^4.9.1"
908 | har-schema "^1.0.5"
909 |
910 | has-ansi@^2.0.0:
911 | version "2.0.0"
912 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
913 | dependencies:
914 | ansi-regex "^2.0.0"
915 |
916 | has-unicode@^2.0.0:
917 | version "2.0.1"
918 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
919 |
920 | hawk@~3.1.3:
921 | version "3.1.3"
922 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
923 | dependencies:
924 | boom "2.x.x"
925 | cryptiles "2.x.x"
926 | hoek "2.x.x"
927 | sntp "1.x.x"
928 |
929 | hoek@2.x.x:
930 | version "2.16.3"
931 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
932 |
933 | home-or-tmp@^2.0.0:
934 | version "2.0.0"
935 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
936 | dependencies:
937 | os-homedir "^1.0.0"
938 | os-tmpdir "^1.0.1"
939 |
940 | http-signature@~1.1.0:
941 | version "1.1.1"
942 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
943 | dependencies:
944 | assert-plus "^0.2.0"
945 | jsprim "^1.2.2"
946 | sshpk "^1.7.0"
947 |
948 | inflight@^1.0.4:
949 | version "1.0.6"
950 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
951 | dependencies:
952 | once "^1.3.0"
953 | wrappy "1"
954 |
955 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3:
956 | version "2.0.3"
957 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
958 |
959 | ini@~1.3.0:
960 | version "1.3.4"
961 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
962 |
963 | invariant@^2.2.0:
964 | version "2.2.2"
965 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
966 | dependencies:
967 | loose-envify "^1.0.0"
968 |
969 | is-binary-path@^1.0.0:
970 | version "1.0.1"
971 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
972 | dependencies:
973 | binary-extensions "^1.0.0"
974 |
975 | is-buffer@^1.1.5:
976 | version "1.1.5"
977 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
978 |
979 | is-dotfile@^1.0.0:
980 | version "1.0.3"
981 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
982 |
983 | is-equal-shallow@^0.1.3:
984 | version "0.1.3"
985 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
986 | dependencies:
987 | is-primitive "^2.0.0"
988 |
989 | is-extendable@^0.1.1:
990 | version "0.1.1"
991 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
992 |
993 | is-extglob@^1.0.0:
994 | version "1.0.0"
995 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
996 |
997 | is-finite@^1.0.0:
998 | version "1.0.2"
999 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1000 | dependencies:
1001 | number-is-nan "^1.0.0"
1002 |
1003 | is-fullwidth-code-point@^1.0.0:
1004 | version "1.0.0"
1005 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1006 | dependencies:
1007 | number-is-nan "^1.0.0"
1008 |
1009 | is-glob@^2.0.0, is-glob@^2.0.1:
1010 | version "2.0.1"
1011 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
1012 | dependencies:
1013 | is-extglob "^1.0.0"
1014 |
1015 | is-number@^2.1.0:
1016 | version "2.1.0"
1017 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
1018 | dependencies:
1019 | kind-of "^3.0.2"
1020 |
1021 | is-number@^3.0.0:
1022 | version "3.0.0"
1023 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
1024 | dependencies:
1025 | kind-of "^3.0.2"
1026 |
1027 | is-posix-bracket@^0.1.0:
1028 | version "0.1.1"
1029 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
1030 |
1031 | is-primitive@^2.0.0:
1032 | version "2.0.0"
1033 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
1034 |
1035 | is-typedarray@~1.0.0:
1036 | version "1.0.0"
1037 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1038 |
1039 | isarray@1.0.0, isarray@~1.0.0:
1040 | version "1.0.0"
1041 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1042 |
1043 | isobject@^2.0.0:
1044 | version "2.1.0"
1045 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1046 | dependencies:
1047 | isarray "1.0.0"
1048 |
1049 | isstream@~0.1.2:
1050 | version "0.1.2"
1051 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1052 |
1053 | js-tokens@^3.0.0:
1054 | version "3.0.2"
1055 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1056 |
1057 | jsbn@~0.1.0:
1058 | version "0.1.1"
1059 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1060 |
1061 | jsesc@^1.3.0:
1062 | version "1.3.0"
1063 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
1064 |
1065 | jsesc@~0.5.0:
1066 | version "0.5.0"
1067 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1068 |
1069 | json-schema@0.2.3:
1070 | version "0.2.3"
1071 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1072 |
1073 | json-stable-stringify@^1.0.1:
1074 | version "1.0.1"
1075 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
1076 | dependencies:
1077 | jsonify "~0.0.0"
1078 |
1079 | json-stringify-safe@~5.0.1:
1080 | version "5.0.1"
1081 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1082 |
1083 | json5@^0.5.0:
1084 | version "0.5.1"
1085 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
1086 |
1087 | jsonify@~0.0.0:
1088 | version "0.0.0"
1089 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
1090 |
1091 | jsprim@^1.2.2:
1092 | version "1.4.0"
1093 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
1094 | dependencies:
1095 | assert-plus "1.0.0"
1096 | extsprintf "1.0.2"
1097 | json-schema "0.2.3"
1098 | verror "1.3.6"
1099 |
1100 | kind-of@^3.0.2:
1101 | version "3.2.2"
1102 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1103 | dependencies:
1104 | is-buffer "^1.1.5"
1105 |
1106 | kind-of@^4.0.0:
1107 | version "4.0.0"
1108 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
1109 | dependencies:
1110 | is-buffer "^1.1.5"
1111 |
1112 | lodash@^4.2.0:
1113 | version "4.17.4"
1114 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
1115 |
1116 | loose-envify@^1.0.0:
1117 | version "1.3.1"
1118 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
1119 | dependencies:
1120 | js-tokens "^3.0.0"
1121 |
1122 | micromatch@^2.1.5:
1123 | version "2.3.11"
1124 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
1125 | dependencies:
1126 | arr-diff "^2.0.0"
1127 | array-unique "^0.2.1"
1128 | braces "^1.8.2"
1129 | expand-brackets "^0.1.4"
1130 | extglob "^0.3.1"
1131 | filename-regex "^2.0.0"
1132 | is-extglob "^1.0.0"
1133 | is-glob "^2.0.1"
1134 | kind-of "^3.0.2"
1135 | normalize-path "^2.0.1"
1136 | object.omit "^2.0.0"
1137 | parse-glob "^3.0.4"
1138 | regex-cache "^0.4.2"
1139 |
1140 | mime-db@~1.27.0:
1141 | version "1.27.0"
1142 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
1143 |
1144 | mime-types@^2.1.12, mime-types@~2.1.7:
1145 | version "2.1.15"
1146 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
1147 | dependencies:
1148 | mime-db "~1.27.0"
1149 |
1150 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
1151 | version "3.0.4"
1152 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1153 | dependencies:
1154 | brace-expansion "^1.1.7"
1155 |
1156 | minimist@0.0.8:
1157 | version "0.0.8"
1158 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1159 |
1160 | minimist@^1.2.0:
1161 | version "1.2.0"
1162 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1163 |
1164 | "mkdirp@>=0.5 0", mkdirp@^0.5.1:
1165 | version "0.5.1"
1166 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1167 | dependencies:
1168 | minimist "0.0.8"
1169 |
1170 | ms@2.0.0:
1171 | version "2.0.0"
1172 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1173 |
1174 | nan@^2.3.0:
1175 | version "2.6.2"
1176 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
1177 |
1178 | node-pre-gyp@^0.6.36:
1179 | version "0.6.36"
1180 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786"
1181 | dependencies:
1182 | mkdirp "^0.5.1"
1183 | nopt "^4.0.1"
1184 | npmlog "^4.0.2"
1185 | rc "^1.1.7"
1186 | request "^2.81.0"
1187 | rimraf "^2.6.1"
1188 | semver "^5.3.0"
1189 | tar "^2.2.1"
1190 | tar-pack "^3.4.0"
1191 |
1192 | nopt@^4.0.1:
1193 | version "4.0.1"
1194 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
1195 | dependencies:
1196 | abbrev "1"
1197 | osenv "^0.1.4"
1198 |
1199 | normalize-path@^2.0.1:
1200 | version "2.1.1"
1201 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
1202 | dependencies:
1203 | remove-trailing-separator "^1.0.1"
1204 |
1205 | npmlog@^4.0.2:
1206 | version "4.1.2"
1207 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1208 | dependencies:
1209 | are-we-there-yet "~1.1.2"
1210 | console-control-strings "~1.1.0"
1211 | gauge "~2.7.3"
1212 | set-blocking "~2.0.0"
1213 |
1214 | number-is-nan@^1.0.0:
1215 | version "1.0.1"
1216 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1217 |
1218 | oauth-sign@~0.8.1:
1219 | version "0.8.2"
1220 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
1221 |
1222 | object-assign@^4.1.0:
1223 | version "4.1.1"
1224 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1225 |
1226 | object.omit@^2.0.0:
1227 | version "2.0.1"
1228 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
1229 | dependencies:
1230 | for-own "^0.1.4"
1231 | is-extendable "^0.1.1"
1232 |
1233 | once@^1.3.0, once@^1.3.3:
1234 | version "1.4.0"
1235 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1236 | dependencies:
1237 | wrappy "1"
1238 |
1239 | os-homedir@^1.0.0:
1240 | version "1.0.2"
1241 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1242 |
1243 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
1244 | version "1.0.2"
1245 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1246 |
1247 | osenv@^0.1.4:
1248 | version "0.1.4"
1249 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
1250 | dependencies:
1251 | os-homedir "^1.0.0"
1252 | os-tmpdir "^1.0.0"
1253 |
1254 | output-file-sync@^1.1.0:
1255 | version "1.1.2"
1256 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
1257 | dependencies:
1258 | graceful-fs "^4.1.4"
1259 | mkdirp "^0.5.1"
1260 | object-assign "^4.1.0"
1261 |
1262 | parse-glob@^3.0.4:
1263 | version "3.0.4"
1264 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
1265 | dependencies:
1266 | glob-base "^0.3.0"
1267 | is-dotfile "^1.0.0"
1268 | is-extglob "^1.0.0"
1269 | is-glob "^2.0.0"
1270 |
1271 | path-is-absolute@^1.0.0:
1272 | version "1.0.1"
1273 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1274 |
1275 | performance-now@^0.2.0:
1276 | version "0.2.0"
1277 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
1278 |
1279 | preserve@^0.2.0:
1280 | version "0.2.0"
1281 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1282 |
1283 | private@^0.1.6:
1284 | version "0.1.7"
1285 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
1286 |
1287 | process-nextick-args@~1.0.6:
1288 | version "1.0.7"
1289 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1290 |
1291 | punycode@^1.4.1:
1292 | version "1.4.1"
1293 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1294 |
1295 | qs@~6.4.0:
1296 | version "6.4.0"
1297 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
1298 |
1299 | randomatic@^1.1.3:
1300 | version "1.1.7"
1301 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
1302 | dependencies:
1303 | is-number "^3.0.0"
1304 | kind-of "^4.0.0"
1305 |
1306 | rc@^1.1.7:
1307 | version "1.2.1"
1308 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
1309 | dependencies:
1310 | deep-extend "~0.4.0"
1311 | ini "~1.3.0"
1312 | minimist "^1.2.0"
1313 | strip-json-comments "~2.0.1"
1314 |
1315 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4:
1316 | version "2.3.3"
1317 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
1318 | dependencies:
1319 | core-util-is "~1.0.0"
1320 | inherits "~2.0.3"
1321 | isarray "~1.0.0"
1322 | process-nextick-args "~1.0.6"
1323 | safe-buffer "~5.1.1"
1324 | string_decoder "~1.0.3"
1325 | util-deprecate "~1.0.1"
1326 |
1327 | readdirp@^2.0.0:
1328 | version "2.1.0"
1329 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
1330 | dependencies:
1331 | graceful-fs "^4.1.2"
1332 | minimatch "^3.0.2"
1333 | readable-stream "^2.0.2"
1334 | set-immediate-shim "^1.0.1"
1335 |
1336 | regenerate@^1.2.1:
1337 | version "1.3.2"
1338 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
1339 |
1340 | regenerator-runtime@^0.10.0:
1341 | version "0.10.5"
1342 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
1343 |
1344 | regenerator-transform@0.9.11:
1345 | version "0.9.11"
1346 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283"
1347 | dependencies:
1348 | babel-runtime "^6.18.0"
1349 | babel-types "^6.19.0"
1350 | private "^0.1.6"
1351 |
1352 | regex-cache@^0.4.2:
1353 | version "0.4.3"
1354 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
1355 | dependencies:
1356 | is-equal-shallow "^0.1.3"
1357 | is-primitive "^2.0.0"
1358 |
1359 | regexpu-core@^2.0.0:
1360 | version "2.0.0"
1361 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
1362 | dependencies:
1363 | regenerate "^1.2.1"
1364 | regjsgen "^0.2.0"
1365 | regjsparser "^0.1.4"
1366 |
1367 | regjsgen@^0.2.0:
1368 | version "0.2.0"
1369 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
1370 |
1371 | regjsparser@^0.1.4:
1372 | version "0.1.5"
1373 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
1374 | dependencies:
1375 | jsesc "~0.5.0"
1376 |
1377 | remove-trailing-separator@^1.0.1:
1378 | version "1.0.2"
1379 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511"
1380 |
1381 | repeat-element@^1.1.2:
1382 | version "1.1.2"
1383 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
1384 |
1385 | repeat-string@^1.5.2:
1386 | version "1.6.1"
1387 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1388 |
1389 | repeating@^2.0.0:
1390 | version "2.0.1"
1391 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
1392 | dependencies:
1393 | is-finite "^1.0.0"
1394 |
1395 | request@^2.81.0:
1396 | version "2.81.0"
1397 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
1398 | dependencies:
1399 | aws-sign2 "~0.6.0"
1400 | aws4 "^1.2.1"
1401 | caseless "~0.12.0"
1402 | combined-stream "~1.0.5"
1403 | extend "~3.0.0"
1404 | forever-agent "~0.6.1"
1405 | form-data "~2.1.1"
1406 | har-validator "~4.2.1"
1407 | hawk "~3.1.3"
1408 | http-signature "~1.1.0"
1409 | is-typedarray "~1.0.0"
1410 | isstream "~0.1.2"
1411 | json-stringify-safe "~5.0.1"
1412 | mime-types "~2.1.7"
1413 | oauth-sign "~0.8.1"
1414 | performance-now "^0.2.0"
1415 | qs "~6.4.0"
1416 | safe-buffer "^5.0.1"
1417 | stringstream "~0.0.4"
1418 | tough-cookie "~2.3.0"
1419 | tunnel-agent "^0.6.0"
1420 | uuid "^3.0.0"
1421 |
1422 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
1423 | version "2.6.1"
1424 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
1425 | dependencies:
1426 | glob "^7.0.5"
1427 |
1428 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1429 | version "5.1.1"
1430 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
1431 |
1432 | semver@^5.3.0:
1433 | version "5.3.0"
1434 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1435 |
1436 | set-blocking@~2.0.0:
1437 | version "2.0.0"
1438 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1439 |
1440 | set-immediate-shim@^1.0.1:
1441 | version "1.0.1"
1442 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
1443 |
1444 | signal-exit@^3.0.0:
1445 | version "3.0.2"
1446 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1447 |
1448 | slash@^1.0.0:
1449 | version "1.0.0"
1450 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
1451 |
1452 | sntp@1.x.x:
1453 | version "1.0.9"
1454 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
1455 | dependencies:
1456 | hoek "2.x.x"
1457 |
1458 | source-map-support@^0.4.2:
1459 | version "0.4.15"
1460 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
1461 | dependencies:
1462 | source-map "^0.5.6"
1463 |
1464 | source-map@^0.5.0, source-map@^0.5.6:
1465 | version "0.5.6"
1466 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
1467 |
1468 | sshpk@^1.7.0:
1469 | version "1.13.1"
1470 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
1471 | dependencies:
1472 | asn1 "~0.2.3"
1473 | assert-plus "^1.0.0"
1474 | dashdash "^1.12.0"
1475 | getpass "^0.1.1"
1476 | optionalDependencies:
1477 | bcrypt-pbkdf "^1.0.0"
1478 | ecc-jsbn "~0.1.1"
1479 | jsbn "~0.1.0"
1480 | tweetnacl "~0.14.0"
1481 |
1482 | string-width@^1.0.1, string-width@^1.0.2:
1483 | version "1.0.2"
1484 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1485 | dependencies:
1486 | code-point-at "^1.0.0"
1487 | is-fullwidth-code-point "^1.0.0"
1488 | strip-ansi "^3.0.0"
1489 |
1490 | string_decoder@~1.0.3:
1491 | version "1.0.3"
1492 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
1493 | dependencies:
1494 | safe-buffer "~5.1.0"
1495 |
1496 | stringstream@~0.0.4:
1497 | version "0.0.5"
1498 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
1499 |
1500 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1501 | version "3.0.1"
1502 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1503 | dependencies:
1504 | ansi-regex "^2.0.0"
1505 |
1506 | strip-json-comments@~2.0.1:
1507 | version "2.0.1"
1508 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1509 |
1510 | supports-color@^2.0.0:
1511 | version "2.0.0"
1512 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1513 |
1514 | tar-pack@^3.4.0:
1515 | version "3.4.0"
1516 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
1517 | dependencies:
1518 | debug "^2.2.0"
1519 | fstream "^1.0.10"
1520 | fstream-ignore "^1.0.5"
1521 | once "^1.3.3"
1522 | readable-stream "^2.1.4"
1523 | rimraf "^2.5.1"
1524 | tar "^2.2.1"
1525 | uid-number "^0.0.6"
1526 |
1527 | tar@^2.2.1:
1528 | version "2.2.1"
1529 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
1530 | dependencies:
1531 | block-stream "*"
1532 | fstream "^1.0.2"
1533 | inherits "2"
1534 |
1535 | to-fast-properties@^1.0.1:
1536 | version "1.0.3"
1537 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
1538 |
1539 | tough-cookie@~2.3.0:
1540 | version "2.3.2"
1541 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
1542 | dependencies:
1543 | punycode "^1.4.1"
1544 |
1545 | trim-right@^1.0.1:
1546 | version "1.0.1"
1547 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
1548 |
1549 | tunnel-agent@^0.6.0:
1550 | version "0.6.0"
1551 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
1552 | dependencies:
1553 | safe-buffer "^5.0.1"
1554 |
1555 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
1556 | version "0.14.5"
1557 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
1558 |
1559 | uid-number@^0.0.6:
1560 | version "0.0.6"
1561 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
1562 |
1563 | user-home@^1.1.1:
1564 | version "1.1.1"
1565 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
1566 |
1567 | util-deprecate@~1.0.1:
1568 | version "1.0.2"
1569 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1570 |
1571 | uuid@^3.0.0:
1572 | version "3.1.0"
1573 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
1574 |
1575 | v8flags@^2.0.10:
1576 | version "2.1.1"
1577 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
1578 | dependencies:
1579 | user-home "^1.1.1"
1580 |
1581 | verror@1.3.6:
1582 | version "1.3.6"
1583 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
1584 | dependencies:
1585 | extsprintf "1.0.2"
1586 |
1587 | wide-align@^1.1.0:
1588 | version "1.1.2"
1589 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
1590 | dependencies:
1591 | string-width "^1.0.2"
1592 |
1593 | wrappy@1:
1594 | version "1.0.2"
1595 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1596 |
--------------------------------------------------------------------------------