foobara-typescript-remote-command-generator 1.2.7 → 1.3.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/foobara/typescript_remote_command_generator.rb +1 -6
  4. data/src/{remote_generator/generate_typescript.rb → generate_typescript.rb} +13 -4
  5. data/src/{remote_generator/services → generators}/aggregate_entity_generator.rb +2 -2
  6. data/src/{remote_generator/services → generators}/aggregate_model_generator.rb +3 -3
  7. data/src/{remote_generator/services → generators}/atom_entity_generator.rb +3 -3
  8. data/src/{remote_generator/services → generators}/atom_model_generator.rb +3 -3
  9. data/src/{remote_generator/services → generators}/auth/access_tokens_generator.rb +1 -1
  10. data/src/generators/auth/login_command_generator.rb +29 -0
  11. data/src/{remote_generator/services → generators}/auth/login_generator.rb +4 -2
  12. data/src/generators/auth/logout_command_generator.rb +29 -0
  13. data/src/{remote_generator/services → generators}/auth/logout_generator.rb +4 -2
  14. data/src/{remote_generator/services → generators}/auth/refresh_login_generator.rb +4 -2
  15. data/src/generators/auth/requires_auth_command_generator.rb +27 -0
  16. data/src/{remote_generator/services → generators}/auth/requires_auth_generator.rb +4 -2
  17. data/src/{remote_generator/services → generators}/command_cast_result_generator.rb +6 -6
  18. data/src/{remote_generator/services → generators}/command_errors_generator.rb +2 -2
  19. data/src/{remote_generator/services → generators}/command_errors_index_generator.rb +1 -1
  20. data/src/generators/command_generator.rb +209 -0
  21. data/src/{remote_generator/services → generators}/command_inputs_generator.rb +1 -1
  22. data/src/{remote_generator/services → generators}/command_manifest_generator.rb +1 -1
  23. data/src/{remote_generator/services → generators}/command_result_generator.rb +1 -1
  24. data/src/{remote_generator/services → generators}/dependency_group.rb +2 -2
  25. data/src/{remote_generator/services → generators}/domain_config_generator.rb +1 -1
  26. data/src/{remote_generator/services → generators}/domain_generator.rb +1 -1
  27. data/src/{remote_generator/services → generators}/domain_manifest_generator.rb +1 -1
  28. data/src/{remote_generator/services → generators}/entity_generator.rb +1 -1
  29. data/src/{remote_generator/services → generators}/entity_manifest_generator.rb +1 -1
  30. data/src/{remote_generator/services → generators}/entity_variants_generator.rb +1 -1
  31. data/src/{remote_generator/services → generators}/error_generator.rb +1 -1
  32. data/src/{remote_generator/services → generators}/loaded_entity_generator.rb +1 -1
  33. data/src/{remote_generator/services → generators}/manifest_generator.rb +1 -1
  34. data/src/{remote_generator/services → generators}/model_generator.rb +1 -1
  35. data/src/{remote_generator/services → generators}/model_manifest_generator.rb +1 -1
  36. data/src/{remote_generator/services → generators}/model_variants_generator.rb +1 -1
  37. data/src/{remote_generator/services → generators}/organization_config_generator.rb +1 -1
  38. data/src/{remote_generator/services → generators}/organization_generator.rb +1 -1
  39. data/src/{remote_generator/services → generators}/organization_manifest_generator.rb +1 -1
  40. data/src/{remote_generator/services → generators}/processor_class_generator.rb +1 -1
  41. data/src/generators/remote_command_generator.rb +41 -0
  42. data/src/{remote_generator/services → generators}/root_manifest_generator.rb +1 -1
  43. data/src/{remote_generator/services → generators}/type_generator.rb +3 -3
  44. data/src/{remote_generator/services → generators}/typescript_from_manifest_base_generator.rb +42 -38
  45. data/src/{remote_generator/services → generators}/unloaded_entity_generator.rb +1 -1
  46. data/src/remote_generator.rb +21 -0
  47. data/src/{remote_generator/write_typescript_to_disk.rb → write_typescript_to_disk.rb} +10 -1
  48. data/templates/Command.ts.erb +39 -1
  49. data/templates/base/{RemoteCommand.ts → RemoteCommand.ts.erb} +28 -0
  50. metadata +46 -45
  51. data/src/remote_generator/services/auth/login_command_generator.rb +0 -17
  52. data/src/remote_generator/services/auth/logout_command_generator.rb +0 -17
  53. data/src/remote_generator/services/auth/requires_auth_command_generator.rb +0 -15
  54. data/src/remote_generator/services/command_generator.rb +0 -87
  55. /data/src/{remote_generator/association_depth.rb → association_depth.rb} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b6ba29a2e9cc4baa0b854c2af01f8f9765d784d731f71a27d664c09280050c2
