orchid-orm-test-factory 0.3.60 → 0.3.61

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
@@ -78,10 +78,22 @@ declare class TestFactory<Q extends Query = Query, Schema extends AnyZodObject =
78
78
  };
79
79
  build<T extends this, Data extends BuildArg<T>>(this: T, data?: Data): BuildResult<T, Data>;
80
80
  buildList<T extends this, Data extends BuildArg<T>>(this: T, qty: number, data?: Data): BuildResult<T, Data>[];
81
+ buildMany<T extends this, Args extends BuildArg<T>[]>(this: T, ...arr: Args): {
82
+ [I in keyof Args]: BuildResult<T, Args[I]>;
83
+ };
81
84
  create<T extends this, Data extends CreateArg<T>>(this: T, data?: Data): Promise<CreateResult<T>>;
82
85
  createList<T extends this, Data extends CreateArg<T>>(this: T, qty: number, data?: Data): Promise<CreateResult<T>[]>;
86
+ createMany<T extends this, Args extends CreateArg<T>[]>(this: T, ...arr: Args): Promise<{
87
+ [K in keyof Args]: CreateResult<T>;
88
+ }>;
83
89
  extend<T extends this>(this: T): new () => TestFactory<Q, Schema, Type>;
84
90
  }
85
- declare const createFactory: <T extends Query>(table: T, options?: FactoryOptions) => TestFactory<T, InstanceToZod<T>, T["type"]>;
91
+ declare const tableFactory: <T extends Query>(table: T, options?: FactoryOptions) => TestFactory<T, InstanceToZod<T>, T["type"]>;
92
+ type ORMFactory<T> = {
93
+ [K in keyof T]: T[K] extends Query & {
94
+ definedAs: string;
95
+ } ? TestFactory<T[K], InstanceToZod<T[K]>, T[K]['type']> : never;
96
+ };
97
+ declare const ormFactory: <T>(orm: T, options?: FactoryOptions) => ORMFactory<T>;
86
98
 
87
- export { TestFactory, createFactory };
99
+ export { TestFactory, ormFactory, tableFactory };
package/dist/index.js CHANGED
@@ -96,10 +96,11 @@ const makeBuild = (factory, data, omitValues, pickValues, uniqueFields, arg) =>
96
96
  allData = pick(allData, pickValues);
97
97
  }
98
98
  const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);
