diff --git a/.changeset/silent-crews-grab.md b/.changeset/silent-crews-grab.md new file mode 100644 index 0000000..144e068 --- /dev/null +++ b/.changeset/silent-crews-grab.md @@ -0,0 +1,5 @@ +--- +"@opendoc/sdk": patch +--- + +当 allOf/oneOf/anyOf 与 properties 同时存在时会生成错误的代码 diff --git a/pkg/sdk/src/templates/json-schema/interface.hbs b/pkg/sdk/src/templates/json-schema/interface.hbs index dc379d3..0e1f2e8 100644 --- a/pkg/sdk/src/templates/json-schema/interface.hbs +++ b/pkg/sdk/src/templates/json-schema/interface.hbs @@ -1,6 +1,8 @@ -{{~#if (h__or jsonSchema.nullable (r__not (h__or (r__equals jsonSchema.type "object") (r__isObject jsonSchema.properties) jsonSchema.additionalProperties))) }} +{{~#if (h__or jsonSchema.nullable jsonSchema.allOf jsonSchema.oneOf jsonSchema.anyOf jsonSchema.$ref jsonSchema.enum jsonSchema.const (r__includes jsonSchema.type (r__Array "string" "number" "boolean" "integer" "array")))}} {{#if export}}export {{/if}}type {{name}} = {{> t_json_schema_shape jsonSchema}} -{{else}} +{{else if (h__or (r__equals jsonSchema.type "object") (r__isObject jsonSchema.properties) jsonSchema.additionalProperties)}} {{!-- only pure object --}} {{#if export}}export {{/if}}interface {{name}} {{> t_json_schema_shape jsonSchema}} +{{else}} +{{#if export}}export {{/if}}type {{name}} = {{> t_json_schema_shape jsonSchema}} {{/if}} diff --git a/pkg/sdk/src/templates/json-schema/shape.hbs b/pkg/sdk/src/templates/json-schema/shape.hbs index 6157c55..d61b9f4 100644 --- a/pkg/sdk/src/templates/json-schema/shape.hbs +++ b/pkg/sdk/src/templates/json-schema/shape.hbs @@ -16,14 +16,6 @@ {{~else if (r__isArray allOf)~}} {{> t_json_schema_shape__all_of}} -{{~else if (h__or (r__equals type "object") (r__isObject properties) additionalProperties)~}} -{ - {{> t_json_schema_shape__object}} -} - -{{~else if (r__equals type "array")~}} -{{> t_json_schema_shape__array}} - {{~else if (r__equals type "number")~}} number @@ -36,6 +28,14 @@ string {{~else if (r__equals type "boolean")~}} boolean +{{~else if (r__equals type "array")~}} +{{> t_json_schema_shape__array}} + +{{~else if (h__or (r__equals type "object") (r__isObject properties) additionalProperties)~}} +{ + {{> t_json_schema_shape__object}} +} + {{~else~}} any