From e665c907854b89faf0ce484461cbb233d1149d66 Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Tue, 11 Nov 2025 13:17:32 +0200 Subject: [PATCH 1/9] Add simple unit-test setup --- tests-unit/package.json | 18 ++++++++++++++++++ tests-unit/tsconfig.json | 12 ++++++++++++ tests-unit/vitest.config.ts | 8 ++++++++ 3 files changed, 38 insertions(+) create mode 100644 tests-unit/package.json create mode 100644 tests-unit/tsconfig.json create mode 100644 tests-unit/vitest.config.ts diff --git a/tests-unit/package.json b/tests-unit/package.json new file mode 100644 index 0000000..f194ef1 --- /dev/null +++ b/tests-unit/package.json @@ -0,0 +1,18 @@ +{ + "name": "unit-tests", + "version": "1.0.0", + "private": true, + "type": "module", + "license": "MIT", + "scripts": { + "test": "vitest run", + "test:watch": "vitest", + "generate": "webrpc-gen -schema=service.ridl -target=../../ -out=client.gen.ts" + }, + "devDependencies": { + "@tsconfig/strictest": "^2.0.7", + "@types/node": "^24.10.0", + "typescript": "^5.9.3", + "vitest": "^4.0.8" + } +} diff --git a/tests-unit/tsconfig.json b/tests-unit/tsconfig.json new file mode 100644 index 0000000..a6a300b --- /dev/null +++ b/tests-unit/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@tsconfig/strictest/tsconfig.json", + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "lib": ["ES2022", "dom"] + }, + "include": ["."], + "exclude": ["dist"] +} diff --git a/tests-unit/vitest.config.ts b/tests-unit/vitest.config.ts new file mode 100644 index 0000000..d87fc4a --- /dev/null +++ b/tests-unit/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + globals: true, + environment: 'node', + }, +}) From 53b9db20767b169f77c922ca619167a456e8389e Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Tue, 11 Nov 2025 13:18:07 +0200 Subject: [PATCH 2/9] git ignore node modules --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ From ebd30362a6daae8e77f07ee9fdb8f1dfbbb0054f Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 14:58:46 +0200 Subject: [PATCH 3/9] Add comprehensive BigInt unit tests --- tests-unit/bigint.test.ts | 162 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 tests-unit/bigint.test.ts diff --git a/tests-unit/bigint.test.ts b/tests-unit/bigint.test.ts new file mode 100644 index 0000000..868e862 --- /dev/null +++ b/tests-unit/bigint.test.ts @@ -0,0 +1,162 @@ +import { describe, it, expect } from 'vitest' +import { JsonEncode, JsonDecode } from './client.gen.js' +import type { BigIntArrayTest } from './client.gen.js' + + +describe('JsonEncode', () => { + it('should encode BigInt arrays and nested objects', () => { + const input: BigIntArrayTest = { + ids: [1n, 2n, 3n], + timestamps: [-100n, 0n, 100n], + messages: [ + { id: 10n, userId: 20n, timestamp: 30n, content: 'test' }, + ], + } + + const encoded = JsonEncode(input) + const parsed = JSON.parse(encoded) + + // All BigInt values (arrays and nested objects) encoded as strings + expect(parsed).toMatchInlineSnapshot(` + { + "ids": [ + "1", + "2", + "3", + ], + "messages": [ + { + "content": "test", + "id": "10", + "timestamp": "30", + "userId": "20", + }, + ], + "timestamps": [ + "-100", + "0", + "100", + ], + } + `) + }) + + it('should encode large BigInt values exceeding MAX_SAFE_INTEGER', () => { + const input: BigIntArrayTest = { + ids: [9007199254740992n, 18446744073709551615n], + timestamps: [], + messages: [], + } + + const encoded = JsonEncode(input) + const parsed = JSON.parse(encoded) + + expect(parsed).toMatchInlineSnapshot(` + { + "ids": [ + "9007199254740992", + "18446744073709551615", + ], + "messages": [], + "timestamps": [], + } + `) + }) +}) + +describe('JsonDecode', () => { + it('should decode BigInt arrays and nested objects', () => { + const json = JSON.stringify({ + ids: ['1', '2', '3'], + timestamps: ['-100', '0', '100'], + messages: [ + { id: '10', userId: '20', timestamp: '30', content: 'test' }, + ], + }) + + const decoded = JsonDecode(json, 'BigIntArrayTest') + + // Strings converted to BigInt (arrays and nested objects) + expect(decoded).toMatchInlineSnapshot(` + { + "ids": [ + 1n, + 2n, + 3n, + ], + "messages": [ + { + "content": "test", + "id": 10n, + "timestamp": 30n, + "userId": 20n, + }, + ], + "timestamps": [ + -100n, + 0n, + 100n, + ], + } + `) + expect(typeof decoded.ids[0]).toBe('bigint') + expect(typeof decoded.messages[0].id).toBe('bigint') + }) + + it('should decode large BigInt values', () => { + const json = JSON.stringify({ + ids: ['9007199254740992', '18446744073709551615'], + timestamps: [], + messages: [], + }) + + const decoded = JsonDecode(json, 'BigIntArrayTest') + + expect(decoded.ids).toEqual([9007199254740992n, 18446744073709551615n]) + expect(typeof decoded.ids[0]).toBe('bigint') + }) +}) + +describe('Round-trip', () => { + it('should preserve all BigInt values through encode/decode cycle', () => { + const original: BigIntArrayTest = { + ids: [1n, 9007199254740992n], + timestamps: [-100n, 0n, 100n], + messages: [ + { id: 10n, userId: 20n, timestamp: 30n, content: 'test' }, + ], + } + + const encoded = JsonEncode(original) + const decoded = JsonDecode(encoded, 'BigIntArrayTest') + + expect(decoded).toEqual(original) + + }) + + it('should not mutate the original object during encoding or decoding', () => { + const original: BigIntArrayTest = { + ids: [1n, 2n, 3n], + timestamps: [-100n, 0n, 100n], + messages: [ + { id: 10n, userId: 20n, timestamp: 30n, content: 'test' }, + ], + } + + // Create a deep clone to compare against later + const originalClone = structuredClone(original) + + // Encode and decode + const encoded = JsonEncode(original) + const decoded = JsonDecode(encoded, 'BigIntArrayTest') + + // Original should be completely unchanged + expect(original).toEqual(originalClone) + expect(original.ids).toEqual(originalClone.ids) + expect(original.messages).toEqual(originalClone.messages) + + // But decoded should be a different reference + expect(decoded).not.toBe(original) + expect(decoded.ids).not.toBe(original.ids) + }) +}) From 866f8fe88d60d7c5eca6b157a34c0868f6ffa253 Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 14:58:47 +0200 Subject: [PATCH 4/9] Add unit test configuration and dependencies --- tests-unit/package.json | 3 +- tests-unit/pnpm-lock.yaml | 912 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 914 insertions(+), 1 deletion(-) create mode 100644 tests-unit/pnpm-lock.yaml diff --git a/tests-unit/package.json b/tests-unit/package.json index f194ef1..d7c25fc 100644 --- a/tests-unit/package.json +++ b/tests-unit/package.json @@ -7,7 +7,8 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "generate": "webrpc-gen -schema=service.ridl -target=../../ -out=client.gen.ts" + "test:update": "vitest run -u", + "generate": "webrpc-gen -schema=service.ridl -target=../ -out=client.gen.ts" }, "devDependencies": { "@tsconfig/strictest": "^2.0.7", diff --git a/tests-unit/pnpm-lock.yaml b/tests-unit/pnpm-lock.yaml new file mode 100644 index 0000000..fa4154b --- /dev/null +++ b/tests-unit/pnpm-lock.yaml @@ -0,0 +1,912 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@tsconfig/strictest': + specifier: ^2.0.7 + version: 2.0.7 + '@types/node': + specifier: ^24.10.0 + version: 24.10.0 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vitest: + specifier: ^4.0.8 + version: 4.0.8(@types/node@24.10.0) + +packages: + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@rollup/rollup-android-arm-eabi@4.53.2': + resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.2': + resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.2': + resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.2': + resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.2': + resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.2': + resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.2': + resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.2': + resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.2': + resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.2': + resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.2': + resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.2': + resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.2': + resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.2': + resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.2': + resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.2': + resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.2': + resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.2': + resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@tsconfig/strictest@2.0.7': + resolution: {integrity: sha512-lG1bXQloBVvQXasPBZSBaWbs7GNW4txZMYs7XMUVzM0s4seCbJACYBPFIRpGNVD3gC8gndK00AZON1uBrJt4Fw==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/node@24.10.0': + resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} + + '@vitest/expect@4.0.8': + resolution: {integrity: sha512-Rv0eabdP/xjAHQGr8cjBm+NnLHNoL268lMDK85w2aAGLFoVKLd8QGnVon5lLtkXQCoYaNL0wg04EGnyKkkKhPA==} + + '@vitest/mocker@4.0.8': + resolution: {integrity: sha512-9FRM3MZCedXH3+pIh+ME5Up2NBBHDq0wqwhOKkN4VnvCiKbVxddqH9mSGPZeawjd12pCOGnl+lo/ZGHt0/dQSg==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.8': + resolution: {integrity: sha512-qRrjdRkINi9DaZHAimV+8ia9Gq6LeGz2CgIEmMLz3sBDYV53EsnLZbJMR1q84z1HZCMsf7s0orDgZn7ScXsZKg==} + + '@vitest/runner@4.0.8': + resolution: {integrity: sha512-mdY8Sf1gsM8hKJUQfiPT3pn1n8RF4QBcJYFslgWh41JTfrK1cbqY8whpGCFzBl45LN028g0njLCYm0d7XxSaQQ==} + + '@vitest/snapshot@4.0.8': + resolution: {integrity: sha512-Nar9OTU03KGiubrIOFhcfHg8FYaRaNT+bh5VUlNz8stFhCZPNrJvmZkhsr1jtaYvuefYFwK2Hwrq026u4uPWCw==} + + '@vitest/spy@4.0.8': + resolution: {integrity: sha512-nvGVqUunyCgZH7kmo+Ord4WgZ7lN0sOULYXUOYuHr55dvg9YvMz3izfB189Pgp28w0vWFbEEfNc/c3VTrqrXeA==} + + '@vitest/utils@4.0.8': + resolution: {integrity: sha512-pdk2phO5NDvEFfUTxcTP8RFYjVj/kfLSPIN5ebP2Mu9kcIMeAQTbknqcFEyBcC4z2pJlJI9aS5UQjcYfhmKAow==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + chai@6.2.0: + resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} + engines: {node: '>=18'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + rollup@4.53.2: + resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + vite@7.2.2: + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.8: + resolution: {integrity: sha512-urzu3NCEV0Qa0Y2PwvBtRgmNtxhj5t5ULw7cuKhIHh3OrkKTLlut0lnBOv9qe5OvbkMH2g38G7KPDCTpIytBVg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.8 + '@vitest/browser-preview': 4.0.8 + '@vitest/browser-webdriverio': 4.0.8 + '@vitest/ui': 4.0.8 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + +snapshots: + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@rollup/rollup-android-arm-eabi@4.53.2': + optional: true + + '@rollup/rollup-android-arm64@4.53.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.2': + optional: true + + '@rollup/rollup-darwin-x64@4.53.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.2': + optional: true + + '@standard-schema/spec@1.0.0': {} + + '@tsconfig/strictest@2.0.7': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/node@24.10.0': + dependencies: + undici-types: 7.16.0 + + '@vitest/expect@4.0.8': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.8 + '@vitest/utils': 4.0.8 + chai: 6.2.0 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.8(vite@7.2.2(@types/node@24.10.0))': + dependencies: + '@vitest/spy': 4.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.2(@types/node@24.10.0) + + '@vitest/pretty-format@4.0.8': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.8': + dependencies: + '@vitest/utils': 4.0.8 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.8': + dependencies: + '@vitest/pretty-format': 4.0.8 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.8': {} + + '@vitest/utils@4.0.8': + dependencies: + '@vitest/pretty-format': 4.0.8 + tinyrainbow: 3.0.3 + + assertion-error@2.0.1: {} + + chai@6.2.0: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + es-module-lexer@1.7.0: {} + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + expect-type@1.2.2: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fsevents@2.3.3: + optional: true + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + rollup@4.53.2: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.2 + '@rollup/rollup-android-arm64': 4.53.2 + '@rollup/rollup-darwin-arm64': 4.53.2 + '@rollup/rollup-darwin-x64': 4.53.2 + '@rollup/rollup-freebsd-arm64': 4.53.2 + '@rollup/rollup-freebsd-x64': 4.53.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 + '@rollup/rollup-linux-arm-musleabihf': 4.53.2 + '@rollup/rollup-linux-arm64-gnu': 4.53.2 + '@rollup/rollup-linux-arm64-musl': 4.53.2 + '@rollup/rollup-linux-loong64-gnu': 4.53.2 + '@rollup/rollup-linux-ppc64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-musl': 4.53.2 + '@rollup/rollup-linux-s390x-gnu': 4.53.2 + '@rollup/rollup-linux-x64-gnu': 4.53.2 + '@rollup/rollup-linux-x64-musl': 4.53.2 + '@rollup/rollup-openharmony-arm64': 4.53.2 + '@rollup/rollup-win32-arm64-msvc': 4.53.2 + '@rollup/rollup-win32-ia32-msvc': 4.53.2 + '@rollup/rollup-win32-x64-gnu': 4.53.2 + '@rollup/rollup-win32-x64-msvc': 4.53.2 + fsevents: 2.3.3 + + siginfo@2.0.0: {} + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + + typescript@5.9.3: {} + + undici-types@7.16.0: {} + + vite@7.2.2(@types/node@24.10.0): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.2 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.0 + fsevents: 2.3.3 + + vitest@4.0.8(@types/node@24.10.0): + dependencies: + '@vitest/expect': 4.0.8 + '@vitest/mocker': 4.0.8(vite@7.2.2(@types/node@24.10.0)) + '@vitest/pretty-format': 4.0.8 + '@vitest/runner': 4.0.8 + '@vitest/snapshot': 4.0.8 + '@vitest/spy': 4.0.8 + '@vitest/utils': 4.0.8 + debug: 4.4.3 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.2(@types/node@24.10.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 From b022af913855bf1deb9f7ab7c1459103cb694294 Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 14:59:31 +0200 Subject: [PATCH 5/9] Simplify JsonEncode using JSON.stringify replacer function --- bigintHelpers.go.tmpl | 42 +++++------------------------------------- 1 file changed, 5 insertions(+), 37 deletions(-) diff --git a/bigintHelpers.go.tmpl b/bigintHelpers.go.tmpl index 22066d2..8722c44 100644 --- a/bigintHelpers.go.tmpl +++ b/bigintHelpers.go.tmpl @@ -50,40 +50,6 @@ const BIG_INT_FIELDS: { [typ: string]: (string | [string, string])[] } = { {{- end }} } -// Encode in-place: mutate provided object graph to serialize bigints to strings. -function encodeType(typ: string, obj: any): any { - if (obj == null || typeof obj !== 'object') return obj - const descs = BIG_INT_FIELDS[typ] || [] - if (!descs.length) return obj - for (const d of descs) { - if (Array.isArray(d)) { - const [fieldName, nestedType] = d - if (fieldName.endsWith('[]')) { - const base = fieldName.slice(0, -2) - const arr = obj[base] - if (Array.isArray(arr)) { - for (let i = 0; i < arr.length; i++) arr[i] = encodeType(nestedType, arr[i]) - } - } else if (obj[fieldName]) { - obj[fieldName] = encodeType(nestedType, obj[fieldName]) - } - continue - } - if (d.endsWith('[]')) { - const base = d.slice(0, -2) - const arr = obj[base] - if (Array.isArray(arr)) { - for (let i = 0; i < arr.length; i++) { - if (typeof arr[i] === 'bigint') arr[i] = arr[i].toString() - } - } - continue - } - if (typeof obj[d] === 'bigint') obj[d] = obj[d].toString() - } - return obj -} - // Decode in-place: mutate object graph; throw if expected numeric string is invalid. function decodeType(typ: string, obj: any): any { if (obj == null || typeof obj !== 'object') return obj @@ -124,9 +90,11 @@ function decodeType(typ: string, obj: any): any { return obj } -// Encode object of given root type to JSON with BigInts converted to decimal strings. -export const JsonEncode = (obj: T, typ: string = ''): string => { - return JSON.stringify(encodeType(typ, obj)) +// Encode object to JSON with BigInts converted to decimal strings. +export const JsonEncode = (obj: T): string => { + return JSON.stringify(obj, (key, value) => + typeof value === 'bigint' ? value.toString() : value + ) } // Decode data (JSON string or already-parsed object) and convert declared BigInt string fields back to BigInt. From 98cc3193a56ecedee270d3042bf6dd7ec6e15e24 Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 14:59:48 +0200 Subject: [PATCH 6/9] Fix JsonDecode to handle nested array types correctly --- bigintHelpers.go.tmpl | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/bigintHelpers.go.tmpl b/bigintHelpers.go.tmpl index 8722c44..5a1d431 100644 --- a/bigintHelpers.go.tmpl +++ b/bigintHelpers.go.tmpl @@ -65,7 +65,16 @@ function decodeType(typ: string, obj: any): any { for (let i = 0; i < arr.length; i++) arr[i] = decodeType(nestedType, arr[i]) } } else if (obj[fieldName]) { - obj[fieldName] = decodeType(nestedType, obj[fieldName]) + // Handle nestedType that might be an array type like 'Message[]' + if (nestedType.endsWith('[]')) { + const baseType = nestedType.slice(0, -2) + const arr = obj[fieldName] + if (Array.isArray(arr)) { + for (let i = 0; i < arr.length; i++) arr[i] = decodeType(baseType, arr[i]) + } + } else { + obj[fieldName] = decodeType(nestedType, obj[fieldName]) + } } continue } @@ -76,7 +85,7 @@ function decodeType(typ: string, obj: any): any { for (let i = 0; i < arr.length; i++) { const v = arr[i] if (typeof v === 'string') { - try { arr[i] = BigInt(v) } catch (e) { throw WebrpcBadResponseError.new({ cause: `Invalid bigint value for ${base}[${i}]: ${v}` }) } + try { arr[i] = BigInt(v) } catch (e) { throw WebrpcBadResponseError.new({ cause: `Invalid bigint value at ${base}[${i}]: ${v}` }) } } } } From 93056462f00cb40b566d4ff73a8615b5792aaac3 Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 14:59:53 +0200 Subject: [PATCH 7/9] Update test schema to use explicit bigint type --- bigintHelpers.go.tmpl | 2 +- tests-unit/client.gen.ts | 396 +++++++++++++++++++++++++++++++++++++++ tests-unit/service.ridl | 23 +++ 3 files changed, 420 insertions(+), 1 deletion(-) create mode 100644 tests-unit/client.gen.ts create mode 100644 tests-unit/service.ridl diff --git a/bigintHelpers.go.tmpl b/bigintHelpers.go.tmpl index 5a1d431..5f04a52 100644 --- a/bigintHelpers.go.tmpl +++ b/bigintHelpers.go.tmpl @@ -85,7 +85,7 @@ function decodeType(typ: string, obj: any): any { for (let i = 0; i < arr.length; i++) { const v = arr[i] if (typeof v === 'string') { - try { arr[i] = BigInt(v) } catch (e) { throw WebrpcBadResponseError.new({ cause: `Invalid bigint value at ${base}[${i}]: ${v}` }) } + try { arr[i] = BigInt(v) } catch (e) { throw WebrpcBadResponseError.new({ cause: `Invalid bigint value for ${base}[${i}]: ${v}` }) } } } } diff --git a/tests-unit/client.gen.ts b/tests-unit/client.gen.ts new file mode 100644 index 0000000..0cc0afa --- /dev/null +++ b/tests-unit/client.gen.ts @@ -0,0 +1,396 @@ +/* eslint-disable */ +// bigint-unit-tests v1.0.0 80d5918adea956c6ce237b5e8d5545d08bb7d52c +// -- +// Code generated by Webrpc-gen@v0.31.1 with ../ generator. DO NOT EDIT. +// +// webrpc-gen -schema=service.ridl -target=../ -out=client.gen.ts + +// Webrpc description and code-gen version +export const WebrpcVersion = "v1" + +// Schema version of your RIDL schema +export const WebrpcSchemaVersion = "v1.0.0" + +// Schema hash generated from your RIDL schema +export const WebrpcSchemaHash = "80d5918adea956c6ce237b5e8d5545d08bb7d52c" + + + +// +// Schema types +// + +export interface Message { + id: bigint + userId: bigint + timestamp: bigint + content: string +} + +export interface BigIntArrayTest { + ids: Array + timestamps: Array + messages: Array + optionalIds?: Array +} + +export interface BigIntArrayResponse { + data: BigIntArrayTest +} + + +export interface SendBigIntArraysRequest { + data: BigIntArrayTest +} + +export interface SendBigIntArraysResponse { + success: boolean +} + + + + + +// +// BigInt helpers +// + +const BIG_INT_FIELDS: { [typ: string]: (string | [string, string])[] } = { + BigIntArrayResponse: [['data', 'BigIntArrayTest']], + BigIntArrayTest: ['ids[]', 'timestamps[]', ['messages', 'Message[]'], 'optionalIds[]'], + Message: ['id', 'userId', 'timestamp'], + SendBigIntArraysRequest: [['data', 'BigIntArrayTest']] +} + +// Decode in-place: mutate object graph; throw if expected numeric string is invalid. +function decodeType(typ: string, obj: any): any { + if (obj == null || typeof obj !== 'object') return obj + const descs = BIG_INT_FIELDS[typ] || [] + if (!descs.length) return obj + for (const d of descs) { + if (Array.isArray(d)) { + const [fieldName, nestedType] = d + if (fieldName.endsWith('[]')) { + const base = fieldName.slice(0, -2) + const arr = obj[base] + if (Array.isArray(arr)) { + for (let i = 0; i < arr.length; i++) arr[i] = decodeType(nestedType, arr[i]) + } + } else if (obj[fieldName]) { + // Handle nestedType that might be an array type like 'Message[]' + if (nestedType.endsWith('[]')) { + const baseType = nestedType.slice(0, -2) + const arr = obj[fieldName] + if (Array.isArray(arr)) { + for (let i = 0; i < arr.length; i++) arr[i] = decodeType(baseType, arr[i]) + } + } else { + obj[fieldName] = decodeType(nestedType, obj[fieldName]) + } + } + continue + } + if (d.endsWith('[]')) { + const base = d.slice(0, -2) + const arr = obj[base] + if (Array.isArray(arr)) { + for (let i = 0; i < arr.length; i++) { + const v = arr[i] + if (typeof v === 'string') { + try { arr[i] = BigInt(v) } catch (e) { throw WebrpcBadResponseError.new({ cause: `Invalid bigint value for ${base}[${i}]: ${v}` }) } + } + } + } + continue + } + const v = obj[d] + if (typeof v === 'string') { + try { obj[d] = BigInt(v) } catch (e) { throw WebrpcBadResponseError.new({ cause: `Invalid bigint value for ${d}: ${v}` }) } + } + } + return obj +} + +// Encode object to JSON with BigInts converted to decimal strings. +export const JsonEncode = (obj: T): string => { + return JSON.stringify(obj, (key, value) => + typeof value === 'bigint' ? value.toString() : value + ) +} + +// Decode data (JSON string or already-parsed object) and convert declared BigInt string fields back to BigInt. +export const JsonDecode = (data: string | any, typ: string = ''): T => { + let parsed: any = data + if (typeof data === 'string') { + try { parsed = JSON.parse(data) } catch (err) { + throw WebrpcBadResponseError.new({ cause: `JsonDecode: JSON.parse failed: ${(err as Error).message}` }) + } + } + return decodeType(typ, parsed) as T +} + + +// +// Errors +// + +type WebrpcErrorParams = { name?: string, code?: number, message?: string, status?: number, cause?: string } + +export class WebrpcError extends Error { + code: number + status: number + + constructor(error: WebrpcErrorParams = {}) { + super(error.message) + this.name = error.name || 'WebrpcEndpointError' + this.code = typeof error.code === 'number' ? error.code : 0 + this.message = error.message || `endpoint error` + this.status = typeof error.status === 'number' ? error.status : 400 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcError.prototype) + } + + static new(payload: any): WebrpcError { + return new this({ message: payload.message, code: payload.code, status: payload.status, cause: payload.cause }) + } +} + + +export class WebrpcEndpointError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcEndpoint' + this.code = typeof error.code === 'number' ? error.code : 0 + this.message = error.message || `endpoint error` + this.status = typeof error.status === 'number' ? error.status : 400 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcEndpointError.prototype) + } +} + +export class WebrpcRequestFailedError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcRequestFailed' + this.code = typeof error.code === 'number' ? error.code : -1 + this.message = error.message || `request failed` + this.status = typeof error.status === 'number' ? error.status : 400 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcRequestFailedError.prototype) + } +} + +export class WebrpcBadRouteError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcBadRoute' + this.code = typeof error.code === 'number' ? error.code : -2 + this.message = error.message || `bad route` + this.status = typeof error.status === 'number' ? error.status : 404 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcBadRouteError.prototype) + } +} + +export class WebrpcBadMethodError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcBadMethod' + this.code = typeof error.code === 'number' ? error.code : -3 + this.message = error.message || `bad method` + this.status = typeof error.status === 'number' ? error.status : 405 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcBadMethodError.prototype) + } +} + +export class WebrpcBadRequestError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcBadRequest' + this.code = typeof error.code === 'number' ? error.code : -4 + this.message = error.message || `bad request` + this.status = typeof error.status === 'number' ? error.status : 400 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcBadRequestError.prototype) + } +} + +export class WebrpcBadResponseError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcBadResponse' + this.code = typeof error.code === 'number' ? error.code : -5 + this.message = error.message || `bad response` + this.status = typeof error.status === 'number' ? error.status : 500 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcBadResponseError.prototype) + } +} + +export class WebrpcServerPanicError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcServerPanic' + this.code = typeof error.code === 'number' ? error.code : -6 + this.message = error.message || `server panic` + this.status = typeof error.status === 'number' ? error.status : 500 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcServerPanicError.prototype) + } +} + +export class WebrpcInternalErrorError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcInternalError' + this.code = typeof error.code === 'number' ? error.code : -7 + this.message = error.message || `internal error` + this.status = typeof error.status === 'number' ? error.status : 500 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcInternalErrorError.prototype) + } +} + +export class WebrpcClientAbortedError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcClientAborted' + this.code = typeof error.code === 'number' ? error.code : -8 + this.message = error.message || `request aborted by client` + this.status = typeof error.status === 'number' ? error.status : 400 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcClientAbortedError.prototype) + } +} + +export class WebrpcStreamLostError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcStreamLost' + this.code = typeof error.code === 'number' ? error.code : -9 + this.message = error.message || `stream lost` + this.status = typeof error.status === 'number' ? error.status : 400 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcStreamLostError.prototype) + } +} + +export class WebrpcStreamFinishedError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'WebrpcStreamFinished' + this.code = typeof error.code === 'number' ? error.code : -10 + this.message = error.message || `stream finished` + this.status = typeof error.status === 'number' ? error.status : 200 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, WebrpcStreamFinishedError.prototype) + } +} + + +// +// Schema errors +// + + +export enum errors { + WebrpcEndpoint = 'WebrpcEndpoint', + WebrpcRequestFailed = 'WebrpcRequestFailed', + WebrpcBadRoute = 'WebrpcBadRoute', + WebrpcBadMethod = 'WebrpcBadMethod', + WebrpcBadRequest = 'WebrpcBadRequest', + WebrpcBadResponse = 'WebrpcBadResponse', + WebrpcServerPanic = 'WebrpcServerPanic', + WebrpcInternalError = 'WebrpcInternalError', + WebrpcClientAborted = 'WebrpcClientAborted', + WebrpcStreamLost = 'WebrpcStreamLost', + WebrpcStreamFinished = 'WebrpcStreamFinished', +} + +export enum WebrpcErrorCodes { + WebrpcEndpoint = 0, + WebrpcRequestFailed = -1, + WebrpcBadRoute = -2, + WebrpcBadMethod = -3, + WebrpcBadRequest = -4, + WebrpcBadResponse = -5, + WebrpcServerPanic = -6, + WebrpcInternalError = -7, + WebrpcClientAborted = -8, + WebrpcStreamLost = -9, + WebrpcStreamFinished = -10, +} + +export const webrpcErrorByCode: { [code: number]: any } = { + [0]: WebrpcEndpointError, + [-1]: WebrpcRequestFailedError, + [-2]: WebrpcBadRouteError, + [-3]: WebrpcBadMethodError, + [-4]: WebrpcBadRequestError, + [-5]: WebrpcBadResponseError, + [-6]: WebrpcServerPanicError, + [-7]: WebrpcInternalErrorError, + [-8]: WebrpcClientAbortedError, + [-9]: WebrpcStreamLostError, + [-10]: WebrpcStreamFinishedError, +} + + + +// +// Webrpc +// + +export const WebrpcHeader = "Webrpc" + +export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;bigint-unit-tests@v1.0.0" + +type WebrpcGenVersions = { + WebrpcGenVersion: string; + codeGenName: string; + codeGenVersion: string; + schemaName: string; + schemaVersion: string; +}; + +export function VersionFromHeader(headers: Headers): WebrpcGenVersions { + const headerValue = headers.get(WebrpcHeader) + if (!headerValue) { + return { + WebrpcGenVersion: "", + codeGenName: "", + codeGenVersion: "", + schemaName: "", + schemaVersion: "", + }; + } + + return parseWebrpcGenVersions(headerValue) +} + +function parseWebrpcGenVersions(header: string): WebrpcGenVersions { + const versions = header.split(";") + if (versions.length < 3) { + return { + WebrpcGenVersion: "", + codeGenName: "", + codeGenVersion: "", + schemaName: "", + schemaVersion: "", + }; + } + + const [_, WebrpcGenVersion] = versions[0]!.split("@") + const [codeGenName, codeGenVersion] = versions[1]!.split("@") + const [schemaName, schemaVersion] = versions[2]!.split("@") + + return { + WebrpcGenVersion: WebrpcGenVersion ?? "", + codeGenName: codeGenName ?? "", + codeGenVersion: codeGenVersion ?? "", + schemaName: schemaName ?? "", + schemaVersion: schemaVersion ?? "", + }; +} + diff --git a/tests-unit/service.ridl b/tests-unit/service.ridl new file mode 100644 index 0000000..b2dac51 --- /dev/null +++ b/tests-unit/service.ridl @@ -0,0 +1,23 @@ +webrpc = v1 + +name = bigint-unit-tests +version = v1.0.0 + +struct Message + - id: bigint + - userId: bigint + - timestamp: bigint + - content: string + +struct BigIntArrayTest + - ids: []bigint + - timestamps: []bigint + - messages: []Message + - optionalIds?: []bigint + +struct BigIntArrayResponse + - data: BigIntArrayTest + +service BigIntTestService + - GetBigIntArrays() => (BigIntArrayResponse) + - SendBigIntArrays(data: BigIntArrayTest) => (success: bool) From 7db9e954cb48816159fe2d70bc065415021971d4 Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 15:26:36 +0200 Subject: [PATCH 8/9] Regenerate example files with updated generator version --- _examples/node-ts/server-fastify/server.gen.ts | 6 +++--- _examples/node-ts/server-hono/server.gen.ts | 6 +++--- _examples/node-ts/server/server.gen.ts | 6 +++--- _examples/node-ts/webapp/client.gen.ts | 6 +++--- _examples/sse/webapp/client.gen.ts | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/_examples/node-ts/server-fastify/server.gen.ts b/_examples/node-ts/server-fastify/server.gen.ts index bbb24b5..516cc57 100644 --- a/_examples/node-ts/server-fastify/server.gen.ts +++ b/_examples/node-ts/server-fastify/server.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.30.4 with ../../../gen-typescript generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -server -out=./server-fastify/server.gen.ts +// webrpc-gen -schema=service.ridl -target=../../ -server -out=./server-fastify/server.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -555,7 +555,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.30.4;gen-typescript@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/node-ts/server-hono/server.gen.ts b/_examples/node-ts/server-hono/server.gen.ts index 3a50951..f00028d 100644 --- a/_examples/node-ts/server-hono/server.gen.ts +++ b/_examples/node-ts/server-hono/server.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.30.4 with ../../../gen-typescript generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -server -out=./server-hono/server.gen.ts +// webrpc-gen -schema=service.ridl -target=../../ -server -out=./server-hono/server.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -555,7 +555,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.30.4;gen-typescript@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/node-ts/server/server.gen.ts b/_examples/node-ts/server/server.gen.ts index 9187217..ca22dcd 100644 --- a/_examples/node-ts/server/server.gen.ts +++ b/_examples/node-ts/server/server.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.30.4 with ../../../gen-typescript generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -server -out=./server/server.gen.ts +// webrpc-gen -schema=service.ridl -target=../../ -server -out=./server/server.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -555,7 +555,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.30.4;gen-typescript@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/node-ts/webapp/client.gen.ts b/_examples/node-ts/webapp/client.gen.ts index cd453fc..ca3f5e4 100644 --- a/_examples/node-ts/webapp/client.gen.ts +++ b/_examples/node-ts/webapp/client.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.30.4 with ../../../gen-typescript generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -client -out=./webapp/client.gen.ts +// webrpc-gen -schema=service.ridl -target=../../ -client -out=./webapp/client.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -496,7 +496,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.30.4;gen-typescript@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/sse/webapp/client.gen.ts b/_examples/sse/webapp/client.gen.ts index 6c818b2..aee06a9 100644 --- a/_examples/sse/webapp/client.gen.ts +++ b/_examples/sse/webapp/client.gen.ts @@ -1,7 +1,7 @@ /* eslint-disable */ // webrpc-sse-chat v1.0.0 a799dc63b082644f5d003c8881424546aee23a2c // -- -// Code generated by Webrpc-gen@v0.30.4 with ../../ generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. // // webrpc-gen -schema=service.ridl -target=../../ -client -out=./webapp/client.gen.ts @@ -565,7 +565,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.30.4;@unknown;webrpc-sse-chat@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;webrpc-sse-chat@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; From 9b179736794f6ce5c9c00adc9a39227cbee387df Mon Sep 17 00:00:00 2001 From: Alexander Kolberg Date: Wed, 12 Nov 2025 15:34:58 +0200 Subject: [PATCH 9/9] Regenrate examples --- _examples/node-ts/server-fastify/server.gen.ts | 6 +++--- _examples/node-ts/server-hono/server.gen.ts | 6 +++--- _examples/node-ts/server/server.gen.ts | 6 +++--- _examples/node-ts/webapp/client.gen.ts | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/_examples/node-ts/server-fastify/server.gen.ts b/_examples/node-ts/server-fastify/server.gen.ts index 516cc57..4f4e08e 100644 --- a/_examples/node-ts/server-fastify/server.gen.ts +++ b/_examples/node-ts/server-fastify/server.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../../gen-typescript generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../ -server -out=./server-fastify/server.gen.ts +// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -server -out=./server-fastify/server.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -555,7 +555,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;gen-typescript@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/node-ts/server-hono/server.gen.ts b/_examples/node-ts/server-hono/server.gen.ts index f00028d..34312a1 100644 --- a/_examples/node-ts/server-hono/server.gen.ts +++ b/_examples/node-ts/server-hono/server.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../../gen-typescript generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../ -server -out=./server-hono/server.gen.ts +// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -server -out=./server-hono/server.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -555,7 +555,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;gen-typescript@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/node-ts/server/server.gen.ts b/_examples/node-ts/server/server.gen.ts index ca22dcd..582060b 100644 --- a/_examples/node-ts/server/server.gen.ts +++ b/_examples/node-ts/server/server.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../../gen-typescript generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../ -server -out=./server/server.gen.ts +// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -server -out=./server/server.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -555,7 +555,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;gen-typescript@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string; diff --git a/_examples/node-ts/webapp/client.gen.ts b/_examples/node-ts/webapp/client.gen.ts index ca3f5e4..45c420f 100644 --- a/_examples/node-ts/webapp/client.gen.ts +++ b/_examples/node-ts/webapp/client.gen.ts @@ -1,9 +1,9 @@ /* eslint-disable */ // node-ts v1.0.0 21701cae51b73d035bf2180831cdb38220bbbccc // -- -// Code generated by Webrpc-gen@v0.31.1 with ../../ generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.31.1 with ../../../gen-typescript generator. DO NOT EDIT. // -// webrpc-gen -schema=service.ridl -target=../../ -client -out=./webapp/client.gen.ts +// webrpc-gen -schema=service.ridl -target=../../../gen-typescript -client -out=./webapp/client.gen.ts // Webrpc description and code-gen version export const WebrpcVersion = "v1" @@ -496,7 +496,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = "Webrpc" -export const WebrpcHeaderValue = "webrpc@v0.31.1;@unknown;node-ts@v1.0.0" +export const WebrpcHeaderValue = "webrpc@v0.31.1;gen-typescript@unknown;node-ts@v1.0.0" type WebrpcGenVersions = { WebrpcGenVersion: string;