UNPKG

@sanity-typed/faker

Version:
191 lines (187 loc) 11.9 kB
import * as type_fest_source_is_literal from 'type-fest/source/is-literal'; import { Faker } from '@faker-js/faker'; import { InferSchemaValues } from '@sanity-typed/types'; import { DefinitionBase, ArrayMemberDefinition, FieldDefinition, TypeDefinition, ConfigBase } from '@sanity-typed/types/src/internal'; type Negate<T> = T extends true ? false : true; type IsPlainObject<T> = T extends any[] ? false : T extends object ? true : false; type MaybeArray<T> = T | T[]; type SchemaTypeDefinition<TType extends string, TNumberValue extends number, TStringValue extends string, TReferenced extends string, TReferenceWeak extends boolean, TBlockStyle extends string, TBlockListItem extends string, TBlockMarkDecorator extends string, TBlockMarkAnnotation extends DefinitionBase<any, any, any> & { name?: string; }, THotspot extends boolean> = ArrayMemberDefinition<TType, any, any, any, TNumberValue, TStringValue, TReferenced, TReferenceWeak, TBlockStyle, TBlockListItem, TBlockMarkDecorator, TBlockMarkAnnotation, THotspot, any, any, any> | FieldDefinition<TType, any, any, any, TNumberValue, TStringValue, TReferenced, TReferenceWeak, TBlockStyle, TBlockListItem, TBlockMarkDecorator, TBlockMarkAnnotation, THotspot, any, any, any> | TypeDefinition<TType, any, any, any, TNumberValue, TStringValue, TReferenced, TReferenceWeak, TBlockStyle, TBlockListItem, TBlockMarkDecorator, TBlockMarkAnnotation, THotspot, any, any>; type FakerOptions = ConstructorParameters<typeof Faker>[0]; declare const instantiateFaker: (options: FakerOptions, seed: number) => (path: string) => <Fn extends (faker: Faker, index: number) => any>(fn: Fn) => (index: number) => ReturnType<Fn>; declare const instantiateFakerT: <Fn extends (faker: Faker, index: number) => any>(options: FakerOptions, seed: number, path: string, fn: Fn) => (index: number) => ReturnType<Fn>; declare const addTypeT: <const Type extends string | undefined, Fn extends (...args: any[]) => any>(type: Type, fn: Fn) => (...args: Parameters<Fn>) => Negate<type_fest_source_is_literal.LiteralCheck<Type, string>> extends infer T ? T extends Negate<type_fest_source_is_literal.LiteralCheck<Type, string>> ? T extends true ? ReturnType<Fn> : IsPlainObject<ReturnType<Fn>> extends infer T_1 ? T_1 extends IsPlainObject<ReturnType<Fn>> ? T_1 extends true ? Omit<ReturnType<Fn>, "_type"> & { _type: Type; } : ReturnType<Fn> : never : never : never : never; type SchemaTypeToFaker<TSchemaType extends SchemaTypeDefinition<any, any, any, any, any, any, any, any, any, any>, TAliasedFakers extends { [name: string]: (index: number) => any; }> = ReturnType<typeof instantiateFakerT<TSchemaType["type"] extends keyof typeof constantFakers ? (typeof constantFakers)[TSchemaType["type"]] : TSchemaType["type"] extends "date" ? ReturnType<typeof dateFaker<Extract<TSchemaType, SchemaTypeDefinition<"date", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "datetime" ? ReturnType<typeof datetimeFaker<Extract<TSchemaType, SchemaTypeDefinition<"datetime", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "number" ? ReturnType<typeof numberFaker<Extract<TSchemaType, SchemaTypeDefinition<"number", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "reference" ? ReturnType<typeof referenceFaker<Extract<TSchemaType, SchemaTypeDefinition<"reference", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "string" ? ReturnType<typeof stringFaker<Extract<TSchemaType, SchemaTypeDefinition<"string", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "text" ? ReturnType<typeof textFaker<Extract<TSchemaType, SchemaTypeDefinition<"text", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "url" ? ReturnType<typeof urlFaker<Extract<TSchemaType, SchemaTypeDefinition<"url", any, any, any, any, any, any, any, any, any>>>> : TSchemaType["type"] extends "array" ? ReturnType<typeof arrayFaker<Extract<TSchemaType, SchemaTypeDefinition<"array", any, any, any, any, any, any, any, any, any>>, TAliasedFakers>> : TSchemaType["type"] extends "block" ? ReturnType<typeof blockFaker<Extract<TSchemaType, SchemaTypeDefinition<"block", any, any, any, any, any, any, any, any, any>>, TAliasedFakers>> : TSchemaType["type"] extends "object" ? ReturnType<typeof objectFaker<Extract<TSchemaType, SchemaTypeDefinition<"object", any, any, any, any, any, any, any, any, any>>, TAliasedFakers>> : TSchemaType["type"] extends "document" ? ReturnType<typeof documentFaker<Extract<TSchemaType, SchemaTypeDefinition<"document", any, any, any, any, any, any, any, any, any>>, TAliasedFakers>> : TSchemaType["type"] extends "file" ? ReturnType<typeof fileFaker<Extract<TSchemaType, SchemaTypeDefinition<"file", any, any, any, any, any, any, any, any, any>>, TAliasedFakers>> : TSchemaType["type"] extends "image" ? ReturnType<typeof imageFaker<Extract<TSchemaType, SchemaTypeDefinition<"image", any, any, any, any, any, any, any, any, any>>, TAliasedFakers>> : ReturnType<typeof aliasFaker<TSchemaType, TAliasedFakers>>>>; declare const customFaker: <TSchemaType extends SchemaTypeDefinition<any, any, any, any, any, any, any, any, any, any>>(schemaType: TSchemaType, fakerFn: (faker: Faker, previous: ReturnType<SchemaTypeToFaker<TSchemaType, { [name: string]: (index: number) => any; }>>, index: number) => ReturnType<SchemaTypeToFaker<TSchemaType, { [name: string]: (index: number) => any; }>>) => TSchemaType; declare const implicitDocumentFakers: (instantiateFakerByPath: ReturnType<typeof instantiateFaker>, documentIdFaker: (type: string | undefined) => (index: number) => string) => { "sanity.fileAsset": (index: number) => { _type: "sanity.fileAsset"; metadata: { [key: string]: unknown; }; _createdAt: string; _id: string; _rev: string; _updatedAt: string; source?: { url?: string | undefined; id: string; name: string; } | undefined; title?: string | undefined; originalFilename?: string | undefined; label?: string | undefined; description?: string | undefined; creditLine?: string | undefined; extension: string; mimeType: string; path: string; assetId: string; sha1hash: string; size: number; url: string; }; "sanity.imageAsset": (index: number) => { _type: "sanity.imageAsset"; url: string; metadata: { palette?: { vibrant?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; muted?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; lightVibrant?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; lightMuted?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; dominant?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; darkVibrant?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; darkMuted?: { title?: string | undefined; _type: "sanity.imagePaletteSwatch"; background: string; foreground: string; population: number; } | undefined; _type: "sanity.imagePalette"; } | undefined; lqip?: string | undefined; location?: { alt?: number | undefined; _type: "geopoint"; lat: number; lng: number; } | undefined; exif?: ({ _type: "sanity.imageExifMetadata"; } & { [key: string]: unknown; }) | undefined; blurHash?: string | undefined; _type: "sanity.imageMetadata"; hasAlpha: boolean; isOpaque: boolean; dimensions: { height: number; width: number; _type: "sanity.imageDimensions"; aspectRatio: number; }; } & { [key: string]: unknown; }; _createdAt: string; _id: string; _rev: string; _updatedAt: string; source?: { url?: string | undefined; id: string; name: string; } | undefined; title?: string | undefined; originalFilename?: string | undefined; label?: string | undefined; description?: string | undefined; creditLine?: string | undefined; extension: string; mimeType: string; path: string; assetId: string; sha1hash: string; size: number; }; }; type SanityConfigFakers<TConfig extends MaybeArray<ConfigBase<any, any>>> = TConfig extends MaybeArray<ConfigBase<infer TTypeDefinition, infer TPluginOptions>> ? ReturnType<typeof implicitDocumentFakers> & { [TType in TTypeDefinition as TType["name"]]: ReturnType<typeof addTypeT<TType["name"], SchemaTypeToFaker<TType, SanityConfigFakers<TConfig> & SanityConfigFakers<TPluginOptions>>>>; } : never; declare const counter: <Fn extends (index: number) => any>(fn: Fn) => () => ReturnType<Fn>; declare const sanityConfigToFakerTyped: <const TConfig extends ConfigBase<any, any>>(config: TConfig, { faker, referencedChunkSize, seed, }: { faker: FakerOptions; referencedChunkSize?: number; seed?: number; }) => { [type in keyof SanityConfigFakers<TConfig>]: ReturnType<typeof counter<SanityConfigFakers<TConfig>[type]>>; }; declare const sanityConfigToFaker: <const TConfig extends ConfigBase<any, any>>(config: TConfig, args_1: { faker: FakerOptions; referencedChunkSize?: number; seed?: number; }) => { [TType in keyof InferSchemaValues<TConfig>]: () => InferSchemaValues<TConfig>[TType]; }; declare const sanityDocumentsFaker: <const TConfig extends ConfigBase<any, any>, Fakers extends { [type: string]: () => any; }>(config: TConfig, fakers: Fakers, { referencedChunkSize }?: { referencedChunkSize?: number; }) => () => ReturnType<Pick<Fakers, Extract<InferSchemaValues<TConfig>[keyof InferSchemaValues<TConfig>], { _createdAt: string; _id: string; _rev: string; _updatedAt: string; _type: string; }>["_type"] & keyof Fakers>[Extract<InferSchemaValues<TConfig>[keyof InferSchemaValues<TConfig>], { _createdAt: string; _id: string; _rev: string; _updatedAt: string; _type: string; }>["_type"] & keyof Fakers]>[]; export { customFaker, sanityConfigToFaker, sanityConfigToFakerTyped, sanityDocumentsFaker };