orchid-orm-test-factory 1.0.110 → 1.0.112

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,4 +1,4 @@
1
- import { PickQueryShape, CreateData, MaybePromise, CreateSelf, EmptyObject, RecordUnknown, Column, ColumnsShape } from 'pqb';
1
+ import { PickQueryShape, CreateData, MaybePromise, CreateSelf, EmptyObject, RecordUnknown, Column, ColumnsShape } from 'pqb/internal';
2
2
 
3
3
  type ColumnFactory = (sequence: number) => unknown;
4
4
  interface FakeDataDefineColumnFactories {
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var pqb = require('pqb');
3
+ var internal = require('pqb/internal');
4
4
  var faker = require('@faker-js/faker');
5
5
  var randexp = require('randexp');
6
6
 
@@ -50,7 +50,7 @@ const makeBuild = (factory, columnFactories, data, omitValues, pickValues, arg)
50
50
  };
51
51
  };
52
52
  const getFactoryPrimaryKeys = (factory) => {
53
- return pqb.getPrimaryKeys(factory.table).filter((key) => {
53
+ return internal.getPrimaryKeys(factory.table).filter((key) => {
54
54
  const item = factory.table.shape[key];
55
55
  return "identity" in item.data || item.dataType.includes("serial");
56
56
  });
@@ -283,9 +283,9 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
283
283
  const custom = config.fakeDataForTypes?.[c.dataType]?.(c);
284
284
  if (custom) {
285
285
  fn = custom;
286
- } else if (c instanceof pqb.EnumColumn) {
286
+ } else if (c instanceof internal.EnumColumn) {
287
287
  fn = () => faker.faker.helpers.arrayElement(c.options);
288
- } else if (c instanceof pqb.ArrayColumn) {
288
+ } else if (c instanceof internal.ArrayColumn) {
289
289
  fn = () => arr(
290
290
  1,
291
291
  5,
@@ -297,36 +297,36 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
297
297
  c.data.item
298
298
  )
299
299
  );
300
- } else if (c instanceof pqb.SmallIntColumn || c instanceof pqb.SmallSerialColumn) {
300
+ } else if (c instanceof internal.SmallIntColumn || c instanceof internal.SmallSerialColumn) {
301
301
  fn = num(uniqueColumns, key, c, "int", {
302
302
  step: 1,
303
303
  min: -32768,
304
304
  max: 32767
305
305
  });
306
- } else if (c instanceof pqb.IntegerColumn || c instanceof pqb.SerialColumn) {
306
+ } else if (c instanceof internal.IntegerColumn || c instanceof internal.SerialColumn) {
307
307
  fn = num(uniqueColumns, key, c, "int", {
308
308
  step: 1,
309
309
  min: -2147483648,
310
310
  max: 2147483648
311
311
  });
312
- } else if (c instanceof pqb.BigIntColumn || c instanceof pqb.BigSerialColumn) {
312
+ } else if (c instanceof internal.BigIntColumn || c instanceof internal.BigSerialColumn) {
313
313
  fn = num(uniqueColumns, key, c, "bigInt", {
314
314
  step: 1n,
315
315
  min: BigInt("-9223372036854775808"),
316
316
  max: BigInt("9223372036854775807")
317
317
  });
318
- } else if (c instanceof pqb.DecimalColumn || c instanceof pqb.DoublePrecisionColumn) {
318
+ } else if (c instanceof internal.DecimalColumn || c instanceof internal.DoublePrecisionColumn) {
319
319
  fn = num(uniqueColumns, key, c, "float", {
320
320
  fractionDigits: c.data.numericScale
321
321
  });
322
- } else if (c instanceof pqb.RealColumn) {
322
+ } else if (c instanceof internal.RealColumn) {
323
323
  fn = num(uniqueColumns, key, c, "float");
324
- } else if (c instanceof pqb.MoneyColumn) {
324
+ } else if (c instanceof internal.MoneyColumn) {
325
325
  fn = num(uniqueColumns, key, c, "amount", {
326
326
  module: "finance",
327
327
  symbol: "$"
328
328
  });
329
- } else if (c instanceof pqb.VarCharColumn || c instanceof pqb.TextColumn || c instanceof pqb.StringColumn || c instanceof pqb.CitextColumn) {
329
+ } else if (c instanceof internal.VarCharColumn || c instanceof internal.TextColumn || c instanceof internal.StringColumn || c instanceof internal.CitextColumn) {
330
330
  const data = c.data;
331
331
  const lowerKey = key.toLowerCase();
332
332
  const strippedKey = lowerKey.replace(/_|-/g, "");
@@ -419,12 +419,12 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
419
419
  }
420
420
  return toLowerCase ? s.toLocaleLowerCase() : toUpperCase ? s.toLocaleUpperCase() : s;
421
421
  };
422
- } else if (c instanceof pqb.ByteaColumn) {
422
+ } else if (c instanceof internal.ByteaColumn) {
423
423
  fn = () => Buffer.from(arr(1, 10, () => int(0, 255)));
424
- } else if (c instanceof pqb.DateColumn) {
424
+ } else if (c instanceof internal.DateColumn) {
425
425
  fn = (sequence) => isoTime(c, sequence).split("T")[0];
426
- } else if (c instanceof pqb.TimestampColumn || c instanceof pqb.TimestampTZColumn) {
427
- const hasTZ = c instanceof pqb.TimestampTZColumn;
426
+ } else if (c instanceof internal.TimestampColumn || c instanceof internal.TimestampTZColumn) {
427
+ const hasTZ = c instanceof internal.TimestampTZColumn;
428
428
  fn = (sequence) => {
429
429
  let timestamp = isoTime(c, sequence).replace("T", " ");
430
430
  if (hasTZ) {
@@ -442,9 +442,9 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
442
442
  }
443
443
  return timestamp;
444
444
  };
445
- } else if (c instanceof pqb.TimeColumn) {
445
+ } else if (c instanceof internal.TimeColumn) {
446
446
  fn = (sequence) => isoTime(c, sequence).split("T")[1].replace(/\..+/, "");
447
- } else if (c instanceof pqb.IntervalColumn) {
447
+ } else if (c instanceof internal.IntervalColumn) {
448
448
  fn = () => {
449
449
  const years = int(0, 10);
450
450
  const months = int(0, 11);
@@ -456,45 +456,45 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
456
456
  1
457
457
  )} secs`;
458
458
  };
459
- } else if (c instanceof pqb.BooleanColumn) {
459
+ } else if (c instanceof internal.BooleanColumn) {
460
460
  fn = bool;
461
- } else if (c instanceof pqb.PointColumn) {
461
+ } else if (c instanceof internal.PointColumn) {
462
462
  fn = () => `(${point()}, ${point()})`;
463
- } else if (c instanceof pqb.LineColumn) {
463
+ } else if (c instanceof internal.LineColumn) {
464
464
  fn = () => `{${point()},${point()},${point()}}`;
465
- } else if (c instanceof pqb.LsegColumn) {
465
+ } else if (c instanceof internal.LsegColumn) {
466
466
  fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;
467
- } else if (c instanceof pqb.BoxColumn) {
467
+ } else if (c instanceof internal.BoxColumn) {
468
468
  fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;
469
- } else if (c instanceof pqb.PathColumn) {
469
+ } else if (c instanceof internal.PathColumn) {
470
470
  fn = () => {
471
471
  const s = arr(2, 10, () => `(${point()}, ${point()})`).join(", ");
472
472
  return bool() ? `[${s}]` : `(${s})`;
473
473
  };
474
- } else if (c instanceof pqb.PolygonColumn) {
474
+ } else if (c instanceof internal.PolygonColumn) {
475
475
  fn = () => `(${arr(2, 10, () => `(${point()}, ${point()})`).join(", ")})`;
476
- } else if (c instanceof pqb.CircleColumn) {
476
+ } else if (c instanceof internal.CircleColumn) {
477
477
  fn = () => `<(${point()}, ${point()}), ${float(0, 100, 0.01)}>`;
478
- } else if (c instanceof pqb.CidrColumn) {
478
+ } else if (c instanceof internal.CidrColumn) {
479
479
  fn = () => `${faker.faker.internet.ip()}/${int(0, 32)}`;
480
- } else if (c instanceof pqb.InetColumn) {
480
+ } else if (c instanceof internal.InetColumn) {
481
481
  fn = () => bool() ? faker.faker.internet.ip() : faker.faker.internet.ipv6();
482
- } else if (c instanceof pqb.MacAddrColumn) {
482
+ } else if (c instanceof internal.MacAddrColumn) {
483
483
  fn = () => faker.faker.internet.mac();
484
- } else if (c instanceof pqb.MacAddr8Column) {
484
+ } else if (c instanceof internal.MacAddr8Column) {
485
485
  fn = () => Array.from(
486
486
  { length: 8 },
487
487
  () => faker.faker.string.hexadecimal({ length: 2 })
488
488
  ).join(":");
489
- } else if (c instanceof pqb.BitColumn) {
489
+ } else if (c instanceof internal.BitColumn) {
490
490
  const { length } = c.data;
491
491
  fn = () => Array.from({ length }, () => bool() ? "1" : "0").join("");
492
- } else if (c instanceof pqb.BitVaryingColumn) {
492
+ } else if (c instanceof internal.BitVaryingColumn) {
493
493
  const length = c.data.length;
494
494
  fn = () => arr(1, length || 100, () => bool() ? "1" : "0").join("");
495
- } else if (c instanceof pqb.TsVectorColumn) {
495
+ } else if (c instanceof internal.TsVectorColumn) {
496
496
  fn = () => arr(1, 10, () => faker.faker.lorem.word()).join(" ");
497
- } else if (c instanceof pqb.TsQueryColumn) {
497
+ } else if (c instanceof internal.TsQueryColumn) {
498
498
  fn = () => {
499
499
  const operators = ["&", "|", "<->"];
500
500
  return arr(1, 10, (_, i) => {
@@ -502,9 +502,9 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
502
502
  return i === 0 ? word : faker.faker.helpers.arrayElement(operators) + " " + word;
503
503
  }).join(" ");
504
504
  };
505
- } else if (c instanceof pqb.UUIDColumn) {
505
+ } else if (c instanceof internal.UUIDColumn) {
506
506
  fn = () => faker.faker.string.uuid();
507
- } else if (c instanceof pqb.XMLColumn) {
507
+ } else if (c instanceof internal.XMLColumn) {
508
508
  fn = () => "<items>\n" + arr(
509
509
  1,
510
510
  5,
@@ -517,7 +517,7 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
517
517
  </item>
518
518
  `
519
519
  ).join("") + "</items>";