4
- data.tar.gz: 13e3647fdf41efa57db365b7b2ecb652691491cc720dc605548820e0883f0c60
3
+ metadata.gz: 63a56366d8d763f7a5945acb31f26942889b8801d87d473f1cf80670492984ea
4
+ data.tar.gz: f743ce22ffdf47ece2df4d68763a76c959072098fb50c2314da236c667cbc7e6
5
5
  SHA512:
6
- metadata.gz: c6abab21d2187b784d2cf1887c9b5e7d48b11d440819e4215215f37f5ef9c4ea3df0dd6daa79be1a07733440915b26c62bf340ad16c78b4d93617557d834193b
7
- data.tar.gz: 47ce45d8450081c5fc6029f7dc9df67c968103a7e40edda520d2a263452e014cfa54d3123f35ab346002d1bdf490c792ef8419b5cf917f09d47898254c9090f1
6
+ metadata.gz: 3296bab04a57c964281ee3e8b5e4b5db4f3cda345bfbbbf6c9667cbc1eba4cd2e75266a1be6d9cc38836d44b310355201f4590bec04fcf87a33f96e7e988c6fd
7
+ data.tar.gz: 18a1e5716e44579286b0251cbc9b30fc4814c5c7033578ff33d00b91a6640e7e20042acc0a93ded4ff2cc4d001c310f605a3eed448c839d7391b40dad0abf6ea
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [1.3.0] - 2026-02-26
2
+
3
+ - Add auto-dirty queries feature
4
+
1
5
  ## [1.2.7] - 2026-02-16
2
6
 
3
7
  - Make generated castJsonResult.ts files undefined-safe
@@ -5,9 +5,4 @@ require "erb"
5
5
  require "json"
6
6
  require "open-uri"
7
7
 
8
- src = "#{__dir__}/../../src/"
9
-
10
- Foobara::Util.require_directory(src)
11
-
12
- module TypescriptRemoteCommandGenerator
13
- end
8
+ Foobara::Util.require_directory("#{__dir__}/../../src/")
@@ -8,8 +8,11 @@ module Foobara
8
8
 
9
9
  possible_error MissingManifestError
10
10
 
11
- inputs raw_manifest: :associative_array,
12
- manifest_url: :string
11
+ inputs do
12
+ raw_manifest :associative_array
13
+ manifest_url :string
14
+ auto_dirty_queries :boolean, default: false
15
+ end
13
16
 
14
17
  def execute
15
18
  load_manifest_if_needed
@@ -38,11 +41,11 @@ module Foobara
38
41
  attr_accessor :command_manifest, :manifest_data
39
42
 
40
43
  def base_generator
41
- Services::TypescriptFromManifestBaseGenerator
44
+ Generators::TypescriptFromManifestBaseGenerator
42
45
  end
43
46
 
44
47
  def templates_dir
45
- "#{__dir__}/../../templates"
48
+ "#{__dir__}/../templates"
46
49
  end
47
50
 
48
51
  def load_manifest_if_needed
@@ -74,6 +77,12 @@ module Foobara
74
77
  end
75
78
  end
76
79
 
80
+ def generate_element
81
+ RemoteGenerator.auto_dirty_queries(auto_dirty_queries) do
82
+ super
83
+ end
84
+ end
85
+
77
86
  def add_root_manifest_to_set_of_elements_to_generate
78
87
  elements_to_generate << manifest
79
88
  end
@@ -2,7 +2,7 @@ require_relative "loaded_entity_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class AggregateEntityGenerator < LoadedEntityGenerator
7
7
  class << self
8
8
  def new(relevant_manifest)
@@ -26,7 +26,7 @@ module Foobara
26
26
 
27
27
  def model_generators
28
28
  @model_generators ||= types_depended_on.select(&:model?).map do |model|
