Module: ArSerializer::TypeScript
- Defined in:
- lib/ar_serializer/type_script.rb
Class Method Summary collapse
- .data_type_definition(type) ⇒ Object
- .generate_type_definition(*classes) ⇒ Object
- .query_type_definition(type) ⇒ Object
- .related_serializer_types(classes) ⇒ Object
Class Method Details
.data_type_definition(type) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ar_serializer/type_script.rb', line 37 def self.data_type_definition(type) field_definitions = [] type.fields.each do |field| field_definitions << "#{field.name}: #{field.type.ts_type}" end field_definitions << "_meta?: { name: '#{type.name}'; query: Type#{type.name}QueryBase }" <<~TYPE export interface Type#{type.name} { #{field_definitions.map { |line| " #{line}" }.join("\n")} } TYPE end |
.generate_type_definition(*classes) ⇒ Object
4 5 6 7 8 9 10 |
# File 'lib/ar_serializer/type_script.rb', line 4 def self.generate_type_definition(*classes) types = classes.flatten [ types.map { |t| data_type_definition t }, types.map { |t| query_type_definition t } ].join "\n" end |
.query_type_definition(type) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/ar_serializer/type_script.rb', line 12 def self.query_type_definition(type) field_definitions = type.fields.map do |field| association_type = field.type.association_type if association_type qname = "Type#{association_type.name}Query" if field.args.empty? "#{field.name}?: true | #{qname} | { as?: string; attributes?: #{qname} }" else "#{field.name}?: true | #{qname} | { as?: string; params: #{field.args_ts_type}; attributes?: #{qname} }" end else "#{field.name}?: true | { as: string }" end end field_definitions << "'*'?: true" query_type_name = "Type#{type.name}Query" base_query_type_name = "Type#{type.name}QueryBase" <<~TYPE export type #{query_type_name} = keyof (#{base_query_type_name}) | Readonly<(keyof (#{base_query_type_name}))[]> | #{base_query_type_name} export interface #{base_query_type_name} { #{field_definitions.map { |line| " #{line}" }.join("\n")} } TYPE end |
.related_serializer_types(classes) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'lib/ar_serializer/type_script.rb', line 50 def self.(classes) types_set = {} classes.each do |klass| type = ArSerializer::GraphQL::TypeClass.from klass type.collect_types types_set end types_set.keys.grep(ArSerializer::GraphQL::TypeClass).sort_by(&:name) end |