orchid-orm-test-factory 1.0.80 → 1.0.82

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.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 Query,\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 getPrimaryKeys,\n MaybePromise,\n PickQueryShape,\n QueryBase,\n RecordUnknown,\n StringData,\n} from 'pqb';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype FakeDataFn = (sequence: number) => unknown;\n\ninterface FakeDataDefineFns {\n [K: string]: (column: Column.Pick.Data) => FakeDataFn;\n}\n\ninterface FakeDataFns {\n [K: string]: FakeDataFn;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineFns;\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 data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let { fns } = factory;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n fns = omit(fns, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n fns = pick(fns, 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 fns) {\n result[key] = fns[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 processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const { fns } = factory;\n\n const pick: Record<string, true> = {};\n for (const key in fns) {\n pick[key] = true;\n }\n\n for (const key of getPrimaryKeys(factory.table as unknown as QueryBase)) {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\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 fns[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] = fns[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 fns) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n 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\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public fns: FakeDataFns,\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 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.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.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(this, this.data, this.omitValues, this.pickValues);\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, data);\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(this, this.data, data);\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(this, this.data);\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, fns } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, fns);\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-exlicit-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 fns: { [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 (fns[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 (fns[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 (fns[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) fns[key] = fn;\n }\n\n return new TestFactory(table, fns, 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","getPrimaryKeys","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 {\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 Query,\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 QueryBase,\n} from 'pqb';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype FakeDataFn = (sequence: number) => unknown;\n\ninterface FakeDataDefineFns {\n [K: string]: (column: Column.Pick.Data) => FakeDataFn;\n}\n\ninterface FakeDataFns {\n [K: string]: FakeDataFn;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineFns;\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 data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let { fns } = factory;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n fns = omit(fns, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n fns = pick(fns, 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 fns) {\n result[key] = fns[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 processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const { fns } = factory;\n\n const pick: Record<string, true> = {};\n for (const key in fns) {\n pick[key] = true;\n }\n\n for (const key of getPrimaryKeys(factory.table as unknown as QueryBase)) {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\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 fns[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] = fns[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 fns) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n 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\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public fns: FakeDataFns,\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 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.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.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(this, this.data, this.omitValues, this.pickValues);\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, data);\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(this, this.data, data);\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(this, this.data);\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, fns } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, fns);\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-exlicit-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 fns: { [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 (fns[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 (fns[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 (fns[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) fns[key] = fn;\n }\n\n return new TestFactory(table, fns, 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","getPrimaryKeys","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 +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 Query,\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 getPrimaryKeys,\n MaybePromise,\n PickQueryShape,\n QueryBase,\n RecordUnknown,\n StringData,\n} from 'pqb';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype FakeDataFn = (sequence: number) => unknown;\n\ninterface FakeDataDefineFns {\n [K: string]: (column: Column.Pick.Data) => FakeDataFn;\n}\n\ninterface FakeDataFns {\n [K: string]: FakeDataFn;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineFns;\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 data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let { fns } = factory;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n fns = omit(fns, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n fns = pick(fns, 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 fns) {\n result[key] = fns[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 processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const { fns } = factory;\n\n const pick: Record<string, true> = {};\n for (const key in fns) {\n pick[key] = true;\n }\n\n for (const key of getPrimaryKeys(factory.table as unknown as QueryBase)) {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\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 fns[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] = fns[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 fns) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n 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\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public fns: FakeDataFns,\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 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.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.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(this, this.data, this.omitValues, this.pickValues);\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, data);\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(this, this.data, data);\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(this, this.data);\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, fns } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, fns);\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-exlicit-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 fns: { [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 (fns[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 (fns[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 (fns[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) fns[key] = fn;\n }\n\n return new TestFactory(table, fns, 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 {\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 Query,\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 QueryBase,\n} from 'pqb';\nimport { faker } from '@faker-js/faker';\nimport randexp from 'randexp';\n\ntype FakeDataFn = (sequence: number) => unknown;\n\ninterface FakeDataDefineFns {\n [K: string]: (column: Column.Pick.Data) => FakeDataFn;\n}\n\ninterface FakeDataFns {\n [K: string]: FakeDataFn;\n}\n\nexport interface FactoryConfig {\n sequence?: number;\n sequenceDistance?: number;\n maxTextLength?: number;\n fakeDataForTypes?: FakeDataDefineFns;\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 data: RecordUnknown,\n omitValues: Record<PropertyKey, true>,\n pickValues: Record<PropertyKey, true>,\n arg?: Data,\n) => {\n let { fns } = factory;\n let allData = arg ? { ...data, ...arg } : data;\n\n if (omitValues) {\n fns = omit(fns, omitValues);\n allData = omit(allData, omitValues);\n }\n\n if (pickValues && Object.keys(pickValues).length) {\n fns = pick(fns, 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 fns) {\n result[key] = fns[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 processCreateData = <T extends TestFactory, Data extends CreateArg<T>>(\n factory: T,\n data: RecordUnknown,\n arg?: Data,\n) => {\n const { fns } = factory;\n\n const pick: Record<string, true> = {};\n for (const key in fns) {\n pick[key] = true;\n }\n\n for (const key of getPrimaryKeys(factory.table as unknown as QueryBase)) {\n const item = factory.table.shape[\n key\n ] as unknown as Column.Pick.DataAndDataType;\n\n if ('identity' in item.data || item.dataType.includes('serial')) {\n delete pick[key];\n }\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 fns[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] = fns[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 fns) {\n if (key in result) continue;\n\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n result[key] = await fns[key](sequence);\n resolve();\n } catch (err) {\n reject(err);\n }\n }),\n );\n }\n\n await Promise.all(promises);\n }\n\n 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\n [metaKey]!: {\n type: Type;\n omit: EmptyObject;\n pick: EmptyObject;\n };\n\n constructor(\n public table: Q,\n public fns: FakeDataFns,\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 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.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.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(this, this.data, this.omitValues, this.pickValues);\n\n return arr.map(build) as { [I in keyof Args]: BuildResult<T, Args[I]> };\n }\n\n async create<T extends this, Data extends CreateArg<T>>(\n this: T,\n data?: Data,\n ): Promise<CreateResult<T>> {\n const getData = processCreateData(this, this.data, data);\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(this, this.data, data);\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(this, this.data);\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, fns } = this;\n\n return class extends TestFactory<Q, Type> {\n constructor() {\n super(table, fns);\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-exlicit-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 fns: { [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 (fns[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 (fns[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 (fns[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) fns[key] = fn;\n }\n\n return new TestFactory(table, fns, 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.80",
3
+ "version": "1.0.82",
4
4
  "description": "Orchid ORM factories for tests",
5
5
  "homepage": "https://orchid-orm.netlify.app/guide/orm-test-factories.html",
6
6
  "repository": {
@@ -29,11 +29,11 @@
29
29
  "license": "ISC",
30
30
  "dependencies": {
31
31
  "randexp": "^0.5.3",
32
- "pqb": "0.58.0"
32
+ "pqb": "0.58.2"
33
33
  },
34
34
  "devDependencies": {
35
35
  "zod": "^4.0.0",
36
- "orchid-orm": "1.59.0",
36
+ "orchid-orm": "1.59.2",
37
37
  "test-utils": "0.3.4"
38
38
  },
39
39
  "peerDependencies": {