flatsql 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flatsql",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "SQL queries over raw FlatBuffer storage - zero conversion, real-time indexing, pure streaming",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -70,7 +70,7 @@
70
70
  "bench": "node bench/flatsql-perf.mjs",
71
71
  "bench:perf": "node bench/flatsql-perf.mjs",
72
72
  "bench:perf:profile": "node bench/flatsql-perf.mjs --profile",
73
- "prepublishOnly": "npm run build && npm run test:wasi && npm run test:wasmedge && npm test -- --runInBand --runTestsByPath test/package-exports.test.ts",
73
+ "prepublishOnly": "npm run build && npm run test:wasi && npm run test:wasmedge && npm test -- --runInBand --runTestsByPath test/package-exports.test.ts test/wasm-generic-extractor.test.ts test/wasm-pointer.test.ts",
74
74
  "emsdk:install": "bash scripts/install-emsdk.sh",
75
75
  "emsdk:env": "echo 'Run: source packages/emsdk/emsdk_env.sh'",
76
76
  "test:wasi": "node --experimental-wasm-exnref --experimental-vm-modules node_modules/jest/bin/jest.js --runTestsByPath test/wasi.test.ts test/standalone-wasm-imports.test.ts",
Binary file
package/wasm/flatsql.wasm CHANGED
Binary file
package/wasm/index.d.ts CHANGED
@@ -474,4 +474,6 @@ export function initFlatSQL(options?: InitOptions | (() => Promise<any>)): Promi
474
474
  */
475
475
  export function wasIntegrityVerified(): boolean;
476
476
 
477
+ export function __testWasmPointerToByteOffset(ptr: number): number;
478
+
477
479
  export default initFlatSQL;
package/wasm/index.js CHANGED
@@ -359,10 +359,32 @@ export function wasIntegrityVerified() {
359
359
  return integrityVerified;
360
360
  }
361
361
 
