orchid-orm-test-factory 0.3.172 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- import { AnyZodObject } from 'zod';
1
+ import { AnyZodObject, ZodTypeAny, ZodObject } from 'zod';
2
2
  import { CreateData, RelationsBase, RelationConfigDataForCreate, Query } from 'pqb';
3
3
  import { EmptyObject, ColumnShapeOutput } from 'orchid-core';
4
- import { InstanceToZod } from 'orchid-orm-schema-to-zod';
5
4
 
6
5
  type UniqueField = {
7
6
  key: string;
@@ -104,11 +103,16 @@ declare class TestFactory<Q extends Query = Query, Schema extends AnyZodObject =
104
103
  }>;
105
104
  extend<T extends this>(this: T): new () => TestFactory<Q, Schema, Type>;
106
105
  }
107
- declare const tableFactory: <T extends Query>(table: T, options?: FactoryOptions) => TestFactory<T, InstanceToZod<T>, ColumnShapeOutput<T["shape"]>>;
106
+ type TableFactory<T extends Query> = T['shape'] extends Record<string, {
107
+ inputSchema: ZodTypeAny;
108
+ }> ? TestFactory<T, ZodObject<{
109
+ [K in keyof T['shape']]: T['shape'][K]['inputSchema'];
110
+ }, 'strip'>, ColumnShapeOutput<T['shape']>> : never;
111
+ declare const tableFactory: <T extends Query>(table: T, options?: FactoryOptions) => TableFactory<T>;
108
112
  type ORMFactory<T> = {
109
113
  [K in keyof T]: T[K] extends Query & {
110
114
  definedAs: string;
111
- } ? TestFactory<T[K], InstanceToZod<T[K]>, ColumnShapeOutput<T[K]['shape']>> : never;
115
+ } ? TableFactory<T[K]> : never;
112
116
  };
113
117
  declare const ormFactory: <T>(orm: T, options?: FactoryOptions) => ORMFactory<T>;
114
118
 
package/dist/index.js CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  var zod = require('zod');
4
4
  var pqb = require('pqb');
5
- var orchidOrmSchemaToZod = require('orchid-orm-schema-to-zod');
6
5
  var zodMock = require('@anatine/zod-mock');
7
6
 
8
7
  var __defProp = Object.defineProperty;
@@ -266,7 +265,14 @@ const nowString = (/* @__PURE__ */ new Date()).toISOString();
266
265
  const maxPostgresInt = 2147483647;