99
- return () => {
99
+ return (arg2) => {
100
+ const data2 = arg2 ? __spreadValues(__spreadValues({}, allData), arg2) : allData;
100
101
  const result = zodMock.generateMock(schema);
101
- for (const key in allData) {
102
- const value = allData[key];
102
+ for (const key in data2) {
103
+ const value = data2[key];
103
104
  if (typeof value === "function") {
104
105
  result[key] = value(factory.sequence);
105
106
  } else {
@@ -136,10 +137,22 @@ const processCreateData = (factory, data, uniqueFields, arg) => {
136
137
  }
137
138
  const pickedSchema = factory.schema.pick(pick2);
138
139
  const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);
139
- return () => {
140
+ return (arg2) => {
140
141
  Object.assign(result, zodMock.generateMock(pickedSchema));
141
- for (const key in fns) {
142
- result[key] = fns[key](factory.sequence);
142
+ if (arg2) {
143
+ for (const key in arg2) {
144
+ if (typeof arg2[key] === "function") {
145
+ result[key] = arg2[key](
146
+ factory.sequence
147
+ );
148
+ } else {
149
+ result[key] = arg2[key];
150
+ }
151
+ }
152
+ } else {
153
+ for (const key in fns) {
154
+ result[key] = fns[key](factory.sequence);
155
+ }
143
156
  }
144
157
  setUniqueValues(result, factory.sequence);
145
158
  factory.sequence++;
@@ -201,15 +214,30 @@ const _TestFactory = class {
201
214
  );
202
215
  return [...Array(qty)].map(build);
203
216
  }
217
+ buildMany(...arr) {
218
+ const build = makeBuild(
219
+ this,
220
+ this.data,
221
+ this.omitValues,
222
+ this.pickValues,
223
+ this.uniqueFields
224
+ );
225
+ return arr.map(build);
226
+ }
204
227
  async create(data) {
205
228
  const getData = processCreateData(this, this.data, this.uniqueFields, data);
206
229
  return await this.table.create(getData());
207
230
  }
208
231
  async createList(qty, data) {
209
232
  const getData = processCreateData(this, this.data, this.uniqueFields, data);
210
- const arr = [...Array(qty)].map(getData);
233
+ const arr = [...Array(qty)].map(() => getData());
211
234
  return await this.table.createMany(arr);
212
235
  }
236
+ async createMany(...arr) {
237
+ const getData = processCreateData(this, this.data, this.uniqueFields);
238
+ const data = arr.map(getData);
239
+ return await this.table.createMany(data);
240
+ }
213
241
  extend() {
214
242
  const { table, schema, uniqueFields } = this;
215
243
  return class extends _TestFactory {
@@ -221,7 +249,7 @@ const _TestFactory = class {
221
249
  };
222
250
  let TestFactory = _TestFactory;
223
251
  const nowString = (/* @__PURE__ */ new Date()).toISOString();
224
- const createFactory = (table, options) => {
252
+ const tableFactory = (table, options) => {
225
253
  var _a, _b, _c;
226
254
  const schema = orchidOrmSchemaToZod.instanceToZod(table);
227
255
  const data = {};
@@ -275,7 +303,27 @@ const createFactory = (table, options) => {
275
303
  options
276
304
  );
277
305
  };
306
+ const ormFactory = (orm, options) => {
307
+ const factory = {};
308
+ const defined = {};
309
+ for (const key in orm) {
310
+ const table = orm[key];
311
+ if (table && typeof table === "object" && "definedAs" in table) {
312
+ Object.defineProperty(factory, key, {
313
+ get() {
314
+ var _a;
315
+ return (_a = defined[key]) != null ? _a : defined[key] = tableFactory(
316
+ table,
317
+ options
318
+ );
319
+ }
320
+ });
321
+ }
322
+ }
323
+ return factory;
324
+ };
278
325
 
279
326
  exports.TestFactory = TestFactory;
280
- exports.createFactory = createFactory;
327
+ exports.ormFactory = ormFactory;
328
+ exports.tableFactory = tableFactory;
281
329
  //# sourceMappingURL=index.js.map
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 TextBaseColumn,\n} from 'pqb';\nimport { 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\ntype CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType'> & {\n inputType: {\n [K in keyof T['table']['type']]?:\n | T['table']['type'][K]\n | ((sequence: number) => T['table']['type'][K]);\n };\n }\n>;\n\ntype CreateResult<T extends TestFactory> = Result<T, T['table']['type']>;\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 () => {\n const result = generateMock(schema) as Record<string, unknown>;\n for (const key in allData) {\n const value = (allData 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 (item.data.identity || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const result: 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 result[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return () => {\n Object.assign(result, generateMock(pickedSchema));\n\n for (const key in fns) {\n result[key] = fns[key](factory.sequence);\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.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 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(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 = [...Array(qty)].map(getData);\n return (await this.table.createMany(arr)) as CreateResult<T>[];\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\nexport const createFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n) => {\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 }\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>, T['type']>(\n table,\n schema,\n uniqueFields,\n data,\n options,\n );\n};\n"],"names":["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 { AnyZodObject, ZodNullable, ZodString, ZodTypeAny } from 'zod';\nimport {\n CreateData,\n DateBaseColumn,\n IntegerBaseColumn,\n NumberBaseColumn,\n Query,\n TextBaseColumn,\n} from 'pqb';\nimport { 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\ntype CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType'> & {\n inputType: {\n [K in keyof T['table']['type']]?:\n | T['table']['type'][K]\n | ((sequence: number) => T['table']['type'][K]);\n };\n }\n>;\n\ntype CreateResult<T extends TestFactory> = Result<T, T['table']['type']>;\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 (item.data.identity || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const result: 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 result[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return (arg?: CreateArg<T>) => {\n Object.assign(result, generateMock(pickedSchema));\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)(\n factory.sequence,\n );\n } else {\n result[key] = arg[key];\n }\n }\n } else {\n for (const key in fns) {\n result[key] = fns[key](factory.sequence);\n }\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.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(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 = [...Array(qty)].map(() => getData());\n return (await this.table.createMany(arr)) 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 = arr.map(getData);\n return (await this.table.createMany(data)) 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\nexport const tableFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n): TestFactory<T, InstanceToZod<T>, T['type']> => {\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 }\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>, T['type']>(\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]>, T[K]['type']>\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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"}
package/dist/index.mjs CHANGED
@@ -94,10 +94,11 @@ const makeBuild = (factory, data, omitValues, pickValues, uniqueFields, arg) =>
94
94
  allData = pick(allData, pickValues);
95
95
  }
96
96
  const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);
97
- return () => {
97
+ return (arg2) => {
98
+ const data2 = arg2 ? __spreadValues(__spreadValues({}, allData), arg2) : allData;
98
99
  const result = generateMock(schema);
99
- for (const key in allData) {
100
- const value = allData[key];
100
+ for (const key in data2) {
101
+ const value = data2[key];
101
102
  if (typeof value === "function") {
102
103
  result[key] = value(factory.sequence);
103
104
  } else {
@@ -134,10 +135,22 @@ const processCreateData = (factory, data, uniqueFields, arg) => {
134
135
  }
135
136
  const pickedSchema = factory.schema.pick(pick2);
136
137
  const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);
137
- return () => {
138
+ return (arg2) => {
138
139
  Object.assign(result, generateMock(pickedSchema));
139
- for (const key in fns) {
140
- result[key] = fns[key](factory.sequence);
140
+ if (arg2) {
141
+ for (const key in arg2) {
142
+ if (typeof arg2[key] === "function") {
143
+ result[key] = arg2[key](
144
+ factory.sequence
145
+ );
146
+ } else {
147
+ result[key] = arg2[key];
148
+ }
149
+ }
150
+ } else {
151
+ for (const key in fns) {
152
+ result[key] = fns[key](factory.sequence);
153
+ }
141
154
  }
142
155
  setUniqueValues(result, factory.sequence);
143
156
  factory.sequence++;
@@ -199,15 +212,30 @@ const _TestFactory = class {
199
212
  );
200
213
  return [...Array(qty)].map(build);
201
214
  }
215
+ buildMany(...arr) {
216
+ const build = makeBuild(
217
+ this,
218
+ this.data,
219
+ this.omitValues,
220
+ this.pickValues,
221
+ this.uniqueFields
222
+ );
223
+ return arr.map(build);
224
+ }
202
225
  async create(data) {
203
226
  const getData = processCreateData(this, this.data, this.uniqueFields, data);
204
227
  return await this.table.create(getData());
205
228
  }
206
229
  async createList(qty, data) {
207
230
  const getData = processCreateData(this, this.data, this.uniqueFields, data);
208
- const arr = [...Array(qty)].map(getData);
231
+ const arr = [...Array(qty)].map(() => getData());
209
232
  return await this.table.createMany(arr);
210
233
  }
234
+ async createMany(...arr) {
235
+ const getData = processCreateData(this, this.data, this.uniqueFields);
236
+ const data = arr.map(getData);
237
+ return await this.table.createMany(data);
238
+ }
211
239
  extend() {
212
240
  const { table, schema, uniqueFields } = this;
213
241
  return class extends _TestFactory {
@@ -219,7 +247,7 @@ const _TestFactory = class {
219
247
  };
220
248
  let TestFactory = _TestFactory;
221
249
  const nowString = (/* @__PURE__ */ new Date()).toISOString();
222
- const createFactory = (table, options) => {
250
+ const tableFactory = (table, options) => {
223
251
  var _a, _b, _c;
224
252
  const schema = instanceToZod(table);
225
253
  const data = {};
@@ -273,6 +301,25 @@ const createFactory = (table, options) => {
273
301
  options
274
302
  );
275
303
  };
304
+ const ormFactory = (orm, options) => {
305
+ const factory = {};
306
+ const defined = {};
307
+ for (const key in orm) {
308
+ const table = orm[key];
309
+ if (table && typeof table === "object" && "definedAs" in table) {
310
+ Object.defineProperty(factory, key, {
311
+ get() {
312
+ var _a;
313
+ return (_a = defined[key]) != null ? _a : defined[key] = tableFactory(
314
+ table,
315
+ options
316
+ );
317
+ }
318
+ });
319
+ }
320
+ }
321
+ return factory;
322
+ };
276
323
 
277
- export { TestFactory, createFactory };
324
+ export { TestFactory, ormFactory, tableFactory };
278
325
  //# sourceMappingURL=index.mjs.map
@@ -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 TextBaseColumn,\n} from 'pqb';\nimport { 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\ntype CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType'> & {\n inputType: {\n [K in keyof T['table']['type']]?:\n | T['table']['type'][K]\n | ((sequence: number) => T['table']['type'][K]);\n };\n }\n>;\n\ntype CreateResult<T extends TestFactory> = Result<T, T['table']['type']>;\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 () => {\n const result = generateMock(schema) as Record<string, unknown>;\n for (const key in allData) {\n const value = (allData 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 (item.data.identity || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const result: 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 result[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return () => {\n Object.assign(result, generateMock(pickedSchema));\n\n for (const key in fns) {\n result[key] = fns[key](factory.sequence);\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.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 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(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 = [...Array(qty)].map(getData);\n return (await this.table.createMany(arr)) as CreateResult<T>[];\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\nexport const createFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n) => {\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 }\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>, T['type']>(\n table,\n schema,\n uniqueFields,\n data,\n options,\n );\n};\n"],"names":["pick"],"mappings":"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"}
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 TextBaseColumn,\n} from 'pqb';\nimport { 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\ntype CreateArg<T extends TestFactory> = CreateData<\n Omit<T['table'], 'inputType'> & {\n inputType: {\n [K in keyof T['table']['type']]?:\n | T['table']['type'][K]\n | ((sequence: number) => T['table']['type'][K]);\n };\n }\n>;\n\ntype CreateResult<T extends TestFactory> = Result<T, T['table']['type']>;\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 (item.data.identity || item.dataType.includes('serial')) {\n delete pick[key];\n }\n });\n\n const result: 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 result[key] = value;\n }\n }\n\n const pickedSchema = factory.schema.pick(pick);\n const setUniqueValues = makeSetUniqueValues(uniqueFields, allData);\n\n return (arg?: CreateArg<T>) => {\n Object.assign(result, generateMock(pickedSchema));\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)(\n factory.sequence,\n );\n } else {\n result[key] = arg[key];\n }\n }\n } else {\n for (const key in fns) {\n result[key] = fns[key](factory.sequence);\n }\n }\n\n setUniqueValues(result, factory.sequence);\n\n factory.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(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 = [...Array(qty)].map(() => getData());\n return (await this.table.createMany(arr)) 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 = arr.map(getData);\n return (await this.table.createMany(data)) 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\nexport const tableFactory = <T extends Query>(\n table: T,\n options?: FactoryOptions,\n): TestFactory<T, InstanceToZod<T>, T['type']> => {\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 }\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>, T['type']>(\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]>, T[K]['type']>\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.60",
3
+ "version": "0.3.61",
4
4
  "description": "Orchid ORM factories for tests",
5
5
  "homepage": "https://orchid-orm.netlify.app/guide/orm-test-factories.html",
6
6
  "repository": {
@@ -44,10 +44,10 @@
44
44
  "dependencies": {
45
45
  "@anatine/zod-mock": "^3.6.0",
46
46
  "@faker-js/faker": "^7.6.0",
47
- "orchid-orm": "1.9.14",
48
- "orchid-orm-schema-to-zod": "0.3.51",
49
- "orchid-core": "0.4.4",
50
- "pqb": "0.11.12",
47
+ "orchid-orm": "1.9.15",
48
+ "orchid-orm-schema-to-zod": "0.3.52",
49
+ "orchid-core": "0.4.5",
50
+ "pqb": "0.11.13",
51
51
  "zod": "^3.21.4"
52
52
  },
53
53
  "devDependencies": {