rbs2ts 1.0.0.pre.alpha.2 → 1.2.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: 475224f8b22d01a2d3e11e6f4988ce8b96aaa36c1d6b7692d1a48f7e6ff9d7cc
4
- data.tar.gz: 1274cd9d2b5d516b8d1e88e283a68e6e3c76686fecfa83f9dcd030090e60f21c
3
+ metadata.gz: 63451fb8675f6e0e4420d64d7655385f8b32260c0e17b0ec9f796312372140b3
4
+ data.tar.gz: cfa90fb4ec6d06efc412ec1f1f28a000d23c3f16cba28ad0aa5f4cea4d2bda43
5
5
  SHA512:
6
- metadata.gz: 6e193c1144b33b6d12b792554ec288bfaf0a070c8d40cae480b64b7e23a875b32dbb1801d32e779443c78614681f75b45752ed82f2c7909e7694a0b41a972da1
7
- data.tar.gz: 6bbc894fba29723892e8dd7f4c98dd25c014abd58e18d9423215ac9bf1e13dc4237e0c875e4e6984543de80b52465aef19330adbfb34799ae2ba732d3166346e
6
+ metadata.gz: e8e8b4381ee67f4ad40a5a5cafa2590efe7f698b3f98bbc9625a0f74c975c4924cfd713a4450c67ba45bb346b3f620f2445707c27e09153eefe12ce60b21873a
7
+ data.tar.gz: 60832356723c81313fc06afa80a88d16555b815e3c94090db05392bee17f2de7bb30d8a5682cfdd04eaacbd4deeffdb4c1f6df5932b4bb21e5bee357aefdad9e
@@ -0,0 +1,18 @@
1
+ version: 2.1
2
+ orbs:
3
+ ruby: circleci/ruby@0.1.2
4
+
5
+ jobs:
6
+ build:
7
+ docker:
8
+ - image: circleci/ruby:3
9
+ executor: ruby/default
10
+ steps:
11
+ - checkout
12
+ - run:
13
+ name: Bundle Install
14
+ command: bundle -v
15
+ - ruby/bundle-install
16
+ - run:
17
+ name: RSpec
18
+ command: bundle exec rspec
data/.gitignore CHANGED
@@ -56,5 +56,4 @@ Gemfile.lock
56
56
 
57
57
  # Used by RuboCop. Remote config files pulled in from inherit_from directive.
58
58
  # .rubocop-https?--*
59
-
60
-
59
+ .rspec_status
@@ -0,0 +1 @@
1
+ README.md
@@ -10,7 +10,7 @@
10
10
  "request": "launch",
11
11
  "program": "${workspaceRoot}/exe/rbs2ts",
12
12
  "useBundler": true,
13
- "args": ["convert", "spec/sample_rbs/test.rbs"]
13
+ "args": ["convert", "spec/fixtures/test.rbs"]
14
14
  }
15
15
  ]
16
16
  }
data/Gemfile CHANGED
@@ -7,3 +7,5 @@ gemspec
7
7
 
8
8
  gem "debase"
9
9
  gem "ruby-debug-ide"
10
+ gem "pry"
11
+ gem "pry-byebug"
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rbs2ts
2
2
 
3
- Convert RBS to TypeScript type definition.
3
+ A RubyGem that converts Ruby RBS to TypeScript definitions.
4
4
 
5
5
  ## Installation
6
6
 
@@ -13,3 +13,182 @@ gem install rbs2ts
13
13
  ```
14
14
  rbs2ts convert type.rbs
15
15
  ```
