From d1819ba770c2949848b7eda5a3f6816f297f462a Mon Sep 17 00:00:00 2001 From: Daniele Briggi <=> Date: Mon, 3 Feb 2025 17:29:38 +0000 Subject: [PATCH 01/12] fix(unicode): count bytes not characters --- bun.lockb | Bin 414459 -> 414105 bytes package-lock.json | 4 +-- package.json | 2 +- src/drivers/protocol.ts | 7 +++-- test/database.test.ts | 61 +++++++++++++++++++++++++++++----------- test/shared.ts | 4 +-- 6 files changed, 53 insertions(+), 25 deletions(-) diff --git a/bun.lockb b/bun.lockb index b73ae3f85fd1f86fedf7ea80d7d43630449e01d5..62f289adc712e18400eb29c47b2654b98702aa43 100755 GIT binary patch delta 36986 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 J>BuFX{{;`d`2PR^ diff --git a/package-lock.json b/package-lock.json index d3b155c..8c54416 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sqlitecloud/drivers", - "version": "1.0.354", + "version": "1.0.399", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlitecloud/drivers", - "version": "1.0.354", + "version": "1.0.399", "license": "MIT", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/package.json b/package.json index b7965de..ebf4c5b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlitecloud/drivers", - "version": "1.0.354", + "version": "1.0.399", "description": "SQLiteCloud drivers for Typescript/Javascript in edge, web and node clients", "main": "./lib/index.js", "types": "./lib/index.d.ts", diff --git a/src/drivers/protocol.ts b/src/drivers/protocol.ts index 5ecd473..5d139b7 100644 --- a/src/drivers/protocol.ts +++ b/src/drivers/protocol.ts @@ -346,7 +346,7 @@ export function formatCommand(command: SQLiteCloudCommand): string { return serializeData(command.query, false) } -function serializeCommand(data: any[], zeroString: boolean = false): string { +function serializeCommand(data: SQLiteCloudDataTypes[], zeroString: boolean = false): string { const n = data.length let serializedData = `${n} ` @@ -356,11 +356,12 @@ function serializeCommand(data: any[], zeroString: boolean = false): string { serializedData += serializeData(data[i], zs) } - const header = `${CMD_ARRAY}${serializedData.length} ` + const bytesTotal = Buffer.byteLength(serializedData, 'utf-8') + const header = `${CMD_ARRAY}${bytesTotal} ` return header + serializedData } -function serializeData(data: any, zeroString: boolean = false): string { +function serializeData(data: SQLiteCloudDataTypes, zeroString: boolean = false): string { if (typeof data === 'string') { let cmd = CMD_STRING if (zeroString) { diff --git a/test/database.test.ts b/test/database.test.ts index a22bc90..bbfee94 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -515,28 +515,55 @@ describe('Database.sql (async)', () => { }) it('should throw exception when using table name as binding', async () => { - const database = await getTestingDatabaseAsync() - const table = 'people' - await expect(database.sql`SELECT * FROM ${table}`).rejects.toThrow('near "?": syntax error') + let database + try { + database = await getTestingDatabaseAsync() + const table = 'people' + await expect(database.sql`SELECT * FROM ${table}`).rejects.toThrow('near "?": syntax error') + } finally { + await removeDatabaseAsync(database) + } }) - it('should built in commands accept bindings', async () => { - const database = await getTestingDatabaseAsync() + it('should commands accept bindings', async () => { + let database + try { + database = await getTestingDatabaseAsync() - const databaseName = database.getConfiguration().database || '' - await expect(database.sql`USE DATABASE ${databaseName}`).resolves.toBe('OK') + const databaseName = database.getConfiguration().database || '' + await expect(database.sql`USE DATABASE ${databaseName}`).resolves.toBe('OK') - const databaseNameInjectSQL = `${databaseName}; SELECT * FROM people` - await expect(database.sql`USE DATABASE ${databaseNameInjectSQL}`).rejects.toThrow(`Database name contains invalid characters (${databaseNameInjectSQL}).`) + const databaseNameInjectSQL = `${databaseName}; SELECT * FROM people` + await expect(database.sql`USE DATABASE ${databaseNameInjectSQL}`).rejects.toThrow(`Database name contains invalid characters (${databaseNameInjectSQL}).`) - let key = 'logo_level' - let value = 'debug' - await expect(database.sql`SET KEY ${key} TO ${value}`).resolves.toBe('OK') + let key = 'logo_level' + let value = 'debug' + await expect(database.sql`SET KEY ${key} TO ${value}`).resolves.toBe('OK') - key = 'logo_level' - value = 'debug; DROP TABLE people' - await expect(database.sql`SET KEY ${key} TO ${value}`).resolves.toBe('OK') - const result = await database.sql`SELECT * FROM people` - expect(result.length).toBeGreaterThan(0) + key = 'logo_level' + value = 'debug; DROP TABLE people' + await expect(database.sql`SET KEY ${key} TO ${value}`).resolves.toBe('OK') + const result = await database.sql`SELECT * FROM people` + expect(result.length).toBeGreaterThan(0) + } finally { + await removeDatabaseAsync(database) + } + }) + + it('binding should work with unicode character', async () => { + let database + try { + database = await getTestingDatabaseAsync() + const name = 'unicorn-🦄' + + let results = await database.sql('INSERT INTO people (name, age, hobby) VALUES (?, 11, "");', name) + expect(results.changes).toEqual(1) + + results = await database.sql('SELECT * FROM people WHERE name = ?;', name) + expect(results).toHaveLength(1) + expect(results[0].name).toEqual(name) + } finally { + await removeDatabaseAsync(database) + } }) }) diff --git a/test/shared.ts b/test/shared.ts index ace81ef..8e5d7ae 100644 --- a/test/shared.ts +++ b/test/shared.ts @@ -25,9 +25,9 @@ export const WARN_SPEED_MS = 500 export const EXPECT_SPEED_MS = 6 * 1000 /** Number of times or size of stress (when repeated in sequence) */ -export const SEQUENCE_TEST_SIZE = 150 +export const SEQUENCE_TEST_SIZE = 90 /** Concurrency size for multiple connection tests */ -export const SIMULTANEOUS_TEST_SIZE = 150 +export const SIMULTANEOUS_TEST_SIZE = 90 /** Testing database from .env file */ export const CHINOOK_DATABASE_URL = process.env.CHINOOK_DATABASE_URL as string From 3867c79006920b1c4c65c87499273a22ceff1547 Mon Sep 17 00:00:00 2001 From: Daniele Briggi <=> Date: Tue, 4 Feb 2025 11:13:44 +0000 Subject: [PATCH 02/12] fix(tests): skip stress tests --- package.json | 2 +- test/1brc.test.ts | 4 +-- test/database.test.ts | 63 ++++++++++++++++++++++++++----------------- test/stress.test.ts | 2 +- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index ebf4c5b..5d19049 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlitecloud/drivers", - "version": "1.0.399", + "version": "1.0.400", "description": "SQLiteCloud drivers for Typescript/Javascript in edge, web and node clients", "main": "./lib/index.js", "types": "./lib/index.d.ts", diff --git a/test/1brc.test.ts b/test/1brc.test.ts index 5e098bb..c03504c 100644 --- a/test/1brc.test.ts +++ b/test/1brc.test.ts @@ -78,7 +78,7 @@ async function createDatabaseAsync(numberOfRows: number): Promise<{ connection: const createSql = `UNUSE DATABASE; CREATE DATABASE ${database}; USE DATABASE ${database};` const createResults = await sendCommandsAsync(connection, createSql) expect(createResults).toBe('OK') - return { database, connection } + return { connection, database } } async function destroyDatabaseAsync(connection: SQLiteCloudConnection, database: string) { @@ -207,7 +207,7 @@ async function testChallenge(numberOfRows: number, insertChunks = BRC_INSERT_CHU throw error } } finally { - // await destroyDatabaseAsync(connection, database) + await destroyDatabaseAsync(connection, database) connection?.close() } } diff --git a/test/database.test.ts b/test/database.test.ts index bbfee94..0a0ad7b 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -2,19 +2,17 @@ * database.test.ts - test driver api */ -import { SQLiteCloudRowset, SQLiteCloudRow, SQLiteCloudError, sanitizeSQLiteIdentifier } from '../src/index' +import { describe, expect, it } from '@jest/globals' +import { RowCountCallback } from '../src/drivers/types' +import { SQLiteCloudError, SQLiteCloudRow, SQLiteCloudRowset, sanitizeSQLiteIdentifier } from '../src/index' import { + LONG_TIMEOUT, + getChinookDatabase, getTestingDatabase, getTestingDatabaseAsync, - getChinookDatabase, removeDatabase, - removeDatabaseAsync, - LONG_TIMEOUT, - getChinookWebsocketConnection + removeDatabaseAsync } from './shared' -import { RowCountCallback } from '../src/drivers/types' -import { expect, describe, it } from '@jest/globals' -import { Database } from 'sqlite3' // // utility methods to setup and destroy temporary test databases @@ -55,6 +53,7 @@ describe('Database.run', () => { expect(error).toBeNull() database.run(updateSql, plainCallbackNotALambda) }) + removeDatabase(database) }, LONG_TIMEOUT ) @@ -114,6 +113,7 @@ describe('Database.run', () => { expect(error).toBeNull() database.run(insertSql, plainCallbackNotALambdaOne) }) + removeDatabase(database) }, LONG_TIMEOUT ) @@ -317,7 +317,7 @@ describe('Database.sql (async)', () => { const results = await database.sql('SELECT * FROM people WHERE name = ?', 'Emma Johnson') expect(results).toHaveLength(1) } finally { - database?.close() + await removeDatabaseAsync(database) } }) @@ -337,7 +337,7 @@ describe('Database.sql (async)', () => { hobby: 'Collecting clouds' }) } finally { - database?.close() + await removeDatabaseAsync(database) } }) @@ -487,30 +487,45 @@ describe('Database.sql (async)', () => { describe('should sanitize identifiers', () => { it('should sanitize database name and run the query', async () => { - const database = await getTestingDatabaseAsync() + let database + try { + database = await getTestingDatabaseAsync() - const databaseName = sanitizeSQLiteIdentifier(database.getConfiguration().database || '') - await expect(database.sql(`USE DATABASE ${databaseName}`)).resolves.toBe('OK') + const databaseName = sanitizeSQLiteIdentifier(database.getConfiguration().database || '') + await expect(database.sql(`USE DATABASE ${databaseName}`)).resolves.toBe('OK') + } finally { + await removeDatabaseAsync(database) + } }) it('should sanitize table name and run the query', async () => { - const database = await getTestingDatabaseAsync() + let database + try { + database = await getTestingDatabaseAsync() - const table = sanitizeSQLiteIdentifier('people') - await expect(database.sql(`SELECT id FROM ${table} LIMIT 1`)).resolves.toMatchObject([{ id: 1 }]) + const table = sanitizeSQLiteIdentifier('people') + await expect(database.sql(`SELECT id FROM ${table} LIMIT 1`)).resolves.toMatchObject([{ id: 1 }]) + } finally { + await removeDatabaseAsync(database) + } }) it('should sanitize SQL Injection as table name', async () => { - const database = await getTestingDatabaseAsync() - const databaseName = database.getConfiguration().database + let database + try { + database = await getTestingDatabaseAsync() + const databaseName = database.getConfiguration().database - const sanitizedDBName = sanitizeSQLiteIdentifier(`${databaseName}; SELECT * FROM people; -- `) - await expect(database.sql(`USE DATABASE ${sanitizedDBName}`)).rejects.toThrow( - `Database name contains invalid characters (${databaseName}; SELECT * FROM people; --).` - ) + const sanitizedDBName = sanitizeSQLiteIdentifier(`${databaseName}; SELECT * FROM people; -- `) + await expect(database.sql(`USE DATABASE ${sanitizedDBName}`)).rejects.toThrow( + `Database name contains invalid characters (${databaseName}; SELECT * FROM people; --).` + ) - const table = sanitizeSQLiteIdentifier('people; -- ') - await expect(database.sql(`SELECT * FROM ${table} WHERE people = 1`)).rejects.toThrow('no such table: people; --') + const table = sanitizeSQLiteIdentifier('people; -- ') + await expect(database.sql(`SELECT * FROM ${table} WHERE people = 1`)).rejects.toThrow('no such table: people; --') + } finally { + await removeDatabaseAsync(database) + } }) }) diff --git a/test/stress.test.ts b/test/stress.test.ts index a28c200..7b8c9a5 100644 --- a/test/stress.test.ts +++ b/test/stress.test.ts @@ -14,7 +14,7 @@ import { EXPECT_SPEED_MS } from './shared' -describe('stress testing', () => { +describe.skip('stress testing', () => { it( 'should do lots of read connections in sequence', async () => { From d590436c567fa89b11f8b7e4b8a0373edaadb5d8 Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 14:21:26 +0100 Subject: [PATCH 03/12] fix database test --- package-lock.json | 4 ++-- test/database.test.ts | 13 +------------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c54416..9312dfc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sqlitecloud/drivers", - "version": "1.0.399", + "version": "1.0.400", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlitecloud/drivers", - "version": "1.0.399", + "version": "1.0.400", "license": "MIT", "dependencies": { "@craftzdog/react-native-buffer": "^6.0.5", diff --git a/test/database.test.ts b/test/database.test.ts index 0a0ad7b..b63d334 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -5,14 +5,7 @@ import { describe, expect, it } from '@jest/globals' import { RowCountCallback } from '../src/drivers/types' import { SQLiteCloudError, SQLiteCloudRow, SQLiteCloudRowset, sanitizeSQLiteIdentifier } from '../src/index' -import { - LONG_TIMEOUT, - getChinookDatabase, - getTestingDatabase, - getTestingDatabaseAsync, - removeDatabase, - removeDatabaseAsync -} from './shared' +import { LONG_TIMEOUT, getChinookDatabase, getTestingDatabase, getTestingDatabaseAsync, removeDatabase, removeDatabaseAsync } from './shared' // // utility methods to setup and destroy temporary test databases @@ -42,7 +35,6 @@ describe('Database.run', () => { expect(context.totalChanges).toBe(22) expect(context.finalized).toBe(1) - done() removeDatabase(database, error => { expect(error).toBeNull() done() @@ -53,7 +45,6 @@ describe('Database.run', () => { expect(error).toBeNull() database.run(updateSql, plainCallbackNotALambda) }) - removeDatabase(database) }, LONG_TIMEOUT ) @@ -102,7 +93,6 @@ describe('Database.run', () => { expect(context.totalChanges).toBe(22) expect(context.finalized).toBe(1) - done() removeDatabase(database, error => { expect(error).toBeNull() done() @@ -113,7 +103,6 @@ describe('Database.run', () => { expect(error).toBeNull() database.run(insertSql, plainCallbackNotALambdaOne) }) - removeDatabase(database) }, LONG_TIMEOUT ) From b616aef55f626fc129c1546d8c3fb2f49b73ddda Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 15:25:26 +0100 Subject: [PATCH 04/12] node lts instead of latest --- .github/workflows/test.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b30f8a6..5a33540 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,8 +14,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 - with: - node-version: latest - name: Setup Dependencies run: | corepack enable @@ -50,8 +48,6 @@ jobs: #setup node, bun and deno - uses: actions/setup-node@v4 - with: - node-version: latest - uses: oven-sh/setup-bun@v2 - uses: denoland/setup-deno@v2 with: From 9d9b6f2ddf0260e51c01768d6e935ff23062b260 Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 15:34:11 +0100 Subject: [PATCH 05/12] node version to lts 22 --- .github/workflows/test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5a33540..5f43528 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,6 +14,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 + with: + node-version: 22.13.1 - name: Setup Dependencies run: | corepack enable @@ -48,6 +50,8 @@ jobs: #setup node, bun and deno - uses: actions/setup-node@v4 + with: + node-version: 22.13.1 - uses: oven-sh/setup-bun@v2 - uses: denoland/setup-deno@v2 with: From f9c8a3a049d650746816b8385c38f2455acfc5aa Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 16:13:11 +0100 Subject: [PATCH 06/12] setup deno lts fix --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5f43528..e009a9b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,7 +55,7 @@ jobs: - uses: oven-sh/setup-bun@v2 - uses: denoland/setup-deno@v2 with: - deno-version: vx.x.x + deno-version: v2.x - name: setup playwright for browser related test run: npx playwright install --with-deps && npx playwright install msedge && npx playwright install chrome From 953085cde6e9b13731ecdf55ef126cf957201d7f Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 17:01:20 +0100 Subject: [PATCH 07/12] call deno-vite test inside test folder --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e009a9b..f501462 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -283,7 +283,7 @@ jobs: - name: deno with-javascript-vite if: matrix.os != 'windows-latest' #https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 - working-directory: examples/with-javascript-vite + working-directory: examples/with-javascript-vite/test run: deno add npm:@playwright/test && deno run --allow-all npm:playwright test env: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} From 5cf2810e1c99bb5348d61b51b863517c5cfabc86 Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 17:23:08 +0100 Subject: [PATCH 08/12] skip macos deno vite --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f501462..89c0f9e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -282,7 +282,7 @@ jobs: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} - name: deno with-javascript-vite - if: matrix.os != 'windows-latest' #https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 + if: matrix.os == 'ubuntu-latest' #windows: https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 macos: https://github.com/sqlitecloud/sqlitecloud-js/issues/197 working-directory: examples/with-javascript-vite/test run: deno add npm:@playwright/test && deno run --allow-all npm:playwright test env: From 100fdb579fc1f2c0f168c3d915423bce4bc41e86 Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 17:23:49 +0100 Subject: [PATCH 09/12] back to root folder test deno --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 89c0f9e..6448e61 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -283,7 +283,7 @@ jobs: - name: deno with-javascript-vite if: matrix.os == 'ubuntu-latest' #windows: https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 macos: https://github.com/sqlitecloud/sqlitecloud-js/issues/197 - working-directory: examples/with-javascript-vite/test + working-directory: examples/with-javascript-vite run: deno add npm:@playwright/test && deno run --allow-all npm:playwright test env: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} From fd2489b9aec0fdbf34f4f6f77c16eae96eb94b01 Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 17:41:48 +0100 Subject: [PATCH 10/12] deno install browsers --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6448e61..e1d2479 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -282,9 +282,9 @@ jobs: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} - name: deno with-javascript-vite - if: matrix.os == 'ubuntu-latest' #windows: https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 macos: https://github.com/sqlitecloud/sqlitecloud-js/issues/197 + if: matrix.os != 'windows-latest' #windows: https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 linux-ubuntu: https://github.com/sqlitecloud/sqlitecloud-js/issues/197 working-directory: examples/with-javascript-vite - run: deno add npm:@playwright/test && deno run --allow-all npm:playwright test + run: deno add npm:@playwright/test && deno run --allow-all npm:playwright install && deno run --allow-all npm:playwright test env: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} PW_DISABLE_TS_ESM: true From 49d8b97ee558ab48e15f66cad19924526631670e Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 17:54:47 +0100 Subject: [PATCH 11/12] skip deno with-javascript-vite test --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e1d2479..802a2e0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -282,9 +282,9 @@ jobs: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} - name: deno with-javascript-vite - if: matrix.os != 'windows-latest' #windows: https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 linux-ubuntu: https://github.com/sqlitecloud/sqlitecloud-js/issues/197 + if: false #matrix.os != 'windows-latest' windows: https://github.com/denoland/deno/issues/23524#issuecomment-2292075726 linux-ubuntu: https://github.com/sqlitecloud/sqlitecloud-js/issues/197 working-directory: examples/with-javascript-vite - run: deno add npm:@playwright/test && deno run --allow-all npm:playwright install && deno run --allow-all npm:playwright test + run: deno add npm:@playwright/test && deno run --allow-all npm:playwright test env: VITE_DATABASE_URL: ${{ secrets.CHINOOK_DATABASE_URL }} PW_DISABLE_TS_ESM: true From 76e8d0afeae763c2c73f0059ad8dccc3f77569f7 Mon Sep 17 00:00:00 2001 From: Gioele Cantoni Date: Tue, 4 Feb 2025 19:43:27 +0100 Subject: [PATCH 12/12] react native optional dependencies --- package-lock.json | 11 +++++++++-- package.json | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9312dfc..fb5defe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,9 @@ "version": "1.0.400", "license": "MIT", "dependencies": { - "@craftzdog/react-native-buffer": "^6.0.5", "buffer": "^6.0.3", "eventemitter3": "^5.0.1", "lz4js": "^0.2.0", - "react-native-url-polyfill": "^2.0.0", "socket.io-client": "^4.8.1", "whatwg-url": "^14.1.0" }, @@ -40,6 +38,10 @@ "engines": { "node": ">=18.0" }, + "optionalDependencies": { + "@craftzdog/react-native-buffer": "^6.0.5", + "react-native-url-polyfill": "^2.0.0" + }, "peerDependencies": { "react-native-quick-base64": "*", "react-native-tcp-socket": "^6.2.0" @@ -6946,6 +6948,7 @@ } ], "license": "MIT", + "optional": true, "dependencies": { "ieee754": "^1.2.1", "react-native-quick-base64": "^2.0.5" @@ -14337,6 +14340,7 @@ "node_modules/react-native-url-polyfill": { "version": "2.0.0", "license": "MIT", + "optional": true, "dependencies": { "whatwg-url-without-unicode": "8.0.0-3" }, @@ -16060,6 +16064,7 @@ "node_modules/whatwg-url-without-unicode": { "version": "8.0.0-3", "license": "MIT", + "optional": true, "dependencies": { "buffer": "^5.4.3", "punycode": "^2.1.1", @@ -16086,6 +16091,7 @@ } ], "license": "MIT", + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -16094,6 +16100,7 @@ "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { "version": "5.0.0", "license": "BSD-2-Clause", + "optional": true, "engines": { "node": ">=8" } diff --git a/package.json b/package.json index 5d19049..53c24cd 100644 --- a/package.json +++ b/package.json @@ -42,14 +42,16 @@ }, "homepage": "https://github.com/sqlitecloud/sqlitecloud-js#readme", "dependencies": { - "@craftzdog/react-native-buffer": "^6.0.5", "buffer": "^6.0.3", "eventemitter3": "^5.0.1", "lz4js": "^0.2.0", - "react-native-url-polyfill": "^2.0.0", "socket.io-client": "^4.8.1", "whatwg-url": "^14.1.0" }, + "optionalDependencies": { + "@craftzdog/react-native-buffer": "^6.0.5", + "react-native-url-polyfill": "^2.0.0" + }, "peerDependencies": { "react-native-quick-base64": "*", "react-native-tcp-socket": "^6.2.0"