sorbet-schema 0.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 +7 -0
- data/.ruby-version +1 -0
- data/.standard.yml +6 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +24 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +147 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +22 -0
- data/lib/sorbet-schema/hash_transformer.rb +22 -0
- data/lib/sorbet-schema/struct_ext.rb +37 -0
- data/lib/sorbet-schema/version.rb +5 -0
- data/lib/sorbet-schema.rb +27 -0
- data/lib/typed/coercion/coercer.rb +18 -0
- data/lib/typed/coercion/coercion_error.rb +7 -0
- data/lib/typed/coercion/coercion_not_supported_error.rb +7 -0
- data/lib/typed/coercion/float_coercer.rb +21 -0
- data/lib/typed/coercion/integer_coercer.rb +21 -0
- data/lib/typed/coercion/string_coercer.rb +19 -0
- data/lib/typed/coercion/struct_coercer.rb +26 -0
- data/lib/typed/coercion.rb +26 -0
- data/lib/typed/deserialize_error.rb +6 -0
- data/lib/typed/field.rb +28 -0
- data/lib/typed/hash_serializer.rb +21 -0
- data/lib/typed/json_serializer.rb +28 -0
- data/lib/typed/parse_error.rb +12 -0
- data/lib/typed/schema.rb +10 -0
- data/lib/typed/serializer.rb +61 -0
- data/lib/typed/validations/field_type_validator.rb +24 -0
- data/lib/typed/validations/field_validator.rb +15 -0
- data/lib/typed/validations/multiple_validation_error.rb +16 -0
- data/lib/typed/validations/required_field_error.rb +14 -0
- data/lib/typed/validations/type_mismatch_error.rb +14 -0
- data/lib/typed/validations/validated_value.rb +12 -0
- data/lib/typed/validations/validation_error.rb +8 -0
- data/lib/typed/validations/validation_results.rb +29 -0
- data/lib/typed/validations.rb +8 -0
- data/sorbet/config +5 -0
- data/sorbet/rbi/annotations/rainbow.rbi +269 -0
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/ansi@1.5.0.rbi +687 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
- data/sorbet/rbi/gems/builder@3.2.4.rbi +504 -0
- data/sorbet/rbi/gems/erubi@1.12.0.rbi +145 -0
- data/sorbet/rbi/gems/io-console@0.7.2.rbi +8 -0
- data/sorbet/rbi/gems/json@2.7.1.rbi +1553 -0
- data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14237 -0
- data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +239 -0
- data/sorbet/rbi/gems/minitest-focus@1.4.0.rbi +91 -0
- data/sorbet/rbi/gems/minitest-reporters@1.6.1.rbi +1010 -0
- data/sorbet/rbi/gems/minitest@5.22.2.rbi +2233 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
- data/sorbet/rbi/gems/parallel@1.24.0.rbi +280 -0
- data/sorbet/rbi/gems/parser@3.3.0.5.rbi +5472 -0
- data/sorbet/rbi/gems/prettier_print@1.2.1.rbi +951 -0
- data/sorbet/rbi/gems/prism@0.24.0.rbi +31040 -0
- data/sorbet/rbi/gems/psych@5.1.2.rbi +1731 -0
- data/sorbet/rbi/gems/racc@1.7.3.rbi +157 -0
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
- data/sorbet/rbi/gems/rake@13.1.0.rbi +3027 -0
- data/sorbet/rbi/gems/rbi@0.1.9.rbi +3006 -0
- data/sorbet/rbi/gems/regexp_parser@2.9.0.rbi +3771 -0
- data/sorbet/rbi/gems/reline@0.4.3.rbi +8 -0
- data/sorbet/rbi/gems/rexml@3.2.6.rbi +4781 -0
- data/sorbet/rbi/gems/rubocop-ast@1.31.1.rbi +7014 -0
- data/sorbet/rbi/gems/rubocop-performance@1.20.2.rbi +8 -0
- data/sorbet/rbi/gems/rubocop-sorbet@0.7.7.rbi +8 -0
- data/sorbet/rbi/gems/rubocop@1.61.0.rbi +57499 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
- data/sorbet/rbi/gems/sorbet-result@1.1.0.rbi +519 -0
- data/sorbet/rbi/gems/sorbet-struct-comparable@1.3.0.rbi +34 -0
- data/sorbet/rbi/gems/spoom@1.2.4.rbi +3777 -0
- data/sorbet/rbi/gems/standard-custom@1.0.2.rbi +8 -0
- data/sorbet/rbi/gems/standard-performance@1.3.1.rbi +80 -0
- data/sorbet/rbi/gems/standard-sorbet@0.0.2.rbi +52 -0
- data/sorbet/rbi/gems/standard@1.34.0.rbi +850 -0
- data/sorbet/rbi/gems/stringio@3.1.0.rbi +8 -0
- data/sorbet/rbi/gems/syntax_tree@6.2.0.rbi +23133 -0
- data/sorbet/rbi/gems/tapioca@0.12.0.rbi +3499 -0
- data/sorbet/rbi/gems/thor@1.3.1.rbi +4351 -0
- data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +65 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
- data/sorbet/rbi/gems/yard@0.9.36.rbi +18220 -0
- data/sorbet/rbi/gems/zeitwerk@2.6.13.rbi +1003 -0
- data/sorbet/tapioca/config.yml +4 -0
- data/sorbet/tapioca/require.rb +12 -0
- metadata +191 -0
data/lib/typed/field.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
class Field < T::Struct
|
|
5
|
+
extend T::Sig
|
|
6
|
+
|
|
7
|
+
include ActsAsComparable
|
|
8
|
+
|
|
9
|
+
const :name, Symbol
|
|
10
|
+
const :type, T::Class[T.anything]
|
|
11
|
+
const :required, T::Boolean, default: true
|
|
12
|
+
|
|
13
|
+
sig { returns(T::Boolean) }
|
|
14
|
+
def required?
|
|
15
|
+
required
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
sig { returns(T::Boolean) }
|
|
19
|
+
def optional?
|
|
20
|
+
!required
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sig { params(value: Value).returns(Validations::ValidationResult) }
|
|
24
|
+
def validate(value)
|
|
25
|
+
Validations::FieldTypeValidator.new.validate(field: self, value: value)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
class HashSerializer < Serializer
|
|
5
|
+
InputHash = T.type_alias { T::Hash[T.any(Symbol, String), T.untyped] }
|
|
6
|
+
OutputHash = T.type_alias { Params }
|
|
7
|
+
|
|
8
|
+
Input = type_member { {fixed: InputHash} }
|
|
9
|
+
Output = type_member { {fixed: OutputHash} }
|
|
10
|
+
|
|
11
|
+
sig { override.params(source: Input).returns(Result[T::Struct, DeserializeError]) }
|
|
12
|
+
def deserialize(source)
|
|
13
|
+
deserialize_from_creation_params(HashTransformer.new.deep_symbolize_keys(source))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
sig { override.params(struct: T::Struct).returns(Output) }
|
|
17
|
+
def serialize(struct)
|
|
18
|
+
HashTransformer.new.deep_symbolize_keys(struct.serialize)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
5
|
+
module Typed
|
|
6
|
+
class JSONSerializer < Serializer
|
|
7
|
+
Input = type_member { {fixed: String} }
|
|
8
|
+
Output = type_member { {fixed: String} }
|
|
9
|
+
|
|
10
|
+
sig { override.params(source: Input).returns(Result[T::Struct, DeserializeError]) }
|
|
11
|
+
def deserialize(source)
|
|
12
|
+
parsed_json = JSON.parse(source)
|
|
13
|
+
|
|
14
|
+
creation_params = schema.fields.each_with_object(T.let({}, Params)) do |field, hsh|
|
|
15
|
+
hsh[field.name] = parsed_json[field.name.to_s]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
deserialize_from_creation_params(creation_params)
|
|
19
|
+
rescue JSON::ParserError
|
|
20
|
+
Failure.new(ParseError.new(format: :json))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sig { override.params(struct: T::Struct).returns(Output) }
|
|
24
|
+
def serialize(struct)
|
|
25
|
+
JSON.generate(struct.serialize)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/typed/schema.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
class Serializer
|
|
5
|
+
extend T::Sig
|
|
6
|
+
extend T::Helpers
|
|
7
|
+
extend T::Generic
|
|
8
|
+
abstract!
|
|
9
|
+
|
|
10
|
+
Input = type_member
|
|
11
|
+
Output = type_member
|
|
12
|
+
Params = T.type_alias { T::Hash[Symbol, T.untyped] }
|
|
13
|
+
DeserializeResult = T.type_alias { Typed::Result[T::Struct, DeserializeError] }
|
|
14
|
+
|
|
15
|
+
sig { returns(Schema) }
|
|
16
|
+
attr_reader :schema
|
|
17
|
+
|
|
18
|
+
sig { params(schema: Schema).void }
|
|
19
|
+
def initialize(schema:)
|
|
20
|
+
@schema = schema
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sig { abstract.params(source: Output).returns(DeserializeResult) }
|
|
24
|
+
def deserialize(source)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
sig { abstract.params(struct: T::Struct).returns(Output) }
|
|
28
|
+
def serialize(struct)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
sig { params(creation_params: Params).returns(DeserializeResult) }
|
|
34
|
+
def deserialize_from_creation_params(creation_params)
|
|
35
|
+
results = schema.fields.map do |field|
|
|
36
|
+
value = creation_params[field.name]
|
|
37
|
+
|
|
38
|
+
if value.nil?
|
|
39
|
+
field.validate(value)
|
|
40
|
+
elsif value.class != field.type
|
|
41
|
+
coercion_result = Coercion.coerce(field: field, value: value)
|
|
42
|
+
|
|
43
|
+
if coercion_result.success?
|
|
44
|
+
field.validate(coercion_result.payload)
|
|
45
|
+
else
|
|
46
|
+
Failure.new(Validations::ValidationError.new(coercion_result.error.message))
|
|
47
|
+
end
|
|
48
|
+
else
|
|
49
|
+
field.validate(value)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Validations::ValidationResults
|
|
54
|
+
.new(results: results)
|
|
55
|
+
.combine
|
|
56
|
+
.and_then do |validated_params|
|
|
57
|
+
Success.new(schema.target.new(**validated_params))
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
module Validations
|
|
5
|
+
class FieldTypeValidator
|
|
6
|
+
extend T::Sig
|
|
7
|
+
|
|
8
|
+
include FieldValidator
|
|
9
|
+
|
|
10
|
+
sig { override.params(field: Field, value: Value).returns(ValidationResult) }
|
|
11
|
+
def validate(field:, value:)
|
|
12
|
+
if field.type == value.class
|
|
13
|
+
Success.new(ValidatedValue.new(name: field.name, value: value))
|
|
14
|
+
elsif field.required? && value.nil?
|
|
15
|
+
Failure.new(RequiredFieldError.new(field_name: field.name))
|
|
16
|
+
elsif field.optional? && value.nil?
|
|
17
|
+
Success.new(ValidatedValue.new(name: field.name, value: value))
|
|
18
|
+
else
|
|
19
|
+
Failure.new(TypeMismatchError.new(field_name: field.name, field_type: field.type, given_type: value.class))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
module Validations
|
|
5
|
+
module FieldValidator
|
|
6
|
+
extend T::Sig
|
|
7
|
+
extend T::Helpers
|
|
8
|
+
interface!
|
|
9
|
+
|
|
10
|
+
sig { abstract.params(field: Field, value: Value).returns(ValidationResult) }
|
|
11
|
+
def validate(field:, value:)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
module Validations
|
|
5
|
+
class MultipleValidationError < ValidationError
|
|
6
|
+
extend T::Sig
|
|
7
|
+
|
|
8
|
+
sig { params(errors: T::Array[ValidationError]).void }
|
|
9
|
+
def initialize(errors:)
|
|
10
|
+
combined_message = errors.map(&:message).join(" | ")
|
|
11
|
+
|
|
12
|
+
super("Multiple validation errors found: #{combined_message}")
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
module Validations
|
|
5
|
+
class RequiredFieldError < ValidationError
|
|
6
|
+
extend T::Sig
|
|
7
|
+
|
|
8
|
+
sig { params(field_name: Symbol).void }
|
|
9
|
+
def initialize(field_name:)
|
|
10
|
+
super("#{field_name} is required.")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
module Validations
|
|
5
|
+
class TypeMismatchError < ValidationError
|
|
6
|
+
extend T::Sig
|
|
7
|
+
|
|
8
|
+
sig { params(field_name: Symbol, field_type: T::Class[T.anything], given_type: T::Class[T.anything]).void }
|
|
9
|
+
def initialize(field_name:, field_type:, given_type:)
|
|
10
|
+
super("Invalid type given to #{field_name}. Expected #{field_type}, got #{given_type}.")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
module Typed
|
|
4
|
+
module Validations
|
|
5
|
+
class ValidationResults < T::Struct
|
|
6
|
+
extend T::Sig
|
|
7
|
+
|
|
8
|
+
const :results, T::Array[ValidationResult]
|
|
9
|
+
|
|
10
|
+
sig { returns(Result[ValidatedParams, ValidationError]) }
|
|
11
|
+
def combine
|
|
12
|
+
failing_results = results.select(&:failure?)
|
|
13
|
+
|
|
14
|
+
case failing_results.length
|
|
15
|
+
when 0
|
|
16
|
+
Success.new(
|
|
17
|
+
results.each_with_object({}) do |result, validated_params|
|
|
18
|
+
validated_params[result.payload.name] = result.payload.value
|
|
19
|
+
end
|
|
20
|
+
)
|
|
21
|
+
when 1
|
|
22
|
+
Failure.new(T.must(failing_results.first).error)
|
|
23
|
+
else
|
|
24
|
+
Failure.new(MultipleValidationError.new(errors: failing_results.map(&:error)))
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/sorbet/config
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
|
|
3
|
+
# DO NOT EDIT MANUALLY
|
|
4
|
+
# This file was pulled from a central RBI files repository.
|
|
5
|
+
# Please run `bin/tapioca annotations` to update it.
|
|
6
|
+
|
|
7
|
+
module Rainbow
|
|
8
|
+
# @shim: https://github.com/sickill/rainbow/blob/master/lib/rainbow.rb#L10-L12
|
|
9
|
+
sig { returns(T::Boolean) }
|
|
10
|
+
attr_accessor :enabled
|
|
11
|
+
|
|
12
|
+
class Color
|
|
13
|
+
sig { returns(Symbol) }
|
|
14
|
+
attr_reader :ground
|
|
15
|
+
|
|
16
|
+
sig { params(ground: Symbol, values: T.any([Integer], [Integer, Integer, Integer])).returns(Color) }
|
|
17
|
+
def self.build(ground, values); end
|
|
18
|
+
|
|
19
|
+
sig { params(hex: String).returns([Integer, Integer, Integer]) }
|
|
20
|
+
def self.parse_hex_color(hex); end
|
|
21
|
+
|
|
22
|
+
class Indexed < Rainbow::Color
|
|
23
|
+
sig { returns(Integer) }
|
|
24
|
+
attr_reader :num
|
|
25
|
+
|
|
26
|
+
sig { params(ground: Symbol, num: Integer).void }
|
|
27
|
+
def initialize(ground, num); end
|
|
28
|
+
|
|
29
|
+
sig { returns(T::Array[Integer]) }
|
|
30
|
+
def codes; end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Named < Rainbow::Color::Indexed
|
|
34
|
+
NAMES = T.let(nil, T::Hash[Symbol, Integer])
|
|
35
|
+
|
|
36
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
|
37
|
+
def initialize(ground, name); end
|
|
38
|
+
|
|
39
|
+
sig { returns(T::Array[Symbol]) }
|
|
40
|
+
def self.color_names; end
|
|
41
|
+
|
|
42
|
+
sig { returns(String) }
|
|
43
|
+
def self.valid_names; end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class RGB < Rainbow::Color::Indexed
|
|
47
|
+
sig { returns(Integer) }
|
|
48
|
+
attr_reader :r, :g, :b
|
|
49
|
+
|
|
50
|
+
sig { params(ground: Symbol, values: Integer).void }
|
|
51
|
+
def initialize(ground, *values); end
|
|
52
|
+
|
|
53
|
+
sig { returns(T::Array[Integer]) }
|
|
54
|
+
def codes; end
|
|
55
|
+
|
|
56
|
+
sig { params(value: Numeric).returns(Integer) }
|
|
57
|
+
def self.to_ansi_domain(value); end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class X11Named < Rainbow::Color::RGB
|
|
61
|
+
include Rainbow::X11ColorNames
|
|
62
|
+
|
|
63
|
+
sig { returns(T::Array[Symbol]) }
|
|
64
|
+
def self.color_names; end
|
|
65
|
+
|
|
66
|
+
sig { returns(String) }
|
|
67
|
+
def self.valid_names; end
|
|
68
|
+
|
|
69
|
+
sig { params(ground: Symbol, name: Symbol).void }
|
|
70
|
+
def initialize(ground, name); end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
sig { returns(Wrapper) }
|
|
75
|
+
def self.global; end
|
|
76
|
+
|
|
77
|
+
sig { returns(T::Boolean) }
|
|
78
|
+
def self.enabled; end
|
|
79
|
+
|
|
80
|
+
sig { params(value: T::Boolean).returns(T::Boolean) }
|
|
81
|
+
def self.enabled=(value); end
|
|
82
|
+
|
|
83
|
+
sig { params(string: String).returns(String) }
|
|
84
|
+
def self.uncolor(string); end
|
|
85
|
+
|
|
86
|
+
class NullPresenter < String
|
|
87
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
88
|
+
def color(*values); end
|
|
89
|
+
|
|
90
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
91
|
+
def foreground(*values); end
|
|
92
|
+
|
|
93
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
94
|
+
def fg(*values); end
|
|
95
|
+
|
|
96
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
97
|
+
def background(*values); end
|
|
98
|
+
|
|
99
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
|
|
100
|
+
def bg(*values); end
|
|
101
|
+
|
|
102
|
+
sig { returns(NullPresenter) }
|
|
103
|
+
def reset; end
|
|
104
|
+
|
|
105
|
+
sig { returns(NullPresenter) }
|
|
106
|
+
def bright; end
|
|
107
|
+
|
|
108
|
+
sig { returns(NullPresenter) }
|
|
109
|
+
def faint; end
|
|
110
|
+
|
|
111
|
+
sig { returns(NullPresenter) }
|
|
112
|
+
def italic; end
|
|
113
|
+
|
|
114
|
+
sig { returns(NullPresenter) }
|
|
115
|
+
def underline; end
|
|
116
|
+
|
|
117
|
+
sig { returns(NullPresenter) }
|
|
118
|
+
def blink; end
|
|
119
|
+
|
|
120
|
+
sig { returns(NullPresenter) }
|
|
121
|
+
def inverse; end
|
|
122
|
+
|
|
123
|
+
sig { returns(NullPresenter) }
|
|
124
|
+
def hide; end
|
|
125
|
+
|
|
126
|
+
sig { returns(NullPresenter) }
|
|
127
|
+
def cross_out; end
|
|
128
|
+
|
|
129
|
+
sig { returns(NullPresenter) }
|
|
130
|
+
def black; end
|
|
131
|
+
|
|
132
|
+
sig { returns(NullPresenter) }
|
|
133
|
+
def red; end
|
|
134
|
+
|
|
135
|
+
sig { returns(NullPresenter) }
|
|
136
|
+
def green; end
|
|
137
|
+
|
|
138
|
+
sig { returns(NullPresenter) }
|
|
139
|
+
def yellow; end
|
|
140
|
+
|
|
141
|
+
sig { returns(NullPresenter) }
|
|
142
|
+
def blue; end
|
|
143
|
+
|
|
144
|
+
sig { returns(NullPresenter) }
|
|
145
|
+
def magenta; end
|
|
146
|
+
|
|
147
|
+
sig { returns(NullPresenter) }
|
|
148
|
+
def cyan; end
|
|
149
|
+
|
|
150
|
+
sig { returns(NullPresenter) }
|
|
151
|
+
def white; end
|
|
152
|
+
|
|
153
|
+
sig { returns(NullPresenter) }
|
|
154
|
+
def bold; end
|
|
155
|
+
|
|
156
|
+
sig { returns(NullPresenter) }
|
|
157
|
+
def dark; end
|
|
158
|
+
|
|
159
|
+
sig { returns(NullPresenter) }
|
|
160
|
+
def strike; end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
class Presenter < String
|
|
164
|
+
TERM_EFFECTS = T.let(nil, T::Hash[Symbol, Integer])
|
|
165
|
+
|
|
166
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
167
|
+
def color(*values); end
|
|
168
|
+
|
|
169
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
170
|
+
def foreground(*values); end
|
|
171
|
+
|
|
172
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
173
|
+
def fg(*values); end
|
|
174
|
+
|
|
175
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
176
|
+
def background(*values); end
|
|
177
|
+
|
|
178
|
+
sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
|
|
179
|
+
def bg(*values); end
|
|
180
|
+
|
|
181
|
+
sig { returns(Presenter) }
|
|
182
|
+
def reset; end
|
|
183
|
+
|
|
184
|
+
sig { returns(Presenter) }
|
|
185
|
+
def bright; end
|
|
186
|
+
|
|
187
|
+
sig { returns(Presenter) }
|
|
188
|
+
def faint; end
|
|
189
|
+
|
|
190
|
+
sig { returns(Presenter) }
|
|
191
|
+
def italic; end
|
|
192
|
+
|
|
193
|
+
sig { returns(Presenter) }
|
|
194
|
+
def underline; end
|
|
195
|
+
|
|
196
|
+
sig { returns(Presenter) }
|
|
197
|
+
def blink; end
|
|
198
|
+
|
|
199
|
+
sig { returns(Presenter) }
|
|
200
|
+
def inverse; end
|
|
201
|
+
|
|
202
|
+
sig { returns(Presenter) }
|
|
203
|
+
def hide; end
|
|
204
|
+
|
|
205
|
+
sig { returns(Presenter) }
|
|
206
|
+
def cross_out; end
|
|
207
|
+
|
|
208
|
+
sig { returns(Presenter) }
|
|
209
|
+
def black; end
|
|
210
|
+
|
|
211
|
+
sig { returns(Presenter) }
|
|
212
|
+
def red; end
|
|
213
|
+
|
|
214
|
+
sig { returns(Presenter) }
|
|
215
|
+
def green; end
|
|
216
|
+
|
|
217
|
+
sig { returns(Presenter) }
|
|
218
|
+
def yellow; end
|
|
219
|
+
|
|
220
|
+
sig { returns(Presenter) }
|
|
221
|
+
def blue; end
|
|
222
|
+
|
|
223
|
+
sig { returns(Presenter) }
|
|
224
|
+
def magenta; end
|
|
225
|
+
|
|
226
|
+
sig { returns(Presenter) }
|
|
227
|
+
def cyan; end
|
|
228
|
+
|
|
229
|
+
sig { returns(Presenter) }
|
|
230
|
+
def white; end
|
|
231
|
+
|
|
232
|
+
sig { returns(Presenter) }
|
|
233
|
+
def bold; end
|
|
234
|
+
|
|
235
|
+
sig { returns(Presenter) }
|
|
236
|
+
def dark; end
|
|
237
|
+
|
|
238
|
+
sig { returns(Presenter) }
|
|
239
|
+
def strike; end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
class StringUtils
|
|
243
|
+
sig { params(string: String, codes: T::Array[Integer]).returns(String) }
|
|
244
|
+
def self.wrap_with_sgr(string, codes); end
|
|
245
|
+
|
|
246
|
+
sig { params(string: String).returns(String) }
|
|
247
|
+
def self.uncolor(string); end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
VERSION = T.let(nil, String)
|
|
251
|
+
|
|
252
|
+
class Wrapper
|
|
253
|
+
sig { returns(T::Boolean) }
|
|
254
|
+
attr_accessor :enabled
|
|
255
|
+
|
|
256
|
+
sig { params(enabled: T::Boolean).void }
|
|
257
|
+
def initialize(enabled = true); end
|
|
258
|
+
|
|
259
|
+
sig { params(string: String).returns(T.any(Rainbow::Presenter, Rainbow::NullPresenter)) }
|
|
260
|
+
def wrap(string); end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
module X11ColorNames
|
|
264
|
+
NAMES = T.let(nil, T::Hash[Symbol, [Integer, Integer, Integer]])
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
sig { params(string: String).returns(Rainbow::Presenter) }
|
|
269
|
+
def Rainbow(string); end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
**/*.rbi linguist-generated=true
|