16
+
17
+ ## Example
18
+
19
+ from RBS
20
+
21
+ ```
22
+ type TypeofInteger = Integer
23
+ type TypeofFloat = Float
24
+ type TypeofNumeric = Numeric
25
+ type TypeofString = String
26
+ type TypeofBool = Bool
27
+ type TypeofVoid = void
28
+ type TypeofUntyped = untyped
29
+ type TypeofNil = nil
30
+
31
+ type IntegerLiteral = 123
32
+ type StringLiteral = 'abc'
33
+ type TrueLiteral = true
34
+ type FalseLiteral = false
35
+
36
+ type IntersectionType = String & Integer & Bool
37
+ type UnionType = String | Integer | Bool
38
+
39
+ type ArrayType = Array[String]
40
+
41
+ type TupleType = [ ]
42
+ type TupleEmptyType = [String, Integer]
43
+
44
+ type OptionalType = String?
45
+
46
+ type RecordType = {
47
+ s: String,
48
+ next: {
49
+ i: Integer,
50
+ f: Float
51
+ }?
52
+ }
53
+
54
+ class Klass
55
+ attr_accessor a: String
56
+ attr_reader b: Integer
57
+ attr_writer c: Bool
58
+
59
+ attr_reader r: {
60
+ d: String,
61
+ e: {
62
+ f: String,
63
+ g: String?
64
+ }?
65
+ }
66
+
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 }?]
90
+ end
91
+
92
+ module Module
93
+ def func: (String, Integer) -> { str: String, int: Integer }
94
+ end
95
+
96
+ interface _Interface
97
+ def func: (String, Integer) -> { str: String, int: Integer }
98
+ end
99
+ ```
100
+
101
+ to TypeScript
102
+
103
+ ```typescript
104
+ export type TypeofInteger = number;
105
+
106
+ export type TypeofFloat = number;
107
+
108
+ export type TypeofNumeric = number;
109
+
110
+ export type TypeofString = string;
111
+
112
+ export type TypeofBool = boolean;
113
+
114
+ export type TypeofVoid = void;
115
+
116
+ export type TypeofUntyped = any;
117
+
118
+ export type TypeofNil = null;
119
+
120
+ export type IntegerLiteral = 123;
121
+
122
+ export type StringLiteral = "abc";
123
+
124
+ export type TrueLiteral = true;
125
+
126
+ export type FalseLiteral = false;
127
+
128
+ export type IntersectionType = string & number & boolean;
129
+
130
+ export type UnionType = string | number | boolean;
131
+
132
+ export type ArrayType = string[];
133
+
134
+ export type TupleType = [];
135
+
136
+ export type TupleEmptyType = [string, number];
137
+
138
+ export type OptionalType = string | null | undefined;
139
+
140
+ export type RecordType = {
141
+ s: string;
142
+ next: {
143
+ i: number;
144
+ f: number;
145
+ } | null | undefined;
146
+ };
147
+
148
+ export declare class Klass {
149
+ a: string;
150
+ readonly b: number;
151
+ c: boolean;
152
+ readonly r: {
153
+ d: string;
154
+ e: {
155
+ f: string;
156
+ g: string | null | undefined;
157
+ } | null | undefined;
158
+ };
159
+ toTuple(): [({
160
+ s: string;
161
+ f: number;
162
+ } | null | undefined)];
163
+ requiredPositional(arg1: string): void;
164
+ requiredPositionalName(str: string): void;
165
+ optionalPositional(arg1?: string): void;
166
+ optionalPositionalName(str?: string | null | undefined): void;
167
+ restPositional(...arg1: string[]): void;
168
+ restPositionalName(...str: string[]): void;
169
+ restPositionalWithTrailing(arg1: string[], arg2: number): void;
170
+ restPositionalNameWithTrailing(str: string[], trailing: number): void;
171
+ requiredKeyword(arg1: { str: string }): void;
172
+ optionalKeyword(arg1: { str?: string | null | undefined }): void;
173
+ restKeywords(arg1: { [key: string]: unknown; }): void;
174
+ restKeywordsName(arg1: { [key: string]: unknown; }): void;
175
+ allArguments(requiredPositional: string, optionalPositional?: number | null | undefined, restPositionalsS?: string[], trailingPositionalS?: number, arg1?: { requiredKeyword: string, optionalKeyword?: number | null | undefined, [key: string]: unknown; }): [({
176
+ s: string;
177
+ f: number;
178
+ } | null | undefined)];
179
+ };
180
+
181
+ export namespace Module {
182
+ export declare function func(arg1: string, arg2: number): {
183
+ str: string;
184
+ int: number;
185
+ };
186
+ };
187
+
188
+ export interface Interface {
189
+ func(arg1: string, arg2: number): {
190
+ str: string;
191
+ int: number;
192
+ };
193
+ };
194
+ ```
@@ -1,17 +1,19 @@
1
1
  require "thor"
