afterlife 1.0.0 → 1.2.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 +6 -63
- data/lib/afterlife/config/cli.rb +21 -0
- data/lib/afterlife/config/provider.rb +31 -0
- data/lib/afterlife/config.rb +1 -24
- data/lib/afterlife/deploy/cdn_deployment.rb +22 -4
- data/lib/afterlife/deploy/cdn_stenciljs_deployment.rb +30 -0
- data/lib/afterlife/deploy/cli.rb +69 -0
- data/lib/afterlife/deploy/custom_deployment.rb +23 -0
- data/lib/afterlife/deploy/deployment.rb +5 -7
- data/lib/afterlife/deploy.rb +27 -24
- data/lib/afterlife/exec.rb +1 -1
- data/lib/afterlife/repo/config.rb +54 -0
- data/lib/afterlife/repo/provider.rb +47 -0
- data/lib/afterlife/repo.rb +5 -43
- data/lib/afterlife/version.rb +1 -1
- data/lib/afterlife.rb +1 -1
- metadata +10 -5
- 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: ed6b64b46c70114724bb7961af7c384c079bc7917a69e83a3c4f5dce62152ecc
|
4
|
+
data.tar.gz: 8da0219c81a43ac90190721388bc5cc4afc685ec377caebe8a8ab04331fe3df0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fbb65c54f1e464917dab23183f6e376cd594de9de50aa9462225f06285234759cc6ec6092f164a2dc674426ad674938d2d03d958195bc2286de6dad470833d8
|
7
|
+
data.tar.gz: c57a701252b3b7c919a45c4164c26d5ce10086f55f222d66bf0afe8592dacb28875ffadf69d04a10d021b5530c36daf36d5c18a5f309e50e3e24001a8da50cb7
|
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
@@ -22,45 +22,21 @@ module Afterlife
|
|
22
22
|
log_success 'afterlife is ready!'
|
23
23
|
end
|
24
24
|
|
25
|
-
desc 'config
|
26
|
-
|
27
|
-
path = path.split('.').map(&:to_sym)
|
28
|
-
result = repo.conf.dig(*path)
|
29
|
-
case result
|
30
|
-
when Hash
|
31
|
-
say JSON.generate(result)
|
32
|
-
when Array
|
33
|
-
result.each do |item|
|
34
|
-
say item
|
35
|
-
end
|
36
|
-
else
|
37
|
-
say result
|
38
|
-
end
|
39
|
-
end
|
25
|
+
desc 'config', 'Repo configuration options'
|
26
|
+
subcommand 'config', Config::Cli
|
40
27
|
|
41
28
|
desc 'cdn', 'CDN stuff'
|
42
29
|
subcommand 'cdn', Cdn::Cli
|
43
30
|
|
44
|
-
desc 'deploy <stage>', 'Deploy current
|
31
|
+
desc 'deploy <stage>', 'Deploy current repo'
|
45
32
|
option 'no-build', type: :boolean
|
46
33
|
option 'no-install', type: :boolean
|
47
34
|
option 'dry-run', type: :boolean
|
48
35
|
option 'skip-after-hooks', type: :boolean
|
49
36
|
option :yes, type: :boolean
|
50
|
-
|
51
|
-
|
52
|
-
|
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
|
37
|
+
def deploy(stage)
|
38
|
+
invoke Deploy::Cli, :call, [stage], options
|
39
|
+
rescue Deploy::Error
|
64
40
|
fatal!(e.message)
|
65
41
|
rescue Interrupt
|
66
42
|
log_interrupted
|
@@ -77,39 +53,6 @@ module Afterlife
|
|
77
53
|
|
78
54
|
private
|
79
55
|
|
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
56
|
def repo
|
114
57
|
Afterlife.current_repo
|
115
58
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Config
|
5
|
+
class Cli < Thor
|
6
|
+
include BaseCli
|
7
|
+
def self.exit_on_failure?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'get <path>', 'get config path'
|
12
|
+
def get(path)
|
13
|
+
Repo::Config.read(path) do |value|
|
14
|
+
say value
|
15
|
+
end
|
16
|
+
rescue Repo::Config::Error => e
|
17
|
+
fatal!(e.message)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Config
|
5
|
+
class Provider
|
6
|
+
def self.file
|
7
|
+
Afterlife.local_path.join('config.yml')
|
8
|
+
end
|
9
|
+
|
10
|
+
def respond_to_missing?(sym, include_all)
|
11
|
+
config.key?(sym) || super
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(sym, *args, &block)
|
15
|
+
config.key?(sym) ? config[sym] : super
|
16
|
+
end
|
17
|
+
|
18
|
+
def stages
|
19
|
+
@stages ||= config.delete(:stages)&.to_h do |name, val|
|
20
|
+
[name, Stage.new(val.merge(name: name.to_s))]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def config
|
27
|
+
@config ||= YAML.load_file(Provider.file).deep_symbolize_keys
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/afterlife/config.rb
CHANGED
@@ -1,29 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Afterlife
|
4
|
-
|
5
|
-
def self.file
|
6
|
-
Afterlife.local_path.join('config.yml')
|
7
|
-
end
|
8
|
-
|
9
|
-
def respond_to_missing?(sym, include_all)
|
10
|
-
config.key?(sym) || super
|
11
|
-
end
|
12
|
-
|
13
|
-
def method_missing(sym, *args, &block)
|
14
|
-
config.key?(sym) ? config[sym] : super
|
15
|
-
end
|
16
|
-
|
17
|
-
def stages
|
18
|
-
@stages ||= config.delete(:stages)&.to_h do |name, val|
|
19
|
-
[name, Stage.new(val.merge(name: name.to_s))]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def config
|
26
|
-
@config ||= YAML.load_file(Config.file).deep_symbolize_keys
|
27
|
-
end
|
4
|
+
module Config
|
28
5
|
end
|
29
6
|
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,18 +47,24 @@ module Afterlife
|
|
35
47
|
%<S3_FULL_PATH>s
|
36
48
|
--exclude '*.ts'
|
37
49
|
--exclude '*.tsx'
|
38
|
-
--
|
50
|
+
--size-only
|
51
|
+
--cache-control 'public, max-age=31540000'
|
39
52
|
BASH
|
40
53
|
end
|
41
54
|
|
42
55
|
def revision
|
43
56
|
<<-BASH
|
44
|
-
echo "#{repo.current_revision}" |
|
57
|
+
echo "#{repo.current_revision}" |
|
58
|
+
aws s3 cp --content-type text/plain --cache-control 'no-cache' - #{s3_revision_path}
|
45
59
|
BASH
|
46
60
|
end
|
47
61
|
|
62
|
+
def s3_revision_path
|
63
|
+
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}/revision"
|
64
|
+
end
|
65
|
+
|
48
66
|
def s3_full_path
|
49
|
-
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}"
|
67
|
+
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}/#{repo.current_revision}"
|
50
68
|
end
|
51
69
|
end
|
52
70
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Deploy
|
5
|
+
class CdnStenciljsDeployment < CdnDeployment
|
6
|
+
private
|
7
|
+
|
8
|
+
def commands
|
9
|
+
[
|
10
|
+
add_revision_command,
|
11
|
+
repo_command || javascripts,
|
12
|
+
revision,
|
13
|
+
]
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_revision_command
|
17
|
+
Dir["#{repo.dist_path}/*.esm.js"].map do |file|
|
18
|
+
next if file.include?(repo.current_revision)
|
19
|
+
|
20
|
+
new_name = file.gsub('.esm.js', "-#{repo.current_revision}.esm.js")
|
21
|
+
"mv #{file} #{new_name}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def s3_full_path
|
26
|
+
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -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,22 +1,20 @@
|
|
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
|
14
9
|
|
15
10
|
def repo_command
|
16
|
-
Array(repo.conf.dig(:deploy, :command))
|
11
|
+
Array(repo.conf.dig(:deploy, :command)).presence
|
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,47 @@
|
|
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
|
-
|
18
|
+
def klass
|
19
|
+
klass = "#{current_type.gsub('-', '_')}_deployment".classify
|
20
|
+
fail Error, "deployment type '#{current_type}' is invalid" unless const_defined?(klass)
|
20
21
|
|
21
|
-
|
22
|
-
case deployment_type
|
23
|
-
when 'cdn'
|
24
|
-
CdnDeployment.run
|
25
|
-
end
|
22
|
+
const_get(klass)
|
26
23
|
end
|
27
24
|
|
28
|
-
def
|
29
|
-
|
25
|
+
def current_type
|
26
|
+
Afterlife.current_repo.conf.dig(:deploy, :type).tap do |result|
|
30
27
|
fail Error, 'deploy.type must be defined if you want to deploy with Afterlife' unless result
|
31
28
|
end
|
32
29
|
end
|
33
30
|
|
34
|
-
def
|
35
|
-
|
31
|
+
def setup_stage(stage)
|
32
|
+
unless Afterlife.config.stages.key?(stage.to_sym)
|
33
|
+
fail Error, "invalid stage '#{stage}'. Possible values: #{Afterlife.config.stages.keys.map(&:to_s)}"
|
34
|
+
end
|
36
35
|
|
37
|
-
|
36
|
+
Afterlife.current_stage = Afterlife.config.stages[stage.to_sym]
|
38
37
|
end
|
39
38
|
|
40
|
-
def
|
41
|
-
Afterlife.current_repo
|
39
|
+
def fill_env
|
40
|
+
Afterlife.current_repo.env.merge!(
|
41
|
+
'DIST_PATH' => Afterlife.current_repo.dist_path.to_s,
|
42
|
+
'CURRENT_BRANCH' => Afterlife.current_repo.current_branch,
|
43
|
+
'AFTERLIFE_STAGE' => Afterlife.current_stage.name,
|
44
|
+
)
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
data/lib/afterlife/exec.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
class Repo
|
5
|
+
class Config
|
6
|
+
Error = Class.new StandardError
|
7
|
+
|
8
|
+
attr_reader :path
|
9
|
+
|
10
|
+
def self.read(path, &block)
|
11
|
+
new(path).read(&block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(path)
|
15
|
+
@path = path.split('.').map(&:to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
def read(&block) # rubocop:disable Metrics/MethodLength
|
19
|
+
case from_yml
|
20
|
+
when Hash
|
21
|
+
yield(JSON.generate(from_yml))
|
22
|
+
when Array
|
23
|
+
from_yml.each(&block)
|
24
|
+
when String, Symbol
|
25
|
+
yield(from_yml)
|
26
|
+
else
|
27
|
+
fail Error, "No config with path '#{path.join('.')}'" unless repo_method?
|
28
|
+
|
29
|
+
yield(repo.public_send(repo_method))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def repo_method?
|
36
|
+
path.count == 1 && repo.public_methods(false).include?(repo_method)
|
37
|
+
end
|
38
|
+
|
39
|
+
def repo_method
|
40
|
+
@repo_method ||= path.first.to_s.gsub('-', '_').to_sym
|
41
|
+
end
|
42
|
+
|
43
|
+
def repo
|
44
|
+
Afterlife.current_repo
|
45
|
+
end
|
46
|
+
|
47
|
+
def from_yml
|
48
|
+
return @from_yml if defined?(@from_yml)
|
49
|
+
|
50
|
+
@from_yml ||= repo.conf.dig(*path)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
class Repo
|
5
|
+
class Provider
|
6
|
+
CONFIG_NAME = '.afterlife.yml'
|
7
|
+
|
8
|
+
attr_reader :full_path
|
9
|
+
|
10
|
+
def initialize(full_path)
|
11
|
+
@full_path = full_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def config
|
15
|
+
return @config if defined?(@config)
|
16
|
+
|
17
|
+
if config_file.exist?
|
18
|
+
@config = base_config
|
19
|
+
@config = parent.deep_merge(base_config) if parent
|
20
|
+
end
|
21
|
+
|
22
|
+
@config ||= {}
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def parent
|
28
|
+
return @parent if defined?(@parent)
|
29
|
+
|
30
|
+
inherit_from = base_config.delete(:inherit_from)
|
31
|
+
return @parent = nil unless inherit_from
|
32
|
+
|
33
|
+
@parent = Provider.new(full_path.join(inherit_from)).config
|
34
|
+
@parent[:cdn]&.delete(:packages)
|
35
|
+
@parent
|
36
|
+
end
|
37
|
+
|
38
|
+
def base_config
|
39
|
+
@base_config ||= YAML.load_file(config_file).deep_symbolize_keys
|
40
|
+
end
|
41
|
+
|
42
|
+
def config_file
|
43
|
+
@config_file ||= full_path.join(CONFIG_NAME)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/afterlife/repo.rb
CHANGED
@@ -74,6 +74,10 @@ module Afterlife
|
|
74
74
|
@current_revision ||= `git rev-parse HEAD`.chomp
|
75
75
|
end
|
76
76
|
|
77
|
+
def current_revision_short
|
78
|
+
@current_revision_short ||= `git rev-parse --short HEAD`.chomp
|
79
|
+
end
|
80
|
+
|
77
81
|
def name
|
78
82
|
full_name.split('/').last.gsub('-', '_')
|
79
83
|
end
|
@@ -110,49 +114,7 @@ module Afterlife
|
|
110
114
|
end
|
111
115
|
|
112
116
|
def conf
|
113
|
-
@conf ||=
|
114
|
-
end
|
115
|
-
|
116
|
-
class Config
|
117
|
-
CONFIG_NAME = '.afterlife.yml'
|
118
|
-
|
119
|
-
attr_reader :full_path
|
120
|
-
|
121
|
-
def initialize(full_path)
|
122
|
-
@full_path = full_path
|
123
|
-
end
|
124
|
-
|
125
|
-
def config
|
126
|
-
return @config if defined?(@config)
|
127
|
-
|
128
|
-
if config_file.exist?
|
129
|
-
@config = base_config
|
130
|
-
@config = parent.deep_merge(base_config) if parent
|
131
|
-
end
|
132
|
-
|
133
|
-
@config ||= {}
|
134
|
-
end
|
135
|
-
|
136
|
-
private
|
137
|
-
|
138
|
-
def parent
|
139
|
-
return @parent if defined?(@parent)
|
140
|
-
|
141
|
-
inherit_from = base_config.delete(:inherit_from)
|
142
|
-
return @parent = nil unless inherit_from
|
143
|
-
|
144
|
-
@parent = Config.new(full_path.join(inherit_from)).config
|
145
|
-
@parent[:cdn]&.delete(:packages)
|
146
|
-
@parent
|
147
|
-
end
|
148
|
-
|
149
|
-
def base_config
|
150
|
-
@base_config ||= YAML.load_file(config_file).deep_symbolize_keys
|
151
|
-
end
|
152
|
-
|
153
|
-
def config_file
|
154
|
-
@config_file ||= full_path.join(CONFIG_NAME)
|
155
|
-
end
|
117
|
+
@conf ||= Provider.new(full_path).config
|
156
118
|
end
|
157
119
|
end
|
158
120
|
end
|
data/lib/afterlife/version.rb
CHANGED
data/lib/afterlife.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: afterlife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genaro Madrid
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -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
|
@@ -123,8 +122,13 @@ files:
|
|
123
122
|
- lib/afterlife/cdn/server.rb
|
124
123
|
- lib/afterlife/cli.rb
|
125
124
|
- lib/afterlife/config.rb
|
125
|
+
- lib/afterlife/config/cli.rb
|
126
|
+
- lib/afterlife/config/provider.rb
|
126
127
|
- lib/afterlife/deploy.rb
|
127
128
|
- lib/afterlife/deploy/cdn_deployment.rb
|
129
|
+
- lib/afterlife/deploy/cdn_stenciljs_deployment.rb
|
130
|
+
- lib/afterlife/deploy/cli.rb
|
131
|
+
- lib/afterlife/deploy/custom_deployment.rb
|
128
132
|
- lib/afterlife/deploy/deployment.rb
|
129
133
|
- lib/afterlife/environment.rb
|
130
134
|
- lib/afterlife/exec.rb
|
@@ -135,10 +139,11 @@ files:
|
|
135
139
|
- lib/afterlife/release/helper.rb
|
136
140
|
- lib/afterlife/release/pre_helper.rb
|
137
141
|
- lib/afterlife/repo.rb
|
142
|
+
- lib/afterlife/repo/config.rb
|
143
|
+
- lib/afterlife/repo/provider.rb
|
138
144
|
- lib/afterlife/stage.rb
|
139
145
|
- lib/afterlife/version.rb
|
140
146
|
- logs/.keep
|
141
|
-
- yarn.lock
|
142
147
|
homepage:
|
143
148
|
licenses: []
|
144
149
|
metadata:
|
@@ -163,5 +168,5 @@ requirements: []
|
|
163
168
|
rubygems_version: 3.2.33
|
164
169
|
signing_key:
|
165
170
|
specification_version: 4
|
166
|
-
summary: Devops
|
171
|
+
summary: Devops utils
|
167
172
|
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"
|