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 +4 -4
- data/.rubocop.yml +1 -1
- data/afterlife.gemspec +4 -2
- data/lib/afterlife/cli.rb +3 -49
- data/lib/afterlife/deploy/cdn_deployment.rb +15 -2
- data/lib/afterlife/deploy/cli.rb +69 -0
- data/lib/afterlife/deploy/custom_deployment.rb +23 -0
- data/lib/afterlife/deploy/deployment.rb +4 -6
- data/lib/afterlife/deploy.rb +28 -24
- data/lib/afterlife/version.rb +1 -1
- metadata +4 -4
- data/Rakefile +0 -17
- data/yarn.lock +0 -260
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad1fcadc1d4fa02e309f7fbffe6e10f1538844dd956381aec84dca99c075b336
|
4
|
+
data.tar.gz: 4885395894cd313ddf440595c5c635733ce3a772d80f2d21756d2a15f424a551
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '082b695c397a910107fea5a286e6d6179be4495670a96f550b881e831cee537726d9655be034e77fd4b9f4bb489f071d5974279ac4b80fcdb3aeb905218a98cc'
|
7
|
+
data.tar.gz: 3301a025549f4a02582ac27151a33193447137d80809c90122031cd1f0727d3bf3bb8e197a0bb0480acdee4e8c2900a6bdf409e1efa358f3b6db9d8af9c9f54d
|
data/.rubocop.yml
CHANGED
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
|
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__) ||
|
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
|
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
|
-
|
51
|
-
|
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
|
-
|
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
|
-
|
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
|
|
data/lib/afterlife/deploy.rb
CHANGED
@@ -1,44 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Afterlife
|
4
|
-
|
5
|
-
|
4
|
+
module Deploy
|
5
|
+
module_function
|
6
6
|
|
7
|
-
|
8
|
-
new.deploy
|
9
|
-
end
|
7
|
+
Error = Class.new StandardError
|
10
8
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
20
|
-
|
21
|
-
def deployment_output
|
22
|
-
case deployment_type
|
18
|
+
def klass
|
19
|
+
case current_type
|
23
20
|
when 'cdn'
|
24
|
-
CdnDeployment
|
21
|
+
CdnDeployment
|
22
|
+
else
|
23
|
+
CustomDeployment
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
28
|
-
def
|
29
|
-
|
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
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
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
|
data/lib/afterlife/version.rb
CHANGED
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.
|
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
|
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"
|