29
- Services::AggregateModelGenerator.new(model)
29
+ AggregateModelGenerator.new(model)
30
30
  end
31
31
  end
32
32
 
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class AggregateModelGenerator < ModelGenerator
5
5
  class << self
6
6
  def new(relevant_manifest)
@@ -27,9 +27,9 @@ module Foobara
27
27
  def model_generators
28
28
  @model_generators ||= types_depended_on.select(&:model?).map do |model|
29
29
  if model.detached_entity?
30
- Services::AggregateEntityGenerator.new(model)
30
+ AggregateEntityGenerator.new(model)
31
31
  else
32
- Services::AggregateModelGenerator.new(model)
32
+ AggregateModelGenerator.new(model)
33
33
  end
34
34
  end
35
35
  end
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class AtomEntityGenerator < LoadedEntityGenerator
5
5
  class << self
6
6
  def new(relevant_manifest)
@@ -25,9 +25,9 @@ module Foobara
25
25
  def model_generators
26
26
  @model_generators ||= types_depended_on.select(&:model?).map do |model|
27
27
  if model.detached_entity?
28
- Services::UnloadedEntityGenerator.new(model)
28
+ UnloadedEntityGenerator.new(model)
29
29
  else
30
- Services::AtomModelGenerator.new(model)
30
+ AtomModelGenerator.new(model)
31
31
  end
32
32
  end
33
33
  end
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class AtomModelGenerator < ModelGenerator
5
5
  class << self
6
6
  def new(relevant_manifest)
@@ -27,9 +27,9 @@ module Foobara
27
27
  def model_generators
28
28
  @model_generators ||= types_depended_on.select(&:model?).map do |model|
29
29
  if model.detached_entity?
30
- Services::UnloadedEntityGenerator.new(model)
30
+ UnloadedEntityGenerator.new(model)
31
31
  else
32
- Services::AtomModelGenerator.new(model)
32
+ AtomModelGenerator.new(model)
33
33
  end
34
34
  end
35
35
  end
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  module Auth
5
5
  class AccessTokensGenerator < TypescriptFromManifestBaseGenerator
6
6
  def template_path
@@ -0,0 +1,29 @@
1
+ module Foobara
2
+ module RemoteGenerator
3
+ module Generators
4
+ module Auth
5
+ class LoginCommandGenerator < TypescriptFromManifestBaseGenerator
6
+ def import_destructure
7
+ ts_instance_path.first
8
+ end
9
+
10
+ def ts_instance_path
11
+ ["LoginCommand"]
12
+ end
13
+
14
+ def ts_instance_full_path
15
+ ["Foobara", "Auth", "LoginCommand"]
16
+ end
17
+
18
+ def template_path
19
+ ["Foobara", "Auth", "LoginCommand.ts.erb"]
20
+ end
21
+
22
+ def dependencies
23
+ super + [AccessTokensGenerator.new(relevant_manifest)]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  module Auth
5
5
  class LoginGenerator < CommandGenerator
6
6
  def base_class_path
@@ -8,7 +8,9 @@ module Foobara
8
8
  end
9
9
 
10
10
  def dependencies
11
- super + [LoginCommandGenerator.new(relevant_manifest)]
11
+ super.reject do |generator|
12
+ generator.is_a?(RemoteCommandGenerator)
13
+ end + [LoginCommandGenerator.new(relevant_manifest)]
12
14
  end
13
15
  end
14
16
  end
@@ -0,0 +1,29 @@
1
+ module Foobara
2
+ module RemoteGenerator
3
+ module Generators
4
+ module Auth
5
+ class LogoutCommandGenerator < TypescriptFromManifestBaseGenerator
6
+ def import_destructure
7
+ ts_instance_path.first
8
+ end
9
+
10
+ def ts_instance_path
11
+ ["LogoutCommand"]
12
+ end
13
+
14
+ def ts_instance_full_path
15
+ ["Foobara", "Auth", "LogoutCommand"]
16
+ end
17
+
18
+ def template_path
19
+ ["Foobara", "Auth", "LogoutCommand.ts.erb"]
20
+ end
21
+
22
+ def dependencies
23
+ super + [AccessTokensGenerator.new(relevant_manifest)]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  module Auth
5
5
  class LogoutGenerator < CommandGenerator
6
6
  def base_class_path