2
2
  require "rbs2ts/converter"
3
-
3
+
4
4
  module Rbs2ts
5
5
  class Cli < Thor
6
6
  desc "convert rbs to ts", "convert rbs to ts"
7
7
  def convert(path)
8
+ ::RBS.logger_level = :error
9
+
8
10
  loader = ::RBS::EnvironmentLoader.new(core_root: nil)
9
11
 
10
12
  loader.add(path: Pathname(path))
11
13
 
12
14
  env = ::RBS::Environment.from_loader(loader).resolve_type_names
13
15
 
14
- Converter::Declarations::Declarations.new(env.declarations).to_ts
16
+ puts Converter::Declarations::Declarations.new(env.declarations).to_ts
15
17
  end
16
18
  end
17
19
  end
@@ -3,5 +3,7 @@ end
3
3
 
4
4
  require 'case_transform'
5
5
 
6
+ require 'rbs2ts/converter/helper'
6
7
  require 'rbs2ts/converter/declarations'
7
8
  require 'rbs2ts/converter/types'
9
+ require 'rbs2ts/converter/members'
@@ -9,12 +9,18 @@ module Rbs2ts
9
9
  def to_ts
10
10
  decls_ts = @decls.map do |d|
11
11
  case d
12
+ when ::RBS::AST::Declarations::Class then
13
+ Converter::Declarations::Class.new(d).to_ts
14
+ when ::RBS::AST::Declarations::Module then
15
+ Converter::Declarations::Module.new(d).to_ts
16
+ when ::RBS::AST::Declarations::Interface then
17
+ Converter::Declarations::Interface.new(d).to_ts
12
18
  when ::RBS::AST::Declarations::Alias then
13
19
  Converter::Declarations::Alias.new(d).to_ts
14
20
  end
15
21
  end
16
22
 
17
- puts decls_ts.join("\n\n")
23
+ decls_ts.join("\n\n")
18
24
  end
19
25
  end
20
26
 
@@ -36,19 +42,89 @@ module Rbs2ts
36
42
 
37
43
  attr_reader :declaration
38
44
  end
39
-
45
+
40
46
  class Class < Base
47
+ def to_ts
48
+ members_ts = declaration.members.map {|member|
49
+ member_to_ts(member)
50
+ }.reject(&:empty?).join("\n")
51
+
52
+ <<~TS
53
+ export declare class #{name} {
54
+ #{Helper.indent(members_ts)}
55
+ };
56
+ TS
57
+ .chomp
58
+ end
59
+
60
+ def member_to_ts(member)
61
+ case member
62
+ when ::RBS::AST::Members::AttrReader then
63
+ Converter::Members::AttrReader.new(member).to_ts
64
+ when ::RBS::AST::Members::AttrWriter then
65
+ Converter::Members::AttrWriter.new(member).to_ts
66
+ when ::RBS::AST::Members::AttrAccessor then
67
+ Converter::Members::AttrAccessor.new(member).to_ts
68
+ when ::RBS::AST::Members::MethodDefinition
69
+ Converter::Members::MethodDefinition.new(member).to_ts
70
+ else
71
+ ''
72
+ end
73
+ end
41
74
  end
42
75
 
43
76
  class Module < Base
77
+ def to_ts
78
+ members_ts = declaration.members.map {|member|
79
+ member_to_ts(member)
80
+ }.reject(&:empty?).join("\n")
81
+
82
+ <<~TS
83
+ export namespace #{name} {
84
+ #{Helper.indent(members_ts)}
85
+ };
86
+ TS
87
+ .chomp
88
+ end
89
+
90
+ def member_to_ts(member)
91
+ case member
92
+ when ::RBS::AST::Members::MethodDefinition
93
+ ts = Converter::Members::MethodDefinition.new(member).to_ts
94
+ "export declare function #{ts}"
95
+ else
96
+ ''
97
+ end
98
+ end
44
99
  end
45
100
 
46
101
  class Interface < Base
