Skip to content

Commit 4cf8c55

Browse files
committed
fix: optional quoted attributes
1 parent 92c42cc commit 4cf8c55

File tree

9 files changed

+13
-4
lines changed

9 files changed

+13
-4
lines changed

jsonapi-resources-anchor.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
1717

1818
s.required_ruby_version = ">= 3.1"
1919
s.add_dependency("jsonapi-resources", "~> 0.1")
20-
s.add_dependency("rails", ">= 7.0")
20+
s.add_dependency("rails", "~> 7.0")
2121
s.add_development_dependency("rspec-rails", "~> 7.0")
2222
s.add_development_dependency("yard")
2323
s.add_development_dependency("yard-activesupport-concern")

lib/anchor/type_script/serializer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def serialize_object(type, depth)
4949
def safe_name(property)
5050
name = property.name
5151
if name.match?(/[^a-zA-Z0-9_]/)
52-
"\"#{name}\""
52+
"\"#{name}\"" + (property.optional ? "?" : "")
5353
else
5454
name.to_s + (property.optional ? "?" : "")
5555
end

spec/example/app/resources/exhaustive_resource.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ class ExhaustiveResource < ApplicationResource
22
class AssertedObject < Types::Object
33
property :a, Types::Literal.new("a")
44
property "b-dash", Types::Literal.new(1)
5+
property "optional-dash", Types::Literal.new(1), optional: true
56
property :c, Types::Maybe.new(Types::String)
67
property :d_optional, Types::Maybe.new(Types::String), optional: true
78
end

