types_from_serializers 2.0.1 → 2.1.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 +18 -0
- data/lib/types_from_serializers/generator.rb +35 -7
- data/lib/types_from_serializers/version.rb +1 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61ca195394efd6b1c37c31b81ff85f7ccbcba562e9cf7b76d7810dfc613e1aa6
|
4
|
+
data.tar.gz: 20ef589a30a448e668d1da4106ab565e768227e74f950c5d56bfbd2a83aa9a48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fec219f23757f68e03678195ac3f66f13d3d48897e30c3f4b141c12257eb394577c997ecc639110ac3fee8be57e90f915c94989e84116a9be76d9d1e5df47f52
|
7
|
+
data.tar.gz: 1956d02db12c7ea5eab5edff52dc48356f163f71a17ab08fc93e6dcae810d29df26ea7501ddc0e8ac609087981d2456e4b927bcdb01acfeff455adf4671b58b0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
# [2.1.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.0.2...types_from_serializers@2.1.0) (2023-07-19)
|
2
|
+
|
3
|
+
|
4
|
+
### Features
|
5
|
+
|
6
|
+
* add `namespace` option to generate `.d.ts` files ([#9](https://github.com/ElMassimo/types_from_serializers/issues/9)) ([6f67b1a](https://github.com/ElMassimo/types_from_serializers/commit/6f67b1ad9283868e8e3325042645bceccc85b047))
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
## [2.0.2](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.0.1...types_from_serializers@2.0.2) (2023-04-05)
|
11
|
+
|
12
|
+
|
13
|
+
### Features
|
14
|
+
|
15
|
+
* map citext from PostgreSQL to string ([#7](https://github.com/ElMassimo/types_from_serializers/issues/7)) ([d8c6848](https://github.com/ElMassimo/types_from_serializers/commit/d8c6848b99b0f4ba3770871f491755c229a2c4b0))
|
16
|
+
|
17
|
+
|
18
|
+
|
1
19
|
## [2.0.1](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.0.0...types_from_serializers@2.0.1) (2023-04-03)
|
2
20
|
|
3
21
|
|
@@ -94,6 +94,7 @@ module TypesFromSerializers
|
|
94
94
|
:sql_to_typescript_type_mapping,
|
95
95
|
:skip_serializer_if,
|
96
96
|
:transform_keys,
|
97
|
+
:namespace,
|
97
98
|
keyword_init: true,
|
98
99
|
) do
|
99
100
|
def relative_custom_types_dir
|
@@ -140,10 +141,11 @@ module TypesFromSerializers
|
|
140
141
|
end
|
141
142
|
|
142
143
|
def as_typescript
|
143
|
-
|
144
|
+
indent = TypesFromSerializers.config.namespace ? 3 : 1
|
145
|
+
<<~TS.gsub(/\n$/, "")
|
144
146
|
interface #{name} {
|
145
|
-
|
146
|
-
}
|
147
|
+
#{" " * indent}#{properties.index_by(&:name).values.map(&:as_typescript).join("\n#{" " * indent}")}
|
148
|
+
#{" " * (indent - 1)}}
|
147
149
|
TS
|
148
150
|
end
|
149
151
|
|
@@ -269,7 +271,12 @@ module TypesFromSerializers
|
|
269
271
|
def generate(force: ENV["SERIALIZER_TYPES_FORCE"])
|
270
272
|
@force_generation = force
|
271
273
|
config.output_dir.rmtree if force && config.output_dir.exist?
|
272
|
-
|
274
|
+
|
275
|
+
if config.namespace
|
276
|
+
load_serializers(all_serializer_files) if force
|
277
|
+
else
|
278
|
+
generate_index_file
|
279
|
+
end
|
273
280
|
|
274
281
|
loaded_serializers.each do |serializer|
|
275
282
|
generate_interface_for(serializer)
|
@@ -289,7 +296,7 @@ module TypesFromSerializers
|
|
289
296
|
def generate_interface_for(serializer)
|
290
297
|
interface = serializer.ts_interface
|
291
298
|
|
292
|
-
write_if_changed(filename: interface.filename, cache_key: interface.inspect) {
|
299
|
+
write_if_changed(filename: interface.filename, cache_key: interface.inspect, extension: config.namespace ? "d.ts" : "ts") {
|
293
300
|
serializer_interface_content(interface)
|
294
301
|
}
|
295
302
|
end
|
@@ -380,12 +387,16 @@ module TypesFromSerializers
|
|
380
387
|
integer: :number,
|
381
388
|
string: :string,
|
382
389
|
text: :string,
|
390
|
+
citext: :string,
|
383
391
|
}.tap do |types|
|
384
392
|
types.default = :unknown
|
385
393
|
end,
|
386
394
|
|
387
395
|
# Allows to transform keys, useful when converting objects client-side.
|
388
396
|
transform_keys: nil,
|
397
|
+
|
398
|
+
# Allows scoping typescript definitions to a namespace
|
399
|
+
namespace: nil,
|
389
400
|
)
|
390
401
|
end
|
391
402
|
|
@@ -393,8 +404,8 @@ module TypesFromSerializers
|
|
393
404
|
# The cache strategy consists of a comment on the first line of the file.
|
394
405
|
#
|
395
406
|
# Yields to receive the rendered file content when it needs to.
|
396
|
-
def write_if_changed(filename:, cache_key:)
|
397
|
-
filename = config.output_dir.join("#{filename}
|
407
|
+
def write_if_changed(filename:, cache_key:, extension: "ts")
|
408
|
+
filename = config.output_dir.join("#{filename}.#{extension}")
|
398
409
|
FileUtils.mkdir_p(filename.dirname)
|
399
410
|
cache_key_comment = "// TypesFromSerializers CacheKey #{Digest::MD5.hexdigest(cache_key)}\n"
|
400
411
|
File.open(filename, "a+") { |file|
|
@@ -417,6 +428,10 @@ module TypesFromSerializers
|
|
417
428
|
end
|
418
429
|
|
419
430
|
def serializer_interface_content(interface)
|
431
|
+
config.namespace ? declaration_interface_definition(interface) : standard_interface_definition(interface)
|
432
|
+
end
|
433
|
+
|
434
|
+
def standard_interface_definition(interface)
|
420
435
|
<<~TS
|
421
436
|
//
|
422
437
|
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
|
@@ -425,6 +440,19 @@ module TypesFromSerializers
|
|
425
440
|
TS
|
426
441
|
end
|
427
442
|
|
443
|
+
def declaration_interface_definition(interface)
|
444
|
+
<<~TS
|
445
|
+
//
|
446
|
+
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
|
447
|
+
#{interface.used_imports.empty? ? "export {}\n" : interface.used_imports.join}
|
448
|
+
declare global {
|
449
|
+
namespace #{config.namespace} {
|
450
|
+
#{interface.as_typescript}
|
451
|
+
}
|
452
|
+
}
|
453
|
+
TS
|
454
|
+
end
|
455
|
+
|
428
456
|
# Internal: Returns true if the cache key has changed since the last codegen.
|
429
457
|
def stale?(file, cache_key_comment)
|
430
458
|
@force_generation || file.gets != cache_key_comment
|
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.0
|
4
|
+
version: 2.1.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: 2023-
|
11
|
+
date: 2023-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -72,20 +72,6 @@ dependencies:
|
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '2'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: pry-byebug
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '3.9'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '3.9'
|
89
75
|
- !ruby/object:Gem::Dependency
|
90
76
|
name: rake
|
91
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -291,7 +277,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
291
277
|
- !ruby/object:Gem::Version
|
292
278
|
version: '0'
|
293
279
|
requirements: []
|
294
|
-
rubygems_version: 3.
|
280
|
+
rubygems_version: 3.2.32
|
295
281
|
signing_key:
|
296
282
|
specification_version: 4
|
297
283
|
summary: Generate TypeScript interfaces from your JSON serializers.
|