add duckdb-ui-client & other ts pkgs (#10)

* add duckdb-ui-client & other ts pkgs

* workflow fixes

* fix working dir

* no sparse checkout; specify package.json path

* path to pnpm-lock.yaml

* add check & build test

* workflow step descriptions

* use comments & names

* one more naming tweak
This commit is contained in:
Jeff Raymakers
2025-06-13 09:06:55 -07:00
parent d6cc9eeea4
commit 0edb52054a
133 changed files with 11112 additions and 4 deletions

View File

@@ -0,0 +1,87 @@
import { expect, suite, test } from 'vitest';
import { BinaryDeserializer } from '../../../src/serialization/classes/BinaryDeserializer';
import { BinaryStreamReader } from '../../../src/serialization/classes/BinaryStreamReader';
import {
readString,
readUint8,
} from '../../../src/serialization/functions/basicReaders';
import { makeBuffer } from '../../helpers/makeBuffer';
suite('BinaryDeserializer', () => {
test('read uint8', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([17, 42])),
);
expect(deserializer.readUint8()).toBe(17);
expect(deserializer.readUint8()).toBe(42);
});
test('read varint', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([0x81, 0x82, 0x03])),
);
expect(deserializer.readVarInt()).toBe((3 << 14) | (2 << 7) | 1);
});
test('read nullable', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([0, 1, 17])),
);
expect(deserializer.readNullable(readUint8)).toBe(null);
expect(deserializer.readNullable(readUint8)).toBe(17);
});
test('read data', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([3, 0xa, 0xb, 0xc])),
);
const dv = deserializer.readData();
expect(dv.byteLength).toBe(3);
expect(dv.getUint8(0)).toBe(0xa);
expect(dv.getUint8(1)).toBe(0xb);
expect(dv.getUint8(2)).toBe(0xc);
});
test('read string', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([4, 0x64, 0x75, 0x63, 0x6b])),
);
expect(deserializer.readString()).toBe('duck');
});
test('read list (of string)', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(
makeBuffer([
3, 4, 0x77, 0x61, 0x6c, 0x6b, 4, 0x73, 0x77, 0x69, 0x6d, 3, 0x66,
0x6c, 0x79,
]),
),
);
expect(deserializer.readList(readString)).toEqual(['walk', 'swim', 'fly']);
});
test('read pair', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(
makeBuffer([0, 0, 4, 0x64, 0x75, 0x63, 0x6b, 1, 0, 42, 0xff, 0xff]),
),
);
expect(deserializer.readPair(readString, readUint8)).toEqual(['duck', 42]);
});
test('read property', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([100, 0, 4, 0x64, 0x75, 0x63, 0x6b])),
);
expect(deserializer.readProperty(100, readString)).toEqual('duck');
});
test('read property (not present)', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([100, 0, 4, 0x64, 0x75, 0x63, 0x6b])),
);
expect(() => deserializer.readProperty(101, readString)).toThrowError(
'Expected field id 101 but got 100 (offset=0)',
);
});
test('read property with default', () => {
const deserializer = new BinaryDeserializer(
new BinaryStreamReader(makeBuffer([101, 0, 42])),
);
expect(deserializer.readPropertyWithDefault(100, readUint8, 17)).toBe(17);
expect(deserializer.readPropertyWithDefault(101, readUint8, 17)).toBe(42);
});
});