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 +4 -4
- data/README.md +49 -12
- data/lib/rbs2ts/converter.rb +1 -0
- data/lib/rbs2ts/converter/declarations.rb +8 -4
- data/lib/rbs2ts/converter/members.rb +140 -0
- data/lib/rbs2ts/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81fe2e0338e3f48a7b4670627ce0a8062f4b2af6dfe019363b81d92e45b2cfe2
|
4
|
+
data.tar.gz: d9af2d2209b401943576f78dd81d6c79f396b9d2f2f8169b55da39c7814d4878
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
37
|
-
type
|
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
|
68
|
-
def
|
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
|
120
|
+
export type IntersectionType = string & number & boolean;
|
100
121
|
|
101
|
-
export type
|
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
|
120
|
-
|
121
|
-
|
122
|
-
|
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
|
-
|
130
|
-
|
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)];
|
data/lib/rbs2ts/converter.rb
CHANGED
@@ -57,7 +57,7 @@ module Rbs2ts
|
|
57
57
|
@@nest = @@nest - 1
|
58
58
|
|
59
59
|
<<~TS
|
60
|
-
export
|
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
|
70
|
-
|
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
|
-
|
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
|
data/lib/rbs2ts/version.rb
CHANGED
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.
|
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-
|
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
|