Skip to content

Commit 95c64b3

Browse files
committed
Javascript fix issues, unit tests, adding CI
1 parent 23f6c7a commit 95c64b3

7 files changed

Lines changed: 4229 additions & 18 deletions

File tree

.github/workflows/test.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Tests
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
javascript:
11+
name: JavaScript Tests
12+
runs-on: ubuntu-latest
13+
14+
defaults:
15+
run:
16+
working-directory: javascript
17+
18+
steps:
19+
- uses: actions/checkout@v4
20+
21+
- name: Setup Node.js
22+
uses: actions/setup-node@v4
23+
with:
24+
node-version: '20'
25+
cache: 'npm'
26+
cache-dependency-path: javascript/package-lock.json
27+
28+
- name: Install dependencies
29+
run: npm ci
30+
31+
- name: Run tests
32+
run: npm test

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
!examples/*.json
1010
!examples/*.beve
1111

12+
# Allow package.json in javascript
13+
!javascript/package.json
14+
!javascript/package-lock.json
15+
16+
# JavaScript
17+
javascript/node_modules/
18+
1219
# Added by cargo
1320

1421
/target

javascript/beve.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,12 @@
304304
}
305305

306306
function read_compressed() {
307-
const header = buffer[cursor++];
307+
const header = buffer[cursor];
308308
const config = header & 0b00000011;
309309

310310
switch (config) {
311311
case 0:
312+
cursor += 1;
312313
return header >> 2;
313314
case 1: {
314315
const h = new DataView(buffer.buffer, cursor, 2);
@@ -323,8 +324,9 @@
323324
case 3: {
324325
let val = BigInt(0);
325326
for (let i = 0; i < 8; ++i) {
326-
val |= BigInt(buffer[cursor++]) << BigInt(8 * i);
327+
val |= BigInt(buffer[cursor + i]) << BigInt(8 * i);
327328
}
329+
cursor += 8;
328330
return Number(val >> BigInt(2));
329331
}
330332
default:
@@ -528,8 +530,11 @@
528530
} else if (typeof value === 'string') {
529531
let header = 2;
530532
writer.append_uint8(header);
531-
writeCompressed(writer, value.length);
532-
writer.append(value);
533+
const bytes = new TextEncoder().encode(value);
534+
writeCompressed(writer, bytes.length);
535+
writer.ensureCapacity(bytes.length);
536+
writer.buffer.set(bytes, writer.offset);
537+
writer.offset += bytes.length;
533538
} else if (Array.isArray(value)) {
534539
let header = 5;
535540
writer.append_uint8(header);
@@ -546,8 +551,11 @@
546551
writer.append_uint8(header);
547552
writeCompressed(writer, Object.keys(value).length);
548553
for (const key in value) {
549-
writeCompressed(writer, key.length);
550-
writer.append(key);
554+
const keyBytes = new TextEncoder().encode(key);
555+
writeCompressed(writer, keyBytes.length);
556+
writer.ensureCapacity(keyBytes.length);
557+
writer.buffer.set(keyBytes, writer.offset);
558+
writer.offset += keyBytes.length;
551559
write_value(writer, value[key]);
552560
}
553561
} else {

0 commit comments

Comments
 (0)