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 +1 -1
- package/dist/index.js +40 -40
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
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
|
|
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
|
|
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
|
|
286
|
+
} else if (c instanceof internal.EnumColumn) {
|
|
287
287
|
fn = () => faker.faker.helpers.arrayElement(c.options);
|
|
288
|
-
} else if (c instanceof
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
322
|
+
} else if (c instanceof internal.RealColumn) {
|
|
323
323
|
fn = num(uniqueColumns, key, c, "float");
|
|
324
|
-
} else if (c instanceof
|
|
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
|
|
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
|
|
422
|
+
} else if (c instanceof internal.ByteaColumn) {
|
|
423
423
|
fn = () => Buffer.from(arr(1, 10, () => int(0, 255)));
|
|
424
|
-
} else if (c instanceof
|
|
424
|
+
} else if (c instanceof internal.DateColumn) {
|
|
425
425
|
fn = (sequence) => isoTime(c, sequence).split("T")[0];
|
|
426
|
-
} else if (c instanceof
|
|
427
|
-
const hasTZ = c instanceof
|
|
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
|
|
445
|
+
} else if (c instanceof internal.TimeColumn) {
|
|
446
446
|
fn = (sequence) => isoTime(c, sequence).split("T")[1].replace(/\..+/, "");
|
|
447
|
-
} else if (c instanceof
|
|
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
|
|
459
|
+
} else if (c instanceof internal.BooleanColumn) {
|
|
460
460
|
fn = bool;
|
|
461
|
-
} else if (c instanceof
|
|
461
|
+
} else if (c instanceof internal.PointColumn) {
|
|
462
462
|
fn = () => `(${point()}, ${point()})`;
|
|
463
|
-
} else if (c instanceof
|
|
463
|
+
} else if (c instanceof internal.LineColumn) {
|
|
464
464
|
fn = () => `{${point()},${point()},${point()}}`;
|
|
465
|
-
} else if (c instanceof
|
|
465
|
+
} else if (c instanceof internal.LsegColumn) {
|
|
466
466
|
fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;
|
|
467
|
-
} else if (c instanceof
|
|
467
|
+
} else if (c instanceof internal.BoxColumn) {
|
|
468
468
|
fn = () => `((${point()}, ${point()}), (${point()}, ${point()}))`;
|
|
469
|
-
} else if (c instanceof
|
|
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
|
|
474
|
+
} else if (c instanceof internal.PolygonColumn) {
|
|
475
475
|
fn = () => `(${arr(2, 10, () => `(${point()}, ${point()})`).join(", ")})`;
|
|
476
|
-
} else if (c instanceof
|
|
476
|
+
} else if (c instanceof internal.CircleColumn) {
|
|
477
477
|
fn = () => `<(${point()}, ${point()}), ${float(0, 100, 0.01)}>`;
|
|
478
|
-
} else if (c instanceof
|
|
478
|
+
} else if (c instanceof internal.CidrColumn) {
|
|
479
479
|
fn = () => `${faker.faker.internet.ip()}/${int(0, 32)}`;
|
|
480
|
-
} else if (c instanceof
|
|
480
|
+
} else if (c instanceof internal.InetColumn) {
|
|
481
481
|
fn = () => bool() ? faker.faker.internet.ip() : faker.faker.internet.ipv6();
|
|
482
|
-
} else if (c instanceof
|
|
482
|
+
} else if (c instanceof internal.MacAddrColumn) {
|
|
483
483
|
fn = () => faker.faker.internet.mac();
|
|
484
|
-
} else if (c instanceof
|
|
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
|
|
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
|
|
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
|
|
495
|
+
} else if (c instanceof internal.TsVectorColumn) {
|
|
496
496
|
fn = () => arr(1, 10, () => faker.faker.lorem.word()).join(" ");
|
|
497
|
-
} else if (c instanceof
|
|
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
|
|
505
|
+
} else if (c instanceof internal.UUIDColumn) {
|
|
506
506
|
fn = () => faker.faker.string.uuid();
|
|
507
|
-
} else if (c instanceof
|
|
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
|
|
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
|
|
535
|
+
} else if (c instanceof internal.VirtualColumn) {
|
|
536
536
|
return;
|
|
537
|
-
} else if (c instanceof
|
|
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
|
|
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 ||
|
|
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
|
|
package/dist/index.mjs.map
CHANGED
|
@@ -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.
|
|
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.
|
|
33
|
+
"pqb": "0.62.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"zod": "^4.3.6",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
37
|
+
"orchid-orm": "1.65.0",
|
|
38
|
+
"test-utils": "0.3.5"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@faker-js/faker": "9.x"
|