362
+ function wasmPointerToByteOffset(ptr) {
363
+ const numeric = Number(ptr);
364
+ if (!Number.isFinite(numeric)) {
365
+ throw new TypeError(`Invalid WASM pointer: ${ptr}`);
366
+ }
367
+ return numeric >>> 0;
368
+ }
369
+
370
+ export const __testWasmPointerToByteOffset = wasmPointerToByteOffset;
371
+
372
+ function heapBytes(ptr, size) {
373
+ return new Uint8Array(Module.HEAPU8.buffer, wasmPointerToByteOffset(ptr), size);
374
+ }
375
+
376
+ function copyHeapBytes(ptr, size) {
377
+ return heapBytes(ptr, size).slice();
378
+ }
379
+
380
+ function setHeapBytes(data, ptr) {
381
+ Module.HEAPU8.set(data, wasmPointerToByteOffset(ptr));
382
+ }
383
+
362
384
  function withHeapBytes(data, callback) {
363
385
  const ptr = Module._malloc(data.length);
364
386
  try {
365
- Module.HEAPU8.set(data, ptr);
387
+ setHeapBytes(data, ptr);
366
388
  return callback(ptr);
367
389
  } finally {
368
390
  Module._free(ptr);
@@ -468,7 +490,7 @@ function readCellValue(row, col) {
468
490
  const blobPtr = api.resultCellBlob(row, col);
469
491
  const blobSize = api.resultCellBlobSize(row, col);
470
492
  return blobPtr && blobSize > 0
471
- ? Array.from(new Uint8Array(Module.HEAPU8.buffer, blobPtr, blobSize))
493
+ ? Array.from(copyHeapBytes(blobPtr, blobSize))
472
494
  : [];
473
495
  }
474
496
  default:
@@ -525,19 +547,19 @@ export class FlatSQL {
525
547
  createTestUser(id, name, email, age) {
526
548
  const ptr = api.createTestUser(id, name, email, age);
527
549
  const size = api.testBufferSize();
528
- return new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice();
550
+ return copyHeapBytes(ptr, size);
529
551
  }
530
552
 
531
553
  createTestPost(id, userId, title) {
532
554
  const ptr = api.createTestPost(id, userId, title);
533
555
  const size = api.testBufferSize();
534
- return new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice();
556
+ return copyHeapBytes(ptr, size);
535
557
  }
536
558
 
537
559
  createTestPublishEvent(fileId, recordId, eventIndex, payloadSize) {
538
560
  const ptr = api.createTestPublishEvent(fileId, recordId, eventIndex, payloadSize);
539
561
  const size = api.testBufferSize();
540
- return new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice();
562
+ return copyHeapBytes(ptr, size);
541
563
  }
542
564
 
543
565
  createTestMPE(entityId, epoch, meanMotion, eccentricity, inclination,
@@ -555,13 +577,13 @@ export class FlatSQL {
555
577
  meanElementTheory
556
578
  );
557
579
  const size = api.testBufferSize();
558
- return new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice();
580
+ return copyHeapBytes(ptr, size);
559
581
  }
560
582
 
561
583
  createTestTelemetry(packetId, spacecraft, subsystem, mode, temperatureC, signalDb, timestampS) {
562
584
  const ptr = api.createTestTelemetry(packetId, spacecraft, subsystem, mode, temperatureC, signalDb, timestampS);
563
585
  const size = api.testBufferSize();
564
- return new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice();
586
+ return copyHeapBytes(ptr, size);
565
587
  }
566
588
 
567
589
  /**
@@ -799,18 +821,18 @@ export class FlatSQLDatabase {
799
821
 
800
822
  const ptr = api.responseArtifactData();
801
823
  const size = api.responseArtifactSize();
802
- return ptr && size > 0 ? new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice() : new Uint8Array();
824
+ return ptr && size > 0 ? copyHeapBytes(ptr, size) : new Uint8Array();
803
825
  }
804
826
 
805
827
  exportData() {
806
828
  const ptr = api.exportData(this._handle);
807
829
  const size = api.exportSize();
808
- return new Uint8Array(Module.HEAPU8.buffer, ptr, size).slice();
830
+ return copyHeapBytes(ptr, size);
809
831
  }
810
832
 
811
833
  loadAndRebuild(data) {
812
834
  const ptr = Module._malloc(data.length);
813
- Module.HEAPU8.set(data, ptr);
835
+ setHeapBytes(data, ptr);
814
836
  api.loadAndRebuild(this._handle, ptr, data.length);
815
837
  Module._free(ptr);
816
838
  }
@@ -921,7 +943,7 @@ export class FlatSQLDatabase {
921
943
  if (!record) {
922
944
  return null;
923
945
  }
924
- return new Uint8Array(Module.HEAPU8.buffer, record.ptr, record.size).slice();
946
+ return copyHeapBytes(record.ptr, record.size);
925
947
  }
926
948
 
927
949
  getFlatBufferDataByIndex(tableName, columnName, value) {
@@ -929,7 +951,7 @@ export class FlatSQLDatabase {
929
951
  if (!record) {
930
952
  return null;
931
953
  }
932
- return new Uint8Array(Module.HEAPU8.buffer, record.ptr, record.size).slice();
954
+ return copyHeapBytes(record.ptr, record.size);
933
955
  }
934
956
 
935
957
  getStorageInfo() {
@@ -947,7 +969,7 @@ export class FlatSQLDatabase {
947
969
  */
948
970
  setEncryptionKey(key) {
949
971
  const ptr = Module._malloc(key.length);
950
- Module.HEAPU8.set(key, ptr);
972
+ setHeapBytes(key, ptr);
951
973
  const result = api.setEncryptionKey(this._handle, ptr, key.length);
952
974
  Module._free(ptr);
953
975
  if (!result) throw new Error(api.getError());
@@ -969,11 +991,11 @@ export class FlatSQLDatabase {
969
991
  */
970
992
  encryptBuffer(buffer, schema) {
971
993
  const bufPtr = Module._malloc(buffer.length);
972
- Module.HEAPU8.set(buffer, bufPtr);
994
+ setHeapBytes(buffer, bufPtr);
973
995
  const schemaPtr = Module._malloc(schema.length);
974
- Module.HEAPU8.set(schema, schemaPtr);
996
+ setHeapBytes(schema, schemaPtr);
975
997
  const result = api.encryptBuffer(this._handle, bufPtr, buffer.length, schemaPtr, schema.length);
976
- const encrypted = new Uint8Array(Module.HEAPU8.buffer, bufPtr, buffer.length).slice();
998
+ const encrypted = copyHeapBytes(bufPtr, buffer.length);
977
999
  Module._free(bufPtr);
978
1000
  Module._free(schemaPtr);
979
1001
  if (!result) throw new Error(api.getError());
@@ -988,11 +1010,11 @@ export class FlatSQLDatabase {
988
1010
  */
989
1011
  decryptBuffer(buffer, schema) {
990
1012
  const bufPtr = Module._malloc(buffer.length);
991
- Module.HEAPU8.set(buffer, bufPtr);
1013
+ setHeapBytes(buffer, bufPtr);
992
1014
  const schemaPtr = Module._malloc(schema.length);
993
- Module.HEAPU8.set(schema, schemaPtr);
1015
+ setHeapBytes(schema, schemaPtr);
994
1016
  const result = api.decryptBuffer(this._handle, bufPtr, buffer.length, schemaPtr, schema.length);
995
- const decrypted = new Uint8Array(Module.HEAPU8.buffer, bufPtr, buffer.length).slice();
1017
+ const decrypted = copyHeapBytes(bufPtr, buffer.length);
996
1018
  Module._free(bufPtr);
997
1019
  Module._free(schemaPtr);
998
1020
  if (!result) throw new Error(api.getError());
@@ -1026,10 +1048,10 @@ export class FlatSQLDatabase {
1026
1048
  */
1027
1049
  computeHMAC(buffer) {
1028
1050
  const bufPtr = Module._malloc(buffer.length);
1029
- Module.HEAPU8.set(buffer, bufPtr);
1051
+ setHeapBytes(buffer, bufPtr);
1030
1052
  const macPtr = Module._malloc(32);
1031
1053
  const result = api.computeHMAC(this._handle, bufPtr, buffer.length, macPtr);
1032
- const mac = new Uint8Array(Module.HEAPU8.buffer, macPtr, 32).slice();
1054
+ const mac = copyHeapBytes(macPtr, 32);
1033
1055
  Module._free(bufPtr);
1034
1056
  Module._free(macPtr);
1035
1057
  if (!result) throw new Error('HMAC computation failed - is encryption key set?');
@@ -1044,9 +1066,9 @@ export class FlatSQLDatabase {
1044
1066
  */
1045
1067
  verifyHMAC(buffer, mac) {
1046
1068
  const bufPtr = Module._malloc(buffer.length);
1047
- Module.HEAPU8.set(buffer, bufPtr);
1069
+ setHeapBytes(buffer, bufPtr);
1048
1070
  const macPtr = Module._malloc(32);
1049
- Module.HEAPU8.set(mac, macPtr);
1071
+ setHeapBytes(mac, macPtr);
1050
1072
  const result = api.verifyHMAC(this._handle, bufPtr, buffer.length, macPtr);
1051
1073
  Module._free(bufPtr);
1052
1074
  Module._free(macPtr);