mono_repo_deps 0.1.13 → 0.2.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 +4 -4
- data/example/bounded_contexts/cart/cart_core/Package.rb +2 -2
- data/lib/mono_repo_deps/package/dependency_bypasser.rb +15 -16
- data/lib/mono_repo_deps/package/factory.rb +2 -7
- data/lib/mono_repo_deps/package/initializer.rb +19 -11
- data/lib/mono_repo_deps/package.rb +11 -7
- data/lib/mono_repo_deps/version.rb +1 -1
- data/lib/mono_repo_deps.rb +2 -30
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 689c1b114e7155c4f979478cf0923505fa425c106f9b9a9f2f9cc019d9539a4e
|
4
|
+
data.tar.gz: dc52f23c181e507fac026baedd3a5e11277df5b15fb9b81723ebae0fa04884bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3372ecbbf1912fa2ea402467d760a486dfdfaf2e4acb7dd9c99236d6b58a89cea20b0c2adf44681fe956fee140f338ff405cb3297f3c65d8562e40402252f0ab
|
7
|
+
data.tar.gz: 44ac182cf6738033b9b010931b7da4e8b96e553c8c9f89b4429e3d157f40535f75596639d827d2316972dc12b47f36e4014b9dba7a32810a010966c30c515146
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
class MonoRepoDeps::Package::DependencyBypasser
|
2
4
|
include MonoRepoDeps::Mixins
|
3
5
|
|
@@ -11,31 +13,28 @@ class MonoRepoDeps::Package::DependencyBypasser
|
|
11
13
|
params(
|
12
14
|
package_name: Symbol,
|
13
15
|
env: Symbol,
|
14
|
-
only: T.nilable(T::Array[Symbol]),
|
15
|
-
skip: T.nilable(T::Array[Symbol]),
|
16
|
-
imported: T::Array[Symbol],
|
17
|
-
packages_order: T::Array[Symbol],
|
18
16
|
)
|
19
17
|
.returns(T::Array[Symbol])
|
20
18
|
end
|
21
|
-
def call(package_name:, env
|
19
|
+
def call(package_name:, env:)
|
20
|
+
walk(package_name: package_name, env: env, imported: Set.new)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def walk(package_name:, env:, imported:, packages_order: [])
|
22
26
|
package = packages_repo.find!(package_name)
|
23
27
|
|
24
|
-
return
|
25
|
-
imported.push(package.name)
|
28
|
+
return if !imported.add?(package_name)
|
26
29
|
|
27
30
|
package_dependencies = package.get_dependencies(env)
|
28
|
-
|
29
|
-
package_dependencies
|
30
|
-
|
31
|
-
|
32
|
-
self.call(
|
33
|
-
package_name: dependency_dto.name,
|
34
|
-
skip: dependency_dto.skip,
|
35
|
-
only: dependency_dto.only,
|
31
|
+
|
32
|
+
package_dependencies.each do |name|
|
33
|
+
walk(
|
34
|
+
package_name: name,
|
36
35
|
imported: imported,
|
37
36
|
packages_order: packages_order,
|
38
|
-
env: env
|
37
|
+
env: env# MonoRepoDeps::Package::DEFAULT_ENV,
|
39
38
|
)
|
40
39
|
end
|
41
40
|
|
@@ -30,7 +30,6 @@ class MonoRepoDeps::Package::Factory
|
|
30
30
|
package.get_dependency_envs.each do |env|
|
31
31
|
already_imported = package
|
32
32
|
.get_dependencies(env)
|
33
|
-
.map(&:name)
|
34
33
|
.group_by{ |e| e }
|
35
34
|
.select { |k, v| v.size > 1 }
|
36
35
|
.keys
|
@@ -59,17 +58,13 @@ class MonoRepoDeps::Package::Factory
|
|
59
58
|
sig do
|
60
59
|
params(
|
61
60
|
package_name: T.any(Symbol, String),
|
62
|
-
skip: T.nilable(T::Array[Symbol]),
|
63
|
-
only: T.nilable(T::Array[Symbol]),
|
64
61
|
)
|
65
62
|
.void
|
66
63
|
end
|
67
|
-
def import(package_name
|
64
|
+
def import(package_name)
|
68
65
|
package_name = package_name.to_sym
|
69
|
-
skip = skip&.map(&:to_sym)
|
70
|
-
only = only&.map(&:to_sym)
|
71
66
|
|
72
|
-
@dependencies[@current_env] <<
|
67
|
+
@dependencies[@current_env] << package_name
|
73
68
|
|
74
69
|
nil
|
75
70
|
end
|
@@ -14,24 +14,32 @@ class MonoRepoDeps::Package::Initializer
|
|
14
14
|
params(
|
15
15
|
package_name: T.any(Symbol, String),
|
16
16
|
env: Symbol,
|
17
|
-
|
17
|
+
prevent_eager_load: T::Boolean
|
18
18
|
)
|
19
19
|
.void
|
20
20
|
end
|
21
|
-
def call(package_name, env:,
|
22
|
-
|
23
|
-
|
21
|
+
def call(package_name, env:, prevent_eager_load: false)
|
22
|
+
package = repo.find!(package_name.to_sym)
|
23
|
+
sorted_packages = nil
|
24
24
|
|
25
25
|
time = Benchmark.realtime do
|
26
|
-
|
27
|
-
.call(package_name:
|
28
|
-
.map { repo.find(
|
29
|
-
|
30
|
-
|
31
|
-
.
|
26
|
+
sorted_packages = dependency_bypasser
|
27
|
+
.call(package_name: package.name, env: env)
|
28
|
+
.map { |name| repo.find(name) }
|
29
|
+
|
30
|
+
sorted_packages.each do |sorted_package|
|
31
|
+
MonoRepoDeps.current_project.loader.push_dir(sorted_package.workdir_path)
|
32
|
+
MonoRepoDeps.current_project.loader.loader.do_not_eager_load(sorted_package.workdir_path) if prevent_eager_load
|
33
|
+
end
|
34
|
+
|
35
|
+
MonoRepoDeps.current_project.loader.setup
|
36
|
+
|
37
|
+
sorted_packages.each do |package|
|
38
|
+
require package.entrypoint_file if File.exist?(package.entrypoint_file)
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
|
-
puts "imported package '#{package_name}' with #{
|
42
|
+
puts "imported package '#{package_name}' with #{sorted_packages.size} dependencies in #{'%.2f' % time} seconds for env: #{env}"
|
35
43
|
|
36
44
|
nil
|
37
45
|
end
|
@@ -5,14 +5,12 @@ class MonoRepoDeps::Package
|
|
5
5
|
|
6
6
|
DEFAULT_ENV = :_default_
|
7
7
|
|
8
|
-
DependencyDto = Struct.new(:name, :only, :skip, keyword_init: true)
|
9
|
-
|
10
8
|
sig do
|
11
9
|
params(
|
12
10
|
name: Symbol,
|
13
11
|
root_path: String,
|
14
12
|
package_dirname: String,
|
15
|
-
dependencies: T::Hash[Symbol,
|
13
|
+
dependencies: T::Hash[Symbol, Symbol]
|
16
14
|
)
|
17
15
|
.void
|
18
16
|
end
|
@@ -26,12 +24,18 @@ class MonoRepoDeps::Package
|
|
26
24
|
end
|
27
25
|
|
28
26
|
sig do
|
29
|
-
params(env: T.nilable(Symbol)).returns(T::Array[
|
27
|
+
params(env: T.nilable(Symbol)).returns(T::Array[Symbol])
|
30
28
|
end
|
31
29
|
def get_dependencies(env = nil)
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
default_deps = @dependencies.fetch(DEFAULT_ENV, [])
|
31
|
+
env_deps = @dependencies.fetch(env, [])
|
32
|
+
|
33
|
+
default_deps | env_deps
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_bc
|
37
|
+
# /app/bounded_contexts/jobs/microservices/jobs_app
|
38
|
+
@root_path.split('/')[3]
|
35
39
|
end
|
36
40
|
|
37
41
|
def get_dependency_envs
|
data/lib/mono_repo_deps.rb
CHANGED
@@ -45,12 +45,12 @@ module MonoRepoDeps
|
|
45
45
|
class << self
|
46
46
|
attr_accessor :current_project
|
47
47
|
|
48
|
-
def init_package(package_name = nil, from: caller_locations.first.path, env: nil)
|
48
|
+
def init_package(package_name = nil, from: caller_locations.first.path, env: nil, prevent_eager_load: false)
|
49
49
|
sync_current_project!(from) do
|
50
50
|
package_name ||= Container["package.builder"].call(from, current_project.root_path, current_project.package_dirname).name
|
51
51
|
env ||= current_project.env
|
52
52
|
|
53
|
-
Container["package.initializer"].call(package_name, env: env)
|
53
|
+
Container["package.initializer"].call(package_name, env: env, prevent_eager_load: prevent_eager_load)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -84,34 +84,6 @@ module MonoRepoDeps
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
def check_classes(from = caller_locations.first.path)
|
88
|
-
sync_current_project!(from) do
|
89
|
-
all_packages = Container["package.repo"].all
|
90
|
-
total_count = all_packages.size
|
91
|
-
imported = []
|
92
|
-
packages_order = []
|
93
|
-
|
94
|
-
all_packages.each_with_index do |package, idx|
|
95
|
-
puts "loading package #{package.name} (#{idx+1}/#{total_count}/#{imported.size})"
|
96
|
-
|
97
|
-
Container["package.dependency_bypasser"].call(
|
98
|
-
package_name: package.name,
|
99
|
-
imported: imported,
|
100
|
-
packages_order: packages_order,
|
101
|
-
env: current_project.env
|
102
|
-
)
|
103
|
-
end
|
104
|
-
|
105
|
-
packages_order
|
106
|
-
.uniq
|
107
|
-
.map { Container["package.repo"].find(_1) }
|
108
|
-
.each { current_project.loader.push_dir(_1.workdir_path) }
|
109
|
-
.tap { current_project.loader.setup }
|
110
|
-
.each { require _1.entrypoint_file if File.exist?(_1.entrypoint_file) }
|
111
|
-
.tap { current_project.loader.check_classes }
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
87
|
def sync_current_project!(path, &block)
|
116
88
|
path = File.expand_path(path)
|
117
89
|
path = File.dirname(path) unless File.directory?(path)
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mono_repo_deps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Kononov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: sorbet-
|
14
|
+
name: sorbet-runtime
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.5.
|
19
|
+
version: 0.5.11164
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.5.
|
26
|
+
version: 0.5.11164
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dry-auto_inject
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -292,7 +292,7 @@ metadata:
|
|
292
292
|
homepage_uri: https://github.com/droidlabs/mono_repo_deps
|
293
293
|
source_code_uri: https://github.com/droidlabs/mono_repo_deps
|
294
294
|
changelog_uri: https://github.com/droidlabs/mono_repo_deps
|
295
|
-
post_install_message:
|
295
|
+
post_install_message:
|
296
296
|
rdoc_options: []
|
297
297
|
require_paths:
|
298
298
|
- lib
|
@@ -308,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
308
308
|
version: '0'
|
309
309
|
requirements: []
|
310
310
|
rubygems_version: 3.1.6
|
311
|
-
signing_key:
|
311
|
+
signing_key:
|
312
312
|
specification_version: 4
|
313
313
|
summary: A Ruby gem for efficiently managing dependencies within a monorepo.
|
314
314
|
test_files: []
|