Skip to content

Commit 048ef03

Browse files
committed
fix(plugin): deserialize array
#7
1 parent 8d4c5d1 commit 048ef03

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

packages/plugin-serialize/src/serializer.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ export const defaultDeserializer: Deserializer = (parameter) => {
2828
return parameter === 'true'
2929
} else if (dateRegex.test(parameter)) {
3030
return new Date(parameter)
31-
} else if (parameter.startsWith('{') && parameter.endsWith('}')) {
31+
} else if (
32+
(parameter.startsWith('{') && parameter.endsWith('}'))
33+
|| (parameter.startsWith('[') && parameter.endsWith(']'))
34+
) {
3235
try {
3336
return JSON.parse(parameter)
3437
} catch (ignore) { }

test/plugin-serialize.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest'
22
import Database from 'better-sqlite3'
33
import type { Generated, KyselyPlugin } from 'kysely'
44
import { Kysely, SqliteDialect } from 'kysely'
5-
import { SerializePlugin } from '../packages/plugin-serialize'
5+
import { SerializePlugin } from '../packages/plugin-serialize/src'
66

77
interface DB {
88
test: TestTable
@@ -11,6 +11,7 @@ interface DB {
1111
interface TestTable {
1212
id: Generated<number>
1313
person: { name: string, age: number, time: Date } | null
14+
tag: string[]
1415
gender: boolean
1516
blob: Uint8Array | null
1617
date: Date
@@ -33,6 +34,7 @@ describe('plugin basic test', () => {
3334
await db.schema.createTable('test')
3435
.addColumn('id', 'integer', build => build.autoIncrement().primaryKey())
3536
.addColumn('gender', 'text')
37+
.addColumn('tag', 'text')
3638
.addColumn('person', 'text')
3739
.addColumn('blob', 'blob')
3840
.addColumn('date', 'text')
@@ -41,16 +43,18 @@ describe('plugin basic test', () => {
4143
await db.insertInto('test').values({
4244
gender: true,
4345
person: { name: 'test', age: 2, time: testDate },
46+
tag: ['tag1', 'tag2'],
4447
blob: Buffer.from([1, 2, 3]),
4548
date: testDate,
4649
}).execute()
47-
const { blob, person, gender, date } = await db.selectFrom('test')
50+
const { blob, person, tag, gender, date } = await db.selectFrom('test')
4851
.selectAll()
4952
.limit(1)
5053
.executeTakeFirstOrThrow()
5154
expect(blob).toStrictEqual(Buffer.from([1, 2, 3]))
5255
expect(blob).toBeInstanceOf(Buffer)
5356
expect(person).toStrictEqual({ name: 'test', age: 2, time: testDate.toISOString() })
57+
expect(tag).toStrictEqual(['tag1', 'tag2'])
5458
expect(gender).toStrictEqual(true)
5559
expect(date).toStrictEqual(testDate)
5660
})

0 commit comments

Comments
 (0)