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.
         
     |