diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9188158..2764cbf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -84,20 +84,8 @@ jobs: ruby-version: ${{ matrix.ruby }} bundler-cache: true - - name: Setup Code Climate test-reporter - run: | - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter - chmod +x ./cc-test-reporter - ./cc-test-reporter before-build - - name: Run Migrations run: cd playground/vanilla && bin/rails db:prepare - name: Ruby Specs run: bin/rspec - - - name: Upload code coverage to Code Climate - if: ${{ contains(github.ref, 'main') }} - run: | - export GIT_BRANCH="${GITHUB_REF/refs\/heads\//}" - ./cc-test-reporter after-build -r ${{secrets.CC_TEST_REPORTER_ID}} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fc7aae3..614c272 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,18 +1,18 @@ ## Setting Up a Development Environment -1. Install [pnpm](https://pnpm.js.org/) +1. Install [pnpm](https://pnpm.io/installation) 2. Run the following commands to set up the development environment. -``` +```sh bundle install ``` -``` +```sh pnpm install ``` -``` +```sh pnpm migrate ``` @@ -21,20 +21,26 @@ pnpm migrate There are a number of automated checks which run on GitHub Actions when a pull request is created. You can run those checks on your own locally to make sure that your changes would not break the CI build. -### 1. Check the code for JavaScript style violations +### 1. Rebuild the generated files +```sh +pnpm gen ``` + +### 2. Check the code for JavaScript style violations + +```sh pnpm lint ``` -### 2. Check the code for Ruby style violations +### 3. Check the code for Ruby style violations -``` +```sh bin/rubocop ``` -### 3. Run the test suite +### 4. Run the test suite -``` +```sh bin/rspec ``` diff --git a/playground/vanilla/app/frontend/types/serializers/Composer.ts b/playground/vanilla/app/frontend/types/serializers/Composer.ts index ae929be..a2c7a6f 100644 --- a/playground/vanilla/app/frontend/types/serializers/Composer.ts +++ b/playground/vanilla/app/frontend/types/serializers/Composer.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey b379726b6fef2dadbfd614384b868746 +// TypesFromSerializers CacheKey c5f5056c4fa3626c5c1908d0f1dcfe8d // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. diff --git a/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs.ts b/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs.ts index 8111674..607c0ae 100644 --- a/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs.ts +++ b/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 9111c6d881174b0013582fa6366868db +// TypesFromSerializers CacheKey acbbfcd258be7c495d2784be9b815e79 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type ComposerWithSongsSong from './ComposerWithSongs/Song' diff --git a/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs/Song.ts b/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs/Song.ts index 81dfc18..a7708b5 100644 --- a/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs/Song.ts +++ b/playground/vanilla/app/frontend/types/serializers/ComposerWithSongs/Song.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey a69c0dbcc904740e5de89181ef4b2837 +// TypesFromSerializers CacheKey b8af6beb071f45e87fe53318043f5388 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. diff --git a/playground/vanilla/app/frontend/types/serializers/Model.ts b/playground/vanilla/app/frontend/types/serializers/Model.ts index 962f86f..4cfd3c8 100644 --- a/playground/vanilla/app/frontend/types/serializers/Model.ts +++ b/playground/vanilla/app/frontend/types/serializers/Model.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey ed8ff6fbc986e6b666d559749c666dc5 +// TypesFromSerializers CacheKey 89c74246c39a38f244b708597ef3b884 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type AnyModel from '../AnyModel' diff --git a/playground/vanilla/app/frontend/types/serializers/Nested/Album.ts b/playground/vanilla/app/frontend/types/serializers/Nested/Album.ts index f26f5d7..a444679 100644 --- a/playground/vanilla/app/frontend/types/serializers/Nested/Album.ts +++ b/playground/vanilla/app/frontend/types/serializers/Nested/Album.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 58897b61d86838c60d1f12700f326896 +// TypesFromSerializers CacheKey ddc921e1e92a90ea686336285fcdb369 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type AnyModel from '../../AnyModel' diff --git a/playground/vanilla/app/frontend/types/serializers/SnakeComposer.ts b/playground/vanilla/app/frontend/types/serializers/SnakeComposer.ts index 2de33e3..ccaf25e 100644 --- a/playground/vanilla/app/frontend/types/serializers/SnakeComposer.ts +++ b/playground/vanilla/app/frontend/types/serializers/SnakeComposer.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 89e5760366d01f7f21244d341e1af2d4 +// TypesFromSerializers CacheKey 03a6c67042bb201dfeeab4b021db7dd5 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. diff --git a/playground/vanilla/app/frontend/types/serializers/Song.ts b/playground/vanilla/app/frontend/types/serializers/Song.ts index fdfe5eb..8900d16 100644 --- a/playground/vanilla/app/frontend/types/serializers/Song.ts +++ b/playground/vanilla/app/frontend/types/serializers/Song.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey f4f9e398dc092747d13607e2bdcb0846 +// TypesFromSerializers CacheKey c2c60f7c58d2fbafd49219bd8673dd15 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Composer from './Composer' diff --git a/playground/vanilla/app/frontend/types/serializers/SongWithVideos.ts b/playground/vanilla/app/frontend/types/serializers/SongWithVideos.ts index 8598518..a29933f 100644 --- a/playground/vanilla/app/frontend/types/serializers/SongWithVideos.ts +++ b/playground/vanilla/app/frontend/types/serializers/SongWithVideos.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey c2d167325e7342eba01d0a78482d6d76 +// TypesFromSerializers CacheKey e6174fbd5fbf2c871782886b3b441101 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Composer from './Composer' diff --git a/playground/vanilla/app/frontend/types/serializers/Video.ts b/playground/vanilla/app/frontend/types/serializers/Video.ts index 0633ec4..9c86f24 100644 --- a/playground/vanilla/app/frontend/types/serializers/Video.ts +++ b/playground/vanilla/app/frontend/types/serializers/Video.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 45d6b515fb6118eabbd39d586269cdd0 +// TypesFromSerializers CacheKey fa77137240a406b724863f5d51e9c3e4 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. @@ -7,6 +7,9 @@ export default interface Video { createdAt: string | Date title?: string untypedFieldExample: any + /** + * YouTube ID of the video + */ youtubeId?: string youtubeUrl?: string } diff --git a/playground/vanilla/app/frontend/types/serializers/VideoWithSong.ts b/playground/vanilla/app/frontend/types/serializers/VideoWithSong.ts index e06f480..cdb77db 100644 --- a/playground/vanilla/app/frontend/types/serializers/VideoWithSong.ts +++ b/playground/vanilla/app/frontend/types/serializers/VideoWithSong.ts @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 4042db0fa9ebdf8668c7c5f0ec172e6d +// TypesFromSerializers CacheKey 0677102f1c3ad73d855975f0eaa09faa // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Song from './Song' @@ -9,6 +9,9 @@ export default interface VideoWithSong { song: Song title?: string untypedFieldExample: any + /** + * YouTube ID of the video + */ youtubeId?: string youtubeUrl?: string } diff --git a/playground/vanilla/app/serializers/video_serializer.rb b/playground/vanilla/app/serializers/video_serializer.rb index 5d72828..8c7ea74 100644 --- a/playground/vanilla/app/serializers/video_serializer.rb +++ b/playground/vanilla/app/serializers/video_serializer.rb @@ -5,7 +5,7 @@ class VideoSerializer < BaseSerializer :id, :created_at, :title, - :youtube_id, + youtube_id: {doc: "YouTube ID of the video"}, ) type :string, optional: true diff --git a/spec/types_from_serializers/__snapshots__/interfaces_ComposerSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_ComposerSerializer.snap index ae929be..a2c7a6f 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_ComposerSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_ComposerSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey b379726b6fef2dadbfd614384b868746 +// TypesFromSerializers CacheKey c5f5056c4fa3626c5c1908d0f1dcfe8d // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. diff --git a/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer.snap index 8111674..607c0ae 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 9111c6d881174b0013582fa6366868db +// TypesFromSerializers CacheKey acbbfcd258be7c495d2784be9b815e79 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type ComposerWithSongsSong from './ComposerWithSongs/Song' diff --git a/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer__SongSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer__SongSerializer.snap index 81dfc18..a7708b5 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer__SongSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_ComposerWithSongsSerializer__SongSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey a69c0dbcc904740e5de89181ef4b2837 +// TypesFromSerializers CacheKey b8af6beb071f45e87fe53318043f5388 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. diff --git a/spec/types_from_serializers/__snapshots__/interfaces_ModelSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_ModelSerializer.snap index 962f86f..4cfd3c8 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_ModelSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_ModelSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey ed8ff6fbc986e6b666d559749c666dc5 +// TypesFromSerializers CacheKey 89c74246c39a38f244b708597ef3b884 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type AnyModel from '../AnyModel' diff --git a/spec/types_from_serializers/__snapshots__/interfaces_Nested__AlbumSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_Nested__AlbumSerializer.snap index f26f5d7..a444679 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_Nested__AlbumSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_Nested__AlbumSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 58897b61d86838c60d1f12700f326896 +// TypesFromSerializers CacheKey ddc921e1e92a90ea686336285fcdb369 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type AnyModel from '../../AnyModel' diff --git a/spec/types_from_serializers/__snapshots__/interfaces_SnakeComposerSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_SnakeComposerSerializer.snap index 2de33e3..ccaf25e 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_SnakeComposerSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_SnakeComposerSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 89e5760366d01f7f21244d341e1af2d4 +// TypesFromSerializers CacheKey 03a6c67042bb201dfeeab4b021db7dd5 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. diff --git a/spec/types_from_serializers/__snapshots__/interfaces_SongSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_SongSerializer.snap index fdfe5eb..8900d16 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_SongSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_SongSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey f4f9e398dc092747d13607e2bdcb0846 +// TypesFromSerializers CacheKey c2c60f7c58d2fbafd49219bd8673dd15 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Composer from './Composer' diff --git a/spec/types_from_serializers/__snapshots__/interfaces_SongWithVideosSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_SongWithVideosSerializer.snap index 8598518..a29933f 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_SongWithVideosSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_SongWithVideosSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey c2d167325e7342eba01d0a78482d6d76 +// TypesFromSerializers CacheKey e6174fbd5fbf2c871782886b3b441101 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Composer from './Composer' diff --git a/spec/types_from_serializers/__snapshots__/interfaces_VideoSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_VideoSerializer.snap index 0633ec4..9c86f24 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_VideoSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_VideoSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 45d6b515fb6118eabbd39d586269cdd0 +// TypesFromSerializers CacheKey fa77137240a406b724863f5d51e9c3e4 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. @@ -7,6 +7,9 @@ export default interface Video { createdAt: string | Date title?: string untypedFieldExample: any + /** + * YouTube ID of the video + */ youtubeId?: string youtubeUrl?: string } diff --git a/spec/types_from_serializers/__snapshots__/interfaces_VideoWithSongSerializer.snap b/spec/types_from_serializers/__snapshots__/interfaces_VideoWithSongSerializer.snap index e06f480..cdb77db 100644 --- a/spec/types_from_serializers/__snapshots__/interfaces_VideoWithSongSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/interfaces_VideoWithSongSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 4042db0fa9ebdf8668c7c5f0ec172e6d +// TypesFromSerializers CacheKey 0677102f1c3ad73d855975f0eaa09faa // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Song from './Song' @@ -9,6 +9,9 @@ export default interface VideoWithSong { song: Song title?: string untypedFieldExample: any + /** + * YouTube ID of the video + */ youtubeId?: string youtubeUrl?: string } diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerSerializer.snap index 9657bd9..5d4a2af 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey b379726b6fef2dadbfd614384b868746 +// TypesFromSerializers CacheKey c5f5056c4fa3626c5c1908d0f1dcfe8d // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. export {} diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer.snap index 857d318..5244688 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 9111c6d881174b0013582fa6366868db +// TypesFromSerializers CacheKey acbbfcd258be7c495d2784be9b815e79 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type ComposerWithSongsSong from './ComposerWithSongs/Song' diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer__SongSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer__SongSerializer.snap index cf83be0..1bac64c 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer__SongSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ComposerWithSongsSerializer__SongSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey a69c0dbcc904740e5de89181ef4b2837 +// TypesFromSerializers CacheKey b8af6beb071f45e87fe53318043f5388 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. export {} diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ModelSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ModelSerializer.snap index 2cb373a..078952c 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_ModelSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_ModelSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey ed8ff6fbc986e6b666d559749c666dc5 +// TypesFromSerializers CacheKey 89c74246c39a38f244b708597ef3b884 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type AnyModel from '../AnyModel' diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_Nested__AlbumSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_Nested__AlbumSerializer.snap index c2d69dd..80e88f6 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_Nested__AlbumSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_Nested__AlbumSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 58897b61d86838c60d1f12700f326896 +// TypesFromSerializers CacheKey ddc921e1e92a90ea686336285fcdb369 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type AnyModel from '../../AnyModel' diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_SnakeComposerSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_SnakeComposerSerializer.snap index b7dd325..5b73c23 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_SnakeComposerSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_SnakeComposerSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 89e5760366d01f7f21244d341e1af2d4 +// TypesFromSerializers CacheKey 03a6c67042bb201dfeeab4b021db7dd5 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. export {} diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongSerializer.snap index ca574d7..fa56e85 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey f4f9e398dc092747d13607e2bdcb0846 +// TypesFromSerializers CacheKey c2c60f7c58d2fbafd49219bd8673dd15 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Composer from './Composer' diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongWithVideosSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongWithVideosSerializer.snap index a1284de..74ddd7f 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongWithVideosSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_SongWithVideosSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey c2d167325e7342eba01d0a78482d6d76 +// TypesFromSerializers CacheKey e6174fbd5fbf2c871782886b3b441101 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Composer from './Composer' diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoSerializer.snap index 8ebaf24..fe9e803 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 45d6b515fb6118eabbd39d586269cdd0 +// TypesFromSerializers CacheKey fa77137240a406b724863f5d51e9c3e4 // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. export {} @@ -10,6 +10,9 @@ declare global { createdAt: string | Date title?: string untypedFieldExample: any + /** + * YouTube ID of the video + */ youtubeId?: string youtubeUrl?: string } diff --git a/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoWithSongSerializer.snap b/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoWithSongSerializer.snap index 21ff425..4df541c 100644 --- a/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoWithSongSerializer.snap +++ b/spec/types_from_serializers/__snapshots__/namespace_interfaces_VideoWithSongSerializer.snap @@ -1,4 +1,4 @@ -// TypesFromSerializers CacheKey 4042db0fa9ebdf8668c7c5f0ec172e6d +// TypesFromSerializers CacheKey 0677102f1c3ad73d855975f0eaa09faa // // DO NOT MODIFY: This file was automatically generated by TypesFromSerializers. import type Song from './Song' @@ -11,6 +11,9 @@ declare global { song: Song title?: string untypedFieldExample: any + /** + * YouTube ID of the video + */ youtubeId?: string youtubeUrl?: string } diff --git a/types_from_serializers/lib/types_from_serializers.rb b/types_from_serializers/lib/types_from_serializers.rb index b5a08eb..42790d1 100644 --- a/types_from_serializers/lib/types_from_serializers.rb +++ b/types_from_serializers/lib/types_from_serializers.rb @@ -3,3 +3,5 @@ require_relative "types_from_serializers/version" require_relative "types_from_serializers/dsl" require_relative "types_from_serializers/railtie" + +OjSerializers::Serializer::KNOWN_ATTRIBUTE_OPTIONS << :doc diff --git a/types_from_serializers/lib/types_from_serializers/generator.rb b/types_from_serializers/lib/types_from_serializers/generator.rb index d09bc18..26b1c3d 100644 --- a/types_from_serializers/lib/types_from_serializers/generator.rb +++ b/types_from_serializers/lib/types_from_serializers/generator.rb @@ -62,6 +62,7 @@ def ts_properties Property.new( name: key, type: options[:serializer] || options[:type], + doc: options[:doc], optional: options[:optional] || options.key?(:if), multi: options[:association] == :many, column_name: options.fetch(:value_from), @@ -146,7 +147,7 @@ def as_typescript indent = TypesFromSerializers.config.namespace ? 3 : 1 <<~TS.gsub(/\n$/, "") interface #{name} { - #{" " * indent}#{properties.index_by(&:name).values.map(&:as_typescript).join("\n#{" " * indent}")} + #{" " * indent}#{properties.index_by(&:name).values.map { |property| property.as_typescript(indent) }.join("\n#{" " * indent}")} #{" " * (indent - 1)}} TS end @@ -182,6 +183,7 @@ def global_type?(type) :optional, :multi, :column_name, + :doc, keyword_init: true, ) do using SerializerRefinements @@ -206,14 +208,24 @@ def infer_type_from(columns_hash, defined_enums, ts_interface) end end - def as_typescript + def as_typescript(indent = 1) type_str = if type.respond_to?(:ts_name) type.ts_name else type || TypesFromSerializers.config.unknown_type end - "#{name}#{"?" if optional}: #{type_str}#{"[]" if multi}" + comment = if doc + <<~TSDOC + /** + * #{doc.strip} + */ + TSDOC + else + "" + end + + "#{comment}#{name}#{"?" if optional}: #{type_str}#{"[]" if multi}".lines.join("\n#{" " * indent}") end end