afterlife 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"