sorbet-runtime 0.4.4869 → 0.4.4878
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/lib/sorbet-runtime.rb +1 -0
- data/lib/types/private/types/type_alias.rb +26 -0
- data/lib/types/props/type_validation.rb +2 -0
- data/lib/types/types/base.rb +10 -1
- data/lib/types/types/intersection.rb +1 -0
- data/lib/types/types/union.rb +1 -0
- data/lib/types/utils.rb +13 -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: 24dc6e9c709ddaa06a39910776ad04d297c87258be1522766bc9debea9e76f7e
|
|
4
|
+
data.tar.gz: 4b9054f4d6713ff99f90414c036eccc042ba6c02746525fd4e637dda62981825
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bf094800059eb3a52309de25073025dad8e33253a7318219c6d6c3459c17f5e846ce4b721605a665baf80b6237390d7ca8f83bfd285a0e477af34ff16c8c738f
|
|
7
|
+
data.tar.gz: 32e44a51c069b5ffee943f289c82523a26b1c13ba14edaada2e750b70989e21d5ac7e8373b61b0dbc31685dc7498a7d2dca25c05e0e7a3f2f5cc1f08280e917a
|
data/lib/sorbet-runtime.rb
CHANGED
|
@@ -57,6 +57,7 @@ require_relative 'types/types/untyped'
|
|
|
57
57
|
require_relative 'types/private/types/not_typed'
|
|
58
58
|
require_relative 'types/private/types/void'
|
|
59
59
|
require_relative 'types/private/types/string_holder'
|
|
60
|
+
require_relative 'types/private/types/type_alias'
|
|
60
61
|
|
|
61
62
|
require_relative 'types/types/type_variable'
|
|
62
63
|
require_relative 'types/types/type_member'
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
3
|
+
|
|
4
|
+
module T::Private::Types
|
|
5
|
+
# Wraps a proc for a type alias to defer its evaluation.
|
|
6
|
+
class TypeAlias < T::Types::Base
|
|
7
|
+
|
|
8
|
+
def initialize(callable)
|
|
9
|
+
@callable = callable
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# @override Base
|
|
13
|
+
def name
|
|
14
|
+
aliased_type.name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @override Base
|
|
18
|
+
def valid?(obj)
|
|
19
|
+
aliased_type.valid?(obj)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def aliased_type
|
|
23
|
+
@aliased_type ||= T::Utils.coerce(@callable.call)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -64,6 +64,8 @@ module T::Props::TypeValidation
|
|
|
64
64
|
type.types.map {|subtype| find_invalid_subtype(subtype)}.compact.first
|
|
65
65
|
when T::Types::Enum, T::Types::ClassOf
|
|
66
66
|
nil
|
|
67
|
+
when T::Private::Types::TypeAlias
|
|
68
|
+
find_invalid_subtype(type.aliased_type)
|
|
67
69
|
when T::Types::Simple
|
|
68
70
|
# TODO Could we manage to define a whitelist, consisting of something
|
|
69
71
|
# like primitives, subdocs, DataInterfaces, and collections/enums/unions
|
data/lib/types/types/base.rb
CHANGED
|
@@ -41,6 +41,14 @@ module T::Types
|
|
|
41
41
|
def subtype_of?(t2)
|
|
42
42
|
t1 = self
|
|
43
43
|
|
|
44
|
+
if t2.is_a?(T::Private::Types::TypeAlias)
|
|
45
|
+
t2 = t2.aliased_type
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
if t1.is_a?(T::Private::Types::TypeAlias)
|
|
49
|
+
return t1.aliased_type.subtype_of?(t2)
|
|
50
|
+
end
|
|
51
|
+
|
|
44
52
|
# pairs to cover: 1 (_, _)
|
|
45
53
|
# 2 (_, And)
|
|
46
54
|
# 3 (_, Or)
|
|
@@ -134,7 +142,8 @@ module T::Types
|
|
|
134
142
|
end
|
|
135
143
|
|
|
136
144
|
def ==(other)
|
|
137
|
-
other.class == self.class &&
|
|
145
|
+
(T::Utils.resolve_alias(other).class == T::Utils.resolve_alias(self).class) &&
|
|
146
|
+
other.name == self.name
|
|
138
147
|
end
|
|
139
148
|
|
|
140
149
|
alias_method :eql?, :==
|
data/lib/types/types/union.rb
CHANGED
data/lib/types/utils.rb
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
module T::Utils
|
|
5
5
|
# Used to convert from a type specification to a `T::Types::Base`.
|
|
6
6
|
def self.coerce(val)
|
|
7
|
-
if val.is_a?(T::Types::
|
|
7
|
+
if val.is_a?(T::Private::Types::TypeAlias)
|
|
8
|
+
val.aliased_type
|
|
9
|
+
elsif val.is_a?(T::Types::Base)
|
|
8
10
|
val
|
|
9
11
|
elsif val == ::Array
|
|
10
12
|
T::Array[T.untyped]
|
|
@@ -76,6 +78,16 @@ module T::Utils
|
|
|
76
78
|
T::Private::Methods.run_all_sig_blocks
|
|
77
79
|
end
|
|
78
80
|
|
|
81
|
+
# Return the underlying type for a type alias. Otherwise returns type.
|
|
82
|
+
def self.resolve_alias(type)
|
|
83
|
+
case type
|
|
84
|
+
when T::Private::Types::TypeAlias
|
|
85
|
+
type.aliased_type
|
|
86
|
+
else
|
|
87
|
+
type
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
79
91
|
# Give a type which is a subclass of T::Types::Base, determines if the type is a simple nilable type (union of NilClass and something else).
|
|
80
92
|
# If so, returns the T::Types::Base of the something else. Otherwise, returns nil.
|
|
81
93
|
def self.unwrap_nilable(type)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sorbet-runtime
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.4878
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stripe
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-10-
|
|
11
|
+
date: 2019-10-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: minitest
|
|
@@ -100,6 +100,7 @@ files:
|
|
|
100
100
|
- lib/types/private/sealed.rb
|
|
101
101
|
- lib/types/private/types/not_typed.rb
|
|
102
102
|
- lib/types/private/types/string_holder.rb
|
|
103
|
+
- lib/types/private/types/type_alias.rb
|
|
103
104
|
- lib/types/private/types/void.rb
|
|
104
105
|
- lib/types/profile.rb
|
|
105
106
|
- lib/types/props/_props.rb
|