afterlife 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8dfb530dade840c8e03042de3ba5508eec1002830c0b978ab42aa1f88b83fab
4
- data.tar.gz: 39452459ace3d25eb5270e0e83295e0919f97b11813128b98a6deb39b407431b
3
+ metadata.gz: ad1fcadc1d4fa02e309f7fbffe6e10f1538844dd956381aec84dca99c075b336
4
+ data.tar.gz: 4885395894cd313ddf440595c5c635733ce3a772d80f2d21756d2a15f424a551
5
5
  SHA512:
6
- metadata.gz: 30fb609ce63cd5038050a2afae03741fd9d8739d4d014cfbd85ca09a0c1f44a9eb3521b85866b64763bfeea287891ea6d00c84491bf39f4bbf6cea152b8ef8d5
7
- data.tar.gz: e94831df012dfe22f833e277b0fbc5b6c11ae5c9c85d9897068d14b05171c4ab7fd542b2f578d0c95fd17feef9419e0c7abb8aeb50421b29e9e93322bd17fa47
6
+ metadata.gz: '082b695c397a910107fea5a286e6d6179be4495670a96f550b881e831cee537726d9655be034e77fd4b9f4bb489f071d5974279ac4b80fcdb3aeb905218a98cc'
7
+ data.tar.gz: 3301a025549f4a02582ac27151a33193447137d80809c90122031cd1f0727d3bf3bb8e197a0bb0480acdee4e8c2900a6bdf409e1efa358f3b6db9d8af9c9f54d
data/.rubocop.yml CHANGED
@@ -4,7 +4,7 @@ require:
4
4
 
5
5
  AllCops:
6
6
  NewCops: enable
7
- TargetRubyVersion: 2.7
7
+ TargetRubyVersion: 2.6
8
8
 
9
9
  Lint/ConstantDefinitionInBlock:
10
10
  Enabled: false
data/afterlife.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Genaro Madrid']
9
9
  spec.email = ['genmadrid@gmail.com']
10
10
 
11
- spec.summary = 'Devops tools for Mifiel'
11
+ spec.summary = 'Devops utils'
12
12
  spec.description = 'Afterlife helps you setup your development environment and deploy code easily'
13
13
  spec.required_ruby_version = '>= 2.6'
14
14
 
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
20
  spec.files = Dir.chdir(__dir__) do
21
21
  `git ls-files -z`.split("\x0").reject do |f|
22
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
22
+ (f == __FILE__) ||
23
+ f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)}) ||
24
+ f.match(/Rakefile/)
23
25
  end
24
26
  end
25
27
  spec.bindir = 'exe'
data/lib/afterlife/cli.rb CHANGED
@@ -41,27 +41,14 @@ module Afterlife
41
41
  desc 'cdn', 'CDN stuff'
42
42
  subcommand 'cdn', Cdn::Cli
43
43
 
44
- desc 'deploy <stage>', 'Deploy current directory'
44
+ desc 'deploy <stage>', 'Deploy current repo'
45
45
  option 'no-build', type: :boolean
46
46
  option 'no-install', type: :boolean
47
47
  option 'dry-run', type: :boolean
48
48
  option 'skip-after-hooks', type: :boolean
49
49
  option :yes, type: :boolean
50
- # this only has logic for CDN deployments
51
- # TODO: Add logic for different deployment types
52
- def deploy(stage) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
53
- Afterlife.cli = self
54
- Afterlife.current_stage = Afterlife.config.stages[stage.to_sym]
55
- fill_env
56
- ask_confirmation(repo.confirmation_message) unless options['yes']
57
- install_dependencies unless options['no-install']
58
- build unless options['no-build']
59
-
60
- say_status 'Deploying', repo.dist_path
61
- output = Deploy.call
62
- say_status 'Deployed', output
63
- rescue Deploy::Error => e
64
- fatal!(e.message)
50
+ def deploy(stage)
51
+ invoke Deploy::Cli, :call, [stage], options
65
52
  rescue Interrupt
66
53
  log_interrupted
67
54
  end
@@ -77,39 +64,6 @@ module Afterlife
77
64
 
