rbs2ts 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebbf96bfef0f567cd8792b0e3cd41e79006c24a0a474d7706f0d6275a32c0ed8
4
- data.tar.gz: b9f817043223698ccc7dde082ee2f9196e5f46dcfe3e72ae6879213b62254afc
3
+ metadata.gz: 81fe2e0338e3f48a7b4670627ce0a8062f4b2af6dfe019363b81d92e45b2cfe2
4
+ data.tar.gz: d9af2d2209b401943576f78dd81d6c79f396b9d2f2f8169b55da39c7814d4878
5
5
  SHA512:
6
- metadata.gz: ebd873eb921321e9de32fe24383c132e1d5a88e02bc081e4803e22567b6cdf99b33596da30a2d6a27f840a359c581d3215db2acf09004e5ee81ef8ae7082c278
7
- data.tar.gz: 4929afb32f5b21e917bda03481a363f845b7a6d4f3d829d256d187999e3b29d049aaee64324f9553ff08ccf09065aa86201f6382c0d5822ba02a1e119a8a527b
6
+ metadata.gz: 5290fff9e17e557d1b4cbc2d9609c74c530f8a4f7b746d57bb57104968dc13e2a99580a40c67a40f9a72cb1fe0f5113f0748d1699fcbd5003fc440a5ea301331
7
+ data.tar.gz: 7f3cf63285e8b6749816a34062030a2d982371a1bf40443e3c323785c75c4ee208620e513d1443ecc26b2b441c464d2c7fba107f183867a99b32679fb031ee8c
data/README.md CHANGED
@@ -33,8 +33,8 @@ type StringLiteral = 'abc'
33
33
  type TrueLiteral = true
34
34
  type FalseLiteral = false
35
35
 
36
- type UnionType = String & Integer & Bool
37
- type IntersectionType = String | Integer | Bool
36
+ type IntersectionType = String & Integer & Bool
37
+ type UnionType = String | Integer | Bool
38
38
 
39
39
  type ArrayType = Array[String]
40
40
 
@@ -64,8 +64,29 @@ class Klass
64
64
  }?
65
65
  }
66
66
 
67
- def to_s: () -> String
68
- def tuple: () -> [{ s: String, f: Float }?]
67
+ def to_tuple: () -> [{ s: String, f: Float }?]
68
+ def required_positional: (String) -> void
69
+ def required_positional_name: (String str) -> void
70
+ def optional_positional: (?String) -> void
71
+ def optional_positional_name: (?String? str) -> void
72
+ def rest_positional: (*String) -> void
73
+ def rest_positional_name: (*String str) -> void
74
+ def rest_positional_with_trailing: (*String, Integer) -> void
75
+ def rest_positional_name_with_trailing: (*String str, Integer trailing) -> void
76
+ def required_keyword: (str: String) -> void
77
+ def optional_keyword: (?str: String?) -> void
78
+ def rest_keywords: (**String) -> void
79
+ def rest_keywords_name: (**String rest) -> void
80
+
81
+ def all_arguments: (
82
+ String required_positional,
83
+ ?Integer? optional_positional,
84
+ *String rest_positionals_s,
85
+ Integer trailing_positional_s,
86
+ required_keyword: String,
87
+ ?optional_keyword: Integer?,
88
+ **String rest_keywords
89
+ ) -> [{ s: String, f: Float }?]
69
90
  end
