@harperfast/harper 5.0.28 → 5.0.29

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.
Files changed (29) hide show
  1. package/config-root.schema.json +4 -0
  2. package/dist/resources/RecordEncoder.d.ts +11 -0
  3. package/dist/resources/RecordEncoder.js +57 -4
  4. package/dist/resources/RecordEncoder.js.map +1 -1
  5. package/dist/resources/Table.js +22 -0
  6. package/dist/resources/Table.js.map +1 -1
  7. package/dist/resources/auditStore.js +5 -1
  8. package/dist/resources/auditStore.js.map +1 -1
  9. package/dist/resources/databases.js +9 -9
  10. package/dist/resources/databases.js.map +1 -1
  11. package/dist/utility/hdbTerms.d.ts +1 -0
  12. package/dist/utility/hdbTerms.js +1 -0
  13. package/dist/utility/hdbTerms.js.map +1 -1
  14. package/package.json +2 -2
  15. package/resources/RecordEncoder.ts +56 -3
  16. package/resources/Table.ts +23 -0
  17. package/resources/auditStore.ts +4 -1
  18. package/resources/databases.ts +10 -10
  19. package/static/defaultConfig.yaml +1 -0
  20. package/studio/web/assets/{index-BJjklK4V.js → index-BFZovM68.js} +5 -5
  21. package/studio/web/assets/{index-BJjklK4V.js.map → index-BFZovM68.js.map} +1 -1
  22. package/studio/web/assets/{index.lazy-DPTCQseJ.js → index.lazy-CTCt7C_C.js} +2 -2
  23. package/studio/web/assets/{index.lazy-DPTCQseJ.js.map → index.lazy-CTCt7C_C.js.map} +1 -1
  24. package/studio/web/assets/{profile-D77bwywc.js → profile-Dy4qT0vm.js} +2 -2
  25. package/studio/web/assets/{profile-D77bwywc.js.map → profile-Dy4qT0vm.js.map} +1 -1
  26. package/studio/web/assets/{status-ChxVrrli.js → status-DQBR5qBd.js} +2 -2
  27. package/studio/web/assets/{status-ChxVrrli.js.map → status-DQBR5qBd.js.map} +1 -1
  28. package/studio/web/index.html +1 -1
  29. package/utility/hdbTerms.ts +1 -0
@@ -552,7 +552,10 @@ export function readAuditEntry(buffer: Uint8Array, start = 0, end = undefined):
552
552
  if (action & HAS_RECORD || (action & HAS_PARTIAL_RECORD && !fullRecord)) {
553
553
  if (!value) {
554
554
  value = decodeFromDatabase(
555
- () => store.decoder.decode(buffer.subarray(decoder.position, end)),
555
+ // the audit value has no on-disk timestamp/metadata prefix (the audit entry carries
556
+ // its own time), so skip the prefix heuristic — otherwise a classic record whose
557
+ // structure-id byte is 66 (0x42) is misread as a rocksdb timestamp. See RecordEncoder.decode.
558
+ () => store.decoder.decode(buffer.subarray(decoder.position, end), { noMetadata: true }),
556
559
  store.rootStore
557
560
  );
558
561
  }
@@ -22,7 +22,7 @@ import harperLogger from '../utility/logging/harper_logger.js';
22
22
  const { forComponent } = harperLogger;
23
23
  import * as manageThreads from '../server/threads/manageThreads.js';
24
24
  import { openAuditStore, readAuditEntry, createAuditEntry, type AuditRecord } from './auditStore.ts';
25
- import { handleLocalTimeForGets } from './RecordEncoder.ts';
25
+ import { handleLocalTimeForGets, IndexRecordEncoder } from './RecordEncoder.ts';
26
26
  import { deleteRootBlobPathsForDB } from './blob.ts';
27
27
  import { CUSTOM_INDEXES } from './indexes/customIndexes.ts';
28
28
  import { OpenDBIObject } from '../utility/lmdb/OpenDBIObject.js';
@@ -134,15 +134,9 @@ function openRocksDatabase(path: string, options: RocksDatabaseOptions & { dupSo
134
134
  const writeBufferManagerAllowStall = envGet(CONFIG_PARAMS.STORAGE_ROCKS_WRITEBUFFERMANAGERALLOWSTALL);
135
135
  RocksDatabase.config({
136
136
  blockCacheSize,
137
- ...(typeof writeBufferManagerSize === 'number' && writeBufferManagerSize > 0
138
- ? { writeBufferManagerSize }
139
- : {}),
140
- ...(typeof writeBufferManagerCostToCache === 'boolean'
141
- ? { writeBufferManagerCostToCache }
142
- : {}),
143
- ...(typeof writeBufferManagerAllowStall === 'boolean'
144
- ? { writeBufferManagerAllowStall }
145
- : {}),
137
+ ...(typeof writeBufferManagerSize === 'number' && writeBufferManagerSize > 0 ? { writeBufferManagerSize } : {}),
138
+ ...(typeof writeBufferManagerCostToCache === 'boolean' ? { writeBufferManagerCostToCache } : {}),
139
+ ...(typeof writeBufferManagerAllowStall === 'boolean' ? { writeBufferManagerAllowStall } : {}),
146
140
  });
147
141
  if (!existsSync(path)) {
148
142
  mkdirSync(path, { recursive: true });
@@ -824,6 +818,12 @@ function openIndex(dbiKey: string, rootStore: RootDatabaseKind, attribute: any)
824
818
  const objectStorage =
825
819
  attribute.isPrimaryKey || (attribute.indexed.type && CUSTOM_INDEXES[attribute.indexed.type]?.useObjectStore);
826
820
  const dbiInit = createOpenDBIObject(!objectStorage, objectStorage);
821
+ // Custom-index object stores (e.g. HNSW vector graphs) must keep writing typed structs regardless
822
+ // of the storage.randomAccessFields opt-out — their internal nodes are mutated in place and depend
823
+ // on random-access struct encoding (see IndexRecordEncoder).
824
+ if (attribute.indexed?.type && CUSTOM_INDEXES[attribute.indexed.type]?.useObjectStore) {
825
+ dbiInit.encoder = { Encoder: IndexRecordEncoder };
826
+ }
827
827
  let dbi:
828
828
  | LMDBDatabase
829
829
  | (RocksDatabase & {
@@ -69,6 +69,7 @@ rootPath: null
69
69
  storage:
70
70
  writeAsync: false
71
71
  caching: true
72
+ randomAccessFields: true
72
73
  compression: true
73
74
  noReadAhead: false
74
75
  path: null