@sochdb/sochdb 0.4.1 → 0.4.2
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/README.md +196 -1
- package/dist/cjs/embedded/ffi/hnsw-bindings.js +295 -0
- package/dist/cjs/embedded/ffi/library-finder.js +10 -3
- package/dist/cjs/embedded/index.js +5 -2
- package/dist/cjs/index.js +9 -6
- package/dist/esm/embedded/ffi/hnsw-bindings.js +316 -0
- package/dist/esm/embedded/ffi/library-finder.js +10 -3
- package/dist/esm/embedded/index.js +5 -2
- package/dist/esm/index.js +9 -6
- package/dist/types/embedded/ffi/hnsw-bindings.d.ts +90 -0
- package/dist/types/embedded/ffi/hnsw-bindings.d.ts.map +1 -0
- package/dist/types/embedded/ffi/library-finder.d.ts.map +1 -1
- package/dist/types/embedded/index.d.ts +1 -0
- package/dist/types/embedded/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* SochDB Node.js SDK v0.4.
|
|
3
|
+
* SochDB Node.js SDK v0.4.2
|
|
4
4
|
*
|
|
5
5
|
* Dual-mode architecture: Embedded (FFI) + Server (gRPC/IPC)
|
|
6
6
|
*
|
|
@@ -37,17 +37,20 @@
|
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.GrpcClient = exports.SplitBrainError = exports.EpochMismatchError = exports.LockTimeoutError = exports.DatabaseLockedError = exports.LockError = exports.ErrorCode = exports.DatabaseError = exports.ProtocolError = exports.TransactionError = exports.ConnectionError = exports.SochDBError = exports.Query = exports.FormatConversionError = exports.FormatCapabilities = exports.CanonicalFormat = exports.ContextFormat = exports.WireFormat = exports.IpcClient = exports.SochDBClient = exports.NamespacePolicy = exports.AllowedSet = exports.HybridRetriever = exports.Consolidator = exports.ExtractionPipeline = exports.createContextBuilder = exports.TruncationStrategy = exports.ContextOutputFormat = exports.ContextQueryBuilder = exports.SemanticCache = exports.createQueue = exports.TaskState = exports.PriorityQueue = exports.CollectionExistsError = exports.CollectionNotFoundError = exports.NamespaceExistsError = exports.NamespaceNotFoundError = exports.DistanceMetric = exports.Collection = exports.Namespace = exports.Database = exports.EmbeddedTransaction = exports.EmbeddedDatabase = exports.VERSION = void 0;
|
|
40
|
+
exports.GrpcClient = exports.SplitBrainError = exports.EpochMismatchError = exports.LockTimeoutError = exports.DatabaseLockedError = exports.LockError = exports.ErrorCode = exports.DatabaseError = exports.ProtocolError = exports.TransactionError = exports.ConnectionError = exports.SochDBError = exports.Query = exports.FormatConversionError = exports.FormatCapabilities = exports.CanonicalFormat = exports.ContextFormat = exports.WireFormat = exports.IpcClient = exports.SochDBClient = exports.NamespacePolicy = exports.AllowedSet = exports.HybridRetriever = exports.Consolidator = exports.ExtractionPipeline = exports.createContextBuilder = exports.TruncationStrategy = exports.ContextOutputFormat = exports.ContextQueryBuilder = exports.SemanticCache = exports.createQueue = exports.TaskState = exports.PriorityQueue = exports.CollectionExistsError = exports.CollectionNotFoundError = exports.NamespaceExistsError = exports.NamespaceNotFoundError = exports.DistanceMetric = exports.Collection = exports.Namespace = exports.Database = exports.HnswBindings = exports.HnswIndex = exports.EmbeddedTransaction = exports.EmbeddedDatabase = exports.VERSION = void 0;
|
|
41
41
|
// Version
|
|
42
|
-
exports.VERSION = '0.4.
|
|
42
|
+
exports.VERSION = '0.4.2';
|
|
43
43
|
// Embedded mode (FFI) - NEW
|
|
44
44
|
var embedded_1 = require("./embedded");
|
|
45
45
|
Object.defineProperty(exports, "EmbeddedDatabase", { enumerable: true, get: function () { return embedded_1.EmbeddedDatabase; } });
|
|
46
46
|
var embedded_2 = require("./embedded");
|
|
47
47
|
Object.defineProperty(exports, "EmbeddedTransaction", { enumerable: true, get: function () { return embedded_2.EmbeddedTransaction; } });
|
|
48
|
-
// Embedded mode (FFI) - Convenience alias
|
|
49
48
|
var embedded_3 = require("./embedded");
|
|
50
|
-
Object.defineProperty(exports, "
|
|
49
|
+
Object.defineProperty(exports, "HnswIndex", { enumerable: true, get: function () { return embedded_3.HnswIndex; } });
|
|
50
|
+
Object.defineProperty(exports, "HnswBindings", { enumerable: true, get: function () { return embedded_3.HnswBindings; } });
|
|
51
|
+
// Embedded mode (FFI) - Convenience alias
|
|
52
|
+
var embedded_4 = require("./embedded");
|
|
53
|
+
Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return embedded_4.EmbeddedDatabase; } });
|
|
51
54
|
// Namespace API (v0.4.1)
|
|
52
55
|
var namespace_1 = require("./namespace");
|
|
53
56
|
Object.defineProperty(exports, "Namespace", { enumerable: true, get: function () { return namespace_1.Namespace; } });
|
|
@@ -109,4 +112,4 @@ Object.defineProperty(exports, "SplitBrainError", { enumerable: true, get: funct
|
|
|
109
112
|
// Convenience alias
|
|
110
113
|
var grpc_client_2 = require("./grpc-client");
|
|
111
114
|
Object.defineProperty(exports, "GrpcClient", { enumerable: true, get: function () { return grpc_client_2.SochDBClient; } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7OztBQUVILFVBQVU7QUFDRyxRQUFBLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFFL0IsNEJBQTRCO0FBQzVCLHVDQUFzRTtBQUE3RCw0R0FBQSxnQkFBZ0IsT0FBQTtBQUN6Qix1Q0FBaUQ7QUFBeEMsK0dBQUEsbUJBQW1CLE9BQUE7QUFDNUIsdUNBQWlFO0FBQXhELHFHQUFBLFNBQVMsT0FBQTtBQUFjLHdHQUFBLFlBQVksT0FBQTtBQUc1QywwQ0FBMEM7QUFDMUMsdUNBQTBEO0FBQWpELG9HQUFBLGdCQUFnQixPQUFZO0FBRXJDLHlCQUF5QjtBQUN6Qix5Q0FRcUI7QUFQbkIsc0dBQUEsU0FBUyxPQUFBO0FBQ1QsdUdBQUEsVUFBVSxPQUFBO0FBQ1YsMkdBQUEsY0FBYyxPQUFBO0FBQ2QsbUhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsaUhBQUEsb0JBQW9CLE9BQUE7QUFDcEIsb0hBQUEsdUJBQXVCLE9BQUE7QUFDdkIsa0hBQUEscUJBQXFCLE9BQUE7QUFTdkIscUJBQXFCO0FBQ3JCLGlDQUlpQjtBQUhmLHNHQUFBLGFBQWEsT0FBQTtBQUNiLGtHQUFBLFNBQVMsT0FBQTtBQUNULG9HQUFBLFdBQVcsT0FBQTtBQVNiLDBCQUEwQjtBQUMxQixtREFFMEI7QUFEeEIsK0dBQUEsYUFBYSxPQUFBO0FBUWYsMkJBQTJCO0FBQzNCLHFEQUsyQjtBQUp6QixzSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixzSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixxSEFBQSxrQkFBa0IsT0FBQTtBQUNsQix1SEFBQSxvQkFBb0IsT0FBQTtBQU10Qix5QkFBeUI7QUFDekIsbUNBTWtCO0FBTGhCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHNHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLGVBQWUsT0FBQTtBQUNmLG9HQUFBLFVBQVUsT0FBQTtBQUNWLHlHQUFBLGVBQWUsT0FBQTtBQWlCakIseUJBQXlCO0FBQ3pCLDZDQUE2QztBQUFwQywyR0FBQSxZQUFZLE9BQUE7QUFRckIsMkNBQXlDO0FBQWhDLHVHQUFBLFNBQVMsT0FBQTtBQUVsQixtQkFBbUI7QUFDbkIsbUNBTWtCO0FBTGhCLG9HQUFBLFVBQVUsT0FBQTtBQUNWLHVHQUFBLGFBQWEsT0FBQTtBQUNiLHlHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLHFCQUFxQixPQUFBO0FBR3ZCLG1CQUFtQjtBQUNuQixpQ0FBZ0M7QUFBdkIsOEZBQUEsS0FBSyxPQUFBO0FBR2QsbUNBYWtCO0FBWmhCLHFHQUFBLFdBQVcsT0FBQTtBQUNYLHlHQUFBLGVBQWUsT0FBQTtBQUNmLDBHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHVHQUFBLGFBQWEsT0FBQTtBQUNiLHVHQUFBLGFBQWEsT0FBQTtBQUNiLHVCQUF1QjtBQUN2QixtR0FBQSxTQUFTLE9BQUE7QUFDVCxtR0FBQSxTQUFTLE9BQUE7QUFDVCw2R0FBQSxtQkFBbUIsT0FBQTtBQUNuQiwwR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQiw0R0FBQSxrQkFBa0IsT0FBQTtBQUNsQix5R0FBQSxlQUFlLE9BQUE7QUFHakIsb0JBQW9CO0FBQ3BCLDZDQUEyRDtBQUFsRCx5R0FBQSxZQUFZLE9BQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNvY2hEQiBOb2RlLmpzIFNESyB2MC40LjJcbiAqIFxuICogRHVhbC1tb2RlIGFyY2hpdGVjdHVyZTogRW1iZWRkZWQgKEZGSSkgKyBTZXJ2ZXIgKGdSUEMvSVBDKVxuICogXG4gKiBBcmNoaXRlY3R1cmU6IEZsZXhpYmxlIERlcGxveW1lbnRcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFRoaXMgU0RLIHN1cHBvcnRzIEJPVEggbW9kZXM6XG4gKiBcbiAqIDEuIEVtYmVkZGVkIE1vZGUgKEZGSSkgLSBGb3Igc2luZ2xlLXByb2Nlc3MgYXBwczpcbiAqICAgIC0gRGlyZWN0IEZGSSBiaW5kaW5ncyB0byBSdXN0IGxpYnJhcmllc1xuICogICAgLSBObyBzZXJ2ZXIgcmVxdWlyZWQgLSBqdXN0IG5wbSBpbnN0YWxsIGFuZCBydW5cbiAqICAgIC0gQmVzdCBmb3I6IExvY2FsIGRldmVsb3BtZW50LCBzaW1wbGUgYXBwc1xuICogXG4gKiAyLiBTZXJ2ZXIgTW9kZSAoZ1JQQy9JUEMpIC0gRm9yIGRpc3RyaWJ1dGVkIHN5c3RlbXM6XG4gKiAgICAtIFRoaW4gY2xpZW50IGNvbm5lY3RpbmcgdG8gc29jaGRiLWdycGMgc2VydmVyXG4gKiAgICAtIEJlc3QgZm9yOiBQcm9kdWN0aW9uLCBtdWx0aS1sYW5ndWFnZSwgc2NhbGFiaWxpdHlcbiAqIFxuICogQGV4YW1wbGUgRW1iZWRkZWQgTW9kZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRGF0YWJhc2UgfSBmcm9tICdAc29jaGRiL3NvY2hkYic7XG4gKiBcbiAqIC8vIERpcmVjdCBGRkkgLSBubyBzZXJ2ZXIgbmVlZGVkXG4gKiBjb25zdCBkYiA9IGF3YWl0IERhdGFiYXNlLm9wZW4oJy4vbXlkYicpO1xuICogYXdhaXQgZGIucHV0KEJ1ZmZlci5mcm9tKCdrZXknKSwgQnVmZmVyLmZyb20oJ3ZhbHVlJykpO1xuICogYXdhaXQgZGIuY2xvc2UoKTtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZSBTZXJ2ZXIgTW9kZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU29jaERCQ2xpZW50IH0gZnJvbSAnQHNvY2hkYi9zb2NoZGInO1xuICogXG4gKiAvLyBDb25uZWN0IHRvIHNlcnZlclxuICogY29uc3QgY2xpZW50ID0gbmV3IFNvY2hEQkNsaWVudCh7IGFkZHJlc3M6ICdsb2NhbGhvc3Q6NTAwNTEnIH0pO1xuICogYXdhaXQgY2xpZW50LnB1dEt2KCdrZXknLCBCdWZmZXIuZnJvbSgndmFsdWUnKSk7XG4gKiBgYGBcbiAqL1xuXG4vLyBWZXJzaW9uXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9ICcwLjQuMic7XG5cbi8vIEVtYmVkZGVkIG1vZGUgKEZGSSkgLSBORVdcbmV4cG9ydCB7IEVtYmVkZGVkRGF0YWJhc2UsIEVtYmVkZGVkRGF0YWJhc2VDb25maWcgfSBmcm9tICcuL2VtYmVkZGVkJztcbmV4cG9ydCB7IEVtYmVkZGVkVHJhbnNhY3Rpb24gfSBmcm9tICcuL2VtYmVkZGVkJztcbmV4cG9ydCB7IEhuc3dJbmRleCwgSG5zd0NvbmZpZywgSG5zd0JpbmRpbmdzIH0gZnJvbSAnLi9lbWJlZGRlZCc7XG5leHBvcnQgeyBTZWFyY2hSZXN1bHQgYXMgSG5zd1NlYXJjaFJlc3VsdCB9IGZyb20gJy4vZW1iZWRkZWQnO1xuXG4vLyBFbWJlZGRlZCBtb2RlIChGRkkpIC0gQ29udmVuaWVuY2UgYWxpYXNcbmV4cG9ydCB7IEVtYmVkZGVkRGF0YWJhc2UgYXMgRGF0YWJhc2UgfSBmcm9tICcuL2VtYmVkZGVkJztcblxuLy8gTmFtZXNwYWNlIEFQSSAodjAuNC4xKVxuZXhwb3J0IHtcbiAgTmFtZXNwYWNlLFxuICBDb2xsZWN0aW9uLFxuICBEaXN0YW5jZU1ldHJpYyxcbiAgTmFtZXNwYWNlTm90Rm91bmRFcnJvcixcbiAgTmFtZXNwYWNlRXhpc3RzRXJyb3IsXG4gIENvbGxlY3Rpb25Ob3RGb3VuZEVycm9yLFxuICBDb2xsZWN0aW9uRXhpc3RzRXJyb3IsXG59IGZyb20gJy4vbmFtZXNwYWNlJztcbmV4cG9ydCB0eXBlIHtcbiAgTmFtZXNwYWNlQ29uZmlnLFxuICBDb2xsZWN0aW9uQ29uZmlnLFxuICBTZWFyY2hSZXF1ZXN0LFxuICBTZWFyY2hSZXN1bHQgYXMgTmFtZXNwYWNlU2VhcmNoUmVzdWx0LFxufSBmcm9tICcuL25hbWVzcGFjZSc7XG5cbi8vIFF1ZXVlIEFQSSAodjAuNC4xKVxuZXhwb3J0IHtcbiAgUHJpb3JpdHlRdWV1ZSxcbiAgVGFza1N0YXRlLFxuICBjcmVhdGVRdWV1ZSxcbn0gZnJvbSAnLi9xdWV1ZSc7XG5leHBvcnQgdHlwZSB7XG4gIFF1ZXVlQ29uZmlnLFxuICBRdWV1ZUtleSxcbiAgVGFzayxcbiAgUXVldWVTdGF0cyxcbn0gZnJvbSAnLi9xdWV1ZSc7XG5cbi8vIFNlbWFudGljIENhY2hlICh2MC40LjEpXG5leHBvcnQge1xuICBTZW1hbnRpY0NhY2hlLFxufSBmcm9tICcuL3NlbWFudGljLWNhY2hlJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2FjaGVFbnRyeSxcbiAgQ2FjaGVIaXQsXG4gIENhY2hlU3RhdHMsXG59IGZyb20gJy4vc2VtYW50aWMtY2FjaGUnO1xuXG4vLyBDb250ZXh0IEJ1aWxkZXIgKHYwLjQuMSlcbmV4cG9ydCB7XG4gIENvbnRleHRRdWVyeUJ1aWxkZXIsXG4gIENvbnRleHRPdXRwdXRGb3JtYXQsXG4gIFRydW5jYXRpb25TdHJhdGVneSxcbiAgY3JlYXRlQ29udGV4dEJ1aWxkZXIsXG59IGZyb20gJy4vY29udGV4dC1idWlsZGVyJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29udGV4dFJlc3VsdCxcbn0gZnJvbSAnLi9jb250ZXh0LWJ1aWxkZXInO1xuXG4vLyBNZW1vcnkgU3lzdGVtICh2MC40LjIpXG5leHBvcnQge1xuICBFeHRyYWN0aW9uUGlwZWxpbmUsXG4gIENvbnNvbGlkYXRvcixcbiAgSHlicmlkUmV0cmlldmVyLFxuICBBbGxvd2VkU2V0LFxuICBOYW1lc3BhY2VQb2xpY3ksXG59IGZyb20gJy4vbWVtb3J5JztcbmV4cG9ydCB0eXBlIHtcbiAgRW50aXR5LFxuICBSZWxhdGlvbixcbiAgQXNzZXJ0aW9uLFxuICBSYXdBc3NlcnRpb24sXG4gIENhbm9uaWNhbEZhY3QsXG4gIEV4dHJhY3Rpb25SZXN1bHQsXG4gIEV4dHJhY3Rpb25TY2hlbWEsXG4gIENvbnNvbGlkYXRpb25Db25maWcsXG4gIFJldHJpZXZhbENvbmZpZyxcbiAgUmV0cmlldmFsUmVzdWx0LFxuICBSZXRyaWV2YWxSZXNwb25zZSxcbiAgTmFtZXNwYWNlR3JhbnQsXG59IGZyb20gJy4vbWVtb3J5JztcblxuLy8gU2VydmVyIG1vZGUgKGdSUEMvSVBDKVxuZXhwb3J0IHsgU29jaERCQ2xpZW50IH0gZnJvbSAnLi9ncnBjLWNsaWVudCc7XG5leHBvcnQgdHlwZSB7XG4gIFNlYXJjaFJlc3VsdCxcbiAgRG9jdW1lbnQsXG4gIEdyYXBoTm9kZSxcbiAgR3JhcGhFZGdlLFxufSBmcm9tICcuL2dycGMtY2xpZW50JztcblxuZXhwb3J0IHsgSXBjQ2xpZW50IH0gZnJvbSAnLi9pcGMtY2xpZW50JztcblxuLy8gRm9ybWF0IHV0aWxpdGllc1xuZXhwb3J0IHtcbiAgV2lyZUZvcm1hdCxcbiAgQ29udGV4dEZvcm1hdCxcbiAgQ2Fub25pY2FsRm9ybWF0LFxuICBGb3JtYXRDYXBhYmlsaXRpZXMsXG4gIEZvcm1hdENvbnZlcnNpb25FcnJvcixcbn0gZnJvbSAnLi9mb3JtYXQnO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zXG5leHBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuZXhwb3J0IHR5cGUgeyBRdWVyeVJlc3VsdCB9IGZyb20gJy4vcXVlcnknO1xuXG5leHBvcnQge1xuICBTb2NoREJFcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBUcmFuc2FjdGlvbkVycm9yLFxuICBQcm90b2NvbEVycm9yLFxuICBEYXRhYmFzZUVycm9yLFxuICAvLyBMb2NrIGVycm9ycyAodjAuNC4xKVxuICBFcnJvckNvZGUsXG4gIExvY2tFcnJvcixcbiAgRGF0YWJhc2VMb2NrZWRFcnJvcixcbiAgTG9ja1RpbWVvdXRFcnJvcixcbiAgRXBvY2hNaXNtYXRjaEVycm9yLFxuICBTcGxpdEJyYWluRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzJztcblxuLy8gQ29udmVuaWVuY2UgYWxpYXNcbmV4cG9ydCB7IFNvY2hEQkNsaWVudCBhcyBHcnBjQ2xpZW50IH0gZnJvbSAnLi9ncnBjLWNsaWVudCc7XG4iXX0=
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HNSW Vector Index FFI Bindings
|
|
4
|
+
*
|
|
5
|
+
* Native vector search using HNSW (Hierarchical Navigable Small World) algorithm.
|
|
6
|
+
*
|
|
7
|
+
* @see sochdb-index/src/ffi.rs
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.HnswIndex = exports.HnswBindings = void 0;
|
|
44
|
+
const koffi = __importStar(require("koffi"));
|
|
45
|
+
const library_finder_1 = require("./library-finder");
|
|
46
|
+
// Opaque pointer type for HNSW Index
|
|
47
|
+
const HnswIndexPtr = koffi.pointer('HnswIndexPtr', koffi.opaque());
|
|
48
|
+
// Search result struct
|
|
49
|
+
const CSearchResult = koffi.struct('CSearchResult', {
|
|
50
|
+
id_lo: 'uint64',
|
|
51
|
+
id_hi: 'uint64',
|
|
52
|
+
distance: 'float'
|
|
53
|
+
});
|
|
54
|
+
class HnswBindings {
|
|
55
|
+
static instance;
|
|
56
|
+
lib;
|
|
57
|
+
// FFI functions
|
|
58
|
+
hnsw_new;
|
|
59
|
+
hnsw_free;
|
|
60
|
+
hnsw_insert;
|
|
61
|
+
hnsw_insert_batch;
|
|
62
|
+
hnsw_insert_flat;
|
|
63
|
+
hnsw_insert_batch_flat;
|
|
64
|
+
hnsw_search;
|
|
65
|
+
hnsw_search_fast;
|
|
66
|
+
hnsw_search_ultra;
|
|
67
|
+
hnsw_len;
|
|
68
|
+
hnsw_dimension;
|
|
69
|
+
hnsw_set_ef_search;
|
|
70
|
+
hnsw_get_ef_search;
|
|
71
|
+
hnsw_build_flat_cache;
|
|
72
|
+
constructor() {
|
|
73
|
+
const libraryPath = (0, library_finder_1.findLibrary)();
|
|
74
|
+
this.lib = koffi.load(libraryPath);
|
|
75
|
+
// Create a new HNSW index
|
|
76
|
+
this.hnsw_new = this.lib.func('hnsw_new', HnswIndexPtr, ['size_t', 'size_t', 'size_t']);
|
|
77
|
+
// Free an HNSW index
|
|
78
|
+
this.hnsw_free = this.lib.func('hnsw_free', 'void', [HnswIndexPtr]);
|
|
79
|
+
// Insert single vector
|
|
80
|
+
this.hnsw_insert = this.lib.func('hnsw_insert', 'int', [HnswIndexPtr, 'uint64', 'float*', 'size_t']);
|
|
81
|
+
// Insert batch of vectors
|
|
82
|
+
this.hnsw_insert_batch = this.lib.func('hnsw_insert_batch', 'int', [
|
|
83
|
+
HnswIndexPtr,
|
|
84
|
+
'uint64*',
|
|
85
|
+
'float*',
|
|
86
|
+
'size_t',
|
|
87
|
+
'size_t'
|
|
88
|
+
]);
|
|
89
|
+
// Insert single flat vector (ID as u128)
|
|
90
|
+
this.hnsw_insert_flat = this.lib.func('hnsw_insert_flat', 'int', [
|
|
91
|
+
HnswIndexPtr,
|
|
92
|
+
'uint64',
|
|
93
|
+
'uint64',
|
|
94
|
+
'float*',
|
|
95
|
+
'size_t'
|
|
96
|
+
]);
|
|
97
|
+
// Insert batch of flat vectors
|
|
98
|
+
this.hnsw_insert_batch_flat = this.lib.func('hnsw_insert_batch_flat', 'int', [
|
|
99
|
+
HnswIndexPtr,
|
|
100
|
+
'uint64*',
|
|
101
|
+
'uint64*',
|
|
102
|
+
'float*',
|
|
103
|
+
'size_t',
|
|
104
|
+
'size_t'
|
|
105
|
+
]);
|
|
106
|
+
// Search for k nearest neighbors
|
|
107
|
+
this.hnsw_search = this.lib.func('hnsw_search', 'size_t', [
|
|
108
|
+
HnswIndexPtr,
|
|
109
|
+
'float*',
|
|
110
|
+
'size_t',
|
|
111
|
+
'size_t',
|
|
112
|
+
koffi.out(koffi.array(CSearchResult, 1000)),
|
|
113
|
+
'size_t'
|
|
114
|
+
]);
|
|
115
|
+
// Fast search (lower ef_search)
|
|
116
|
+
this.hnsw_search_fast = this.lib.func('hnsw_search_fast', 'size_t', [
|
|
117
|
+
HnswIndexPtr,
|
|
118
|
+
'float*',
|
|
119
|
+
'size_t',
|
|
120
|
+
'size_t',
|
|
121
|
+
koffi.out(koffi.array(CSearchResult, 1000)),
|
|
122
|
+
'size_t'
|
|
123
|
+
]);
|
|
124
|
+
// Ultra fast search (minimal ef_search)
|
|
125
|
+
this.hnsw_search_ultra = this.lib.func('hnsw_search_ultra', 'size_t', [
|
|
126
|
+
HnswIndexPtr,
|
|
127
|
+
'float*',
|
|
128
|
+
'size_t',
|
|
129
|
+
'size_t',
|
|
130
|
+
koffi.out(koffi.array(CSearchResult, 1000)),
|
|
131
|
+
'size_t'
|
|
132
|
+
]);
|
|
133
|
+
// Get number of vectors in index
|
|
134
|
+
this.hnsw_len = this.lib.func('hnsw_len', 'size_t', [HnswIndexPtr]);
|
|
135
|
+
// Get vector dimension
|
|
136
|
+
this.hnsw_dimension = this.lib.func('hnsw_dimension', 'size_t', [HnswIndexPtr]);
|
|
137
|
+
// Set ef_search parameter
|
|
138
|
+
this.hnsw_set_ef_search = this.lib.func('hnsw_set_ef_search', 'void', [HnswIndexPtr, 'size_t']);
|
|
139
|
+
// Get ef_search parameter
|
|
140
|
+
this.hnsw_get_ef_search = this.lib.func('hnsw_get_ef_search', 'size_t', [HnswIndexPtr]);
|
|
141
|
+
// Build flat cache for faster search
|
|
142
|
+
this.hnsw_build_flat_cache = this.lib.func('hnsw_build_flat_cache', 'int', [HnswIndexPtr]);
|
|
143
|
+
}
|
|
144
|
+
static getInstance() {
|
|
145
|
+
if (!HnswBindings.instance) {
|
|
146
|
+
HnswBindings.instance = new HnswBindings();
|
|
147
|
+
}
|
|
148
|
+
return HnswBindings.instance;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.HnswBindings = HnswBindings;
|
|
152
|
+
/**
|
|
153
|
+
* High-level HNSW Index wrapper
|
|
154
|
+
*/
|
|
155
|
+
class HnswIndex {
|
|
156
|
+
ptr;
|
|
157
|
+
bindings;
|
|
158
|
+
_dimension;
|
|
159
|
+
_efSearch;
|
|
160
|
+
constructor(config) {
|
|
161
|
+
this.bindings = HnswBindings.getInstance();
|
|
162
|
+
this._dimension = config.dimension;
|
|
163
|
+
this._efSearch = config.efSearch || 100;
|
|
164
|
+
const maxConnections = config.maxConnections || 16;
|
|
165
|
+
const efConstruction = config.efConstruction || 200;
|
|
166
|
+
this.ptr = this.bindings.hnsw_new(config.dimension, maxConnections, efConstruction);
|
|
167
|
+
if (!this.ptr) {
|
|
168
|
+
throw new Error('Failed to create HNSW index');
|
|
169
|
+
}
|
|
170
|
+
// Set ef_search if provided
|
|
171
|
+
if (config.efSearch) {
|
|
172
|
+
this.bindings.hnsw_set_ef_search(this.ptr, config.efSearch);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Insert a single vector
|
|
177
|
+
*/
|
|
178
|
+
insert(id, vector) {
|
|
179
|
+
if (vector.length !== this._dimension) {
|
|
180
|
+
throw new Error(`Vector dimension mismatch: expected ${this._dimension}, got ${vector.length}`);
|
|
181
|
+
}
|
|
182
|
+
// Convert string ID to uint64 (hash or parse)
|
|
183
|
+
const numericId = this.stringToId(id);
|
|
184
|
+
const vectorArray = new Float32Array(vector);
|
|
185
|
+
const result = this.bindings.hnsw_insert(this.ptr, numericId, vectorArray, vector.length);
|
|
186
|
+
if (result !== 0) {
|
|
187
|
+
throw new Error(`Failed to insert vector: error code ${result}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Insert multiple vectors in batch (faster)
|
|
192
|
+
*/
|
|
193
|
+
insertBatch(ids, vectors) {
|
|
194
|
+
if (ids.length !== vectors.length) {
|
|
195
|
+
throw new Error('IDs and vectors length mismatch');
|
|
196
|
+
}
|
|
197
|
+
if (vectors.length === 0) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
// Validate dimensions
|
|
201
|
+
for (const vector of vectors) {
|
|
202
|
+
if (vector.length !== this._dimension) {
|
|
203
|
+
throw new Error(`Vector dimension mismatch: expected ${this._dimension}, got ${vector.length}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Convert IDs to numeric
|
|
207
|
+
const numericIds = new BigUint64Array(ids.map(id => BigInt(this.stringToId(id))));
|
|
208
|
+
// Flatten vectors
|
|
209
|
+
const flatVectors = new Float32Array(vectors.flat());
|
|
210
|
+
const result = this.bindings.hnsw_insert_batch(this.ptr, numericIds, flatVectors, vectors.length, this._dimension);
|
|
211
|
+
if (result !== 0) {
|
|
212
|
+
throw new Error(`Failed to insert batch: error code ${result}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Search for k nearest neighbors
|
|
217
|
+
*/
|
|
218
|
+
search(queryVector, k, fast = false) {
|
|
219
|
+
if (queryVector.length !== this._dimension) {
|
|
220
|
+
throw new Error(`Query vector dimension mismatch: expected ${this._dimension}, got ${queryVector.length}`);
|
|
221
|
+
}
|
|
222
|
+
const query = new Float32Array(queryVector);
|
|
223
|
+
const resultsBuffer = new Array(k);
|
|
224
|
+
const searchFn = fast ? this.bindings.hnsw_search_fast : this.bindings.hnsw_search;
|
|
225
|
+
const numResults = searchFn(this.ptr, query, queryVector.length, k, resultsBuffer, k);
|
|
226
|
+
// Convert results
|
|
227
|
+
const results = [];
|
|
228
|
+
for (let i = 0; i < numResults; i++) {
|
|
229
|
+
const result = resultsBuffer[i];
|
|
230
|
+
results.push({
|
|
231
|
+
id: this.idToString(result.id_lo, result.id_hi),
|
|
232
|
+
distance: result.distance
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
return results;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Ultra-fast search with minimal ef_search
|
|
239
|
+
*/
|
|
240
|
+
searchUltra(queryVector, k) {
|
|
241
|
+
if (queryVector.length !== this._dimension) {
|
|
242
|
+
throw new Error(`Query vector dimension mismatch: expected ${this._dimension}, got ${queryVector.length}`);
|
|
243
|
+
}
|
|
244
|
+
const query = new Float32Array(queryVector);
|
|
245
|
+
const resultsBuffer = new Array(k);
|
|
246
|
+
const numResults = this.bindings.hnsw_search_ultra(this.ptr, query, queryVector.length, k, resultsBuffer, k);
|
|
247
|
+
const results = [];
|
|
248
|
+
for (let i = 0; i < numResults; i++) {
|
|
249
|
+
const result = resultsBuffer[i];
|
|
250
|
+
results.push({
|
|
251
|
+
id: this.idToString(result.id_lo, result.id_hi),
|
|
252
|
+
distance: result.distance
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return results;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get number of vectors in index
|
|
259
|
+
*/
|
|
260
|
+
get length() {
|
|
261
|
+
return this.bindings.hnsw_len(this.ptr);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get vector dimension
|
|
265
|
+
*/
|
|
266
|
+
get dimension() {
|
|
267
|
+
return this._dimension;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Set ef_search parameter (controls search quality vs speed)
|
|
271
|
+
*/
|
|
272
|
+
set efSearch(value) {
|
|
273
|
+
this._efSearch = value;
|
|
274
|
+
this.bindings.hnsw_set_ef_search(this.ptr, value);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get ef_search parameter
|
|
278
|
+
*/
|
|
279
|
+
get efSearch() {
|
|
280
|
+
return this.bindings.hnsw_get_ef_search(this.ptr);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Build flat cache for faster searches
|
|
284
|
+
*/
|
|
285
|
+
buildFlatCache() {
|
|
286
|
+
const result = this.bindings.hnsw_build_flat_cache(this.ptr);
|
|
287
|
+
if (result !== 0) {
|
|
288
|
+
throw new Error(`Failed to build flat cache: error code ${result}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Free native resources
|
|
293
|
+
*/
|
|
294
|
+
close() {
|
|
295
|
+
if (this.ptr) {
|
|
296
|
+
this.bindings.hnsw_free(this.ptr);
|
|
297
|
+
this.ptr = null;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Helper: Convert string ID to numeric (simple hash)
|
|
301
|
+
stringToId(id) {
|
|
302
|
+
let hash = 0;
|
|
303
|
+
for (let i = 0; i < id.length; i++) {
|
|
304
|
+
hash = ((hash << 5) - hash) + id.charCodeAt(i);
|
|
305
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
306
|
+
}
|
|
307
|
+
return Math.abs(hash);
|
|
308
|
+
}
|
|
309
|
+
// Helper: Convert numeric ID back to string
|
|
310
|
+
idToString(idLo, idHi) {
|
|
311
|
+
// For now, just use the low part
|
|
312
|
+
return idLo.toString();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
exports.HnswIndex = HnswIndex;
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG5zdy1iaW5kaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbWJlZGRlZC9mZmkvaG5zdy1iaW5kaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw2Q0FBK0I7QUFDL0IscURBQStDO0FBRS9DLHFDQUFxQztBQUNyQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUVuRSx1QkFBdUI7QUFDdkIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7SUFDaEQsS0FBSyxFQUFFLFFBQVE7SUFDZixLQUFLLEVBQUUsUUFBUTtJQUNmLFFBQVEsRUFBRSxPQUFPO0NBQ3BCLENBQUMsQ0FBQztBQWNILE1BQWEsWUFBWTtJQUNiLE1BQU0sQ0FBQyxRQUFRLENBQWU7SUFDOUIsR0FBRyxDQUFNO0lBRWpCLGdCQUFnQjtJQUNULFFBQVEsQ0FBTTtJQUNkLFNBQVMsQ0FBTTtJQUNmLFdBQVcsQ0FBTTtJQUNqQixpQkFBaUIsQ0FBTTtJQUN2QixnQkFBZ0IsQ0FBTTtJQUN0QixzQkFBc0IsQ0FBTTtJQUM1QixXQUFXLENBQU07SUFDakIsZ0JBQWdCLENBQU07SUFDdEIsaUJBQWlCLENBQU07SUFDdkIsUUFBUSxDQUFNO0lBQ2QsY0FBYyxDQUFNO0lBQ3BCLGtCQUFrQixDQUFNO0lBQ3hCLGtCQUFrQixDQUFNO0lBQ3hCLHFCQUFxQixDQUFNO0lBRWxDO1FBQ0ksTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBVyxHQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFH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RyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsNEJBQTRCO1FBQ3BELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELDRDQUE0QztJQUNwQyxVQUFVLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDekMsaUNBQWlDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDSjtBQXJORCw4QkFxTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhOU1cgVmVjdG9yIEluZGV4IEZGSSBCaW5kaW5nc1xuICogXG4gKiBOYXRpdmUgdmVjdG9yIHNlYXJjaCB1c2luZyBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKSBhbGdvcml0aG0uXG4gKiBcbiAqIEBzZWUgc29jaGRiLWluZGV4L3NyYy9mZmkucnNcbiAqL1xuXG5pbXBvcnQgKiBhcyBrb2ZmaSBmcm9tICdrb2ZmaSc7XG5pbXBvcnQgeyBmaW5kTGlicmFyeSB9IGZyb20gJy4vbGlicmFyeS1maW5kZXInO1xuXG4vLyBPcGFxdWUgcG9pbnRlciB0eXBlIGZvciBITlNXIEluZGV4XG5jb25zdCBIbnN3SW5kZXhQdHIgPSBrb2ZmaS5wb2ludGVyKCdIbnN3SW5kZXhQdHInLCBrb2ZmaS5vcGFxdWUoKSk7XG5cbi8vIFNlYXJjaCByZXN1bHQgc3RydWN0XG5jb25zdCBDU2VhcmNoUmVzdWx0ID0ga29mZmkuc3RydWN0KCdDU2VhcmNoUmVzdWx0Jywge1xuICAgIGlkX2xvOiAndWludDY0JyxcbiAgICBpZF9oaTogJ3VpbnQ2NCcsXG4gICAgZGlzdGFuY2U6ICdmbG9hdCdcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBkaXN0YW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhuc3dDb25maWcge1xuICAgIGRpbWVuc2lvbjogbnVtYmVyO1xuICAgIG1heENvbm5lY3Rpb25zPzogbnVtYmVyO1xuICAgIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAgIGVmU2VhcmNoPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgSG5zd0JpbmRpbmdzIHtcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogSG5zd0JpbmRpbmdzO1xuICAgIHByaXZhdGUgbGliOiBhbnk7XG5cbiAgICAvLyBGRkkgZnVuY3Rpb25zXG4gICAgcHVibGljIGhuc3dfbmV3OiBhbnk7XG4gICAgcHVibGljIGhuc3dfZnJlZTogYW55O1xuICAgIHB1YmxpYyBobnN3X2luc2VydDogYW55O1xuICAgIHB1YmxpYyBobnN3X2luc2VydF9iYXRjaDogYW55O1xuICAgIHB1YmxpYyBobnN3X2luc2VydF9mbGF0OiBhbnk7XG4gICAgcHVibGljIGhuc3dfaW5zZXJ0X2JhdGNoX2ZsYXQ6IGFueTtcbiAgICBwdWJsaWMgaG5zd19zZWFyY2g6IGFueTtcbiAgICBwdWJsaWMgaG5zd19zZWFyY2hfZmFzdDogYW55O1xuICAgIHB1YmxpYyBobnN3X3NlYXJjaF91bHRyYTogYW55O1xuICAgIHB1YmxpYyBobnN3X2xlbjogYW55O1xuICAgIHB1YmxpYyBobnN3X2RpbWVuc2lvbjogYW55O1xuICAgIHB1YmxpYyBobnN3X3NldF9lZl9zZWFyY2g6IGFueTtcbiAgICBwdWJsaWMgaG5zd19nZXRfZWZfc2VhcmNoOiBhbnk7XG4gICAgcHVibGljIGhuc3dfYnVpbGRfZmxhdF9jYWNoZTogYW55O1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgbGlicmFyeVBhdGggPSBmaW5kTGlicmFyeSgpO1xuICAgICAgICB0aGlzLmxpYiA9IGtvZmZpLmxvYWQobGlicmFyeVBhdGgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBITlNXIGluZGV4XG4gICAgICAgIHRoaXMuaG5zd19uZXcgPSB0aGlzLmxpYi5mdW5jKCdobnN3X25ldycsIEhuc3dJbmRleFB0ciwgWydzaXplX3QnLCAnc2l6ZV90JywgJ3NpemVfdCddKTtcblxuICAgICAgICAvLyBGcmVlIGFuIEhOU1cgaW5kZXhcbiAgICAgICAgdGhpcy5obnN3X2ZyZWUgPSB0aGlzLmxpYi5mdW5jKCdobnN3X2ZyZWUnLCAndm9pZCcsIFtIbnN3SW5kZXhQdHJdKTtcblxuICAgICAgICAvLyBJbnNlcnQgc2luZ2xlIHZlY3RvclxuICAgICAgICB0aGlzLmhuc3dfaW5zZXJ0ID0gdGhpcy5saWIuZnVuYygnaG5zd19pbnNlcnQnLCAnaW50JywgW0huc3dJbmRleFB0ciwgJ3VpbnQ2NCcsICdmbG9hdConLCAnc2l6ZV90J10pO1xuXG4gICAgICAgIC8vIEluc2VydCBiYXRjaCBvZiB2ZWN0b3JzXG4gICAgICAgIHRoaXMuaG5zd19pbnNlcnRfYmF0Y2ggPSB0aGlzLmxpYi5mdW5jKCdobnN3X2luc2VydF9iYXRjaCcsICdpbnQnLCBbXG4gICAgICAgICAgICBIbnN3SW5kZXhQdHIsXG4gICAgICAgICAgICAndWludDY0KicsXG4gICAgICAgICAgICAnZmxvYXQqJyxcbiAgICAgICAgICAgICdzaXplX3QnLFxuICAgICAgICAgICAgJ3NpemVfdCdcbiAgICAgICAgXSk7XG5cbiAgICAgICAgLy8gSW5zZXJ0IHNpbmdsZSBmbGF0IHZlY3RvciAoSUQgYXMgdTEyOClcbiAgICAgICAgdGhpcy5obnN3X2luc2VydF9mbGF0ID0gdGhpcy5saWIuZnVuYygnaG5zd19pbnNlcnRfZmxhdCcsICdpbnQnLCBbXG4gICAgICAgICAgICBIbnN3SW5kZXhQdHIsXG4gICAgICAgICAgICAndWludDY0JyxcbiAgICAgICAgICAgICd1aW50NjQnLFxuICAgICAgICAgICAgJ2Zsb2F0KicsXG4gICAgICAgICAgICAnc2l6ZV90J1xuICAgICAgICBdKTtcblxuICAgICAgICAvLyBJbnNlcnQgYmF0Y2ggb2YgZmxhdCB2ZWN0b3JzXG4gICAgICAgIHRoaXMuaG5zd19pbnNlcnRfYmF0Y2hfZmxhdCA9IHRoaXMubGliLmZ1bmMoJ2huc3dfaW5zZXJ0X2JhdGNoX2ZsYXQnLCAnaW50JywgW1xuICAgICAgICAgICAgSG5zd0luZGV4UHRyLFxuICAgICAgICAgICAgJ3VpbnQ2NConLFxuICAgICAgICAgICAgJ3VpbnQ2NConLFxuICAgICAgICAgICAgJ2Zsb2F0KicsXG4gICAgICAgICAgICAnc2l6ZV90JyxcbiAgICAgICAgICAgICdzaXplX3QnXG4gICAgICAgIF0pO1xuXG4gICAgICAgIC8vIFNlYXJjaCBmb3IgayBuZWFyZXN0IG5laWdoYm9yc1xuICAgICAgICB0aGlzLmhuc3dfc2VhcmNoID0gdGhpcy5saWIuZnVuYygnaG5zd19zZWFyY2gnLCAnc2l6ZV90JywgW1xuICAgICAgICAgICAgSG5zd0luZGV4UHRyLFxuICAgICAgICAgICAgJ2Zsb2F0KicsXG4gICAgICAgICAgICAnc2l6ZV90JyxcbiAgICAgICAgICAgICdzaXplX3QnLFxuICAgICAgICAgICAga29mZmkub3V0KGtvZmZpLmFycmF5KENTZWFyY2hSZXN1bHQsIDEwMDApKSxcbiAgICAgICAgICAgICdzaXplX3QnXG4gICAgICAgIF0pO1xuXG4gICAgICAgIC8vIEZhc3Qgc2VhcmNoIChsb3dlciBlZl9zZWFyY2gpXG4gICAgICAgIHRoaXMuaG5zd19zZWFyY2hfZmFzdCA9IHRoaXMubGliLmZ1bmMoJ2huc3dfc2VhcmNoX2Zhc3QnLCAnc2l6ZV90JywgW1xuICAgICAgICAgICAgSG5zd0luZGV4UHRyLFxuICAgICAgICAgICAgJ2Zsb2F0KicsXG4gICAgICAgICAgICAnc2l6ZV90JyxcbiAgICAgICAgICAgICdzaXplX3QnLFxuICAgICAgICAgICAga29mZmkub3V0KGtvZmZpLmFycmF5KENTZWFyY2hSZXN1bHQsIDEwMDApKSxcbiAgICAgICAgICAgICdzaXplX3QnXG4gICAgICAgIF0pO1xuXG4gICAgICAgIC8vIFVsdHJhIGZhc3Qgc2VhcmNoIChtaW5pbWFsIGVmX3NlYXJjaClcbiAgICAgICAgdGhpcy5obnN3X3NlYXJjaF91bHRyYSA9IHRoaXMubGliLmZ1bmMoJ2huc3dfc2VhcmNoX3VsdHJhJywgJ3NpemVfdCcsIFtcbiAgICAgICAgICAgIEhuc3dJbmRleFB0cixcbiAgICAgICAgICAgICdmbG9hdConLFxuICAgICAgICAgICAgJ3NpemVfdCcsXG4gICAgICAgICAgICAnc2l6ZV90JyxcbiAgICAgICAgICAgIGtvZmZpLm91dChrb2ZmaS5hcnJheShDU2VhcmNoUmVzdWx0LCAxMDAwKSksXG4gICAgICAgICAgICAnc2l6ZV90J1xuICAgICAgICBdKTtcblxuICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHZlY3RvcnMgaW4gaW5kZXhcbiAgICAgICAgdGhpcy5obnN3X2xlbiA9IHRoaXMubGliLmZ1bmMoJ2huc3dfbGVuJywgJ3NpemVfdCcsIFtIbnN3SW5kZXhQdHJdKTtcblxuICAgICAgICAvLyBHZXQgdmVjdG9yIGRpbWVuc2lvblxuICAgICAgICB0aGlzLmhuc3dfZGltZW5zaW9uID0gdGhpcy5saWIuZnVuYygnaG5zd19kaW1lbnNpb24nLCAnc2l6ZV90JywgW0huc3dJbmRleFB0cl0pO1xuXG4gICAgICAgIC8vIFNldCBlZl9zZWFyY2ggcGFyYW1ldGVyXG4gICAgICAgIHRoaXMuaG5zd19zZXRfZWZfc2VhcmNoID0gdGhpcy5saWIuZnVuYygnaG5zd19zZXRfZWZfc2VhcmNoJywgJ3ZvaWQnLCBbSG5zd0luZGV4UHRyLCAnc2l6ZV90J10pO1xuXG4gICAgICAgIC8vIEdldCBlZl9zZWFyY2ggcGFyYW1ldGVyXG4gICAgICAgIHRoaXMuaG5zd19nZXRfZWZfc2VhcmNoID0gdGhpcy5saWIuZnVuYygnaG5zd19nZXRfZWZfc2VhcmNoJywgJ3NpemVfdCcsIFtIbnN3SW5kZXhQdHJdKTtcblxuICAgICAgICAvLyBCdWlsZCBmbGF0IGNhY2hlIGZvciBmYXN0ZXIgc2VhcmNoXG4gICAgICAgIHRoaXMuaG5zd19idWlsZF9mbGF0X2NhY2hlID0gdGhpcy5saWIuZnVuYygnaG5zd19idWlsZF9mbGF0X2NhY2hlJywgJ2ludCcsIFtIbnN3SW5kZXhQdHJdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IEhuc3dCaW5kaW5ncyB7XG4gICAgICAgIGlmICghSG5zd0JpbmRpbmdzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICBIbnN3QmluZGluZ3MuaW5zdGFuY2UgPSBuZXcgSG5zd0JpbmRpbmdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEhuc3dCaW5kaW5ncy5pbnN0YW5jZTtcbiAgICB9XG59XG5cbi8qKlxuICogSGlnaC1sZXZlbCBITlNXIEluZGV4IHdyYXBwZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEhuc3dJbmRleCB7XG4gICAgcHJpdmF0ZSBwdHI6IGFueTtcbiAgICBwcml2YXRlIGJpbmRpbmdzOiBIbnN3QmluZGluZ3M7XG4gICAgcHJpdmF0ZSBfZGltZW5zaW9uOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfZWZTZWFyY2g6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogSG5zd0NvbmZpZykge1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0gSG5zd0JpbmRpbmdzLmdldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMuX2RpbWVuc2lvbiA9IGNvbmZpZy5kaW1lbnNpb247XG4gICAgICAgIHRoaXMuX2VmU2VhcmNoID0gY29uZmlnLmVmU2VhcmNoIHx8IDEwMDtcblxuICAgICAgICBjb25zdCBtYXhDb25uZWN0aW9ucyA9IGNvbmZpZy5tYXhDb25uZWN0aW9ucyB8fCAxNjtcbiAgICAgICAgY29uc3QgZWZDb25zdHJ1Y3Rpb24gPSBjb25maWcuZWZDb25zdHJ1Y3Rpb24gfHwgMjAwO1xuXG4gICAgICAgIHRoaXMucHRyID0gdGhpcy5iaW5kaW5ncy5obnN3X25ldyhjb25maWcuZGltZW5zaW9uLCBtYXhDb25uZWN0aW9ucywgZWZDb25zdHJ1Y3Rpb24pO1xuICAgICAgICBpZiAoIXRoaXMucHRyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgSE5TVyBpbmRleCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGVmX3NlYXJjaCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAoY29uZmlnLmVmU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzLmhuc3dfc2V0X2VmX3NlYXJjaCh0aGlzLnB0ciwgY29uZmlnLmVmU2VhcmNoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydCBhIHNpbmdsZSB2ZWN0b3JcbiAgICAgKi9cbiAgICBpbnNlcnQoaWQ6IHN0cmluZywgdmVjdG9yOiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICBpZiAodmVjdG9yLmxlbmd0aCAhPT0gdGhpcy5fZGltZW5zaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZlY3RvciBkaW1lbnNpb24gbWlzbWF0Y2g6IGV4cGVjdGVkICR7dGhpcy5fZGltZW5zaW9ufSwgZ290ICR7dmVjdG9yLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIElEIHRvIHVpbnQ2NCAoaGFzaCBvciBwYXJzZSlcbiAgICAgICAgY29uc3QgbnVtZXJpY0lkID0gdGhpcy5zdHJpbmdUb0lkKGlkKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHZlY3RvckFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZWN0b3IpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmJpbmRpbmdzLmhuc3dfaW5zZXJ0KHRoaXMucHRyLCBudW1lcmljSWQsIHZlY3RvckFycmF5LCB2ZWN0b3IubGVuZ3RoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChyZXN1bHQgIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc2VydCB2ZWN0b3I6IGVycm9yIGNvZGUgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnQgbXVsdGlwbGUgdmVjdG9ycyBpbiBiYXRjaCAoZmFzdGVyKVxuICAgICAqL1xuICAgIGluc2VydEJhdGNoKGlkczogc3RyaW5nW10sIHZlY3RvcnM6IG51bWJlcltdW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlkcy5sZW5ndGggIT09IHZlY3RvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lEcyBhbmQgdmVjdG9ycyBsZW5ndGggbWlzbWF0Y2gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgICBmb3IgKGNvbnN0IHZlY3RvciBvZiB2ZWN0b3JzKSB7XG4gICAgICAgICAgICBpZiAodmVjdG9yLmxlbmd0aCAhPT0gdGhpcy5fZGltZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWZWN0b3IgZGltZW5zaW9uIG1pc21hdGNoOiBleHBlY3RlZCAke3RoaXMuX2RpbWVuc2lvbn0sIGdvdCAke3ZlY3Rvci5sZW5ndGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb252ZXJ0IElEcyB0byBudW1lcmljXG4gICAgICAgIGNvbnN0IG51bWVyaWNJZHMgPSBuZXcgQmlnVWludDY0QXJyYXkoaWRzLm1hcChpZCA9PiBCaWdJbnQodGhpcy5zdHJpbmdUb0lkKGlkKSkpKTtcblxuICAgICAgICAvLyBGbGF0dGVuIHZlY3RvcnNcbiAgICAgICAgY29uc3QgZmxhdFZlY3RvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHZlY3RvcnMuZmxhdCgpKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmJpbmRpbmdzLmhuc3dfaW5zZXJ0X2JhdGNoKFxuICAgICAgICAgICAgdGhpcy5wdHIsXG4gICAgICAgICAgICBudW1lcmljSWRzLFxuICAgICAgICAgICAgZmxhdFZlY3RvcnMsXG4gICAgICAgICAgICB2ZWN0b3JzLmxlbmd0aCxcbiAgICAgICAgICAgIHRoaXMuX2RpbWVuc2lvblxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChyZXN1bHQgIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc2VydCBiYXRjaDogZXJyb3IgY29kZSAke3Jlc3VsdH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgayBuZWFyZXN0IG5laWdoYm9yc1xuICAgICAqL1xuICAgIHNlYXJjaChxdWVyeVZlY3RvcjogbnVtYmVyW10sIGs6IG51bWJlciwgZmFzdDogYm9vbGVhbiA9IGZhbHNlKTogU2VhcmNoUmVzdWx0W10ge1xuICAgICAgICBpZiAocXVlcnlWZWN0b3IubGVuZ3RoICE9PSB0aGlzLl9kaW1lbnNpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUXVlcnkgdmVjdG9yIGRpbWVuc2lvbiBtaXNtYXRjaDogZXhwZWN0ZWQgJHt0aGlzLl9kaW1lbnNpb259LCBnb3QgJHtxdWVyeVZlY3Rvci5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBGbG9hdDMyQXJyYXkocXVlcnlWZWN0b3IpO1xuICAgICAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gbmV3IEFycmF5KGspO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaEZuID0gZmFzdCA/IHRoaXMuYmluZGluZ3MuaG5zd19zZWFyY2hfZmFzdCA6IHRoaXMuYmluZGluZ3MuaG5zd19zZWFyY2g7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBudW1SZXN1bHRzID0gc2VhcmNoRm4oXG4gICAgICAgICAgICB0aGlzLnB0cixcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgcXVlcnlWZWN0b3IubGVuZ3RoLFxuICAgICAgICAgICAgayxcbiAgICAgICAgICAgIHJlc3VsdHNCdWZmZXIsXG4gICAgICAgICAgICBrXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ29udmVydCByZXN1bHRzXG4gICAgICAgIGNvbnN0IHJlc3VsdHM6IFNlYXJjaFJlc3VsdFtdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUmVzdWx0czsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzQnVmZmVyW2ldO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5pZFRvU3RyaW5nKHJlc3VsdC5pZF9sbywgcmVzdWx0LmlkX2hpKSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZTogcmVzdWx0LmRpc3RhbmNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVsdHJhLWZhc3Qgc2VhcmNoIHdpdGggbWluaW1hbCBlZl9zZWFyY2hcbiAgICAgKi9cbiAgICBzZWFyY2hVbHRyYShxdWVyeVZlY3RvcjogbnVtYmVyW10sIGs6IG51bWJlcik6IFNlYXJjaFJlc3VsdFtdIHtcbiAgICAgICAgaWYgKHF1ZXJ5VmVjdG9yLmxlbmd0aCAhPT0gdGhpcy5fZGltZW5zaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFF1ZXJ5IHZlY3RvciBkaW1lbnNpb24gbWlzbWF0Y2g6IGV4cGVjdGVkICR7dGhpcy5fZGltZW5zaW9ufSwgZ290ICR7cXVlcnlWZWN0b3IubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgRmxvYXQzMkFycmF5KHF1ZXJ5VmVjdG9yKTtcbiAgICAgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IG5ldyBBcnJheShrKTtcblxuICAgICAgICBjb25zdCBudW1SZXN1bHRzID0gdGhpcy5iaW5kaW5ncy5obnN3X3NlYXJjaF91bHRyYShcbiAgICAgICAgICAgIHRoaXMucHRyLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICBxdWVyeVZlY3Rvci5sZW5ndGgsXG4gICAgICAgICAgICBrLFxuICAgICAgICAgICAgcmVzdWx0c0J1ZmZlcixcbiAgICAgICAgICAgIGtcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCByZXN1bHRzOiBTZWFyY2hSZXN1bHRbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVJlc3VsdHM7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c0J1ZmZlcltpXTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWRUb1N0cmluZyhyZXN1bHQuaWRfbG8sIHJlc3VsdC5pZF9oaSksXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IHJlc3VsdC5kaXN0YW5jZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbnVtYmVyIG9mIHZlY3RvcnMgaW4gaW5kZXhcbiAgICAgKi9cbiAgICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmJpbmRpbmdzLmhuc3dfbGVuKHRoaXMucHRyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdmVjdG9yIGRpbWVuc2lvblxuICAgICAqL1xuICAgIGdldCBkaW1lbnNpb24oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZWZfc2VhcmNoIHBhcmFtZXRlciAoY29udHJvbHMgc2VhcmNoIHF1YWxpdHkgdnMgc3BlZWQpXG4gICAgICovXG4gICAgc2V0IGVmU2VhcmNoKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZWZTZWFyY2ggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5iaW5kaW5ncy5obnN3X3NldF9lZl9zZWFyY2godGhpcy5wdHIsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZWZfc2VhcmNoIHBhcmFtZXRlclxuICAgICAqL1xuICAgIGdldCBlZlNlYXJjaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5iaW5kaW5ncy5obnN3X2dldF9lZl9zZWFyY2godGhpcy5wdHIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIGZsYXQgY2FjaGUgZm9yIGZhc3RlciBzZWFyY2hlc1xuICAgICAqL1xuICAgIGJ1aWxkRmxhdENhY2hlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmJpbmRpbmdzLmhuc3dfYnVpbGRfZmxhdF9jYWNoZSh0aGlzLnB0cik7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGJ1aWxkIGZsYXQgY2FjaGU6IGVycm9yIGNvZGUgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGcmVlIG5hdGl2ZSByZXNvdXJjZXNcbiAgICAgKi9cbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHRyKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzLmhuc3dfZnJlZSh0aGlzLnB0cik7XG4gICAgICAgICAgICB0aGlzLnB0ciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIZWxwZXI6IENvbnZlcnQgc3RyaW5nIElEIHRvIG51bWVyaWMgKHNpbXBsZSBoYXNoKVxuICAgIHByaXZhdGUgc3RyaW5nVG9JZChpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBpZC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoOyAvLyBDb252ZXJ0IHRvIDMyLWJpdCBpbnRlZ2VyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGhhc2gpO1xuICAgIH1cblxuICAgIC8vIEhlbHBlcjogQ29udmVydCBudW1lcmljIElEIGJhY2sgdG8gc3RyaW5nXG4gICAgcHJpdmF0ZSBpZFRvU3RyaW5nKGlkTG86IGJpZ2ludCwgaWRIaTogYmlnaW50KTogc3RyaW5nIHtcbiAgICAgICAgLy8gRm9yIG5vdywganVzdCB1c2UgdGhlIGxvdyBwYXJ0XG4gICAgICAgIHJldHVybiBpZExvLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -111,6 +111,12 @@ function findLibrary() {
|
|
|
111
111
|
path.resolve(process.cwd(), '_bin', target, filename),
|
|
112
112
|
path.resolve(process.cwd(), 'target', 'release', filename),
|
|
113
113
|
path.resolve(process.cwd(), '..', 'target', 'release', filename),
|
|
114
|
+
// 4. System-wide installation paths (no manual setup needed)
|
|
115
|
+
'/usr/local/lib/' + filename,
|
|
116
|
+
'/usr/lib/' + filename,
|
|
117
|
+
'/opt/homebrew/lib/' + filename, // macOS Apple Silicon
|
|
118
|
+
'/opt/local/lib/' + filename, // MacPorts
|
|
119
|
+
path.join(os.homedir(), '.sochdb', 'lib', filename), // User install
|
|
114
120
|
];
|
|
115
121
|
// Search for library
|
|
116
122
|
for (const searchPath of searchPaths) {
|
|
@@ -129,7 +135,8 @@ function findLibrary() {
|
|
|
129
135
|
}
|
|
130
136
|
}
|
|
131
137
|
throw new Error(`Could not find SochDB native library (${filename}). ` +
|
|
132
|
-
`Searched in
|
|
133
|
-
`
|
|
138
|
+
`Searched in package paths, development builds, and system locations. ` +
|
|
139
|
+
`Install with: brew install sochdb (macOS) or download from https://github.com/sochdb/sochdb/releases ` +
|
|
140
|
+
`Alternatively, set SOCHDB_LIB_PATH environment variable to library path.`);
|
|
134
141
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1maW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW1iZWRkZWQvZmZpL2xpYnJhcnktZmluZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrREgsa0NBeURDO0FBekdELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBRXpCOztHQUVHO0FBQ0gsU0FBUyxlQUFlO0lBQ3BCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFdkIsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDN0UsQ0FBQztTQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0lBQ3ZGLENBQUM7U0FBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztJQUM5RSxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxrQkFBa0I7SUFDdkIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRS9CLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLE9BQU8seUJBQXlCLENBQUM7SUFDckMsQ0FBQztTQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sc0JBQXNCLENBQUM7SUFDbEMsQ0FBQztTQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sb0JBQW9CLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsV0FBVztJQUN2QixNQUFNLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBRXRDLG1DQUFtQztJQUNuQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDNUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBYTtRQUMxQixvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFFcEQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUU3RCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQztRQUVyRixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7UUFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO0tBQ25FLENBQUM7SUFFRixxQkFBcUI7SUFDckIsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWU7UUFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ1gseUNBQXlDLFFBQVEsS0FBSztRQUN0RCxnQkFBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtRQUMxQyxnRUFBZ0UsQ0FDbkUsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZGSSBMaWJyYXJ5IEZpbmRlclxuICogXG4gKiBMb2NhdGVzIHRoZSBTb2NoREIgbmF0aXZlIGxpYnJhcnkgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICogU2VhcmNoIG9yZGVyIG1hdGNoZXMgUHl0aG9uIFNESyBmb3IgY29uc2lzdGVuY3kuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcblxuLyoqXG4gKiBHZXQgdGhlIFJ1c3QgdGFyZ2V0IHRyaXBsZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0VHJpcGxlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xuICAgIGNvbnN0IGFyY2ggPSBvcy5hcmNoKCk7XG5cbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICAgIHJldHVybiBhcmNoID09PSAnYXJtNjQnID8gJ2FhcmNoNjQtYXBwbGUtZGFyd2luJyA6ICd4ODZfNjQtYXBwbGUtZGFyd2luJztcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICAgIHJldHVybiBhcmNoID09PSAnYXJtNjQnID8gJ2FhcmNoNjQtdW5rbm93bi1saW51eC1nbnUnIDogJ3g4Nl82NC11bmtub3duLWxpbnV4LWdudSc7XG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICByZXR1cm4gYXJjaCA9PT0gJ3g2NCcgPyAneDg2XzY0LXBjLXdpbmRvd3MtbXN2YycgOiAnaTY4Ni1wYy13aW5kb3dzLW1zdmMnO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGxhdGZvcm06ICR7cGxhdGZvcm19LyR7YXJjaH1gKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxpYnJhcnkgZmlsZW5hbWUgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtXG4gKi9cbmZ1bmN0aW9uIGdldExpYnJhcnlGaWxlbmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcblxuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgICAgcmV0dXJuICdsaWJzb2NoZGJfc3RvcmFnZS5keWxpYic7XG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgICByZXR1cm4gJ2xpYnNvY2hkYl9zdG9yYWdlLnNvJztcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIHJldHVybiAnc29jaGRiX3N0b3JhZ2UuZGxsJztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHBsYXRmb3JtOiAke3BsYXRmb3JtfWApO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIFNvY2hEQiBuYXRpdmUgbGlicmFyeVxuICogXG4gKiBTZWFyY2ggb3JkZXI6XG4gKiAxLiBTT0NIREJfTElCX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbiAqIDIuIEJ1bmRsZWQgbGlicmFyeSBpbiBwYWNrYWdlIChfYmluL3t0YXJnZXR9LylcbiAqIDMuIERldmVsb3BtZW50IGJ1aWxkICguLi90YXJnZXQvcmVsZWFzZSwgLi4vdGFyZ2V0L2RlYnVnKVxuICogNC4gU3lzdGVtIHBhdGhzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGlicmFyeSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldFRyaXBsZSgpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZ2V0TGlicmFyeUZpbGVuYW1lKCk7XG5cbiAgICAvLyAxLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZVxuICAgIGlmIChwcm9jZXNzLmVudi5TT0NIREJfTElCX1BBVEgpIHtcbiAgICAgICAgY29uc3QgZW52UGF0aCA9IHByb2Nlc3MuZW52LlNPQ0hEQl9MSUJfUEFUSDtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnZQYXRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoUGF0aHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAvLyAyLiBCdW5kbGVkIGluIHBhY2thZ2UgKGZyb20gZGlzdC9janMgb3IgZGlzdC9lc20pXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdfYmluJywgdGFyZ2V0LCBmaWxlbmFtZSksXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdfYmluJywgdGFyZ2V0LCBmaWxlbmFtZSksXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdfYmluJywgdGFyZ2V0LCBmaWxlbmFtZSksXG5cbiAgICAgICAgLy8gMy4gRGV2ZWxvcG1lbnQgcGF0aHMgLSBmcm9tIHByb2plY3Qgcm9vdFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAndGFyZ2V0JywgJ3JlbGVhc2UnLCBmaWxlbmFtZSksXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICd0YXJnZXQnLCAnZGVidWcnLCBmaWxlbmFtZSksXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICd0YXJnZXQnLCAncmVsZWFzZScsIGZpbGVuYW1lKSxcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3RhcmdldCcsICdkZWJ1ZycsIGZpbGVuYW1lKSxcblxuICAgICAgICAvLyBGcm9tIHNvY2hkYiBtb25vcmVwbyAoLi4vLi4vc29jaGRiL3RhcmdldC9yZWxlYXNlKVxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnLi4nLCAnc29jaGRiJywgJ3RhcmdldCcsICdyZWxlYXNlJywgZmlsZW5hbWUpLFxuXG4gICAgICAgIC8vIEFic29sdXRlIHBhdGhzXG4gICAgICAgIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnX2JpbicsIHRhcmdldCwgZmlsZW5hbWUpLFxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3RhcmdldCcsICdyZWxlYXNlJywgZmlsZW5hbWUpLFxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4uJywgJ3RhcmdldCcsICdyZWxlYXNlJywgZmlsZW5hbWUpLFxuICAgIF07XG5cbiAgICAvLyBTZWFyY2ggZm9yIGxpYnJhcnlcbiAgICBmb3IgKGNvbnN0IHNlYXJjaFBhdGggb2Ygc2VhcmNoUGF0aHMpIHtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc2VhcmNoUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoc2VhcmNoUGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBUcnkgc3lzdGVtIHBhdGhzIChMRF9MSUJSQVJZX1BBVEgsIERZTERfTElCUkFSWV9QQVRILCBQQVRIKVxuICAgIGNvbnN0IHN5c3RlbVBhdGhzID0gKHByb2Nlc3MuZW52LkxEX0xJQlJBUllfUEFUSCB8fFxuICAgICAgICBwcm9jZXNzLmVudi5EWUxEX0xJQlJBUllfUEFUSCB8fFxuICAgICAgICBwcm9jZXNzLmVudi5QQVRIIHx8ICcnKS5zcGxpdChwYXRoLmRlbGltaXRlcik7XG5cbiAgICBmb3IgKGNvbnN0IGRpciBvZiBzeXN0ZW1QYXRocykge1xuICAgICAgICBjb25zdCBsaWJQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZW5hbWUpO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhsaWJQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShsaWJQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIFNvY2hEQiBuYXRpdmUgbGlicmFyeSAoJHtmaWxlbmFtZX0pLiBgICtcbiAgICAgICAgYFNlYXJjaGVkIGluOiAke3NlYXJjaFBhdGhzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgYFNldCBTT0NIREJfTElCX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYnVpbGQgdGhlIGxpYnJhcnkuYFxuICAgICk7XG59XG4iXX0=
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1maW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW1iZWRkZWQvZmZpL2xpYnJhcnktZmluZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrREgsa0NBaUVDO0FBakhELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBRXpCOztHQUVHO0FBQ0gsU0FBUyxlQUFlO0lBQ3BCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFdkIsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDN0UsQ0FBQztTQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0lBQ3ZGLENBQUM7U0FBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztJQUM5RSxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxrQkFBa0I7SUFDdkIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRS9CLElBQUksUUFBUSxLQUFLLFFBQVEsRUFB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LEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRyxlQUFlO0tBQ3hFLENBQUM7SUFFRixxQkFBcUI7SUFDckIsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWU7UUFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ1gseUNBQXlDLFFBQVEsS0FBSztRQUN0RCx1RUFBdUU7UUFDdkUsdUdBQXVHO1FBQ3ZHLDBFQUEwRSxDQUM3RSxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRkZJIExpYnJhcnkgRmluZGVyXG4gKiBcbiAqIExvY2F0ZXMgdGhlIFNvY2hEQiBuYXRpdmUgbGlicmFyeSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKiBTZWFyY2ggb3JkZXIgbWF0Y2hlcyBQeXRob24gU0RLIGZvciBjb25zaXN0ZW5jeS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuXG4vKipcbiAqIEdldCB0aGUgUnVzdCB0YXJnZXQgdHJpcGxlIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybVxuICovXG5mdW5jdGlvbiBnZXRUYXJnZXRUcmlwbGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7XG4gICAgY29uc3QgYXJjaCA9IG9zLmFyY2goKTtcblxuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgICAgcmV0dXJuIGFyY2ggPT09ICdhcm02NCcgPyAnYWFyY2g2NC1hcHBsZS1kYXJ3aW4nIDogJ3g4Nl82NC1hcHBsZS1kYXJ3aW4nO1xuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgICAgcmV0dXJuIGFyY2ggPT09ICdhcm02NCcgPyAnYWFyY2g2NC11bmtub3duLWxpbnV4LWdudScgOiAneDg2XzY0LXVua25vd24tbGludXgtZ251JztcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIHJldHVybiBhcmNoID09PSAneDY0JyA/ICd4ODZfNjQtcGMtd2luZG93cy1tc3ZjJyA6ICdpNjg2LXBjLXdpbmRvd3MtbXN2Yyc7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwbGF0Zm9ybTogJHtwbGF0Zm9ybX0vJHthcmNofWApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbGlicmFyeSBmaWxlbmFtZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm1cbiAqL1xuZnVuY3Rpb24gZ2V0TGlicmFyeUZpbGVuYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xuXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgICByZXR1cm4gJ2xpYnNvY2hkYl9zdG9yYWdlLmR5bGliJztcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICAgIHJldHVybiAnbGlic29jaGRiX3N0b3JhZ2Uuc28nO1xuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgcmV0dXJuICdzb2NoZGJfc3RvcmFnZS5kbGwnO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGxhdGZvcm06ICR7cGxhdGZvcm19YCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgU29jaERCIG5hdGl2ZSBsaWJyYXJ5XG4gKiBcbiAqIFNlYXJjaCBvcmRlcjpcbiAqIDEuIFNPQ0hEQl9MSUJfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogMi4gQnVuZGxlZCBsaWJyYXJ5IGluIHBhY2thZ2UgKF9iaW4ve3RhcmdldH0vKVxuICogMy4gRGV2ZWxvcG1lbnQgYnVpbGQgKC4uL3RhcmdldC9yZWxlYXNlLCAuLi90YXJnZXQvZGVidWcpXG4gKiA0LiBTeXN0ZW0gcGF0aHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMaWJyYXJ5KCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0VHJpcGxlKCk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBnZXRMaWJyYXJ5RmlsZW5hbWUoKTtcblxuICAgIC8vIDEuIEVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlXG4gICAgaWYgKHByb2Nlc3MuZW52LlNPQ0hEQl9MSUJfUEFUSCkge1xuICAgICAgICBjb25zdCBlbnZQYXRoID0gcHJvY2Vzcy5lbnYuU09DSERCX0xJQl9QQVRIO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hQYXRoczogc3RyaW5nW10gPSBbXG4gICAgICAgIC8vIDIuIEJ1bmRsZWQgaW4gcGFja2FnZSAoZnJvbSBkaXN0L2NqcyBvciBkaXN0L2VzbSlcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ19iaW4nLCB0YXJnZXQsIGZpbGVuYW1lKSxcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ19iaW4nLCB0YXJnZXQsIGZpbGVuYW1lKSxcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ19iaW4nLCB0YXJnZXQsIGZpbGVuYW1lKSxcblxuICAgICAgICAvLyAzLiBEZXZlbG9wbWVudCBwYXRocyAtIGZyb20gcHJvamVjdCByb290XG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICd0YXJnZXQnLCAncmVsZWFzZScsIGZpbGVuYW1lKSxcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ3RhcmdldCcsICdkZWJ1ZycsIGZpbGVuYW1lKSxcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3RhcmdldCcsICdyZWxlYXNlJywgZmlsZW5hbWUpLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAndGFyZ2V0JywgJ2RlYnVnJywgZmlsZW5hbWUpLFxuXG4gICAgICAgIC8vIEZyb20gc29jaGRiIG1vbm9yZXBvICguLi8uLi9zb2NoZGIvdGFyZ2V0L3JlbGVhc2UpXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICcuLicsICdzb2NoZGInLCAndGFyZ2V0JywgJ3JlbGVhc2UnLCBmaWxlbmFtZSksXG5cbiAgICAgICAgLy8gQWJzb2x1dGUgcGF0aHNcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdfYmluJywgdGFyZ2V0LCBmaWxlbmFtZSksXG4gICAgICAgIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAndGFyZ2V0JywgJ3JlbGVhc2UnLCBmaWxlbmFtZSksXG4gICAgICAgIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi4nLCAndGFyZ2V0JywgJ3JlbGVhc2UnLCBmaWxlbmFtZSksXG5cbiAgICAgICAgLy8gNC4gU3lzdGVtLXdpZGUgaW5zdGFsbGF0aW9uIHBhdGhzIChubyBtYW51YWwgc2V0dXAgbmVlZGVkKVxuICAgICAgICAnL3Vzci9sb2NhbC9saWIvJyArIGZpbGVuYW1lLFxuICAgICAgICAnL3Vzci9saWIvJyArIGZpbGVuYW1lLFxuICAgICAgICAnL29wdC9ob21lYnJldy9saWIvJyArIGZpbGVuYW1lLCAgLy8gbWFjT1MgQXBwbGUgU2lsaWNvblxuICAgICAgICAnL29wdC9sb2NhbC9saWIvJyArIGZpbGVuYW1lLCAgICAgIC8vIE1hY1BvcnRzXG4gICAgICAgIHBhdGguam9pbihvcy5ob21lZGlyKCksICcuc29jaGRiJywgJ2xpYicsIGZpbGVuYW1lKSwgIC8vIFVzZXIgaW5zdGFsbFxuICAgIF07XG5cbiAgICAvLyBTZWFyY2ggZm9yIGxpYnJhcnlcbiAgICBmb3IgKGNvbnN0IHNlYXJjaFBhdGggb2Ygc2VhcmNoUGF0aHMpIHtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc2VhcmNoUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoc2VhcmNoUGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBUcnkgc3lzdGVtIHBhdGhzIChMRF9MSUJSQVJZX1BBVEgsIERZTERfTElCUkFSWV9QQVRILCBQQVRIKVxuICAgIGNvbnN0IHN5c3RlbVBhdGhzID0gKHByb2Nlc3MuZW52LkxEX0xJQlJBUllfUEFUSCB8fFxuICAgICAgICBwcm9jZXNzLmVudi5EWUxEX0xJQlJBUllfUEFUSCB8fFxuICAgICAgICBwcm9jZXNzLmVudi5QQVRIIHx8ICcnKS5zcGxpdChwYXRoLmRlbGltaXRlcik7XG5cbiAgICBmb3IgKGNvbnN0IGRpciBvZiBzeXN0ZW1QYXRocykge1xuICAgICAgICBjb25zdCBsaWJQYXRoID0gcGF0aC5qb2luKGRpciwgZmlsZW5hbWUpO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhsaWJQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShsaWJQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIFNvY2hEQiBuYXRpdmUgbGlicmFyeSAoJHtmaWxlbmFtZX0pLiBgICtcbiAgICAgICAgYFNlYXJjaGVkIGluIHBhY2thZ2UgcGF0aHMsIGRldmVsb3BtZW50IGJ1aWxkcywgYW5kIHN5c3RlbSBsb2NhdGlvbnMuIGAgK1xuICAgICAgICBgSW5zdGFsbCB3aXRoOiBicmV3IGluc3RhbGwgc29jaGRiIChtYWNPUykgb3IgZG93bmxvYWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc29jaGRiL3NvY2hkYi9yZWxlYXNlcyBgICtcbiAgICAgICAgYEFsdGVybmF0aXZlbHksIHNldCBTT0NIREJfTElCX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gbGlicmFyeSBwYXRoLmBcbiAgICApO1xufVxuIl19
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* No server required.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.EmbeddedTransaction = exports.EmbeddedDatabase = void 0;
|
|
9
|
+
exports.HnswBindings = exports.HnswIndex = exports.EmbeddedTransaction = exports.EmbeddedDatabase = void 0;
|
|
10
10
|
var database_1 = require("./database");
|
|
11
11
|
Object.defineProperty(exports, "EmbeddedDatabase", { enumerable: true, get: function () { return database_1.EmbeddedDatabase; } });
|
|
12
12
|
var transaction_1 = require("./transaction");
|
|
13
13
|
Object.defineProperty(exports, "EmbeddedTransaction", { enumerable: true, get: function () { return transaction_1.EmbeddedTransaction; } });
|
|
14
|
-
|
|
14
|
+
var hnsw_bindings_1 = require("./ffi/hnsw-bindings");
|
|
15
|
+
Object.defineProperty(exports, "HnswIndex", { enumerable: true, get: function () { return hnsw_bindings_1.HnswIndex; } });
|
|
16
|
+
Object.defineProperty(exports, "HnswBindings", { enumerable: true, get: function () { return hnsw_bindings_1.HnswBindings; } });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZW1iZWRkZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFFSCx1Q0FBc0U7QUFBN0QsNEdBQUEsZ0JBQWdCLE9BQUE7QUFDekIsNkNBQW9EO0FBQTNDLGtIQUFBLG1CQUFtQixPQUFBO0FBQzVCLHFEQUF3RjtBQUEvRSwwR0FBQSxTQUFTLE9BQUE7QUFBYyw2R0FBQSxZQUFZLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVtYmVkZGVkIE1vZGUgLSBGRkkgU3VwcG9ydFxuICogXG4gKiBEaXJlY3QgRkZJIGJpbmRpbmdzIHRvIFNvY2hEQiBuYXRpdmUgbGlicmFyeS5cbiAqIE5vIHNlcnZlciByZXF1aXJlZC5cbiAqL1xuXG5leHBvcnQgeyBFbWJlZGRlZERhdGFiYXNlLCBFbWJlZGRlZERhdGFiYXNlQ29uZmlnIH0gZnJvbSAnLi9kYXRhYmFzZSc7XG5leHBvcnQgeyBFbWJlZGRlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBIbnN3SW5kZXgsIEhuc3dDb25maWcsIEhuc3dCaW5kaW5ncywgU2VhcmNoUmVzdWx0IH0gZnJvbSAnLi9mZmkvaG5zdy1iaW5kaW5ncyc7XG4iXX0=
|
package/dist/esm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* SochDB Node.js SDK v0.4.
|
|
3
|
+
* SochDB Node.js SDK v0.4.2
|
|
4
4
|
*
|
|
5
5
|
* Dual-mode architecture: Embedded (FFI) + Server (gRPC/IPC)
|
|
6
6
|
*
|
|
@@ -37,17 +37,20 @@
|
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.GrpcClient = exports.SplitBrainError = exports.EpochMismatchError = exports.LockTimeoutError = exports.DatabaseLockedError = exports.LockError = exports.ErrorCode = exports.DatabaseError = exports.ProtocolError = exports.TransactionError = exports.ConnectionError = exports.SochDBError = exports.Query = exports.FormatConversionError = exports.FormatCapabilities = exports.CanonicalFormat = exports.ContextFormat = exports.WireFormat = exports.IpcClient = exports.SochDBClient = exports.NamespacePolicy = exports.AllowedSet = exports.HybridRetriever = exports.Consolidator = exports.ExtractionPipeline = exports.createContextBuilder = exports.TruncationStrategy = exports.ContextOutputFormat = exports.ContextQueryBuilder = exports.SemanticCache = exports.createQueue = exports.TaskState = exports.PriorityQueue = exports.CollectionExistsError = exports.CollectionNotFoundError = exports.NamespaceExistsError = exports.NamespaceNotFoundError = exports.DistanceMetric = exports.Collection = exports.Namespace = exports.Database = exports.EmbeddedTransaction = exports.EmbeddedDatabase = exports.VERSION = void 0;
|
|
40
|
+
exports.GrpcClient = exports.SplitBrainError = exports.EpochMismatchError = exports.LockTimeoutError = exports.DatabaseLockedError = exports.LockError = exports.ErrorCode = exports.DatabaseError = exports.ProtocolError = exports.TransactionError = exports.ConnectionError = exports.SochDBError = exports.Query = exports.FormatConversionError = exports.FormatCapabilities = exports.CanonicalFormat = exports.ContextFormat = exports.WireFormat = exports.IpcClient = exports.SochDBClient = exports.NamespacePolicy = exports.AllowedSet = exports.HybridRetriever = exports.Consolidator = exports.ExtractionPipeline = exports.createContextBuilder = exports.TruncationStrategy = exports.ContextOutputFormat = exports.ContextQueryBuilder = exports.SemanticCache = exports.createQueue = exports.TaskState = exports.PriorityQueue = exports.CollectionExistsError = exports.CollectionNotFoundError = exports.NamespaceExistsError = exports.NamespaceNotFoundError = exports.DistanceMetric = exports.Collection = exports.Namespace = exports.Database = exports.HnswBindings = exports.HnswIndex = exports.EmbeddedTransaction = exports.EmbeddedDatabase = exports.VERSION = void 0;
|
|
41
41
|
// Version
|
|
42
|
-
exports.VERSION = '0.4.
|
|
42
|
+
exports.VERSION = '0.4.2';
|
|
43
43
|
// Embedded mode (FFI) - NEW
|
|
44
44
|
var embedded_1 = require("./embedded");
|
|
45
45
|
Object.defineProperty(exports, "EmbeddedDatabase", { enumerable: true, get: function () { return embedded_1.EmbeddedDatabase; } });
|
|
46
46
|
var embedded_2 = require("./embedded");
|
|
47
47
|
Object.defineProperty(exports, "EmbeddedTransaction", { enumerable: true, get: function () { return embedded_2.EmbeddedTransaction; } });
|
|
48
|
-
// Embedded mode (FFI) - Convenience alias
|
|
49
48
|
var embedded_3 = require("./embedded");
|
|
50
|
-
Object.defineProperty(exports, "
|
|
49
|
+
Object.defineProperty(exports, "HnswIndex", { enumerable: true, get: function () { return embedded_3.HnswIndex; } });
|
|
50
|
+
Object.defineProperty(exports, "HnswBindings", { enumerable: true, get: function () { return embedded_3.HnswBindings; } });
|
|
51
|
+
// Embedded mode (FFI) - Convenience alias
|
|
52
|
+
var embedded_4 = require("./embedded");
|
|
53
|
+
Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return embedded_4.EmbeddedDatabase; } });
|
|
51
54
|
// Namespace API (v0.4.1)
|
|
52
55
|
var namespace_1 = require("./namespace");
|
|
53
56
|
Object.defineProperty(exports, "Namespace", { enumerable: true, get: function () { return namespace_1.Namespace; } });
|
|
@@ -109,4 +112,4 @@ Object.defineProperty(exports, "SplitBrainError", { enumerable: true, get: funct
|
|
|
109
112
|
// Convenience alias
|
|
110
113
|
var grpc_client_2 = require("./grpc-client");
|
|
111
114
|
Object.defineProperty(exports, "GrpcClient", { enumerable: true, get: function () { return grpc_client_2.SochDBClient; } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7OztBQUVILFVBQVU7QUFDRyxRQUFBLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFFL0IsNEJBQTRCO0FBQzVCLHVDQUFzRTtBQUE3RCw0R0FBQSxnQkFBZ0IsT0FBQTtBQUN6Qix1Q0FBaUQ7QUFBeEMsK0dBQUEsbUJBQW1CLE9BQUE7QUFDNUIsdUNBQWlFO0FBQXhELHFHQUFBLFNBQVMsT0FBQTtBQUFjLHdHQUFBLFlBQVksT0FBQTtBQUc1QywwQ0FBMEM7QUFDMUMsdUNBQTBEO0FBQWpELG9HQUFBLGdCQUFnQixPQUFZO0FBRXJDLHlCQUF5QjtBQUN6Qix5Q0FRcUI7QUFQbkIsc0dBQUEsU0FBUyxPQUFBO0FBQ1QsdUdBQUEsVUFBVSxPQUFBO0FBQ1YsMkdBQUEsY0FBYyxPQUFBO0FBQ2QsbUhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsaUhBQUEsb0JBQW9CLE9BQUE7QUFDcEIsb0hBQUEsdUJBQXVCLE9BQUE7QUFDdkIsa0hBQUEscUJBQXFCLE9BQUE7QUFTdkIscUJBQXFCO0FBQ3JCLGlDQUlpQjtBQUhmLHNHQUFBLGFBQWEsT0FBQTtBQUNiLGtHQUFBLFNBQVMsT0FBQTtBQUNULG9HQUFBLFdBQVcsT0FBQTtBQVNiLDBCQUEwQjtBQUMxQixtREFFMEI7QUFEeEIsK0dBQUEsYUFBYSxPQUFBO0FBUWYsMkJBQTJCO0FBQzNCLHFEQUsyQjtBQUp6QixzSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixzSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixxSEFBQSxrQkFBa0IsT0FBQTtBQUNsQix1SEFBQSxvQkFBb0IsT0FBQTtBQU10Qix5QkFBeUI7QUFDekIsbUNBTWtCO0FBTGhCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHNHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLGVBQWUsT0FBQTtBQUNmLG9HQUFBLFVBQVUsT0FBQTtBQUNWLHlHQUFBLGVBQWUsT0FBQTtBQWlCakIseUJBQXlCO0FBQ3pCLDZDQUE2QztBQUFwQywyR0FBQSxZQUFZLE9BQUE7QUFRckIsMkNBQXlDO0FBQWhDLHVHQUFBLFNBQVMsT0FBQTtBQUVsQixtQkFBbUI7QUFDbkIsbUNBTWtCO0FBTGhCLG9HQUFBLFVBQVUsT0FBQTtBQUNWLHVHQUFBLGFBQWEsT0FBQTtBQUNiLHlHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLHFCQUFxQixPQUFBO0FBR3ZCLG1CQUFtQjtBQUNuQixpQ0FBZ0M7QUFBdkIsOEZBQUEsS0FBSyxPQUFBO0FBR2QsbUNBYWtCO0FBWmhCLHFHQUFBLFdBQVcsT0FBQTtBQUNYLHlHQUFBLGVBQWUsT0FBQTtBQUNmLDBHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHVHQUFBLGFBQWEsT0FBQTtBQUNiLHVHQUFBLGFBQWEsT0FBQTtBQUNiLHVCQUF1QjtBQUN2QixtR0FBQSxTQUFTLE9BQUE7QUFDVCxtR0FBQSxTQUFTLE9BQUE7QUFDVCw2R0FBQSxtQkFBbUIsT0FBQTtBQUNuQiwwR0FBQSxnQkFBZ0IsT0FBQTtBQUNoQiw0R0FBQSxrQkFBa0IsT0FBQTtBQUNsQix5R0FBQSxlQUFlLE9BQUE7QUFHakIsb0JBQW9CO0FBQ3BCLDZDQUEyRDtBQUFsRCx5R0FBQSxZQUFZLE9BQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNvY2hEQiBOb2RlLmpzIFNESyB2MC40LjJcbiAqIFxuICogRHVhbC1tb2RlIGFyY2hpdGVjdHVyZTogRW1iZWRkZWQgKEZGSSkgKyBTZXJ2ZXIgKGdSUEMvSVBDKVxuICogXG4gKiBBcmNoaXRlY3R1cmU6IEZsZXhpYmxlIERlcGxveW1lbnRcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFRoaXMgU0RLIHN1cHBvcnRzIEJPVEggbW9kZXM6XG4gKiBcbiAqIDEuIEVtYmVkZGVkIE1vZGUgKEZGSSkgLSBGb3Igc2luZ2xlLXByb2Nlc3MgYXBwczpcbiAqICAgIC0gRGlyZWN0IEZGSSBiaW5kaW5ncyB0byBSdXN0IGxpYnJhcmllc1xuICogICAgLSBObyBzZXJ2ZXIgcmVxdWlyZWQgLSBqdXN0IG5wbSBpbnN0YWxsIGFuZCBydW5cbiAqICAgIC0gQmVzdCBmb3I6IExvY2FsIGRldmVsb3BtZW50LCBzaW1wbGUgYXBwc1xuICogXG4gKiAyLiBTZXJ2ZXIgTW9kZSAoZ1JQQy9JUEMpIC0gRm9yIGRpc3RyaWJ1dGVkIHN5c3RlbXM6XG4gKiAgICAtIFRoaW4gY2xpZW50IGNvbm5lY3RpbmcgdG8gc29jaGRiLWdycGMgc2VydmVyXG4gKiAgICAtIEJlc3QgZm9yOiBQcm9kdWN0aW9uLCBtdWx0aS1sYW5ndWFnZSwgc2NhbGFiaWxpdHlcbiAqIFxuICogQGV4YW1wbGUgRW1iZWRkZWQgTW9kZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRGF0YWJhc2UgfSBmcm9tICdAc29jaGRiL3NvY2hkYic7XG4gKiBcbiAqIC8vIERpcmVjdCBGRkkgLSBubyBzZXJ2ZXIgbmVlZGVkXG4gKiBjb25zdCBkYiA9IGF3YWl0IERhdGFiYXNlLm9wZW4oJy4vbXlkYicpO1xuICogYXdhaXQgZGIucHV0KEJ1ZmZlci5mcm9tKCdrZXknKSwgQnVmZmVyLmZyb20oJ3ZhbHVlJykpO1xuICogYXdhaXQgZGIuY2xvc2UoKTtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZSBTZXJ2ZXIgTW9kZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU29jaERCQ2xpZW50IH0gZnJvbSAnQHNvY2hkYi9zb2NoZGInO1xuICogXG4gKiAvLyBDb25uZWN0IHRvIHNlcnZlclxuICogY29uc3QgY2xpZW50ID0gbmV3IFNvY2hEQkNsaWVudCh7IGFkZHJlc3M6ICdsb2NhbGhvc3Q6NTAwNTEnIH0pO1xuICogYXdhaXQgY2xpZW50LnB1dEt2KCdrZXknLCBCdWZmZXIuZnJvbSgndmFsdWUnKSk7XG4gKiBgYGBcbiAqL1xuXG4vLyBWZXJzaW9uXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9ICcwLjQuMic7XG5cbi8vIEVtYmVkZGVkIG1vZGUgKEZGSSkgLSBORVdcbmV4cG9ydCB7IEVtYmVkZGVkRGF0YWJhc2UsIEVtYmVkZGVkRGF0YWJhc2VDb25maWcgfSBmcm9tICcuL2VtYmVkZGVkJztcbmV4cG9ydCB7IEVtYmVkZGVkVHJhbnNhY3Rpb24gfSBmcm9tICcuL2VtYmVkZGVkJztcbmV4cG9ydCB7IEhuc3dJbmRleCwgSG5zd0NvbmZpZywgSG5zd0JpbmRpbmdzIH0gZnJvbSAnLi9lbWJlZGRlZCc7XG5leHBvcnQgeyBTZWFyY2hSZXN1bHQgYXMgSG5zd1NlYXJjaFJlc3VsdCB9IGZyb20gJy4vZW1iZWRkZWQnO1xuXG4vLyBFbWJlZGRlZCBtb2RlIChGRkkpIC0gQ29udmVuaWVuY2UgYWxpYXNcbmV4cG9ydCB7IEVtYmVkZGVkRGF0YWJhc2UgYXMgRGF0YWJhc2UgfSBmcm9tICcuL2VtYmVkZGVkJztcblxuLy8gTmFtZXNwYWNlIEFQSSAodjAuNC4xKVxuZXhwb3J0IHtcbiAgTmFtZXNwYWNlLFxuICBDb2xsZWN0aW9uLFxuICBEaXN0YW5jZU1ldHJpYyxcbiAgTmFtZXNwYWNlTm90Rm91bmRFcnJvcixcbiAgTmFtZXNwYWNlRXhpc3RzRXJyb3IsXG4gIENvbGxlY3Rpb25Ob3RGb3VuZEVycm9yLFxuICBDb2xsZWN0aW9uRXhpc3RzRXJyb3IsXG59IGZyb20gJy4vbmFtZXNwYWNlJztcbmV4cG9ydCB0eXBlIHtcbiAgTmFtZXNwYWNlQ29uZmlnLFxuICBDb2xsZWN0aW9uQ29uZmlnLFxuICBTZWFyY2hSZXF1ZXN0LFxuICBTZWFyY2hSZXN1bHQgYXMgTmFtZXNwYWNlU2VhcmNoUmVzdWx0LFxufSBmcm9tICcuL25hbWVzcGFjZSc7XG5cbi8vIFF1ZXVlIEFQSSAodjAuNC4xKVxuZXhwb3J0IHtcbiAgUHJpb3JpdHlRdWV1ZSxcbiAgVGFza1N0YXRlLFxuICBjcmVhdGVRdWV1ZSxcbn0gZnJvbSAnLi9xdWV1ZSc7XG5leHBvcnQgdHlwZSB7XG4gIFF1ZXVlQ29uZmlnLFxuICBRdWV1ZUtleSxcbiAgVGFzayxcbiAgUXVldWVTdGF0cyxcbn0gZnJvbSAnLi9xdWV1ZSc7XG5cbi8vIFNlbWFudGljIENhY2hlICh2MC40LjEpXG5leHBvcnQge1xuICBTZW1hbnRpY0NhY2hlLFxufSBmcm9tICcuL3NlbWFudGljLWNhY2hlJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2FjaGVFbnRyeSxcbiAgQ2FjaGVIaXQsXG4gIENhY2hlU3RhdHMsXG59IGZyb20gJy4vc2VtYW50aWMtY2FjaGUnO1xuXG4vLyBDb250ZXh0IEJ1aWxkZXIgKHYwLjQuMSlcbmV4cG9ydCB7XG4gIENvbnRleHRRdWVyeUJ1aWxkZXIsXG4gIENvbnRleHRPdXRwdXRGb3JtYXQsXG4gIFRydW5jYXRpb25TdHJhdGVneSxcbiAgY3JlYXRlQ29udGV4dEJ1aWxkZXIsXG59IGZyb20gJy4vY29udGV4dC1idWlsZGVyJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29udGV4dFJlc3VsdCxcbn0gZnJvbSAnLi9jb250ZXh0LWJ1aWxkZXInO1xuXG4vLyBNZW1vcnkgU3lzdGVtICh2MC40LjIpXG5leHBvcnQge1xuICBFeHRyYWN0aW9uUGlwZWxpbmUsXG4gIENvbnNvbGlkYXRvcixcbiAgSHlicmlkUmV0cmlldmVyLFxuICBBbGxvd2VkU2V0LFxuICBOYW1lc3BhY2VQb2xpY3ksXG59IGZyb20gJy4vbWVtb3J5JztcbmV4cG9ydCB0eXBlIHtcbiAgRW50aXR5LFxuICBSZWxhdGlvbixcbiAgQXNzZXJ0aW9uLFxuICBSYXdBc3NlcnRpb24sXG4gIENhbm9uaWNhbEZhY3QsXG4gIEV4dHJhY3Rpb25SZXN1bHQsXG4gIEV4dHJhY3Rpb25TY2hlbWEsXG4gIENvbnNvbGlkYXRpb25Db25maWcsXG4gIFJldHJpZXZhbENvbmZpZyxcbiAgUmV0cmlldmFsUmVzdWx0LFxuICBSZXRyaWV2YWxSZXNwb25zZSxcbiAgTmFtZXNwYWNlR3JhbnQsXG59IGZyb20gJy4vbWVtb3J5JztcblxuLy8gU2VydmVyIG1vZGUgKGdSUEMvSVBDKVxuZXhwb3J0IHsgU29jaERCQ2xpZW50IH0gZnJvbSAnLi9ncnBjLWNsaWVudCc7XG5leHBvcnQgdHlwZSB7XG4gIFNlYXJjaFJlc3VsdCxcbiAgRG9jdW1lbnQsXG4gIEdyYXBoTm9kZSxcbiAgR3JhcGhFZGdlLFxufSBmcm9tICcuL2dycGMtY2xpZW50JztcblxuZXhwb3J0IHsgSXBjQ2xpZW50IH0gZnJvbSAnLi9pcGMtY2xpZW50JztcblxuLy8gRm9ybWF0IHV0aWxpdGllc1xuZXhwb3J0IHtcbiAgV2lyZUZvcm1hdCxcbiAgQ29udGV4dEZvcm1hdCxcbiAgQ2Fub25pY2FsRm9ybWF0LFxuICBGb3JtYXRDYXBhYmlsaXRpZXMsXG4gIEZvcm1hdENvbnZlcnNpb25FcnJvcixcbn0gZnJvbSAnLi9mb3JtYXQnO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zXG5leHBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuZXhwb3J0IHR5cGUgeyBRdWVyeVJlc3VsdCB9IGZyb20gJy4vcXVlcnknO1xuXG5leHBvcnQge1xuICBTb2NoREJFcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBUcmFuc2FjdGlvbkVycm9yLFxuICBQcm90b2NvbEVycm9yLFxuICBEYXRhYmFzZUVycm9yLFxuICAvLyBMb2NrIGVycm9ycyAodjAuNC4xKVxuICBFcnJvckNvZGUsXG4gIExvY2tFcnJvcixcbiAgRGF0YWJhc2VMb2NrZWRFcnJvcixcbiAgTG9ja1RpbWVvdXRFcnJvcixcbiAgRXBvY2hNaXNtYXRjaEVycm9yLFxuICBTcGxpdEJyYWluRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzJztcblxuLy8gQ29udmVuaWVuY2UgYWxpYXNcbmV4cG9ydCB7IFNvY2hEQkNsaWVudCBhcyBHcnBjQ2xpZW50IH0gZnJvbSAnLi9ncnBjLWNsaWVudCc7XG4iXX0=
|