import "reflect-metadata" import { expect } from "chai" import { DataSource } from "../../../src/data-source/DataSource" import { closeTestingConnections, createTestingConnections, reloadTestingDatabases, } from "../../utils/test-utils" import { TestEntity } from "./entity/TestEntity" describe('github issues > #9341 "bigNumberStrings:false" is not working for postgres', () => { let connections: DataSource[] before( async () => (connections = await createTestingConnections({ entities: [__dirname + "/entity/*{.js,.ts}"], enabledDrivers: ["postgres"], driverSpecific: { parseInt8: true, }, })), ) beforeEach(() => reloadTestingDatabases(connections)) after(() => closeTestingConnections(connections)) it("should fetch big int as number not string when using parseInt8=true", async () => { for (const connection of connections) { const origin = await connection.getRepository(TestEntity).save({ big_int: Number.MAX_SAFE_INTEGER, big_decimal: 1.23456789, }) const result = await connection.getRepository(TestEntity).findOne({ where: { id: origin.id }, }) // count also returns bigint (as string by default) const [{ count }] = await connection.query( `select count(*) from (VALUES (1), (2), (3)) as tmp`, ) // big int should be number expect(typeof result?.big_int).to.eq("number") expect(result?.big_int).to.eq(Number.MAX_SAFE_INTEGER) // big decimal should remain string, only int8 is parsed expect(typeof result?.big_decimal).to.eq("string") expect(result?.big_decimal).to.eq("1.23456789") // count should be number (it is int8) expect(typeof count).to.eq("number") expect(count).to.eq(3) } }) })