102
+ def to_ts
103
+ members_ts = declaration.members.map {|member|
104
+ member_to_ts(member)
105
+ }.reject(&:empty?).join("\n")
106
+
107
+ <<~TS
108
+ export interface #{name.gsub(/_/, '')} {
109
+ #{Helper.indent(members_ts)}
110
+ };
111
+ TS
112
+ .chomp
113
+ end
114
+
115
+ def member_to_ts(member)
116
+ case member
117
+ when ::RBS::AST::Members::MethodDefinition
118
+ Converter::Members::MethodDefinition.new(member).to_ts
119
+ else
120
+ ''
121
+ end
122
+ end
47
123
  end
48
124
 
49
125
  class Alias < Base
50
126
  def to_ts
51
- "type #{name} = #{Converter::Types::Resolver.to_ts(declaration.type)};"
127
+ "export type #{name} = #{Converter::Types::Resolver.to_ts(declaration.type)};"
52
128
  end
53
129
  end
54
130
 
@@ -0,0 +1,16 @@
1
+ module Rbs2ts
2
+ module Converter
3
+ module Helper
4
+ class << self
5
+ INDENT = ' '
6
+
7
+ def indent(text, level = 1)
8
+ text
9
+ .split("\n")
10
+ .map {|t| "#{INDENT * level}#{t}" }
11
+ .join("\n")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ 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
@@ -46,33 +46,56 @@ module Rbs2ts
46
46
  end
47
47
 
48
48
  class Record < ConverterBase
49
- INDENT = ' '
50
- @@nest = 0
51
-
52
49
  def to_ts
53
- @@nest = @@nest + 1
54
-
55
- indent = INDENT * @@nest
56
50
  field_lines = type.fields.map { |name, type|
57
- "#{indent}#{CaseTransform.camel_lower(name.to_s)}: #{Types::Resolver.to_ts(type)};"
51
+ "#{CaseTransform.camel_lower(name.to_s)}: #{Types::Resolver.to_ts(type)};"
58
52
  }
59
53
 
60
- @@nest = @@nest - 1
61
-
62
54
  return '{}' if field_lines.empty?
63
55
 
64
56
  field_ts = field_lines.join("\n")
65
57
 
66
58
  ts = <<~CODE
67
59
  {
68
- #{field_ts}
69
- #{INDENT * @@nest}}
60
+ #{Helper.indent(field_ts)}
61
+ }
70
62
  CODE
71
63
 
72
64
  ts.chomp
73
65
  end
74
66
  end
75
67
 
68
+ class Tuple < ConverterBase
69
+ def to_ts
70
+ tuple_types_ts = type.types.map {|t|
71
+ ts = Types::Resolver.to_ts(t)
72
+
73
+ if t.is_a?(::RBS::Types::Union) ||
74
+ t.is_a?(::RBS::Types::Intersection) ||
75
+ t.is_a?(::RBS::Types::Optional)
76
+ "(#{ts})"
77
+ else
78
+ ts
79
+ end
80
+ }.join(', ')
81
+
82
+ "[#{tuple_types_ts}]"
83
+ end
84
+ end
85
+
86
+ class Literal < ConverterBase
87
+ def to_ts
88
+ case type.literal
89
+ when ::String then
90
+ "\"#{type.literal}\""
91
+ when ::Integer, ::TrueClass, ::FalseClass then
92
+ "#{type.literal}"
93
+ else
94
+ 'unknown'
95
+ end
96
+ end
97
+ end
98
+
76
99
  class Optional < ConverterBase
77
100
  def to_ts
78
101
  "#{Types::Resolver.to_ts(type.type)} | null | undefined"
@@ -108,7 +131,7 @@ module Rbs2ts
108
131
  Types::Array.new(type).to_ts
109
132
  when 'String' then
110
133
  Types::String.new(type).to_ts
111
- when 'Integer' then
134
+ when 'Numeric', 'Integer', 'Float' then
112
135
  Types::Integer.new(type).to_ts
113
136
  when 'Bool' then
114
137
  Types::Bool.new(type).to_ts
@@ -169,6 +192,8 @@ module Rbs2ts
169
192
  Types::BasesNil
170
193
  when ::RBS::Types::ClassInstance then