267
266
  const tableFactory = (table, options) => {
268
267
  var _a, _b, _c;
269
- const schema = orchidOrmSchemaToZod.instanceToZod(table);
268
+ const shape = {};
269
+ const columns = table.shape;
270
+ for (const key in columns) {
271
+ const { inputSchema } = columns[key];
272
+ if (inputSchema)
273
+ shape[key] = inputSchema;
274
+ }
275
+ const schema = zod.z.object(shape);
270
276
  const data = {};
271
277
  const now = Date.now();
272
278
  const uniqueFields = [];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/factory.ts"],"sourcesContent":["import { AnyZodObject, ZodNullable, ZodString, ZodTypeAny } from 'zod';\nimport {\n CreateData,\n DateBaseColumn,\n IntegerBaseColumn,\n NumberBaseColumn,\n Query,\n RelationConfigDataForCreate,\n RelationsBase,\n TextBaseColumn,\n} from 'pqb';\nimport { ColumnShapeOutput, EmptyObject } from 'orchid-core';\nimport { instanceToZod, InstanceToZod } from 'orchid-orm-schema-to-zod';\nimport { generateMock } from '@anatine/zod-mock';\n\ntype UniqueField =\n | {\n key: string;\n type: 'text';\n kind?: 'email' | 'url';\n max?: number;\n length?: number;\n }\n | {\n key: string;\n type: 'number';\n gt?: number;\n gte?: number;\n };\n\ntype FactoryOptions = {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n};\n\ntype metaKey = typeof metaKey;\nconst metaKey = Symbol('meta');\n\ntype Result<\n T extends TestFactory,\n Data,\n Omitted = Omit<Data, keyof T[metaKey]['omit']>,\n> = EmptyObject extends T[metaKey]['pick']\n ? Omitted\n : Pick<\n Omitted,\n {\n [K in keyof Omitted]: K extends keyof T[metaKey]['pick'] ? K : never;\n }[keyof Omitted]\n >;\n\ntype BuildArg<T extends TestFactory> = {\n [K in keyof T[metaKey]['type']]?:\n | T[metaKey]['type'][K]\n | ((sequence: number) => T[metaKey]['type'][K]);\n} & Record<string, unknown>;\n\ntype BuildResult<T extends TestFactory, Data extends BuildArg<T>> = Result<\n T,\n BuildArg<T> extends Data\n ? T[metaKey]['type']\n : T[metaKey]['type'] & {\n [K in keyof Data]: Data[K] extends () => void\n ? ReturnType<Data[K]>\n : Data[K];\n }\n>;\n\nexport type CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType' | 'relations'> & {\n inputType: {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => T['table']['inputType'][K]);\n };\n /**\n * Allow defining async functions that create relation records and returns id\n */\n relations: MapRelations<T['table']['relations']>;\n }\n>;\n\ntype MapRelations<T extends RelationsBase> = {\n [K in keyof T]: Omit<T[K], 'relationConfig'> & {\n relationConfig: Omit<T[K]['relationConfig'], 'dataForCreate'> & {\n dataForCreate: MapDataForCreate<T[K]['relationConfig']['dataForCreate']>;\n };\n };\n};\n\ntype MapDataForCreate<T extends RelationConfigDataForCreate | undefined> =\n T extends RelationConfigDataForCreate\n ? Omit<T, 'columns'> & {\n columns: {\n [K in keyof T['columns']]:\n | T['columns'][K]\n | ((\n sequence: number,\n ) => T['columns'][K] | Promise<T['columns'][K]>);\n };\n }\n : undefined;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnShapeOutput<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Omit<T, keyof Keys> => {\n const res = { ...obj };\n Object.keys(keys).forEach((key) => {\n delete (res as unknown as Record<string, unknown>)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Pick<T, { [K in keyof T]: K extends keyof Keys ? K : never }[keyof T]> => {\n const res = {} as T;\n Object.keys(keys).forEach((key) => {\n const value = (obj as unknown as Record<string, unknown>)[key];\n if (value !== undefined) {\n (res as unknown as Record<string, unknown>)[key] = value;\n }\n });\n return res;\n};\n\nconst makeUniqueText = (sequence: number, value: string) =>\n `${sequence} ${value}`;\n\nconst makeUniqueEmail = (sequence: number, value: string) =>\n `${sequence}-${value}`;\n\nconst makeUniqueUrl = (sequence: number, value: string) =>\n value.replace('://', `://${sequence}-`);\n\nconst makeUniqueNumber = (sequence: number) => sequence;\n\nconst makeSetUniqueValues = (\n uniqueFields: UniqueField[],\n data: Record<string, unknown>,\n) => {\n type Fn = (sequence: number, value: unknown) => unknown;\n\n const dataKeys = Object.keys(data);\n\n const fns: Record<string, Fn> = {};\n for (const field of uniqueFields) {\n if (dataKeys.includes(field.key)) continue;\n\n if (field.type === 'text') {\n const getValue =\n field.kind === 'email'\n ? makeUniqueEmail\n : field.kind === 'url'\n ? makeUniqueUrl\n : makeUniqueText;\n\n let fn;\n const max = field.length ?? field.max;\n if (max !== undefined) {\n fn = (sequence: number, value: string) => {\n let result = getValue(sequence, value);\n if (result.length > max) {\n result = result.slice(0, -(result.length - max));\n }\n return result;\n };\n } else {\n fn = getValue;\n }\n fns[field.key] = fn as unknown as Fn;\n } else {\n let fn;\n const { gt, gte } = field;\n if (gt) {\n fn = (sequence: number) => sequence + gt;\n } else if (gte) {\n fn = (sequence: number) => sequence + gte - 1;\n } else {\n fn = makeUniqueNumber;\n }\n fns[field.key] = fn as unknown as Fn;\n }\n }\n\n return (record: Record<string, unknown>, sequence: number) => {\n for (const key in fns) {\n record[key] = fns[key](sequence, record[key]);\n }\n };\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n let schema = factory.schema as AnyZodObject;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n schema = schema.omit(omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n schema = schema.pick(pickValues);\n allData = pick(allData, pickValues);\n }\n\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n\n const result = generateMock(schema) as Record<string, unknown>;\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n if (typeof value === 'function') {\n result[key] = value(factory.sequence);\n } else {\n result[key] = value;\n }\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.sequence++;\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in factory.table.shape) {\n pick[key] = true;\n }\n\n factory.table.primaryKeys.forEach((key) => {\n const item = factory.table.shape[key];\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const shared: Record<string, unknown> = {};\n\n const fns: Record<string, (sequence: number) => unknown> = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as Record<string, unknown>;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n fns[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return async (arg?: CreateArg<T>) => {\n const result = Object.assign({ ...shared }, generateMock(pickedSchema));\n\n const { sequence } = factory;\n factory.sequence++;\n\n if (arg) {\n for (const key in arg) {\n if (typeof arg[key] === 'function') {\n result[key] = (arg[key] as (sequence: number) => unknown)(sequence);\n } else {\n result[key] = arg[key];\n }\n }\n } else {\n const promises: Promise<void>[] = [];\n\n for (const key in fns) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n setUniqueValues(result, sequence);\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends Query = Query,\n Schema extends AnyZodObject = AnyZodObject,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public schema: Schema,\n private uniqueFields: UniqueField[],\n private readonly data: Record<string, unknown> = {},\n options: FactoryOptions = {},\n ) {\n if (options.sequence !== undefined) {\n this.sequence = options.sequence;\n } else {\n let workerId = parseInt(process.env.JEST_WORKER_ID as string);\n if (isNaN(workerId)) workerId = 1;\n this.sequence = (workerId - 1) * (options.sequenceDistance ?? 1000) + 1;\n }\n }\n\n set<\n T extends this,\n Meta extends { type: EmptyObject },\n Data extends {\n [K in keyof Meta['type']]?: Meta['type'][K] | (() => Meta['type'][K]);\n } & Record<string, unknown>,\n >(\n this: T & { [metaKey]: Meta },\n data: Data,\n ): T & { [metaKey]: Meta & { type: Data } } {\n return Object.assign(Object.create(this), {\n data: { ...this.data, ...data },\n });\n }\n\n omit<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { omit: Keys } } {\n return Object.assign(Object.create(this), {\n omitValues: { ...this.omitValues, ...keys },\n });\n }\n\n pick<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { pick: Keys } } {\n return Object.assign(Object.create(this), {\n pickValues: { ...this.pickValues, ...keys },\n });\n }\n\n build<T extends this, Data extends BuildArg<T>>(\n this: T,\n data?: Data,\n ): BuildResult<T, Data> {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return build();\n }\n\n buildList<T extends this, Data extends BuildArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): BuildResult<T, Data>[] {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return [...Array(qty)].map(build);\n }\n\n buildMany<T extends this, Args extends BuildArg<T>[]>(\n this: T,\n ...arr: Args\n ): { [I in keyof Args]: BuildResult<T, Args[I]> } {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n );\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n return (await this.table.create(await getData())) as CreateResult<T>;\n }\n\n async createList<T extends this, Data extends CreateArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): Promise<CreateResult<T>[]> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await this.table.createMany(\n arr as CreateData<T['table']>[],\n )) as CreateResult<T>[];\n }\n\n async createMany<T extends this, Args extends CreateArg<T>[]>(\n this: T,\n ...arr: Args\n ): Promise<{ [K in keyof Args]: CreateResult<T> }> {\n const getData = processCreateData(this, this.data, this.uniqueFields);\n const data = await Promise.all(arr.map(getData));\n return (await this.table.createMany(\n data as CreateData<T['table']>[],\n )) as Promise<{\n [K in keyof Args]: CreateResult<T>;\n }>;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Schema, Type> {\n const { table, schema, uniqueFields } = this;\n\n return class extends TestFactory<Q, Schema, Type> {\n constructor() {\n super(table, schema, uniqueFields);\n }\n };\n }\n}\n\nconst nowString = new Date().toISOString();\n\nconst maxPostgresInt = 2147483647;\n\nexport const tableFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n): TestFactory<T, InstanceToZod<T>, ColumnShapeOutput<T['shape']>> => {\n const schema = instanceToZod(table);\n\n const data: Record<string, unknown> = {};\n const now = Date.now();\n\n const uniqueFields: UniqueField[] = [];\n\n for (const key in table.shape) {\n const column = table.shape[key];\n if (column instanceof DateBaseColumn) {\n if (column.data.as instanceof IntegerBaseColumn) {\n data[key] = (sequence: number) => now + sequence;\n } else if (column.parseFn?.(nowString) instanceof Date) {\n data[key] = (sequence: number) => new Date(now + sequence);\n } else {\n data[key] = (sequence: number) =>\n new Date(now + sequence).toISOString();\n }\n } else if (column instanceof TextBaseColumn) {\n const max = options?.maxTextLength ?? 1000;\n const item = schema.shape[key];\n const string = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = string._def.checks.find(\n (check) => check.kind === 'max',\n ) as { value: number } | undefined;\n\n if (!maxCheck || maxCheck.value > max) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? string.max(max).nullable()\n : string.max(max);\n }\n } else if (column instanceof IntegerBaseColumn) {\n const item = schema.shape[key];\n const num = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = num._def.checks.find((check) => check.kind === 'max') as\n | { value: number }\n | undefined;\n\n if (!maxCheck) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? num.max(maxPostgresInt).nullable()\n : num.max(maxPostgresInt);\n }\n }\n\n if (column.data.indexes?.some((index) => index.unique)) {\n if (column instanceof TextBaseColumn) {\n uniqueFields.push({\n key,\n type: 'text',\n kind: column.data.email\n ? 'email'\n : column.data.url\n ? 'url'\n : undefined,\n max: column.data.max,\n length: column.data.length,\n });\n } else if (column instanceof NumberBaseColumn) {\n uniqueFields.push({\n key,\n type: 'number',\n gt: column.data.gt,\n gte: column.data.gte,\n });\n }\n }\n }\n\n return new TestFactory<T, InstanceToZod<T>, ColumnShapeOutput<T['shape']>>(\n table,\n schema,\n uniqueFields,\n data,\n options,\n );\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends Query & { definedAs: string }\n ? TestFactory<T[K], InstanceToZod<T[K]>, ColumnShapeOutput<T[K]['shape']>>\n : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: FactoryOptions,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: Record<string, unknown> = {};\n\n for (const key in orm) {\n const table = orm[key];\n if (table && typeof table === 'object' && 'definedAs' in table) {\n Object.defineProperty(factory, key, {\n get() {\n return (defined[key] ??= tableFactory(\n table as unknown as Query,\n options,\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","generateMock","pick","instanceToZod","DateBaseColumn","IntegerBaseColumn","TextBaseColumn","ZodNullable","NumberBaseColumn"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/factory.ts"],"sourcesContent":["import {\n AnyZodObject,\n z,\n ZodNullable,\n ZodObject,\n ZodRawShape,\n ZodString,\n ZodTypeAny,\n} from 'zod';\nimport {\n CreateData,\n DateBaseColumn,\n IntegerBaseColumn,\n NumberBaseColumn,\n Query,\n RelationConfigDataForCreate,\n RelationsBase,\n TextBaseColumn,\n} from 'pqb';\nimport { ColumnShapeOutput, ColumnTypeBase, EmptyObject } from 'orchid-core';\nimport { generateMock } from '@anatine/zod-mock';\n\ntype UniqueField =\n | {\n key: string;\n type: 'text';\n kind?: 'email' | 'url';\n max?: number;\n length?: number;\n }\n | {\n key: string;\n type: 'number';\n gt?: number;\n gte?: number;\n };\n\ntype FactoryOptions = {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n};\n\ntype metaKey = typeof metaKey;\nconst metaKey = Symbol('meta');\n\ntype Result<\n T extends TestFactory,\n Data,\n Omitted = Omit<Data, keyof T[metaKey]['omit']>,\n> = EmptyObject extends T[metaKey]['pick']\n ? Omitted\n : Pick<\n Omitted,\n {\n [K in keyof Omitted]: K extends keyof T[metaKey]['pick'] ? K : never;\n }[keyof Omitted]\n >;\n\ntype BuildArg<T extends TestFactory> = {\n [K in keyof T[metaKey]['type']]?:\n | T[metaKey]['type'][K]\n | ((sequence: number) => T[metaKey]['type'][K]);\n} & Record<string, unknown>;\n\ntype BuildResult<T extends TestFactory, Data extends BuildArg<T>> = Result<\n T,\n BuildArg<T> extends Data\n ? T[metaKey]['type']\n : T[metaKey]['type'] & {\n [K in keyof Data]: Data[K] extends () => void\n ? ReturnType<Data[K]>\n : Data[K];\n }\n>;\n\nexport type CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType' | 'relations'> & {\n inputType: {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => T['table']['inputType'][K]);\n };\n /**\n * Allow defining async functions that create relation records and returns id\n */\n relations: MapRelations<T['table']['relations']>;\n }\n>;\n\ntype MapRelations<T extends RelationsBase> = {\n [K in keyof T]: Omit<T[K], 'relationConfig'> & {\n relationConfig: Omit<T[K]['relationConfig'], 'dataForCreate'> & {\n dataForCreate: MapDataForCreate<T[K]['relationConfig']['dataForCreate']>;\n };\n };\n};\n\ntype MapDataForCreate<T extends RelationConfigDataForCreate | undefined> =\n T extends RelationConfigDataForCreate\n ? Omit<T, 'columns'> & {\n columns: {\n [K in keyof T['columns']]:\n | T['columns'][K]\n | ((\n sequence: number,\n ) => T['columns'][K] | Promise<T['columns'][K]>);\n };\n }\n : undefined;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnShapeOutput<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Omit<T, keyof Keys> => {\n const res = { ...obj };\n Object.keys(keys).forEach((key) => {\n delete (res as unknown as Record<string, unknown>)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Pick<T, { [K in keyof T]: K extends keyof Keys ? K : never }[keyof T]> => {\n const res = {} as T;\n Object.keys(keys).forEach((key) => {\n const value = (obj as unknown as Record<string, unknown>)[key];\n if (value !== undefined) {\n (res as unknown as Record<string, unknown>)[key] = value;\n }\n });\n return res;\n};\n\nconst makeUniqueText = (sequence: number, value: string) =>\n `${sequence} ${value}`;\n\nconst makeUniqueEmail = (sequence: number, value: string) =>\n `${sequence}-${value}`;\n\nconst makeUniqueUrl = (sequence: number, value: string) =>\n value.replace('://', `://${sequence}-`);\n\nconst makeUniqueNumber = (sequence: number) => sequence;\n\nconst makeSetUniqueValues = (\n uniqueFields: UniqueField[],\n data: Record<string, unknown>,\n) => {\n type Fn = (sequence: number, value: unknown) => unknown;\n\n const dataKeys = Object.keys(data);\n\n const fns: Record<string, Fn> = {};\n for (const field of uniqueFields) {\n if (dataKeys.includes(field.key)) continue;\n\n if (field.type === 'text') {\n const getValue =\n field.kind === 'email'\n ? makeUniqueEmail\n : field.kind === 'url'\n ? makeUniqueUrl\n : makeUniqueText;\n\n let fn;\n const max = field.length ?? field.max;\n if (max !== undefined) {\n fn = (sequence: number, value: string) => {\n let result = getValue(sequence, value);\n if (result.length > max) {\n result = result.slice(0, -(result.length - max));\n }\n return result;\n };\n } else {\n fn = getValue;\n }\n fns[field.key] = fn as unknown as Fn;\n } else {\n let fn;\n const { gt, gte } = field;\n if (gt) {\n fn = (sequence: number) => sequence + gt;\n } else if (gte) {\n fn = (sequence: number) => sequence + gte - 1;\n } else {\n fn = makeUniqueNumber;\n }\n fns[field.key] = fn as unknown as Fn;\n }\n }\n\n return (record: Record<string, unknown>, sequence: number) => {\n for (const key in fns) {\n record[key] = fns[key](sequence, record[key]);\n }\n };\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n let schema = factory.schema as AnyZodObject;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n schema = schema.omit(omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n schema = schema.pick(pickValues);\n allData = pick(allData, pickValues);\n }\n\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n\n const result = generateMock(schema) as Record<string, unknown>;\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n if (typeof value === 'function') {\n result[key] = value(factory.sequence);\n } else {\n result[key] = value;\n }\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.sequence++;\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in factory.table.shape) {\n pick[key] = true;\n }\n\n factory.table.primaryKeys.forEach((key) => {\n const item = factory.table.shape[key] as ColumnTypeBase;\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const shared: Record<string, unknown> = {};\n\n const fns: Record<string, (sequence: number) => unknown> = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as Record<string, unknown>;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n fns[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return async (arg?: CreateArg<T>) => {\n const result = Object.assign({ ...shared }, generateMock(pickedSchema));\n\n const { sequence } = factory;\n factory.sequence++;\n\n if (arg) {\n for (const key in arg) {\n if (typeof arg[key] === 'function') {\n result[key] = (arg[key] as (sequence: number) => unknown)(sequence);\n } else {\n result[key] = arg[key];\n }\n }\n } else {\n const promises: Promise<void>[] = [];\n\n for (const key in fns) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n setUniqueValues(result, sequence);\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends Query = Query,\n Schema extends AnyZodObject = AnyZodObject,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public schema: Schema,\n private uniqueFields: UniqueField[],\n private readonly data: Record<string, unknown> = {},\n options: FactoryOptions = {},\n ) {\n if (options.sequence !== undefined) {\n this.sequence = options.sequence;\n } else {\n let workerId = parseInt(process.env.JEST_WORKER_ID as string);\n if (isNaN(workerId)) workerId = 1;\n this.sequence = (workerId - 1) * (options.sequenceDistance ?? 1000) + 1;\n }\n }\n\n set<\n T extends this,\n Meta extends { type: EmptyObject },\n Data extends {\n [K in keyof Meta['type']]?: Meta['type'][K] | (() => Meta['type'][K]);\n } & Record<string, unknown>,\n >(\n this: T & { [metaKey]: Meta },\n data: Data,\n ): T & { [metaKey]: Meta & { type: Data } } {\n return Object.assign(Object.create(this), {\n data: { ...this.data, ...data },\n });\n }\n\n omit<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { omit: Keys } } {\n return Object.assign(Object.create(this), {\n omitValues: { ...this.omitValues, ...keys },\n });\n }\n\n pick<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { pick: Keys } } {\n return Object.assign(Object.create(this), {\n pickValues: { ...this.pickValues, ...keys },\n });\n }\n\n build<T extends this, Data extends BuildArg<T>>(\n this: T,\n data?: Data,\n ): BuildResult<T, Data> {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return build();\n }\n\n buildList<T extends this, Data extends BuildArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): BuildResult<T, Data>[] {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return [...Array(qty)].map(build);\n }\n\n buildMany<T extends this, Args extends BuildArg<T>[]>(\n this: T,\n ...arr: Args\n ): { [I in keyof Args]: BuildResult<T, Args[I]> } {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n );\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n return (await this.table.create(await getData())) as CreateResult<T>;\n }\n\n async createList<T extends this, Data extends CreateArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): Promise<CreateResult<T>[]> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await this.table.createMany(\n arr as CreateData<T['table']>[],\n )) as CreateResult<T>[];\n }\n\n async createMany<T extends this, Args extends CreateArg<T>[]>(\n this: T,\n ...arr: Args\n ): Promise<{ [K in keyof Args]: CreateResult<T> }> {\n const getData = processCreateData(this, this.data, this.uniqueFields);\n const data = await Promise.all(arr.map(getData));\n return (await this.table.createMany(\n data as CreateData<T['table']>[],\n )) as Promise<{\n [K in keyof Args]: CreateResult<T>;\n }>;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Schema, Type> {\n const { table, schema, uniqueFields } = this;\n\n return class extends TestFactory<Q, Schema, Type> {\n constructor() {\n super(table, schema, uniqueFields);\n }\n };\n }\n}\n\nconst nowString = new Date().toISOString();\n\nconst maxPostgresInt = 2147483647;\n\ntype TableFactory<T extends Query> = T['shape'] extends Record<\n string,\n { inputSchema: ZodTypeAny }\n>\n ? TestFactory<\n T,\n ZodObject<\n { [K in keyof T['shape']]: T['shape'][K]['inputSchema'] },\n 'strip'\n >,\n ColumnShapeOutput<T['shape']>\n >\n : never;\n\nexport const tableFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n): TableFactory<T> => {\n const shape: ZodRawShape = {};\n const columns = table.shape;\n\n for (const key in columns) {\n const { inputSchema } = columns[key] as ColumnTypeBase;\n if (inputSchema) shape[key] = inputSchema as ZodTypeAny;\n }\n\n const schema = z.object(shape);\n\n const data: Record<string, unknown> = {};\n const now = Date.now();\n\n const uniqueFields: UniqueField[] = [];\n\n for (const key in table.shape) {\n const column = table.shape[key] as ColumnTypeBase;\n if (column instanceof DateBaseColumn) {\n if (column.data.as instanceof IntegerBaseColumn) {\n data[key] = (sequence: number) => now + sequence;\n } else if (column.parseFn?.(nowString) instanceof Date) {\n data[key] = (sequence: number) => new Date(now + sequence);\n } else {\n data[key] = (sequence: number) =>\n new Date(now + sequence).toISOString();\n }\n } else if (column instanceof TextBaseColumn) {\n const max = options?.maxTextLength ?? 1000;\n const item = schema.shape[key];\n const string = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = string._def.checks.find(\n (check) => check.kind === 'max',\n ) as { value: number } | undefined;\n\n if (!maxCheck || maxCheck.value > max) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? string.max(max).nullable()\n : string.max(max);\n }\n } else if (column instanceof IntegerBaseColumn) {\n const item = schema.shape[key];\n const num = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = num._def.checks.find((check) => check.kind === 'max') as\n | { value: number }\n | undefined;\n\n if (!maxCheck) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? num.max(maxPostgresInt).nullable()\n : num.max(maxPostgresInt);\n }\n }\n\n if (column.data.indexes?.some((index) => index.unique)) {\n if (column instanceof TextBaseColumn) {\n uniqueFields.push({\n key,\n type: 'text',\n kind: column.data.email\n ? 'email'\n : column.data.url\n ? 'url'\n : undefined,\n max: column.data.max,\n length: column.data.length,\n });\n } else if (column instanceof NumberBaseColumn) {\n uniqueFields.push({\n key,\n type: 'number',\n gt: column.data.gt,\n gte: column.data.gte,\n });\n }\n }\n }\n\n return new TestFactory(\n table,\n schema,\n uniqueFields,\n data,\n options,\n ) as TableFactory<T>;\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends Query & { definedAs: string }\n ? TableFactory<T[K]>\n : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: FactoryOptions,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: Record<string, unknown> = {};\n\n for (const key in orm) {\n const table = orm[key];\n if (table && typeof table === 'object' && 'definedAs' in table) {\n Object.defineProperty(factory, key, {\n get() {\n return (defined[key] ??= tableFactory(\n table as unknown as Query,\n options,\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","generateMock","pick","z","DateBaseColumn","IntegerBaseColumn","TextBaseColumn","ZodNullable","NumberBaseColumn"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
- import { ZodNullable } from 'zod';
1
+ import { z, ZodNullable } from 'zod';
2
2
  import { DateBaseColumn, IntegerBaseColumn, TextBaseColumn, NumberBaseColumn } from 'pqb';
3
- import { instanceToZod } from 'orchid-orm-schema-to-zod';
4
3
  import { generateMock } from '@anatine/zod-mock';
5
4
 
6
5
  var __defProp = Object.defineProperty;
@@ -264,7 +263,14 @@ const nowString = (/* @__PURE__ */ new Date()).toISOString();
264
263
  const maxPostgresInt = 2147483647;
265
264
  const tableFactory = (table, options) => {
266
265
  var _a, _b, _c;
267
- const schema = instanceToZod(table);
266
+ const shape = {};
267
+ const columns = table.shape;
268
+ for (const key in columns) {
269
+ const { inputSchema } = columns[key];
270
+ if (inputSchema)
271
+ shape[key] = inputSchema;
272
+ }
273
+ const schema = z.object(shape);
268
274
  const data = {};
269
275
  const now = Date.now();
270
276
  const uniqueFields = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/factory.ts"],"sourcesContent":["import { AnyZodObject, ZodNullable, ZodString, ZodTypeAny } from 'zod';\nimport {\n CreateData,\n DateBaseColumn,\n IntegerBaseColumn,\n NumberBaseColumn,\n Query,\n RelationConfigDataForCreate,\n RelationsBase,\n TextBaseColumn,\n} from 'pqb';\nimport { ColumnShapeOutput, EmptyObject } from 'orchid-core';\nimport { instanceToZod, InstanceToZod } from 'orchid-orm-schema-to-zod';\nimport { generateMock } from '@anatine/zod-mock';\n\ntype UniqueField =\n | {\n key: string;\n type: 'text';\n kind?: 'email' | 'url';\n max?: number;\n length?: number;\n }\n | {\n key: string;\n type: 'number';\n gt?: number;\n gte?: number;\n };\n\ntype FactoryOptions = {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n};\n\ntype metaKey = typeof metaKey;\nconst metaKey = Symbol('meta');\n\ntype Result<\n T extends TestFactory,\n Data,\n Omitted = Omit<Data, keyof T[metaKey]['omit']>,\n> = EmptyObject extends T[metaKey]['pick']\n ? Omitted\n : Pick<\n Omitted,\n {\n [K in keyof Omitted]: K extends keyof T[metaKey]['pick'] ? K : never;\n }[keyof Omitted]\n >;\n\ntype BuildArg<T extends TestFactory> = {\n [K in keyof T[metaKey]['type']]?:\n | T[metaKey]['type'][K]\n | ((sequence: number) => T[metaKey]['type'][K]);\n} & Record<string, unknown>;\n\ntype BuildResult<T extends TestFactory, Data extends BuildArg<T>> = Result<\n T,\n BuildArg<T> extends Data\n ? T[metaKey]['type']\n : T[metaKey]['type'] & {\n [K in keyof Data]: Data[K] extends () => void\n ? ReturnType<Data[K]>\n : Data[K];\n }\n>;\n\nexport type CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType' | 'relations'> & {\n inputType: {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => T['table']['inputType'][K]);\n };\n /**\n * Allow defining async functions that create relation records and returns id\n */\n relations: MapRelations<T['table']['relations']>;\n }\n>;\n\ntype MapRelations<T extends RelationsBase> = {\n [K in keyof T]: Omit<T[K], 'relationConfig'> & {\n relationConfig: Omit<T[K]['relationConfig'], 'dataForCreate'> & {\n dataForCreate: MapDataForCreate<T[K]['relationConfig']['dataForCreate']>;\n };\n };\n};\n\ntype MapDataForCreate<T extends RelationConfigDataForCreate | undefined> =\n T extends RelationConfigDataForCreate\n ? Omit<T, 'columns'> & {\n columns: {\n [K in keyof T['columns']]:\n | T['columns'][K]\n | ((\n sequence: number,\n ) => T['columns'][K] | Promise<T['columns'][K]>);\n };\n }\n : undefined;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnShapeOutput<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Omit<T, keyof Keys> => {\n const res = { ...obj };\n Object.keys(keys).forEach((key) => {\n delete (res as unknown as Record<string, unknown>)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Pick<T, { [K in keyof T]: K extends keyof Keys ? K : never }[keyof T]> => {\n const res = {} as T;\n Object.keys(keys).forEach((key) => {\n const value = (obj as unknown as Record<string, unknown>)[key];\n if (value !== undefined) {\n (res as unknown as Record<string, unknown>)[key] = value;\n }\n });\n return res;\n};\n\nconst makeUniqueText = (sequence: number, value: string) =>\n `${sequence} ${value}`;\n\nconst makeUniqueEmail = (sequence: number, value: string) =>\n `${sequence}-${value}`;\n\nconst makeUniqueUrl = (sequence: number, value: string) =>\n value.replace('://', `://${sequence}-`);\n\nconst makeUniqueNumber = (sequence: number) => sequence;\n\nconst makeSetUniqueValues = (\n uniqueFields: UniqueField[],\n data: Record<string, unknown>,\n) => {\n type Fn = (sequence: number, value: unknown) => unknown;\n\n const dataKeys = Object.keys(data);\n\n const fns: Record<string, Fn> = {};\n for (const field of uniqueFields) {\n if (dataKeys.includes(field.key)) continue;\n\n if (field.type === 'text') {\n const getValue =\n field.kind === 'email'\n ? makeUniqueEmail\n : field.kind === 'url'\n ? makeUniqueUrl\n : makeUniqueText;\n\n let fn;\n const max = field.length ?? field.max;\n if (max !== undefined) {\n fn = (sequence: number, value: string) => {\n let result = getValue(sequence, value);\n if (result.length > max) {\n result = result.slice(0, -(result.length - max));\n }\n return result;\n };\n } else {\n fn = getValue;\n }\n fns[field.key] = fn as unknown as Fn;\n } else {\n let fn;\n const { gt, gte } = field;\n if (gt) {\n fn = (sequence: number) => sequence + gt;\n } else if (gte) {\n fn = (sequence: number) => sequence + gte - 1;\n } else {\n fn = makeUniqueNumber;\n }\n fns[field.key] = fn as unknown as Fn;\n }\n }\n\n return (record: Record<string, unknown>, sequence: number) => {\n for (const key in fns) {\n record[key] = fns[key](sequence, record[key]);\n }\n };\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n let schema = factory.schema as AnyZodObject;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n schema = schema.omit(omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n schema = schema.pick(pickValues);\n allData = pick(allData, pickValues);\n }\n\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n\n const result = generateMock(schema) as Record<string, unknown>;\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n if (typeof value === 'function') {\n result[key] = value(factory.sequence);\n } else {\n result[key] = value;\n }\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.sequence++;\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in factory.table.shape) {\n pick[key] = true;\n }\n\n factory.table.primaryKeys.forEach((key) => {\n const item = factory.table.shape[key];\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const shared: Record<string, unknown> = {};\n\n const fns: Record<string, (sequence: number) => unknown> = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as Record<string, unknown>;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n fns[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return async (arg?: CreateArg<T>) => {\n const result = Object.assign({ ...shared }, generateMock(pickedSchema));\n\n const { sequence } = factory;\n factory.sequence++;\n\n if (arg) {\n for (const key in arg) {\n if (typeof arg[key] === 'function') {\n result[key] = (arg[key] as (sequence: number) => unknown)(sequence);\n } else {\n result[key] = arg[key];\n }\n }\n } else {\n const promises: Promise<void>[] = [];\n\n for (const key in fns) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n setUniqueValues(result, sequence);\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends Query = Query,\n Schema extends AnyZodObject = AnyZodObject,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public schema: Schema,\n private uniqueFields: UniqueField[],\n private readonly data: Record<string, unknown> = {},\n options: FactoryOptions = {},\n ) {\n if (options.sequence !== undefined) {\n this.sequence = options.sequence;\n } else {\n let workerId = parseInt(process.env.JEST_WORKER_ID as string);\n if (isNaN(workerId)) workerId = 1;\n this.sequence = (workerId - 1) * (options.sequenceDistance ?? 1000) + 1;\n }\n }\n\n set<\n T extends this,\n Meta extends { type: EmptyObject },\n Data extends {\n [K in keyof Meta['type']]?: Meta['type'][K] | (() => Meta['type'][K]);\n } & Record<string, unknown>,\n >(\n this: T & { [metaKey]: Meta },\n data: Data,\n ): T & { [metaKey]: Meta & { type: Data } } {\n return Object.assign(Object.create(this), {\n data: { ...this.data, ...data },\n });\n }\n\n omit<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { omit: Keys } } {\n return Object.assign(Object.create(this), {\n omitValues: { ...this.omitValues, ...keys },\n });\n }\n\n pick<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { pick: Keys } } {\n return Object.assign(Object.create(this), {\n pickValues: { ...this.pickValues, ...keys },\n });\n }\n\n build<T extends this, Data extends BuildArg<T>>(\n this: T,\n data?: Data,\n ): BuildResult<T, Data> {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return build();\n }\n\n buildList<T extends this, Data extends BuildArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): BuildResult<T, Data>[] {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return [...Array(qty)].map(build);\n }\n\n buildMany<T extends this, Args extends BuildArg<T>[]>(\n this: T,\n ...arr: Args\n ): { [I in keyof Args]: BuildResult<T, Args[I]> } {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n );\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n return (await this.table.create(await getData())) as CreateResult<T>;\n }\n\n async createList<T extends this, Data extends CreateArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): Promise<CreateResult<T>[]> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await this.table.createMany(\n arr as CreateData<T['table']>[],\n )) as CreateResult<T>[];\n }\n\n async createMany<T extends this, Args extends CreateArg<T>[]>(\n this: T,\n ...arr: Args\n ): Promise<{ [K in keyof Args]: CreateResult<T> }> {\n const getData = processCreateData(this, this.data, this.uniqueFields);\n const data = await Promise.all(arr.map(getData));\n return (await this.table.createMany(\n data as CreateData<T['table']>[],\n )) as Promise<{\n [K in keyof Args]: CreateResult<T>;\n }>;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Schema, Type> {\n const { table, schema, uniqueFields } = this;\n\n return class extends TestFactory<Q, Schema, Type> {\n constructor() {\n super(table, schema, uniqueFields);\n }\n };\n }\n}\n\nconst nowString = new Date().toISOString();\n\nconst maxPostgresInt = 2147483647;\n\nexport const tableFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n): TestFactory<T, InstanceToZod<T>, ColumnShapeOutput<T['shape']>> => {\n const schema = instanceToZod(table);\n\n const data: Record<string, unknown> = {};\n const now = Date.now();\n\n const uniqueFields: UniqueField[] = [];\n\n for (const key in table.shape) {\n const column = table.shape[key];\n if (column instanceof DateBaseColumn) {\n if (column.data.as instanceof IntegerBaseColumn) {\n data[key] = (sequence: number) => now + sequence;\n } else if (column.parseFn?.(nowString) instanceof Date) {\n data[key] = (sequence: number) => new Date(now + sequence);\n } else {\n data[key] = (sequence: number) =>\n new Date(now + sequence).toISOString();\n }\n } else if (column instanceof TextBaseColumn) {\n const max = options?.maxTextLength ?? 1000;\n const item = schema.shape[key];\n const string = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = string._def.checks.find(\n (check) => check.kind === 'max',\n ) as { value: number } | undefined;\n\n if (!maxCheck || maxCheck.value > max) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? string.max(max).nullable()\n : string.max(max);\n }\n } else if (column instanceof IntegerBaseColumn) {\n const item = schema.shape[key];\n const num = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = num._def.checks.find((check) => check.kind === 'max') as\n | { value: number }\n | undefined;\n\n if (!maxCheck) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? num.max(maxPostgresInt).nullable()\n : num.max(maxPostgresInt);\n }\n }\n\n if (column.data.indexes?.some((index) => index.unique)) {\n if (column instanceof TextBaseColumn) {\n uniqueFields.push({\n key,\n type: 'text',\n kind: column.data.email\n ? 'email'\n : column.data.url\n ? 'url'\n : undefined,\n max: column.data.max,\n length: column.data.length,\n });\n } else if (column instanceof NumberBaseColumn) {\n uniqueFields.push({\n key,\n type: 'number',\n gt: column.data.gt,\n gte: column.data.gte,\n });\n }\n }\n }\n\n return new TestFactory<T, InstanceToZod<T>, ColumnShapeOutput<T['shape']>>(\n table,\n schema,\n uniqueFields,\n data,\n options,\n );\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends Query & { definedAs: string }\n ? TestFactory<T[K], InstanceToZod<T[K]>, ColumnShapeOutput<T[K]['shape']>>\n : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: FactoryOptions,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: Record<string, unknown> = {};\n\n for (const key in orm) {\n const table = orm[key];\n if (table && typeof table === 'object' && 'definedAs' in table) {\n Object.defineProperty(factory, key, {\n get() {\n return (defined[key] ??= tableFactory(\n table as unknown as Query,\n options,\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","pick"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/factory.ts"],"sourcesContent":["import {\n AnyZodObject,\n z,\n ZodNullable,\n ZodObject,\n ZodRawShape,\n ZodString,\n ZodTypeAny,\n} from 'zod';\nimport {\n CreateData,\n DateBaseColumn,\n IntegerBaseColumn,\n NumberBaseColumn,\n Query,\n RelationConfigDataForCreate,\n RelationsBase,\n TextBaseColumn,\n} from 'pqb';\nimport { ColumnShapeOutput, ColumnTypeBase, EmptyObject } from 'orchid-core';\nimport { generateMock } from '@anatine/zod-mock';\n\ntype UniqueField =\n | {\n key: string;\n type: 'text';\n kind?: 'email' | 'url';\n max?: number;\n length?: number;\n }\n | {\n key: string;\n type: 'number';\n gt?: number;\n gte?: number;\n };\n\ntype FactoryOptions = {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n};\n\ntype metaKey = typeof metaKey;\nconst metaKey = Symbol('meta');\n\ntype Result<\n T extends TestFactory,\n Data,\n Omitted = Omit<Data, keyof T[metaKey]['omit']>,\n> = EmptyObject extends T[metaKey]['pick']\n ? Omitted\n : Pick<\n Omitted,\n {\n [K in keyof Omitted]: K extends keyof T[metaKey]['pick'] ? K : never;\n }[keyof Omitted]\n >;\n\ntype BuildArg<T extends TestFactory> = {\n [K in keyof T[metaKey]['type']]?:\n | T[metaKey]['type'][K]\n | ((sequence: number) => T[metaKey]['type'][K]);\n} & Record<string, unknown>;\n\ntype BuildResult<T extends TestFactory, Data extends BuildArg<T>> = Result<\n T,\n BuildArg<T> extends Data\n ? T[metaKey]['type']\n : T[metaKey]['type'] & {\n [K in keyof Data]: Data[K] extends () => void\n ? ReturnType<Data[K]>\n : Data[K];\n }\n>;\n\nexport type CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType' | 'relations'> & {\n inputType: {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => T['table']['inputType'][K]);\n };\n /**\n * Allow defining async functions that create relation records and returns id\n */\n relations: MapRelations<T['table']['relations']>;\n }\n>;\n\ntype MapRelations<T extends RelationsBase> = {\n [K in keyof T]: Omit<T[K], 'relationConfig'> & {\n relationConfig: Omit<T[K]['relationConfig'], 'dataForCreate'> & {\n dataForCreate: MapDataForCreate<T[K]['relationConfig']['dataForCreate']>;\n };\n };\n};\n\ntype MapDataForCreate<T extends RelationConfigDataForCreate | undefined> =\n T extends RelationConfigDataForCreate\n ? Omit<T, 'columns'> & {\n columns: {\n [K in keyof T['columns']]:\n | T['columns'][K]\n | ((\n sequence: number,\n ) => T['columns'][K] | Promise<T['columns'][K]>);\n };\n }\n : undefined;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnShapeOutput<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Omit<T, keyof Keys> => {\n const res = { ...obj };\n Object.keys(keys).forEach((key) => {\n delete (res as unknown as Record<string, unknown>)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends Record<string, unknown>>(\n obj: T,\n keys: Keys,\n): Pick<T, { [K in keyof T]: K extends keyof Keys ? K : never }[keyof T]> => {\n const res = {} as T;\n Object.keys(keys).forEach((key) => {\n const value = (obj as unknown as Record<string, unknown>)[key];\n if (value !== undefined) {\n (res as unknown as Record<string, unknown>)[key] = value;\n }\n });\n return res;\n};\n\nconst makeUniqueText = (sequence: number, value: string) =>\n `${sequence} ${value}`;\n\nconst makeUniqueEmail = (sequence: number, value: string) =>\n `${sequence}-${value}`;\n\nconst makeUniqueUrl = (sequence: number, value: string) =>\n value.replace('://', `://${sequence}-`);\n\nconst makeUniqueNumber = (sequence: number) => sequence;\n\nconst makeSetUniqueValues = (\n uniqueFields: UniqueField[],\n data: Record<string, unknown>,\n) => {\n type Fn = (sequence: number, value: unknown) => unknown;\n\n const dataKeys = Object.keys(data);\n\n const fns: Record<string, Fn> = {};\n for (const field of uniqueFields) {\n if (dataKeys.includes(field.key)) continue;\n\n if (field.type === 'text') {\n const getValue =\n field.kind === 'email'\n ? makeUniqueEmail\n : field.kind === 'url'\n ? makeUniqueUrl\n : makeUniqueText;\n\n let fn;\n const max = field.length ?? field.max;\n if (max !== undefined) {\n fn = (sequence: number, value: string) => {\n let result = getValue(sequence, value);\n if (result.length > max) {\n result = result.slice(0, -(result.length - max));\n }\n return result;\n };\n } else {\n fn = getValue;\n }\n fns[field.key] = fn as unknown as Fn;\n } else {\n let fn;\n const { gt, gte } = field;\n if (gt) {\n fn = (sequence: number) => sequence + gt;\n } else if (gte) {\n fn = (sequence: number) => sequence + gte - 1;\n } else {\n fn = makeUniqueNumber;\n }\n fns[field.key] = fn as unknown as Fn;\n }\n }\n\n return (record: Record<string, unknown>, sequence: number) => {\n for (const key in fns) {\n record[key] = fns[key](sequence, record[key]);\n }\n };\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n let schema = factory.schema as AnyZodObject;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n schema = schema.omit(omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n schema = schema.pick(pickValues);\n allData = pick(allData, pickValues);\n }\n\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n\n const result = generateMock(schema) as Record<string, unknown>;\n for (const key in data) {\n const value = (data as Record<string, unknown>)[key];\n if (typeof value === 'function') {\n result[key] = value(factory.sequence);\n } else {\n result[key] = value;\n }\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.sequence++;\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: Record<string, unknown>,\n uniqueFields: UniqueField[],\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in factory.table.shape) {\n pick[key] = true;\n }\n\n factory.table.primaryKeys.forEach((key) => {\n const item = factory.table.shape[key] as ColumnTypeBase;\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const shared: Record<string, unknown> = {};\n\n const fns: Record<string, (sequence: number) => unknown> = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as Record<string, unknown>;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n fns[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return async (arg?: CreateArg<T>) => {\n const result = Object.assign({ ...shared }, generateMock(pickedSchema));\n\n const { sequence } = factory;\n factory.sequence++;\n\n if (arg) {\n for (const key in arg) {\n if (typeof arg[key] === 'function') {\n result[key] = (arg[key] as (sequence: number) => unknown)(sequence);\n } else {\n result[key] = arg[key];\n }\n }\n } else {\n const promises: Promise<void>[] = [];\n\n for (const key in fns) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n setUniqueValues(result, sequence);\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends Query = Query,\n Schema extends AnyZodObject = AnyZodObject,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public schema: Schema,\n private uniqueFields: UniqueField[],\n private readonly data: Record<string, unknown> = {},\n options: FactoryOptions = {},\n ) {\n if (options.sequence !== undefined) {\n this.sequence = options.sequence;\n } else {\n let workerId = parseInt(process.env.JEST_WORKER_ID as string);\n if (isNaN(workerId)) workerId = 1;\n this.sequence = (workerId - 1) * (options.sequenceDistance ?? 1000) + 1;\n }\n }\n\n set<\n T extends this,\n Meta extends { type: EmptyObject },\n Data extends {\n [K in keyof Meta['type']]?: Meta['type'][K] | (() => Meta['type'][K]);\n } & Record<string, unknown>,\n >(\n this: T & { [metaKey]: Meta },\n data: Data,\n ): T & { [metaKey]: Meta & { type: Data } } {\n return Object.assign(Object.create(this), {\n data: { ...this.data, ...data },\n });\n }\n\n omit<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { omit: Keys } } {\n return Object.assign(Object.create(this), {\n omitValues: { ...this.omitValues, ...keys },\n });\n }\n\n pick<T extends this, Keys extends { [K in keyof T[metaKey]['type']]?: true }>(\n this: T,\n keys: Keys,\n ): T & { [metaKey]: T[metaKey] & { pick: Keys } } {\n return Object.assign(Object.create(this), {\n pickValues: { ...this.pickValues, ...keys },\n });\n }\n\n build<T extends this, Data extends BuildArg<T>>(\n this: T,\n data?: Data,\n ): BuildResult<T, Data> {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return build();\n }\n\n buildList<T extends this, Data extends BuildArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): BuildResult<T, Data>[] {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n data,\n );\n\n return [...Array(qty)].map(build);\n }\n\n buildMany<T extends this, Args extends BuildArg<T>[]>(\n this: T,\n ...arr: Args\n ): { [I in keyof Args]: BuildResult<T, Args[I]> } {\n const build = makeBuild(\n this,\n this.data,\n this.omitValues,\n this.pickValues,\n this.uniqueFields,\n );\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n return (await this.table.create(await getData())) as CreateResult<T>;\n }\n\n async createList<T extends this, Data extends CreateArg<T>>(\n this: T,\n qty: number,\n data?: Data,\n ): Promise<CreateResult<T>[]> {\n const getData = processCreateData(this, this.data, this.uniqueFields, data);\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await this.table.createMany(\n arr as CreateData<T['table']>[],\n )) as CreateResult<T>[];\n }\n\n async createMany<T extends this, Args extends CreateArg<T>[]>(\n this: T,\n ...arr: Args\n ): Promise<{ [K in keyof Args]: CreateResult<T> }> {\n const getData = processCreateData(this, this.data, this.uniqueFields);\n const data = await Promise.all(arr.map(getData));\n return (await this.table.createMany(\n data as CreateData<T['table']>[],\n )) as Promise<{\n [K in keyof Args]: CreateResult<T>;\n }>;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Schema, Type> {\n const { table, schema, uniqueFields } = this;\n\n return class extends TestFactory<Q, Schema, Type> {\n constructor() {\n super(table, schema, uniqueFields);\n }\n };\n }\n}\n\nconst nowString = new Date().toISOString();\n\nconst maxPostgresInt = 2147483647;\n\ntype TableFactory<T extends Query> = T['shape'] extends Record<\n string,\n { inputSchema: ZodTypeAny }\n>\n ? TestFactory<\n T,\n ZodObject<\n { [K in keyof T['shape']]: T['shape'][K]['inputSchema'] },\n 'strip'\n >,\n ColumnShapeOutput<T['shape']>\n >\n : never;\n\nexport const tableFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n): TableFactory<T> => {\n const shape: ZodRawShape = {};\n const columns = table.shape;\n\n for (const key in columns) {\n const { inputSchema } = columns[key] as ColumnTypeBase;\n if (inputSchema) shape[key] = inputSchema as ZodTypeAny;\n }\n\n const schema = z.object(shape);\n\n const data: Record<string, unknown> = {};\n const now = Date.now();\n\n const uniqueFields: UniqueField[] = [];\n\n for (const key in table.shape) {\n const column = table.shape[key] as ColumnTypeBase;\n if (column instanceof DateBaseColumn) {\n if (column.data.as instanceof IntegerBaseColumn) {\n data[key] = (sequence: number) => now + sequence;\n } else if (column.parseFn?.(nowString) instanceof Date) {\n data[key] = (sequence: number) => new Date(now + sequence);\n } else {\n data[key] = (sequence: number) =>\n new Date(now + sequence).toISOString();\n }\n } else if (column instanceof TextBaseColumn) {\n const max = options?.maxTextLength ?? 1000;\n const item = schema.shape[key];\n const string = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = string._def.checks.find(\n (check) => check.kind === 'max',\n ) as { value: number } | undefined;\n\n if (!maxCheck || maxCheck.value > max) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? string.max(max).nullable()\n : string.max(max);\n }\n } else if (column instanceof IntegerBaseColumn) {\n const item = schema.shape[key];\n const num = (\n item instanceof ZodNullable ? item.unwrap() : item\n ) as ZodString;\n\n const maxCheck = num._def.checks.find((check) => check.kind === 'max') as\n | { value: number }\n | undefined;\n\n if (!maxCheck) {\n (schema.shape as Record<string, ZodTypeAny>)[key] =\n item instanceof ZodNullable\n ? num.max(maxPostgresInt).nullable()\n : num.max(maxPostgresInt);\n }\n }\n\n if (column.data.indexes?.some((index) => index.unique)) {\n if (column instanceof TextBaseColumn) {\n uniqueFields.push({\n key,\n type: 'text',\n kind: column.data.email\n ? 'email'\n : column.data.url\n ? 'url'\n : undefined,\n max: column.data.max,\n length: column.data.length,\n });\n } else if (column instanceof NumberBaseColumn) {\n uniqueFields.push({\n key,\n type: 'number',\n gt: column.data.gt,\n gte: column.data.gte,\n });\n }\n }\n }\n\n return new TestFactory(\n table,\n schema,\n uniqueFields,\n data,\n options,\n ) as TableFactory<T>;\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends Query & { definedAs: string }\n ? TableFactory<T[K]>\n : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: FactoryOptions,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: Record<string, unknown> = {};\n\n for (const key in orm) {\n const table = orm[key];\n if (table && typeof table === 'object' && 'definedAs' in table) {\n Object.defineProperty(factory, key, {\n get() {\n return (defined[key] ??= tableFactory(\n table as unknown as Query,\n options,\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","pick"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchid-orm-test-factory",
3
- "version": "0.3.172",
3
+ "version": "0.4.0",
4
4
  "description": "Orchid ORM factories for tests",
5
5
  "homepage": "https://orchid-orm.netlify.app/guide/orm-test-factories.html",
6
6
  "repository": {
@@ -45,13 +45,13 @@
45
45
  "@anatine/zod-mock": "^3.13.3",
46
46
  "@faker-js/faker": "^8.3.1",
47
47
  "zod": "^3.22.4",
48
- "orchid-orm-schema-to-zod": "0.4.43",
49
- "pqb": "0.20.1",
50
- "orchid-core": "0.10.17"
48
+ "orchid-orm-schema-to-zod": "0.5.0",
49
+ "orchid-core": "0.11.0",
50
+ "pqb": "0.22.0"
51
51
  },
52
52
  "devDependencies": {
53
- "orchid-orm": "1.18.3",
54
- "test-utils": "0.0.3"
53
+ "orchid-orm": "1.20.0",
54
+ "test-utils": "0.1.0"
55
55
  },
56
56
  "scripts": {
57
57
  "test": "jest --watch --verbose false",