70
91
  ```
71
92
 
@@ -96,9 +117,9 @@ export type TrueLiteral = true;
96
117
 
97
118
  export type FalseLiteral = false;
98
119
 
99
- export type UnionType = string & number & boolean;
120
+ export type IntersectionType = string & number & boolean;
100
121
 
101
- export type IntersectionType = string | number | boolean;
122
+ export type UnionType = string | number | boolean;
102
123
 
103
124
  export type ArrayType = string[];
104
125
 
@@ -116,18 +137,34 @@ export type RecordType = {
116
137
  } | null | undefined;
117
138
  };
118
139
 
119
- export namespace Klass {
120
- export type a = string;
121
- export type b = number;
122
- export type r = {
140
+ export declare class Klass {
141
+ a: string;
142
+ readonly b: number;
143
+ c: boolean;
144
+ readonly r: {
123
145
  d: string;
124
146
  e: {
125
147
  f: string;
126
148
  g: string | null | undefined;
127
149
  } | null | undefined;
128
150
  };
129
- export type toSReturnType = string;
130
- export type tupleReturnType = [({
151
+ toTuple(): [({
152
+ s: string;
153
+ f: number;
154
+ } | null | undefined)];
155
+ requiredPositional(arg1: string): void;
156
+ requiredPositionalName(str: string): void;
157
+ optionalPositional(arg1?: string): void;
158
+ optionalPositionalName(str?: string | null | undefined): void;
159
+ restPositional(...arg1: string[]): void;
160
+ restPositionalName(...str: string[]): void;
161
+ restPositionalWithTrailing(arg1: string[], arg2: number): void;
162
+ restPositionalNameWithTrailing(str: string[], trailing: number): void;
163
+ requiredKeyword(arg1: { str: string }): void;
164
+ optionalKeyword(arg1: { str?: string | null | undefined }): void;
165
+ restKeywords(arg1: { [key: string]: unknown; }): void;
166
+ restKeywordsName(arg1: { [key: string]: unknown; }): void;
167
+ allArguments(requiredPositional: string, optionalPositional?: number | null | undefined, restPositionalsS?: string[], trailingPositionalS?: number, arg1?: { requiredKeyword: string, optionalKeyword?: number | null | undefined, [key: string]: unknown; }): [({
131
168
  s: string;
132
169
  f: number;
133
170
  } | null | undefined)];
@@ -5,3 +5,4 @@ require 'case_transform'
5
5
 
6
6
  require 'rbs2ts/converter/declarations'
7
7
  require 'rbs2ts/converter/types'
8
+ require 'rbs2ts/converter/members'
@@ -57,7 +57,7 @@ module Rbs2ts
57
57
  @@nest = @@nest - 1
58
58
 
59
59
  <<~TS
60
- export namespace #{name} {
60
+ export declare class #{name} {
61
61
  #{members_ts}
62
62
  };
63
63
  TS
@@ -66,10 +66,14 @@ module Rbs2ts
66
66
 
67
67
  def member_to_ts(member)
68
68
  case member
69
- when ::RBS::AST::Members::AttrReader, ::RBS::AST::Members::AttrAccessor then
70
- "export type #{CaseTransform.camel_lower(member.name)} = #{Converter::Types::Resolver.to_ts(member.type)};"
69
+ when ::RBS::AST::Members::AttrReader then
70
+ Converter::Members::AttrReader.new(member).to_ts
71
+ when ::RBS::AST::Members::AttrWriter then
72
+ Converter::Members::AttrWriter.new(member).to_ts
73
+ when ::RBS::AST::Members::AttrAccessor then
74
+ Converter::Members::AttrAccessor.new(member).to_ts
71
75
  when ::RBS::AST::Members::MethodDefinition
72
- "export type #{CaseTransform.camel_lower(member.name)}ReturnType = #{Converter::Types::Resolver.to_ts(member.types.first.type.return_type)};"
76
+ Converter::Members::MethodDefinition.new(member).to_ts
73
77
  else
74
78
  ''
75
79
  end
@@ -0,0 +1,140 @@
1
+ module Rbs2ts
2
+ module Converter
3
+ module Members
4
+ class Base
5
+ def initialize(member)
6
+ @member = member
7
+ end
8
+
9
+ def to_ts
10
+ ''
11
+ end
12
+
13
+ def name
14
+ CaseTransform.camel_lower(member.name.to_s.gsub(/:/, ''))
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :member
20
+ end
21
+
22
+ class AttrReader < Base
23
+ def to_ts
24
+ "readonly #{name}: #{Converter::Types::Resolver.to_ts(member.type)};"
25
+ end
26
+ end
27
+
28
+ class AttrWriter < Base
29
+ def to_ts
30
+ "#{name}: #{Converter::Types::Resolver.to_ts(member.type)};"
31
+ end
32
+ end
33
+
34
+ class AttrAccessor < Base
35
+ def to_ts
36
+ "#{name}: #{Converter::Types::Resolver.to_ts(member.type)};"
37
+ end
38
+ end
39
+
40
+ class MethodDefinition < Base
41
+ def initialize(member)
42
+ super
43
+ @args_count = 0
44
+ end
45
+
46
+ def to_ts
47
+ "#{name}(#{args_to_ts}): #{return_type_to_ts};"
48
+ end
49
+
50
+ def args_to_ts
51
+ [
52
+ *required_positional_to_ts,
53
+ *optional_positional_to_ts,
54
+ *rest_positionals_to_ts,
55
+ *trailing_positionals_to_ts,
56
+ *keyword_args_to_ts
57
+ ].join(", ")
58
+ end
59
+
60
+ def arg_name(arg)
61
+ name = arg.name.nil? ? next_default_arg_name : arg.name.to_s
62
+ CaseTransform.camel_lower(name)
63
+ end
64
+
65
+ def next_default_arg_name
66
+ @args_count = @args_count + 1
67
+ "arg#{@args_count.to_s}"
68
+ end
69
+
70
+ def required_positional_to_ts
71
+ method_type.required_positionals.map {|arg|
72
+ "#{arg_name(arg)}: #{Converter::Types::Resolver.to_ts(arg.type)}"
73
+ }
74
+ end
75
+
76
+ def optional_positional_to_ts
77
+ method_type.optional_positionals.map {|arg|
78
+ "#{arg_name(arg)}?: #{Converter::Types::Resolver.to_ts(arg.type)}"
79
+ }
80
+ end
81
+
82
+ def rest_positionals_to_ts
83
+ arg = method_type.rest_positionals
84
+
85
+ return [] if arg.nil?
86
+
87
+ has_rest_after_arguments ?
88
+ ["#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}[]"] :
89
+ ["...#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}[]"]
90
+ end
91
+
92
+ def trailing_positionals_to_ts
93
+ method_type.trailing_positionals.map {|arg|
94
+ "#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}"
95
+ }
96
+ end
97
+
98
+ def keyword_args_to_ts
99
+ required_keywords_ts = method_type.required_keywords.map {|key, value|
100
+ "#{CaseTransform.camel_lower(key.to_s)}: #{Converter::Types::Resolver.to_ts(value.type)}"
101
+ }
102
+ optional_keywords_ts = method_type.optional_keywords.map {|key, value|
103
+ "#{CaseTransform.camel_lower(key.to_s)}?: #{Converter::Types::Resolver.to_ts(value.type)}"
104
+ }
105
+ rest_keywords_ts = method_type.rest_keywords.nil? ? [] : ["[key: string]: unknown;"]
106
+
107
+ ts_array = [
108
+ *required_keywords_ts,
109
+ *optional_keywords_ts,
110
+ *rest_keywords_ts
111
+ ]
112
+
113
+ return [] if ts_array.empty?
114
+
115
+ ts = ts_array.join(', ')
116
+
117
+ ["#{next_default_arg_name}#{optional_ts_code}: { #{ts} }"]
118
+ end
119
+
120
+ def method_type
121
+ member.types.first.type
122
+ end
123
+
124
+ def return_type_to_ts
125
+ Converter::Types::Resolver.to_ts(method_type.return_type)
126
+ end
127
+
128
+ def optional_ts_code
129
+ method_type.optional_positionals.present? ? '?' : ''
130
+ end
131
+
132
+ def has_rest_after_arguments
133
+ method_type.trailing_positionals.present? ||
134
+ method_type.required_keywords.present? ||
135
+ method_type.optional_keywords.present?
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -1,3 +1,3 @@
1
1
  module Rbs2ts
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs2ts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mugi-uno
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-17 00:00:00.000000000 Z
11
+ date: 2021-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -118,6 +118,7 @@ files:
118
118
  - lib/rbs2ts/cli.rb
119
119
  - lib/rbs2ts/converter.rb
120
120
  - lib/rbs2ts/converter/declarations.rb
121
+ - lib/rbs2ts/converter/members.rb
121
122
  - lib/rbs2ts/converter/types.rb
122
123
  - lib/rbs2ts/version.rb
123
124
  - rbs2ts.gemspec