@@ -8,7 +8,9 @@ module Foobara
8
8
  end
9
9
 
10
10
  def dependencies
11
- super + [LogoutCommandGenerator.new(relevant_manifest)]
11
+ super.reject do |generator|
12
+ generator.is_a?(RemoteCommandGenerator)
13
+ end + [LogoutCommandGenerator.new(relevant_manifest)]
12
14
  end
13
15
  end
14
16
  end
@@ -2,7 +2,7 @@ require_relative "../command_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  module Auth
7
7
  class RefreshLoginGenerator < CommandGenerator
8
8
  def base_class_path
@@ -10,7 +10,9 @@ module Foobara
10
10
  end
11
11
 
12
12
  def dependencies
13
- super + [LoginCommandGenerator.new(relevant_manifest)]
13
+ super.reject do |generator|
14
+ generator.is_a?(RemoteCommandGenerator)
15
+ end + [LoginCommandGenerator.new(relevant_manifest)]
14
16
  end
15
17
  end
16
18
  end
@@ -0,0 +1,27 @@
1
+ require_relative "../typescript_from_manifest_base_generator"
2
+
3
+ module Foobara
4
+ module RemoteGenerator
5
+ module Generators
6
+ module Auth
7
+ class RequiresAuthCommandGenerator < TypescriptFromManifestBaseGenerator
8
+ def import_destructure
9
+ ts_instance_path.first
10
+ end
11
+
12
+ def ts_instance_path
13
+ ["RequiresAuthCommand"]
14
+ end
15
+
16
+ def ts_instance_full_path
17
+ ["Foobara", "Auth", "RequiresAuthCommand"]
18
+ end
19
+
20
+ def template_path
21
+ ["Foobara", "Auth", "RequiresAuthCommand.ts.erb"]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -2,7 +2,7 @@ require_relative "../command_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  module Auth
7
7
  class RequiresAuthGenerator < CommandGenerator
8
8
  def base_class_path
@@ -10,7 +10,9 @@ module Foobara
10
10
  end
11
11
 
12
12
  def dependencies
13
- super + [RequiresAuthCommandGenerator.new(relevant_manifest)]
13
+ super.reject do |generator|
14
+ generator.is_a?(RemoteCommandGenerator)
15
+ end + [RequiresAuthCommandGenerator.new(relevant_manifest)]
14
16
  end
15
17
  end
16
18
  end
@@ -2,7 +2,7 @@ require_relative "command_result_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandCastResultGenerator < CommandResultGenerator
7
7
  class CastTree
8
8
  attr_accessor :children, :declaration_to_cast, :initial
@@ -43,20 +43,20 @@ module Foobara
43
43
 
44
44
  if result_type.detached_entity? && atom?
45
45
  declaration = result_type.is_a?(Manifest::TypeDeclaration) ? result_type.to_type : result_type
46
- return @nested_model_generators = Set[Services::AtomEntityGenerator.new(declaration)]
46
+ return @nested_model_generators = Set[AtomEntityGenerator.new(declaration)]
47
47
  end
48
48
 
49
49
  _models_reachable_from_declaration(result_type, initial: true)&.each do |model|
50
50
  generator_class = if atom?
51
51
  if model.detached_entity?
52
- Services::UnloadedEntityGenerator
52
+ UnloadedEntityGenerator
53
53
  else
54
- Services::AtomModelGenerator
54
+ AtomModelGenerator
55
55
  end
56
56
  elsif aggregate?
57
- Services::AggregateModelGenerator
57
+ AggregateModelGenerator
58
58
  else
59
- Services::ModelGenerator
59
+ ModelGenerator
60
60
  end
61
61
 
62
62
  new_generator = generator_class.new(model)
@@ -3,7 +3,7 @@ require_relative "command_generator"
3
3
 
4
4
  module Foobara
5
5
  module RemoteGenerator
6
- class Services
6
+ module Generators
7
7
  class CommandErrorsGenerator < CommandGenerator
8
8
  alias command_manifest relevant_manifest
9
9
 
@@ -21,7 +21,7 @@ module Foobara
21
21
 
22
22
  def error_generators
23
23
  @error_generators ||= possible_errors.values.map(&:error).sort_by(&:error_name).uniq.map do |error|
24
- Services::ErrorGenerator.new(error)
24
+ ErrorGenerator.new(error)
25
25
  end
