Skip to content

Commit b4eea99

Browse files
authored
additionalProperties interpolation, primitive enums (#266)
* support refs and non-primitive types in additionalProperties * fix tests, prettier * dont convert enum numbers to string * prettier * update tests * boolean enums * fix test * fix tests again
1 parent 9cb1218 commit b4eea99

File tree

9 files changed

+127
-113
lines changed

9 files changed

+127
-113
lines changed

examples/stripe-openapi2.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -678,83 +678,83 @@ export interface definitions {
678678
| "unapplied_from_invoice"
679679
| "unspent_receiver_credit";
680680
};
681-
deleted_account: { deleted: "true"; id: string; object: "account" };
681+
deleted_account: { deleted: true; id: string; object: "account" };
682682
deleted_alipay_account: {
683-
deleted: "true";
683+
deleted: true;
684684
id: string;
685685
object: "alipay_account";
686686
};
687687
deleted_apple_pay_domain: {
688-
deleted: "true";
688+
deleted: true;
689689
id: string;
690690
object: "apple_pay_domain";
691691
};
692692
deleted_bank_account: {
693693
currency?: string;
694-
deleted: "true";
694+
deleted: true;
695695
id: string;
696696
object: "bank_account";
697697
};
698698
deleted_bitcoin_receiver: {
699-
deleted: "true";
699+
deleted: true;
700700
id: string;
701701
object: "bitcoin_receiver";
702702
};
703703
deleted_card: {
704704
currency?: string;
705-
deleted: "true";
705+
deleted: true;
706706
id: string;
707707
object: "card";
708708
};
709-
deleted_coupon: { deleted: "true"; id: string; object: "coupon" };
710-
deleted_customer: { deleted: "true"; id: string; object: "customer" };
711-
deleted_discount: { deleted: "true"; object: "discount" };
709+
deleted_coupon: { deleted: true; id: string; object: "coupon" };
710+
deleted_customer: { deleted: true; id: string; object: "customer" };
711+
deleted_discount: { deleted: true; object: "discount" };
712712
deleted_external_account: {
713713
currency?: string;
714-
deleted: "true";
714+
deleted: true;
715715
id: string;
716716
object: "bank_account";
717717
};
718-
deleted_invoice: { deleted: "true"; id: string; object: "invoice" };
719-
deleted_invoiceitem: { deleted: "true"; id: string; object: "invoiceitem" };
718+
deleted_invoice: { deleted: true; id: string; object: "invoice" };
719+
deleted_invoiceitem: { deleted: true; id: string; object: "invoiceitem" };
720720
deleted_payment_source: {
721-
deleted: "true";
721+
deleted: true;
722722
id: string;
723723
object: "alipay_account";
724724
};
725-
deleted_person: { deleted: "true"; id: string; object: "person" };
726-
deleted_plan: { deleted: "true"; id: string; object: "plan" };
727-
deleted_product: { deleted: "true"; id: string; object: "product" };
725+
deleted_person: { deleted: true; id: string; object: "person" };
726+
deleted_plan: { deleted: true; id: string; object: "plan" };
727+
deleted_product: { deleted: true; id: string; object: "product" };
728728
"deleted_radar.value_list": {
729-
deleted: "true";
729+
deleted: true;
730730
id: string;
731731
object: "radar.value_list";
732732
};
733733
"deleted_radar.value_list_item": {
734-
deleted: "true";
734+
deleted: true;
735735
id: string;
736736
object: "radar.value_list_item";
737737
};
738-
deleted_recipient: { deleted: "true"; id: string; object: "recipient" };
739-
deleted_sku: { deleted: "true"; id: string; object: "sku" };
738+
deleted_recipient: { deleted: true; id: string; object: "recipient" };
739+
deleted_sku: { deleted: true; id: string; object: "sku" };
740740
deleted_subscription_item: {
741-
deleted: "true";
741+
deleted: true;
742742
id: string;
743743
object: "subscription_item";
744744
};
745-
deleted_tax_id: { deleted: "true"; id: string; object: "tax_id" };
745+
deleted_tax_id: { deleted: true; id: string; object: "tax_id" };
746746
"deleted_terminal.location": {
747-
deleted: "true";
747+
deleted: true;
748748
id: string;
749749
object: "terminal.location";
750750
};
751751
"deleted_terminal.reader": {
752-
deleted: "true";
752+
deleted: true;
753753
id: string;
754754
object: "terminal.reader";
755755
};
756756
deleted_webhook_endpoint: {
757-
deleted: "true";
757+
deleted: true;
758758
id: string;
759759
object: "webhook_endpoint";
760760
};

examples/stripe-openapi3.ts

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -737,82 +737,82 @@ export interface components {
737737
| "unapplied_from_invoice"
738738
| "unspent_receiver_credit";
739739
};
740-
deleted_account: { deleted: "true"; id: string; object: "account" };
740+
deleted_account: { deleted: true; id: string; object: "account" };
741741
deleted_alipay_account: {
742-
deleted: "true";
742+
deleted: true;
743743
id: string;
744744
object: "alipay_account";
745745
};
746746
deleted_apple_pay_domain: {
747-
deleted: "true";
747+
deleted: true;
748748
id: string;
749749
object: "apple_pay_domain";
750750
};
751751
deleted_bank_account: {
752752
currency?: string;
753-
deleted: "true";
753+
deleted: true;
754754
id: string;
755755
object: "bank_account";
756756
};
757757
deleted_bitcoin_receiver: {
758-
deleted: "true";
758+
deleted: true;
759759
id: string;
760760
object: "bitcoin_receiver";
761761
};
762762
deleted_card: {
763763
currency?: string;
764-
deleted: "true";
764+
deleted: true;
765765
id: string;
766766
object: "card";
767767
};
768-
deleted_coupon: { deleted: "true"; id: string; object: "coupon" };
769-
deleted_customer: { deleted: "true"; id: string; object: "customer" };
770-
deleted_discount: { deleted: "true"; object: "discount" };
768+
deleted_coupon: { deleted: true; id: string; object: "coupon" };
769+
deleted_customer: { deleted: true; id: string; object: "customer" };
770+
deleted_discount: { deleted: true; object: "discount" };
771771
deleted_external_account: Partial<
772772
components["schemas"]["deleted_bank_account"]
773773
> &
774774
Partial<components["schemas"]["deleted_card"]>;
775-
deleted_invoice: { deleted: "true"; id: string; object: "invoice" };
776-
deleted_invoiceitem: { deleted: "true"; id: string; object: "invoiceitem" };
775+
deleted_invoice: { deleted: true; id: string; object: "invoice" };
776+
deleted_invoiceitem: { deleted: true; id: string; object: "invoiceitem" };
777777
deleted_payment_source: Partial<
778778
components["schemas"]["deleted_alipay_account"]
779779
> &
780780
Partial<components["schemas"]["deleted_bank_account"]> &
781781
Partial<components["schemas"]["deleted_bitcoin_receiver"]> &
782782
Partial<components["schemas"]["deleted_card"]>;
783-
deleted_person: { deleted: "true"; id: string; object: "person" };
784-
deleted_plan: { deleted: "true"; id: string; object: "plan" };
785-
deleted_product: { deleted: "true"; id: string; object: "product" };
783+
deleted_person: { deleted: true; id: string; object: "person" };
784+
deleted_plan: { deleted: true; id: string; object: "plan" };
785+
deleted_product: { deleted: true; id: string; object: "product" };
786786
"deleted_radar.value_list": {
787-
deleted: "true";
787+
deleted: true;
788788
id: string;
789789
object: "radar.value_list";
790790
};
791791
"deleted_radar.value_list_item": {
792-
deleted: "true";
792+
deleted: true;
793793
id: string;
794794
object: "radar.value_list_item";
795795
};
796-
deleted_recipient: { deleted: "true"; id: string; object: "recipient" };
797-
deleted_sku: { deleted: "true"; id: string; object: "sku" };
796+
deleted_recipient: { deleted: true; id: string; object: "recipient" };
797+
deleted_sku: { deleted: true; id: string; object: "sku" };
798798
deleted_subscription_item: {
799-
deleted: "true";
799+
deleted: true;
800800
id: string;
801801
object: "subscription_item";
802802
};
803-
deleted_tax_id: { deleted: "true"; id: string; object: "tax_id" };
803+
deleted_tax_id: { deleted: true; id: string; object: "tax_id" };
804804
"deleted_terminal.location": {
805-
deleted: "true";
805+
deleted: true;
806806
id: string;
807807
object: "terminal.location";
808808
};
809809
"deleted_terminal.reader": {
810-
deleted: "true";
810+
deleted: true;
811811
id: string;
812812
object: "terminal.reader";
813813
};
814814
deleted_webhook_endpoint: {
815-
deleted: "true";
815+
deleted: true;
816816
id: string;
817817
object: "webhook_endpoint";
818818
};

src/v2.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,13 @@ export default function generateTypesV2(
5555
return nodeType(node) || "any";
5656
}
5757
case "enum": {
58-
return tsUnionOf((node.enum as string[]).map((item) => `'${item}'`));
58+
return tsUnionOf(
59+
(node.enum as string[]).map((item) =>
60+
typeof item === "number" || typeof item === "boolean"
61+
? item
62+
: `'${item}'`
63+
)
64+
);
5965
}
6066
case "object": {
6167
if (

src/v3.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,13 @@ export default function generateTypesV3(
4949
return nodeType(node) || "any";
5050
}
5151
case "enum": {
52-
return tsUnionOf((node.enum as string[]).map((item) => `'${item}'`));
52+
return tsUnionOf(
53+
(node.enum as string[]).map((item) =>
54+
typeof item === "number" || typeof item === "boolean"
55+
? item
56+
: `'${item}'`
57+
)
58+
);
5359
}
5460
case "oneOf": {
5561
return tsUnionOf((node.oneOf as any[]).map(transform));
@@ -74,7 +80,9 @@ export default function generateTypesV3(
7480
// if additional properties, add to end of properties
7581
if (node.additionalProperties) {
7682
properties += `[key: string]: ${
77-
nodeType(node.additionalProperties) || "any"
83+
node.additionalProperties === true
84+
? "any"
85+
: transform(node.additionalProperties) || "any"
7886
};\n`;
7987
}
8088

tests/v2/expected/http.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export interface definitions {
3232
body: definitions["ExpandedPlanBody"];
3333
id: definitions["ID"];
3434
type: "plan";
35-
version: "1";
35+
version: 1;
3636
};
3737
ExpandedPlanBody: definitions["PlanBody"] & {
3838
/**
@@ -58,7 +58,7 @@ export interface definitions {
5858
plans?: definitions["ExpandedPlan"][];
5959
provider: definitions["Provider"];
6060
type: "product";
61-
version: "1";
61+
version: 1;
6262
};
6363
/**
6464
* Optional container for additional details relating to numeric features.
@@ -239,7 +239,7 @@ export interface definitions {
239239
body: definitions["PlanBody"];
240240
id: definitions["ID"];
241241
type: "plan";
242-
version: "1";
242+
version: 1;
243243
};
244244
PlanBody: {
245245
/**
@@ -304,7 +304,7 @@ export interface definitions {
304304
body: definitions["ProductBody"];
305305
id: definitions["ID"];
306306
type: "product";
307-
version: "1";
307+
version: 1;
308308
};
309309
ProductBody: {
310310
billing: {
@@ -446,7 +446,7 @@ export interface definitions {
446446
body: definitions["ProviderBody"];
447447
id: definitions["ID"];
448448
type: "provider";
449-
version: "1";
449+
version: 1;
450450
};
451451
ProviderBody: {
452452
documentation_url?: string;
@@ -461,7 +461,7 @@ export interface definitions {
461461
body: definitions["RegionBody"];
462462
id: definitions["ID"];
463463
type: "region";
464-
version: "1";
464+
version: 1;
465465
};
466466
RegionBody: {
467467
location: definitions["Location"];

tests/v2/expected/manifold.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export interface definitions {
6969
Region: {
7070
id: definitions["ID"];
7171
type: "region";
72-
version: "1";
72+
version: 1;
7373
body: definitions["RegionBody"];
7474
};
7575
CreateRegion: { body: definitions["RegionBody"] };
@@ -94,7 +94,7 @@ export interface definitions {
9494
};
9595
Provider: {
9696
id: definitions["ID"];
97-
version: "1";
97+
version: 1;
9898
type: "provider";
9999
body: definitions["ProviderBody"];
100100
};
@@ -451,7 +451,7 @@ export interface definitions {
451451
};
452452
Product: {
453453
id: definitions["ID"];
454-
version: "1";
454+
version: 1;
455455
type: "product";
456456
body: definitions["ProductBody"];
457457
};
@@ -514,13 +514,13 @@ export interface definitions {
514514
};
515515
Plan: {
516516
id: definitions["ID"];
517-
version: "1";
517+
version: 1;
518518
type: "plan";
519519
body: definitions["PlanBody"];
520520
};
521521
ExpandedPlan: {
522522
id: definitions["ID"];
523-
version: "1";
523+
version: 1;
524524
type: "plan";
525525
body: definitions["ExpandedPlanBody"];
526526
};
@@ -564,7 +564,7 @@ export interface definitions {
564564
PriceFormula: string;
565565
ExpandedProduct: {
566566
id: definitions["ID"];
567-
version: "1";
567+
version: 1;
568568
type: "product";
569569
body: definitions["ProductBody"];
570570
plans?: definitions["ExpandedPlan"][];

0 commit comments

Comments
 (0)