78
65
  private
79
66
 
80
- def fill_env
81
- repo.env.merge!(
82
- 'DIST_PATH' => repo.dist_path.to_s,
83
- 'CURRENT_BRANCH' => repo.current_branch,
84
- 'AFTERLIFE_STAGE' => Afterlife.current_stage.name,
85
- )
86
- end
87
-
88
- def install_dependencies
89
- return unless repo.install_dependencies_command
90
-
91
- say_status 'Installing', '*' * 20
92
- Exec.run(repo.install_dependencies_command)
93
- end
94
-
95
- def build
96
- return unless repo.build_command
97
-
98
- say_status 'Building', '*' * 20
99
- Exec.run(repo.build_command)
100
- end
101
-
102
- def ask_confirmation(message)
103
- if message
104
- say message
105
- else
106
- say set_color("You're about to deploy the contents of '#{repo.dist_path}' to")
107
- say set_color(Cdn.url(repo), :bold)
108
- say set_color("\nWARNING: Please be aware that this may be a destructive operation", :yellow)
109
- end
110
- exit 1 unless yes?('Are you sure? [y/n]')
111
- end
112
-
113
67
  def repo
114
68
  Afterlife.current_repo
115
69
  end
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterlife
4
- class Deploy
4
+ module Deploy
5
5
  class CdnDeployment < Deployment
6
6
  def run
7
7
  Exec.run(commands)
8
+ end
9
+
10
+ def output
8
11
  Cdn.url(repo)
9
12
  end
10
13
 
@@ -17,6 +20,15 @@ module Afterlife
17
20
  )
18
21
  end
19
22
 
23
+ def initial_message
24
+ repo.dist_path
25
+ end
26
+
27
+ def confirmation_message
28
+ repo.confirmation_message ||
29
+ "You are about to deploy the contents of '#{repo.dist_path}' to"
30
+ end
31
+
20
32
  private
21
33
 
22
34
  def commands
@@ -35,13 +47,14 @@ module Afterlife
35
47
  %<S3_FULL_PATH>s
36
48
  --exclude '*.ts'
37
49
  --exclude '*.tsx'
50
+ --size-only
38
51
  --cache-control 'no-cache'
39
52
  BASH
40
53
  end
41
54
 
42
55
  def revision
43
56
  <<-BASH
44
- echo "#{repo.current_revision}" | aws s3 cp --content-type text/plain - %<S3_FULL_PATH>s/revision
57
+ echo "#{repo.current_revision}" | aws s3 cp --content-type text/plain --cache-control 'no-cache' - %<S3_FULL_PATH>s/revision
45
58
  BASH
46
59
  end
47
60
 
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Afterlife
4
+ module Deploy
5
+ class Cli < Thor
6
+ include BaseCli
7
+ def self.exit_on_failure?
8
+ true
9
+ end
10
+
11
+ desc 'deploy <stage>', 'Deploy current repo'
12
+ def call(stage)
13
+ Afterlife.cli = self
14
+ Deploy.call(stage) do |deployment|
15
+ setup_deploy(deployment)
16
+ say_status 'Deploying', deployment.initial_message
17
+ deployment.run
18
+ say_status 'Deployed', deployment.output
19
+ run_after_hooks
20
+ end
21
+ rescue Deploy::Error => e
22
+ fatal!(e.message)
23
+ end
24
+
25
+ private
26
+
27
+ def run_after_hooks
28
+ return if options['skip-after-hooks']
29
+
30
+ commands = repo.conf.dig(:deploy, :after)
31
+ return unless commands
32
+
33
+ say_status 'After hooks', ''
34
+ Exec.run(commands)
35
+ end
36
+
37
+ def setup_deploy(deployment)
38
+ ask_confirmation(deployment) unless options['yes']
39
+ install_dependencies unless options['no-install']
40
+ build unless options['no-build']
41
+ end
42
+
43
+ def ask_confirmation(deployment)
44
+ say set_color(deployment.confirmation_message)
45
+ say set_color(deployment.output, :bold) if deployment.output
46
+ say set_color("\nWARNING: Please be aware that this may be a destructive operation", :yellow)
47
+ exit 1 unless yes?('Are you sure? [y/n]')
48
+ end
49
+
50
+ def install_dependencies
51
+ return unless repo.install_dependencies_command
52
+
53
+ say_status 'Installing', '*' * 20
54
+ Exec.run(repo.install_dependencies_command)
55
+ end
56
+
57
+ def build
58
+ return unless repo.build_command
59
+
60
+ say_status 'Building', '*' * 20
61
+ Exec.run(repo.build_command)
62
+ end
63
+
64
+ def repo
65
+ Afterlife.current_repo
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Afterlife
4
+ module Deploy
5
+ class CustomDeployment < Deployment
6
+ def run
7
+ Exec.run(commands)
8
+ end
9
+
10
+ def confirmation_message
11
+ 'You are about to deploy the current directory'
12
+ end
13
+
14
+ private
15
+
16
+ def commands
17
+ [
18
+ repo_command,
19
+ ].flatten
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,13 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterlife
4
- class Deploy
4
+ module Deploy
5
5
  class Deployment
