Skip to content

Commit 8fbc8ad

Browse files
committed
fix json default value zod generation
1 parent 2bdaa27 commit 8fbc8ad

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

packages/schema/src/plugins/zod/utils/schema-gen.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { getLiteral, isFromStdlib } from '@zenstackhq/sdk';
1+
import { upperCaseFirst } from '@zenstackhq/runtime/local-helpers';
2+
import { getLiteral, hasAttribute, isFromStdlib } from '@zenstackhq/sdk';
23
import {
34
DataModelField,
45
DataModelFieldAttribute,
@@ -11,7 +12,6 @@ import {
1112
isTypeDef,
1213
TypeDefField,
1314
} from '@zenstackhq/sdk/ast';
14-
import { upperCaseFirst } from '@zenstackhq/runtime/local-helpers';
1515
import { isDefaultWithAuth } from '../../enhancer/enhancer-utils';
1616

1717
export function makeFieldSchema(field: DataModelField | TypeDefField, addDefaults: boolean = true) {
@@ -235,7 +235,13 @@ export function getFieldSchemaDefault(field: DataModelField | TypeDefField) {
235235
const arg = attr.args.find((arg) => arg.$resolvedParam?.name === 'value');
236236
if (arg) {
237237
if (isStringLiteral(arg.value)) {
238-
return JSON.stringify(arg.value.value);
238+
if (field.type.type === 'Json' || hasAttribute(field, '@json')) {
239+
// JSON field can have JSON string as default value, we shouldn't
240+
// stringify it back
241+
return arg.value.value;
242+
} else {
243+
return JSON.stringify(arg.value.value);
244+
}
239245
} else if (isNumberLiteral(arg.value)) {
240246
return arg.value.value;
241247
} else if (isBooleanLiteral(arg.value)) {

packages/sdk/src/code-gen.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function createProject(options?: CompilerOptions) {
1616
noEmitOnError: true,
1717
noImplicitAny: false,
1818
skipDefaultLibCheck: true,
19-
types: [],
19+
types: ['node'],
2020
...options,
2121
},
2222
});

packages/sdk/src/utils.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,16 @@ export function indentString(string: string, count = 4): string {
132132
}
133133

134134
export function hasAttribute(
135-
decl: DataModel | TypeDef | DataModelField | Enum | EnumField | FunctionDecl | Attribute | AttributeParam,
135+
decl:
136+
| DataModel
137+
| TypeDef
138+
| DataModelField
139+
| TypeDefField
140+
| Enum
141+
| EnumField
142+
| FunctionDecl
143+
| Attribute
144+
| AttributeParam,
136145
name: string
137146
) {
138147
return !!getAttribute(decl, name);

0 commit comments

Comments
 (0)