Skip to content

Commit 1be8474

Browse files
committed
Make auto-dirty queries feature off by default for now
1 parent b0ca31a commit 1be8474

File tree

10 files changed

+72
-8
lines changed

10 files changed

+72
-8
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## [1.3.0] - 2026-02-26
2+
3+
- Add auto-dirty queries feature
4+
15
## [1.2.7] - 2026-02-16
26

37
- Make generated castJsonResult.ts files undefined-safe

Gemfile.lock

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
PATH
22
remote: .
33
specs:
4-
foobara-typescript-remote-command-generator (1.2.7)
4+
foobara-typescript-remote-command-generator (1.3.0)
55
foobara (>= 0.1.16, < 2.0.0)
66
foobara-files-generator (< 2.0.0)
77

88
GEM
99
remote: https://rubygems.org/
1010
specs:
11+
addressable (2.8.8)
12+
public_suffix (>= 2.0.2, < 8.0)
1113
ast (2.4.3)
1214
base64 (0.3.0)
1315
bigdecimal (4.0.1)
@@ -25,7 +27,7 @@ GEM
2527
foobara-files-generator (0.1.2)
2628
foobara (>= 0.1.1, < 2.0.0)
2729
foobara-lru-cache (1.0.0)
28-
foobara-rubocop-rules (1.0.11)
30+
foobara-rubocop-rules (1.0.12)
2931
rubocop
3032
rubocop-rspec
3133
foobara-spec-helpers (0.1.0)
@@ -51,6 +53,9 @@ GEM
5153
inheritable-thread-vars (0.0.3)
5254
io-console (0.8.2)
5355
json (2.18.1)
56+
json-schema (6.1.0)
57+
addressable (~> 2.8)
58+
bigdecimal (>= 3.1, < 5)
5459
language_server-protocol (3.17.0.5)
5560
lint_roller (1.1.0)
5661
listen (3.10.0)
@@ -59,6 +64,8 @@ GEM
5964
rb-inotify (~> 0.9, >= 0.9.10)
6065
logger (1.7.0)
6166
lumberjack (1.4.2)
67+
mcp (0.7.1)
68+
json-schema (>= 4.1)
6269
method_source (1.1.0)
6370
nenv (0.3.0)
6471
notiffany (0.1.3)
@@ -77,6 +84,7 @@ GEM
7784
pry-byebug (3.12.0)
7885
byebug (~> 13.0)
7986
pry (>= 0.13, < 0.17)
87+
public_suffix (7.0.2)
8088
racc (1.8.1)
8189
rainbow (3.1.1)
8290
rake (13.3.1)
@@ -102,10 +110,11 @@ GEM
102110
diff-lcs (>= 1.2.0, < 2.0)
103111
rspec-support (~> 3.13.0)
104112
rspec-support (3.13.7)
105-
rubocop (1.84.2)
113+
rubocop (1.85.0)
106114
json (~> 2.3)
107115
language_server-protocol (~> 3.17.0.2)
108116
lint_roller (~> 1.1.0)
117+
mcp (~> 0.6)
109118
parallel (~> 1.10)
110119
parser (>= 3.3.0.2)
111120
rainbow (>= 2.2.2, < 4.0)

spec/remote_generator/write_typescript_to_disk_spec.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
raw_manifest:,
1010
project_directory:,
1111
output_directory:,
12-
fail_if_does_not_pass_linter:
12+
fail_if_does_not_pass_linter:,
13+
auto_dirty_queries:
1314
}
1415
end
1516
let(:project_directory) { "#{__dir__}/../../tmp/test-app" }
@@ -18,6 +19,7 @@
1819
let(:raw_manifest_json) { File.read("spec/fixtures/foobara-manifest.json") }
1920
let(:raw_manifest) { JSON.parse(raw_manifest_json) }
2021
let(:fail_if_does_not_pass_linter) { true }
22+
let(:auto_dirty_queries) { true }
2123

2224
before do
2325
FileUtils.mkdir_p(File.dirname(project_directory))

src/generate_typescript.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ class MissingManifestError < RuntimeError; end
88

99
possible_error MissingManifestError
1010

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
1316

1417
def execute
1518
load_manifest_if_needed
@@ -74,6 +77,12 @@ def add_all_commands_to_set_of_elements_to_generate
7477
end
7578
end
7679