spec/example/test/files/all_fields_false_schema.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,14 @@ export type Exhaustive = {
4949
assertedObject: {
5050
a: "a";
5151
"b-dash": 1;
52+
"optional-dash"?: 1;
5253
c: Maybe<string>;
5354
d_optional?: Maybe<string>;
5455
};
5556
assertedMaybeObject: Maybe<{
5657
a: "a";
5758
"b-dash": 1;
59+
"optional-dash"?: 1;
5860
c: Maybe<string>;
5961
d_optional?: Maybe<string>;
6062
}>;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"$schema":"https://json-schema.org/draft-07/schema","title":"Schema","type":"object","properties":{"comment":{"$ref":"#/$defs/Comment"},"user":{"$ref":"#/$defs/User"},"post":{"$ref":"#/$defs/Post"},"exhaustive":{"$ref":"#/$defs/Exhaustive"}},"required":["comment","user","post","exhaustive"],"additionalProperties":false,"$defs":{"Comment":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["comments"]},"text":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"relationships":{"type":"object","properties":{"user":{"$ref":"#/$defs/User"},"deletedBy":{"$ref":"#/$defs/User"},"commentable":{"oneOf":[{"$ref":"#/$defs/Post"}]}},"required":["user"],"additionalProperties":false}},"required":["id","type","text","createdAt","updatedAt","relationships"],"additionalProperties":false},"User":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["users"]},"name":{"type":"string"},"role":{"enum":[{"value":"admin"},{"value":"content_creator"},{"value":"external"},{"value":"guest"},{"value":"system"}]},"relationships":{"type":"object","properties":{"comments":{"type":"array","items":{"$ref":"#/$defs/Comment"}},"posts":{"type":"array","items":{"$ref":"#/$defs/Post"}}},"required":["comments","posts"],"additionalProperties":false}},"required":["id","type","name","role","relationships"],"additionalProperties":false},"Post":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["posts"]},"description":{"type":"string"},"relationships":{"type":"object","properties":{"user":{"$ref":"#/$defs/User"},"comments":{"type":"array","items":{"$ref":"#/$defs/Comment"}},"participants":{"type":"array","items":{"$ref":"#/$defs/User"}}},"required":["user","comments","participants"],"additionalProperties":false}},"required":["id","type","description","relationships"],"additionalProperties":false},"Exhaustive":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["exhaustives"]},"assertedString":{"type":"string"},"assertedNumber":{"type":"number"},"assertedBoolean":{"type":"boolean"},"assertedNull":{"type":"null"},"assertedUnknown":{},"assertedObject":{"type":"object","properties":{"a":{"enum":["a"]},"b-dash":{"enum":[1]},"c":{"oneOf":[{"type":"string"},{"type":"null"}]},"d_optional":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["a","b-dash","c"],"additionalProperties":false},"assertedMaybeObject":{"oneOf":[{"type":"object","properties":{"a":{"enum":["a"]},"b-dash":{"enum":[1]},"c":{"oneOf":[{"type":"string"},{"type":"null"}]},"d_optional":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["a","b-dash","c"],"additionalProperties":false},{"type":"null"}]},"assertedArrayRecord":{"type":"array","items":{"type":"object","additionalProperties":"true"}},"assertedUnion":{"oneOf":[{"type":"object","properties":{"str":{"type":"string"},"union":{"oneOf":[{"oneOf":[{"type":"string"},{"type":"null"}]},{"enum":[false]},{"type":"boolean"},{},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"array","items":{"type":"number"}},{},{"enum":[2]},{"enum":["union woo"]}]},"array":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"null"}]}},"intersection":{},"next":{"type":"object","properties":{"i":{"type":"number"},"f":{"type":"number"}},"required":["i"],"additionalProperties":false}},"required":["str","union","array","intersection","next"],"additionalProperties":false},{"enum":["union"]}]},"assertedUnionArray":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},"withDescription":{"type":"string"},"inferredUnknown":{},"uuid":{"type":"string"},"string":{"type":"string"},"maybeString":{"type":"string"},"text":{"type":"string"},"integer":{"type":"number"},"float":{"type":"number"},"decimal":{"type":"string"},"datetime":{"type":"string"},"timestamp":{"type":"string"},"time":{"type":"string"},"date":{"type":"string"},"boolean":{"type":"boolean"},"arrayString":{"type":"array","items":{"type":"string"}},"maybeArrayString":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"json":{"type":"object","additionalProperties":"true"},"jsonb":{"type":"object","additionalProperties":"true"},"daterange":{},"enum":{"oneOf":[{"enum":["sample"]},{"enum":["enum"]},{"enum":["value"]}]},"virtualUpcasedString":{"oneOf":[{"type":"string"},{"type":"null"}]},"loljk":{"enum":["never"]},"delegatedMaybeString":{"type":"string"},"modelOverridden":{"enum":["model_overridden"]},"resourceOverridden":{"enum":["resource_overridden"]},"withComment":{"oneOf":[{"type":"string"},{"type":"null"}]},"withParsedComment":{"oneOf":[{"type":"string"},{"type":"null"}]},"defaultedBoolean":{"type":"boolean"},"defaultedAt":{"type":"string"}},"required":["id","type","assertedString","assertedNumber","assertedBoolean","assertedNull","assertedUnknown","assertedObject","assertedMaybeObject","assertedArrayRecord","assertedUnion","assertedUnionArray","withDescription","inferredUnknown","uuid","string","maybeString","text","integer","float","decimal","datetime","timestamp","time","date","boolean","arrayString","maybeArrayString","json","jsonb","daterange","enum","virtualUpcasedString","loljk","delegatedMaybeString","modelOverridden","resourceOverridden","withComment","withParsedComment","defaultedBoolean","defaultedAt"],"additionalProperties":false}}}
1+
{"$schema":"https://json-schema.org/draft-07/schema","title":"Schema","type":"object","properties":{"comment":{"$ref":"#/$defs/Comment"},"user":{"$ref":"#/$defs/User"},"post":{"$ref":"#/$defs/Post"},"exhaustive":{"$ref":"#/$defs/Exhaustive"}},"required":["comment","user","post","exhaustive"],"additionalProperties":false,"$defs":{"Comment":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["comments"]},"text":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"relationships":{"type":"object","properties":{"user":{"$ref":"#/$defs/User"},"deletedBy":{"$ref":"#/$defs/User"},"commentable":{"oneOf":[{"$ref":"#/$defs/Post"}]}},"required":["user"],"additionalProperties":false}},"required":["id","type","text","createdAt","updatedAt","relationships"],"additionalProperties":false},"User":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["users"]},"name":{"type":"string"},"role":{"enum":[{"value":"admin"},{"value":"content_creator"},{"value":"external"},{"value":"guest"},{"value":"system"}]},"relationships":{"type":"object","properties":{"comments":{"type":"array","items":{"$ref":"#/$defs/Comment"}},"posts":{"type":"array","items":{"$ref":"#/$defs/Post"}}},"required":["comments","posts"],"additionalProperties":false}},"required":["id","type","name","role","relationships"],"additionalProperties":false},"Post":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["posts"]},"description":{"type":"string"},"relationships":{"type":"object","properties":{"user":{"$ref":"#/$defs/User"},"comments":{"type":"array","items":{"$ref":"#/$defs/Comment"}},"participants":{"type":"array","items":{"$ref":"#/$defs/User"}}},"required":["user","comments","participants"],"additionalProperties":false}},"required":["id","type","description","relationships"],"additionalProperties":false},"Exhaustive":{"type":"object","properties":{"id":{"type":"number"},"type":{"enum":["exhaustives"]},"assertedString":{"type":"string"},"assertedNumber":{"type":"number"},"assertedBoolean":{"type":"boolean"},"assertedNull":{"type":"null"},"assertedUnknown":{},"assertedObject":{"type":"object","properties":{"a":{"enum":["a"]},"b-dash":{"enum":[1]},"optional-dash":{"enum":[1]},"c":{"oneOf":[{"type":"string"},{"type":"null"}]},"d_optional":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["a","b-dash","c"],"additionalProperties":false},"assertedMaybeObject":{"oneOf":[{"type":"object","properties":{"a":{"enum":["a"]},"b-dash":{"enum":[1]},"optional-dash":{"enum":[1]},"c":{"oneOf":[{"type":"string"},{"type":"null"}]},"d_optional":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["a","b-dash","c"],"additionalProperties":false},{"type":"null"}]},"assertedArrayRecord":{"type":"array","items":{"type":"object","additionalProperties":"true"}},"assertedUnion":{"oneOf":[{"type":"object","properties":{"str":{"type":"string"},"union":{"oneOf":[{"oneOf":[{"type":"string"},{"type":"null"}]},{"enum":[false]},{"type":"boolean"},{},{"type":"number"},{"type":"number"},{"type":"number"},{"type":"array","items":{"type":"number"}},{},{"enum":[2]},{"enum":["union woo"]}]},"array":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"null"}]}},"intersection":{},"next":{"type":"object","properties":{"i":{"type":"number"},"f":{"type":"number"}},"required":["i"],"additionalProperties":false}},"required":["str","union","array","intersection","next"],"additionalProperties":false},{"enum":["union"]}]},"assertedUnionArray":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"number"}]}},"withDescription":{"type":"string"},"inferredUnknown":{},"uuid":{"type":"string"},"string":{"type":"string"},"maybeString":{"type":"string"},"text":{"type":"string"},"integer":{"type":"number"},"float":{"type":"number"},"decimal":{"type":"string"},"datetime":{"type":"string"},"timestamp":{"type":"string"},"time":{"type":"string"},"date":{"type":"string"},"boolean":{"type":"boolean"},"arrayString":{"type":"array","items":{"type":"string"}},"maybeArrayString":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"json":{"type":"object","additionalProperties":"true"},"jsonb":{"type":"object","additionalProperties":"true"},"daterange":{},"enum":{"oneOf":[{"enum":["sample"]},{"enum":["enum"]},{"enum":["value"]}]},"virtualUpcasedString":{"oneOf":[{"type":"string"},{"type":"null"}]},"loljk":{"enum":["never"]},"delegatedMaybeString":{"type":"string"},"modelOverridden":{"enum":["model_overridden"]},"resourceOverridden":{"enum":["resource_overridden"]},"withComment":{"oneOf":[{"type":"string"},{"type":"null"}]},"withParsedComment":{"oneOf":[{"type":"string"},{"type":"null"}]},"defaultedBoolean":{"type":"boolean"},"defaultedAt":{"type":"string"}},"required":["id","type","assertedString","assertedNumber","assertedBoolean","assertedNull","assertedUnknown","assertedObject","assertedMaybeObject","assertedArrayRecord","assertedUnion","assertedUnionArray","withDescription","inferredUnknown","uuid","string","maybeString","text","integer","float","decimal","datetime","timestamp","time","date","boolean","arrayString","maybeArrayString","json","jsonb","daterange","enum","virtualUpcasedString","loljk","delegatedMaybeString","modelOverridden","resourceOverridden","withComment","withParsedComment","defaultedBoolean","defaultedAt"],"additionalProperties":false}}}