6
- def self.run
7
- deployment = new.tap(&:setup)
8
- deployment.run
9
- end
10
-
11
6
  def run
12
7
  fail NotImplementedError
13
8
  end
@@ -17,6 +12,9 @@ module Afterlife
17
12
  end
18
13
 
19
14
  def setup; end
15
+ def output; end
16
+ def initial_message; end
17
+ def confirmation_message; end
20
18
 
21
19
  protected
22
20
 
@@ -1,44 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterlife
4
- class Deploy
5
- Error = Class.new StandardError
4
+ module Deploy
5
+ module_function
6
6
 
7
- def self.call
8
- new.deploy
9
- end
7
+ Error = Class.new StandardError
10
8
 
11
- def deploy
12
- deployment_output.tap do
13
- Exec.run(after_deploy_command) if after_deploy_command
14
- end
15
- rescue Exec::Error => e
16
- raise Error, e
9
+ def call(stage)
10
+ deployment = klass.new
11
+ setup_stage(stage)
12
+ fill_env
13
+ deployment.setup
14
+ yield deployment
15
+ deployment
17
16
  end
18
17
 
19
- private
20
-
21
- def deployment_output
22
- case deployment_type
18
+ def klass
19
+ case current_type
23
20
  when 'cdn'
24
- CdnDeployment.run
21
+ CdnDeployment
22
+ else
23
+ CustomDeployment
25
24
  end
26
25
  end
27
26
 
28
- def deployment_type
29
- repo.conf.dig(:deploy, :type).tap do |result|
27
+ def current_type
28
+ Afterlife.current_repo.conf.dig(:deploy, :type).tap do |result|
30
29
  fail Error, 'deploy.type must be defined if you want to deploy with Afterlife' unless result
31
30
  end
32
31
  end
33
32
 
34
- def after_deploy_command
35
- return if Afterlife.cli.options['skip-after-hooks']
36
-
37
- repo.conf.dig(:deploy, :after)
33
+ def setup_stage(stage)
34
+ unless Afterlife.config.stages.key?(stage.to_sym)
35
+ fatal!("invalid stage '#{stage}'. Possible values: #{Afterlife.config.stages.keys.map(&:to_s)}")
36
+ end
37
+ Afterlife.current_stage = Afterlife.config.stages[stage.to_sym]
38
38
  end
39
39
 
40
- def repo
41
- Afterlife.current_repo
40
+ def fill_env
41
+ Afterlife.current_repo.env.merge!(
42
+ 'DIST_PATH' => Afterlife.current_repo.dist_path.to_s,
43
+ 'CURRENT_BRANCH' => Afterlife.current_repo.current_branch,
44
+ 'AFTERLIFE_STAGE' => Afterlife.current_stage.name,
45
+ )
42
46
  end
43
47
  end
44
48
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterlife
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: afterlife
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genaro Madrid
@@ -110,7 +110,6 @@ files:
110
110
  - CHANGELOG.md
111
111
  - Gemfile
112
112
  - README.md
