Skip to content
This repository has been archived by the owner on May 6, 2023. It is now read-only.

Commit

Permalink
Merge pull request #107 from saiichihashimoto/blah
Browse files Browse the repository at this point in the history
fix(resolve): intermediate type for resolve
  • Loading branch information
kodiakhq[bot] authored Jul 9, 2022
2 parents 83739f6 + 5bd4dbd commit 579dfee
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 99 deletions.
3 changes: 2 additions & 1 deletion src/array/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ export const array = <
z.input<Zod>,
ParsedValue,
ResolvedValue,
z.output<Zod>
z.output<Zod>,
z.output<ZodResolved>
>,
{
length?: number;
Expand Down
38 changes: 20 additions & 18 deletions src/document/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,11 @@ export const document = <
Zod extends z.ZodObject<
Merge<FieldsZodObject<FieldsArray>, ExtraZodFields<DocumentName>>
>,
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<
z.ZodObject<
Merge<FieldsZodResolvedObject<FieldsArray>, ExtraZodFields<DocumentName>>
>
ZodResolved extends z.ZodObject<
Merge<FieldsZodResolvedObject<FieldsArray>, ExtraZodFields<DocumentName>>
>,
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<ZodResolved>,
// eslint-disable-next-line @typescript-eslint/ban-types -- All other values assume keys
Select extends Record<string, string> = {}
>({
Expand All @@ -122,31 +121,24 @@ export const document = <
},
zod: zodFn = (zod) =>
zod as unknown as z.ZodType<ParsedValue, any, z.input<Zod>>,
zodResolved = () =>
z.object({
...fieldsZodResolvedObject(fields),
...extraZodFields(name),
}) as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
zodResolved = (zod) =>
zod as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
...def
}: Merge<
SanityNamedTypeDef<
Schema.DocumentDefinition,
z.input<Zod>,
ParsedValue,
ResolvedValue,
z.output<Zod>
z.output<Zod>,
z.output<ZodResolved>
>,
{
fields: FieldsArray;
name: DocumentName;
preview?: Preview<z.input<Zod>, Select>;
}
>): DocumentType<DocumentName, z.input<Zod>, ParsedValue, ResolvedValue> => {
const zod = z.object({
...fieldsZodObject(fields),
...extraZodFields(name),
}) as unknown as Zod;

/* eslint-disable fp/no-let -- Need side effects */
let counter = 0;
let mocks: Array<z.input<Zod>> = [];
Expand Down Expand Up @@ -184,8 +176,18 @@ export const document = <
name,
type: "document",
}),
zod: zodFn(zod),
zodResolved: zodResolved(zod),
zod: zodFn(
z.object({
...fieldsZodObject(fields),
...extraZodFields(name),
}) as unknown as Zod
),
zodResolved: zodResolved(
z.object({
...fieldsZodResolvedObject(fields),
...extraZodFields(name),
}) as unknown as z.ZodType<z.output<ZodResolved>, any, z.input<Zod>>
),
}),
};
};
44 changes: 23 additions & 21 deletions src/file/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,16 @@ export const file = <
typeof extraZodFields
>
>,
ZodResolved extends z.ZodObject<
// eslint-disable-next-line no-use-before-define -- ZodResolved can't be optional, but FieldsArray has to be
Merge<FieldsZodResolvedObject<FieldsArray>, typeof extraZodFields>
>,
FieldsArray extends readonly [
FieldOptions<Names, Zods, ResolvedValues, Optionals>,
...Array<FieldOptions<Names, Zods, ResolvedValues, Optionals>>
] = [never, ...never],
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<
z.ZodObject<
Merge<FieldsZodResolvedObject<FieldsArray>, typeof extraZodFields>
>
>
ResolvedValue = z.output<ZodResolved>
>({
fields,
mock = (faker, path) =>
Expand All @@ -64,37 +64,39 @@ export const file = <
} as unknown as z.input<Zod>),
zod: zodFn = (zod) =>
zod as unknown as z.ZodType<ParsedValue, any, z.input<Zod>>,
zodResolved = () =>
z.object({
...(fields && fieldsZodResolvedObject(fields)),
...extraZodFields,
}) as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
zodResolved = (zod) =>
zod as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
...def
}: Merge<
SanityTypeDef<
Schema.FileDefinition,
z.input<Zod>,
ParsedValue,
ResolvedValue,
z.output<Zod>
z.output<Zod>,
z.output<ZodResolved>
>,
{
fields?: FieldsArray;
}
> = {}) => {
const zod = z.object({
...(fields && fieldsZodObject(fields)),
...extraZodFields,
}) as unknown as Zod;

return createType({
> = {}) =>
createType({
mock,
schema: () => ({
...def,
...(fields && fieldsSchema(fields)),
type: "file",
}),
zod: zodFn(zod),
zodResolved: zodResolved(zod),
zod: zodFn(
z.object({
...(fields && fieldsZodObject(fields)),
...extraZodFields,
}) as unknown as Zod
),
zodResolved: zodResolved(
z.object({
...(fields && fieldsZodResolvedObject(fields)),
...extraZodFields,
}) as unknown as z.ZodType<z.output<ZodResolved>, any, z.input<Zod>>
),
});
};
48 changes: 27 additions & 21 deletions src/image/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,17 +102,21 @@ export const image = <
ExtraZodFields<Hotspot>
>
>,
ZodResolved extends z.ZodObject<
Merge<
// eslint-disable-next-line no-use-before-define -- Zod can't be optional, but FieldsArray has to be
FieldsZodResolvedObject<FieldsArray>,
// eslint-disable-next-line no-use-before-define -- Zod can't be optional, but Hotspot has to be
ExtraZodFields<Hotspot>
>
>,
FieldsArray extends readonly [
FieldOptions<Names, Zods, ResolvedValues, Optionals>,
...Array<FieldOptions<Names, Zods, ResolvedValues, Optionals>>
] = [never, ...never],
Hotspot extends boolean = false,
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<
z.ZodObject<
Merge<FieldsZodResolvedObject<FieldsArray>, ExtraZodFields<Hotspot>>
>
>
ResolvedValue = z.output<ZodResolved>
>({
hotspot,
fields,
Expand Down Expand Up @@ -158,11 +162,8 @@ export const image = <
} as unknown as z.input<Zod>),
zod: zodFn = (zod) =>
zod as unknown as z.ZodType<ParsedValue, any, z.input<Zod>>,
zodResolved = () =>
z.object({
...(fields && fieldsZodResolvedObject(fields)),
...extraZodFields(hotspot),
}) as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
zodResolved = (zod) =>
zod as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
...def
}: Merge<
Omit<
Expand All @@ -171,7 +172,8 @@ export const image = <
z.input<Zod>,
ParsedValue,
ResolvedValue,
z.output<Zod>
z.output<Zod>,
z.output<ZodResolved>
>,
// "title" and "description" actually show up in the UI
"name" | "preview"
Expand All @@ -180,20 +182,24 @@ export const image = <
fields?: FieldsArray;
hotspot?: Hotspot;
}
> = {}) => {
const zod = z.object({
...(fields && fieldsZodObject(fields)),
...extraZodFields(hotspot),
}) as unknown as Zod;

return createType({
> = {}) =>
createType({
mock,
schema: () => ({
...def,
...(fields && fieldsSchema(fields)),
type: "image",
}),
zod: zodFn(zod),
zodResolved: zodResolved(zod),
zod: zodFn(
z.object({
...(fields && fieldsZodObject(fields)),
...extraZodFields(hotspot),
}) as unknown as Zod
),
zodResolved: zodResolved(
z.object({
...(fields && fieldsZodResolvedObject(fields)),
...extraZodFields(hotspot),
}) as unknown as z.ZodType<z.output<ZodResolved>, any, z.input<Zod>>
),
});
};
31 changes: 16 additions & 15 deletions src/object/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ export const object = <
...Array<FieldOptions<Names, Zods, ResolvedValues, Optionals>>
],
Zod extends z.ZodObject<FieldsZodObject<FieldsArray>>,
ZodResolved extends z.ZodObject<FieldsZodResolvedObject<FieldsArray>>,
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<z.ZodObject<FieldsZodResolvedObject<FieldsArray>>>,
ResolvedValue = z.output<ZodResolved>,
// eslint-disable-next-line @typescript-eslint/ban-types -- All other values assume keys
Select extends Record<string, string> = {}
>({
Expand All @@ -38,36 +39,36 @@ export const object = <
mock = fieldsMock(fields),
zod: zodFn = (zod) =>
zod as unknown as z.ZodType<ParsedValue, any, z.input<Zod>>,
zodResolved = () =>
z.object(fieldsZodResolvedObject(fields)) as unknown as z.ZodType<
ResolvedValue,
any,
z.input<Zod>
>,
zodResolved = (zod) =>
zod as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
...def
}: Merge<
SanityTypeDef<
Schema.ObjectDefinition,
z.input<Zod>,
ParsedValue,
ResolvedValue,
z.output<Zod>
z.output<Zod>,
z.output<ZodResolved>
>,
{
fields: FieldsArray;
preview?: Preview<z.input<Zod>, Select>;
}
>) => {
const zod = z.object(fieldsZodObject(fields)) as Zod;

return createType({
>) =>
createType({
mock,
schema: () => ({
...def,
...fieldsSchema(fields, previewDef),
type: "object",
}),
zod: zodFn(zod),
zodResolved: zodResolved(zod),
zod: zodFn(z.object(fieldsZodObject(fields)) as Zod),
zodResolved: zodResolved(
z.object(fieldsZodResolvedObject(fields)) as unknown as z.ZodType<
z.output<ZodResolved>,
any,
z.input<Zod>
>
),
});
};
38 changes: 20 additions & 18 deletions src/objectNamed/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@ export const objectNamed = <
Zod extends z.ZodObject<
Merge<FieldsZodObject<FieldsArray>, ExtraZodFields<ObjectNames>>
>,
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<
z.ZodObject<
Merge<FieldsZodResolvedObject<FieldsArray>, ExtraZodFields<ObjectNames>>
>
ZodResolved extends z.ZodObject<
Merge<FieldsZodResolvedObject<FieldsArray>, ExtraZodFields<ObjectNames>>
>,
ParsedValue = z.output<Zod>,
ResolvedValue = z.output<ZodResolved>,
// eslint-disable-next-line @typescript-eslint/ban-types -- All other values assume keys
Select extends Record<string, string> = {}
>({
Expand All @@ -54,35 +53,38 @@ export const objectNamed = <
} as unknown as z.input<Zod>),
zod: zodFn = (zod) =>
zod as unknown as z.ZodType<ParsedValue, any, z.input<Zod>>,
zodResolved = () =>
z.object({
...fieldsZodResolvedObject(fields),
_type: z.literal(name),
}) as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
zodResolved = (zod) =>
zod as unknown as z.ZodType<ResolvedValue, any, z.input<Zod>>,
...def
}: Merge<
SanityNamedTypeDef<
Schema.ObjectDefinition,
z.input<Zod>,
ParsedValue,
ResolvedValue,
z.output<Zod>
z.output<Zod>,
z.output<ZodResolved>
>,
{
fields: FieldsArray;
name: ObjectNames;
preview?: Preview<z.input<Zod>, Select>;
}
>) => {
const zod = z.object({
...fieldsZodObject(fields),
_type: z.literal(name),
}) as unknown as Zod;

const typeDef = {
mock,
zod: zodFn(zod),
zodResolved: zodResolved(zod),
zod: zodFn(
z.object({
...fieldsZodObject(fields),
_type: z.literal(name),
}) as unknown as Zod
),
zodResolved: zodResolved(
z.object({
...fieldsZodResolvedObject(fields),
_type: z.literal(name),
}) as unknown as z.ZodType<z.output<ZodResolved>, any, z.input<Zod>>
),
};

return {
Expand Down
Loading

0 comments on commit 579dfee

Please sign in to comment.