spec/example/test/files/multifile/Exhaustive.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ type Model = {
1414
assertedObject: {
1515
a: "a";
1616
"b-dash": 1;
17+
"optional-dash"?: 1;
1718
c: Maybe<string>;
1819
d_optional?: Maybe<string>;
1920
};
2021
assertedMaybeObject: Maybe<{
2122
a: "a";
2223
"b-dash": 1;
24+
"optional-dash"?: 1;
2325
c: Maybe<string>;
2426
d_optional?: Maybe<string>;
2527
}>;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"shared.ts":"e42275c1453e00f368131821b3e4de915d6c5c789a8fc5c72967ddf8c31ad77b","Comment.ts":"fec6ae5197b65afe3fed510a393b7819e288f33366bc34aca1622833c5030ba6","User.ts":"ce80524eb520622e37af4aa9a2b35e49a50cb80bf4ea9921e818631e8a541738","Post.ts":"74d50a09806ff7496c168f2b9b4d6cea64111f42f38effa12464e5ad933c1303","Exhaustive.ts":"90b8a564e9a34ff49ff1bb02d8d3d6bb4f4eb1d518284eeddfaabd364daf70c8"}
1+
{"shared.ts":"e42275c1453e00f368131821b3e4de915d6c5c789a8fc5c72967ddf8c31ad77b","Comment.ts":"fec6ae5197b65afe3fed510a393b7819e288f33366bc34aca1622833c5030ba6","User.ts":"ce80524eb520622e37af4aa9a2b35e49a50cb80bf4ea9921e818631e8a541738","Post.ts":"74d50a09806ff7496c168f2b9b4d6cea64111f42f38effa12464e5ad933c1303","Exhaustive.ts":"bdd0ae0dc91474dc8fd52a8a7144a38df63e6d80d92bf8d801c7bb6cfe15fb0a"}

spec/example/test/files/schema.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ export type Exhaustive = {
5656
assertedObject: {
5757
a: "a";
5858
"b-dash": 1;
59+
"optional-dash"?: 1;
5960
c: Maybe<string>;
6061
d_optional?: Maybe<string>;
6162
};
6263
assertedMaybeObject: Maybe<{
6364
a: "a";
6465
"b-dash": 1;
66+
"optional-dash"?: 1;
6567
c: Maybe<string>;
6668
d_optional?: Maybe<string>;
6769
}>;

spec/example/test/files/test_schema.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ export type Exhaustive = {
5353
assertedObject: {
5454
a: "a";
5555
"b-dash": 1;
56+
"optional-dash"?: 1;
5657
c: Maybe<string>;
5758
d_optional?: Maybe<string>;
5859
};
5960
assertedMaybeObject: Maybe<{
6061
a: "a";
6162
"b-dash": 1;
63+
"optional-dash"?: 1;
6264
c: Maybe<string>;
6365
d_optional?: Maybe<string>;
6466
}>;

0 commit comments

Comments
 (0)