typelizer 0.5.4 → 0.5.5
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 +33 -1
- data/README.md +7 -0
- data/lib/typelizer/config.rb +2 -0
- data/lib/typelizer/interface.rb +3 -3
- data/lib/typelizer/property_sorter.rb +24 -0
- data/lib/typelizer/serializer_plugins/alba/trait_interface.rb +2 -1
- data/lib/typelizer/version.rb +1 -1
- data/lib/typelizer.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7b353423e2bc10fd89e3d944692c04b41b69f6b75567821060b5b9e84b5009a0
|
|
4
|
+
data.tar.gz: 6abb793e276d1a6627284ac7e3e5a37888e9d48850f0f74c3475ee5034c06d11
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 92ebe7361f52e8644576b8eabffcf0602f24369e9f6a9bc82837550b123440438befef9fb0d730c8c96cab63e111858aa05088b65aa46ab2a1c6b2c58868fcff
|
|
7
|
+
data.tar.gz: 9ee89e0e1761257e51a97ba4666c3cecc4c02581f1726117f67f5328be510b4fd05653f46effad3d33fb119dcee01c9734160be3b2893d3cf566a2d5079c05f5
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning].
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.5] - 2025-12-24
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- New `properties_sort_order` configuration option for consistent property ordering in generated TypeScript interfaces. ([@skryukov])
|
|
15
|
+
|
|
16
|
+
```ruby
|
|
17
|
+
Typelizer.configure do |config|
|
|
18
|
+
# Sort properties alphabetically with 'id' first
|
|
19
|
+
config.properties_sort_order = :id_first_alphabetical
|
|
20
|
+
end
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Available options:
|
|
24
|
+
- `:none` (default) - preserve serializer definition order
|
|
25
|
+
- `:alphabetical` - sort properties A-Z (case-insensitive)
|
|
26
|
+
- `:id_first_alphabetical` - place `id` first, then sort remaining A-Z
|
|
27
|
+
- `Proc` - custom sorting logic
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
# Custom sorting example
|
|
31
|
+
config.properties_sort_order = ->(props) {
|
|
32
|
+
priority = %w[id uuid type]
|
|
33
|
+
props.sort_by { |p| [priority.index(p.name) || 999, p.name] }
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- Fix self-import issue when using custom `typelize` types for self-referential associations in namespaced serializers. ([@skryukov])
|
|
40
|
+
|
|
10
41
|
## [0.5.4] - 2025-12-08
|
|
11
42
|
|
|
12
43
|
### Added
|
|
@@ -279,7 +310,8 @@ and this project adheres to [Semantic Versioning].
|
|
|
279
310
|
[@prog-supdex]: https://github.com/prog-supdex
|
|
280
311
|
[@ventsislaf]: https://github.com/ventsislaf
|
|
281
312
|
|
|
282
|
-
[Unreleased]: https://github.com/skryukov/typelizer/compare/v0.5.
|
|
313
|
+
[Unreleased]: https://github.com/skryukov/typelizer/compare/v0.5.5...HEAD
|
|
314
|
+
[0.5.5]: https://github.com/skryukov/typelizer/compare/v0.5.4...v0.5.5
|
|
283
315
|
[0.5.4]: https://github.com/skryukov/typelizer/compare/v0.5.3...v0.5.4
|
|
284
316
|
[0.5.3]: https://github.com/skryukov/typelizer/compare/v0.5.2...v0.5.3
|
|
285
317
|
[0.5.2]: https://github.com/skryukov/typelizer/compare/v0.5.1...v0.5.2
|
data/README.md
CHANGED
|
@@ -486,6 +486,13 @@ Typelizer.configure do |config|
|
|
|
486
486
|
# Custom transformation for generated properties
|
|
487
487
|
config.properties_transformer = ->(properties) { ... }
|
|
488
488
|
|
|
489
|
+
# Strategy for ordering properties in generated TypeScript interfaces
|
|
490
|
+
# :none - preserve serializer definition order (default)
|
|
491
|
+
# :alphabetical - sort properties A-Z (case-insensitive)
|
|
492
|
+
# :id_first_alphabetical - place 'id' first, then sort remaining A-Z
|
|
493
|
+
# Proc - custom sorting function receiving array of Property objects
|
|
494
|
+
config.properties_sort_order = :none
|
|
495
|
+
|
|
489
496
|
# Plugin for model type inference (default: ModelPlugins::Auto)
|
|
490
497
|
config.model_plugin = Typelizer::ModelPlugins::Auto
|
|
491
498
|
|
data/lib/typelizer/config.rb
CHANGED
|
@@ -23,6 +23,7 @@ module Typelizer
|
|
|
23
23
|
:serializer_name_mapper,
|
|
24
24
|
:serializer_model_mapper,
|
|
25
25
|
:properties_transformer,
|
|
26
|
+
:properties_sort_order,
|
|
26
27
|
:model_plugin,
|
|
27
28
|
:serializer_plugin,
|
|
28
29
|
:plugin_configs,
|
|
@@ -77,6 +78,7 @@ module Typelizer
|
|
|
77
78
|
types_import_path: "@/types",
|
|
78
79
|
types_global: DEFAULT_TYPES_GLOBAL,
|
|
79
80
|
properties_transformer: nil,
|
|
81
|
+
properties_sort_order: :none,
|
|
80
82
|
verbatim_module_syntax: false
|
|
81
83
|
}
|
|
82
84
|
end
|
data/lib/typelizer/interface.rb
CHANGED
|
@@ -48,7 +48,7 @@ module Typelizer
|
|
|
48
48
|
props = serializer_plugin.meta_fields || []
|
|
49
49
|
props = infer_types(props, :_typelizer_meta_attributes)
|
|
50
50
|
props = config.properties_transformer.call(props) if config.properties_transformer
|
|
51
|
-
props
|
|
51
|
+
PropertySorter.sort(props, config.properties_sort_order)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -63,7 +63,7 @@ module Typelizer
|
|
|
63
63
|
props = serializer_plugin.properties
|
|
64
64
|
props = infer_types(props)
|
|
65
65
|
props = config.properties_transformer.call(props) if config.properties_transformer
|
|
66
|
-
props
|
|
66
|
+
PropertySorter.sort(props, config.properties_sort_order)
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -119,7 +119,7 @@ module Typelizer
|
|
|
119
119
|
prop.with_traits.map { |t| "#{prop.type.name}#{t.to_s.camelize}Trait" }
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
-
(custom_type_imports + serializer_types + trait_imports + Array(parent_interface&.name)).uniq -
|
|
122
|
+
(custom_type_imports + serializer_types + trait_imports + Array(parent_interface&.name)).uniq - [self_type_name, name]
|
|
123
123
|
end
|
|
124
124
|
end
|
|
125
125
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Typelizer
|
|
4
|
+
module PropertySorter
|
|
5
|
+
def self.sort(props, sort_order)
|
|
6
|
+
case sort_order
|
|
7
|
+
when :none, nil
|
|
8
|
+
props
|
|
9
|
+
when :alphabetical
|
|
10
|
+
props.sort_by { |p| p.name.to_s.downcase }
|
|
11
|
+
when :id_first_alphabetical
|
|
12
|
+
props.sort_by { |p| [(p.name.to_s.downcase == "id") ? 0 : 1, p.name.to_s.downcase] }
|
|
13
|
+
when Proc
|
|
14
|
+
result = sort_order.call(props)
|
|
15
|
+
result.is_a?(Array) ? result : props
|
|
16
|
+
else
|
|
17
|
+
props
|
|
18
|
+
end
|
|
19
|
+
rescue => e
|
|
20
|
+
Typelizer.logger.warn("PropertySorter error: #{e.message}, preserving original order")
|
|
21
|
+
props
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -24,7 +24,8 @@ module Typelizer
|
|
|
24
24
|
def properties
|
|
25
25
|
@properties ||= begin
|
|
26
26
|
props, typelizes = plugin.trait_properties(trait_name)
|
|
27
|
-
infer_types(props, typelizes)
|
|
27
|
+
props = infer_types(props, typelizes)
|
|
28
|
+
PropertySorter.sort(props, config.properties_sort_order)
|
|
28
29
|
end
|
|
29
30
|
end
|
|
30
31
|
|
data/lib/typelizer/version.rb
CHANGED
data/lib/typelizer.rb
CHANGED
|
@@ -11,6 +11,7 @@ require_relative "typelizer/serializer_config_layer"
|
|
|
11
11
|
|
|
12
12
|
require_relative "typelizer/contexts/writer_context"
|
|
13
13
|
require_relative "typelizer/contexts/scan_context"
|
|
14
|
+
require_relative "typelizer/property_sorter"
|
|
14
15
|
require_relative "typelizer/interface"
|
|
15
16
|
require_relative "typelizer/renderer"
|
|
16
17
|
require_relative "typelizer/writer"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: typelizer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Svyatoslav Kryukov
|
|
@@ -60,6 +60,7 @@ files:
|
|
|
60
60
|
- lib/typelizer/model_plugins/auto.rb
|
|
61
61
|
- lib/typelizer/model_plugins/poro.rb
|
|
62
62
|
- lib/typelizer/property.rb
|
|
63
|
+
- lib/typelizer/property_sorter.rb
|
|
63
64
|
- lib/typelizer/railtie.rb
|
|
64
65
|
- lib/typelizer/renderer.rb
|
|
65
66
|
- lib/typelizer/serializer_config_layer.rb
|
|
@@ -104,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
104
105
|
- !ruby/object:Gem::Version
|
|
105
106
|
version: '0'
|
|
106
107
|
requirements: []
|
|
107
|
-
rubygems_version:
|
|
108
|
+
rubygems_version: 3.6.9
|
|
108
109
|
specification_version: 4
|
|
109
110
|
summary: A TypeScript type generator for Ruby serializers.
|
|
110
111
|
test_files: []
|