Skip to content

Commit

Permalink
fix(client): add BigInt to serializeRawParemeters (#6059)
Browse files Browse the repository at this point in the history
  • Loading branch information
williamluke4 committed Mar 15, 2021
1 parent 965d568 commit daf4791
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 56 deletions.
131 changes: 76 additions & 55 deletions src/packages/client/src/__tests__/serializeRawParameters.test.ts
@@ -1,72 +1,93 @@
import { replaceDates } from '../runtime/utils/serializeRawParameters'

test('serializeRawParemeters object', () => {
const data = {
date: new Date('2020-06-22T17:07:16.348Z'),
}

expect(replaceDates(data)).toMatchInlineSnapshot(`
Object {
date: Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
},
import { serializeRawParameters } from '../runtime/utils/serializeRawParameters'
function serializeHelper(data: any) {
return JSON.parse(serializeRawParameters(data))
}
describe('serializeRawParemeters', () => {
test('object', () => {
const data = {
date: new Date('2020-06-22T17:07:16.348Z'),
bigInt: BigInt('321804719213721'),
}
`)
})

test('serializeRawParemeters array', () => {
const data = {
date: [new Date('2020-06-22T17:07:16.348Z')],
}

expect(replaceDates(data)).toMatchInlineSnapshot(`
Object {
date: Array [
Object {
expect(serializeHelper(data)).toMatchInlineSnapshot(`
Object {
bigInt: 321804719213721,
date: Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
},
],
}
`)
})
}
`)
})

test('serializeRawParemeters scalar', () => {
const data = new Date('2020-06-22T17:07:16.348Z')

expect(replaceDates(data)).toMatchInlineSnapshot(`
Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
test('array', () => {
const data = {
date: [new Date('2020-06-22T17:07:16.348Z')],
bigInt: [BigInt('321804719213721')],
}
`)
})

test('serializeRawParemeters nested', () => {
const data = {
deep: {
date: [
new Date('2020-06-22T17:07:16.348Z'),
new Date('2020-06-22T17:07:16.348Z'),
],
},
}

expect(replaceDates(data)).toMatchInlineSnapshot(`
Object {
deep: Object {
expect(serializeHelper(data)).toMatchInlineSnapshot(`
Object {
bigInt: Array [
321804719213721,
],
date: Array [
Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
},
Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
},
],
}
`)
})

test('scalar date', () => {
const data = new Date('2020-06-22T17:07:16.348Z')

expect(serializeHelper(data)).toMatchInlineSnapshot(`
Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
}
`)
})

test('scalar bigInt', () => {
const data = BigInt('321804719213721')

expect(serializeHelper(data)).toMatchInlineSnapshot(`321804719213721`)
})

test('nested', () => {
const data = {
deep: {
date: [
new Date('2020-06-22T17:07:16.348Z'),
new Date('2020-06-22T17:07:16.348Z'),
],
bigInt: [BigInt('321804719213721'), BigInt('321804719213721')],
},
}
`)

expect(serializeHelper(data)).toMatchInlineSnapshot(`
Object {
deep: Object {
bigInt: Array [
321804719213721,
321804719213721,
],
date: Array [
Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
},
Object {
prisma__type: date,
prisma__value: 2020-06-22T17:07:16.348Z,
},
],
},
}
`)
})
})
35 changes: 34 additions & 1 deletion src/packages/client/src/runtime/utils/serializeRawParameters.ts
@@ -1,5 +1,5 @@
export function serializeRawParameters(data: any): string {
return JSON.stringify(replaceDates(data))
return JSON.stringify(serializeBigInt(replaceDates(data)))
}

/**
Expand Down Expand Up @@ -37,3 +37,36 @@ export function replaceDates(data: any): any {

return data
}

/**
* Serializes BigInt as a string https://github.com/prisma/prisma/issues/5823
* @param data parameters
*/
export function serializeBigInt(data: any): any {
const type = Object.prototype.toString.call(data)

if (type === '[object BigInt]') {
return data.toString()
}

if (type === '[object Object]') {
const tmp = {}
for (const key in data) {
if (key !== '__proto__') {
tmp[key] = serializeBigInt(data[key])
}
}
return tmp
}

if (type === '[object Array]') {
let k = data.length
let tmp
for (tmp = new Array(k); k--; ) {
tmp[k] = serializeBigInt(data[k])
}
return tmp
}

return data
}

0 comments on commit daf4791

Please sign in to comment.