171
194
  Types::ClassInstance
195
+ when ::RBS::Types::Literal then
196
+ Types::Literal
172
197
  when ::RBS::Types::Optional then
173
198
  Types::Optional
174
199
  when ::RBS::Types::Union then
@@ -177,6 +202,8 @@ module Rbs2ts
177
202
  Types::Intersection
178
203
  when ::RBS::Types::Record then
179
204
  Types::Record
205
+ when ::RBS::Types::Tuple then
206
+ Types::Tuple
180
207
  else
181
208
  Types::Fallback
182
209
  end
@@ -1,3 +1,3 @@
1
1
  module Rbs2ts
2
- VERSION = "1.0.0-alpha.2"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -9,25 +9,10 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["mugi-uno"]
10
10
  spec.email = ["mugi.uno@gmail.com"]
11
11
 
12
- spec.summary = "Convert rbs to typescript"
13
- spec.description = "Convert rbs to typescript"
12
+ spec.summary = "A RubyGem that converts Ruby RBS to TypeScript definitions."
14
13
  spec.homepage = "https://github.com/mugi-uno/rbs2ts"
14
+ spec.license = "MIT"
15
15
 
16
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
- # to allow pushing to a single host or delete this section to allow pushing to any host.
18
- if spec.respond_to?(:metadata)
19
- # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
-
21
- # spec.metadata["homepage_uri"] = spec.homepage
22
- # spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
23
- # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
24
- else
25
- raise "RubyGems 2.0 or newer is required to protect against " \
26
- "public gem pushes."
27
- end
28
-
29
- # Specify which files should be added to the gem when it is released.
30
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
31
16
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
32
17
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
33
18
  end
@@ -39,7 +24,7 @@ Gem::Specification.new do |spec|
39
24
  spec.add_dependency "thor"
40
25
  spec.add_dependency "case_transform"
41
26
 
42
- spec.add_development_dependency "bundler", "~> 2.1.4"
27
+ spec.add_development_dependency "bundler", ">= 2.1.4"
43
28
  spec.add_development_dependency "rake", "~> 10.0"
44
29
  spec.add_development_dependency "rspec", "~> 3.0"
45
30
  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.pre.alpha.2
4
+ version: 1.2.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-13 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -56,14 +56,14 @@ dependencies:
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 2.1.4
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 2.1.4
69
69
  - !ruby/object:Gem::Dependency
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
- description: Convert rbs to typescript
97
+ description:
98
98
  email:
99
99
  - mugi.uno@gmail.com
100
100
  executables:
@@ -102,7 +102,9 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
+ - ".circleci/config.yml"
105
106
  - ".gitignore"
107
+ - ".prettierignore"
106
108
  - ".rspec"
107
109
  - ".travis.yml"
108
110
  - ".vscode/launch.json"
@@ -116,11 +118,14 @@ files:
116
118
  - lib/rbs2ts/cli.rb
117
119
  - lib/rbs2ts/converter.rb
118
120
  - lib/rbs2ts/converter/declarations.rb
121
+ - lib/rbs2ts/converter/helper.rb
122
+ - lib/rbs2ts/converter/members.rb
119
123
  - lib/rbs2ts/converter/types.rb
120
124
  - lib/rbs2ts/version.rb
121
125
  - rbs2ts.gemspec
122
126
  homepage: https://github.com/mugi-uno/rbs2ts
123
- licenses: []
127
+ licenses:
128
+ - MIT
124
129
  metadata: {}
125
130
  post_install_message:
126
131
  rdoc_options: []
@@ -133,12 +138,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
138
  version: '0'
134
139
  required_rubygems_version: !ruby/object:Gem::Requirement
135
140
  requirements:
136
- - - ">"
141
+ - - ">="
137
142
  - !ruby/object:Gem::Version
138
- version: 1.3.1
143
+ version: '0'
139
144
  requirements: []
140
145
  rubygems_version: 3.1.4
141
146
  signing_key:
142
147
  specification_version: 4
143
- summary: Convert rbs to typescript
148
+ summary: A RubyGem that converts Ruby RBS to TypeScript definitions.
144
149
  test_files: []