80+
def generate_element
81+
RemoteGenerator.auto_dirty_queries(auto_dirty_queries) do
82+
super
83+
end
84+
end
85+
7786
def add_root_manifest_to_set_of_elements_to_generate
7887
elements_to_generate << manifest
7988
end

src/generators/command_generator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def result_json_requires_cast?
6060
end
6161

6262
def queries_that_are_dirtied_by_this_command
63-
return {} if query?
63+
return {} if query? || !auto_dirty_queries?
6464

6565
return @queries_that_are_dirtied_by_this_command if defined?(@queries_that_are_dirtied_by_this_command)
6666

src/generators/typescript_from_manifest_base_generator.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,10 @@ def path_to_root
431431
path = super
432432
path.empty? ? "./" : path
433433
end
434+
435+
def auto_dirty_queries?
436+
RemoteGenerator.auto_dirty_queries?
437+
end
434438
end
435439
end
436440
end

src/remote_generator.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
module Foobara
22
module RemoteGenerator
33
foobara_domain!
4+
5+
class << self
6+
def auto_dirty_queries(auto_dirty_queries)
7+
if auto_dirty_queries == @auto_dirty_queries
8+
yield
9+
else
10+
old = @auto_dirty_queries
11+
begin
12+
@auto_dirty_queries = auto_dirty_queries
13+
yield
14+
ensure
15+
@auto_dirty_queries = old
16+
end
17+
end
18+
@auto_dirty_queries = auto_dirty_queries
19+
end
20+
21+
def auto_dirty_queries?
22+
@auto_dirty_queries
23+
end
24+
end
425
end
526
end

src/write_typescript_to_disk.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def self.generator_key = "typescript-remote-commands"
1414
description: "This lets you specify a directory to run the linter or npm run build in"
1515
output_directory :string, default: "src/domains"
1616
fail_if_does_not_pass_linter :boolean, default: false
17+
auto_dirty_queries :boolean, default: false
1718
end
1819

1920
possible_error :missing_manifest
@@ -49,9 +50,17 @@ def generate_typescript
4950
# TODO: we need a way to allow values to be nil in type declarations
5051
inputs = raw_manifest ? { raw_manifest: } : { manifest_url: }
5152

53+
if auto_dirty_queries?
54+
inputs[:auto_dirty_queries] = auto_dirty_queries
55+
end
56+
5257
self.paths_to_source_code = run_subcommand!(GenerateTypescript, inputs)
5358
end
5459

60+
def auto_dirty_queries?
61+
auto_dirty_queries
62+
end
63+
5564
def run_post_generation_tasks
5665
Dir.chdir(project_directory || output_directory) do
5766
eslint_fix

templates/base/RemoteCommand.ts.erb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { type Outcome, SuccessfulOutcome, ErrorOutcome } from './Outcome'
22
import { type FoobaraError } from './Error'
3+
<% if auto_dirty_queries? %>
34
import * as QueryCache from './QueryCache'
5+
<% end %>
46

57
export default abstract class RemoteCommand<Inputs, Result, CommandError extends FoobaraError> {
68
static _urlBase: string | undefined
@@ -106,7 +108,9 @@ export default abstract class RemoteCommand<Inputs, Result, CommandError extends
106108
return json
107109
}
108110

111+
<% if auto_dirty_queries? %>
109112
dirties (): Array<[any] | [any, string, any]> { return [] }
113+
<% end %>
110114

111115
async _handleResponse (response: Response): Promise<Outcome<Result, CommandError>> {
112116
const text = await response.text()
@@ -129,6 +133,7 @@ export default abstract class RemoteCommand<Inputs, Result, CommandError extends
129133
return this.outcome
130134
}
131135

136+
<% if auto_dirty_queries? %>
132137
dirtyQueries () {
133138
for (const [commandClass, inputs] of this.dirties()) {
134139
QueryCache.forEachQuery((query) => {
@@ -146,4 +151,5 @@ export default abstract class RemoteCommand<Inputs, Result, CommandError extends
146151
})
147152
}
148153
}
154+
<% end %>
149155
}

version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Foobara
22
module TypescriptRemoteCommandGenerator
33
module Version
4-
VERSION = "1.2.7".freeze
4+
VERSION = "1.3.0".freeze
55
MINIMUM_RUBY_VERSION = ">= 3.4.0".freeze
66
end
77
end

0 commit comments

Comments
 (0)