26
26
  end
27
27
 
@@ -2,7 +2,7 @@ require_relative "command_errors_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandErrorsIndexGenerator < CommandErrorsGenerator
7
7
  alias command_manifest relevant_manifest
8
8
 
@@ -0,0 +1,209 @@
1
+ require_relative "typescript_from_manifest_base_generator"
2
+
3
+ module Foobara
4
+ module RemoteGenerator
5
+ module Generators
6
+ class CommandGenerator < TypescriptFromManifestBaseGenerator
7
+ alias command_manifest relevant_manifest
8
+
9
+ def target_path
10
+ [*scoped_full_path, "index.ts"]
11
+ end
12
+
13
+ def template_path
14
+ "Command.ts.erb"
15
+ end
16
+
17
+ def domain_generator
18
+ @domain_generator ||= DomainGenerator.new(domain)
19
+ end
20
+
21
+ def organization_generator = domain_generator.organization_generator
22
+ def domain_name = domain_generator.domain_name
23
+ def organization_name = domain_generator.organization_name
24
+
25
+ def errors_in_this_namespace
26
+ @errors_in_this_namespace ||= possible_errors.values.map(&:error).uniq.sort_by(&:error_name).select do |error|
27
+ error.parent&.manifest_path&.map(&:to_s) == manifest_path.map(&:to_s)
28
+ end.map do |error_manifest|
29
+ ErrorGenerator.new(error_manifest)
30
+ end
31
+ end
32
+
33
+ def dependencies
34
+ [
35
+ RemoteCommandGenerator.new(Manifest::RootManifest.new(root_manifest)),
36
+ *queries_that_are_dirtied_by_this_command.keys
37
+ ]
38
+ end
39
+
40
+ def will_define
41
+ ts_instance_path
42
+ end
43
+
44
+ def command_errors_index_generator
45
+ CommandErrorsIndexGenerator.new(command_manifest)
46
+ end
47
+
48
+ def base_class_path
49
+ "base/RemoteCommand"
50
+ end
51
+
52
+ def base_class_name
53
+ base_class_path.split("/").last
54
+ end
55
+
56
+ def result_json_requires_cast?
57
+ # What types require a cast?
58
+ # :date and :datetime, :model, custom type declaration (check #custom?)
59
+ result_type && type_requires_cast?(result_type)
60
+ end
61
+
62
+ def queries_that_are_dirtied_by_this_command
63
+ return {} if query? || !auto_dirty_queries?
64
+
65
+ return @queries_that_are_dirtied_by_this_command if defined?(@queries_that_are_dirtied_by_this_command)
66
+
67
+ command_result_type = result_type
68
+
69
+ paths_to_data = nil
70
+
71
+ if command_result_type
72
+ command_result_type = command_result_type.to_type if command_result_type.is_a?(Manifest::TypeDeclaration)
73
+
74
+ if command_result_type.detached_entity?
75
+ paths_to_data = { command_result_type => [:outcome, :result, command_result_type.primary_key_name] }
76
+ else
77
+ result_type_associations = Manifest::Model.associations(command_result_type)
78
+
79
+ unless result_type_associations.empty?
80
+ data_path, entity_type = result_type_associations.to_a.first
81
+ paths_to_data = { entity_type => [:outcome, :result, data_path, entity_type.primary_key_name] }
82
+ end
83
+ end
84
+ end
85
+
86
+ if paths_to_data.nil?
87
+ if inputs_type
88
+ inputs_associations = Manifest::Model.associations(inputs_type)
89
+
90
+ unless inputs_associations.empty?
91
+ data_path, entity_type = inputs_associations.to_a.first
92
+ paths_to_data = { entity_type => [:inputs, *data_path] }
93
+ end
94
+ end
95
+ end
96
+
97
+ dirties = {}
98
+
99
+ unless paths_to_data.nil?
100
+ all_queries = Manifest::RootManifest.new(root_manifest).queries.map do |query|
101
+ generator_for(query)
102
+ end
103
+
104
+ paths_to_data.each_pair do |entity_type, path|
105
+ all_queries.each do |query|
106
+ query_inputs_type = query.inputs_type
107
+
108
+ if query_inputs_type
109
+ query_associations = Manifest::Model.associations(query_inputs_type)
110
+ query_associations.each_pair do |query_association_path, query_entity_class|
111
+ query_entity_class = query_entity_class.to_type if query_entity_class.is_a?(Manifest::TypeDeclaration)
112
+
113
+ if query_entity_class == entity_type
114
+ dirties[query] = [path, query_association_path]
115
+ end
116
+ end
117
+
118
+ next if dirties.key?(query)
119
+ end
120
+
121
+ query_result_type = query.result_type
122
+ next unless query_result_type
123
+
124
+ if query_result_type.is_a?(Manifest::TypeDeclaration) && query_result_type.reference?
125
+ query_result_type = query_result_type.to_type
126
+ end
127
+
128
+ if query_result_type == entity_type
129
+ dirties[query] = true
130
+ else
131
+ entity_classes = Manifest::Model.associations(query_result_type).values.uniq
132
+
133
+ entity_classes.each do |query_entity_class|
134
+ query_entity_class = query_entity_class.to_type if query_entity_class.is_a?(Manifest::TypeDeclaration)
135
+
136
+ if query_entity_class == entity_type
137
+ dirties[query] = true
138
+ break
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ @queries_that_are_dirtied_by_this_command = dirties
147
+ end
148
+
149
+ def queries_dirtied_without_inputs
150
+ return @queries_dirtied_without_inputs if defined?(@queries_dirtied_without_inputs)
151
+
152
+ queries_dirtied = []
153
+
154
+ queries_that_are_dirtied_by_this_command.each_pair do |query, value|
155
+ if value == true
156
+ queries_dirtied << query
157
+ end
158
+ end
159
+
160
+ @queries_dirtied_without_inputs = queries_dirtied
161
+ end
162
+
163
+ def queries_dirtied_with_inputs
164
+ return @queries_dirtied_with_inputs if defined?(@queries_dirtied_with_inputs)
165
+
166
+ dirtied_queries = {}
167
+
168
+ queries_that_are_dirtied_by_this_command.each_pair do |query, value|
169
+ if value != true
170
+ dirtied_queries[query] = value
171
+ end
172
+ end
173
+
174
+ @queries_dirtied_with_inputs = dirtied_queries
175
+ end
176
+
177
+ private
178
+
179
+ def type_requires_cast?(type_declaration)
180
+ if type_declaration.is_a?(Manifest::Attributes)
181
+ return false unless type_declaration.has_attribute_declarations?
182
+ return false if type_declaration.attribute_declarations.empty?
183
+
184
+ type_declaration.attribute_declarations.values.any? do |attribute_declaration|
185
+ type_requires_cast?(attribute_declaration)
186
+ end
187
+ elsif type_declaration.is_a?(Manifest::Array)
188
+ element_type = type_declaration.element_type
189
+ element_type && type_requires_cast?(element_type)
190
+ else
191
+ return true if type_declaration.model?
192
+
193
+ type_symbol = type_declaration.type_symbol
194
+
195
+ if type_symbol == :date || type_symbol == :datetime
196
+ return true
197
+ end
198
+
199
+ if type_declaration.custom?
200
+ type_declaration = type_declaration.to_type if type_declaration.is_a?(Manifest::TypeDeclaration)
201
+ base_type = type_declaration.base_type
202
+ type_requires_cast?(base_type)
203
+ end
204
+ end
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandInputsGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias command_manifest relevant_manifest
8
8
 
@@ -2,7 +2,7 @@ require_relative "manifest_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandManifestGenerator < ManifestGenerator
7
7
  def target_path
8
8
  [*scoped_full_path, "manifest.json"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandResultGenerator < CommandGenerator
7
7
  alias command_manifest relevant_manifest
8
8
 
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class DependencyGroup
5
5
  class CollisionData
6
6
  attr_accessor :points
@@ -135,7 +135,7 @@ module Foobara
135
135
  dep != other_dep && name == non_colliding_type_name(other_dep, points)
136
136
  end
137
137
 
138
- if will_define&.include?(name)
138
+ if will_define&.include?(name) && dep != deps_are_for
139
139
  collisions << deps_are_for
140
140
  end
141
141
 
@@ -2,7 +2,7 @@ require_relative "domain_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class DomainConfigGenerator < DomainGenerator
7
7
  def target_path
8
8
  [*super[0..-2], "config.ts"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class DomainGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias domain_manifest relevant_manifest
8
8