520
- } else if (c instanceof pqb.JSONColumn || c instanceof pqb.JSONTextColumn) {
520
+ } else if (c instanceof internal.JSONColumn || c instanceof internal.JSONTextColumn) {
521
521
  fn = () => JSON.stringify(
522
522
  arr(1, 5, () => ({
523
523
  id: faker.faker.string.uuid(),
@@ -532,13 +532,13 @@ const makeGeneratorForColumn = (config, table, uniqueColumns, key, c) => {
532
532
  createdAt: faker.faker.date.past().toISOString()
533
533
  }))
534
534
  );
535
- } else if (c instanceof pqb.VirtualColumn) {
535
+ } else if (c instanceof internal.VirtualColumn) {
536
536
  return;
537
- } else if (c instanceof pqb.PostgisGeographyPointColumn) {
537
+ } else if (c instanceof internal.PostgisGeographyPointColumn) {
538
538
  fn = () => {
539
539
  const lon = faker.faker.location.longitude({ min: -180, max: 180 });
540
540
  const lat = faker.faker.location.latitude({ min: -90, max: 90 });
541
- return pqb.PostgisGeographyPointColumn.encode({ lon, lat });
541
+ return internal.PostgisGeographyPointColumn.encode({ lon, lat });
542
542
  };
543
543
  } else {
544
544
  const as = c.data.as;
@@ -601,7 +601,7 @@ const tableFactory = (table, config) => {
601
601
  for (const key in shape) {
602
602
  if (columnFactories[key]) continue;
603
603
  const fn = makeGeneratorForColumn(
604
- config || pqb.emptyObject,
604
+ config || internal.emptyObject,
605
605
  table,
606
606
  uniqueColumns,
607
607
  key,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/factory.ts"],"sourcesContent":["import {\n ArrayColumn,\n BigIntColumn,\n BigSerialColumn,\n BitColumn,\n BitVaryingColumn,\n BooleanColumn,\n BoxColumn,\n ByteaColumn,\n CidrColumn,\n CircleColumn,\n CitextColumn,\n ColumnsShape,\n Column,\n CreateData,\n CreateSelf,\n DateColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n EnumColumn,\n InetColumn,\n IntegerColumn,\n IntervalColumn,\n JSONColumn,\n JSONTextColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n PostgisGeographyPointColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n StringColumn,\n TextColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n VirtualColumn,\n XMLColumn,\n BaseNumberData,\n ColumnSchemaConfig,\n emptyObject,\n EmptyObject,\n MaybePromise,\n PickQueryShape,\n RecordUnknown,\n StringData,\n getPrimaryKeys,\n Query,\n} from 'pqb';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype ColumnFactory = (sequence: number) => unknown;\n\ninterface FakeDataDefineColumnFactories {\n [K: string]: (column: Column.Pick.Data) => ColumnFactory;\n}\n\ninterface ColumnFactories {\n [K: string]: ColumnFactory;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineColumnFactories;\n}\n\ntype FactoryExtend<T extends PickQueryShape> = {\n [K in keyof T['shape']]?: (sequence: number) => T['shape'][K]['outputType'];\n};\n\nexport interface TableFactoryConfig<T extends PickQueryShape>\n extends FactoryConfig {\n extend?: FactoryExtend<T>;\n}\n\nexport interface OrmFactoryConfig<T> extends FactoryConfig {\n extend?: {\n [K in keyof T]?: T[K] extends PickQueryShape ? FactoryExtend<T[K]> : never;\n };\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} & RecordUnknown;\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 [K in keyof T['table']]: K extends 'inputType'\n ? {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => MaybePromise<T['table']['inputType'][K]>);\n }\n : T['table'][K];\n}>;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnsShape.Output<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n if (value !== undefined) {\n (res as unknown as RecordUnknown)[key] = value;\n }\n });\n return res;\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n columnFactories: ColumnFactories,\n data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n columnFactories = omit(columnFactories, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n columnFactories = pick(columnFactories, pickValues);\n allData = pick(allData, pickValues);\n }\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n const sequence = factory.sequence++;\n\n const result: RecordUnknown = {};\n for (const key in columnFactories) {\n result[key] = columnFactories[key](sequence);\n }\n\n for (const key in data) {\n const value = (data as RecordUnknown)[key];\n if (typeof value === 'function') {\n result[key] = value(sequence);\n } else {\n result[key] = value;\n }\n }\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst getFactoryPrimaryKeys = (factory: TestFactory) => {\n return getPrimaryKeys(factory.table as unknown as Query).filter((key) => {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n return 'identity' in item.data || item.dataType.includes('serial');\n });\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n columnFactoriesNoPkeys: ColumnFactories,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in columnFactoriesNoPkeys) {\n pick[key] = true;\n }\n\n for (const key of getFactoryPrimaryKeys(factory)) {\n delete pick[key];\n }\n\n const shared: RecordUnknown = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as RecordUnknown;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n columnFactoriesNoPkeys[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n return async (arg?: CreateArg<T>) => {\n const { sequence } = factory;\n factory.sequence++;\n\n const result = { ...shared };\n for (const key in pick) {\n result[key] = columnFactoriesNoPkeys[key](sequence);\n }\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 columnFactoriesNoPkeys) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await columnFactoriesNoPkeys[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends CreateSelf = CreateSelf,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n private readonly data: RecordUnknown = {};\n private columnFactoriesNoPkeys?: ColumnFactories;\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n private columnFactories: ColumnFactories,\n options: TableFactoryConfig<PickQueryShape> = {},\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 private getColumnFactoriesNoPkeys() {\n let value = this.columnFactoriesNoPkeys;\n if (!value) {\n value = { ...this.columnFactories };\n for (const key of getFactoryPrimaryKeys(this)) {\n delete value[key];\n }\n this.columnFactoriesNoPkeys = value;\n }\n return value;\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 } & RecordUnknown,\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 // TODO: consider memoizing the base case\n const build = makeBuild(\n this,\n this.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\n );\n\n return Array.from({ length: qty }, () => 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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n return (await (this.table as unknown as Query).create(\n await getData(),\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await (this.table as unknown as Query).createMany(\n arr as CreateData<T['table']>[],\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n );\n const data = await Promise.all(arr.map(getData));\n return (await (this.table as unknown as Query).createMany(\n data as CreateData<T['table']>[],\n )) as never;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Type> {\n const { table, columnFactories } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, columnFactories);\n }\n };\n }\n}\n\ntype TableFactory<T extends CreateSelf> = TestFactory<\n T,\n ColumnsShape.Output<T['shape']>\n>;\n\nlet fixedTime: Date | undefined;\nlet fixedTZ: string | undefined;\n\nconst int = (min: number, max: number) => faker.number.int({ min, max });\n\nconst float = (min: number, max: number, multipleOf: number) =>\n faker.number.float({\n min,\n max,\n multipleOf,\n });\n\nconst point = () => float(-100, 100, 0.01);\n\nconst isoTime = (c: Column.Pick.Data, sequence: number) => {\n const data = c.data as { min?: Date; max?: Date };\n\n return (\n data.min || data.max\n ? faker.date.between({\n from: data.min || new Date(-8640000000000000),\n to: data.max || new Date(8640000000000000),\n })\n : new Date((fixedTime ??= faker.date.anytime()).getTime() + sequence)\n ).toISOString();\n};\n\nconst bool = () => faker.datatype.boolean();\n\nconst arr = (min: number, max: number, fn: (_: void, i: number) => unknown) =>\n Array.from({ length: int(min, max) }, fn);\n\nconst numOpts = (\n c: { data: BaseNumberData },\n step?: number | bigint,\n min?: number | bigint,\n max?: number | bigint,\n options?: RecordUnknown,\n): RecordUnknown => ({\n min: c.data.gt ? c.data.gt + ((step as number) || 0) : c.data.gte || min,\n max: c.data.lt ? c.data.lt - ((step as number) || 0) : c.data.lte || max,\n ...options,\n});\n\nconst num = (\n uniqueColumns: Set<string>,\n key: string,\n c: Column<ColumnSchemaConfig>,\n method: 'int' | 'float' | 'bigInt' | 'amount',\n {\n step,\n min,\n max,\n module = 'number',\n ...options\n }: {\n step?: number | bigint;\n min?: number | bigint;\n max?: number | bigint;\n module?: 'number' | 'finance';\n fractionDigits?: number;\n symbol?: string;\n } = {},\n): ((sequence: number) => unknown) => {\n const opts = numOpts(c, step, min, max, options);\n\n if (uniqueColumns.has(key)) {\n if (method === 'int' || method === 'float' || method === 'amount') {\n const st = (step as number | undefined) || 1;\n\n let min = ((opts.min as number | undefined) ?? 0) - st;\n if (min < 0) min = 0;\n\n const { symbol } = options;\n if (symbol) {\n return (sequence: number) => `${symbol}${min + sequence * st}`;\n } else {\n return (sequence: number) => min + sequence * st;\n }\n }\n\n if (method === 'bigInt') {\n const st = (step as bigint | undefined) || 1n;\n\n let min = ((opts.min as bigint | undefined) ?? 0n) - st;\n if (min < 0n) min = 0n;\n\n return (sequence: number) => min + BigInt(sequence) * st;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return () => (faker as any)[module][method](opts);\n};\n\nconst makeGeneratorForColumn = (\n config: FactoryConfig,\n table: PickQueryShape,\n uniqueColumns: Set<string>,\n key: string,\n c: Column.Pick.DataAndDataType,\n): ((sequence: number) => unknown) | undefined => {\n let fn: (sequence: number) => unknown;\n\n const custom = config.fakeDataForTypes?.[c.dataType]?.(c);\n if (custom) {\n fn = custom;\n } else if (c instanceof EnumColumn) {\n fn = () => faker.helpers.arrayElement(c.options);\n } else if (c instanceof ArrayColumn) {\n fn = () =>\n arr(\n 1,\n 5,\n makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n c.data.item,\n ) as () => unknown,\n );\n } else if (c instanceof SmallIntColumn || c instanceof SmallSerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -32768,\n max: 32767,\n });\n } else if (c instanceof IntegerColumn || c instanceof SerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -2147483648,\n max: 2147483648,\n });\n } else if (c instanceof BigIntColumn || c instanceof BigSerialColumn) {\n fn = num(uniqueColumns, key, c, 'bigInt', {\n step: 1n,\n min: BigInt('-9223372036854775808'),\n max: BigInt('9223372036854775807'),\n });\n } else if (c instanceof DecimalColumn || c instanceof DoublePrecisionColumn) {\n fn = num(uniqueColumns, key, c, 'float', {\n fractionDigits: c.data.numericScale,\n });\n } else if (c instanceof RealColumn) {\n fn = num(uniqueColumns, key, c, 'float');\n } else if (c instanceof MoneyColumn) {\n fn = num(uniqueColumns, key, c, 'amount', {\n module: 'finance',\n symbol: '$',\n });\n } else if (\n c instanceof VarCharColumn ||\n c instanceof TextColumn ||\n c instanceof StringColumn ||\n c instanceof CitextColumn\n ) {\n const data = c.data as StringData;\n const lowerKey = key.toLowerCase();\n const strippedKey = lowerKey.replace(/_|-/g, '');\n\n let gen: ((sequence: number) => string) | undefined;\n const min = data.length ?? data.min ?? data.nonEmpty ? 1 : 0;\n const max = Math.min(\n data.length ?? data.max ?? Infinity,\n config.maxTextLength ?? 1000,\n );\n const { includes, startsWith, endsWith, trim, toLowerCase, toUpperCase } =\n data;\n\n let isEmail = false;\n let isUrl = false;\n\n if (data.email) {\n isEmail = true;\n gen = () => faker.internet.email();\n } else if (data.emoji) {\n gen = () => faker.internet.emoji();\n } else if (data.url) {\n isUrl = true;\n gen = () => faker.internet.url();\n } else if (data.uuid) {\n gen = () => faker.string.uuid();\n } else if (data.datetime) {\n gen = (sequence) => isoTime(c, sequence);\n } else if (data.ipv4) {\n gen = () => faker.internet.ipv4();\n } else if (data.ipv6) {\n gen = () => faker.internet.ipv6();\n } else if (data.regex) {\n const generator = new randexp(data.regex);\n\n generator.randInt = (min: number, max: number) =>\n faker.number.int({ min, max });\n\n if (max !== Infinity) {\n generator.max = max;\n }\n\n gen = () => generator.gen();\n } else if (strippedKey === 'name') {\n gen = () => faker.person.fullName();\n } else if (strippedKey === 'phonenumber') {\n gen = () => faker.phone.number();\n } else if (strippedKey === 'image' || strippedKey === 'imageurl') {\n gen = () => faker.image.url();\n } else {\n for (const sectionKey in faker) {\n for (const key in faker[sectionKey as keyof typeof faker]) {\n if (key === strippedKey) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (faker as any)[sectionKey][key];\n gen = () => String(fn());\n\n if (key === 'email') isEmail = true;\n else if (key === 'url') isUrl = true;\n }\n }\n }\n\n if (!gen) gen = () => faker.food.dish();\n }\n\n const isUnique = uniqueColumns.has(key);\n\n fn = (sequence) => {\n const seq = sequence++;\n\n let s = gen(seq);\n\n if (isUnique) {\n if (isEmail) s = `${seq}-${s}`;\n else if (isUrl) s = s.replace('://', `://${seq}-`);\n else s = `${seq} ${s}`;\n }\n\n while (s.length < min) {\n s += gen(seq);\n\n if (trim) s = s.trim();\n }\n\n if (s.length > max) {\n s = s.slice(0, max);\n\n if (trim) {\n s = s.trim();\n while (s.length < min) {\n s += gen(seq);\n if (trim) s = s.trim();\n }\n }\n }\n\n if (startsWith) {\n s = startsWith + s.slice(startsWith.length);\n }\n\n if (includes) {\n const start = Math.max(\n 0,\n Math.floor(s.length / 2) - Math.floor(includes.length / 2),\n );\n s = s.slice(0, start) + includes + s.slice(start + includes.length);\n }\n\n if (endsWith) {\n s = s.slice(0, endsWith.length + 1) + endsWith;\n }\n\n return toLowerCase\n ? s.toLocaleLowerCase()\n : toUpperCase\n ? s.toLocaleUpperCase()\n : s;\n };\n } else if (c instanceof ByteaColumn) {\n fn = () => Buffer.from(arr(1, 10, () => int(0, 255)) as number[]);\n } else if (c instanceof DateColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[0];\n } else if (c instanceof TimestampColumn || c instanceof TimestampTZColumn) {\n const hasTZ = c instanceof TimestampTZColumn;\n fn = (sequence) => {\n let timestamp = isoTime(c, sequence).replace('T', ' ');\n\n if (hasTZ) {\n if (!fixedTZ) {\n const minOffset = -720; // UTC-12:00\n const maxOffset = 840; // UTC+14:00\n const randomOffset = int(minOffset, maxOffset);\n\n const sign = randomOffset >= 0 ? '+' : '-';\n const absOffset = Math.abs(randomOffset);\n const hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n const minutes = String(absOffset % 60).padStart(2, '0');\n\n fixedTZ = `${sign}${hours}:${minutes}`;\n }\n\n timestamp += fixedTZ;\n }\n\n return timestamp;\n };\n } else if (c instanceof TimeColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[1].replace(/\\..+/, '');\n } else if (c instanceof IntervalColumn) {\n fn = () => {\n const years = int(0, 10);\n const months = int(0, 11);\n const days = int(0, 30);\n const hours = int(0, 23);\n const minutes = int(0, 59);\n const seconds = float(0, 59, 0.1);\n\n return `${years} years ${months} mons ${days} days ${hours} hours ${minutes} mins ${seconds.toFixed(\n 1,\n )} secs`;\n };\n } else if (c instanceof BooleanColumn) {\n fn = bool;\n } else if (c instanceof PointColumn) {\n fn = () => `(${point()}, ${point()})`;\n } else if (c instanceof LineColumn) {\n fn = () => `{${point()},${point()},${point()}}`;\n } else if (c instanceof LsegColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof BoxColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof PathColumn) {\n fn = () => {\n const s = arr(2, 10, () => `(${point()}, ${point()})`).join(', ');\n return bool() ? `[${s}]` : `(${s})`;\n };\n } else if (c instanceof PolygonColumn) {\n fn = () => `(${arr(2, 10, () => `(${point()}, ${point()})`).join(', ')})`;\n } else if (c instanceof CircleColumn) {\n fn = () => `<(${point()}, ${point()}), ${float(0, 100, 0.01)}>`;\n } else if (c instanceof CidrColumn) {\n fn = () => `${faker.internet.ip()}/${int(0, 32)}`;\n } else if (c instanceof InetColumn) {\n fn = () => (bool() ? faker.internet.ip() : faker.internet.ipv6());\n } else if (c instanceof MacAddrColumn) {\n fn = () => faker.internet.mac();\n } else if (c instanceof MacAddr8Column) {\n fn = () =>\n Array.from({ length: 8 }, () =>\n faker.string.hexadecimal({ length: 2 }),\n ).join(':');\n } else if (c instanceof BitColumn) {\n const { length } = c.data;\n\n fn = () => Array.from({ length }, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof BitVaryingColumn) {\n const length = c.data.length;\n\n fn = () => arr(1, length || 100, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof TsVectorColumn) {\n fn = () => arr(1, 10, () => faker.lorem.word()).join(' ');\n } else if (c instanceof TsQueryColumn) {\n fn = () => {\n const operators = ['&', '|', '<->'];\n return arr(1, 10, (_, i) => {\n const word = faker.lorem.word();\n return i === 0\n ? word\n : faker.helpers.arrayElement(operators) + ' ' + word;\n }).join(' ');\n };\n } else if (c instanceof UUIDColumn) {\n fn = () => faker.string.uuid();\n } else if (c instanceof XMLColumn) {\n fn = () =>\n '<items>\\n' +\n arr(\n 1,\n 5,\n () =>\n ` <item>\n <id>${faker.string.uuid()}</id>\n <name>${faker.person.firstName()}</name>\n <email>${faker.internet.email()}</email>\n <address>${faker.location.streetAddress()}</address>\n <created_at>${faker.date.past().toISOString()}</created_at>\n </item>\n`,\n ).join('') +\n '</items>';\n } else if (c instanceof JSONColumn || c instanceof JSONTextColumn) {\n fn = () =>\n JSON.stringify(\n arr(1, 5, () => ({\n id: faker.string.uuid(),\n name: faker.person.firstName(),\n email: faker.internet.email(),\n address: {\n street: faker.location.streetAddress(),\n city: faker.location.city(),\n state: faker.location.state(),\n zip: faker.location.zipCode(),\n },\n createdAt: faker.date.past().toISOString(),\n })),\n );\n } else if (c instanceof VirtualColumn) {\n return;\n } else if (c instanceof PostgisGeographyPointColumn) {\n fn = () => {\n const lon = faker.location.longitude({ min: -180, max: 180 });\n const lat = faker.location.latitude({ min: -90, max: 90 });\n return PostgisGeographyPointColumn.encode({ lon, lat });\n };\n } else {\n const as = c.data.as;\n if (!as) {\n throw new Error(\n `Don't know how to generate data for column ${\n (table as unknown as Query).table\n }.${key} that has no \\`as\\``,\n );\n }\n\n return makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n as as never,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return fn;\n};\n\nexport const tableFactory = <T extends CreateSelf>(\n table: T,\n config?: TableFactoryConfig<T>,\n): TableFactory<T> => {\n const { shape } = table;\n const columnFactories: { [K: string]: (sequence: number) => unknown } = {\n ...config?.extend,\n } as never;\n\n const uniqueColumns = new Set<string>();\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const {\n data: { indexes, primaryKey },\n } = shape[key] as Column;\n\n if (primaryKey) {\n uniqueColumns.add(key);\n continue;\n }\n\n if (!indexes) continue;\n\n for (const index of indexes) {\n if (index.options.unique) {\n uniqueColumns.add(key);\n break;\n }\n }\n }\n\n const { primaryKey, indexes } = (table as unknown as Query).internal\n .tableData;\n if (primaryKey) {\n for (const key of primaryKey.columns) {\n if (columnFactories[key]) continue;\n\n uniqueColumns.add(key);\n }\n }\n\n if (indexes) {\n for (const index of indexes) {\n if (index.options.unique) {\n for (const item of index.columns) {\n if ('column' in item) {\n uniqueColumns.add(item.column);\n }\n }\n }\n }\n }\n\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const fn = makeGeneratorForColumn(\n config || emptyObject,\n table,\n uniqueColumns,\n key,\n (shape as unknown as ColumnsShape)[key],\n );\n if (fn) columnFactories[key] = fn;\n }\n\n return new TestFactory(table, columnFactories, config) as TableFactory<T>;\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends CreateSelf ? TableFactory<T[K]> : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: OrmFactoryConfig<T>,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: RecordUnknown = {};\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 CreateSelf,\n {\n ...options,\n extend: options?.extend?.[key],\n },\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","getPrimaryKeys","pick","arr","faker","min","EnumColumn","ArrayColumn","SmallIntColumn","SmallSerialColumn","IntegerColumn","SerialColumn","BigIntColumn","BigSerialColumn","DecimalColumn","DoublePrecisionColumn","RealColumn","MoneyColumn","VarCharColumn","TextColumn","StringColumn","CitextColumn","max","key","fn","ByteaColumn","DateColumn","TimestampColumn","TimestampTZColumn","TimeColumn","IntervalColumn","BooleanColumn","PointColumn","LineColumn","LsegColumn","BoxColumn","PathColumn","PolygonColumn","CircleColumn","CidrColumn","InetColumn","MacAddrColumn","MacAddr8Column","BitColumn","BitVaryingColumn","TsVectorColumn","TsQueryColumn","UUIDColumn","XMLColumn","JSONColumn","JSONTextColumn","VirtualColumn","PostgisGeographyPointColumn","indexes","primaryKey","emptyObject"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/factory.ts"],"sourcesContent":["import { Column, Query } from 'pqb/internal';\nimport {\n ArrayColumn,\n BigIntColumn,\n BigSerialColumn,\n BitColumn,\n BitVaryingColumn,\n BooleanColumn,\n BoxColumn,\n ByteaColumn,\n CidrColumn,\n CircleColumn,\n CitextColumn,\n ColumnsShape,\n ColumnSchemaConfig,\n CreateData,\n CreateSelf,\n DateColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n EmptyObject,\n EnumColumn,\n getPrimaryKeys,\n InetColumn,\n IntegerColumn,\n IntervalColumn,\n JSONColumn,\n JSONTextColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MaybePromise,\n MoneyColumn,\n PathColumn,\n PickQueryShape,\n PointColumn,\n PolygonColumn,\n PostgisGeographyPointColumn,\n RealColumn,\n RecordUnknown,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n StringColumn,\n StringData,\n TextColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n VirtualColumn,\n XMLColumn,\n type BaseNumberData,\n emptyObject,\n} from 'pqb/internal';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype ColumnFactory = (sequence: number) => unknown;\n\ninterface FakeDataDefineColumnFactories {\n [K: string]: (column: Column.Pick.Data) => ColumnFactory;\n}\n\ninterface ColumnFactories {\n [K: string]: ColumnFactory;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineColumnFactories;\n}\n\ntype FactoryExtend<T extends PickQueryShape> = {\n [K in keyof T['shape']]?: (sequence: number) => T['shape'][K]['outputType'];\n};\n\nexport interface TableFactoryConfig<T extends PickQueryShape>\n extends FactoryConfig {\n extend?: FactoryExtend<T>;\n}\n\nexport interface OrmFactoryConfig<T> extends FactoryConfig {\n extend?: {\n [K in keyof T]?: T[K] extends PickQueryShape ? FactoryExtend<T[K]> : never;\n };\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} & RecordUnknown;\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 [K in keyof T['table']]: K extends 'inputType'\n ? {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => MaybePromise<T['table']['inputType'][K]>);\n }\n : T['table'][K];\n}>;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnsShape.Output<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n if (value !== undefined) {\n (res as unknown as RecordUnknown)[key] = value;\n }\n });\n return res;\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n columnFactories: ColumnFactories,\n data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n columnFactories = omit(columnFactories, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n columnFactories = pick(columnFactories, pickValues);\n allData = pick(allData, pickValues);\n }\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n const sequence = factory.sequence++;\n\n const result: RecordUnknown = {};\n for (const key in columnFactories) {\n result[key] = columnFactories[key](sequence);\n }\n\n for (const key in data) {\n const value = (data as RecordUnknown)[key];\n if (typeof value === 'function') {\n result[key] = value(sequence);\n } else {\n result[key] = value;\n }\n }\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst getFactoryPrimaryKeys = (factory: TestFactory) => {\n return getPrimaryKeys(factory.table as unknown as Query).filter((key) => {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n return 'identity' in item.data || item.dataType.includes('serial');\n });\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n columnFactoriesNoPkeys: ColumnFactories,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in columnFactoriesNoPkeys) {\n pick[key] = true;\n }\n\n for (const key of getFactoryPrimaryKeys(factory)) {\n delete pick[key];\n }\n\n const shared: RecordUnknown = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as RecordUnknown;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n columnFactoriesNoPkeys[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n return async (arg?: CreateArg<T>) => {\n const { sequence } = factory;\n factory.sequence++;\n\n const result = { ...shared };\n for (const key in pick) {\n result[key] = columnFactoriesNoPkeys[key](sequence);\n }\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 columnFactoriesNoPkeys) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await columnFactoriesNoPkeys[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends CreateSelf = CreateSelf,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n private readonly data: RecordUnknown = {};\n private columnFactoriesNoPkeys?: ColumnFactories;\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n private columnFactories: ColumnFactories,\n options: TableFactoryConfig<PickQueryShape> = {},\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 private getColumnFactoriesNoPkeys() {\n let value = this.columnFactoriesNoPkeys;\n if (!value) {\n value = { ...this.columnFactories };\n for (const key of getFactoryPrimaryKeys(this)) {\n delete value[key];\n }\n this.columnFactoriesNoPkeys = value;\n }\n return value;\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 } & RecordUnknown,\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 // TODO: consider memoizing the base case\n const build = makeBuild(\n this,\n this.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\n );\n\n return Array.from({ length: qty }, () => 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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n return (await (this.table as unknown as Query).create(\n await getData(),\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await (this.table as unknown as Query).createMany(\n arr as CreateData<T['table']>[],\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n );\n const data = await Promise.all(arr.map(getData));\n return (await (this.table as unknown as Query).createMany(\n data as CreateData<T['table']>[],\n )) as never;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Type> {\n const { table, columnFactories } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, columnFactories);\n }\n };\n }\n}\n\ntype TableFactory<T extends CreateSelf> = TestFactory<\n T,\n ColumnsShape.Output<T['shape']>\n>;\n\nlet fixedTime: Date | undefined;\nlet fixedTZ: string | undefined;\n\nconst int = (min: number, max: number) => faker.number.int({ min, max });\n\nconst float = (min: number, max: number, multipleOf: number) =>\n faker.number.float({\n min,\n max,\n multipleOf,\n });\n\nconst point = () => float(-100, 100, 0.01);\n\nconst isoTime = (c: Column.Pick.Data, sequence: number) => {\n const data = c.data as { min?: Date; max?: Date };\n\n return (\n data.min || data.max\n ? faker.date.between({\n from: data.min || new Date(-8640000000000000),\n to: data.max || new Date(8640000000000000),\n })\n : new Date((fixedTime ??= faker.date.anytime()).getTime() + sequence)\n ).toISOString();\n};\n\nconst bool = () => faker.datatype.boolean();\n\nconst arr = (min: number, max: number, fn: (_: void, i: number) => unknown) =>\n Array.from({ length: int(min, max) }, fn);\n\nconst numOpts = (\n c: { data: BaseNumberData },\n step?: number | bigint,\n min?: number | bigint,\n max?: number | bigint,\n options?: RecordUnknown,\n): RecordUnknown => ({\n min: c.data.gt ? c.data.gt + ((step as number) || 0) : c.data.gte || min,\n max: c.data.lt ? c.data.lt - ((step as number) || 0) : c.data.lte || max,\n ...options,\n});\n\nconst num = (\n uniqueColumns: Set<string>,\n key: string,\n c: Column<ColumnSchemaConfig>,\n method: 'int' | 'float' | 'bigInt' | 'amount',\n {\n step,\n min,\n max,\n module = 'number',\n ...options\n }: {\n step?: number | bigint;\n min?: number | bigint;\n max?: number | bigint;\n module?: 'number' | 'finance';\n fractionDigits?: number;\n symbol?: string;\n } = {},\n): ((sequence: number) => unknown) => {\n const opts = numOpts(c, step, min, max, options);\n\n if (uniqueColumns.has(key)) {\n if (method === 'int' || method === 'float' || method === 'amount') {\n const st = (step as number | undefined) || 1;\n\n let min = ((opts.min as number | undefined) ?? 0) - st;\n if (min < 0) min = 0;\n\n const { symbol } = options;\n if (symbol) {\n return (sequence: number) => `${symbol}${min + sequence * st}`;\n } else {\n return (sequence: number) => min + sequence * st;\n }\n }\n\n if (method === 'bigInt') {\n const st = (step as bigint | undefined) || 1n;\n\n let min = ((opts.min as bigint | undefined) ?? 0n) - st;\n if (min < 0n) min = 0n;\n\n return (sequence: number) => min + BigInt(sequence) * st;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return () => (faker as any)[module][method](opts);\n};\n\nconst makeGeneratorForColumn = (\n config: FactoryConfig,\n table: PickQueryShape,\n uniqueColumns: Set<string>,\n key: string,\n c: Column.Pick.DataAndDataType,\n): ((sequence: number) => unknown) | undefined => {\n let fn: (sequence: number) => unknown;\n\n const custom = config.fakeDataForTypes?.[c.dataType]?.(c);\n if (custom) {\n fn = custom;\n } else if (c instanceof EnumColumn) {\n fn = () => faker.helpers.arrayElement(c.options);\n } else if (c instanceof ArrayColumn) {\n fn = () =>\n arr(\n 1,\n 5,\n makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n c.data.item,\n ) as () => unknown,\n );\n } else if (c instanceof SmallIntColumn || c instanceof SmallSerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -32768,\n max: 32767,\n });\n } else if (c instanceof IntegerColumn || c instanceof SerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -2147483648,\n max: 2147483648,\n });\n } else if (c instanceof BigIntColumn || c instanceof BigSerialColumn) {\n fn = num(uniqueColumns, key, c, 'bigInt', {\n step: 1n,\n min: BigInt('-9223372036854775808'),\n max: BigInt('9223372036854775807'),\n });\n } else if (c instanceof DecimalColumn || c instanceof DoublePrecisionColumn) {\n fn = num(uniqueColumns, key, c, 'float', {\n fractionDigits: c.data.numericScale,\n });\n } else if (c instanceof RealColumn) {\n fn = num(uniqueColumns, key, c, 'float');\n } else if (c instanceof MoneyColumn) {\n fn = num(uniqueColumns, key, c, 'amount', {\n module: 'finance',\n symbol: '$',\n });\n } else if (\n c instanceof VarCharColumn ||\n c instanceof TextColumn ||\n c instanceof StringColumn ||\n c instanceof CitextColumn\n ) {\n const data = c.data as StringData;\n const lowerKey = key.toLowerCase();\n const strippedKey = lowerKey.replace(/_|-/g, '');\n\n let gen: ((sequence: number) => string) | undefined;\n const min = data.length ?? data.min ?? data.nonEmpty ? 1 : 0;\n const max = Math.min(\n data.length ?? data.max ?? Infinity,\n config.maxTextLength ?? 1000,\n );\n const { includes, startsWith, endsWith, trim, toLowerCase, toUpperCase } =\n data;\n\n let isEmail = false;\n let isUrl = false;\n\n if (data.email) {\n isEmail = true;\n gen = () => faker.internet.email();\n } else if (data.emoji) {\n gen = () => faker.internet.emoji();\n } else if (data.url) {\n isUrl = true;\n gen = () => faker.internet.url();\n } else if (data.uuid) {\n gen = () => faker.string.uuid();\n } else if (data.datetime) {\n gen = (sequence) => isoTime(c, sequence);\n } else if (data.ipv4) {\n gen = () => faker.internet.ipv4();\n } else if (data.ipv6) {\n gen = () => faker.internet.ipv6();\n } else if (data.regex) {\n const generator = new randexp(data.regex);\n\n generator.randInt = (min: number, max: number) =>\n faker.number.int({ min, max });\n\n if (max !== Infinity) {\n generator.max = max;\n }\n\n gen = () => generator.gen();\n } else if (strippedKey === 'name') {\n gen = () => faker.person.fullName();\n } else if (strippedKey === 'phonenumber') {\n gen = () => faker.phone.number();\n } else if (strippedKey === 'image' || strippedKey === 'imageurl') {\n gen = () => faker.image.url();\n } else {\n for (const sectionKey in faker) {\n for (const key in faker[sectionKey as keyof typeof faker]) {\n if (key === strippedKey) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (faker as any)[sectionKey][key];\n gen = () => String(fn());\n\n if (key === 'email') isEmail = true;\n else if (key === 'url') isUrl = true;\n }\n }\n }\n\n if (!gen) gen = () => faker.food.dish();\n }\n\n const isUnique = uniqueColumns.has(key);\n\n fn = (sequence) => {\n const seq = sequence++;\n\n let s = gen(seq);\n\n if (isUnique) {\n if (isEmail) s = `${seq}-${s}`;\n else if (isUrl) s = s.replace('://', `://${seq}-`);\n else s = `${seq} ${s}`;\n }\n\n while (s.length < min) {\n s += gen(seq);\n\n if (trim) s = s.trim();\n }\n\n if (s.length > max) {\n s = s.slice(0, max);\n\n if (trim) {\n s = s.trim();\n while (s.length < min) {\n s += gen(seq);\n if (trim) s = s.trim();\n }\n }\n }\n\n if (startsWith) {\n s = startsWith + s.slice(startsWith.length);\n }\n\n if (includes) {\n const start = Math.max(\n 0,\n Math.floor(s.length / 2) - Math.floor(includes.length / 2),\n );\n s = s.slice(0, start) + includes + s.slice(start + includes.length);\n }\n\n if (endsWith) {\n s = s.slice(0, endsWith.length + 1) + endsWith;\n }\n\n return toLowerCase\n ? s.toLocaleLowerCase()\n : toUpperCase\n ? s.toLocaleUpperCase()\n : s;\n };\n } else if (c instanceof ByteaColumn) {\n fn = () => Buffer.from(arr(1, 10, () => int(0, 255)) as number[]);\n } else if (c instanceof DateColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[0];\n } else if (c instanceof TimestampColumn || c instanceof TimestampTZColumn) {\n const hasTZ = c instanceof TimestampTZColumn;\n fn = (sequence) => {\n let timestamp = isoTime(c, sequence).replace('T', ' ');\n\n if (hasTZ) {\n if (!fixedTZ) {\n const minOffset = -720; // UTC-12:00\n const maxOffset = 840; // UTC+14:00\n const randomOffset = int(minOffset, maxOffset);\n\n const sign = randomOffset >= 0 ? '+' : '-';\n const absOffset = Math.abs(randomOffset);\n const hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n const minutes = String(absOffset % 60).padStart(2, '0');\n\n fixedTZ = `${sign}${hours}:${minutes}`;\n }\n\n timestamp += fixedTZ;\n }\n\n return timestamp;\n };\n } else if (c instanceof TimeColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[1].replace(/\\..+/, '');\n } else if (c instanceof IntervalColumn) {\n fn = () => {\n const years = int(0, 10);\n const months = int(0, 11);\n const days = int(0, 30);\n const hours = int(0, 23);\n const minutes = int(0, 59);\n const seconds = float(0, 59, 0.1);\n\n return `${years} years ${months} mons ${days} days ${hours} hours ${minutes} mins ${seconds.toFixed(\n 1,\n )} secs`;\n };\n } else if (c instanceof BooleanColumn) {\n fn = bool;\n } else if (c instanceof PointColumn) {\n fn = () => `(${point()}, ${point()})`;\n } else if (c instanceof LineColumn) {\n fn = () => `{${point()},${point()},${point()}}`;\n } else if (c instanceof LsegColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof BoxColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof PathColumn) {\n fn = () => {\n const s = arr(2, 10, () => `(${point()}, ${point()})`).join(', ');\n return bool() ? `[${s}]` : `(${s})`;\n };\n } else if (c instanceof PolygonColumn) {\n fn = () => `(${arr(2, 10, () => `(${point()}, ${point()})`).join(', ')})`;\n } else if (c instanceof CircleColumn) {\n fn = () => `<(${point()}, ${point()}), ${float(0, 100, 0.01)}>`;\n } else if (c instanceof CidrColumn) {\n fn = () => `${faker.internet.ip()}/${int(0, 32)}`;\n } else if (c instanceof InetColumn) {\n fn = () => (bool() ? faker.internet.ip() : faker.internet.ipv6());\n } else if (c instanceof MacAddrColumn) {\n fn = () => faker.internet.mac();\n } else if (c instanceof MacAddr8Column) {\n fn = () =>\n Array.from({ length: 8 }, () =>\n faker.string.hexadecimal({ length: 2 }),\n ).join(':');\n } else if (c instanceof BitColumn) {\n const { length } = c.data;\n\n fn = () => Array.from({ length }, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof BitVaryingColumn) {\n const length = c.data.length;\n\n fn = () => arr(1, length || 100, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof TsVectorColumn) {\n fn = () => arr(1, 10, () => faker.lorem.word()).join(' ');\n } else if (c instanceof TsQueryColumn) {\n fn = () => {\n const operators = ['&', '|', '<->'];\n return arr(1, 10, (_, i) => {\n const word = faker.lorem.word();\n return i === 0\n ? word\n : faker.helpers.arrayElement(operators) + ' ' + word;\n }).join(' ');\n };\n } else if (c instanceof UUIDColumn) {\n fn = () => faker.string.uuid();\n } else if (c instanceof XMLColumn) {\n fn = () =>\n '<items>\\n' +\n arr(\n 1,\n 5,\n () =>\n ` <item>\n <id>${faker.string.uuid()}</id>\n <name>${faker.person.firstName()}</name>\n <email>${faker.internet.email()}</email>\n <address>${faker.location.streetAddress()}</address>\n <created_at>${faker.date.past().toISOString()}</created_at>\n </item>\n`,\n ).join('') +\n '</items>';\n } else if (c instanceof JSONColumn || c instanceof JSONTextColumn) {\n fn = () =>\n JSON.stringify(\n arr(1, 5, () => ({\n id: faker.string.uuid(),\n name: faker.person.firstName(),\n email: faker.internet.email(),\n address: {\n street: faker.location.streetAddress(),\n city: faker.location.city(),\n state: faker.location.state(),\n zip: faker.location.zipCode(),\n },\n createdAt: faker.date.past().toISOString(),\n })),\n );\n } else if (c instanceof VirtualColumn) {\n return;\n } else if (c instanceof PostgisGeographyPointColumn) {\n fn = () => {\n const lon = faker.location.longitude({ min: -180, max: 180 });\n const lat = faker.location.latitude({ min: -90, max: 90 });\n return PostgisGeographyPointColumn.encode({ lon, lat });\n };\n } else {\n const as = c.data.as;\n if (!as) {\n throw new Error(\n `Don't know how to generate data for column ${\n (table as unknown as Query).table\n }.${key} that has no \\`as\\``,\n );\n }\n\n return makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n as as never,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return fn;\n};\n\nexport const tableFactory = <T extends CreateSelf>(\n table: T,\n config?: TableFactoryConfig<T>,\n): TableFactory<T> => {\n const { shape } = table;\n const columnFactories: { [K: string]: (sequence: number) => unknown } = {\n ...config?.extend,\n } as never;\n\n const uniqueColumns = new Set<string>();\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const {\n data: { indexes, primaryKey },\n } = shape[key] as Column;\n\n if (primaryKey) {\n uniqueColumns.add(key);\n continue;\n }\n\n if (!indexes) continue;\n\n for (const index of indexes) {\n if (index.options.unique) {\n uniqueColumns.add(key);\n break;\n }\n }\n }\n\n const { primaryKey, indexes } = (table as unknown as Query).internal\n .tableData;\n if (primaryKey) {\n for (const key of primaryKey.columns) {\n if (columnFactories[key]) continue;\n\n uniqueColumns.add(key);\n }\n }\n\n if (indexes) {\n for (const index of indexes) {\n if (index.options.unique) {\n for (const item of index.columns) {\n if ('column' in item) {\n uniqueColumns.add(item.column);\n }\n }\n }\n }\n }\n\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const fn = makeGeneratorForColumn(\n config || emptyObject,\n table,\n uniqueColumns,\n key,\n (shape as unknown as ColumnsShape)[key],\n );\n if (fn) columnFactories[key] = fn;\n }\n\n return new TestFactory(table, columnFactories, config) as TableFactory<T>;\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends CreateSelf ? TableFactory<T[K]> : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: OrmFactoryConfig<T>,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: RecordUnknown = {};\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 CreateSelf,\n {\n ...options,\n extend: options?.extend?.[key],\n },\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","getPrimaryKeys","pick","arr","faker","min","EnumColumn","ArrayColumn","SmallIntColumn","SmallSerialColumn","IntegerColumn","SerialColumn","BigIntColumn","BigSerialColumn","DecimalColumn","DoublePrecisionColumn","RealColumn","MoneyColumn","VarCharColumn","TextColumn","StringColumn","CitextColumn","max","key","fn","ByteaColumn","DateColumn","TimestampColumn","TimestampTZColumn","TimeColumn","IntervalColumn","BooleanColumn","PointColumn","LineColumn","LsegColumn","BoxColumn","PathColumn","PolygonColumn","CircleColumn","CidrColumn","InetColumn","MacAddrColumn","MacAddr8Column","BitColumn","BitVaryingColumn","TsVectorColumn","TsQueryColumn","UUIDColumn","XMLColumn","JSONColumn","JSONTextColumn","VirtualColumn","PostgisGeographyPointColumn","indexes","primaryKey","emptyObject"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { emptyObject, EnumColumn, ArrayColumn, SmallIntColumn, SmallSerialColumn, IntegerColumn, SerialColumn, BigIntColumn, BigSerialColumn, DecimalColumn, DoublePrecisionColumn, RealColumn, MoneyColumn, VarCharColumn, TextColumn, StringColumn, CitextColumn, ByteaColumn, DateColumn, TimestampColumn, TimestampTZColumn, TimeColumn, IntervalColumn, BooleanColumn, PointColumn, LineColumn, LsegColumn, BoxColumn, PathColumn, PolygonColumn, CircleColumn, CidrColumn, InetColumn, MacAddrColumn, MacAddr8Column, BitColumn, BitVaryingColumn, TsVectorColumn, TsQueryColumn, UUIDColumn, XMLColumn, JSONColumn, JSONTextColumn, VirtualColumn, PostgisGeographyPointColumn, getPrimaryKeys } from 'pqb';
1
+ import { emptyObject, EnumColumn, ArrayColumn, SmallIntColumn, SmallSerialColumn, IntegerColumn, SerialColumn, BigIntColumn, BigSerialColumn, DecimalColumn, DoublePrecisionColumn, RealColumn, MoneyColumn, VarCharColumn, TextColumn, StringColumn, CitextColumn, ByteaColumn, DateColumn, TimestampColumn, TimestampTZColumn, TimeColumn, IntervalColumn, BooleanColumn, PointColumn, LineColumn, LsegColumn, BoxColumn, PathColumn, PolygonColumn, CircleColumn, CidrColumn, InetColumn, MacAddrColumn, MacAddr8Column, BitColumn, BitVaryingColumn, TsVectorColumn, TsQueryColumn, UUIDColumn, XMLColumn, JSONColumn, JSONTextColumn, VirtualColumn, PostgisGeographyPointColumn, getPrimaryKeys } from 'pqb/internal';
2
2
  import { faker } from '@faker-js/faker';
3
3
  import randexp from 'randexp';
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/factory.ts"],"sourcesContent":["import {\n ArrayColumn,\n BigIntColumn,\n BigSerialColumn,\n BitColumn,\n BitVaryingColumn,\n BooleanColumn,\n BoxColumn,\n ByteaColumn,\n CidrColumn,\n CircleColumn,\n CitextColumn,\n ColumnsShape,\n Column,\n CreateData,\n CreateSelf,\n DateColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n EnumColumn,\n InetColumn,\n IntegerColumn,\n IntervalColumn,\n JSONColumn,\n JSONTextColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MoneyColumn,\n PathColumn,\n PointColumn,\n PolygonColumn,\n PostgisGeographyPointColumn,\n RealColumn,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n StringColumn,\n TextColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n VirtualColumn,\n XMLColumn,\n BaseNumberData,\n ColumnSchemaConfig,\n emptyObject,\n EmptyObject,\n MaybePromise,\n PickQueryShape,\n RecordUnknown,\n StringData,\n getPrimaryKeys,\n Query,\n} from 'pqb';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype ColumnFactory = (sequence: number) => unknown;\n\ninterface FakeDataDefineColumnFactories {\n [K: string]: (column: Column.Pick.Data) => ColumnFactory;\n}\n\ninterface ColumnFactories {\n [K: string]: ColumnFactory;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineColumnFactories;\n}\n\ntype FactoryExtend<T extends PickQueryShape> = {\n [K in keyof T['shape']]?: (sequence: number) => T['shape'][K]['outputType'];\n};\n\nexport interface TableFactoryConfig<T extends PickQueryShape>\n extends FactoryConfig {\n extend?: FactoryExtend<T>;\n}\n\nexport interface OrmFactoryConfig<T> extends FactoryConfig {\n extend?: {\n [K in keyof T]?: T[K] extends PickQueryShape ? FactoryExtend<T[K]> : never;\n };\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} & RecordUnknown;\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 [K in keyof T['table']]: K extends 'inputType'\n ? {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => MaybePromise<T['table']['inputType'][K]>);\n }\n : T['table'][K];\n}>;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnsShape.Output<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n if (value !== undefined) {\n (res as unknown as RecordUnknown)[key] = value;\n }\n });\n return res;\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n columnFactories: ColumnFactories,\n data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n columnFactories = omit(columnFactories, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n columnFactories = pick(columnFactories, pickValues);\n allData = pick(allData, pickValues);\n }\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n const sequence = factory.sequence++;\n\n const result: RecordUnknown = {};\n for (const key in columnFactories) {\n result[key] = columnFactories[key](sequence);\n }\n\n for (const key in data) {\n const value = (data as RecordUnknown)[key];\n if (typeof value === 'function') {\n result[key] = value(sequence);\n } else {\n result[key] = value;\n }\n }\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst getFactoryPrimaryKeys = (factory: TestFactory) => {\n return getPrimaryKeys(factory.table as unknown as Query).filter((key) => {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n return 'identity' in item.data || item.dataType.includes('serial');\n });\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n columnFactoriesNoPkeys: ColumnFactories,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in columnFactoriesNoPkeys) {\n pick[key] = true;\n }\n\n for (const key of getFactoryPrimaryKeys(factory)) {\n delete pick[key];\n }\n\n const shared: RecordUnknown = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as RecordUnknown;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n columnFactoriesNoPkeys[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n return async (arg?: CreateArg<T>) => {\n const { sequence } = factory;\n factory.sequence++;\n\n const result = { ...shared };\n for (const key in pick) {\n result[key] = columnFactoriesNoPkeys[key](sequence);\n }\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 columnFactoriesNoPkeys) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await columnFactoriesNoPkeys[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends CreateSelf = CreateSelf,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n private readonly data: RecordUnknown = {};\n private columnFactoriesNoPkeys?: ColumnFactories;\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n private columnFactories: ColumnFactories,\n options: TableFactoryConfig<PickQueryShape> = {},\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 private getColumnFactoriesNoPkeys() {\n let value = this.columnFactoriesNoPkeys;\n if (!value) {\n value = { ...this.columnFactories };\n for (const key of getFactoryPrimaryKeys(this)) {\n delete value[key];\n }\n this.columnFactoriesNoPkeys = value;\n }\n return value;\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 } & RecordUnknown,\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 // TODO: consider memoizing the base case\n const build = makeBuild(\n this,\n this.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\n );\n\n return Array.from({ length: qty }, () => 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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n return (await (this.table as unknown as Query).create(\n await getData(),\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await (this.table as unknown as Query).createMany(\n arr as CreateData<T['table']>[],\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n );\n const data = await Promise.all(arr.map(getData));\n return (await (this.table as unknown as Query).createMany(\n data as CreateData<T['table']>[],\n )) as never;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Type> {\n const { table, columnFactories } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, columnFactories);\n }\n };\n }\n}\n\ntype TableFactory<T extends CreateSelf> = TestFactory<\n T,\n ColumnsShape.Output<T['shape']>\n>;\n\nlet fixedTime: Date | undefined;\nlet fixedTZ: string | undefined;\n\nconst int = (min: number, max: number) => faker.number.int({ min, max });\n\nconst float = (min: number, max: number, multipleOf: number) =>\n faker.number.float({\n min,\n max,\n multipleOf,\n });\n\nconst point = () => float(-100, 100, 0.01);\n\nconst isoTime = (c: Column.Pick.Data, sequence: number) => {\n const data = c.data as { min?: Date; max?: Date };\n\n return (\n data.min || data.max\n ? faker.date.between({\n from: data.min || new Date(-8640000000000000),\n to: data.max || new Date(8640000000000000),\n })\n : new Date((fixedTime ??= faker.date.anytime()).getTime() + sequence)\n ).toISOString();\n};\n\nconst bool = () => faker.datatype.boolean();\n\nconst arr = (min: number, max: number, fn: (_: void, i: number) => unknown) =>\n Array.from({ length: int(min, max) }, fn);\n\nconst numOpts = (\n c: { data: BaseNumberData },\n step?: number | bigint,\n min?: number | bigint,\n max?: number | bigint,\n options?: RecordUnknown,\n): RecordUnknown => ({\n min: c.data.gt ? c.data.gt + ((step as number) || 0) : c.data.gte || min,\n max: c.data.lt ? c.data.lt - ((step as number) || 0) : c.data.lte || max,\n ...options,\n});\n\nconst num = (\n uniqueColumns: Set<string>,\n key: string,\n c: Column<ColumnSchemaConfig>,\n method: 'int' | 'float' | 'bigInt' | 'amount',\n {\n step,\n min,\n max,\n module = 'number',\n ...options\n }: {\n step?: number | bigint;\n min?: number | bigint;\n max?: number | bigint;\n module?: 'number' | 'finance';\n fractionDigits?: number;\n symbol?: string;\n } = {},\n): ((sequence: number) => unknown) => {\n const opts = numOpts(c, step, min, max, options);\n\n if (uniqueColumns.has(key)) {\n if (method === 'int' || method === 'float' || method === 'amount') {\n const st = (step as number | undefined) || 1;\n\n let min = ((opts.min as number | undefined) ?? 0) - st;\n if (min < 0) min = 0;\n\n const { symbol } = options;\n if (symbol) {\n return (sequence: number) => `${symbol}${min + sequence * st}`;\n } else {\n return (sequence: number) => min + sequence * st;\n }\n }\n\n if (method === 'bigInt') {\n const st = (step as bigint | undefined) || 1n;\n\n let min = ((opts.min as bigint | undefined) ?? 0n) - st;\n if (min < 0n) min = 0n;\n\n return (sequence: number) => min + BigInt(sequence) * st;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return () => (faker as any)[module][method](opts);\n};\n\nconst makeGeneratorForColumn = (\n config: FactoryConfig,\n table: PickQueryShape,\n uniqueColumns: Set<string>,\n key: string,\n c: Column.Pick.DataAndDataType,\n): ((sequence: number) => unknown) | undefined => {\n let fn: (sequence: number) => unknown;\n\n const custom = config.fakeDataForTypes?.[c.dataType]?.(c);\n if (custom) {\n fn = custom;\n } else if (c instanceof EnumColumn) {\n fn = () => faker.helpers.arrayElement(c.options);\n } else if (c instanceof ArrayColumn) {\n fn = () =>\n arr(\n 1,\n 5,\n makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n c.data.item,\n ) as () => unknown,\n );\n } else if (c instanceof SmallIntColumn || c instanceof SmallSerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -32768,\n max: 32767,\n });\n } else if (c instanceof IntegerColumn || c instanceof SerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -2147483648,\n max: 2147483648,\n });\n } else if (c instanceof BigIntColumn || c instanceof BigSerialColumn) {\n fn = num(uniqueColumns, key, c, 'bigInt', {\n step: 1n,\n min: BigInt('-9223372036854775808'),\n max: BigInt('9223372036854775807'),\n });\n } else if (c instanceof DecimalColumn || c instanceof DoublePrecisionColumn) {\n fn = num(uniqueColumns, key, c, 'float', {\n fractionDigits: c.data.numericScale,\n });\n } else if (c instanceof RealColumn) {\n fn = num(uniqueColumns, key, c, 'float');\n } else if (c instanceof MoneyColumn) {\n fn = num(uniqueColumns, key, c, 'amount', {\n module: 'finance',\n symbol: '$',\n });\n } else if (\n c instanceof VarCharColumn ||\n c instanceof TextColumn ||\n c instanceof StringColumn ||\n c instanceof CitextColumn\n ) {\n const data = c.data as StringData;\n const lowerKey = key.toLowerCase();\n const strippedKey = lowerKey.replace(/_|-/g, '');\n\n let gen: ((sequence: number) => string) | undefined;\n const min = data.length ?? data.min ?? data.nonEmpty ? 1 : 0;\n const max = Math.min(\n data.length ?? data.max ?? Infinity,\n config.maxTextLength ?? 1000,\n );\n const { includes, startsWith, endsWith, trim, toLowerCase, toUpperCase } =\n data;\n\n let isEmail = false;\n let isUrl = false;\n\n if (data.email) {\n isEmail = true;\n gen = () => faker.internet.email();\n } else if (data.emoji) {\n gen = () => faker.internet.emoji();\n } else if (data.url) {\n isUrl = true;\n gen = () => faker.internet.url();\n } else if (data.uuid) {\n gen = () => faker.string.uuid();\n } else if (data.datetime) {\n gen = (sequence) => isoTime(c, sequence);\n } else if (data.ipv4) {\n gen = () => faker.internet.ipv4();\n } else if (data.ipv6) {\n gen = () => faker.internet.ipv6();\n } else if (data.regex) {\n const generator = new randexp(data.regex);\n\n generator.randInt = (min: number, max: number) =>\n faker.number.int({ min, max });\n\n if (max !== Infinity) {\n generator.max = max;\n }\n\n gen = () => generator.gen();\n } else if (strippedKey === 'name') {\n gen = () => faker.person.fullName();\n } else if (strippedKey === 'phonenumber') {\n gen = () => faker.phone.number();\n } else if (strippedKey === 'image' || strippedKey === 'imageurl') {\n gen = () => faker.image.url();\n } else {\n for (const sectionKey in faker) {\n for (const key in faker[sectionKey as keyof typeof faker]) {\n if (key === strippedKey) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (faker as any)[sectionKey][key];\n gen = () => String(fn());\n\n if (key === 'email') isEmail = true;\n else if (key === 'url') isUrl = true;\n }\n }\n }\n\n if (!gen) gen = () => faker.food.dish();\n }\n\n const isUnique = uniqueColumns.has(key);\n\n fn = (sequence) => {\n const seq = sequence++;\n\n let s = gen(seq);\n\n if (isUnique) {\n if (isEmail) s = `${seq}-${s}`;\n else if (isUrl) s = s.replace('://', `://${seq}-`);\n else s = `${seq} ${s}`;\n }\n\n while (s.length < min) {\n s += gen(seq);\n\n if (trim) s = s.trim();\n }\n\n if (s.length > max) {\n s = s.slice(0, max);\n\n if (trim) {\n s = s.trim();\n while (s.length < min) {\n s += gen(seq);\n if (trim) s = s.trim();\n }\n }\n }\n\n if (startsWith) {\n s = startsWith + s.slice(startsWith.length);\n }\n\n if (includes) {\n const start = Math.max(\n 0,\n Math.floor(s.length / 2) - Math.floor(includes.length / 2),\n );\n s = s.slice(0, start) + includes + s.slice(start + includes.length);\n }\n\n if (endsWith) {\n s = s.slice(0, endsWith.length + 1) + endsWith;\n }\n\n return toLowerCase\n ? s.toLocaleLowerCase()\n : toUpperCase\n ? s.toLocaleUpperCase()\n : s;\n };\n } else if (c instanceof ByteaColumn) {\n fn = () => Buffer.from(arr(1, 10, () => int(0, 255)) as number[]);\n } else if (c instanceof DateColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[0];\n } else if (c instanceof TimestampColumn || c instanceof TimestampTZColumn) {\n const hasTZ = c instanceof TimestampTZColumn;\n fn = (sequence) => {\n let timestamp = isoTime(c, sequence).replace('T', ' ');\n\n if (hasTZ) {\n if (!fixedTZ) {\n const minOffset = -720; // UTC-12:00\n const maxOffset = 840; // UTC+14:00\n const randomOffset = int(minOffset, maxOffset);\n\n const sign = randomOffset >= 0 ? '+' : '-';\n const absOffset = Math.abs(randomOffset);\n const hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n const minutes = String(absOffset % 60).padStart(2, '0');\n\n fixedTZ = `${sign}${hours}:${minutes}`;\n }\n\n timestamp += fixedTZ;\n }\n\n return timestamp;\n };\n } else if (c instanceof TimeColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[1].replace(/\\..+/, '');\n } else if (c instanceof IntervalColumn) {\n fn = () => {\n const years = int(0, 10);\n const months = int(0, 11);\n const days = int(0, 30);\n const hours = int(0, 23);\n const minutes = int(0, 59);\n const seconds = float(0, 59, 0.1);\n\n return `${years} years ${months} mons ${days} days ${hours} hours ${minutes} mins ${seconds.toFixed(\n 1,\n )} secs`;\n };\n } else if (c instanceof BooleanColumn) {\n fn = bool;\n } else if (c instanceof PointColumn) {\n fn = () => `(${point()}, ${point()})`;\n } else if (c instanceof LineColumn) {\n fn = () => `{${point()},${point()},${point()}}`;\n } else if (c instanceof LsegColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof BoxColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof PathColumn) {\n fn = () => {\n const s = arr(2, 10, () => `(${point()}, ${point()})`).join(', ');\n return bool() ? `[${s}]` : `(${s})`;\n };\n } else if (c instanceof PolygonColumn) {\n fn = () => `(${arr(2, 10, () => `(${point()}, ${point()})`).join(', ')})`;\n } else if (c instanceof CircleColumn) {\n fn = () => `<(${point()}, ${point()}), ${float(0, 100, 0.01)}>`;\n } else if (c instanceof CidrColumn) {\n fn = () => `${faker.internet.ip()}/${int(0, 32)}`;\n } else if (c instanceof InetColumn) {\n fn = () => (bool() ? faker.internet.ip() : faker.internet.ipv6());\n } else if (c instanceof MacAddrColumn) {\n fn = () => faker.internet.mac();\n } else if (c instanceof MacAddr8Column) {\n fn = () =>\n Array.from({ length: 8 }, () =>\n faker.string.hexadecimal({ length: 2 }),\n ).join(':');\n } else if (c instanceof BitColumn) {\n const { length } = c.data;\n\n fn = () => Array.from({ length }, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof BitVaryingColumn) {\n const length = c.data.length;\n\n fn = () => arr(1, length || 100, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof TsVectorColumn) {\n fn = () => arr(1, 10, () => faker.lorem.word()).join(' ');\n } else if (c instanceof TsQueryColumn) {\n fn = () => {\n const operators = ['&', '|', '<->'];\n return arr(1, 10, (_, i) => {\n const word = faker.lorem.word();\n return i === 0\n ? word\n : faker.helpers.arrayElement(operators) + ' ' + word;\n }).join(' ');\n };\n } else if (c instanceof UUIDColumn) {\n fn = () => faker.string.uuid();\n } else if (c instanceof XMLColumn) {\n fn = () =>\n '<items>\\n' +\n arr(\n 1,\n 5,\n () =>\n ` <item>\n <id>${faker.string.uuid()}</id>\n <name>${faker.person.firstName()}</name>\n <email>${faker.internet.email()}</email>\n <address>${faker.location.streetAddress()}</address>\n <created_at>${faker.date.past().toISOString()}</created_at>\n </item>\n`,\n ).join('') +\n '</items>';\n } else if (c instanceof JSONColumn || c instanceof JSONTextColumn) {\n fn = () =>\n JSON.stringify(\n arr(1, 5, () => ({\n id: faker.string.uuid(),\n name: faker.person.firstName(),\n email: faker.internet.email(),\n address: {\n street: faker.location.streetAddress(),\n city: faker.location.city(),\n state: faker.location.state(),\n zip: faker.location.zipCode(),\n },\n createdAt: faker.date.past().toISOString(),\n })),\n );\n } else if (c instanceof VirtualColumn) {\n return;\n } else if (c instanceof PostgisGeographyPointColumn) {\n fn = () => {\n const lon = faker.location.longitude({ min: -180, max: 180 });\n const lat = faker.location.latitude({ min: -90, max: 90 });\n return PostgisGeographyPointColumn.encode({ lon, lat });\n };\n } else {\n const as = c.data.as;\n if (!as) {\n throw new Error(\n `Don't know how to generate data for column ${\n (table as unknown as Query).table\n }.${key} that has no \\`as\\``,\n );\n }\n\n return makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n as as never,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return fn;\n};\n\nexport const tableFactory = <T extends CreateSelf>(\n table: T,\n config?: TableFactoryConfig<T>,\n): TableFactory<T> => {\n const { shape } = table;\n const columnFactories: { [K: string]: (sequence: number) => unknown } = {\n ...config?.extend,\n } as never;\n\n const uniqueColumns = new Set<string>();\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const {\n data: { indexes, primaryKey },\n } = shape[key] as Column;\n\n if (primaryKey) {\n uniqueColumns.add(key);\n continue;\n }\n\n if (!indexes) continue;\n\n for (const index of indexes) {\n if (index.options.unique) {\n uniqueColumns.add(key);\n break;\n }\n }\n }\n\n const { primaryKey, indexes } = (table as unknown as Query).internal\n .tableData;\n if (primaryKey) {\n for (const key of primaryKey.columns) {\n if (columnFactories[key]) continue;\n\n uniqueColumns.add(key);\n }\n }\n\n if (indexes) {\n for (const index of indexes) {\n if (index.options.unique) {\n for (const item of index.columns) {\n if ('column' in item) {\n uniqueColumns.add(item.column);\n }\n }\n }\n }\n }\n\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const fn = makeGeneratorForColumn(\n config || emptyObject,\n table,\n uniqueColumns,\n key,\n (shape as unknown as ColumnsShape)[key],\n );\n if (fn) columnFactories[key] = fn;\n }\n\n return new TestFactory(table, columnFactories, config) as TableFactory<T>;\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends CreateSelf ? TableFactory<T[K]> : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: OrmFactoryConfig<T>,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: RecordUnknown = {};\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 CreateSelf,\n {\n ...options,\n extend: options?.extend?.[key],\n },\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","pick","arr","min","max","key","fn","indexes","primaryKey"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/factory.ts"],"sourcesContent":["import { Column, Query } from 'pqb/internal';\nimport {\n ArrayColumn,\n BigIntColumn,\n BigSerialColumn,\n BitColumn,\n BitVaryingColumn,\n BooleanColumn,\n BoxColumn,\n ByteaColumn,\n CidrColumn,\n CircleColumn,\n CitextColumn,\n ColumnsShape,\n ColumnSchemaConfig,\n CreateData,\n CreateSelf,\n DateColumn,\n DecimalColumn,\n DoublePrecisionColumn,\n EmptyObject,\n EnumColumn,\n getPrimaryKeys,\n InetColumn,\n IntegerColumn,\n IntervalColumn,\n JSONColumn,\n JSONTextColumn,\n LineColumn,\n LsegColumn,\n MacAddr8Column,\n MacAddrColumn,\n MaybePromise,\n MoneyColumn,\n PathColumn,\n PickQueryShape,\n PointColumn,\n PolygonColumn,\n PostgisGeographyPointColumn,\n RealColumn,\n RecordUnknown,\n SerialColumn,\n SmallIntColumn,\n SmallSerialColumn,\n StringColumn,\n StringData,\n TextColumn,\n TimeColumn,\n TimestampColumn,\n TimestampTZColumn,\n TsQueryColumn,\n TsVectorColumn,\n UUIDColumn,\n VarCharColumn,\n VirtualColumn,\n XMLColumn,\n type BaseNumberData,\n emptyObject,\n} from 'pqb/internal';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype ColumnFactory = (sequence: number) => unknown;\n\ninterface FakeDataDefineColumnFactories {\n [K: string]: (column: Column.Pick.Data) => ColumnFactory;\n}\n\ninterface ColumnFactories {\n [K: string]: ColumnFactory;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineColumnFactories;\n}\n\ntype FactoryExtend<T extends PickQueryShape> = {\n [K in keyof T['shape']]?: (sequence: number) => T['shape'][K]['outputType'];\n};\n\nexport interface TableFactoryConfig<T extends PickQueryShape>\n extends FactoryConfig {\n extend?: FactoryExtend<T>;\n}\n\nexport interface OrmFactoryConfig<T> extends FactoryConfig {\n extend?: {\n [K in keyof T]?: T[K] extends PickQueryShape ? FactoryExtend<T[K]> : never;\n };\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} & RecordUnknown;\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 [K in keyof T['table']]: K extends 'inputType'\n ? {\n [K in keyof T['table']['inputType']]?:\n | T['table']['inputType'][K]\n | ((sequence: number) => MaybePromise<T['table']['inputType'][K]>);\n }\n : T['table'][K];\n}>;\n\ntype CreateResult<T extends TestFactory> = Result<\n T,\n ColumnsShape.Output<T['table']['shape']>\n>;\n\nconst omit = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n });\n return res;\n};\n\nconst pick = <T, Keys extends RecordUnknown>(\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 RecordUnknown)[key];\n if (value !== undefined) {\n (res as unknown as RecordUnknown)[key] = value;\n }\n });\n return res;\n};\n\nconst makeBuild = <T extends TestFactory, Data extends BuildArg<T>>(\n factory: T,\n columnFactories: ColumnFactories,\n data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n columnFactories = omit(columnFactories, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n columnFactories = pick(columnFactories, pickValues);\n allData = pick(allData, pickValues);\n }\n\n return (arg?: BuildArg<T>) => {\n const data = arg ? { ...allData, ...arg } : allData;\n const sequence = factory.sequence++;\n\n const result: RecordUnknown = {};\n for (const key in columnFactories) {\n result[key] = columnFactories[key](sequence);\n }\n\n for (const key in data) {\n const value = (data as RecordUnknown)[key];\n if (typeof value === 'function') {\n result[key] = value(sequence);\n } else {\n result[key] = value;\n }\n }\n\n return result as BuildResult<T, Data>;\n };\n};\n\nconst getFactoryPrimaryKeys = (factory: TestFactory) => {\n return getPrimaryKeys(factory.table as unknown as Query).filter((key) => {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n return 'identity' in item.data || item.dataType.includes('serial');\n });\n};\n\nconst processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n columnFactoriesNoPkeys: ColumnFactories,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const pick: Record<string, true> = {};\n for (const key in columnFactoriesNoPkeys) {\n pick[key] = true;\n }\n\n for (const key of getFactoryPrimaryKeys(factory)) {\n delete pick[key];\n }\n\n const shared: RecordUnknown = {};\n\n const allData = (arg ? { ...data, ...arg } : data) as RecordUnknown;\n\n for (const key in allData) {\n delete pick[key];\n const value = allData[key];\n if (typeof value === 'function') {\n columnFactoriesNoPkeys[key] = value as () => unknown;\n } else {\n shared[key] = value;\n }\n }\n\n return async (arg?: CreateArg<T>) => {\n const { sequence } = factory;\n factory.sequence++;\n\n const result = { ...shared };\n for (const key in pick) {\n result[key] = columnFactoriesNoPkeys[key](sequence);\n }\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 columnFactoriesNoPkeys) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await columnFactoriesNoPkeys[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n return result as CreateData<T['table']>;\n };\n};\n\nexport class TestFactory<\n Q extends CreateSelf = CreateSelf,\n Type extends EmptyObject = EmptyObject,\n> {\n sequence: number;\n private readonly omitValues: Record<PropertyKey, true> = {};\n private readonly pickValues: Record<PropertyKey, true> = {};\n private readonly data: RecordUnknown = {};\n private columnFactoriesNoPkeys?: ColumnFactories;\n\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n private columnFactories: ColumnFactories,\n options: TableFactoryConfig<PickQueryShape> = {},\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 private getColumnFactoriesNoPkeys() {\n let value = this.columnFactoriesNoPkeys;\n if (!value) {\n value = { ...this.columnFactories };\n for (const key of getFactoryPrimaryKeys(this)) {\n delete value[key];\n }\n this.columnFactoriesNoPkeys = value;\n }\n return value;\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 } & RecordUnknown,\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 // TODO: consider memoizing the base case\n const build = makeBuild(\n this,\n this.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\n data,\n );\n\n return Array.from({ length: qty }, () => 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.columnFactories,\n this.data,\n this.omitValues,\n this.pickValues,\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n return (await (this.table as unknown as Query).create(\n await getData(),\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n data,\n );\n const arr = await Promise.all([...Array(qty)].map(() => getData()));\n return (await (this.table as unknown as Query).createMany(\n arr as CreateData<T['table']>[],\n )) as never;\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(\n this,\n this.getColumnFactoriesNoPkeys(),\n this.data,\n );\n const data = await Promise.all(arr.map(getData));\n return (await (this.table as unknown as Query).createMany(\n data as CreateData<T['table']>[],\n )) as never;\n }\n\n extend<T extends this>(this: T): new () => TestFactory<Q, Type> {\n const { table, columnFactories } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, columnFactories);\n }\n };\n }\n}\n\ntype TableFactory<T extends CreateSelf> = TestFactory<\n T,\n ColumnsShape.Output<T['shape']>\n>;\n\nlet fixedTime: Date | undefined;\nlet fixedTZ: string | undefined;\n\nconst int = (min: number, max: number) => faker.number.int({ min, max });\n\nconst float = (min: number, max: number, multipleOf: number) =>\n faker.number.float({\n min,\n max,\n multipleOf,\n });\n\nconst point = () => float(-100, 100, 0.01);\n\nconst isoTime = (c: Column.Pick.Data, sequence: number) => {\n const data = c.data as { min?: Date; max?: Date };\n\n return (\n data.min || data.max\n ? faker.date.between({\n from: data.min || new Date(-8640000000000000),\n to: data.max || new Date(8640000000000000),\n })\n : new Date((fixedTime ??= faker.date.anytime()).getTime() + sequence)\n ).toISOString();\n};\n\nconst bool = () => faker.datatype.boolean();\n\nconst arr = (min: number, max: number, fn: (_: void, i: number) => unknown) =>\n Array.from({ length: int(min, max) }, fn);\n\nconst numOpts = (\n c: { data: BaseNumberData },\n step?: number | bigint,\n min?: number | bigint,\n max?: number | bigint,\n options?: RecordUnknown,\n): RecordUnknown => ({\n min: c.data.gt ? c.data.gt + ((step as number) || 0) : c.data.gte || min,\n max: c.data.lt ? c.data.lt - ((step as number) || 0) : c.data.lte || max,\n ...options,\n});\n\nconst num = (\n uniqueColumns: Set<string>,\n key: string,\n c: Column<ColumnSchemaConfig>,\n method: 'int' | 'float' | 'bigInt' | 'amount',\n {\n step,\n min,\n max,\n module = 'number',\n ...options\n }: {\n step?: number | bigint;\n min?: number | bigint;\n max?: number | bigint;\n module?: 'number' | 'finance';\n fractionDigits?: number;\n symbol?: string;\n } = {},\n): ((sequence: number) => unknown) => {\n const opts = numOpts(c, step, min, max, options);\n\n if (uniqueColumns.has(key)) {\n if (method === 'int' || method === 'float' || method === 'amount') {\n const st = (step as number | undefined) || 1;\n\n let min = ((opts.min as number | undefined) ?? 0) - st;\n if (min < 0) min = 0;\n\n const { symbol } = options;\n if (symbol) {\n return (sequence: number) => `${symbol}${min + sequence * st}`;\n } else {\n return (sequence: number) => min + sequence * st;\n }\n }\n\n if (method === 'bigInt') {\n const st = (step as bigint | undefined) || 1n;\n\n let min = ((opts.min as bigint | undefined) ?? 0n) - st;\n if (min < 0n) min = 0n;\n\n return (sequence: number) => min + BigInt(sequence) * st;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return () => (faker as any)[module][method](opts);\n};\n\nconst makeGeneratorForColumn = (\n config: FactoryConfig,\n table: PickQueryShape,\n uniqueColumns: Set<string>,\n key: string,\n c: Column.Pick.DataAndDataType,\n): ((sequence: number) => unknown) | undefined => {\n let fn: (sequence: number) => unknown;\n\n const custom = config.fakeDataForTypes?.[c.dataType]?.(c);\n if (custom) {\n fn = custom;\n } else if (c instanceof EnumColumn) {\n fn = () => faker.helpers.arrayElement(c.options);\n } else if (c instanceof ArrayColumn) {\n fn = () =>\n arr(\n 1,\n 5,\n makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n c.data.item,\n ) as () => unknown,\n );\n } else if (c instanceof SmallIntColumn || c instanceof SmallSerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -32768,\n max: 32767,\n });\n } else if (c instanceof IntegerColumn || c instanceof SerialColumn) {\n fn = num(uniqueColumns, key, c, 'int', {\n step: 1,\n min: -2147483648,\n max: 2147483648,\n });\n } else if (c instanceof BigIntColumn || c instanceof BigSerialColumn) {\n fn = num(uniqueColumns, key, c, 'bigInt', {\n step: 1n,\n min: BigInt('-9223372036854775808'),\n max: BigInt('9223372036854775807'),\n });\n } else if (c instanceof DecimalColumn || c instanceof DoublePrecisionColumn) {\n fn = num(uniqueColumns, key, c, 'float', {\n fractionDigits: c.data.numericScale,\n });\n } else if (c instanceof RealColumn) {\n fn = num(uniqueColumns, key, c, 'float');\n } else if (c instanceof MoneyColumn) {\n fn = num(uniqueColumns, key, c, 'amount', {\n module: 'finance',\n symbol: '$',\n });\n } else if (\n c instanceof VarCharColumn ||\n c instanceof TextColumn ||\n c instanceof StringColumn ||\n c instanceof CitextColumn\n ) {\n const data = c.data as StringData;\n const lowerKey = key.toLowerCase();\n const strippedKey = lowerKey.replace(/_|-/g, '');\n\n let gen: ((sequence: number) => string) | undefined;\n const min = data.length ?? data.min ?? data.nonEmpty ? 1 : 0;\n const max = Math.min(\n data.length ?? data.max ?? Infinity,\n config.maxTextLength ?? 1000,\n );\n const { includes, startsWith, endsWith, trim, toLowerCase, toUpperCase } =\n data;\n\n let isEmail = false;\n let isUrl = false;\n\n if (data.email) {\n isEmail = true;\n gen = () => faker.internet.email();\n } else if (data.emoji) {\n gen = () => faker.internet.emoji();\n } else if (data.url) {\n isUrl = true;\n gen = () => faker.internet.url();\n } else if (data.uuid) {\n gen = () => faker.string.uuid();\n } else if (data.datetime) {\n gen = (sequence) => isoTime(c, sequence);\n } else if (data.ipv4) {\n gen = () => faker.internet.ipv4();\n } else if (data.ipv6) {\n gen = () => faker.internet.ipv6();\n } else if (data.regex) {\n const generator = new randexp(data.regex);\n\n generator.randInt = (min: number, max: number) =>\n faker.number.int({ min, max });\n\n if (max !== Infinity) {\n generator.max = max;\n }\n\n gen = () => generator.gen();\n } else if (strippedKey === 'name') {\n gen = () => faker.person.fullName();\n } else if (strippedKey === 'phonenumber') {\n gen = () => faker.phone.number();\n } else if (strippedKey === 'image' || strippedKey === 'imageurl') {\n gen = () => faker.image.url();\n } else {\n for (const sectionKey in faker) {\n for (const key in faker[sectionKey as keyof typeof faker]) {\n if (key === strippedKey) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (faker as any)[sectionKey][key];\n gen = () => String(fn());\n\n if (key === 'email') isEmail = true;\n else if (key === 'url') isUrl = true;\n }\n }\n }\n\n if (!gen) gen = () => faker.food.dish();\n }\n\n const isUnique = uniqueColumns.has(key);\n\n fn = (sequence) => {\n const seq = sequence++;\n\n let s = gen(seq);\n\n if (isUnique) {\n if (isEmail) s = `${seq}-${s}`;\n else if (isUrl) s = s.replace('://', `://${seq}-`);\n else s = `${seq} ${s}`;\n }\n\n while (s.length < min) {\n s += gen(seq);\n\n if (trim) s = s.trim();\n }\n\n if (s.length > max) {\n s = s.slice(0, max);\n\n if (trim) {\n s = s.trim();\n while (s.length < min) {\n s += gen(seq);\n if (trim) s = s.trim();\n }\n }\n }\n\n if (startsWith) {\n s = startsWith + s.slice(startsWith.length);\n }\n\n if (includes) {\n const start = Math.max(\n 0,\n Math.floor(s.length / 2) - Math.floor(includes.length / 2),\n );\n s = s.slice(0, start) + includes + s.slice(start + includes.length);\n }\n\n if (endsWith) {\n s = s.slice(0, endsWith.length + 1) + endsWith;\n }\n\n return toLowerCase\n ? s.toLocaleLowerCase()\n : toUpperCase\n ? s.toLocaleUpperCase()\n : s;\n };\n } else if (c instanceof ByteaColumn) {\n fn = () => Buffer.from(arr(1, 10, () => int(0, 255)) as number[]);\n } else if (c instanceof DateColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[0];\n } else if (c instanceof TimestampColumn || c instanceof TimestampTZColumn) {\n const hasTZ = c instanceof TimestampTZColumn;\n fn = (sequence) => {\n let timestamp = isoTime(c, sequence).replace('T', ' ');\n\n if (hasTZ) {\n if (!fixedTZ) {\n const minOffset = -720; // UTC-12:00\n const maxOffset = 840; // UTC+14:00\n const randomOffset = int(minOffset, maxOffset);\n\n const sign = randomOffset >= 0 ? '+' : '-';\n const absOffset = Math.abs(randomOffset);\n const hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n const minutes = String(absOffset % 60).padStart(2, '0');\n\n fixedTZ = `${sign}${hours}:${minutes}`;\n }\n\n timestamp += fixedTZ;\n }\n\n return timestamp;\n };\n } else if (c instanceof TimeColumn) {\n fn = (sequence) => isoTime(c, sequence).split('T')[1].replace(/\\..+/, '');\n } else if (c instanceof IntervalColumn) {\n fn = () => {\n const years = int(0, 10);\n const months = int(0, 11);\n const days = int(0, 30);\n const hours = int(0, 23);\n const minutes = int(0, 59);\n const seconds = float(0, 59, 0.1);\n\n return `${years} years ${months} mons ${days} days ${hours} hours ${minutes} mins ${seconds.toFixed(\n 1,\n )} secs`;\n };\n } else if (c instanceof BooleanColumn) {\n fn = bool;\n } else if (c instanceof PointColumn) {\n fn = () => `(${point()}, ${point()})`;\n } else if (c instanceof LineColumn) {\n fn = () => `{${point()},${point()},${point()}}`;\n } else if (c instanceof LsegColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof BoxColumn) {\n fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;\n } else if (c instanceof PathColumn) {\n fn = () => {\n const s = arr(2, 10, () => `(${point()}, ${point()})`).join(', ');\n return bool() ? `[${s}]` : `(${s})`;\n };\n } else if (c instanceof PolygonColumn) {\n fn = () => `(${arr(2, 10, () => `(${point()}, ${point()})`).join(', ')})`;\n } else if (c instanceof CircleColumn) {\n fn = () => `<(${point()}, ${point()}), ${float(0, 100, 0.01)}>`;\n } else if (c instanceof CidrColumn) {\n fn = () => `${faker.internet.ip()}/${int(0, 32)}`;\n } else if (c instanceof InetColumn) {\n fn = () => (bool() ? faker.internet.ip() : faker.internet.ipv6());\n } else if (c instanceof MacAddrColumn) {\n fn = () => faker.internet.mac();\n } else if (c instanceof MacAddr8Column) {\n fn = () =>\n Array.from({ length: 8 }, () =>\n faker.string.hexadecimal({ length: 2 }),\n ).join(':');\n } else if (c instanceof BitColumn) {\n const { length } = c.data;\n\n fn = () => Array.from({ length }, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof BitVaryingColumn) {\n const length = c.data.length;\n\n fn = () => arr(1, length || 100, () => (bool() ? '1' : '0')).join('');\n } else if (c instanceof TsVectorColumn) {\n fn = () => arr(1, 10, () => faker.lorem.word()).join(' ');\n } else if (c instanceof TsQueryColumn) {\n fn = () => {\n const operators = ['&', '|', '<->'];\n return arr(1, 10, (_, i) => {\n const word = faker.lorem.word();\n return i === 0\n ? word\n : faker.helpers.arrayElement(operators) + ' ' + word;\n }).join(' ');\n };\n } else if (c instanceof UUIDColumn) {\n fn = () => faker.string.uuid();\n } else if (c instanceof XMLColumn) {\n fn = () =>\n '<items>\\n' +\n arr(\n 1,\n 5,\n () =>\n ` <item>\n <id>${faker.string.uuid()}</id>\n <name>${faker.person.firstName()}</name>\n <email>${faker.internet.email()}</email>\n <address>${faker.location.streetAddress()}</address>\n <created_at>${faker.date.past().toISOString()}</created_at>\n </item>\n`,\n ).join('') +\n '</items>';\n } else if (c instanceof JSONColumn || c instanceof JSONTextColumn) {\n fn = () =>\n JSON.stringify(\n arr(1, 5, () => ({\n id: faker.string.uuid(),\n name: faker.person.firstName(),\n email: faker.internet.email(),\n address: {\n street: faker.location.streetAddress(),\n city: faker.location.city(),\n state: faker.location.state(),\n zip: faker.location.zipCode(),\n },\n createdAt: faker.date.past().toISOString(),\n })),\n );\n } else if (c instanceof VirtualColumn) {\n return;\n } else if (c instanceof PostgisGeographyPointColumn) {\n fn = () => {\n const lon = faker.location.longitude({ min: -180, max: 180 });\n const lat = faker.location.latitude({ min: -90, max: 90 });\n return PostgisGeographyPointColumn.encode({ lon, lat });\n };\n } else {\n const as = c.data.as;\n if (!as) {\n throw new Error(\n `Don't know how to generate data for column ${\n (table as unknown as Query).table\n }.${key} that has no \\`as\\``,\n );\n }\n\n return makeGeneratorForColumn(\n config,\n table,\n uniqueColumns,\n key,\n as as never,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return fn;\n};\n\nexport const tableFactory = <T extends CreateSelf>(\n table: T,\n config?: TableFactoryConfig<T>,\n): TableFactory<T> => {\n const { shape } = table;\n const columnFactories: { [K: string]: (sequence: number) => unknown } = {\n ...config?.extend,\n } as never;\n\n const uniqueColumns = new Set<string>();\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const {\n data: { indexes, primaryKey },\n } = shape[key] as Column;\n\n if (primaryKey) {\n uniqueColumns.add(key);\n continue;\n }\n\n if (!indexes) continue;\n\n for (const index of indexes) {\n if (index.options.unique) {\n uniqueColumns.add(key);\n break;\n }\n }\n }\n\n const { primaryKey, indexes } = (table as unknown as Query).internal\n .tableData;\n if (primaryKey) {\n for (const key of primaryKey.columns) {\n if (columnFactories[key]) continue;\n\n uniqueColumns.add(key);\n }\n }\n\n if (indexes) {\n for (const index of indexes) {\n if (index.options.unique) {\n for (const item of index.columns) {\n if ('column' in item) {\n uniqueColumns.add(item.column);\n }\n }\n }\n }\n }\n\n for (const key in shape) {\n if (columnFactories[key]) continue;\n\n const fn = makeGeneratorForColumn(\n config || emptyObject,\n table,\n uniqueColumns,\n key,\n (shape as unknown as ColumnsShape)[key],\n );\n if (fn) columnFactories[key] = fn;\n }\n\n return new TestFactory(table, columnFactories, config) as TableFactory<T>;\n};\n\ntype ORMFactory<T> = {\n [K in keyof T]: T[K] extends CreateSelf ? TableFactory<T[K]> : never;\n};\n\nexport const ormFactory = <T>(\n orm: T,\n options?: OrmFactoryConfig<T>,\n): ORMFactory<T> => {\n const factory = {} as ORMFactory<T>;\n const defined: RecordUnknown = {};\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 CreateSelf,\n {\n ...options,\n extend: options?.extend?.[key],\n },\n ));\n },\n });\n }\n }\n\n return factory;\n};\n"],"names":["arg","data","pick","arr","min","max","key","fn","indexes","primaryKey"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchid-orm-test-factory",
3
- "version": "1.0.110",
3
+ "version": "1.0.112",
4
4
  "description": "Orchid ORM factories for tests",
5
5
  "homepage": "https://orchid-orm.netlify.app/guide/orm-test-factories.html",
6
6
  "repository": {
@@ -30,12 +30,12 @@
30
30
  "license": "ISC",
31
31
  "dependencies": {
32
32
  "randexp": "^0.5.3",
33
- "pqb": "0.61.12"
33
+ "pqb": "0.62.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "zod": "^4.3.6",
37
- "test-utils": "0.3.5",
38
- "orchid-orm": "1.64.9"
37
+ "orchid-orm": "1.65.0",
38
+ "test-utils": "0.3.5"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@faker-js/faker": "9.x"