Skip to content

Commit 51f634d

Browse files
committed
refactor(models): restructure recursive types to prevent weird compiler errors
1 parent 49ab990 commit 51f634d

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

packages/models/src/lib/tree.ts

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@ const basicTreeNodeDataSchema = z.object({
1212
.describe('Additional values for node'),
1313
});
1414

15-
export const basicTreeNodeSchema = basicTreeNodeDataSchema.extend({
16-
get children() {
17-
return z
18-
.array(basicTreeNodeSchema)
19-
.optional()
20-
.describe('Direct descendants of this node (omit if leaf)');
21-
},
22-
});
23-
export type BasicTreeNode = z.infer<typeof basicTreeNodeSchema>;
15+
export const basicTreeNodeSchema: z.ZodType<BasicTreeNode> =
16+
basicTreeNodeDataSchema.extend({
17+
get children() {
18+
return z
19+
.array(basicTreeNodeSchema)
20+
.optional()
21+
.describe('Direct descendants of this node (omit if leaf)');
22+
},
23+
});
24+
export type BasicTreeNode = z.infer<typeof basicTreeNodeDataSchema> & {
25+
children?: BasicTreeNode[];
26+
};
2427

2528
export const coverageTreeMissingLOCSchema = filePositionSchema
2629
.extend({
@@ -48,15 +51,18 @@ const coverageTreeNodeDataSchema = z.object({
4851
),
4952
});
5053

51-
export const coverageTreeNodeSchema = coverageTreeNodeDataSchema.extend({
52-
get children() {
53-
return z
54-
.array(coverageTreeNodeSchema)
55-
.optional()
56-
.describe('Files and folders contained in this folder (omit if file)');
57-
},
58-
});
59-
export type CoverageTreeNode = z.infer<typeof coverageTreeNodeSchema>;
54+
export const coverageTreeNodeSchema: z.ZodType<CoverageTreeNode> =
55+
coverageTreeNodeDataSchema.extend({
56+
get children() {
57+
return z
58+
.array(coverageTreeNodeSchema)
59+
.optional()
60+
.describe('Files and folders contained in this folder (omit if file)');
61+
},
62+
});
63+
export type CoverageTreeNode = z.infer<typeof coverageTreeNodeDataSchema> & {
64+
children?: CoverageTreeNode[];
65+
};
6066

6167
export const basicTreeSchema = z
6268
.object({

0 commit comments

Comments
 (0)