types_from_serializers 2.4.0 → 2.6.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/CHANGELOG.md +24 -0
- data/lib/types_from_serializers/generator.rb +67 -11
- data/lib/types_from_serializers/railtie.rb +7 -7
- data/lib/types_from_serializers/version.rb +1 -1
- metadata +2 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5ba3078a6ac5b9c49a435628333f17bcd3136ad469acd9aa074ab5d92f359c75
|
|
4
|
+
data.tar.gz: 8f19bc101b8634b1afbc1d64ef66372a87f448bcaa5a802ad6c6ca39c607749b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e1b5481824e42a2d7721946e9a3d39dd533074d3ef4f7f5d6fd89dbd7a754e8ccb689d30af3ec211f49602ce81c11ac34e79079e6408a1e2a294687757431312
|
|
7
|
+
data.tar.gz: 4d8d66623371ec2fe42effadde394103b6164fec7400af77addcb7abea266ca8bbc1d8587cffa3f0d9f107694328f585aef469161e40428e0169f2972b09037f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# [2.6.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.5.0...types_from_serializers@2.6.0) (2026-05-06)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* relax oj_serializers dependency by removing the upper constraint ([#34](https://github.com/ElMassimo/types_from_serializers/issues/34)) ([3018e89](https://github.com/ElMassimo/types_from_serializers/commit/3018e8937a6808123bf0dd482e730bc666d20137))
|
|
7
|
+
* support multiple generator instances for Rails monolith sub-apps ([#32](https://github.com/ElMassimo/types_from_serializers/issues/32)) ([33ce3c1](https://github.com/ElMassimo/types_from_serializers/commit/33ce3c1cfa78c6c899ef9fdd05a034ccde50431f))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# [2.5.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.4.0...types_from_serializers@2.5.0) (2026-01-02)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* generated types for self-referential attributes ([#28](https://github.com/ElMassimo/types_from_serializers/issues/28)) ([abd5073](https://github.com/ElMassimo/types_from_serializers/commit/abd507321da6a796d29c8aab966d18c3c6627002))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* add 'time' datatype ([#30](https://github.com/ElMassimo/types_from_serializers/issues/30)) ([9427a4a](https://github.com/ElMassimo/types_from_serializers/commit/9427a4a64f8e344416b84007b28e49ec7f8537c3))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
1
25
|
# [2.4.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.3.0...types_from_serializers@2.4.0) (2025-04-08)
|
|
2
26
|
|
|
3
27
|
|
|
@@ -127,6 +127,7 @@ module TypesFromSerializers
|
|
|
127
127
|
.partition { |type| type.respond_to?(:ts_interface) }
|
|
128
128
|
|
|
129
129
|
serializer_type_imports = association_serializers.map(&:ts_interface)
|
|
130
|
+
.reject { |type| type.name == name } # avoid self-imports (e.g. for recursive types)
|
|
130
131
|
.map { |type| [type.name, relative_path(type.pathname, pathname)] }
|
|
131
132
|
|
|
132
133
|
custom_type_imports = attribute_types
|
|
@@ -264,11 +265,21 @@ module TypesFromSerializers
|
|
|
264
265
|
|
|
265
266
|
attr_reader :force_generation
|
|
266
267
|
|
|
268
|
+
# Public: Registry of named configurations for multi-app setups.
|
|
269
|
+
def configs
|
|
270
|
+
@configs ||= {}
|
|
271
|
+
end
|
|
272
|
+
|
|
267
273
|
# Public: Configuration of the code generator.
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
274
|
+
# Without a name: returns/modifies the default config (backward compatible).
|
|
275
|
+
# With a name: returns/creates a named config for a specific sub-app.
|
|
276
|
+
def config(name = :default, &block)
|
|
277
|
+
cfg = if name == :default
|
|
278
|
+
@config ||= default_config(root)
|
|
279
|
+
else
|
|
280
|
+
configs[name] ||= default_config(root)
|
|
271
281
|
end
|
|
282
|
+
cfg.tap { |c| yield(c) if block }
|
|
272
283
|
end
|
|
273
284
|
|
|
274
285
|
# Public: Generates code for all serializers in the app.
|
|
@@ -287,12 +298,36 @@ module TypesFromSerializers
|
|
|
287
298
|
end
|
|
288
299
|
end
|
|
289
300
|
|
|
301
|
+
# Public: Generates types for all registered configurations (default + named).
|
|
302
|
+
# Use this in monolith setups with multiple sub-apps.
|
|
303
|
+
def generate_all(force: ENV["SERIALIZER_TYPES_FORCE"])
|
|
304
|
+
all_configs_list.each do |cfg|
|
|
305
|
+
with_active_config(cfg) { generate(force: force) }
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
290
309
|
def generate_changed
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
310
|
+
chg = changes_for(config)
|
|
311
|
+
if chg.updated?
|
|
312
|
+
config.output_dir.rmtree if chg.any_removed?
|
|
313
|
+
load_serializers(chg.modified_files)
|
|
294
314
|
generate
|
|
295
|
-
|
|
315
|
+
chg.clear
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Public: Like generate_changed but for all registered configurations.
|
|
320
|
+
def generate_all_changed
|
|
321
|
+
all_configs_list.each do |cfg|
|
|
322
|
+
chg = changes_for(cfg)
|
|
323
|
+
if chg.updated?
|
|
324
|
+
with_active_config(cfg) do
|
|
325
|
+
config.output_dir.rmtree if chg.any_removed?
|
|
326
|
+
load_serializers(chg.modified_files)
|
|
327
|
+
generate
|
|
328
|
+
chg.clear
|
|
329
|
+
end
|
|
330
|
+
end
|
|
296
331
|
end
|
|
297
332
|
end
|
|
298
333
|
|
|
@@ -320,9 +355,14 @@ module TypesFromSerializers
|
|
|
320
355
|
config.skip_serializer_if.call(serializer)
|
|
321
356
|
end
|
|
322
357
|
|
|
323
|
-
# Internal: Returns
|
|
358
|
+
# Internal: Returns the Changes tracker for the default config (backward compatible).
|
|
324
359
|
def track_changes
|
|
325
|
-
|
|
360
|
+
changes_for(config)
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
# Public: Returns Changes trackers for all registered configurations.
|
|
364
|
+
def all_changes
|
|
365
|
+
all_configs_list.map { |cfg| changes_for(cfg) }
|
|
326
366
|
end
|
|
327
367
|
|
|
328
368
|
private
|
|
@@ -331,8 +371,23 @@ module TypesFromSerializers
|
|
|
331
371
|
defined?(Rails) ? Rails.root : Pathname.new(Dir.pwd)
|
|
332
372
|
end
|
|
333
373
|
|
|
334
|
-
def
|
|
335
|
-
@
|
|
374
|
+
def changes_for(cfg)
|
|
375
|
+
@changes_registry ||= {}
|
|
376
|
+
@changes_registry[cfg.object_id] ||= Changes.new(cfg.serializers_dirs)
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
# Internal: Returns the default config followed by all named configs.
|
|
380
|
+
def all_configs_list
|
|
381
|
+
[(@config || default_config(root))] + configs.values
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# Internal: Temporarily sets the active config for the duration of a block,
|
|
385
|
+
# so all internal methods and refinements pick up the correct config.
|
|
386
|
+
def with_active_config(cfg)
|
|
387
|
+
saved, @config = @config, cfg
|
|
388
|
+
yield
|
|
389
|
+
ensure
|
|
390
|
+
@config = saved
|
|
336
391
|
end
|
|
337
392
|
|
|
338
393
|
def all_serializer_files
|
|
@@ -385,6 +440,7 @@ module TypesFromSerializers
|
|
|
385
440
|
# Maps SQL column types to TypeScript native and custom types.
|
|
386
441
|
sql_to_typescript_type_mapping: {
|
|
387
442
|
boolean: :boolean,
|
|
443
|
+
time: "string | Date",
|
|
388
444
|
date: "string | Date",
|
|
389
445
|
datetime: "string | Date",
|
|
390
446
|
decimal: "string | number",
|
|
@@ -14,15 +14,17 @@ class TypesFromSerializers::Railtie < Rails::Railtie
|
|
|
14
14
|
require "listen"
|
|
15
15
|
|
|
16
16
|
app.config.after_initialize do
|
|
17
|
-
|
|
17
|
+
TypesFromSerializers.all_changes.each do |changes|
|
|
18
|
+
app.reloaders << changes
|
|
19
|
+
end
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
app.config.to_prepare do
|
|
21
|
-
TypesFromSerializers.
|
|
23
|
+
TypesFromSerializers.generate_all_changed
|
|
22
24
|
end
|
|
23
25
|
else
|
|
24
26
|
app.config.to_prepare do
|
|
25
|
-
TypesFromSerializers.
|
|
27
|
+
TypesFromSerializers.generate_all
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
Rails.logger.warn "Add 'listen' to your Gemfile to automatically generate code on serializer changes."
|
|
@@ -38,10 +40,8 @@ class TypesFromSerializers::Railtie < Rails::Railtie
|
|
|
38
40
|
require_relative "generator"
|
|
39
41
|
start_time = Time.zone.now
|
|
40
42
|
print "Generating TypeScript interfaces..."
|
|
41
|
-
|
|
42
|
-
puts "completed in #{(Time.zone.now - start_time).round(2)} seconds
|
|
43
|
-
puts "Found #{serializers.size} serializers:"
|
|
44
|
-
puts serializers.map { |s| "\t#{s.name}" }.join("\n")
|
|
43
|
+
TypesFromSerializers.generate_all(force: true)
|
|
44
|
+
puts "completed in #{(Time.zone.now - start_time).round(2)} seconds."
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: types_from_serializers
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Máximo Mussini
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-05-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: railties
|
|
@@ -31,9 +31,6 @@ dependencies:
|
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: 2.0.2
|
|
34
|
-
- - "~>"
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
version: '2.0'
|
|
37
34
|
type: :runtime
|
|
38
35
|
prerelease: false
|
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -41,9 +38,6 @@ dependencies:
|
|
|
41
38
|
- - ">="
|
|
42
39
|
- !ruby/object:Gem::Version
|
|
43
40
|
version: 2.0.2
|
|
44
|
-
- - "~>"
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: '2.0'
|
|
47
41
|
- !ruby/object:Gem::Dependency
|
|
48
42
|
name: listen
|
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|