113
- - Rakefile
114
113
  - afterlife.gemspec
115
114
  - config.ru
116
115
  - exe/afterlife
@@ -125,6 +124,8 @@ files:
125
124
  - lib/afterlife/config.rb
126
125
  - lib/afterlife/deploy.rb
127
126
  - lib/afterlife/deploy/cdn_deployment.rb
127
+ - lib/afterlife/deploy/cli.rb
128
+ - lib/afterlife/deploy/custom_deployment.rb
128
129
  - lib/afterlife/deploy/deployment.rb
129
130
  - lib/afterlife/environment.rb
130
131
  - lib/afterlife/exec.rb
@@ -138,7 +139,6 @@ files:
138
139
  - lib/afterlife/stage.rb
139
140
  - lib/afterlife/version.rb
140
141
  - logs/.keep
141
- - yarn.lock
142
142
  homepage:
143
143
  licenses: []
144
144
  metadata:
@@ -163,5 +163,5 @@ requirements: []
163
163
  rubygems_version: 3.2.33
164
164
  signing_key:
165
165
  specification_version: 4
166
- summary: Devops tools for Mifiel
166
+ summary: Devops utils
167
167
  test_files: []
data/Rakefile DELETED
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- require 'rubocop/rake_task'
9
-
10
- RuboCop::RakeTask.new
11
-
12
- desc 'start a console'
13
- task :console do
14
- exec 'pry -r afterlife -I ./lib'
15
- end
16
-
17
- task default: %i[spec rubocop]
data/yarn.lock DELETED
@@ -1,260 +0,0 @@
1
- # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
- # yarn lockfile v1
3
-
4
-
5
- ansi-styles@^4.1.0:
6
- version "4.3.0"
7
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
8
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
9
- dependencies:
10
- color-convert "^2.0.1"
11
-
12
- async@^2.6.4:
13
- version "2.6.4"
14
- resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
15
- integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
16
- dependencies:
17
- lodash "^4.17.14"
18
-
19
- basic-auth@^2.0.1:
20
- version "2.0.1"
21
- resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
22
- integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
23
- dependencies:
24
- safe-buffer "5.1.2"
25
-
26
- call-bind@^1.0.0:
27
- version "1.0.2"
28
- resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
29
- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
30
- dependencies:
31
- function-bind "^1.1.1"
32
- get-intrinsic "^1.0.2"
33
-
34
- chalk@^4.1.2:
35
- version "4.1.2"
36
- resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
37
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
38
- dependencies:
39
- ansi-styles "^4.1.0"
40
- supports-color "^7.1.0"
41
-
42
- color-convert@^2.0.1:
43
- version "2.0.1"
44
- resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
45
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
46
- dependencies:
47
- color-name "~1.1.4"
48
-
49
- color-name@~1.1.4:
50
- version "1.1.4"
51
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
52
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
53
-
54
- corser@^2.0.1:
55
- version "2.0.1"
56
- resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
57
- integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==
58
-
59
- debug@^3.2.7:
60
- version "3.2.7"
61
- resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
62
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
63
- dependencies:
64
- ms "^2.1.1"
65
-
66
- eventemitter3@^4.0.0:
67
- version "4.0.7"
68
- resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
69
- integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
70
-
71
- follow-redirects@^1.0.0:
72
- version "1.15.2"
73
- resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
74
- integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
75
-
76
- function-bind@^1.1.1:
77
- version "1.1.1"
78
- resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
79
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
80
-
81
- get-intrinsic@^1.0.2:
82
- version "1.1.3"
83
- resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
84
- integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
85
- dependencies:
86
- function-bind "^1.1.1"
87
- has "^1.0.3"
88
- has-symbols "^1.0.3"
89
-
90
- has-flag@^4.0.0:
91
- version "4.0.0"
92
- resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
93
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
94
-
95
- has-symbols@^1.0.3:
96
- version "1.0.3"
97
- resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
98
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
99
-
100
- has@^1.0.3:
101
- version "1.0.3"
102
- resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
103
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
104
- dependencies:
105
- function-bind "^1.1.1"
106
-
107
- he@^1.2.0:
108
- version "1.2.0"
109
- resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
110
- integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
111
-
112
- html-encoding-sniffer@^3.0.0:
113
- version "3.0.0"
114
- resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
115
- integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
116
- dependencies:
117
- whatwg-encoding "^2.0.0"
118
-
119
- http-proxy@^1.18.1:
120
- version "1.18.1"
121
- resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
122
- integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
123
- dependencies:
124
- eventemitter3 "^4.0.0"
125
- follow-redirects "^1.0.0"
126
- requires-port "^1.0.0"
127
-
128
- http-server@^14.1.1:
129
- version "14.1.1"
130
- resolved "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e"
131
- integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==
132
- dependencies:
133
- basic-auth "^2.0.1"
134
- chalk "^4.1.2"
135
- corser "^2.0.1"
136
- he "^1.2.0"
137
- html-encoding-sniffer "^3.0.0"
138
- http-proxy "^1.18.1"
139
- mime "^1.6.0"
140
- minimist "^1.2.6"
141
- opener "^1.5.1"
142
- portfinder "^1.0.28"
143
- secure-compare "3.0.1"
144
- union "~0.5.0"
145
- url-join "^4.0.1"
146
-
147
- iconv-lite@0.6.3:
148
- version "0.6.3"
149
- resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
150
- integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
151
- dependencies:
152
- safer-buffer ">= 2.1.2 < 3.0.0"
153
-
154
- lodash@^4.17.14:
155
- version "4.17.21"
156
- resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
157
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
158
-
159
- mime@^1.6.0:
160
- version "1.6.0"
161
- resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
162
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
163
-
164
- minimist@^1.2.6:
165
- version "1.2.7"
166
- resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
167
- integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
168
-
169
- mkdirp@^0.5.6:
170
- version "0.5.6"
171
- resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
172
- integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
173
- dependencies:
174
- minimist "^1.2.6"
175
-
176
- ms@^2.1.1:
177
- version "2.1.3"
178
- resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
179
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
180
-
181
- object-inspect@^1.9.0:
182
- version "1.12.2"
183
- resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
184
- integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
185
-
186
- opener@^1.5.1:
187
- version "1.5.2"
188
- resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
189
- integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
190
-
191
- portfinder@^1.0.28:
192
- version "1.0.32"
193
- resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81"
194
- integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==
195
- dependencies:
196
- async "^2.6.4"
197
- debug "^3.2.7"
198
- mkdirp "^0.5.6"
199
-
200
- qs@^6.4.0:
201
- version "6.11.0"
202
- resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
203
- integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
204
- dependencies:
205
- side-channel "^1.0.4"
206
-
207
- requires-port@^1.0.0:
208
- version "1.0.0"
209
- resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
210
- integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
211
-
212
- safe-buffer@5.1.2:
213
- version "5.1.2"
214
- resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
215
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
216
-
217
- "safer-buffer@>= 2.1.2 < 3.0.0":
218
- version "2.1.2"
219
- resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
220
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
221
-
222
- secure-compare@3.0.1:
223
- version "3.0.1"
224
- resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3"
225
- integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==
226
-
227
- side-channel@^1.0.4:
228
- version "1.0.4"
229
- resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
230
- integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
231
- dependencies:
232
- call-bind "^1.0.0"
233
- get-intrinsic "^1.0.2"
234
- object-inspect "^1.9.0"
235
-
236
- supports-color@^7.1.0:
237
- version "7.2.0"
238
- resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
239
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
240
- dependencies:
241
- has-flag "^4.0.0"
242
-
243
- union@~0.5.0:
244
- version "0.5.0"
245
- resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075"
246
- integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==
247
- dependencies:
248
- qs "^6.4.0"
249
-
250
- url-join@^4.0.1:
251
- version "4.0.1"
252
- resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
253
- integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
254
-
255
- whatwg-encoding@^2.0.0:
256
- version "2.0.0"
257
- resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
258
- integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
259
- dependencies:
260
- iconv-lite "0.6.3"