diff --git a/.nvmrc b/.nvmrc index a81debae..cc7ce7f4 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.12.2 +v22.13.1 diff --git a/modules/module-postgres-storage/package.json b/modules/module-postgres-storage/package.json index 10b0df97..62ca2631 100644 --- a/modules/module-postgres-storage/package.json +++ b/modules/module-postgres-storage/package.json @@ -45,6 +45,6 @@ }, "devDependencies": { "@types/uuid": "^9.0.4", - "typescript": "^5.2.2" + "typescript": "^5.7.3" } } diff --git a/modules/module-postgres-storage/src/storage/batch/PostgresBucketBatch.ts b/modules/module-postgres-storage/src/storage/batch/PostgresBucketBatch.ts index 60c9d24d..1a3b98c3 100644 --- a/modules/module-postgres-storage/src/storage/batch/PostgresBucketBatch.ts +++ b/modules/module-postgres-storage/src/storage/batch/PostgresBucketBatch.ts @@ -640,8 +640,8 @@ export class PostgresBucketBatch let existingBuckets: CurrentBucket[] = []; let newBuckets: CurrentBucket[] = []; - let existingLookups: Buffer[] = []; - let newLookups: Buffer[] = []; + let existingLookups: Buffer[] = []; + let newLookups: Buffer[] = []; if (this.options.skip_existing_rows) { if (record.tag == storage.SaveOperationTag.INSERT) { @@ -695,7 +695,7 @@ export class PostgresBucketBatch } } - let afterData: Buffer | undefined; + let afterData: Buffer | undefined; if (afterId != null && !this.options.store_current_data) { afterData = storage.serializeBson({}); } else if (afterId != null) { diff --git a/modules/module-postgres-storage/tsconfig.json b/modules/module-postgres-storage/tsconfig.json index edfd2bf7..d423c4e8 100644 --- a/modules/module-postgres-storage/tsconfig.json +++ b/modules/module-postgres-storage/tsconfig.json @@ -5,8 +5,6 @@ "declarationDir": "dist/@types", "tsBuildInfoFile": "dist/.tsbuildinfo", "rootDir": "src", - "target": "ES2022", - "lib": ["ES2022", "esnext.disposable"], "skipLibCheck": true }, "include": ["src"], diff --git a/package.json b/package.json index b737003f..0dfe1249 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@changesets/cli": "^2.27.8", - "@types/node": "^22.5.5", + "@types/node": "^22.13.1", "async": "^3.2.4", "bson": "^6.8.0", "concurrently": "^8.2.2", @@ -36,7 +36,7 @@ "semver": "^7.5.4", "tsc-watch": "^6.2.0", "ts-node-dev": "^2.0.0", - "typescript": "^5.6.2", + "typescript": "^5.7.3", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.1.1", "ws": "^8.2.3" diff --git a/packages/service-core-tests/package.json b/packages/service-core-tests/package.json index 2ab288b9..d144b29f 100644 --- a/packages/service-core-tests/package.json +++ b/packages/service-core-tests/package.json @@ -23,6 +23,6 @@ "vitest": "^2.1.1" }, "devDependencies": { - "typescript": "^5.6.2" + "typescript": "^5.7.3" } } diff --git a/packages/service-core/src/storage/bson.ts b/packages/service-core/src/storage/bson.ts index edc08c93..dd1c726a 100644 --- a/packages/service-core/src/storage/bson.ts +++ b/packages/service-core/src/storage/bson.ts @@ -3,6 +3,8 @@ import * as bson from 'bson'; import { SqliteJsonValue } from '@powersync/service-sync-rules'; import { ReplicaId } from './BucketStorage.js'; +type NodeBuffer = Buffer; + export const BSON_DESERIALIZE_OPTIONS: bson.DeserializeOptions = { // use bigint instead of Long useBigInt64: true @@ -12,7 +14,7 @@ export const BSON_DESERIALIZE_OPTIONS: bson.DeserializeOptions = { * Lookup serialization must be number-agnostic. I.e. normalize numbers, instead of preserving numbers. * @param lookup */ -export const serializeLookupBuffer = (lookup: SqliteJsonValue[]): Buffer => { +export const serializeLookupBuffer = (lookup: SqliteJsonValue[]): NodeBuffer => { const normalized = lookup.map((value) => { if (typeof value == 'number' && Number.isInteger(value)) { return BigInt(value); @@ -20,7 +22,7 @@ export const serializeLookupBuffer = (lookup: SqliteJsonValue[]): Buffer => { return value; } }); - return bson.serialize({ l: normalized }) as Buffer; + return bson.serialize({ l: normalized }) as NodeBuffer; }; export const serializeLookup = (lookup: SqliteJsonValue[]) => { @@ -40,8 +42,8 @@ export const isUUID = (value: any): value is bson.UUID => { return uuid._bsontype == 'Binary' && uuid.sub_type == bson.Binary.SUBTYPE_UUID; }; -export const serializeReplicaId = (id: ReplicaId): Buffer => { - return bson.serialize({ id }) as Buffer; +export const serializeReplicaId = (id: ReplicaId): NodeBuffer => { + return bson.serialize({ id }) as NodeBuffer; }; export const deserializeReplicaId = (id: Buffer): ReplicaId => { @@ -53,8 +55,8 @@ export const deserializeBson = (buffer: Buffer) => { return bson.deserialize(buffer, BSON_DESERIALIZE_OPTIONS); }; -export const serializeBson = (document: any): Buffer => { - return bson.serialize(document) as Buffer; +export const serializeBson = (document: any): NodeBuffer => { + return bson.serialize(document) as NodeBuffer; }; /** @@ -73,6 +75,6 @@ export const replicaIdEquals = (a: ReplicaId, b: ReplicaId) => { return false; } else { // There are many possible primitive values, this covers them all - return serializeReplicaId(a).equals(serializeReplicaId(b) as ArrayBuffer as Uint8Array); + return serializeReplicaId(a).equals(serializeReplicaId(b)); } }; diff --git a/packages/service-core/src/util/memory-tracking.ts b/packages/service-core/src/util/memory-tracking.ts index 31d8dd89..8290597c 100644 --- a/packages/service-core/src/util/memory-tracking.ts +++ b/packages/service-core/src/util/memory-tracking.ts @@ -25,8 +25,8 @@ export function trackMemoryUsage() { for (let key of Object.keys(bufferMemory)) { const typedKey = key as keyof typeof bufferMemory; const originalFunction = Buffer[typedKey] as (...args: any[]) => Buffer; - Buffer[typedKey] = function (...args: any[]) { - const buffer = originalFunction.apply(this, args); + Buffer[typedKey] = function (...args: any[]) { + const buffer = originalFunction.apply(this, args) as Buffer; bufferMemory[typedKey] += buffer.byteLength; bufferRegistry.register(buffer, [typedKey, buffer.byteLength]); return buffer; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b941e6be..f7140aa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^2.27.8 version: 2.27.8 '@types/node': - specifier: ^22.5.5 - version: 22.5.5 + specifier: ^22.13.1 + version: 22.13.1 async: specifier: ^3.2.4 version: 3.2.5 @@ -49,19 +49,19 @@ importers: version: 7.6.2 ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@22.5.5)(typescript@5.6.2) + version: 2.0.0(@types/node@22.13.1)(typescript@5.7.3) tsc-watch: specifier: ^6.2.0 - version: 6.2.0(typescript@5.6.2) + version: 6.2.0(typescript@5.7.3) typescript: - specifier: ^5.6.2 - version: 5.6.2 + specifier: ^5.7.3 + version: 5.7.3 vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.6.2)(vite@5.3.3(@types/node@22.5.5)) + version: 4.3.2(typescript@5.7.3)(vite@5.3.3(@types/node@22.13.1)) vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@22.5.5) + version: 2.1.1(@types/node@22.13.1) ws: specifier: ^8.2.3 version: 8.18.0 @@ -156,7 +156,7 @@ importers: version: 9.0.8 vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@22.5.5) + version: 2.1.1(@types/node@22.13.1) modules/module-mongodb: dependencies: @@ -406,8 +406,8 @@ importers: specifier: ^9.0.4 version: 9.0.8 typescript: - specifier: ^5.2.2 - version: 5.6.2 + specifier: ^5.7.3 + version: 5.7.3 packages/jpgwire: dependencies: @@ -571,14 +571,14 @@ importers: version: link:../sync-rules vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.6.2)(vite@5.3.3(@types/node@22.5.5)) + version: 4.3.2(typescript@5.7.3)(vite@5.3.3(@types/node@22.13.1)) vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@22.5.5) + version: 2.1.1(@types/node@22.13.1) devDependencies: typescript: - specifier: ^5.6.2 - version: 5.6.2 + specifier: ^5.7.3 + version: 5.7.3 packages/service-errors: {} @@ -741,7 +741,7 @@ importers: version: 16.14.20 ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@22.5.5)(typescript@5.6.2) + version: 10.9.2(@types/node@22.13.1)(typescript@5.7.3) test-client: dependencies: @@ -759,11 +759,11 @@ importers: version: 2.5.0 devDependencies: '@types/node': - specifier: ^22.5.5 - version: 22.5.5 + specifier: ^22.13.1 + version: 22.13.1 typescript: - specifier: ^5.6.2 - version: 5.6.2 + specifier: ^5.7.3 + version: 5.7.3 packages: @@ -1546,6 +1546,9 @@ packages: '@types/node@15.14.9': resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} + '@types/node@22.13.1': + resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@22.5.5': resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} @@ -3783,8 +3786,8 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -3794,6 +3797,9 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + unique-filename@2.0.1: resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -4905,7 +4911,7 @@ snapshots: '@opentelemetry/semantic-conventions': 1.25.1 '@prisma/instrumentation': 5.16.1 '@sentry/core': 8.17.0 - '@sentry/opentelemetry': 8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.6.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1) + '@sentry/opentelemetry': 8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.6.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.6.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1) '@sentry/types': 8.17.0 '@sentry/utils': 8.17.0 optionalDependencies: @@ -4913,7 +4919,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.6.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)': + '@sentry/opentelemetry@8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.6.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.6.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) @@ -4982,7 +4988,7 @@ snapshots: '@types/connect@3.4.36': dependencies: - '@types/node': 22.5.5 + '@types/node': 22.13.1 '@types/estree@1.0.5': {} @@ -4992,7 +4998,7 @@ snapshots: '@types/mysql@2.15.22': dependencies: - '@types/node': 22.5.5 + '@types/node': 22.13.1 '@types/node@12.20.55': {} @@ -5000,6 +5006,10 @@ snapshots: '@types/node@15.14.9': {} + '@types/node@22.13.1': + dependencies: + undici-types: 6.20.0 + '@types/node@22.5.5': dependencies: undici-types: 6.19.8 @@ -5010,7 +5020,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 22.5.5 + '@types/node': 22.13.1 pg-protocol: 1.6.1 pg-types: 2.2.0 @@ -5036,7 +5046,7 @@ snapshots: '@types/ws@8.2.3': dependencies: - '@types/node': 22.5.5 + '@types/node': 22.13.1 '@vitest/expect@2.1.1': dependencies: @@ -5045,13 +5055,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.5.5))': + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.13.1))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - vite: 5.3.3(@types/node@22.5.5) + vite: 5.3.3(@types/node@22.13.1) '@vitest/pretty-format@2.1.1': dependencies: @@ -7259,7 +7269,7 @@ snapshots: ts-codec@1.3.0: {} - ts-node-dev@2.0.0(@types/node@22.5.5)(typescript@5.6.2): + ts-node-dev@2.0.0(@types/node@22.13.1)(typescript@5.7.3): dependencies: chokidar: 3.6.0 dynamic-dedupe: 0.3.0 @@ -7269,43 +7279,43 @@ snapshots: rimraf: 2.7.1 source-map-support: 0.5.21 tree-kill: 1.2.2 - ts-node: 10.9.2(@types/node@22.5.5)(typescript@5.6.2) + ts-node: 10.9.2(@types/node@22.13.1)(typescript@5.7.3) tsconfig: 7.0.0 - typescript: 5.6.2 + typescript: 5.7.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' - ts-node@10.9.2(@types/node@22.5.5)(typescript@5.6.2): + ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.5.5 + '@types/node': 22.13.1 acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.2 + typescript: 5.7.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - tsc-watch@6.2.0(typescript@5.6.2): + tsc-watch@6.2.0(typescript@5.7.3): dependencies: cross-spawn: 7.0.3 node-cleanup: 2.1.2 ps-tree: 1.2.0 string-argv: 0.3.2 - typescript: 5.6.2 + typescript: 5.7.3 - tsconfck@3.1.1(typescript@5.6.2): + tsconfck@3.1.1(typescript@5.7.3): optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.3 tsconfig@7.0.0: dependencies: @@ -7336,12 +7346,14 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript@5.6.2: {} + typescript@5.7.3: {} undefsafe@2.0.5: {} undici-types@6.19.8: {} + undici-types@6.20.0: {} + unique-filename@2.0.1: dependencies: unique-slug: 3.0.0 @@ -7402,6 +7414,22 @@ snapshots: vary@1.1.2: {} + vite-node@2.1.1(@types/node@22.13.1): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + vite: 5.3.3(@types/node@22.13.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + vite-node@2.1.1(@types/node@22.5.5): dependencies: cac: 6.7.14 @@ -7418,17 +7446,26 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.6.2)(vite@5.3.3(@types/node@22.5.5)): + vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.3.3(@types/node@22.13.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.1(typescript@5.6.2) + tsconfck: 3.1.1(typescript@5.7.3) optionalDependencies: - vite: 5.3.3(@types/node@22.5.5) + vite: 5.3.3(@types/node@22.13.1) transitivePeerDependencies: - supports-color - typescript + vite@5.3.3(@types/node@22.13.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.1 + optionalDependencies: + '@types/node': 22.13.1 + fsevents: 2.3.3 + vite@5.3.3(@types/node@22.5.5): dependencies: esbuild: 0.21.5 @@ -7438,10 +7475,43 @@ snapshots: '@types/node': 22.5.5 fsevents: 2.3.3 + vitest@2.1.1(@types/node@22.13.1): + dependencies: + '@vitest/expect': 2.1.1 + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.13.1)) + '@vitest/pretty-format': 2.1.1 + '@vitest/runner': 2.1.1 + '@vitest/snapshot': 2.1.1 + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.3.3(@types/node@22.13.1) + vite-node: 2.1.1(@types/node@22.13.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.13.1 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - stylus + - sugarss + - supports-color + - terser + vitest@2.1.1(@types/node@22.5.5): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.5.5)) + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.13.1)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 diff --git a/test-client/package.json b/test-client/package.json index 5192b3b4..4ca58b11 100644 --- a/test-client/package.json +++ b/test-client/package.json @@ -20,7 +20,7 @@ "yaml": "^2.5.0" }, "devDependencies": { - "@types/node": "^22.5.5", - "typescript": "^5.6.2" + "@types/node": "^22.13.1", + "typescript": "^5.7.3" } } diff --git a/tsconfig.base.json b/tsconfig.base.json index 6afdcd92..b2bd00df 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "lib": ["ES2021"], - "target": "ES2020", + "lib": ["ES2024"], + "target": "ES2024", "module": "NodeNext", "moduleResolution": "NodeNext", "strict": true,